diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 32a1ce262695..f8f9b8f0afbe 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 - 1.8.2 - 1.8.1 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 3e21436c1a98..c29ace1224f8 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,10 +23,12 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index fcbf4b8884fe..c3320e67de32 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,10 +23,12 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000000..874ebdd5906a --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,48 @@ +name: Docs +on: + push: + branches: + - master + +jobs: + deploy: + runs-on: ubuntu-latest + permissions: + contents: write + pages: write + id-token: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install latest mdbook + run: | + tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') + url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" + mkdir mdbook + curl -sSL $url | tar -xz --directory=./mdbook + echo `pwd`/mdbook >> $GITHUB_PATH + - name: Build Book + run: | + cd docs + mdbook build + - name: Check if Pages is enabled + uses: octokit/request-action@v2.x + id: check_pages + continue-on-error: true + with: + route: GET /repos/{repo}/pages + repo: ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Setup Pages + uses: actions/configure-pages@v4 + if: steps.check_pages.outcome == 'success' + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: 'docs/book' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + if: steps.check_pages.outcome == 'success' diff --git a/.gitignore b/.gitignore index b1efb034b839..ba80433cf721 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,3 @@ prefabs.json *.js src/data/map_group_count.h tools/trainerproc/trainerproc -tools/poryscript diff --git a/CHANGELOG.md b/CHANGELOG.md index f513818cbb6e..84331cb4e39b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,48 +1,49 @@ # Pokeemerald-Expansion Changelogs ## 1.8.x -- ### [Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - Bugfix Release 🧹 -- ### [Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - Bugfix Release 🧹 -- ### [Version 1.8.2](docs/changelogs/1.8.x/1.8.2.md) - Bugfix Release 🧹 -- ### [Version 1.8.1](docs/changelogs/1.8.x/1.8.1.md) - HOTFIX Release 🔥 -- ### [Version 1.8.0](docs/changelogs/1.8.x/1.8.0.md) - Feature Release ✨ +- **[Version 1.8.5](docs/changelogs/1.8.x/1.8.5.md) - 🧹 Bugfix Release** +- **[Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - 🧹 Bugfix Release** +- **[Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - 🧹 Bugfix Release** +- **[Version 1.8.2](docs/changelogs/1.8.x/1.8.2.md) - 🧹 Bugfix Release** +- **[Version 1.8.1](docs/changelogs/1.8.x/1.8.1.md) - 🔥 HOTFIX Release** +- **[Version 1.8.0](docs/changelogs/1.8.x/1.8.0.md) - ✨ Feature Release** ## 1.7.x -- ### [Version 1.7.4](docs/changelogs/1.7.x/1.7.4.md) - Bugfix Release 🧹 -- ### [Version 1.7.3](docs/changelogs/1.7.x/1.7.3.md) - Bugfix Release 🧹 -- ### [Version 1.7.2](docs/changelogs/1.7.x/1.7.2.md) - Bugfix Release 🧹 -- ### [Version 1.7.1](docs/changelogs/1.7.x/1.7.1.md) - Bugfix Release 🧹 -- ### [Version 1.7.0](docs/changelogs/1.7.x/1.7.0.md) - Feature Release ✨ +- **[Version 1.7.4](docs/changelogs/1.7.x/1.7.4.md) - 🧹 Bugfix Release** +- **[Version 1.7.3](docs/changelogs/1.7.x/1.7.3.md) - 🧹 Bugfix Release** +- **[Version 1.7.2](docs/changelogs/1.7.x/1.7.2.md) - 🧹 Bugfix Release** +- **[Version 1.7.1](docs/changelogs/1.7.x/1.7.1.md) - 🧹 Bugfix Release** +- **[Version 1.7.0](docs/changelogs/1.7.x/1.7.0.md) - ✨ Feature Release** ## 1.6.x -- ### [Version 1.6.2](docs/changelogs/1.6.x/1.6.2.md) - Bugfix Release 🧹 -- ### [Version 1.6.1](docs/changelogs/1.6.x/1.6.1.md) - HOTFIX Release 🔥 -- ### [Version 1.6.0](docs/changelogs/1.6.x/1.6.0.md) - Feature Release ✨ +- **[Version 1.6.2](docs/changelogs/1.6.x/1.6.2.md) - 🧹 Bugfix Release** +- **[Version 1.6.1](docs/changelogs/1.6.x/1.6.1.md) - 🔥 HOTFIX Release** +- **[Version 1.6.0](docs/changelogs/1.6.x/1.6.0.md) - ✨ Feature Release** ## 1.5.x -- ### [Version 1.5.3](docs/changelogs/1.5.x/1.5.3.md) - HOTFIX Release 🔥 -- ### [Version 1.5.2](docs/changelogs/1.5.x/1.5.2.md) - Bugfix Release 🧹 -- ### [Version 1.5.1](docs/changelogs/1.5.x/1.5.1.md) - Bugfix Release 🧹 -- ### [Version 1.5.0](docs/changelogs/1.5.x/1.5.0.md) - Feature Release ✨ +- **[Version 1.5.3](docs/changelogs/1.5.x/1.5.3.md) - 🔥 HOTFIX Release** +- **[Version 1.5.2](docs/changelogs/1.5.x/1.5.2.md) - 🧹 Bugfix Release** +- **[Version 1.5.1](docs/changelogs/1.5.x/1.5.1.md) - 🧹 Bugfix Release** +- **[Version 1.5.0](docs/changelogs/1.5.x/1.5.0.md) - ✨ Feature Release** ## 1.4.x -- ### [Version 1.4.3](docs/changelogs/1.4.x/1.4.3.md) - Bugfix Release 🧹 -- ### [Version 1.4.2](docs/changelogs/1.4.x/1.4.2.md) - Bugfix Release 🧹 -- ### [Version 1.4.1](docs/changelogs/1.4.x/1.4.1.md) - HOTFIX Release 🔥 -- ### [Version 1.4.0](docs/changelogs/1.4.x/1.4.0.md) - Feature Release ✨ +- **[Version 1.4.3](docs/changelogs/1.4.x/1.4.3.md) - 🧹 Bugfix Release** +- **[Version 1.4.2](docs/changelogs/1.4.x/1.4.2.md) - 🧹 Bugfix Release** +- **[Version 1.4.1](docs/changelogs/1.4.x/1.4.1.md) - 🔥 HOTFIX Release** +- **[Version 1.4.0](docs/changelogs/1.4.x/1.4.0.md) - ✨ Feature Release** ## 1.3.x -- ### [Version 1.3.0](docs/changelogs/1.3.x/1.3.0.md) - Feature Release ✨ +- **[Version 1.3.0](docs/changelogs/1.3.x/1.3.0.md) - ✨ Feature Release** ## 1.2.x -- ### [Version 1.2.0](docs/changelogs/1.2.x/1.2.0.md) - Feature Release ✨ +- **[Version 1.2.0](docs/changelogs/1.2.x/1.2.0.md) - ✨ Feature Release** ## 1.1.x -- ### [Version 1.1.1](docs/changelogs/1.1.x/1.1.1.md) - Bugfix Release 🧹 -- ### [Version 1.1.0](docs/changelogs/1.1.x/1.1.0.md) - Feature Release ✨ +- **[Version 1.1.1](docs/changelogs/1.1.x/1.1.1.md) - 🧹 Bugfix Release** +- **[Version 1.1.0](docs/changelogs/1.1.x/1.1.0.md) - ✨ Feature Release** ## 1.0.x -- ### [Version 1.0.0](docs/changelogs/1.0.x/1.0.0.md) - Feature Release ✨ +- **[Version 1.0.0](docs/changelogs/1.0.x/1.0.0.md) - ✨ Feature Release** ## Pre-1.0.x: -- ### [Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - Retroactive Version 🦕 +- **[Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - 🦕 Retroactive Version** diff --git a/INSTALL.md b/INSTALL.md index aaa5472296f9..cc6eba97efb5 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,6 +1,6 @@ # Instructions -These instructions explain how to set up the tools required to build **pokeemerald**, which assembles the source files into a ROM. +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. @@ -27,10 +27,10 @@ All of the Windows instructions assume that the default drive is C:\\. If this d **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**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). +WSL1 is the preferred terminal to build **pokeemerald Expansion**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). - If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#Installing-WSL1). - Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#Setting-up-WSL1). -- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). +- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald Expansion (WSL1)](#Choosing-where-to-store-pokeemerald-expansion-WSL1). ### Installing WSL1 1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell). @@ -79,7 +79,7 @@ Some tips before proceeding: > Note: If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md) from here. -4. Certain packages are required to build pokeemerald. Install these packages by running the following command: +4. Certain packages are required to build pokeemerald Expansion. Install these packages by running the following command: ```bash sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev @@ -89,7 +89,7 @@ Some tips before proceeding: > 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. + 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 @@ -132,7 +132,7 @@ 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 (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\* is your **Windows** username: +For example, say you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\* is your **Windows** username: ```bash cd /mnt/c/Users//Desktop/decomps @@ -154,7 +154,7 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti - If devkitARM is **not installed**, then go to [Installing devkitARM](#installing-devkitarm). - If devkitARM is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2). -- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2). +- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald Expansion (msys2)](#choosing-where-to-store-pokeemerald-expansion-msys2). ### Installing devkitARM 1. Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). @@ -166,7 +166,7 @@ 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. Install these by running the following two commands: +2. Certain packages are required to build pokeemerald Expansion. Install these by running the following two commands: ```bash pacman -Sy msys2-keyring @@ -215,16 +215,16 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. To install Python on msys2, simply run the following commands: - ```bash - pacman -S mingw-w64-x86_64-python3 - ``` +```bash +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](#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 (and agbcc) in **C:\Users\\_\_\Desktop\decomps** (where *\* is your **Windows** username), enter this command: +For example, if you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps** (where *\* is your **Windows** username), enter this command: ```bash cd Desktop/decomps @@ -240,7 +240,7 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti 2. - If Cygwin is **not installed**, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). - If Cygwin is installed, but **is not configured to work with devkitARM**, then go to [Configuring devkitARM for Cygwin](#configuring-devkitarm-for-cygwin). - - Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) + - Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald Expansion (Cygwin)](#choosing-where-to-store-pokeemerald-expansion-cygwin) ### Installing Cygwin 1. Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. @@ -283,15 +283,15 @@ Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. > Replace the drive letter c with the actual drive letter if it is not c. -### Choosing where to store pokeemerald (Cygwin) +### Choosing where to store pokeemerald Expansion (Cygwin) -Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll need to account for where pokeemerald is stored when **changing directory** to the pokeemerald folder. +Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. 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 (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: +For example, if you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: ```bash cd c:/Users//Desktop/decomps ``` -Note that the directory **must exist** in Windows. If you want to store pokeemerald 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. +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... @@ -312,7 +312,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for 2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos). - If pkg-config is **not installed**, then go to [Installing pkg-config (macos)](#installing-pkg-config-macos). - If devkitARM is **not installed**, then go to [Installing devkitARM (macOS)](#installing-devkitarm-macos). - - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) + - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos) ### Installing libpng (macOS)
@@ -395,14 +395,14 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for Python is now installed. -### Choosing where to store pokeemerald (macOS) -At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. +### 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](#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 (and agbcc) in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder: +For example, if you want to store pokeemerald Expansion in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder: ```bash cd Desktop/decomps ``` -Note that the directory **must exist** in the folder system. If you want to store pokeemerald 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 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... @@ -420,7 +420,7 @@ Run the following command to install the necessary packages: ```bash 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 (Linux)](#choosing-where-to-store-pokeemerald-linux). +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux).
Note for legacy repos... @@ -429,19 +429,65 @@ Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to > [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-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: + + ```bash + 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. + +4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): + + ```bash + source /etc/profile.d/devkit-env.sh + ``` + +devkitARM is now installed. + ### Arch Linux Run this command as root to install the necessary packages: ```bash pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng ``` -Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). -
- Note for legacy repos... -> If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/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 Arch Linux](#installing-devkitarm-on-arch-linux). -
+### Installing devkitARM on Arch Linux + +1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages. +2. Install `gba-dev`: run the following command as root. + + ```console + 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): + + ```bash + source /etc/profile.d/devkit-env.sh + ``` + +devkitARM is now installed. + +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). + +### NixOS +Run the following command to start an interactive shell with the necessary packages: +```bash +nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng +``` +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). + +### NixOS +Run the following command to start an interactive shell with the necessary packages: +```bash +nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng +``` +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ @@ -476,12 +522,12 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
Note for Windows users... -> Consider adding an exception for the `pokeemerald` and/or `decomps` folder in Windows Security using +> Consider adding an exception for the `pokeemerald-expansion` and/or `decomps` folder in Windows Security using > [these instructions](https://support.microsoft.com/help/4028485). This prevents Microsoft Defender from > scanning them which might improve performance while building.
-1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: +1. If pokeemerald Expansion is not already downloaded (some users may prefer to download pokeemerald Expansion via a git client like GitHub Desktop), run: ```bash git clone https://github.com/rh-hideout/pokeemerald-expansion @@ -495,57 +541,18 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for > cd > sudo umount /mnt/c > sudo mount -t drvfs C: /mnt/c -o metadata,noatime - > cd + > cd > ``` - > Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. -
- -
- Depreciated; installing agbcc is optional since 1.7.0. -2. Install agbcc into pokeemerald. 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, run the following commands to build and install it into pokeemerald: - - ```bash - git clone https://github.com/pret/agbcc - cd agbcc - ./build.sh - ./install.sh ../pokeemerald - ``` - -- **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: - - ```bash - cd agbcc - git clean -fX - ./build.sh - ./install.sh ../pokeemerald - ``` - -- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald: - - ```bash - cd agbcc - ./install.sh ../pokeemerald - ``` - -
- 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. + > Where *\* is the path of the folder [where you chose to store pokeemerald Expansion](#Choosing-where-to-store-pokeemerald-expansion-WSL1). Then run the `git clone` command again.
+ +Now you're ready to build pokeemerald Expansion. -3. Once agbcc is installed, change directory back to the base directory where pokeemerald and agbcc are stored: - - ```bash - cd .. - ``` -
+## Build pokeemerald Expansion -Now you're ready to [build **pokeemerald**](#build-pokeemerald) -## Build pokeemerald -If you aren't in the pokeemerald directory already, then **change directory** to the pokeemerald folder: +If you aren't in the pokeemerald-expansion directory already, then **change directory** to the pokeemerald-expansion folder: ```bash -cd pokeemerald +cd pokeemerald-expansion ``` To build **pokeemerald.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)): ```bash @@ -575,139 +582,79 @@ Replace `` 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](https://stackoverflow.com/questions/1715580)). -## Compare ROM to the original +### Other toolchains -For contributing, or if you'd simply like to verify that your ROM is identical to the original game, run: -```bash -make compare -``` -If it matches, you will see the following at the end of the output: +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`. ```bash -pokeemerald.gba: OK +make TOOLCHAIN="/path/to/toolchain/here" ``` -If there are any changes from the original game, you will instead see: +The following is an example: ```bash -pokeemerald.gba: FAILED -shasum: WARNING: 1 computed checksum did NOT match +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. -## devkitARM's C compiler +### Building with debug info -This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM (a.k.a. gba-dev) has already been installed as part of the platform-specific instructions, simply run: +To build **pokeemerald.elf** with debug symbols under a modern toolchain: ```bash -make modern +make DINFO=1 ``` -Otherwise, follow the instructions below to install devkitARM. -### Installing devkitARM on WSL1 +Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default. -1. `gdebi-core` must be installed beforehand in order to install devkitPro pacman (which facilitates the installation of devkitARM). Install this with the following command: +### 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: ```bash - sudo apt install gdebi-core + git clone https://github.com/pret/agbcc + cd agbcc + ./build.sh + ./install.sh ../pokeemerald-expansion ``` -
- Note... - > If the above command does not work, try the above command but replacing `apt` with `apt-get`. -
- -2. Once `gdebi-core` is done installing, download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. -3. Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command, where *\ is your **Windows** username: +- **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: ```bash - cd /mnt/c/Users//Downloads + cd agbcc + git clean -fX + ./build.sh + ./install.sh ../pokeemerald-expansion ``` -4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM. +- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion: ```bash - sudo gdebi devkitpro-pacman.amd64.deb - sudo dkp-pacman -Sy - sudo dkp-pacman -S gba-dev + cd agbcc + ./install.sh ../pokeemerald-expansion ``` - 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... - > 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. + > 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.
-5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): - - ```bash - source /etc/profile.d/devkit-env.sh - ``` - -devkitARM is now installed. - -### Installing devkitARM on Debian/Ubuntu-based distributions -1. If `gdebi-core` is not installed, run the following command: - - ```bash - sudo apt install gdebi-core - ``` -2. Download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. -3. Change directory to where the package was downloaded. Then, run the following commands to install devkitARM: - - ```bash - 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. - -4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): +2. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored: ```bash - source /etc/profile.d/devkit-env.sh - ``` - -devkitARM is now installed. - -### Installing devkitARM on Arch Linux - -1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages. -2. Install `gba-dev`: run the following command as root. - - ```console - pacman -S gba-dev + cd .. ``` - 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): +3. To compile with agbcc: ```bash - source /etc/profile.d/devkit-env.sh + make agbcc ``` -devkitARM is now installed. - -### 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`. -```bash -make TOOLCHAIN="/path/to/toolchain/here" -``` -The following is an example: -```bash -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 under a modern toolchain - -To build **pokeemerald.elf** with debug symbols under a modern toolchain: -```bash -make modern DINFO=1 -``` -Note that this is not necessary for a non-modern build since those are built with debug symbols by default. +
# Useful additional tools * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps * [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript)) * [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps - diff --git a/Makefile b/Makefile index 209281cd5a06..ee7de8540b1c 100644 --- a/Makefile +++ b/Makefile @@ -80,16 +80,19 @@ MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) MODERN_OBJ_DIR_NAME := build/modern -SHELL := /bin/bash -o pipefail +SHELL := bash -o pipefail ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) +TEST_OBJ_DIR_NAME_MODERN := build/modern-test +TEST_OBJ_DIR_NAME_AGBCC := build/test + ifeq ($(MODERN),0) -TEST_OBJ_DIR_NAME := build/test +TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_AGBCC) else -TEST_OBJ_DIR_NAME := build/modern-test +TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_MODERN) endif TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -311,7 +314,9 @@ tidymodern: tidycheck: rm -f $(TESTELF) $(HEADLESSELF) - rm -rf $(TEST_OBJ_DIR_NAME) + rm -rf $(TEST_OBJ_DIR_NAME_MODERN) + rm -rf $(TEST_OBJ_DIR_NAME_AGBCC) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member diff --git a/README.md b/README.md index c567cd72d040..18b497a212f7 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee ## What features are included? - ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**: - - [Battle configurations](include/config/battle.h) - - [Pokémon configurations](include/config/pokemon.h) - - [Item configurations](include/config/item.h) - - [Overworld configurations](include/config/overworld.h) - - [Debug configurations](include/config/debug.h) + - [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h) + - [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h) + - [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h) + - [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h) + - [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h) - ***Upgraded battle engine.*** - Gen5+ damage calculation. - 2v2 Wild battles support. @@ -62,7 +62,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - Recalculating stats at the end of every battle. - Level 100 Pokémon can earn EVs. - Inverse battle support. - - TONS of other features listed [here](include/config/battle.h). + - TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h). - ***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). @@ -94,7 +94,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - 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](include/constants/form_change_types.h).*** +- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).*** - Item holding (eg. Giratina/Arceus) - Item using (eg. Oricorio) - Time of day option for Shaymin @@ -115,7 +115,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - 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](include/constants/items.h).*** +- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).*** - ***Gen 6+ Exp. Share*** (configurable) - Berserk Gene - Most battle items from Gen 4+ diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc index 49e72e744604..b3c86955dd78 100644 --- a/asm/macros/battle_frontier/battle_tower.inc +++ b/asm/macros/battle_frontier/battle_tower.inc @@ -98,7 +98,7 @@ waitstate .endm - .macro multi_do type:req, partnerId:req, partnerPicId:req + .macro multi_do type:req, partnerId:req special ReducePlayerPartyToSelectedMons setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA setvar VAR_0x8005, FRONTIER_DATA_SELECTED_MON_ORDER @@ -106,7 +106,6 @@ setvar VAR_0x8004, SPECIAL_BATTLE_MULTI setvar VAR_0x8005, \type | MULTI_BATTLE_CHOOSE_MONS setvar VAR_0x8006, \partnerId - setvar VAR_0x8007, \partnerPicId special DoSpecialTrainerBattle waitstate setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY @@ -114,30 +113,29 @@ special LoadPlayerParty .endm - .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req + .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req special SavePlayerParty trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons - multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId + multi_do MULTI_BATTLE_2_VS_2, \partnerId .endm - .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req + .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req special SavePlayerParty trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons - multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId + multi_do MULTI_BATTLE_2_VS_1, \partnerId .endm @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. - .macro multi_wild partnerId:req, partnerPicId:req + .macro multi_wild partnerId:req special SavePlayerParty - multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId + multi_do MULTI_BATTLE_2_VS_WILD, \partnerId .endm - .macro multi_do_fixed type:req, partnerId:req, partnerPicId:req + .macro multi_do_fixed type:req, partnerId:req setvar VAR_0x8004, SPECIAL_BATTLE_MULTI setvar VAR_0x8005, \type setvar VAR_0x8006, \partnerId - setvar VAR_0x8007, \partnerPicId special DoSpecialTrainerBattle waitstate setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY @@ -145,21 +143,21 @@ special LoadPlayerParty .endm - .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req + .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req special SavePlayerParty trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons - multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId + multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId .endm - .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req + .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req special SavePlayerParty trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons - multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId + multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId .endm @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. - .macro multi_fixed_wild partnerId:req, partnerPicId:req + .macro multi_fixed_wild partnerId:req special SavePlayerParty - multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId + multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId .endm diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 031c950465de..b805b4b3fe57 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1507,18 +1507,10 @@ .4byte \jumpInstr .endm - .macro jumpifrodaffected battler:req, jumpInstr:req - callnative BS_JumpIfRod - .4byte \jumpInstr - .endm - - .macro jumpifabsorbaffected battler:req, jumpInstr:req - callnative BS_JumpIfAbsorb - .4byte \jumpInstr - .endm - - .macro jumpifmotoraffected battler:req, jumpInstr:req - callnative BS_JumpIfMotor + .macro jumpifelectricabilityaffected battler:req, ability:req, jumpInstr:req + callnative BS_JumpIfElectricAbilityAffected + .byte \battler + .2byte \ability .4byte \jumpInstr .endm @@ -1637,11 +1629,11 @@ .macro trygulpmissile callnative BS_TryGulpMissile .endm - + .macro tryactivategulpmissile callnative BS_TryActivateGulpMissile .endm - + .macro tryquash failInstr:req callnative BS_TryQuash .4byte \failInstr @@ -2211,10 +2203,6 @@ .4byte \failInstr .endm - .macro shellsidearmcheck - various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK - .endm - .macro jumpifteanoberry jumpInstr:req various BS_ATTACKER, VARIOUS_TEATIME_TARGETS .4byte \jumpInstr diff --git a/asmdiff.sh b/asmdiff.sh index f5a7010747c7..aca670e32478 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [[ -d "$DEVKITARM/bin/" ]]; then OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index e0f1a59aace1..e4cd774af6ca 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -5169,7 +5169,6 @@ Move_SMACK_DOWN:: createvisualtask AnimTask_SmokescreenImpact, 0x8, 0x400, 0x1902 fadetobg BG_IN_AIR waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, 0x0, 0x0, 0x0, 0xffff createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 goto SeismicTossWeak @@ -29183,6 +29182,7 @@ Move_TECTONIC_RAGE: waitforvisualfinish call UnsetPsychicBg waitbgfadein + clearmonbg_static ANIM_ATTACKER createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e388b5ee3e52..c4303e71b170 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -432,9 +432,9 @@ BattleScript_EffectTeatime:: waitanimation setbyte gBattlerTarget, 0 BattleScript_TeatimeLoop: - jumpifrodaffected BS_TARGET, BattleScript_Teatimerod - jumpifabsorbaffected BS_TARGET, BattleScript_Teatimesorb - jumpifmotoraffected BS_TARGET, BattleScript_Teatimemotor + jumpifelectricabilityaffected BS_TARGET, ABILITY_LIGHTNING_ROD, BattleScript_Teatimerod + jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_Teatimesorb + jumpifelectricabilityaffected BS_TARGET, ABILITY_MOTOR_DRIVE, BattleScript_Teatimemotor jumpifteainvulnerable BS_TARGET, BattleScript_Teatimevul @ in semi-invulnerable state OR held item is not a Berry orword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries @@ -719,10 +719,6 @@ BattleScript_FlingMissed: ppreduce goto BattleScript_MoveMissedPause -BattleScript_EffectShellSideArm:: - shellsidearmcheck - goto BattleScript_EffectHit - BattleScript_EffectPhotonGeyser:: setphotongeysercategory goto BattleScript_EffectHit @@ -1523,6 +1519,7 @@ BattleScript_MoveEffectFlameBurst:: waitmessage B_WAIT_TIME_LONG savetarget copybyte gBattlerTarget, sSAVED_BATTLER + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET datahpupdate BS_TARGET tryfaintmon BS_TARGET @@ -3613,7 +3610,7 @@ BattleScript_EffectParalyze:: BattleScript_BattleScript_EffectParalyzeNoTypeCalc: jumpifmovehadnoeffect BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed - jumpifabsorbaffected BS_TARGET, BattleScript_VoltAbsorbHeal + jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_VoltAbsorbHeal tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents @@ -5430,7 +5427,7 @@ BattleScript_GiveExp:: BattleScript_HandleFaintedMon:: setbyte sSHIFT_SWITCHED, 0 - checkteamslost BattleScript_LinkHandleFaintedMonMultiple + checkteamslost BattleScript_HandleFaintedMonMultiple jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd jumpifbattletype BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonTryChoose jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonTryChoose @@ -5511,13 +5508,13 @@ BattleScript_FaintedMonShiftSwitched: copybyte gBattlerTarget, sSAVED_BATTLER goto BattleScript_FaintedMonSendOutNewEnd -BattleScript_LinkHandleFaintedMonMultiple:: - openpartyscreen BS_FAINTED_LINK_MULTIPLE_1, BattleScript_LinkHandleFaintedMonMultipleStart -BattleScript_LinkHandleFaintedMonMultipleStart:: +BattleScript_HandleFaintedMonMultiple:: + openpartyscreen BS_FAINTED_MULTIPLE_1, BattleScript_HandleFaintedMonMultipleStart +BattleScript_HandleFaintedMonMultipleStart:: switchhandleorder BS_FAINTED, 0 - openpartyscreen BS_FAINTED_LINK_MULTIPLE_2, BattleScript_LinkHandleFaintedMonMultipleEnd + openpartyscreen BS_FAINTED_MULTIPLE_2, BattleScript_HandleFaintedMonMultipleEnd switchhandleorder BS_FAINTED, 0 -BattleScript_LinkHandleFaintedMonLoop:: +BattleScript_HandleFaintedMonLoop:: switchhandleorder BS_FAINTED, 3 drawpartystatussummary BS_FAINTED getswitchedmondata BS_FAINTED @@ -5529,9 +5526,10 @@ BattleScript_LinkHandleFaintedMonLoop:: hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE waitstate - switchineffects BS_FAINTED_LINK_MULTIPLE_1 - jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_LinkHandleFaintedMonLoop -BattleScript_LinkHandleFaintedMonMultipleEnd:: + switchineffects BS_FAINTED_MULTIPLE_1 + jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_HandleFaintedMonLoop +BattleScript_HandleFaintedMonMultipleEnd:: + switchineffects BS_FAINTED_MULTIPLE_2 end2 BattleScript_LocalTrainerBattleWon:: @@ -5762,6 +5760,7 @@ BattleScript_DoSwitchOut:: BattleScript_PursuitDmgOnSwitchOut:: pause B_WAIT_TIME_SHORT + orword gHitMarker, HITMARKER_OBEYS attackstring ppreduce critcalc @@ -5779,11 +5778,12 @@ BattleScript_PursuitDmgOnSwitchOut:: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - moveendfromto MOVEEND_ABILITIES, MOVEEND_CHOICE_MOVE + moveendfromto MOVEEND_ABILITIES, MOVEEND_ATTACKER_INVISIBLE @ MOVEEND_CHOICE_MOVE has to be included jumpiffainted BS_TARGET, FALSE, BattleScript_PursuitDmgOnSwitchOutRet setbyte sGIVEEXP_STATE, 0 getexp BS_TARGET BattleScript_PursuitDmgOnSwitchOutRet: + bicword gHitMarker, HITMARKER_OBEYS return BattleScript_Pausex20:: @@ -5951,6 +5951,10 @@ BattleScript_MagicRoomEnds:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_GrassyTerrainEnds:: + call BattleScript_GrassyTerrainHeals_Ret + goto BattleScript_TerrainEnds + BattleScript_TerrainEnds_Ret:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG @@ -8245,6 +8249,10 @@ BattleScript_MoveUsedPsychicTerrainPrevents:: goto BattleScript_MoveEnd BattleScript_GrassyTerrainHeals:: + call BattleScript_GrassyTerrainHeals_Ret + end2 + +BattleScript_GrassyTerrainHeals_Ret:: setbyte gBattleCommunication, 0 BattleScript_GrassyTerrainLoop: copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 @@ -8262,7 +8270,7 @@ BattleScript_GrassyTerrainLoopEnd:: bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd BattleScript_GrassyTerrainHealEnd: - end2 + return BattleScript_AbilityNoSpecificStatLoss:: pause B_WAIT_TIME_SHORT @@ -8360,7 +8368,7 @@ BattleScript_ScriptingAbilityStatRaise:: call BattleScript_AbilityPopUp copybyte sSAVED_DMG, gBattlerAttacker copybyte gBattlerAttacker, sBATTLER - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation @@ -8593,7 +8601,7 @@ BattleScript_SynchronizeActivates:: return BattleScript_NoItemSteal:: - pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNSXMADEYINEFFECTIVE waitmessage B_WAIT_TIME_LONG return diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc index 0f84b9e7d3c8..46d6f9c95772 100644 --- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc @@ -518,7 +518,7 @@ MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle:: # 260 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" MossdeepCity_SpaceCenter_2F_EventScript_DoStevenMultiBattle:: - multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN, TRAINER_BACK_PIC_STEVEN + multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN switch VAR_RESULT # 270 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" case 1, MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha @@ -628,7 +628,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha:: addobject LOCALID_SCIENTIST # 323 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" fadescreen FADE_FROM_BLACK -# 324 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" +#ifdef BUGFIX + releaseall +#endif end # 325 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" @@ -658,7 +660,6 @@ MossdeepCity_SpaceCenter_2F_EventScript_StevenFacePlayerWest:: turnobject LOCALID_STEVEN, DIR_EAST # 338 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" return -# 339 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall:: # 349 "data/maps/MossdeepCity_SpaceCenter_2F/scripts.pory" diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000000..7585238efedf --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +book diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 000000000000..bdde652d3112 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1 @@ +{{#include ../CHANGELOG.md}} diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 000000000000..610fee2cc150 --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1 @@ +{{#include ../INSTALL.md}} diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000000..dae3167208d3 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +{{#include ../README.md}} diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 000000000000..d1a93ce0be92 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,53 @@ +# Summary + +- [README](./README.md) +- [Installation](./INSTALL.md) + - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) +- [Changelog](./CHANGELOG.md) + - [1.8.x]() + - [Version 1.8.5](changelogs/1.8.x/1.8.5.md) + - [Version 1.8.4](changelogs/1.8.x/1.8.4.md) + - [Version 1.8.3](changelogs/1.8.x/1.8.3.md) + - [Version 1.8.2](changelogs/1.8.x/1.8.2.md) + - [Version 1.8.1](changelogs/1.8.x/1.8.1.md) + - [Version 1.8.0](changelogs/1.8.x/1.8.0.md) + + - [1.7.x]() + - [Version 1.7.4](changelogs/1.7.x/1.7.4.md) + - [Version 1.7.3](changelogs/1.7.x/1.7.3.md) + - [Version 1.7.2](changelogs/1.7.x/1.7.2.md) + - [Version 1.7.1](changelogs/1.7.x/1.7.1.md) + - [Version 1.7.0](changelogs/1.7.x/1.7.0.md) + + - [1.6.x]() + - [Version 1.6.2](changelogs/1.6.x/1.6.2.md) + - [Version 1.6.1](changelogs/1.6.x/1.6.1.md) + - [Version 1.6.0](changelogs/1.6.x/1.6.0.md) + + - [1.5.x]() + - [Version 1.5.3](changelogs/1.5.x/1.5.3.md) + - [Version 1.5.2](changelogs/1.5.x/1.5.2.md) + - [Version 1.5.1](changelogs/1.5.x/1.5.1.md) + - [Version 1.5.0](changelogs/1.5.x/1.5.0.md) + + - [1.4.x]() + - [Version 1.4.3](changelogs/1.4.x/1.4.3.md) + - [Version 1.4.2](changelogs/1.4.x/1.4.2.md) + - [Version 1.4.1](changelogs/1.4.x/1.4.1.md) + - [Version 1.4.0](changelogs/1.4.x/1.4.0.md) + + - [1.3.x]() + - [Version 1.3.0](changelogs/1.3.x/1.3.0.md) + + - [1.2.x]() + - [Version 1.2.0](changelogs/1.2.x/1.2.0.md) + + - [1.1.x]() + - [Version 1.1.1](changelogs/1.1.x/1.1.1.md) + - [Version 1.1.0](changelogs/1.1.x/1.1.0.md) + + - [1.0.x]() + - [Version 1.0.0](changelogs/1.0.x/1.0.0.md) + + - [Pre-1.0.x]() + - [Version 0.9.0](changelogs/0.9.x/0.9.0.md) diff --git a/docs/book.toml b/docs/book.toml new file mode 100644 index 000000000000..3282d8c8e7ad --- /dev/null +++ b/docs/book.toml @@ -0,0 +1,14 @@ +[book] +language = "en" +multilingual = false +src = "." +title = "pokeemerald-expansion" + +[output.html] +git-repository-url = "https://github.com/rh-hideout/pokeemerald-expansion" +edit-url-template = "https://github.com/rh-hideout/pokeemerald-expansion/edit/master/docs/{path}" +site-url = "/pokeemerald-expansion/" + +[preprocessor.fix_links] +command = "python3 fix_links.py" +after = [ "links" ] diff --git a/docs/changelogs/1.8.x/1.8.5.md b/docs/changelogs/1.8.x/1.8.5.md new file mode 100644 index 000000000000..ded502ccfe69 --- /dev/null +++ b/docs/changelogs/1.8.x/1.8.5.md @@ -0,0 +1,219 @@ +# Version 1.8.5 + +```md +## 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.5`. +``` + +## 🌋 *IMPORTANT CHANGES AND REFACTORS* 🌋 +* Small `ABILITYEFFECT_MOVES_BLOCK` refactor for readability by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4635 +* Removed redundant `partnerPicId` arguments in macros by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4736 +* Renamed some labels from "critical hit chance" to "critical hit odds" by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 + * `sCriticalHitChance` => `sCriticalHitOdds`. + * `GetCritHitChance` => `GetCritHitOdds`. +* Renamed `BS_FAINTED_LINK_MULTIPLE_1/2` to `BS_FAINTED_MULTIPLE_1/2` by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4851 +* Remove Duplicate ai code from battle_ai_util.c by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 + * `AI_CanBeBurned` is now handled by `CanBeBurned`. + * `CanSleep` renamed to `CanBeSlept`. + * `AI_CanSleep` is now handled by `CanBeSlept` and added `defAbility` argument. + * Added `defAbility` argument for `CanBePoisoned`. + * Added `defAbility` argument for `CanBeBurned`. + * Added `defAbility` argument for `CanBeParalyzed`. +* Got rid of hardcoded stat raise anim values by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4825 +* Added parentheses to `SPECIES_EGG` macro to avoid issues by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4899 +* `IsFinalStrikeEffect` uses effect instead of move by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4917 + +## 💥 *Softlock/Crash fixes* 💥 +* Fixed Baton Pass hardlocking on Memento by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4773 +* Fixed Revive in Double Battles causing a softlock by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4784 +* Fixed Tectonic Rage causing a freeze after leveling up by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4787 +* Fixed Smack Down's animation softlocking the game after around 13 uses by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4774 +* Fixed softlock caused by using Covet/Thief on a Pokémon with Sticky Hold by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4885 + +## 🧬 General 🧬 +### Added +* Added regional form breeding mechanics by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4695 +* Convert docs/ folder to mdBook by @leo60228 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4684 + * Go [here to see the new documentation page](https://rh-hideout.github.io/pokeemerald-expansion/). Feel free to contribute via PRs! + * Cleanup by @leo60228 in: + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4711 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4715 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4716 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4809 +* Added forbidden status parameter to `FORM_CHANGE_ITEM_USE` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4738 + * Used for Shaymin's form change via Gracidea being prevented if it's frozen or frostbitten. +### Fixed +* Fixed Poké Ball inheritance into actually working by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4695 +* Daycare fixes by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4479 + * Fixed Evolved mons not copying moves as they do not have their own egg move table. + * Fixed forms of the same species not copying egg moves from each other. +* Fixed Roamer Frostbite status not carrying over between battles by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4822 +* Fixed Partners getting the wrong nature defined by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4926 +* Fixed Shop menu lists not properly displaying 6-digit item prices by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4929 + +## 🐉 Pokémon 🐉 +### Changed +* PokeCommunity sprites batch (May) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4714 + * Pawmi (Front by KingOfThe-X-Roads, back by Vent, QC by leParagon) + * Pawmo (By vent, qc by leParagon) + * Okidogi (Front by KingOfThe-X-Roads + by leParagon, back by Lykeron + QC by Alexandrev2. 0) + * Backported Hedara's Terapagos from `upcoming`. +* Updated wild held items to Gen 9 by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4769 + * Teddiursa (Common: None_> Honey) + * Bisharp (Rare: None -> Leader's Crest) + * All Oricorio: (Rare: Honey -> Corresponding Nectar) + * Toedscool, Toedscruel: (Common: Tiny Mushroom, Rare: Big Mushroom) + * All Paradox Mon: (Rare: Booster Energy) +### Fixed +* Fixed Tandemaus being able to evolve via Rare and Exp. Candies by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4759 +* Fixed Poltchageist not always producing Counterfeit form offspring by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4812 +* Fixed missing Minior Pokédex Entry by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4858 +* Multiple Pokemon sprite fixes by @cafei-uh in https://github.com/rh-hideout/pokeemerald-expansion/pull/4887 + - Fixed Charjabug shiny + cleaned up its front sprite + - Changed Lurantis back sprite to better match its ingame model + - Fixed Bounsweet shiny not changing the color of its lower body + - Brightened the white color of Bruxish shiny + tweaked its sprites to accommodate the change +* Fixed `P_UPDATED_ABILITIES` not reverting newly gained abilities in Gens 4/6/7 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4922 + +## ⚔️ Battle General ⚔️ ## +### Fixed +* Fixed Dynamax HP not reverting upon fainting by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4681 +* Fixed the partner's palette from shifting when throwing a Poké Ball by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4736 +* Fixed shiny value not being updated in battle, causing the palette to reset when reloading the sprites by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4788 +* Fixed `B_VAR_STARTING_STATUS` every following terrains infinite by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4795 +* Fixed Gen 7+ confusion self hurt chance from `1 in 3` to `33%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed caught wild pokemon not restoring their used held item by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4803 +* Fixed AI's right slot switching-in too early by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4851 +* Ported post-KO test improvements from closed PR by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4859 +* Fixed how switch-in effects are played out after multiple faints in the same turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4864 +* Fixed Megas gaining abilities after fainting by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4873 + +## 🤹 Moves 🤹 +### Fixed +* Added missing `ignoreSubstitute` flags for Defog (only in Gen 4), Torment and Powder by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4623 +* Fixed Grassy Glide granting priority if it's converted to Max Move by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4659 +* Fixed Rampage moves not confusing the user if it's canceled by Protect and Type immunity by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4722 +* Fixed Tar shot the target always be to Fire regardless of existing types by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4756 +* Fixed Shell Side Arm by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4753 + * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4806 +* Fixed Body press using physical Defense stat changes instead of Sp. Defense stat stages in Wonder Room (still uses physical defense stat) by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4792 +* Fixed Relic Song playing the transforming animation for species other than Meloetta by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4799 +* Fixed Pursuit not being locked by Choice Items when used on an opponent switching out by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4801 +* Fixed Encore's effect lasting only 2 turns if it was used after the opponent uses the move in the same turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4802 +* Fixed Spectral Thief playing stat raise animation when the user has Contrary by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4824 +* Fixed Fury Cutter scaling up to 640 power by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4846 +* Fixed moves with the `ignoresTargetAbility` flag ignoring the attacker's own ability by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4855 +* Fixed incorrect move names by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4854 + * Floral Healing + * Jungle Healing + * Oceanic Operetta +* Fixed Grassy Terrain not healing on the final turn of its duration by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4903 +* Fixed Shed Tail's HP reduction rounding down instead of up by @kleeenexfeu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4913 +* Fixed Bitter Malice's description, which used to imply that it didn't always lower the opponent's Attack by @kleeenexfeu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4933 +* Fixed Flame Burst's adjacent damage not bypassing Substitute by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4939 + +## 🎭 Abilities 🎭 +### Added +* Added missing Gen 3-4 config for Lightning Rod/Storm Drain (`B_REDIRECT_ABILITY_IMMUNITY`) by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4920 +### Fixed +* Fixed Dancer issues @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4638 + * Fixed Dancer triggering if the move user flinches when it was going to use a dance move + * Fixed Dancer not triggering if a previous Dancer flinches. +* Fixed Dazzling, Queenly Majesty and Armor Tail not protecting partners from priority moves by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4635 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4647 +* Fixed Burning Bulwark's incorrect message by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4659 +* Fixed Disguise's `breakable` flag (ignorable by Mold Breaker) by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4666 +* Fixed redundant call to `IsBattlerWeatherAffected` Dry Skin's checks by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4675 +* Fixed Guard Dog blocking U-Turn/Volt Switch/Flip Turn instead of Roar/Circle Throw/Dragon Tail by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4690 +* Fixed some abilities preventing stat dropping move effects when used on self by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4696 + * Hyper Cutter (Attack) + * Big Pecks (Defense) + * Keen Eye/Illuminate (Accuracy) +* Fixed Mummy and Lingering Aroma not working at all by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4731 +* Fixed Berserk, Anger Shell, Wimp Out, Emergency Exit HP threshold (more than half HP instead of half HP and more) by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4724 +* Fixed Mycelium Might affecting every battler on the field instead of just the ability holder by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4740 +* Fixed Skill Link ignoring Gastro Acid/Neutralizing Gas by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4746 +* Fixed Own Tempo ignoring Gastro Acid/Neutralizing Gas when checking for Berserk Gene by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4746 +* Fixed Soul-Heart changing stats of wrong battler, which caused Mirror Herb to behave incorrectly by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4785 +* Fixed Poison Touch trigger chance from `1 in 3` to `30%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed Cursed Body trigger chance from `1 in 3` to `30%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed Comatose not being supressed if it's obtained by a Pokémon Transforming by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4852 +* Fixed Supersweet Syrup0s description by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4902 + +## 🧶 Items 🧶 +### Changed +* Allowed rematches to occur if I_VS_SEEKER_CHARGING isn't enabled by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4866 +### Fixed +* Fixed Honey altering tiles when used by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4703 +* Fixed potential undefined behaviour when using escape rope by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4705 +* Fixed Hyper Potion's price not respecting `I_PRICE` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4737 +* Fixed Ability Shield not protecting against multiple effects by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4740 + * Mold Breaker-type abilities. + * Mycelium Might. + * Moves that bypass abilities (eg. Sunsteel Stike). + +## 🤖 Battle AI 🤖 +### Changed +* Add checks for `EFFECT_POLTERGEIST` and `EFFECT_FIRST_TURN_ONLY` to `IsDamageMoveUnusable` by @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4693 +### Fixed +* Fixed AI going for speed control even when it's faster than the opponet by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4630 +* Fixed AI not considering `EFFECT_RAGING_BULL` similarly to `EFFECT_BRICK_BREAK` by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 +* Fixed AI getting incorrect calculations due to using `gCurrentMove` in `CalcCritChanceStageArgs` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4687 +* Fixed AI not recording Battle Armor or Shell Armor by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 +* Fixed AI not considering guaranteed crits by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 +* Fixed AI not properly avoiding contact against Rocky Helmet/Rough Skin by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4779 +* Fixed AI not recognising Volt Absorb/Flash Fire by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4781 +* Fixed AI thinking that Defiant/Competitive triggers off partner's moves in doubles by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4786 +* Fixed AI using `TRUE` (Stench) when calculating if it's worth using Swagger or Flatter on its partner by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4786 +* Fixed passing hold effect instead of ability in one call of ShouldSetSandstorm by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4789 + +## 🧪 Test Runner 🧪 +### Added +* Added `FORCE_MOVE_ANIM` macro to force an animation to run in headless mode by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4774 + * Usage: `FORCE_MOVE_ANIM(TRUE)` at the beginning of the test and `FORCE_MOVE_ANIM(FALSE)` at the end. +* Added test to prevent species from having different evolution tracker methods by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4771 +* Added test for missing Pokédex Entries by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4858 +* Added missing Move Effect TODO tests - Volume B by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 +* Added missing tests + * Berserk by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4724 + * Clear Body by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4685 + * Cleanup by @Pawkkie in: + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4797 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4837 + * Anger Point and Moxie by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4811 + * Cursed Body, Poison Touch and Confusion status by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 + * Corrosion, Acrobatics, Hone Claws and Hurricane by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4708 +* Added AI tests for avoiding using status moves on Pokémon with abilities that prevent them by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 +* Added Own Tempo/Mold Breaker test by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 +### Changed +* Multiple changes by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 + * Renamed some Baton Pass-related tests so that their prefix becomes Baton Pass. + * Eg. `Aqua Ring can be Baton Passed` becomes `Baton Pass passes Aqua Ring's effect`. + * Expanded Belch's test to show that it doesn't need to eat a berry before each use of the move. + * Unconfirmed interactions added to the specific files. + * Split `EFFECT_RAGING_BULL` from `EFFECT_BRICK_BREAK`'s file. + * Moved Grassy Terrain/Earthquake test to Earthquake file. +* Write new/Fix old tests for post-ko switch scenarios by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4856 +### Fixed +* Fixed issues when building tests with agbcc by @u8-Salem in https://github.com/rh-hideout/pokeemerald-expansion/pull/4689 +* Fixed incorrect `ASSUME`s in 2 test rampage tests by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4722 +* Fixed AI ability guessing in tests by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4764 +* Fixed Pokemon in tests not being male by default by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4766 +* Fixed Plasma Fists/Pixilate interaction test by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4865 +* Fixed wrong palette in player backsprite in recorded battle by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4875 + +## 📦 Pret merges 📦 +* Merge in pret 189d542 by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4832 + * Fix Steven partner battle post-battle script by @Jaizu in https://github.com/pret/pokeemerald/pull/2001 +* Pret merge (20th of June) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4845 + - [366f8b3](https://github.com/pret/pokeemerald/commit/366f8b33a38010f47886f70e52a4fa6dd306a4c4) NixOS install instructions by @leo60228 + - [c0d630e](https://github.com/pret/pokeemerald/commit/c0d630ee6304df61a5304942386308a872aeb504) Add support for LF line endings to gbagfx by @nashalexander +* Pret Merge (5th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4915 + - [pret#2006](https://github.com/pret/pokeemerald/pull/2006/) (manually reverted) + - [pret#2009](https://github.com/pret/pokeemerald/pull/2009/) Decode unused JP text in `berry_blender.c` + - [pret#2012](https://github.com/pret/pokeemerald/pull/2012/) Berry blender's `Task_HandleOpponent` small fixes + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.4...expansion/1.8.5 + + diff --git a/docs/changelogs/template.md b/docs/changelogs/template.md index b70a44ce5466..63e9e352aad1 100644 --- a/docs/changelogs/template.md +++ b/docs/changelogs/template.md @@ -6,7 +6,7 @@ - Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`. ``` -## 🌋 *IMPORTANT CHANGES* 🌋 +## 🌋 *IMPORTANT CHANGES AND REFACTORS* 🌋 * N/A ## 💥 *Softlock/Crash fixes* 💥 diff --git a/docs/fix_links.py b/docs/fix_links.py new file mode 100644 index 000000000000..6e2eaec48546 --- /dev/null +++ b/docs/fix_links.py @@ -0,0 +1,51 @@ +# workarounds to avoid changing current directory structure +# autolink logic based on https://github.com/zopieux/py-gfm/blob/fd7b33ed138d240d24dfb659acff7d4ce3f43745/gfm/autolink.py + +import json +import sys +import re + +URL_RE = re.compile( + r"(```(?s:.)+?```|`.+?`|<.+?>)|" + r"\b((?:(?i:ftp|https?)://|(?i:www)\d{0,3}[.])(?:[^\s()<>]+|" + r"\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()" + r"<>]+\)))*\)|[^\s`!()\[\]{};:" + r"'" + r'".,<>?«»“”‘’*]))' +) +PROTOCOL_RE = re.compile(r"^(?i:ftp|https?)://") + +ANCHOR_RE = re.compile(r"(\]\((?:[^)#]+\.md)?#)([^)]+\))") + +def handle_url(m): + code = m.group(1) + if code: + return code + href = m.group(2) + if not PROTOCOL_RE.match(href): + href = "http://%s" % href + return f'<{href}>' + +def handle_anchor(m): + page = m.group(1) + anchor = m.group(2) + return page + anchor.lower() + +def proc_items(items): + for item in items: + if 'Chapter' in item: + s = item['Chapter']['content'] + s = s.replace('](README.md)', '](./)') + s = s.replace('](/INSTALL.md', '](INSTALL.md') + s = s.replace('](docs/', '](') + s = URL_RE.sub(handle_url, s) + item['Chapter']['content'] = ANCHOR_RE.sub(handle_anchor, s) + proc_items(item['Chapter']['sub_items']) + +if __name__ == '__main__': + if len(sys.argv) > 1: + if sys.argv[1] == "supports": + sys.exit(0) + + context, book = json.load(sys.stdin) + proc_items(book['sections']) + + print(json.dumps(book)) diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md index 7d40960f3bf9..bdef4d116bfb 100644 --- a/docs/legacy_WSL1_INSTALL.md +++ b/docs/legacy_WSL1_INSTALL.md @@ -38,4 +38,4 @@ source /etc/profile.d/devkit-env.sh ``` -Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-WSL1). +Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-expansion-WSL1). diff --git a/graphics/pokemon/bounsweet/front.png b/graphics/pokemon/bounsweet/front.png index a31220dcf963..9e09d6d728ff 100644 Binary files a/graphics/pokemon/bounsweet/front.png and b/graphics/pokemon/bounsweet/front.png differ diff --git a/graphics/pokemon/bounsweet/normal.pal b/graphics/pokemon/bounsweet/normal.pal index 6ba3b9fb34c9..029ef53c85f8 100644 --- a/graphics/pokemon/bounsweet/normal.pal +++ b/graphics/pokemon/bounsweet/normal.pal @@ -15,5 +15,5 @@ JASC-PAL 248 136 136 88 104 96 184 192 192 -0 0 0 +248 248 248 0 0 0 diff --git a/graphics/pokemon/bounsweet/shiny.pal b/graphics/pokemon/bounsweet/shiny.pal index 14fc1f5ab3cc..704d72a19af9 100644 --- a/graphics/pokemon/bounsweet/shiny.pal +++ b/graphics/pokemon/bounsweet/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 248 224 40 248 136 136 88 104 96 -184 192 192 -0 0 0 +200 192 128 +247 240 184 0 0 0 diff --git a/graphics/pokemon/bruxish/back.png b/graphics/pokemon/bruxish/back.png index 32aeed0b5292..7969fb7197e2 100644 Binary files a/graphics/pokemon/bruxish/back.png and b/graphics/pokemon/bruxish/back.png differ diff --git a/graphics/pokemon/bruxish/front.png b/graphics/pokemon/bruxish/front.png index 4447621e55a4..ce29eb8d5f0c 100644 Binary files a/graphics/pokemon/bruxish/front.png and b/graphics/pokemon/bruxish/front.png differ diff --git a/graphics/pokemon/bruxish/shiny.pal b/graphics/pokemon/bruxish/shiny.pal index a609040e84b0..5deb432b1940 100644 --- a/graphics/pokemon/bruxish/shiny.pal +++ b/graphics/pokemon/bruxish/shiny.pal @@ -10,8 +10,8 @@ JASC-PAL 120 24 24 232 56 40 136 120 104 -224 216 208 -192 176 160 +248 248 248 +200 192 176 200 160 80 232 208 136 248 248 248 diff --git a/graphics/pokemon/charjabug/anim_front.png b/graphics/pokemon/charjabug/anim_front.png index 163ab2ba2d9d..58d39c97d29e 100644 Binary files a/graphics/pokemon/charjabug/anim_front.png and b/graphics/pokemon/charjabug/anim_front.png differ diff --git a/graphics/pokemon/charjabug/shiny.pal b/graphics/pokemon/charjabug/shiny.pal index 58974fb24f00..a5ffc233bc3e 100644 --- a/graphics/pokemon/charjabug/shiny.pal +++ b/graphics/pokemon/charjabug/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 248 160 72 112 72 24 176 112 48 -0 0 0 -0 0 0 +8 64 88 +176 168 176 diff --git a/graphics/pokemon/lurantis/back.png b/graphics/pokemon/lurantis/back.png index a080a77f0995..d133d63f7a81 100644 Binary files a/graphics/pokemon/lurantis/back.png and b/graphics/pokemon/lurantis/back.png differ diff --git a/graphics/pokemon/okidogi/back.png b/graphics/pokemon/okidogi/back.png index 5a1e7fb52353..4d4772eba08f 100644 Binary files a/graphics/pokemon/okidogi/back.png and b/graphics/pokemon/okidogi/back.png differ diff --git a/graphics/pokemon/okidogi/front.png b/graphics/pokemon/okidogi/front.png index a6b0a62f0e10..8ee3db7a0985 100644 Binary files a/graphics/pokemon/okidogi/front.png and b/graphics/pokemon/okidogi/front.png differ diff --git a/graphics/pokemon/okidogi/normal.pal b/graphics/pokemon/okidogi/normal.pal index 9f256a4a5b9f..180476ed1148 100644 --- a/graphics/pokemon/okidogi/normal.pal +++ b/graphics/pokemon/okidogi/normal.pal @@ -1,18 +1,17 @@ JASC-PAL 0100 -15 -152 208 160 -16 16 16 -90 33 73 +14 +153 211 165 +28 28 28 +29 57 21 45 45 45 +84 117 53 +90 33 73 78 73 71 -202 103 162 146 57 119 -26 29 28 121 167 58 -84 117 53 -184 140 7 254 208 27 -249 249 249 -29 57 21 +205 80 156 153 157 166 +16 16 16 +249 249 249 diff --git a/graphics/pokemon/okidogi/shiny.pal b/graphics/pokemon/okidogi/shiny.pal index d239ae218f3e..e860329bf800 100644 --- a/graphics/pokemon/okidogi/shiny.pal +++ b/graphics/pokemon/okidogi/shiny.pal @@ -1,18 +1,17 @@ JASC-PAL 0100 -15 -152 208 160 -16 16 16 +14 +153 211 165 +122 50 46 +29 57 21 +188 99 61 +84 117 53 90 33 73 -140 49 12 -207 71 17 -202 103 162 +254 153 96 146 57 119 -26 29 28 121 167 58 -84 117 53 -184 140 7 254 208 27 -249 249 249 -29 57 21 +205 80 156 153 157 166 +16 16 16 +249 249 249 diff --git a/graphics/pokemon/pawmi/back.png b/graphics/pokemon/pawmi/back.png index c5d59e6677bf..2e4fd1aa05bb 100644 Binary files a/graphics/pokemon/pawmi/back.png and b/graphics/pokemon/pawmi/back.png differ diff --git a/graphics/pokemon/pawmi/front.png b/graphics/pokemon/pawmi/front.png index 265a9c717318..5fdef077d507 100644 Binary files a/graphics/pokemon/pawmi/front.png and b/graphics/pokemon/pawmi/front.png differ diff --git a/graphics/pokemon/pawmi/normal.pal b/graphics/pokemon/pawmi/normal.pal index 822fa530da4b..4d3858d79f2f 100644 --- a/graphics/pokemon/pawmi/normal.pal +++ b/graphics/pokemon/pawmi/normal.pal @@ -1,19 +1,18 @@ JASC-PAL 0100 -16 -153 210 164 -150 79 14 -243 156 78 +15 +153 211 165 96 51 23 +52 52 65 +19 121 123 +150 79 14 126 114 71 -194 89 3 +211 97 3 +235 120 35 +255 205 32 +189 162 115 +243 156 78 +16 16 16 189 162 115 244 226 188 -15 15 15 -235 120 35 -46 116 82 -211 97 3 -52 52 65 252 252 252 -197 164 98 -255 205 32 diff --git a/graphics/pokemon/pawmi/shiny.pal b/graphics/pokemon/pawmi/shiny.pal index 02d4ae6d009c..4a32c00443c4 100644 --- a/graphics/pokemon/pawmi/shiny.pal +++ b/graphics/pokemon/pawmi/shiny.pal @@ -1,19 +1,18 @@ JASC-PAL 0100 -16 -153 210 164 -220 58 50 -255 155 172 -96 51 23 -139 83 58 -194 89 3 -228 167 137 -244 226 188 -15 15 15 -255 119 147 -46 116 82 -237 82 82 +15 +153 211 165 +101 29 39 52 52 65 -252 252 252 -221 177 74 +19 121 123 +165 46 63 +173 124 103 +214 79 87 +242 112 116 255 205 32 +197 164 98 +251 142 158 +16 16 16 +222 194 165 +252 235 186 +252 252 252 diff --git a/graphics/pokemon/pawmo/back.png b/graphics/pokemon/pawmo/back.png index 42d151758a25..348b8fa8da1c 100644 Binary files a/graphics/pokemon/pawmo/back.png and b/graphics/pokemon/pawmo/back.png differ diff --git a/graphics/pokemon/pawmo/front.png b/graphics/pokemon/pawmo/front.png index 9a0139605071..a92b86a880ae 100644 Binary files a/graphics/pokemon/pawmo/front.png and b/graphics/pokemon/pawmo/front.png differ diff --git a/graphics/pokemon/pawmo/normal.pal b/graphics/pokemon/pawmo/normal.pal index 8a6a2121c513..dd35ba4e061a 100644 --- a/graphics/pokemon/pawmo/normal.pal +++ b/graphics/pokemon/pawmo/normal.pal @@ -1,18 +1,17 @@ JASC-PAL 0100 -15 -152 208 160 -136 64 0 -0 0 0 -240 184 72 -16 104 96 -232 152 0 -0 160 144 -176 112 8 -248 232 184 -216 192 160 -88 64 48 -255 255 255 -240 208 56 -168 64 32 -232 72 56 +14 +153 211 165 +111 75 49 +52 52 65 +19 121 123 +141 100 71 +189 130 64 +213 154 79 +214 177 67 +255 216 80 +255 192 96 +202 180 142 +16 16 16 +255 237 192 +255 250 254 diff --git a/graphics/pokemon/pawmo/shiny.pal b/graphics/pokemon/pawmo/shiny.pal index 3022ea1e0470..bae5fb5173c4 100644 --- a/graphics/pokemon/pawmo/shiny.pal +++ b/graphics/pokemon/pawmo/shiny.pal @@ -1,18 +1,17 @@ JASC-PAL 0100 -15 -152 208 160 -136 64 0 -0 0 0 -245 158 128 -16 104 96 -242 112 116 -0 186 182 -214 79 87 -248 232 184 -216 192 160 -88 64 48 -255 255 255 -240 208 56 -168 64 32 -232 72 56 +14 +153 211 165 +132 66 101 +52 52 65 +19 121 123 +173 124 103 +192 105 142 +217 138 162 +214 177 67 +255 216 80 +251 164 179 +222 194 165 +16 16 16 +255 237 192 +255 250 254 diff --git a/graphics/pokemon/terapagos/anim_front.png b/graphics/pokemon/terapagos/anim_front.png new file mode 100644 index 000000000000..4ef2270bd3fc Binary files /dev/null and b/graphics/pokemon/terapagos/anim_front.png differ diff --git a/graphics/pokemon/terapagos/back.png b/graphics/pokemon/terapagos/back.png new file mode 100644 index 000000000000..8ec4f6c5b0a7 Binary files /dev/null and b/graphics/pokemon/terapagos/back.png differ diff --git a/graphics/pokemon/terapagos/normal.pal b/graphics/pokemon/terapagos/normal.pal new file mode 100644 index 000000000000..533a2e7c68e7 --- /dev/null +++ b/graphics/pokemon/terapagos/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +38 26 108 +49 34 133 +103 230 225 +60 76 160 +160 64 109 +228 103 181 +0 0 0 +115 162 235 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/shiny.pal b/graphics/pokemon/terapagos/shiny.pal new file mode 100644 index 000000000000..1a59467bd6f8 --- /dev/null +++ b/graphics/pokemon/terapagos/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +37 114 136 +66 151 189 +151 58 210 +63 209 230 +160 64 109 +234 243 49 +0 0 0 +218 32 48 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/terastal/anim_front.png b/graphics/pokemon/terapagos/terastal/anim_front.png new file mode 100644 index 000000000000..90a42f88b52f Binary files /dev/null and b/graphics/pokemon/terapagos/terastal/anim_front.png differ diff --git a/graphics/pokemon/terapagos/terastal/back.png b/graphics/pokemon/terapagos/terastal/back.png new file mode 100644 index 000000000000..cfa96b0ab075 Binary files /dev/null and b/graphics/pokemon/terapagos/terastal/back.png differ diff --git a/graphics/pokemon/terapagos/terastal/normal.pal b/graphics/pokemon/terapagos/terastal/normal.pal new file mode 100644 index 000000000000..453f7ce70c16 --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +52 66 152 +0 200 255 +197 34 91 diff --git a/graphics/pokemon/terapagos/terastal/shiny.pal b/graphics/pokemon/terapagos/terastal/shiny.pal new file mode 100644 index 000000000000..f6103ac9f688 --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +84 215 251 +255 0 0 +244 255 0 diff --git a/include/battle.h b/include/battle.h index dc771a5d77df..92da6ad05efb 100644 --- a/include/battle.h +++ b/include/battle.h @@ -196,10 +196,10 @@ struct SpecialStatus u8 statLowered:1; u8 lightningRodRedirected:1; u8 restoredBattlerSprite: 1; - u8 traced:1; u8 faintedHasReplacement:1; u8 focusBanded:1; u8 focusSashed:1; + u8 unused:1; // End of byte u8 sturdied:1; u8 stormDrainRedirected:1; @@ -662,7 +662,11 @@ struct BattleStruct u16 abilityPreventingSwitchout; u8 hpScale; u16 synchronizeMoveEffect; - bool8 anyMonHasTransformed; + u8 anyMonHasTransformed:1; // Only used in battle_tv.c + u8 multipleSwitchInBattlers:4; // One bit per battler + u8 multipleSwitchInState:2; + u8 multipleSwitchInCursor:3; + u8 multipleSwitchInSortedBattlers[MAX_BATTLERS_COUNT]; void (*savedCallback)(void); u16 usedHeldItems[PARTY_SIZE][NUM_BATTLE_SIDES]; // For each party member and side. For harvest, recycle u16 chosenItem[MAX_BATTLERS_COUNT]; @@ -733,7 +737,7 @@ struct BattleStruct u16 moveEffect2; // For Knock Off u16 changedSpecies[NUM_BATTLE_SIDES][PARTY_SIZE]; // For forms when multiple mons can change into the same pokemon. u8 quickClawBattlerId; - struct LostItem itemLost[PARTY_SIZE]; // Player's team that had items consumed or stolen (two bytes per party member) + struct LostItem itemLost[NUM_BATTLE_SIDES][PARTY_SIZE]; // Pokemon that had items consumed or stolen (two bytes per party member per side) u8 forcedSwitch:4; // For each battler u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects u8 blunderPolicy:1; // should blunder policy activate @@ -779,6 +783,7 @@ struct BattleStruct u8 supremeOverlordCounter[MAX_BATTLERS_COUNT]; u8 quickClawRandom[MAX_BATTLERS_COUNT]; u8 quickDrawRandom[MAX_BATTLERS_COUNT]; + u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, @@ -1090,7 +1095,6 @@ extern u16 gMoveToLearn; extern u32 gFieldStatuses; extern struct FieldTimer gFieldTimers; extern u8 gBattlerAbility; -extern u16 gPartnerSpriteId; extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT]; extern const struct BattleMoveEffect gBattleMoveEffects[]; diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index bd2b8fb92036..8ea2141aee12 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -134,10 +134,8 @@ bool32 HasMagicCoatAffectedMove(u32 battler); bool32 HasSnatchAffectedMove(u32 battler); // status checks -bool32 AI_CanBeBurned(u32 battler, u32 ability); bool32 AI_CanGetFrostbite(u32 battler, u32 ability); bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability); -bool32 AI_CanSleep(u32 battler, u32 ability); bool32 IsBattlerIncapacitated(u32 battler, u32 ability); bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove); bool32 ShouldPoisonSelf(u32 battler, u32 ability); diff --git a/include/battle_anim.h b/include/battle_anim.h index 75cce62d2c13..14b03ecbdd2c 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -203,10 +203,10 @@ u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); // battle_anim_status_effects.c -#define STAT_ANIM_PLUS1 MOVE_EFFECT_ATK_PLUS_1 - 1 -#define STAT_ANIM_PLUS2 MOVE_EFFECT_ATK_PLUS_2 - 1 -#define STAT_ANIM_MINUS1 MOVE_EFFECT_ATK_MINUS_1 - 1 -#define STAT_ANIM_MINUS2 MOVE_EFFECT_ATK_MINUS_2 - 1 +#define STAT_ANIM_PLUS1 (MOVE_EFFECT_ATK_PLUS_1 - 1) +#define STAT_ANIM_PLUS2 (MOVE_EFFECT_ATK_PLUS_2 - 1) +#define STAT_ANIM_MINUS1 (MOVE_EFFECT_ATK_MINUS_1 - 1) +#define STAT_ANIM_MINUS2 (MOVE_EFFECT_ATK_MINUS_2 - 1) #define STAT_ANIM_MULTIPLE_PLUS1 55 #define STAT_ANIM_MULTIPLE_PLUS2 56 #define STAT_ANIM_MULTIPLE_MINUS1 57 diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 540390bb5373..5075d52be735 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -24,7 +24,7 @@ struct PickupItem s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk); s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility); -s32 GetCritHitChance(s32 critChanceIndex); +s32 GetCritHitOdds(s32 critChanceIndex); u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); u8 GetBattlerTurnOrderNum(u8 battlerId); bool32 NoAliveMonsForPlayer(void); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d7b58ba11a17..148a91783b50 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -265,6 +265,7 @@ extern const u8 BattleScript_WonderRoomEnds[]; extern const u8 BattleScript_MagicRoomEnds[]; extern const u8 BattleScript_TerrainEnds[]; extern const u8 BattleScript_TerrainEnds_Ret[]; +extern const u8 BattleScript_GrassyTerrainEnds[]; extern const u8 BattleScript_MudSportEnds[]; extern const u8 BattleScript_WaterSportEnds[]; extern const u8 BattleScript_SturdiedMsg[]; @@ -796,7 +797,6 @@ extern const u8 BattleScript_EffectPlasmaFists[]; extern const u8 BattleScript_EffectHyperspaceFury[]; extern const u8 BattleScript_EffectAuraWheel[]; extern const u8 BattleScript_EffectPhotonGeyser[]; -extern const u8 BattleScript_EffectShellSideArm[]; extern const u8 BattleScript_EffectNoRetreat[]; extern const u8 BattleScript_EffectTarShot[]; extern const u8 BattleScript_EffectPoltergeist[]; diff --git a/include/battle_util.h b/include/battle_util.h index a5349a7c2a83..644a112d7dab 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -29,17 +29,15 @@ #define ABILITYEFFECT_IMMUNITY 6 #define ABILITYEFFECT_SYNCHRONIZE 7 #define ABILITYEFFECT_ATK_SYNCHRONIZE 8 -#define ABILITYEFFECT_TRACE1 9 -#define ABILITYEFFECT_TRACE2 10 -#define ABILITYEFFECT_MOVE_END_OTHER 11 -#define ABILITYEFFECT_NEUTRALIZINGGAS 12 -#define ABILITYEFFECT_FIELD_SPORT 13 // Only used if B_SPORT_TURNS >= GEN_6 -#define ABILITYEFFECT_ON_WEATHER 14 -#define ABILITYEFFECT_ON_TERRAIN 15 -#define ABILITYEFFECT_SWITCH_IN_TERRAIN 16 -#define ABILITYEFFECT_SWITCH_IN_WEATHER 17 -#define ABILITYEFFECT_OPPORTUNIST 18 -#define ABILITYEFFECT_SWITCH_IN_STATUSES 19 +#define ABILITYEFFECT_MOVE_END_OTHER 9 +#define ABILITYEFFECT_NEUTRALIZINGGAS 10 +#define ABILITYEFFECT_FIELD_SPORT 11 // Only used if B_SPORT_TURNS >= GEN_6 +#define ABILITYEFFECT_ON_WEATHER 12 +#define ABILITYEFFECT_ON_TERRAIN 13 +#define ABILITYEFFECT_SWITCH_IN_TERRAIN 14 +#define ABILITYEFFECT_SWITCH_IN_WEATHER 15 +#define ABILITYEFFECT_OPPORTUNIST 16 +#define ABILITYEFFECT_SWITCH_IN_STATUSES 17 // Special cases #define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS >= GEN_6 #define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6 @@ -155,7 +153,7 @@ u32 IsAbilityOnOpposingSide(u32 battler, u32 ability); u32 IsAbilityOnField(u32 ability); u32 IsAbilityOnFieldExcept(u32 battler, u32 ability); u32 IsAbilityPreventingEscape(u32 battler); -bool32 IsBattlerProtected(u32 battler, u32 move); +bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move); bool32 CanBattlerEscape(u32 battler); // no ability check void BattleScriptExecute(const u8 *BS_ptr); void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); @@ -190,7 +188,7 @@ bool32 IsBattlerMegaEvolved(u32 battler); bool32 IsBattlerPrimalReverted(u32 battler); bool32 IsBattlerUltraBursted(u32 battler); u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method); -bool32 TryBattleFormChange(u32 battler, u16 method); +bool32 TryBattleFormChange(u32 battler, u32 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId); u32 GetIllusionMonSpecies(u32 battler); @@ -206,6 +204,7 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move); bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId); bool32 IsPartnerMonFromSameTrainer(u32 battler); u8 GetCategoryBasedOnStats(u32 battler); +void SetShellSideArmCategory(void); bool32 MoveIsAffectedBySheerForce(u32 move); bool32 TestIfSheerForceAffected(u32 battler, u16 move); void TryRestoreHeldItems(void); @@ -234,17 +233,16 @@ bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect); bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument); bool32 MoveHasChargeTurnAdditionalEffect(u32 move); -bool32 CanSleep(u32 battler); -bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget); -bool32 CanBeBurned(u32 battler); -bool32 CanBeParalyzed(u32 battler); +bool32 CanBeSlept(u32 battler, u32 ability); +bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility); +bool32 CanBeBurned(u32 battler, u32 ability); +bool32 CanBeParalyzed(u32 battler, u32 ability); bool32 CanBeFrozen(u32 battler); bool32 CanGetFrostbite(u32 battler); bool32 CanBeConfused(u32 battler); bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag); u32 GetBattlerAffectionHearts(u32 battler); u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc); -bool32 IsMyceliumMightOnField(void); bool32 ChangeTypeBasedOnTerrain(u32 battler); void RemoveConfusionStatus(u32 battler); u8 GetBattlerGender(u32 battler); diff --git a/include/config/battle.h b/include/config/battle.h index 586d24e5f6d2..bf21d5722a5b 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -135,6 +135,7 @@ #define B_WEATHER_FORMS GEN_LATEST // In Gen5+, Castform and Cherrim revert to their base form upon losing their respective ability. Cherrim needs Flower Gift to swap forms. #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. +#define B_REDIRECT_ABILITY_IMMUNITY GEN_LATEST // In Gen5+, Pokémon with Lightning Rod/Storm Drain become immune to Electric/Water-type moves and increase their Sp. Attack by 1 stage on top of the redirecting effect. #define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight. #define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. #define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x. diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index b19bc0f7b1ba..13a300f064fd 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -302,7 +302,6 @@ enum { EFFECT_HYPERSPACE_FURY, EFFECT_AURA_WHEEL, EFFECT_PHOTON_GEYSER, - EFFECT_SHELL_SIDE_ARM, EFFECT_TERRAIN_PULSE, EFFECT_NO_RETREAT, EFFECT_TAR_SHOT, diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 7228954f214a..10e7dfea5136 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -63,8 +63,8 @@ #define BS_EFFECT_BATTLER 2 #define BS_FAINTED 3 #define BS_ATTACKER_WITH_PARTNER 4 // for Cmd_updatestatusicon -#define BS_FAINTED_LINK_MULTIPLE_1 5 // for openpartyscreen -#define BS_FAINTED_LINK_MULTIPLE_2 6 // for openpartyscreen +#define BS_FAINTED_MULTIPLE_1 5 // for openpartyscreen +#define BS_FAINTED_MULTIPLE_2 6 // for openpartyscreen #define BS_BATTLER_0 7 #define BS_ATTACKER_SIDE 8 // for Cmd_jumpifability #define BS_TARGET_SIDE 9 // for Cmd_jumpifability @@ -208,35 +208,34 @@ #define VARIOUS_JUMP_IF_WEATHER_AFFECTED 116 #define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 117 #define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 118 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 119 -#define VARIOUS_TRY_NO_RETREAT 120 -#define VARIOUS_TRY_TAR_SHOT 121 -#define VARIOUS_CAN_TAR_SHOT_WORK 122 -#define VARIOUS_CHECK_POLTERGEIST 123 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 124 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 125 -#define VARIOUS_JUMP_IF_UNDER_200 126 -#define VARIOUS_SET_SKY_DROP 127 -#define VARIOUS_CLEAR_SKY_DROP 128 -#define VARIOUS_SKY_DROP_YAWN 129 -#define VARIOUS_CURE_CERTAIN_STATUSES 130 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 131 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 132 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 133 -#define VARIOUS_SAVE_BATTLER_ITEM 134 -#define VARIOUS_RESTORE_BATTLER_ITEM 135 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 136 -#define VARIOUS_SET_BEAK_BLAST 137 -#define VARIOUS_SWAP_SIDE_STATUSES 138 -#define VARIOUS_SWAP_STATS 139 -#define VARIOUS_TEATIME_INVUL 140 -#define VARIOUS_TEATIME_TARGETS 141 -#define VARIOUS_TRY_WIND_RIDER_POWER 142 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 143 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 144 -#define VARIOUS_STORE_HEALING_WISH 145 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 146 -#define VARIOUS_TRY_REVIVAL_BLESSING 147 +#define VARIOUS_TRY_NO_RETREAT 119 +#define VARIOUS_TRY_TAR_SHOT 120 +#define VARIOUS_CAN_TAR_SHOT_WORK 121 +#define VARIOUS_CHECK_POLTERGEIST 122 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 123 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 124 +#define VARIOUS_JUMP_IF_UNDER_200 125 +#define VARIOUS_SET_SKY_DROP 126 +#define VARIOUS_CLEAR_SKY_DROP 127 +#define VARIOUS_SKY_DROP_YAWN 128 +#define VARIOUS_CURE_CERTAIN_STATUSES 129 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 130 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 131 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 132 +#define VARIOUS_SAVE_BATTLER_ITEM 133 +#define VARIOUS_RESTORE_BATTLER_ITEM 134 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 135 +#define VARIOUS_SET_BEAK_BLAST 136 +#define VARIOUS_SWAP_SIDE_STATUSES 137 +#define VARIOUS_SWAP_STATS 138 +#define VARIOUS_TEATIME_INVUL 139 +#define VARIOUS_TEATIME_TARGETS 140 +#define VARIOUS_TRY_WIND_RIDER_POWER 141 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 142 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 143 +#define VARIOUS_STORE_HEALING_WISH 144 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 145 +#define VARIOUS_TRY_REVIVAL_BLESSING 146 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 43afdbe2122c..bf54ade9fcdf 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,10 +1,10 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// 1.8.4 +// 1.8.5 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 8 -#define EXPANSION_VERSION_PATCH 4 +#define EXPANSION_VERSION_PATCH 5 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 30bb54d0279a..94f97639f807 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -24,6 +24,8 @@ // param2: time of day to check, optional. // - DAY if Form change that activates in the daytime. // - NIGHT if Form change that activates at nighttime. +// - 0 if irrelevant, but param3 is necessary. +// param3: illegal statuses to have, optional. #define FORM_CHANGE_ITEM_USE 2 // TODO: Form change that activates when the Pokémon learns or forgets the move. diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 7a235325ce62..9bfdec6bf1fb 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -289,8 +289,8 @@ #define EVO_LEVEL_FOG 42 // Pokémon reaches the specified level during fog in the overworld #define EVO_MOVE_TWO_SEGMENT 43 // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 #define EVO_MOVE_THREE_SEGMENT 44 // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 -#define EVO_LEVEL_FAMILY_OF_THREE 45 // Pokémon reaches the specified level with a personality value with a modulus of 0 -#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level with a personality value with a modulus of 1-99 +#define EVO_LEVEL_FAMILY_OF_THREE 45 // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 +#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 #define EVO_LEVEL_MOVE_TWENTY_TIMES 47 // Pokémon levels up after having used a move for at least 20 times #define EVO_LEVEL_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male #define EVO_LEVEL_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female @@ -302,6 +302,7 @@ #define EVO_MODE_ITEM_CHECK 3 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve #define EVO_MODE_BATTLE_SPECIAL 4 #define EVO_MODE_OVERWORLD_SPECIAL 5 +#define EVO_MODE_BATTLE_ONLY 6 // This mode is only used in battles to support Tandemaus' unique requirement #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/include/constants/species.h b/include/constants/species.h index d4dcc8211557..73455131247f 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1629,7 +1629,7 @@ #define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX 1522 #define SPECIES_MIMIKYU_TOTEM_BUSTED 1523 -#define SPECIES_EGG SPECIES_MIMIKYU_TOTEM_BUSTED + 1 +#define SPECIES_EGG (SPECIES_MIMIKYU_TOTEM_BUSTED + 1) #define NUM_SPECIES SPECIES_EGG diff --git a/include/daycare.h b/include/daycare.h index daea812bedd9..81e613b07c0d 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -32,7 +32,7 @@ void SetDaycareCompatibilityString(void); bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio); void ShowDaycareLevelMenu(void); void ChooseSendDaycareMon(void); -u8 GetEggMovesSpecies(u16 species, u16 *eggMoves); +u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves); bool8 SpeciesCanLearnEggMove(u16 species, u16 move); #endif // GUARD_DAYCARE_H diff --git a/include/global.h b/include/global.h index be2f3e532267..faa6d177bd63 100644 --- a/include/global.h +++ b/include/global.h @@ -597,14 +597,15 @@ struct Roamer /*0x08*/ u16 species; /*0x0A*/ u16 hp; /*0x0C*/ u8 level; - /*0x0D*/ u8 status; + /*0x0D*/ u8 statusA; /*0x0E*/ u8 cool; /*0x0F*/ u8 beauty; /*0x10*/ u8 cute; /*0x11*/ u8 smart; /*0x12*/ u8 tough; /*0x13*/ bool8 active; - /*0x14*/ u8 filler[0x8]; + /*0x14*/ u8 statusB; // Stores frostbite + /*0x14*/ u8 filler[0x7]; }; struct RamScriptData diff --git a/include/random.h b/include/random.h index d15aa28bfb21..1503814c0ec0 100644 --- a/include/random.h +++ b/include/random.h @@ -158,6 +158,7 @@ enum RandomTag RNG_ACCURACY, RNG_CONFUSION, RNG_CRITICAL_HIT, + RNG_CURSED_BODY, RNG_CUTE_CHARM, RNG_DAMAGE_MODIFIER, RNG_DIRE_CLAW, @@ -175,6 +176,7 @@ enum RandomTag RNG_METRONOME, RNG_PARALYSIS, RNG_POISON_POINT, + RNG_POISON_TOUCH, RNG_RAMPAGE_TURNS, RNG_SECONDARY_EFFECT, RNG_SECONDARY_EFFECT_2, @@ -188,6 +190,8 @@ enum RandomTag RNG_QUICK_CLAW, RNG_TRACE, RNG_FICKLE_BEAM, + RNG_AI_ABILITY, + RNG_SHELL_SIDE_ARM, }; #define RandomWeighted(tag, ...) \ diff --git a/include/test/battle.h b/include/test/battle.h index b44186ed3d0c..514e3bca495c 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -695,6 +695,7 @@ struct BattleTestData struct BattleTestRunnerState { u8 battlersCount; + bool8 forceMoveAnim; u16 parametersCount; // Valid only in BattleTest_Setup. u16 parameters; u16 runParameter; @@ -996,6 +997,8 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); #define NONE_OF for (OpenQueueGroup(__LINE__, QUEUE_GROUP_NONE_OF); gBattleTestRunnerState->data.queueGroupType != QUEUE_GROUP_NONE; CloseQueueGroup(__LINE__)) #define NOT NONE_OF +#define FORCE_MOVE_ANIM(set) gBattleTestRunnerState->forceMoveAnim = (set) + #define ABILITY_POPUP(battler, ...) QueueAbility(__LINE__, battler, (struct AbilityEventContext) { __VA_ARGS__ }) #define ANIMATION(type, id, ...) QueueAnimation(__LINE__, type, id, (struct AnimationEventContext) { __VA_ARGS__ }) #define HP_BAR(battler, ...) QueueHP(__LINE__, battler, (struct HPEventContext) { APPEND_TRUE(__VA_ARGS__) }) diff --git a/include/vs_seeker.h b/include/vs_seeker.h index f166cf4f60eb..483ff7f3a2ec 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -8,6 +8,7 @@ bool8 UpdateVsSeekerStepCounter(void); void MapResetTrainerRematches(u16 mapGroup, u16 mapNum); void ClearRematchMovementByTrainerId(void); u16 GetRematchTrainerIdVSSeeker(u16 trainerId); +bool32 IsVsSeekerEnabled(void); #define VSSEEKER_RECHARGE_STEPS 50 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index d42dbfa2a1cd..493724244f2f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -943,6 +943,32 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; + case ABILITY_LIGHTNING_ROD: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough + case ABILITY_MOTOR_DRIVE: + case ABILITY_VOLT_ABSORB: + if (moveType == TYPE_ELECTRIC) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_STORM_DRAIN: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + if (moveType == TYPE_WATER) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_EARTH_EATER: + if (moveType == TYPE_GROUND) + RETURN_SCORE_MINUS(20); + break; } // def ability checks // target partner ability checks & not attacking partner @@ -1853,7 +1879,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_REST: - if (!AI_CanSleep(battlerAtk, aiData->abilities[battlerAtk])) + if (!CanBeSlept(battlerAtk, aiData->abilities[battlerAtk])) ADJUST_SCORE(-10); //fallthrough case EFFECT_RESTORE_HP: @@ -2808,7 +2834,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 + && moveType == TYPE_ELECTRIC && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) { @@ -2824,7 +2851,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; // handled in AI_HPAware case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 + && moveType == TYPE_WATER && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) { @@ -2879,20 +2907,6 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_PLUS(DECENT_EFFECT); } break; - case ABILITY_DEFIANT: - if (IsStatLoweringEffect(effect) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); - } - break; - case ABILITY_COMPETITIVE: - if (IsStatLoweringEffect(effect) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); - } - break; } } // ability checks @@ -2910,7 +2924,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SWAGGER: if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] < MAX_STAT_STAGE && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL) - && (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, TRUE) + && (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, atkPartnerAbility) || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS)) { @@ -2920,7 +2934,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_FLATTER: if (gBattleMons[battlerAtkPartner].statStages[STAT_SPATK] < MAX_STAT_STAGE && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL) - && (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, TRUE) + && (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, atkPartnerAbility) || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS)) { @@ -3387,7 +3401,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle); break; case EFFECT_ROAR: - if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF) + if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF) || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) break; else if (IsDynamaxed(battlerDef)) @@ -3458,7 +3472,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_REST: - if (!(AI_CanSleep(battlerAtk, aiData->abilities[battlerAtk]))) + if (!(CanBeSlept(battlerAtk, aiData->abilities[battlerAtk]))) { break; } @@ -3717,7 +3731,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SANDSTORM: - if (ShouldSetSandstorm(battlerAtk, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetSandstorm(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) { ADJUST_SCORE(DECENT_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_SMOOTH_ROCK) @@ -3938,7 +3952,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case HOLD_EFFECT_FLAME_ORB: - if (!ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk]) && AI_CanBeBurned(battlerAtk, aiData->abilities[battlerDef])) + if (!ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk]) && CanBeBurned(battlerAtk, aiData->abilities[battlerDef])) ADJUST_SCORE(DECENT_EFFECT); break; case HOLD_EFFECT_BLACK_SLUDGE: @@ -4268,7 +4282,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_ION_DELUGE: if ((aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD) + || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) && gMovesInfo[predictedMove].type == TYPE_NORMAL) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4327,7 +4341,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (predictedMove != MOVE_NONE && (aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) + || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) { ADJUST_SCORE(DECENT_EFFECT); } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 093db185d9c4..bde6f9234843 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -334,27 +334,29 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) // Create an array of possible absorb abilities so the AI considers all of them if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_FIRE) { - absorbingTypeAbilities[0] = ABILITY_FLASH_FIRE; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_FLASH_FIRE; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_WATER) { - absorbingTypeAbilities[0] = ABILITY_WATER_ABSORB; - absorbingTypeAbilities[1] = ABILITY_STORM_DRAIN; - absorbingTypeAbilities[2] = ABILITY_DRY_SKIN; - numAbsorbingAbilities = 3; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WATER_ABSORB; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_DRY_SKIN; + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_STORM_DRAIN; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_ELECTRIC) { - absorbingTypeAbilities[0] = ABILITY_VOLT_ABSORB; - absorbingTypeAbilities[1] = ABILITY_MOTOR_DRIVE; - absorbingTypeAbilities[2] = ABILITY_LIGHTNING_ROD; - numAbsorbingAbilities = 3; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_VOLT_ABSORB; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_MOTOR_DRIVE; + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_LIGHTNING_ROD; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GRASS) { - absorbingTypeAbilities[0] = ABILITY_SAP_SIPPER; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_SAP_SIPPER; + } + else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GROUND) + { + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_EARTH_EATER; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GROUND) { @@ -442,7 +444,7 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) { //Yawn if (gStatuses3[battler] & STATUS3_YAWN - && AI_CanSleep(battler, monAbility) + && CanBeSlept(battler, monAbility) && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 3) { switchMon = TRUE; @@ -1291,8 +1293,6 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon hazardDamage += spikesDamage; } - // Toxic Spikes - // TODO: CanBePoisoned compatibility to avoid duplicate code if ((hazardFlags & SIDE_STATUS_TOXIC_SPIKES) && (defType1 != TYPE_POISON && defType2 != TYPE_POISON && defType1 != TYPE_STEEL && defType2 != TYPE_STEEL && ability != ABILITY_IMMUNITY && ability != ABILITY_POISON_HEAL && ability != ABILITY_COMATOSE diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4524e3b25b51..b57d474bb8ed 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -385,15 +385,21 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) switch (battlerDefAbility) { + case ABILITY_LIGHTNING_ROD: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough case ABILITY_VOLT_ABSORB: case ABILITY_MOTOR_DRIVE: - case ABILITY_LIGHTNING_ROD: if (moveType == TYPE_ELECTRIC) return TRUE; break; + case ABILITY_STORM_DRAIN: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough case ABILITY_WATER_ABSORB: case ABILITY_DRY_SKIN: - case ABILITY_STORM_DRAIN: if (moveType == TYPE_WATER) return TRUE; break; @@ -477,8 +483,9 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes } else if (gMovesInfo[move].effect == EFFECT_PHOTON_GEYSER) gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL); - - if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) + else if (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) + gBattleStruct->swapDamageCategory = TRUE; + else if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) move = GetNaturePowerMove(); gBattleStruct->dynamicMoveType = 0; @@ -515,15 +522,23 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); critChanceIndex = CalcCritChanceStageArgs(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); - if (critChanceIndex > 1) // Consider crit damage only if a move has at least +1 crit chance + if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance + { + s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + u32 critOdds = GetCritHitOdds(critChanceIndex); // Crit chance is 1/critOdds + // With critOdds getting closer to 1, dmg gets closer to critDmg. + dmg = LowestRollDmg((critDmg + normalDmg * (critOdds - 1)) / (critOdds)); + } + else if (critChanceIndex == -2) // Guaranteed critical { s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, effectivenessMultiplier, weather, TRUE, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - u32 critChance = GetCritHitChance(critChanceIndex); - // With critChance getting closer to 1, dmg gets closer to critDmg. - dmg = LowestRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); + dmg = LowestRollDmg(critDmg); } else { @@ -811,17 +826,18 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo) { bool32 effect1, effect2; - s32 defAbility = AI_DATA->abilities[battlerDef]; + u32 defAbility = AI_DATA->abilities[battlerDef]; + u32 atkAbility = AI_DATA->abilities[battlerAtk]; // Check if physical moves hurt. - if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_PROTECTIVE_PADS + if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_PROTECTIVE_PADS && atkAbility != ABILITY_LONG_REACH && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET || defAbility == ABILITY_IRON_BARBS || defAbility == ABILITY_ROUGH_SKIN)) { - if (IS_MOVE_PHYSICAL(move1) && !IS_MOVE_PHYSICAL(move2)) + if (gMovesInfo[move1].makesContact && !gMovesInfo[move2].makesContact) + return -1; + if (gMovesInfo[move2].makesContact && !gMovesInfo[move1].makesContact) return 1; - if (IS_MOVE_PHYSICAL(move2) && !IS_MOVE_PHYSICAL(move1)) - return 0; } // Check additional effects. @@ -1076,6 +1092,8 @@ bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) // does NOT include ability suppression checks s32 AI_DecideKnownAbilityForTurn(u32 battlerId) { + u32 validAbilities[NUM_ABILITY_SLOTS]; + u8 i, numValidAbilities = 0; u32 knownAbility = GetBattlerAbility(battlerId); // We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching @@ -1097,18 +1115,15 @@ s32 AI_DecideKnownAbilityForTurn(u32 battlerId) if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) return knownAbility; - // Else, guess the ability - if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) + for (i = 0; i < NUM_ABILITY_SLOTS; i++) { - u32 abilityGuess = ABILITY_NONE; - while (abilityGuess == ABILITY_NONE) - { - abilityGuess = gSpeciesInfo[gBattleMons[battlerId].species].abilities[Random() % NUM_ABILITY_SLOTS]; - } - - return abilityGuess; + if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[i] != ABILITY_NONE) + validAbilities[numValidAbilities++] = gSpeciesInfo[gBattleMons[battlerId].species].abilities[i]; } + if (numValidAbilities > 0) + return validAbilities[RandomUniform(RNG_AI_ABILITY, 0, numValidAbilities - 1)]; + return ABILITY_NONE; // Unknown. } @@ -2615,48 +2630,18 @@ bool32 IsBattlerIncapacitated(u32 battler, u32 ability) return FALSE; } -bool32 AI_CanSleep(u32 battler, u32 ability) -{ - if (ability == ABILITY_INSOMNIA - || ability == ABILITY_VITAL_SPIRIT - || ability == ABILITY_COMATOSE - || gBattleMons[battler].status1 & STATUS1_ANY - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD - || (gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN)) - || IsAbilityStatusProtected(battler)) - return FALSE; - return TRUE; -} - bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) { - if (!AI_CanSleep(battlerDef, defAbility) + if (!CanBeSlept(battlerDef, defAbility) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) // shouldn't try to sleep mon that partner is trying to make sleep return FALSE; return TRUE; } -static bool32 AI_CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 move) -{ - u32 ability = AI_DATA->abilities[battlerDef]; - - if (!(CanPoisonType(battlerAtk, battlerDef)) - || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battlerDef].status1 & STATUS1_ANY - || ability == ABILITY_IMMUNITY - || ability == ABILITY_COMATOSE - || AI_IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL) - || gBattleMons[battlerDef].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battlerDef) - || AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) - return FALSE; - return TRUE; -} - bool32 ShouldPoisonSelf(u32 battler, u32 ability) { - if (AI_CanBePoisoned(battler, battler, 0) && ( + if (CanBePoisoned(battler, battler, GetBattlerAbility(battler)) && ( ability == ABILITY_MARVEL_SCALE || ability == ABILITY_POISON_HEAL || ability == ABILITY_QUICK_FEET @@ -2671,7 +2656,7 @@ bool32 ShouldPoisonSelf(u32 battler, u32 ability) bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) { - if (!AI_CanBePoisoned(battlerAtk, battlerDef, move) + if (!CanBePoisoned(battlerAtk, battlerDef, GetBattlerAbility(battlerDef)) || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) @@ -2684,20 +2669,9 @@ bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u3 return TRUE; } -static bool32 AI_CanBeParalyzed(u32 battler, u32 ability) -{ - if (ability == ABILITY_LIMBER - || ability == ABILITY_COMATOSE - || IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC) - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler)) - return FALSE; - return TRUE; -} - bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) { - if (!AI_CanBeParalyzed(battlerDef, defAbility) + if (!CanBeParalyzed(battlerDef, defAbility) || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) @@ -2731,19 +2705,6 @@ bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battler return TRUE; } -bool32 AI_CanBeBurned(u32 battler, u32 ability) -{ - if (ability == ABILITY_WATER_VEIL - || ability == ABILITY_WATER_BUBBLE - || ability == ABILITY_COMATOSE - || IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) - return FALSE; - return TRUE; -} - bool32 AI_CanGetFrostbite(u32 battler, u32 ability) { if (ability == ABILITY_MAGMA_ARMOR @@ -2758,7 +2719,7 @@ bool32 AI_CanGetFrostbite(u32 battler, u32 ability) bool32 ShouldBurnSelf(u32 battler, u32 ability) { - if (AI_CanBeBurned(battler, ability) && ( + if (CanBeBurned(battler, ability) && ( ability == ABILITY_QUICK_FEET || ability == ABILITY_HEATPROOF || ability == ABILITY_MAGIC_GUARD @@ -2772,7 +2733,7 @@ bool32 ShouldBurnSelf(u32 battler, u32 ability) bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { - if (!AI_CanBeBurned(battlerDef, defAbility) + if (!CanBeBurned(battlerDef, defAbility) || AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0 || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove)) diff --git a/src/battle_anim.c b/src/battle_anim.c index af1a5a262a80..c1bd15c8384a 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -18,6 +18,7 @@ #include "sprite.h" #include "task.h" #include "test_runner.h" +#include "test/battle.h" #include "constants/battle_anim.h" #include "constants/moves.h" @@ -239,6 +240,9 @@ void LaunchBattleAnimation(u32 animType, u32 animId) TestRunner_Battle_RecordAnimation(animType, animId); // Play Transform and Ally Switch even in Headless as these move animations also change mon data. if (gTestRunnerHeadless + #if TESTING // Because gBattleTestRunnerState is not seen outside of test env. + && !gBattleTestRunnerState->forceMoveAnim + #endif // TESTING && !(animType == ANIM_TYPE_MOVE && (animId == MOVE_TRANSFORM || animId == MOVE_ALLY_SWITCH))) { gAnimScriptCallback = Nop; @@ -446,7 +450,6 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) u32 i; u32 ignoredTgt = gBattlerAttacker; u32 target = GetBattlerMoveTargetType(gBattleAnimAttacker, gAnimMoveIndex); - switch (battlerAnimId) { case ANIM_ATTACKER: @@ -458,7 +461,6 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) ignoredTgt = gBattlerAttacker; break; } - switch (target) { case MOVE_TARGET_FOES_AND_ALLY: diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 5c3fd4176240..b817adf09754 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -435,7 +435,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler) const u32 *trainerPal; if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) - trainerPal = gTrainerBacksprites[gPartnerSpriteId].palette.data; + trainerPal = gTrainerBacksprites[gBattlePartners[gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic].palette.data; else if (IsAiVsAiBattle()) trainerPal = gTrainerSprites[GetTrainerPicFromId(gPartnerTrainerId)].palette.data; else diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 53860990c43d..3a9ca1ec00c2 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -517,7 +517,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(u32 battler) else trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN; - trainerPal = gTrainerSprites[trainerPicId].palette.data; + trainerPal = gTrainerBacksprites[trainerPicId].palette.data; BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Intro_TryShinyAnimShowHealthbox); } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index b2ae3039df71..c4acc1691a0c 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1601,6 +1601,7 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 * battleMon.abilityNum = GetMonData(&party[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&party[monId], MON_DATA_OT_ID); battleMon.metLevel = GetMonData(&party[monId], MON_DATA_MET_LEVEL); + battleMon.isShiny = GetMonData(&party[monId], MON_DATA_IS_SHINY); GetMonData(&party[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&party[monId], MON_DATA_OT_NAME, battleMon.otName); diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 557ed604feef..8dbde6d82133 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -791,7 +791,7 @@ void BS_SetMaxMoveEffect(void) { static const u8 sSnoozeEffects[] = {TRUE, FALSE}; if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) - && CanSleep(gBattlerTarget) + && CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget)) && RandomElement(RNG_G_MAX_SNOOZE, sSnoozeEffects)) // 50% chance of success { gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); @@ -897,7 +897,7 @@ void BS_TrySetStatus1(void) switch (status1) { case STATUS1_POISON: - if (CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + if (CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))) { gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON; gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -905,7 +905,7 @@ void BS_TrySetStatus1(void) } break; case STATUS1_PARALYSIS: - if (CanBeParalyzed(gBattlerTarget)) + if (CanBeParalyzed(gBattlerTarget, GetBattlerAbility(gBattlerTarget))) { gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS; gBattleCommunication[MULTISTRING_CHOOSER] = 3; @@ -913,7 +913,7 @@ void BS_TrySetStatus1(void) } break; case STATUS1_SLEEP: - if (CanSleep(gBattlerTarget)) + if (CanBeSlept(gBattlerTarget, GetBattlerAbility(gBattlerTarget))) { if (B_SLEEP_TURNS >= GEN_5) gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 3) + 2); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 801e2f5fc546..9970be2e659c 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -595,6 +595,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) if (B_TRANSFORM_SHINY >= GEN_4) { currentPersonality = gTransformedPersonalities[battler]; + isShiny = gTransformedShininess[battler]; } else { diff --git a/src/battle_interface.c b/src/battle_interface.c index 391f62a89dab..4e32fcf5a61b 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -34,7 +34,6 @@ #include "constants/songs.h" #include "constants/items.h" #include "level_caps.h" -#include "level_caps.h" enum { // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c diff --git a/src/battle_main.c b/src/battle_main.c index b929d63f8b77..f0ced9e50f96 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -221,7 +221,6 @@ EWRAM_DATA u16 gMoveToLearn = 0; EWRAM_DATA u32 gFieldStatuses = 0; EWRAM_DATA struct FieldTimer gFieldTimers = {0}; EWRAM_DATA u8 gBattlerAbility = 0; -EWRAM_DATA u16 gPartnerSpriteId = 0; EWRAM_DATA struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; EWRAM_DATA u8 gLastUsedBall = 0; @@ -3377,7 +3376,8 @@ static void BattleStartClearSetData(void) { gBattleStruct->usedHeldItems[i][B_SIDE_PLAYER] = 0; gBattleStruct->usedHeldItems[i][B_SIDE_OPPONENT] = 0; - gBattleStruct->itemLost[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + gBattleStruct->itemLost[B_SIDE_OPPONENT][i].originalItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_PLAYER] = FALSE; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_OPPONENT] = FALSE; @@ -3684,8 +3684,8 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; // Clear Dynamax data - UndoDynamax(battler); - + UndoDynamax(battler); + return result; } @@ -4122,8 +4122,6 @@ static void TryDoEventsBeforeFirstTurn(void) if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) return; } - if (AbilityBattleEffects(ABILITYEFFECT_TRACE1, 0, 0, 0, 0) != 0) - return; // Check all switch in items having effect from the fastest mon to slowest. while (gBattleStruct->switchInItemsCounter < gBattlersCount) { @@ -4169,6 +4167,7 @@ static void TryDoEventsBeforeFirstTurn(void) memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts just to be safe + SetShellSideArmCategory(); SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers if (gBattleTypeFlags & BATTLE_TYPE_ARENA) @@ -4261,6 +4260,7 @@ void BattleTurnPassed(void) *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); + SetShellSideArmCategory(); SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers gBattleMainFunc = HandleTurnActionSelectionState; @@ -5842,9 +5842,9 @@ static void TryEvolvePokemon(void) sTriedEvolving |= gBitTable[i]; if (species == SPECIES_NONE && (gLeveledUpInBattle & gBitTable[i])) - { + { gLeveledUpInBattle &= ~(gBitTable[i]); - species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_NORMAL, gLeveledUpInBattle, NULL); + species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL); } if (species != SPECIES_NONE) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 69c7f400f249..12477f00793f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -357,7 +357,7 @@ static void DrawLevelUpBannerText(void); static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); -static bool8 IsFinalStrikeEffect(u16 move); +static bool8 IsFinalStrikeEffect(u32 moveEffect); static void TryUpdateRoundTurnOrder(void); static bool32 ChangeOrderTargetAfterAttacker(void); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); @@ -1479,7 +1479,7 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); } - else if (IsBattlerProtected(gBattlerTarget, gCurrentMove) + else if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) && (!gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) && gMovesInfo[gCurrentMove].effect != EFFECT_SUCKER_PUNCH @@ -1535,7 +1535,7 @@ static void Cmd_unused5(void) { CMD_ARGS(const u8 *failInstr); - if (IsBattlerProtected(gBattlerTarget, gCurrentMove)) + if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(sizeof(*cmd), MOVE_NONE); @@ -1550,7 +1550,7 @@ static void Cmd_unused5(void) static bool8 JumpIfMoveAffectedByProtect(u16 move) { bool8 affected = FALSE; - if (IsBattlerProtected(gBattlerTarget, move)) + if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, move)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(7, move); @@ -1905,11 +1905,11 @@ static void Cmd_ppreduce(void) // The chance is 1/N for each stage. #if B_CRIT_CHANCE >= GEN_7 - static const u8 sCriticalHitChance[] = {24, 8, 2, 1, 1}; + static const u8 sCriticalHitOdds[] = {24, 8, 2, 1, 1}; #elif B_CRIT_CHANCE == GEN_6 - static const u8 sCriticalHitChance[] = {16, 8, 2, 1, 1}; + static const u8 sCriticalHitOdds[] = {16, 8, 2, 1, 1}; #else - static const u8 sCriticalHitChance[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 + static const u8 sCriticalHitOdds[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 #endif // B_CRIT_CHANCE #define BENEFITS_FROM_LEEK(battler, holdEffect)((holdEffect == HOLD_EFFECT_LEEK) && (GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_FARFETCHD || gBattleMons[battler].species == SPECIES_SIRFETCHD)) @@ -1917,22 +1917,17 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec { s32 critChance = 0; - if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT - || abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) + if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT) { critChance = -1; } else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS - || gMovesInfo[gCurrentMove].alwaysCriticalHit - || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) - { - critChance = -2; + || gMovesInfo[move].alwaysCriticalHit } - else { critChance = 2 * ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) != 0) + 1 * ((gBattleMons[battlerAtk].status2 & STATUS2_DRAGON_CHEER) != 0) - + gMovesInfo[gCurrentMove].criticalHitStage + + gMovesInfo[move].criticalHitStage + (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) + 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY) + 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk) @@ -1940,12 +1935,21 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec + (abilityAtk == ABILITY_SUPER_LUCK) + gBattleStruct->bonusCritStages[gBattlerAttacker]; - // Record ability only if move had at least +3 chance to get a crit - if (critChance >= 3 && recordAbility && (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)) - RecordAbilityBattle(battlerDef, abilityDef); + if (critChance >= ARRAY_COUNT(sCriticalHitOdds)) + critChance = ARRAY_COUNT(sCriticalHitOdds) - 1; + } - if (critChance >= ARRAY_COUNT(sCriticalHitChance)) - critChance = ARRAY_COUNT(sCriticalHitChance) - 1; + if (critChance != -1 && (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)) + { + // Record ability only if move had 100% chance to get a crit + if (recordAbility) + { + if (critChance == -2) + RecordAbilityBattle(battlerDef, abilityDef); + else if (sCriticalHitOdds[critChance] == 1) + RecordAbilityBattle(battlerDef, abilityDef); + } + critChance = -1; } return critChance; @@ -1960,12 +1964,12 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA } #undef BENEFITS_FROM_LEEK -s32 GetCritHitChance(s32 critChanceIndex) +s32 GetCritHitOdds(s32 critChanceIndex) { if (critChanceIndex < 0) return -1; else - return sCriticalHitChance[critChanceIndex]; + return sCriticalHitOdds[critChanceIndex]; } static void Cmd_critcalc(void) @@ -1983,7 +1987,7 @@ static void Cmd_critcalc(void) else if (critChance == -2) gIsCriticalHit = TRUE; else - gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitChance[critChance] - 1, 1); + gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitOdds[critChance] - 1, 1); // Counter for EVO_CRITICAL_HITS. partySlot = gBattlerPartyIndexes[gBattlerAttacker]; @@ -2001,6 +2005,8 @@ static void Cmd_damagecalc(void) u8 moveType; GET_MOVE_TYPE(gCurrentMove, moveType); + if (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL && gCurrentMove == MOVE_SHELL_SIDE_ARM) + gBattleStruct->swapDamageCategory = TRUE; gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -2098,7 +2104,6 @@ static void Cmd_adjustdamage(void) gLastUsedItem = gBattleMons[gBattlerTarget].item; gSpecialStatuses[gBattlerTarget].focusBanded = FALSE; gSpecialStatuses[gBattlerTarget].focusSashed = FALSE; - } else if (gSpecialStatuses[gBattlerTarget].sturdied) { @@ -2897,7 +2902,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (i != gBattlersCount) break; - if (!CanSleep(gEffectBattler)) + if (!CanBeSlept(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; cancelMultiTurnMovesResult = CancelMultiTurnMoves(gEffectBattler); @@ -2936,7 +2941,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT; RESET_RETURN } - if (!CanBePoisoned(gBattleScripting.battler, gEffectBattler)) + if (!CanBePoisoned(gBattleScripting.battler, gEffectBattler, GetBattlerAbility(gEffectBattler))) break; statusChanged = TRUE; @@ -2981,6 +2986,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (!CanBeBurned(gEffectBattler)) + if (!CanBeBurned(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; statusChanged = TRUE; @@ -3045,7 +3051,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler)) break; - if (!CanBeParalyzed(gEffectBattler)) + if (!CanBeParalyzed(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; statusChanged = TRUE; @@ -3083,7 +3089,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (gBattleMons[gEffectBattler].status1) break; - if (CanBePoisoned(gBattleScripting.battler, gEffectBattler)) + if (CanBePoisoned(gBattleScripting.battler, gEffectBattler, GetBattlerAbility(gEffectBattler))) { // It's redundant, because at this point we know the status1 value is 0. gBattleMons[gEffectBattler].status1 &= ~STATUS1_TOXIC_POISON; @@ -3222,6 +3228,10 @@ void SetMoveEffect(bool32 primary, bool32 certain) { gBattlescriptCurrInstr++; } + else + { + gBattlescriptCurrInstr++; + } break; case MOVE_EFFECT_UPROAR: if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR)) @@ -3351,6 +3361,10 @@ void SetMoveEffect(bool32 primary, bool32 certain) case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: flags = affectsUser; + if (affectsUser == MOVE_EFFECT_AFFECTS_USER) + flags = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN; + else + flags = 0; if (mirrorArmorReflected) flags |= (STAT_CHANGE_ALLOW_PTR * !affectsUser); else @@ -3400,7 +3414,10 @@ void SetMoveEffect(bool32 primary, bool32 certain) case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - flags = affectsUser; + if (affectsUser == MOVE_EFFECT_AFFECTS_USER) + flags = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN; + else + flags = 0; if (mirrorArmorReflected && !affectsUser) flags |= STAT_CHANGE_ALLOW_PTR; if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, @@ -3438,7 +3455,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) { - BattleScriptPushCursor(); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_NoItemSteal; gLastUsedAbility = gBattleMons[gBattlerTarget].ability; @@ -3568,6 +3585,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case MOVE_EFFECT_SPECTRAL_THIEF: if (!NoAliveMonsForEitherParty()) { + bool32 contrary = (GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY); gBattleStruct->stolenStats[0] = 0; // Stats to steal. gBattleScripting.animArg1 = 0; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) @@ -3589,16 +3607,16 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (gBattleScripting.animArg1 == 0) { if (byTwo) - gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + i; + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS2 : STAT_ANIM_PLUS2) + i; else - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + i; + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS1 : STAT_ANIM_PLUS1) + i; } else { if (byTwo) - gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS2; + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS2 : STAT_ANIM_MULTIPLE_PLUS2); else - gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS1; + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS1 : STAT_ANIM_MULTIPLE_PLUS1); } } } @@ -4616,7 +4634,7 @@ bool32 NoAliveMonsForEitherParty(void) return (NoAliveMonsForPlayer() || NoAliveMonsForOpponent()); } -// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK, the only thing this +// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK or trainer battles, the only thing this // command does is check whether the player has won/lost by totaling each team's HP. It then // sets gBattleOutcome accordingly, if necessary. static void Cmd_checkteamslost(void) @@ -4632,10 +4650,12 @@ static void Cmd_checkteamslost(void) if (NoAliveMonsForOpponent()) gBattleOutcome |= B_OUTCOME_WON; - // For link battles that haven't ended, count number of empty battler spots - // In link multi battles, jump to pointer if more than 1 spot empty + // Fair switching - everyone has to switch in most at the same time, without knowing which pokemon the other trainer selected. + // In vanilla Emerald this was only used for link battles, in expansion it's also used for regular trainer battles. + // For battles that haven't ended, count number of empty battler spots + // In multi battles, jump to pointer if more than 1 spot empty // In non-multi battles, jump to pointer if 1 spot is missing on both sides - if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))) + if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER))) { s32 i, emptyPlayerSpots, emptyOpponentSpots; @@ -5403,7 +5423,6 @@ static void Cmd_moveend(void) bool32 effect = FALSE; u32 moveType = 0; u32 holdEffectAtk = 0; - u16 *choicedMoveAtk = NULL; u32 endMode, endState; u32 originallyUsedMove; @@ -5416,7 +5435,6 @@ static void Cmd_moveend(void) endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; GET_MOVE_TYPE(gCurrentMove, moveType); do @@ -5497,7 +5515,7 @@ static void Cmd_moveend(void) } // Not strictly a protect effect, but works the same way else if (gProtectStructs[gBattlerTarget].beakBlastCharge - && CanBeBurned(gBattlerAttacker) + && CanBeBurned(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; @@ -5626,29 +5644,34 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_CHOICE_MOVE: // update choice band move - if (gHitMarker & HITMARKER_OBEYS - && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS) - && gChosenMove != MOVE_STRUGGLE - && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE)) { - if ((gMovesInfo[gChosenMove].effect == EFFECT_BATON_PASS - || gMovesInfo[gChosenMove].effect == EFFECT_HEALING_WISH) - && !(gMoveResultFlags & MOVE_RESULT_FAILED)) + u16 *choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; + if (gHitMarker & HITMARKER_OBEYS + && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS) + && gChosenMove != MOVE_STRUGGLE + && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE)) { - gBattleScripting.moveendState++; - break; + if ((gMovesInfo[gChosenMove].effect == EFFECT_BATON_PASS + || gMovesInfo[gChosenMove].effect == EFFECT_HEALING_WISH) + && !(gMoveResultFlags & MOVE_RESULT_FAILED)) + { + gBattleScripting.moveendState++; + break; + } + *choicedMoveAtk = gChosenMove; } - *choicedMoveAtk = gChosenMove; - } - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) - break; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) + break; + } + if (i == MAX_MON_MOVES) + { + *choicedMoveAtk = MOVE_NONE; + } + gBattleScripting.moveendState++; + break; } - if (i == MAX_MON_MOVES) - *choicedMoveAtk = MOVE_NONE; - gBattleScripting.moveendState++; - break; case MOVEEND_CHANGED_ITEMS: // changed held items for (i = 0; i < gBattlersCount; i++) { @@ -6262,6 +6285,16 @@ static void Cmd_moveend(void) u32 battler, nextDancer = 0; bool32 turnOnHitmarker = FALSE; + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (gSpecialStatuses[battler].dancerUsedMove) + { + // in case a battler fails to act on a Dancer-called move + turnOnHitmarker = TRUE; + break; + } + } + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) { if (gSpecialStatuses[battler].dancerUsedMove) @@ -6749,7 +6782,7 @@ static void Cmd_openpartyscreen(void) u32 i, battler = 0; const u8 *failInstr = cmd->failInstr; - if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) + if (cmd->battler == BS_FAINTED_MULTIPLE_1) { if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { @@ -6904,7 +6937,7 @@ static void Cmd_openpartyscreen(void) } gBattlescriptCurrInstr = cmd->nextInstr; } - else if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_2) + else if (cmd->battler == BS_FAINTED_MULTIPLE_2) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { @@ -7016,8 +7049,12 @@ static void Cmd_openpartyscreen(void) if (gAbsentBattlerFlags & gBitTable[battlerOpposite]) battlerOpposite ^= BIT_FLANK; - BtlController_EmitLinkStandbyMsg(battlerOpposite, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battlerOpposite); + // Make sure we're checking a valid battler. In edge case scenarios - battler could be absent and battlerOpposite would become a non-existent one softlocking the game. + if (battlerOpposite < gBattlersCount) + { + BtlController_EmitLinkStandbyMsg(battlerOpposite, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); + MarkBattlerForControllerExec(battlerOpposite); + } } } } @@ -7114,17 +7151,11 @@ bool32 DoSwitchInAbilities(u32 battler) return (TryPrimalReversion(battler) || AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0) || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0)) - || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0)) - || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)); + || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0))); } -static void Cmd_switchineffects(void) +static void UpdateSentMonFlags(u32 battler) { - CMD_ARGS(u8 battler); - - s32 i; - u32 battler = GetBattlerForBattleScript(cmd->battler); - UpdateSentPokesToOpponentValue(battler); gHitMarker &= ~HITMARKER_FAINTED(battler); @@ -7132,7 +7163,11 @@ static void Cmd_switchineffects(void) if (!BattlerHasAi(battler)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[battler]]; +} +static bool32 DoSwitchInEffectsForBattler(u32 battler) +{ + u32 i; // Neutralizing Gas announces itself before hazards if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[battler].announceNeutralizingGas == 0) { @@ -7250,7 +7285,7 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; gBattlescriptCurrInstr = BattleScript_HealReplacementZMove; - return; + return TRUE; } else { @@ -7264,10 +7299,18 @@ static void Cmd_switchineffects(void) gDisableStructs[battler].truantSwitchInHack = 0; + for (i = 0; i < gBattlersCount; i++) + { + if (i != battler + && GetBattlerAbility(i) == ABILITY_TRACE + && AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0)) + return TRUE; + } + if (DoSwitchInAbilities(battler) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battler, FALSE)) - return; + return TRUE; else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0)) - return; + return TRUE; gDisableStructs[battler].stickyWebDone = FALSE; gDisableStructs[battler].spikesDone = FALSE; @@ -7283,22 +7326,68 @@ static void Cmd_switchineffects(void) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) - { - u32 hitmarkerFaintBits = gHitMarker >> 28; + gBattleStruct->forcedSwitch &= ~(gBitTable[battler]); + return FALSE; + } + return TRUE; // Effect's script plays. +} + +static void Cmd_switchineffects(void) +{ + CMD_ARGS(u8 battler); + u32 i, battler = GetBattlerForBattleScript(cmd->battler); + + switch (cmd->battler) + { + // Multiple mons fainted and are being switched-in. Their abilities/hazards will play according to speed ties. + case BS_FAINTED_MULTIPLE_1: // Saves the battlers. + gBattleStruct->multipleSwitchInBattlers |= gBitTable[battler]; + UpdateSentMonFlags(battler); + + // Increment fainted battler. + do + { gBattlerFainted++; - while (1) + if (gBattlerFainted >= gBattlersCount) + break; + if (gHitMarker & HITMARKER_FAINTED(gBattlerFainted) && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) + break; + } while (1); + + gBattlescriptCurrInstr = cmd->nextInstr; + return; + case BS_FAINTED_MULTIPLE_2: // Plays hazards/abilities. + switch (gBattleStruct->multipleSwitchInState) + { + case 0: // Sort battlers by speed + for (i = 0; i < gBattlersCount; i++) + gBattleStruct->multipleSwitchInSortedBattlers[i] = i; + SortBattlersBySpeed(gBattleStruct->multipleSwitchInSortedBattlers, FALSE); + gBattleStruct->multipleSwitchInState++; + gBattleStruct->multipleSwitchInCursor = 0; + // Loop through all available battlers + case 1: + for (; gBattleStruct->multipleSwitchInCursor < gBattlersCount; gBattleStruct->multipleSwitchInCursor++) { - if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) - break; - if (gBattlerFainted >= gBattlersCount) - break; - gBattlerFainted++; + gBattlerFainted = gBattleStruct->multipleSwitchInSortedBattlers[gBattleStruct->multipleSwitchInCursor]; + if (gBattleStruct->multipleSwitchInBattlers & gBitTable[gBattlerFainted]) + { + if (DoSwitchInEffectsForBattler(gBattlerFainted)) + return; + } } + // All battlers done, end + gBattleStruct->multipleSwitchInBattlers = 0; + gBattleStruct->multipleSwitchInState = 0; + gBattlescriptCurrInstr = cmd->nextInstr; } - gBattleStruct->forcedSwitch &= ~(gBitTable[battler]); - gBattlescriptCurrInstr = cmd->nextInstr; + break; + default: + UpdateSentMonFlags(battler); + if (!DoSwitchInEffectsForBattler(battler)) + gBattlescriptCurrInstr = cmd->nextInstr; + break; } } @@ -7945,7 +8034,7 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef) // Called by Cmd_removeitem. itemId represents the item that was removed, not being given. static bool32 TrySymbiosis(u32 battler, u32 itemId) { - if (!gBattleStruct->itemLost[gBattlerPartyIndexes[battler]].stolen + if (!gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen && gBattleStruct->changedItems[battler] == ITEM_NONE && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_BUTTON && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_PACK @@ -8628,7 +8717,7 @@ static bool32 IsRototillerAffected(u32 battler) return TRUE; } -static bool32 IsElectricAbilityAffected(u32 ability) +static bool32 IsElectricAbilityAffected(u32 battler, u32 ability) { u32 moveType; @@ -8639,7 +8728,9 @@ static bool32 IsElectricAbilityAffected(u32 ability) else moveType = gMovesInfo[gCurrentMove].type; - if (moveType == TYPE_ELECTRIC && GetBattlerAbility(gBattlerTarget) == ability) + if (moveType == TYPE_ELECTRIC + && (ability != ABILITY_LIGHTNING_ROD || B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + && GetBattlerAbility(battler) == ability) return TRUE; else return FALSE; @@ -9153,7 +9244,6 @@ static void Cmd_various(void) case VARIOUS_RESET_SWITCH_IN_ABILITY_BITS: { VARIOUS_ARGS(); - gSpecialStatuses[battler].traced = FALSE; gSpecialStatuses[battler].switchInAbilityDone = FALSE; break; } @@ -9386,7 +9476,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0); - AbilityBattleEffects(ABILITYEFFECT_TRACE2, battler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); return; } @@ -9870,16 +9959,17 @@ static void Cmd_various(void) case VARIOUS_PSYCHO_SHIFT: { VARIOUS_ARGS(const u8 *failInstr); + u32 targetAbility = GetBattlerAbility(gBattlerTarget); // Psycho shift works - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, targetAbility)) gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_TOXIC_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_TOXIC_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, targetAbility)) gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN) && CanBeBurned(gBattlerTarget)) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN) && CanBeBurned(gBattlerTarget, targetAbility)) gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && CanBeParalyzed(gBattlerTarget)) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && CanBeParalyzed(gBattlerTarget, targetAbility)) gBattleCommunication[MULTISTRING_CHOOSER] = 3; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanSleep(gBattlerTarget)) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanBeSlept(gBattlerTarget, targetAbility)) gBattleCommunication[MULTISTRING_CHOOSER] = 4; else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanBeFrozen(gBattlerTarget)) gBattleCommunication[MULTISTRING_CHOOSER] = 5; @@ -10474,44 +10564,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } - case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment - { - VARIOUS_ARGS(); - - u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; - u32 targetDefStat = gBattleMons[gBattlerTarget].defense; - u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; - u32 targetSpDefStat = gBattleMons[gBattlerTarget].spDefense; - u8 statStage; - u32 physical; - u32 special; - - gBattleStruct->swapDamageCategory = FALSE; - - statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; - attackerAtkStat *= gStatStageRatios[statStage][0]; - attackerAtkStat /= gStatStageRatios[statStage][1]; - - statStage = gBattleMons[gBattlerTarget].statStages[STAT_DEF]; - targetDefStat *= gStatStageRatios[statStage][0]; - targetDefStat /= gStatStageRatios[statStage][1]; - - physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gMovesInfo[gCurrentMove].power * attackerAtkStat) / targetDefStat) / 50); - - statStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; - attackerSpAtkStat *= gStatStageRatios[statStage][0]; - attackerSpAtkStat /= gStatStageRatios[statStage][1]; - - statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPDEF]; - targetSpDefStat *= gStatStageRatios[statStage][0]; - targetSpDefStat /= gStatStageRatios[statStage][1]; - - special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gMovesInfo[gCurrentMove].power * attackerSpAtkStat) / targetSpDefStat) / 50); - - if (((physical > special) || (physical == special && (Random() % 2) == 0))) - gBattleStruct->swapDamageCategory = TRUE; - break; - } case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: { VARIOUS_ARGS(const u8 *jumpInstr); @@ -12575,9 +12627,14 @@ static void Cmd_setsubstitute(void) CMD_ARGS(); u32 factor = gMovesInfo[gCurrentMove].effect == EFFECT_SHED_TAIL ? 2 : 4; - u32 hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; + u32 hp; + + if (factor == 2) + hp = (GetNonDynamaxMaxHP(gBattlerAttacker)+1) / factor; // shed tail rounds up + else + hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games) - if (GetNonDynamaxMaxHP(gBattlerAttacker) / factor == 0) + if (hp == 0) hp = 1; if (gBattleMons[gBattlerAttacker].hp <= hp) @@ -12587,7 +12644,7 @@ static void Cmd_setsubstitute(void) } else { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games) + gBattleMoveDamage = hp; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -12816,7 +12873,11 @@ static void Cmd_trysetencore(void) { gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; gDisableStructs[gBattlerTarget].encoredMovePos = i; - gDisableStructs[gBattlerTarget].encoreTimer = 3; + // Encore always lasts 3 turns, but we need to account for a scenario where Encore changes the move during the same turn. + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + gDisableStructs[gBattlerTarget].encoreTimer = 4; + else + gDisableStructs[gBattlerTarget].encoreTimer = 3; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -13339,7 +13400,16 @@ static void Cmd_handlefurycutter(void) } else { - if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5 + u32 max; + + if (B_UPDATED_MOVE_DATA >= GEN_6) + max = 3; + else if (B_UPDATED_MOVE_DATA == GEN_5) + max = 4; + else + max = 5; + + if (gDisableStructs[gBattlerAttacker].furyCutterCounter < max && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) // Don't increment counter on first hit gDisableStructs[gBattlerAttacker].furyCutterCounter++; @@ -13523,7 +13593,7 @@ static void Cmd_jumpifnopursuitswitchdmg(void) gActionsByTurnOrder[i] = B_ACTION_TRY_FINISH; } - gCurrentMove = gChosenMoveByBattler[gBattlerTarget]; + gCurrentMove = gChosenMove = gChosenMoveByBattler[gBattlerTarget]; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget); gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; @@ -13890,7 +13960,7 @@ static void Cmd_trymemento(void) if (B_MEMENTO_FAIL >= GEN_4 && (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE - || IsBattlerProtected(gBattlerTarget, gCurrentMove) + || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { // Failed, target was protected. @@ -15271,6 +15341,13 @@ static void Cmd_givecaughtmon(void) { CMD_ARGS(); + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) + { + u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem; + if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) + SetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items + } + if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY) { if (!ShouldShowBoxWasFullMessage()) @@ -15818,10 +15895,9 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) return FALSE; } -static bool8 IsFinalStrikeEffect(u16 move) +static bool8 IsFinalStrikeEffect(u32 moveEffect) { u32 i; - u16 moveEffect = gMovesInfo[move].effect; for (i = 0; i < ARRAY_COUNT(sFinalStrikeOnlyEffects); i++) { @@ -16092,6 +16168,7 @@ void BS_ItemRestoreHP(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) { gAbsentBattlerFlags &= ~gBitTable[battler]; + gBattleMons[battler].hp = hp; gBattleCommunication[MULTIUSE_STATE] = TRUE; } gBattlescriptCurrInstr = cmd->nextInstr; @@ -16288,28 +16365,12 @@ void BS_JumpIfEmergencyExited(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfRod(void) +void BS_JumpIfElectricAbilityAffected(void) { - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_LIGHTNING_ROD)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} - -void BS_JumpIfAbsorb(void) -{ - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_VOLT_ABSORB)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} + NATIVE_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); -void BS_JumpIfMotor(void) -{ - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_MOTOR_DRIVE)) + if (IsElectricAbilityAffected(battler, cmd->ability)) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; @@ -16390,9 +16451,9 @@ void BS_SetRemoveTerrain(void) } else { - u16 atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + u32 atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses &= ~(STATUS_FIELD_TERRAIN_ANY | STATUS_FIELD_TERRAIN_PERMANENT); gFieldStatuses |= statusFlag; gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; gBattlescriptCurrInstr = cmd->nextInstr; @@ -16486,7 +16547,8 @@ void BS_TryRelicSong(void) { NATIVE_ARGS(); - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)) + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) + && (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA || gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE)) { if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA) gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; @@ -16497,7 +16559,9 @@ void BS_TryRelicSong(void) gBattlescriptCurrInstr = BattleScript_AttackerFormChangeMoveEffect; } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } void BS_SetPledge(void) diff --git a/src/battle_setup.c b/src/battle_setup.c index 25627286eb90..e29264967db5 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1919,15 +1919,16 @@ static bool32 HasAtLeastFiveBadges(void) void IncrementRematchStepCounter(void) { #if FREE_MATCH_CALL == FALSE - if (HasAtLeastFiveBadges() - && (I_VS_SEEKER_CHARGING != 0) - && (!CheckBagHasItem(ITEM_VS_SEEKER, 1))) - { - if (gSaveBlock1Ptr->trainerRematchStepCounter >= STEP_COUNTER_MAX) - gSaveBlock1Ptr->trainerRematchStepCounter = STEP_COUNTER_MAX; - else - gSaveBlock1Ptr->trainerRematchStepCounter++; - } + if (!HasAtLeastFiveBadges()) + return; + + if (IsVsSeekerEnabled()) + return; + + if (gSaveBlock1Ptr->trainerRematchStepCounter >= STEP_COUNTER_MAX) + gSaveBlock1Ptr->trainerRematchStepCounter = STEP_COUNTER_MAX; + else + gSaveBlock1Ptr->trainerRematchStepCounter++; #endif //FREE_MATCH_CALL } diff --git a/src/battle_tower.c b/src/battle_tower.c index cd94e7919b35..79c9de5c0458 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -2060,7 +2060,7 @@ void DoSpecialTrainerBattle(void) BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_SECRET_BASE)); break; case SPECIAL_BATTLE_EREADER: - #if FREE_BATTLE_TOWER_E_READER == FALSE + #if FREE_BATTLE_TOWER_E_READER == FALSE ZeroEnemyPartyMons(); for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.ereaderTrainer.party); i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]); @@ -2148,7 +2148,6 @@ void DoSpecialTrainerBattle(void) gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; } - gPartnerSpriteId = VarGet(gSpecialVar_0x8007); gPartnerTrainerId = VarGet(gSpecialVar_0x8006) + TRAINER_PARTNER(PARTNER_NONE); FillPartnerParty(gPartnerTrainerId); CreateTask(Task_StartBattleAfterTransition, 1); @@ -3062,9 +3061,7 @@ static void FillPartnerParty(u16 trainerId) personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); else if (partyData[i].gender == TRAINER_MON_FEMALE) personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); - if (partyData[i].nature != 0) - ModifyPersonalityForNature(&personality, partyData[i].nature - 1); - + ModifyPersonalityForNature(&personality, partyData[i].nature); CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, personality, OT_ID_PRESET, otID); j = partyData[i].isShiny; SetMonData(&gPlayerParty[i + 3], MON_DATA_IS_SHINY, &j); diff --git a/src/battle_util.c b/src/battle_util.c index ea3a73e35486..24ec4c0f99fa 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -958,11 +958,11 @@ u8 GetBattlerForBattleScript(u8 caseId) case BS_FAINTED: ret = gBattlerFainted; break; - case BS_FAINTED_LINK_MULTIPLE_1: + case BS_FAINTED_MULTIPLE_1: ret = gBattlerFainted; break; case BS_ATTACKER_WITH_PARTNER: - case BS_FAINTED_LINK_MULTIPLE_2: + case BS_FAINTED_MULTIPLE_2: case BS_ATTACKER_SIDE: case BS_TARGET_SIDE: case BS_PLAYER1: @@ -1029,11 +1029,20 @@ void MarkBattlerReceivedLinkData(u32 battler) const u8* CancelMultiTurnMoves(u32 battler) { const u8 *result = NULL; - gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); - gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE); gBattleMons[battler].status2 &= ~(STATUS2_UPROAR); gBattleMons[battler].status2 &= ~(STATUS2_BIDE); + if (B_RAMPAGE_CANCELLING < GEN_5) + { + gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE); + } + else if (!(gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) + || ((gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) > STATUS2_LOCK_CONFUSE_TURN(1))) + { + gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); + } + // Clear battler's semi-invulnerable bits if they are not held by Sky Drop. if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED)) gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE); @@ -1707,7 +1716,10 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) gFieldStatuses &= ~terrainFlag; TryToRevertMimicryAndFlags(); gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; - BattleScriptExecute(BattleScript_TerrainEnds); + if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) + BattleScriptExecute(BattleScript_GrassyTerrainEnds); + else + BattleScriptExecute(BattleScript_TerrainEnds); return TRUE; } } @@ -3362,7 +3374,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { // confusion dmg - if (RandomWeighted(RNG_CONFUSION, (B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 2 : 1), 1)) + if (RandomPercentage(RNG_CONFUSION, (B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50))) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; gBattlerTarget = gBattlerAttacker; @@ -3571,7 +3583,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) case CANCELLER_MULTIHIT_MOVES: if (gMovesInfo[gCurrentMove].effect == EFFECT_MULTI_HIT) { - u16 ability = gBattleMons[gBattlerAttacker].ability; + u32 ability = GetBattlerAbility(gBattlerAttacker); if (ability == ABILITY_SKILL_LINK) { @@ -3873,7 +3885,7 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) { if ((!(gFieldStatuses & statusFlag) && (!gBattleStruct->isSkyBattle))) { - gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN); + gFieldStatuses &= ~(STATUS_FIELD_TERRAIN_ANY | STATUS_FIELD_TERRAIN_PERMANENT); gFieldStatuses |= statusFlag; gDisableStructs[battler].terrainAbilityDone = FALSE; @@ -3983,14 +3995,12 @@ static inline uq4_12_t GetSupremeOverlordModifier(u32 battler) return UQ_4_12(1.0) + (UQ_4_12(0.1) * gBattleStruct->supremeOverlordCounter[battler]); } -static inline bool32 HadMoreThanHalfHpNowHasLess(u32 battler) +static inline bool32 HadMoreThanHalfHpNowDoesnt(u32 battler) { u32 cutoff = gBattleMons[battler].maxHP / 2; - if (gBattleMons[battler].maxHP % 2 == 1) - cutoff++; // Had more than half of hp before, now has less - return (gBattleStruct->hpBefore[battler] >= cutoff - && gBattleMons[battler].hp < cutoff); + return (gBattleStruct->hpBefore[battler] > cutoff + && gBattleMons[battler].hp <= cutoff); } u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) @@ -4233,6 +4243,50 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleScripting.battler = battler; switch (gLastUsedAbility) { + case ABILITY_TRACE: + { + u32 chosenTarget; + u32 target1; + u32 target2; + + if (gSpecialStatuses[battler].switchInAbilityDone) + break; + if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_TRACED) + break; + + side = (BATTLE_OPPOSITE(GetBattlerPosition(battler))) & BIT_SIDE; + target1 = GetBattlerAtPosition(side); + target2 = GetBattlerAtPosition(side + BIT_FLANK); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 + && !gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) + chosenTarget = GetBattlerAtPosition((RandomPercentage(RNG_TRACE, 50) * 2) | side), effect++; + else if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0) + chosenTarget = target1, effect++; + else if (!gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) + chosenTarget = target2, effect++; + } + else + { + if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0) + chosenTarget = target1, effect++; + } + + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_TraceActivatesEnd3); + gBattleResources->flags->flags[battler] &= ~RESOURCE_FLAG_TRACED; + gBattleStruct->tracedAbility[battler] = gLastUsedAbility = gBattleMons[chosenTarget].ability; + RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability + battler = gBattlerAbility = gBattleScripting.battler = battler; + + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) + PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) + } + } + break; case ABILITY_IMPOSTER: if (IsBattlerAlive(BATTLE_OPPOSITE(battler)) && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) @@ -4570,13 +4624,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; - case ABILITY_TRACE: - if (!(gSpecialStatuses[battler].traced)) - { - gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_TRACED; - gSpecialStatuses[battler].traced = TRUE; - } - break; case ABILITY_CLOUD_NINE: case ABILITY_AIR_LOCK: if (!gSpecialStatuses[battler].switchInAbilityDone) @@ -5066,11 +5113,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect = 2, statId = STAT_SPEED; break; case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) effect = 2, statId = STAT_SPATK; break; case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER) + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) effect = 2, statId = STAT_SPATK; break; case ABILITY_SAP_SIPPER: @@ -5229,7 +5276,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) - && HadMoreThanHalfHpNowHasLess(battler) + && HadMoreThanHalfHpNowDoesnt(battler) && (gMultiHitCounter == 0 || gMultiHitCounter == 1) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) @@ -5247,7 +5294,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) // Had more than half of hp before, now has less - && HadMoreThanHalfHpNowHasLess(battler) + && HadMoreThanHalfHpNowDoesnt(battler) && (gMultiHitCounter == 0 || gMultiHitCounter == 1) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) @@ -5284,7 +5331,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) && gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0 && !IsDynamaxed(gBattlerAttacker) // TODO: Max Moves don't make contact, useless? - && (Random() % 3) == 0) + && RandomPercentage(RNG_CURSED_BODY, 30)) { gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove; gDisableStructs[gBattlerAttacker].disableTimer = 4; @@ -5302,9 +5349,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) && gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget) - && gBattleMons[gBattlerTarget].ability != ABILITY_MUMMY - && gBattleMons[gBattlerTarget].ability != ABILITY_LINGERING_AROMA - && !gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSuppressed) + && gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY + && gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA + && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed) { if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { @@ -5444,8 +5491,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_EFFECT_SPORE: + { + u32 ability = GetBattlerAbility(gBattlerAttacker); if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_OVERCOAT + && ability != ABILITY_OVERCOAT && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) { i = Random() % 3; @@ -5458,7 +5507,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanSleep(gBattlerAttacker) + && CanBeSlept(gBattlerAttacker, ability) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) @@ -5471,6 +5520,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } } + } break; POISON_POINT: case ABILITY_POISON_POINT: @@ -5478,7 +5528,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBePoisoned(gBattlerTarget, gBattlerAttacker) + && CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) && RandomWeighted(RNG_POISON_POINT, 2, 1)) @@ -5497,7 +5547,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBeParalyzed(gBattlerAttacker) + && CanBeParalyzed(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) && RandomWeighted(RNG_STATIC, 2, 1)) @@ -5517,7 +5567,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED - && CanBeBurned(gBattlerAttacker) + && CanBeBurned(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; @@ -5687,7 +5737,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && (gMultiHitCounter == 0 || gMultiHitCounter == 1) // Activates after all hits from a multi-hit move. && IsBattlerAlive(gBattlerTarget) - && HadMoreThanHalfHpNowHasLess(gBattlerTarget) + && HadMoreThanHalfHpNowDoesnt(gBattlerTarget) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))) { gBattlerAttacker = gBattlerTarget; @@ -5734,11 +5784,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && CanBePoisoned(gBattlerAttacker, gBattlerTarget) + && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) && TARGET_TURN_DAMAGED // Need to actually hit the target - && (Random() % 3) == 0) + && RandomPercentage(RNG_POISON_TOUCH, 30)) { gBattleScripting.moveEffect = MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -5964,48 +6014,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } } break; - case ABILITYEFFECT_TRACE1: - case ABILITYEFFECT_TRACE2: - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ABILITY_TRACE && (gBattleResources->flags->flags[i] & RESOURCE_FLAG_TRACED)) - { - u32 chosenTarget; - u32 side = (BATTLE_OPPOSITE(GetBattlerPosition(i))) & BIT_SIDE; // side of the opposing Pokémon - u32 target1 = GetBattlerAtPosition(side); - u32 target2 = GetBattlerAtPosition(side + BIT_FLANK); - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 - && !gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) - chosenTarget = GetBattlerAtPosition((RandomPercentage(RNG_TRACE, 50) * 2) | side), effect++; - else if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0) - chosenTarget = target1, effect++; - else if (!gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) - chosenTarget = target2, effect++; - } - else - { - if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0) - chosenTarget = target1, effect++; - } - - if (effect != 0) - { - BattleScriptPushCursorAndCallback(BattleScript_TraceActivatesEnd3); - gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_TRACED; - gBattleStruct->tracedAbility[i] = gLastUsedAbility = gBattleMons[chosenTarget].ability; - RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability - battler = gBattlerAbility = gBattleScripting.battler = i; - - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) - PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) - break; - } - } - } - break; case ABILITYEFFECT_NEUTRALIZINGGAS: // Prints message only. separate from ABILITYEFFECT_ON_SWITCHIN bc activates before entry hazards for (i = 0; i < gBattlersCount; i++) @@ -6163,44 +6171,40 @@ bool32 IsNeutralizingGasOnField(void) return FALSE; } -bool32 IsMyceliumMightOnField(void) -{ - u32 i; - - for (i = 0; i < gBattlersCount; i++) - { - if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) - return TRUE; - } - - return FALSE; -} - bool32 IsMoldBreakerTypeAbility(u32 ability) { - return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE); + return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE + || (ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove))); } u32 GetBattlerAbility(u32 battler) { + bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD; + if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed) + { + // Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave) + if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED + && gStatuses3[battler] & STATUS3_GASTRO_ACID + && gBattleMons[battler].ability == ABILITY_COMATOSE) + return ABILITY_NONE; return gBattleMons[battler].ability; + } if (gStatuses3[battler] & STATUS3_GASTRO_ACID) return ABILITY_NONE; if (IsNeutralizingGasOnField() && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS - && GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD) - return ABILITY_NONE; - - if (IsMyceliumMightOnField()) + && noAbilityShield) return ABILITY_NONE; if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability) && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID)) || gMovesInfo[gCurrentMove].ignoresTargetAbility) + && battler != gBattlerAttacker && gAbilitiesInfo[gBattleMons[battler].ability].breakable + && noAbilityShield && gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker && gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE && gCurrentTurnActionNumber < gBattlersCount) @@ -6320,83 +6324,78 @@ bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag) return IsBattlerGrounded(battler); } -bool32 CanSleep(u32 battler) +bool32 CanBeSlept(u32 battler, u32 ability) { - u16 ability = GetBattlerAbility(battler); if (ability == ABILITY_INSOMNIA - || ability == ABILITY_VITAL_SPIRIT - || ability == ABILITY_COMATOSE - || ability == ABILITY_PURIFYING_SALT - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityOnSide(battler, ABILITY_SWEET_VEIL) - || IsAbilityStatusProtected(battler) - || IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_MISTY_TERRAIN)) + || ability == ABILITY_VITAL_SPIRIT + || ability == ABILITY_COMATOSE + || ability == ABILITY_PURIFYING_SALT + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battler].status1 & STATUS1_ANY + || IsAbilityOnSide(battler, ABILITY_SWEET_VEIL) + || IsAbilityStatusProtected(battler) + || IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } -bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget) +bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - u16 ability = GetBattlerAbility(battlerTarget); + if (!(CanPoisonType(battlerAtk, battlerDef)) + || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerDef].status1 & STATUS1_ANY + || defAbility == ABILITY_IMMUNITY + || defAbility == ABILITY_COMATOSE + || defAbility == ABILITY_PURIFYING_SALT + || IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL) + || IsAbilityStatusProtected(battlerDef) + || IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} - if (!(CanPoisonType(battlerAttacker, battlerTarget)) - || gSideStatuses[GetBattlerSide(battlerTarget)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battlerTarget].status1 & STATUS1_ANY - || ability == ABILITY_IMMUNITY +bool32 CanBeBurned(u32 battler, u32 ability) +{ + if (IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battler].status1 & STATUS1_ANY + || ability == ABILITY_WATER_VEIL + || ability == ABILITY_WATER_BUBBLE || ability == ABILITY_COMATOSE + || ability == ABILITY_THERMAL_EXCHANGE || ability == ABILITY_PURIFYING_SALT - || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) - || IsAbilityStatusProtected(battlerTarget) - || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + || IsAbilityStatusProtected(battler) + || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } -bool32 CanBeBurned(u32 battler) +bool32 CanBeParalyzed(u32 battler, u32 ability) { - u16 ability = GetBattlerAbility(battler); - if (IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) + if ((B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC)) || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battler].status1 & STATUS1_ANY - || ability == ABILITY_WATER_VEIL - || ability == ABILITY_WATER_BUBBLE + || ability == ABILITY_LIMBER || ability == ABILITY_COMATOSE - || ability == ABILITY_THERMAL_EXCHANGE || ability == ABILITY_PURIFYING_SALT + || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityStatusProtected(battler) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } -bool32 CanBeParalyzed(u32 battler) -{ - u16 ability = GetBattlerAbility(battler); - if ((B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC)) - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD - || ability == ABILITY_LIMBER - || ability == ABILITY_COMATOSE - || ability == ABILITY_PURIFYING_SALT - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) - || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) - return FALSE; - return TRUE; -} - bool32 CanBeFrozen(u32 battler) { u16 ability = GetBattlerAbility(battler); if (IS_BATTLER_OF_TYPE(battler, TYPE_ICE) - || IsBattlerWeatherAffected(battler, B_WEATHER_SUN) - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD - || ability == ABILITY_MAGMA_ARMOR - || ability == ABILITY_COMATOSE - || ability == ABILITY_PURIFYING_SALT - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) - || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + || IsBattlerWeatherAffected(battler, B_WEATHER_SUN) + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD + || ability == ABILITY_MAGMA_ARMOR + || ability == ABILITY_COMATOSE + || ability == ABILITY_PURIFYING_SALT + || gBattleMons[battler].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battler) + || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } @@ -6419,8 +6418,8 @@ bool32 CanGetFrostbite(u32 battler) bool32 CanBeConfused(u32 battler) { if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO - || gBattleMons[battler].status2 & STATUS2_CONFUSION - || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + || gBattleMons[battler].status2 & STATUS2_CONFUSION + || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } @@ -6500,7 +6499,7 @@ static u8 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, bool32 end2) else SET_STATCHANGER(statId, 1, FALSE); - gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; if (end2) @@ -6551,7 +6550,7 @@ static u8 RandomStatRaiseBerry(u32 battler, u32 itemId, bool32 end2) else SET_STATCHANGER(i + 1, 2, FALSE); - gBattleScripting.animArg1 = 0x21 + i + 6; + gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + i + 1; gBattleScripting.animArg2 = 0; if (end2) { @@ -6628,7 +6627,7 @@ static u8 DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 category) SET_STATCHANGER(statId, 1, FALSE); gBattleScripting.battler = battler; - gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet; @@ -6645,7 +6644,7 @@ u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 exe gLastUsedItem = itemId; // For surge abilities gEffectBattler = gBattleScripting.battler = battler; SET_STATCHANGER(statId, 1, FALSE); - gBattleScripting.animArg1 = 14 + statId; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; if (execute) { @@ -7053,7 +7052,7 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect) } SET_STATCHANGER(STAT_ATK, 2, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; gBattleScripting.animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); @@ -7335,7 +7334,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } SET_STATCHANGER(STAT_ATK, 2, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; gBattleScripting.animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); @@ -7587,7 +7586,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } SET_STATCHANGER(STAT_ATK, 2, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; gBattleScripting.animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); @@ -7900,7 +7899,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) switch (battlerHoldEffect) { case HOLD_EFFECT_TOXIC_ORB: - if (CanBePoisoned(battler, battler)) + if (CanBePoisoned(battler, battler, GetBattlerAbility(battler))) { effect = ITEM_STATUS_CHANGE; gBattleMons[battler].status1 = STATUS1_TOXIC_POISON; @@ -7909,7 +7908,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_FLAME_ORB: - if (CanBeBurned(battler)) + if (CanBeBurned(battler, battlerAbility)) { effect = ITEM_STATUS_CHANGE; gBattleMons[battler].status1 = STATUS1_BURN; @@ -8177,7 +8176,7 @@ u8 IsMonDisobedient(void) obedienceLevel = levelReferenced - obedienceLevel; calc = (Random() & 255); - if (calc < obedienceLevel && CanSleep(gBattlerAttacker)) + if (calc < obedienceLevel && CanBeSlept(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) { // try putting asleep int i; @@ -8264,7 +8263,7 @@ bool32 IsMoveMakingContact(u32 move, u32 battlerAtk) if (!gMovesInfo[move].makesContact) { - if (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory) + if (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL) return TRUE; else return FALSE; @@ -8280,59 +8279,59 @@ bool32 IsMoveMakingContact(u32 move, u32 battlerAtk) } } -bool32 IsBattlerProtected(u32 battler, u32 move) +bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) { // Decorate bypasses protect and detect, but not crafty shield if (move == MOVE_DECORATE) { - if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_CRAFTY_SHIELD) + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD) return TRUE; - else if (gProtectStructs[battler].protected) + else if (gProtectStructs[battlerDef].protected) return FALSE; } // Z-Moves and Max Moves bypass protection (except Max Guard). if ((IsMaxMove(move) || gBattleStruct->zmove.active) - && (!gProtectStructs[battler].maxGuarded + && (!gProtectStructs[battlerDef].maxGuarded || gMovesInfo[move].argument == MAX_EFFECT_BYPASS_PROTECT)) return FALSE; // Max Guard is silly about the moves it blocks, including Teatime. - if (gProtectStructs[battler].maxGuarded && IsMoveBlockedByMaxGuard(move)) + if (gProtectStructs[battlerDef].maxGuarded && IsMoveBlockedByMaxGuard(move)) return TRUE; // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. // This means extra logic is needed to handle Shell Side Arm. if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST - && (gMovesInfo[move].makesContact || (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory)) - && !gProtectStructs[battler].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist + && (gMovesInfo[move].makesContact || (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)) + && !gProtectStructs[battlerDef].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist return FALSE; else if (gMovesInfo[move].ignoresProtect) return FALSE; - else if (gProtectStructs[battler].protected) + else if (gProtectStructs[battlerDef].protected) return TRUE; - else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_WIDE_GUARD - && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_WIDE_GUARD + && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) return TRUE; - else if (gProtectStructs[battler].banefulBunkered) + else if (gProtectStructs[battlerDef].banefulBunkered) return TRUE; - else if (gProtectStructs[battler].burningBulwarked) + else if (gProtectStructs[battlerDef].burningBulwarked) return TRUE; - else if ((gProtectStructs[battler].obstructed || gProtectStructs[battler].silkTrapped) && !IS_MOVE_STATUS(move)) + else if ((gProtectStructs[battlerDef].obstructed || gProtectStructs[battlerDef].silkTrapped) && !IS_MOVE_STATUS(move)) return TRUE; - else if (gProtectStructs[battler].spikyShielded) + else if (gProtectStructs[battlerDef].spikyShielded) return TRUE; - else if (gProtectStructs[battler].kingsShielded && gMovesInfo[move].power != 0) + else if (gProtectStructs[battlerDef].kingsShielded && gMovesInfo[move].power != 0) return TRUE; - else if (gProtectStructs[battler].maxGuarded) + else if (gProtectStructs[battlerDef].maxGuarded) return TRUE; - else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_QUICK_GUARD + else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_QUICK_GUARD && GetChosenMovePriority(gBattlerAttacker) > 0) return TRUE; - else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_CRAFTY_SHIELD + else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD && IS_MOVE_STATUS(move)) return TRUE; - else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_MAT_BLOCK + else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_MAT_BLOCK && !IS_MOVE_STATUS(move)) return TRUE; else @@ -9228,7 +9227,11 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m else if (gMovesInfo[move].effect == EFFECT_BODY_PRESS) { atkStat = gBattleMons[battlerAtk].defense; - atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF]; + // Edge case: Body Press used during Wonder Room. For some reason, it still uses Defense over Sp.Def, but uses Sp.Def stat changes + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) + atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF]; + else + atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF]; } else { @@ -10049,8 +10052,6 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move mod = UQ_4_12(2.0); if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0)) mod = UQ_4_12(1.0); - if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot) - mod = UQ_4_12(2.0); // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon if (gBattleWeather & B_WEATHER_STRONG_WINDS && WEATHER_HAS_EFFECT) @@ -10107,6 +10108,8 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov if (GetBattlerType(battlerDef, 2) != TYPE_MYSTERY && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 1) && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 0)) MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 2), battlerAtk, recordAbilities); + if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); if (recordAbilities && (illusionSpecies = GetIllusionMonSpecies(battlerDef))) TryNoticeIllusionInTypeEffectiveness(move, moveType, battlerAtk, battlerDef, modifier, illusionSpecies); @@ -10580,12 +10583,12 @@ bool32 CanBattlerFormChange(u32 battler, u16 method) return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method); } -bool32 TryBattleFormChange(u32 battler, u16 method) +bool32 TryBattleFormChange(u32 battler, u32 method) { - u8 monId = gBattlerPartyIndexes[battler]; - u8 side = GetBattlerSide(battler); + u32 monId = gBattlerPartyIndexes[battler]; + u32 side = GetBattlerSide(battler); struct Pokemon *party = GetBattlerParty(battler); - u16 targetSpecies; + u32 targetSpecies; if (!CanBattlerFormChange(battler, method)) return FALSE; @@ -10623,10 +10626,14 @@ bool32 TryBattleFormChange(u32 battler, u16 method) if (restoreSpecies) { + u32 abilityForm = gBattleMons[battler].ability; // Reverts the original species TryToSetBattleFormChangeMoves(&party[monId], method); SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[side][monId]); RecalcBattlerStats(battler, &party[monId]); + // Battler data is not updated with regular form's ability, not doing so could cause wrong ability activation. + if (method == FORM_CHANGE_FAINT) + gBattleMons[battler].ability = abilityForm; return TRUE; } } @@ -10910,9 +10917,9 @@ void TryRestoreHeldItems(void) for (i = 0; i < PARTY_SIZE; i++) { - if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[i].stolen) + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen) { - lostItem = gBattleStruct->itemLost[i].originalItem; + lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem; if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); // Restore stolen non-berry items } @@ -10967,8 +10974,8 @@ void TrySaveExchangedItem(u32 battler, u16 stolenItem) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && GetBattlerSide(battler) == B_SIDE_PLAYER - && stolenItem == gBattleStruct->itemLost[gBattlerPartyIndexes[battler]].originalItem) - gBattleStruct->itemLost[gBattlerPartyIndexes[battler]].stolen = TRUE; + && stolenItem == gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].originalItem) + gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen = TRUE; } bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes) @@ -11077,7 +11084,7 @@ bool32 TryRoomService(u32 battler) BufferStatChange(battler, STAT_SPEED, STRINGID_STATFELL); gEffectBattler = gBattleScripting.battler = battler; SET_STATCHANGER(STAT_SPEED, 1, TRUE); - gBattleScripting.animArg1 = 14 + STAT_SPEED; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED; gBattleScripting.animArg2 = 0; gLastUsedItem = gBattleMons[battler].item; return TRUE; @@ -11194,7 +11201,7 @@ void RemoveConfusionStatus(u32 battler) static bool32 CanBeInfinitelyConfused(u32 battler) { - if (gBattleMons[battler].ability == ABILITY_OWN_TEMPO + if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN) || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) { @@ -11407,3 +11414,53 @@ void RemoveBattlerType(u32 battler, u8 type) *(u8 *)(&gBattleMons[battler].type1 + i) = TYPE_MYSTERY; } } + +void SetShellSideArmCategory(void) +{ + u32 battlerAtk, battlerDef; + u32 attackerAtkStat; + u32 targetDefStat; + u32 attackerSpAtkStat; + u32 targetSpDefStat; + u8 statStage; + u32 physical; + u32 special; + + for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) + { + attackerAtkStat = gBattleMons[battlerAtk].attack; + statStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; + attackerAtkStat *= gStatStageRatios[statStage][0]; + attackerAtkStat /= gStatStageRatios[statStage][1]; + + attackerSpAtkStat = gBattleMons[battlerAtk].spAttack; + statStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; + attackerSpAtkStat *= gStatStageRatios[statStage][0]; + attackerSpAtkStat /= gStatStageRatios[statStage][1]; + + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battlerAtk == battlerDef) + continue; + + targetDefStat = gBattleMons[battlerDef].defense; + statStage = gBattleMons[battlerDef].statStages[STAT_DEF]; + targetDefStat *= gStatStageRatios[statStage][0]; + targetDefStat /= gStatStageRatios[statStage][1]; + + physical = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * gMovesInfo[MOVE_SHELL_SIDE_ARM].power * attackerAtkStat) / targetDefStat) / 50); + + targetSpDefStat = gBattleMons[battlerDef].spDefense; + statStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; + targetSpDefStat *= gStatStageRatios[statStage][0]; + targetSpDefStat /= gStatStageRatios[statStage][1]; + + special = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * gMovesInfo[MOVE_SHELL_SIDE_ARM].power * attackerSpAtkStat) / targetSpDefStat) / 50); + + if ((physical > special) || (physical == special && RandomPercentage(RNG_SHELL_SIDE_ARM, 50))) + gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_PHYSICAL; + else + gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_SPECIAL; + } + } +} diff --git a/src/berry_blender.c b/src/berry_blender.c index 3524ad50d214..0af3fd3ba646 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -916,14 +916,14 @@ static const u8 sBlackPokeblockFlavorFlags[] = { (1 << FLAVOR_SOUR) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_SPICY), }; -static const u8 sUnused[] = -{ - 0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10, - 0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, - 0x0c, 0x10, 0x00, 0xff, 0x06, 0x27, 0x02, 0xff, 0x00, 0x0c, 0x48, - 0x02, 0xff, 0x00, 0x01, 0x1f, 0x02, 0xff, 0x00, 0x16, 0x37, 0x02, - 0xff, 0x00, 0x0d, 0x50, 0x4b, 0x02, 0xff, 0x06, 0x06, 0x06, 0x06, - 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02 +static const u8 sJPText_GoodTvReady[] = _("\nいいTVができました "); // Unused +static const u8 sJPText_BadTvReady[] = _("\nダメTVができました "); // Unused +static const u8 sJPText_Flavors[][5] = {_("からい"), _("しぶい"), _("あまい"), _("にがい"), _("すっぱい")}; // Unused + +static const u8 sUnused[] = { + 6, 6, 6, 6, 5, + 3, 3, 3, 2, 2, + 3, 3, 3, 3, 2 }; static const struct WindowTemplate sBlenderRecordWindowTemplate = @@ -1908,7 +1908,7 @@ static void Task_HandleOpponent1(u8 taskId) static void Task_HandleOpponent2(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[2] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[2]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (!gTasks[taskId].tDidInput) @@ -1925,11 +1925,9 @@ static void Task_HandleOpponent2(u8 taskId) } else { - u8 value; if (rand > 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - value = rand - 41; - if (value < 25) + if (rand > 40 && rand <= 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 10) CreateOpponentMissTask(2, 5); @@ -1953,7 +1951,7 @@ static void Task_HandleOpponent2(u8 taskId) static void Task_HandleOpponent3(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[3] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[3]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (gTasks[taskId].data[0] == 0) @@ -1971,16 +1969,9 @@ static void Task_HandleOpponent3(u8 taskId) else { if (rand > 60) - { gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - } - else - { - s8 value = rand - 56; // makes me wonder what the original code was - u8 value2 = value; - if (value2 < 5) - gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; - } + else if (rand > 55 && rand <= 60) + gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 5) CreateOpponentMissTask(3, 5); } diff --git a/src/data/abilities.h b/src/data/abilities.h index 8b81057b4ff4..8fc7d699e1ce 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -2548,7 +2548,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = #else .name = _("SuprswtSyrup"), #endif - .description = COMPOUND_STRING("Lowers the foe's Speed."), + .description = COMPOUND_STRING("Lowers the foe's Evasion."), .aiRating = 5, }, diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 9c53f50396ac..5a1536155384 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -1934,12 +1934,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_SHELL_SIDE_ARM] = - { - .battleScript = BattleScript_EffectShellSideArm, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_TERRAIN_PULSE] = { .battleScript = BattleScript_EffectHit, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h deleted file mode 100644 index 4b80b2eeb0fc..000000000000 --- a/src/data/battle_moves.h +++ /dev/null @@ -1,15927 +0,0 @@ -const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = -{ - [MOVE_NONE] = - { - .effect = EFFECT_HIT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .metronomeBanned = TRUE, - .mirrorMoveBanned = TRUE, - .sketchBanned = TRUE, - }, - - [MOVE_POUND] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS == GEN_4, - }, - - [MOVE_KARATE_CHOP] = - { - .effect = EFFECT_HIT, - .power = 50, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_DOUBLE_SLAP] = - { - .effect = EFFECT_MULTI_HIT, - .power = 15, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_COMET_PUNCH] = - { - .effect = EFFECT_MULTI_HIT, - .power = 20, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_MEGA_PUNCH] = - { - .effect = EFFECT_ATTACK_UP_HIT, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_PAY_DAY] = - { - .effect = EFFECT_PAY_DAY, - .power = 60, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_FIRE_PUNCH] = - { - .effect = EFFECT_BURN_HIT, - .power = 75, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ICE_PUNCH] = - { - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif - .power = 75, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_THUNDER_PUNCH] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 75, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SCRATCH] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_VISE_GRIP] = - { - .effect = EFFECT_HIT, - .power = 55, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_GUILLOTINE] = - { - .effect = EFFECT_OHKO, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 30, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_RAZOR_WIND] = - { - .effect = EFFECT_ALWAYS_CRIT, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .twoTurnMove = FALSE, - .sleepTalkBanned = FALSE, - .instructBanned = FALSE, - .windMove = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_SWORDS_DANCE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 30, - #endif - .effect = EFFECT_ATTACK_UP_2, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .danceMove = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_CUT] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_GUST] = - { - .effect = EFFECT_GUST, - .power = 40, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3), - .damagesAirborneDoubleDamage = TRUE, - .windMove = TRUE, - }, - - [MOVE_WING_ATTACK] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_WHIRLWIND] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_ROAR, - .power = 0, - .type = TYPE_NORMAL, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -6, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .windMove = TRUE, - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, - .ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_FLY] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 100, - #else - .power = 70, - #endif - .effect = EFFECT_SEMI_INVULNERABLE, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .gravityBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_BIND] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 85, - #else - .accuracy = 75, - #endif - .effect = EFFECT_TRAP, - .power = 15, - .type = TYPE_NORMAL, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - }, - - [MOVE_SLAM] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_VINE_WHIP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 45, - .pp = 25, - #elif B_UPDATED_MOVE_DATA >= GEN_4 - .power = 35, - .pp = 15, - #else - .power = 35, - .pp = 10, - #endif - .effect = EFFECT_HIT, - .type = TYPE_GRASS, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_STOMP] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 65, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_DOUBLE_KICK] = - { - .effect = EFFECT_HIT, - .power = 35, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 2, - }, - - [MOVE_MEGA_KICK] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 120, - .type = TYPE_NORMAL, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_JUMP_KICK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 100, - .pp = 10, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 85, - .pp = 25, - #else - .power = 70, - .pp = 25, - #endif - .effect = EFFECT_RECOIL_IF_MISS, - .type = TYPE_FIGHTING, - .accuracy = 95, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .gravityBanned = TRUE, - }, - - [MOVE_ROLLING_KICK] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 65, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - .sheerForceBoost = TRUE, - }, - - [MOVE_SAND_ATTACK] = - { - .effect = EFFECT_ACCURACY_DOWN, - .power = 0, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_HEADBUTT] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HORN_ATTACK] = - { - .effect = EFFECT_HIT, - .power = 65, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FURY_ATTACK] = - { - .effect = EFFECT_MULTI_HIT, - .power = 16, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_HORN_DRILL] = - { - .effect = EFFECT_OHKO, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 30, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TACKLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 40, - .accuracy = 100, - #elif B_UPDATED_MOVE_DATA >= GEN_5 - .power = 50, - .accuracy = 100, - #else - .power = 35, - .accuracy = 95, - #endif - .effect = EFFECT_HIT, - .type = TYPE_NORMAL, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BODY_SLAM] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 85, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS >= GEN_6, - .skyBattleBanned = TRUE, - }, - - [MOVE_WRAP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 90, - #else - .accuracy = 85, - #endif - .effect = EFFECT_TRAP, - .power = 15, - .type = TYPE_NORMAL, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TAKE_DOWN] = - { - .effect = EFFECT_RECOIL_25, - .power = 100, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_THRASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 120, - .pp = 10, - #else - .power = 90, - .pp = 20, - #endif - .effect = EFFECT_RAMPAGE, - .type = TYPE_NORMAL, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_RANDOM, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_DOUBLE_EDGE] = - { - .effect = EFFECT_RECOIL_33, - .power = 120, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TAIL_WHIP] = - { - .effect = EFFECT_DEFENSE_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_POISON_STING] = - { - .effect = EFFECT_POISON_HIT, - .power = 30, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_TWINEEDLE] = - { - .effect = EFFECT_POISON_HIT, - .power = 40, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .strikeCount = 2, - }, - - [MOVE_PIN_MISSILE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 25, - .accuracy = 100, - #else - .power = 14, - .accuracy = 85, - #endif - .effect = EFFECT_MULTI_HIT, - .type = TYPE_BUG, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_LEER] = - { - .effect = EFFECT_DEFENSE_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_BITE] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 60, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_GROWL] = - { - .effect = EFFECT_ATTACK_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_ROAR] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_ROAR, - .power = 0, - .type = TYPE_NORMAL, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -6, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .soundMove = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SING] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 70, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_SUPERSONIC] = - { - .effect = EFFECT_CONFUSE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 70, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_SONIC_BOOM] = - { - .effect = EFFECT_SONICBOOM, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_DISABLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 100, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .accuracy = 80, - #else - .accuracy = 55, - #endif - .effect = EFFECT_DISABLE, - .power = 0, - .type = TYPE_NORMAL, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_ACID] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - #else - .effect = EFFECT_DEFENSE_DOWN_HIT, - #endif - .power = 40, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_EMBER] = - { - .effect = EFFECT_BURN_HIT, - .power = 40, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FLAMETHROWER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - #else - .power = 95, - #endif - .effect = EFFECT_BURN_HIT, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MIST] = - { - .effect = EFFECT_MIST, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_WATER_GUN] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_HYDRO_PUMP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 110, - #else - .power = 120, - #endif - .effect = EFFECT_HIT, - .type = TYPE_WATER, - .accuracy = 80, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SURF] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - .target = MOVE_TARGET_FOES_AND_ALLY, - #elif B_UPDATED_MOVE_DATA >= GEN_4 - .power = 95, - .target = MOVE_TARGET_FOES_AND_ALLY, - #else - .power = 95, - .target = MOVE_TARGET_BOTH, - #endif - .effect = EFFECT_HIT, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesUnderwater = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_ICE_BEAM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - #else - .power = 95, - #endif - // The following effect is also relevant in battle_pike.c - // If you cherry-pick this to use something other than the config, make sure to update it there too - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif - .type = TYPE_ICE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BLIZZARD] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 110, - #else - .power = 120, - #endif - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif - .type = TYPE_ICE, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_PSYBEAM] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 60, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BUBBLE_BEAM] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 60, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_AURORA_BEAM] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 60, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HYPER_BEAM] = - { - .effect = EFFECT_RECHARGE, - .power = 150, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - }, - - [MOVE_PECK] = - { - .effect = EFFECT_HIT, - .power = 35, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 35, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_DRILL_PECK] = - { - .effect = EFFECT_HIT, - .power = 85, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SUBMISSION] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 25, - #endif - .effect = EFFECT_RECOIL_25, - .power = 90, - .type = TYPE_FIGHTING, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_LOW_KICK] = - { - .effect = EFFECT_LOW_KICK, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_COUNTER] = - { - .effect = EFFECT_COUNTER, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = -5, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, // B_UPDATED_MOVE_FLAGS >= GEN_2 - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SEISMIC_TOSS] = - { - .effect = EFFECT_LEVEL_DAMAGE, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_STRENGTH] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ABSORB] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .pp = 25, - #else - .pp = 20, - #endif - .effect = EFFECT_ABSORB, - .power = 20, - .type = TYPE_GRASS, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_MEGA_DRAIN] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .pp = 15, - #else - .pp = 10, - #endif - .effect = EFFECT_ABSORB, - .power = 40, - .type = TYPE_GRASS, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_LEECH_SEED] = - { - .effect = EFFECT_LEECH_SEED, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - }, - - [MOVE_GROWTH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 40, - #endif - #if B_GROWTH_STAT_RAISE >= GEN_5 - .effect = EFFECT_GROWTH, - #else - .effect = EFFECT_SPECIAL_ATTACK_UP, - #endif - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_RAZOR_LEAF] = - { - .effect = EFFECT_HIT, - .power = 55, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_SOLAR_BEAM] = - { - .effect = EFFECT_SOLAR_BEAM, - .power = 120, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_POISON_POWDER] = - { - .effect = EFFECT_POISON, - .power = 0, - .type = TYPE_POISON, - .accuracy = 85, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_STUN_SPORE] = - { - .effect = EFFECT_PARALYZE, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 85, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_SLEEP_POWDER] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 75, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_PETAL_DANCE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 120, - .pp = 10, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 90, - .pp = 20, - #else - .power = 70, - .pp = 20, - #endif - .effect = EFFECT_RAMPAGE, - .type = TYPE_GRASS, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_RANDOM, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .danceMove = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_STRING_SHOT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .effect = EFFECT_SPEED_DOWN_2, - #else - .effect = EFFECT_SPEED_DOWN, - #endif - .power = 0, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_DRAGON_RAGE] = - { - .effect = EFFECT_DRAGON_RAGE, - .power = 1, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3), - }, - - [MOVE_FIRE_SPIN] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 35, - .accuracy = 85, - #else - .power = 15, - .accuracy = 70, - #endif - .effect = EFFECT_TRAP, - .type = TYPE_FIRE, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - }, - - [MOVE_THUNDER_SHOCK] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 40, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_THUNDERBOLT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - #else - .power = 95, - #endif - .effect = EFFECT_PARALYZE_HIT, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_THUNDER_WAVE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .accuracy = 90, - #else - .accuracy = 100, - #endif - .effect = EFFECT_PARALYZE, - .power = 0, - .type = TYPE_ELECTRIC, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_THUNDER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 110, - #else - .power = 120, - #endif - .effect = EFFECT_THUNDER, - .type = TYPE_ELECTRIC, - .accuracy = 80, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .damagesAirborne = TRUE, - }, - - [MOVE_ROCK_THROW] = - { - .effect = EFFECT_HIT, - .power = 50, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_EARTHQUAKE] = - { - .effect = EFFECT_EARTHQUAKE, - .power = 100, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - .damagesUnderground = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_FISSURE] = - { - .effect = EFFECT_OHKO, - .power = 1, - .type = TYPE_GROUND, - .accuracy = 30, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesUnderground = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_DIG] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 90, - #else - .power = 60, - #endif - .effect = EFFECT_SEMI_INVULNERABLE, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_TOXIC] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 90, - #else - .accuracy = 85, - #endif - .effect = EFFECT_TOXIC, - .power = 0, - .type = TYPE_POISON, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_CONFUSION] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 50, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PSYCHIC] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 90, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HYPNOSIS] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 70, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_MEDITATE] = - { - .effect = EFFECT_ATTACK_UP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_AGILITY] = - { - .effect = EFFECT_SPEED_UP_2, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_QUICK_ATTACK] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_RAGE] = - { - .effect = EFFECT_RAGE, - .power = 30, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TELEPORT] = - { - .effect = EFFECT_TELEPORT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = -6, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_NIGHT_SHADE] = - { - .effect = EFFECT_LEVEL_DAMAGE, - .power = 1, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_MIMIC] = - { - .effect = EFFECT_MIMIC, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .ignoresSubstitute = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, // B_UPDATED_MOVE_FLAGS >= GEN_2 - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SCREECH] = - { - .effect = EFFECT_DEFENSE_DOWN_2, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_DOUBLE_TEAM] = - { - .effect = EFFECT_EVASION_UP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_RECOVER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #elif B_UPDATED_MOVE_DATA >= GEN_4 - .pp = 10, - #else - .pp = 20, - #endif - .effect = EFFECT_RESTORE_HP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_HARDEN] = - { - .effect = EFFECT_DEFENSE_UP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_MINIMIZE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 10, - #else - .pp = 20, - #endif - .effect = EFFECT_MINIMIZE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_SMOKESCREEN] = - { - .effect = EFFECT_ACCURACY_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_CONFUSE_RAY] = - { - .effect = EFFECT_CONFUSE, - .power = 0, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_WITHDRAW] = - { - .effect = EFFECT_COSMIC_POWER, - .power = 0, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_DEFENSE_CURL] = - { - .effect = EFFECT_DEFENSE_CURL, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_BARRIER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 30, - #endif - .effect = EFFECT_DEFENSE_UP_2, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_LIGHT_SCREEN] = - { - .effect = EFFECT_LIGHT_SCREEN, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_HAZE] = - { - .effect = EFFECT_HAZE, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_REFLECT] = - { - .effect = EFFECT_REFLECT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_FOCUS_ENERGY] = - { - .effect = EFFECT_FOCUS_ENERGY, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_BIDE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 0, - .priority = 1, - #else - .accuracy = 100, - .priority = 0, - #endif - .effect = EFFECT_BIDE, - .power = 1, - .type = TYPE_NORMAL, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_METRONOME] = - { - .effect = EFFECT_METRONOME, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_MIRROR_MOVE] = - { - .effect = EFFECT_MIRROR_MOVE, - .power = 0, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_2, - .mimicBanned = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, - .copycatBanned = TRUE, - .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SELF_DESTRUCT] = - { - .effect = EFFECT_EXPLOSION, - .power = 200, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .parentalBondBanned = TRUE, - }, - - [MOVE_EGG_BOMB] = - { - .effect = EFFECT_HIT, - .power = 110, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_LICK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 30, - #else - .power = 20, - #endif - .effect = EFFECT_PARALYZE_HIT, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SMOG] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 30, - #else - .power = 20, - #endif - .effect = EFFECT_POISON_HIT, - .type = TYPE_POISON, - .accuracy = 80, - .pp = 20, - .secondaryEffectChance = 40, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SLUDGE] = - { - .effect = EFFECT_POISON_HIT, - .power = 65, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BONE_CLUB] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 85, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FIRE_BLAST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 110, - #else - .power = 120, - #endif - .effect = EFFECT_BURN_HIT, - .type = TYPE_FIRE, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_WATERFALL] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .effect = EFFECT_FLINCH_HIT, - #else - .effect = EFFECT_HIT, - #endif - .power = 85, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_CLAMP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 85, - .pp = 15, - #else - .accuracy = 75, - .pp = 10, - #endif - .effect = EFFECT_TRAP, - .power = 35, - .type = TYPE_WATER, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - }, - - [MOVE_SWIFT] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SKULL_BASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 130, - .pp = 10, - #else - .power = 100, - .pp = 15, - #endif - .effect = EFFECT_SKULL_BASH, - .type = TYPE_STEEL, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_SPIKE_CANNON] = - { - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_CONSTRICT] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 20, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_AMNESIA] = - { - .effect = EFFECT_SPECIAL_DEFENSE_UP_2, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_KINESIS] = - { - .effect = EFFECT_ACCURACY_DOWN, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 85, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_SOFT_BOILED] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_SOFTBOILED, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = TRUE, - }, - - [MOVE_HIGH_JUMP_KICK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 130, - .pp = 10, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 100, - .pp = 20, - #else - .power = 85, - .pp = 20, - #endif - .effect = EFFECT_RECOIL_IF_MISS, - .type = TYPE_FIGHTING, - .accuracy = 90, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .gravityBanned = TRUE, - }, - - [MOVE_GLARE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 100, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .accuracy = 90, - #else - .accuracy = 75, - #endif - .effect = EFFECT_PARALYZE, - .power = 0, - .type = TYPE_NORMAL, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_DREAM_EATER] = - { - .effect = EFFECT_DREAM_EATER, - .power = 100, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_POISON_GAS] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 90, - .target = MOVE_TARGET_BOTH, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .accuracy = 80, - .target = MOVE_TARGET_BOTH, - #else - .accuracy = 55, - .target = MOVE_TARGET_SELECTED, - #endif - .effect = EFFECT_POISON, - .power = 0, - .type = TYPE_POISON, - .pp = 40, - .secondaryEffectChance = 0, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_BARRAGE] = - { - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_LEECH_LIFE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 80, - .pp = 10, - #else - .power = 20, - .pp = 15, - #endif - .effect = EFFECT_ABSORB, - .type = TYPE_BUG, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_LOVELY_KISS] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 75, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_SKY_ATTACK] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MOVE_EFFECT_FLINCH, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = FALSE, - .sheerForceBoost = TRUE, - .sleepTalkBanned = FALSE, - .instructBanned = FALSE, - }, - - [MOVE_TRANSFORM] = - { - .effect = EFFECT_TRANSFORM, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, - .copycatBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_BUBBLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 40, - #else - .power = 20, - #endif - .effect = EFFECT_SPEED_DOWN_HIT, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DIZZY_PUNCH] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 65, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SPORE] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_FLASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 100, - #else - .accuracy = 70, - #endif - .effect = EFFECT_ACCURACY_DOWN, - .power = 50, - .type = TYPE_ELECTRIC, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_PSYWAVE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 100, - #else - .accuracy = 80, - #endif - .effect = EFFECT_PSYWAVE, - .power = 1, - .type = TYPE_PSYCHIC, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SPLASH] = - { - .effect = EFFECT_DO_NOTHING, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_3, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .gravityBanned = TRUE, - }, - - [MOVE_ACID_ARMOR] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 40, - #endif - .effect = EFFECT_DEFENSE_UP_2, - .power = 0, - .type = TYPE_POISON, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_CRABHAMMER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 100, - .accuracy = 100, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 90, - .accuracy = 90, - #else - .power = 90, - .accuracy = 85, - #endif - .effect = EFFECT_HIT, - .type = TYPE_WATER, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_EXPLOSION] = - { - .effect = EFFECT_EXPLOSION, - .power = 250, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .parentalBondBanned = TRUE, - }, - - [MOVE_FURY_SWIPES] = - { - .effect = EFFECT_MULTI_HIT, - .power = 18, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BONEMERANG] = - { - .effect = EFFECT_HIT, - .power = 50, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .strikeCount = 2, - }, - - [MOVE_REST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_REST, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - }, - - [MOVE_ROCK_SLIDE] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 75, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HYPER_FANG] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_SHARPEN] = - { - .effect = EFFECT_ATTACK_UP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_CONVERSION] = - { - .effect = EFFECT_CONVERSION, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TRI_ATTACK] = - { - .effect = EFFECT_TRI_ATTACK, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SUPER_FANG] = - { - .effect = EFFECT_SUPER_FANG, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - }, - - [MOVE_SLASH] = - { - .effect = EFFECT_ALWAYS_CRIT, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_SUBSTITUTE] = - { - .effect = EFFECT_SUBSTITUTE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_STRUGGLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 0, - .effect = EFFECT_RECOIL_HP_25, - #else - .accuracy = 100, - .effect = EFFECT_RECOIL_25, - #endif - .power = 50, - .type = TYPE_NORMAL, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .sleepTalkBanned = TRUE, - .copycatBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = TRUE, - }, - - [MOVE_SKETCH] = - { - .effect = EFFECT_SKETCH, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = TRUE, - }, - - [MOVE_TRIPLE_KICK] = - { - .effect = EFFECT_TRIPLE_KICK, - .power = 10, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 3, - }, - - [MOVE_THIEF] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - .pp = 25, - #else - .power = 40, - .pp = 10, - #endif - .effect = EFFECT_THIEF, - .type = TYPE_DARK, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SPIDER_WEB] = - { - .effect = EFFECT_MEAN_LOOK, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = (B_UPDATED_MOVE_FLAGS >= GEN_6) || (B_UPDATED_MOVE_FLAGS <= GEN_3), - .magicCoatAffected = TRUE, - }, - - [MOVE_MIND_READER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_LOCK_ON, - .power = 0, - .type = TYPE_NORMAL, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - }, - - [MOVE_NIGHTMARE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 100, - #else - .accuracy = 0, - #endif - .effect = EFFECT_NIGHTMARE, - .power = 0, - .type = TYPE_GHOST, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresProtect = B_UPDATED_MOVE_FLAGS <= GEN_3, - }, - - [MOVE_FLAME_WHEEL] = - { - .effect = EFFECT_BURN_HIT, - .power = 60, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - }, - - [MOVE_SNORE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 40, - #endif - .effect = EFFECT_SNORE, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .sheerForceBoost = TRUE, - .soundMove = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_CURSE] = - { - #if B_UPDATED_MOVE_TYPES >= GEN_5 - .type = TYPE_GHOST, - #else - .type = TYPE_MYSTERY, - #endif - .effect = EFFECT_CURSE, - .power = 0, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_CURSE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_FLAIL] = - { - .effect = EFFECT_FLAIL, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_CONVERSION_2] = - { - .effect = EFFECT_CONVERSION_2, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_AEROBLAST] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .windMove = TRUE, - }, - - [MOVE_COTTON_SPORE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 100, - .target = MOVE_TARGET_BOTH, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .accuracy = 100, - .target = MOVE_TARGET_SELECTED, - #else - .accuracy = 85, - .target = MOVE_TARGET_SELECTED, - #endif - .effect = EFFECT_SPEED_DOWN_2, - .power = 0, - .type = TYPE_GRASS, - .pp = 40, - .secondaryEffectChance = 0, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_REVERSAL] = - { - .effect = EFFECT_FLAIL, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SPITE] = - { - .effect = EFFECT_SPITE, - .power = 0, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresSubstitute = TRUE, - }, - - [MOVE_POWDER_SNOW] = - { - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif - .power = 40, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PROTECT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .priority = 4, - #else - .priority = 3, - #endif - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .protectionMove = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_MACH_PUNCH] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_SCARY_FACE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 100, - #else - .accuracy = 90, - #endif - .effect = EFFECT_SPEED_DOWN_2, - .power = 0, - .type = TYPE_NORMAL, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_FEINT_ATTACK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .makesContact = TRUE, - #endif - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SWEET_KISS] = - { - #if B_UPDATED_MOVE_TYPES >= GEN_6 - .type = TYPE_FAIRY, - #else - .type = TYPE_NORMAL, - #endif - .effect = EFFECT_CONFUSE, - .power = 0, - .accuracy = 75, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_BELLY_DRUM] = - { - .effect = EFFECT_BELLY_DRUM, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SLUDGE_BOMB] = - { - .effect = EFFECT_POISON_HIT, - .power = 90, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_MUD_SLAP] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 20, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_OCTAZOOKA] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 80, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - .pulseMove = TRUE, - }, - - [MOVE_SPIKES] = - { - .effect = EFFECT_SPIKES, - .power = 0, - .type = TYPE_GROUND, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_OPPONENTS_FIELD, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .forcePressure = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_ZAP_CANNON] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 120, - #else - .power = 100, - #endif - .effect = EFFECT_PARALYZE_HIT, - .type = TYPE_ELECTRIC, - .accuracy = 75, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_FORESIGHT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_FORESIGHT, - .power = 0, - .type = TYPE_NORMAL, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_BOOST_CRITS, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresSubstitute = TRUE, - }, - - [MOVE_DESTINY_BOND] = - { - .effect = EFFECT_DESTINY_BOND, - .power = 0, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_FOLLOW_ME, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_PERISH_SONG] = - { - .effect = EFFECT_PERISH_SONG, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .mirrorMoveBanned = TRUE, - .soundMove = TRUE, - }, - - [MOVE_ICY_WIND] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 55, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_DETECT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .priority = 4, - #else - .priority = 3, - #endif - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .protectionMove = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_BONE_RUSH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 100, - #else - .accuracy = 80, - #endif - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_GROUND, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_LOCK_ON] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_LOCK_ON, - .power = 0, - .type = TYPE_NORMAL, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - }, - - [MOVE_OUTRAGE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 120, - .pp = 10, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 120, - .pp = 15, - #else - .power = 90, - .pp = 15, - #endif - .effect = EFFECT_RAMPAGE, - .type = TYPE_DRAGON, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_RANDOM, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_SANDSTORM] = - { - .effect = EFFECT_SANDSTORM, - .power = 0, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .windMove = TRUE, - }, - - [MOVE_GIGA_DRAIN] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 75, - .pp = 15, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 60, - .pp = 10, - #else - .power = 60, - .pp = 5, - #endif - .effect = EFFECT_ABSORB, - .type = TYPE_GRASS, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_ENDURE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .priority = 4, - #else - .priority = 3, - #endif - .effect = EFFECT_ENDURE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .protectionMove = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_CHARM] = - { - #if B_UPDATED_MOVE_TYPES >= GEN_6 - .type = TYPE_FAIRY, - #else - .type = TYPE_NORMAL, - #endif - .effect = EFFECT_ATTACK_DOWN_2, - .power = 0, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_ROLLOUT] = - { - .effect = EFFECT_ROLLOUT, - .power = 30, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .instructBanned = TRUE, - .parentalBondBanned = TRUE, - }, - - [MOVE_FALSE_SWIPE] = - { - .effect = EFFECT_FALSE_SWIPE, - .power = 90, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SWAGGER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .accuracy = 85, - #else - .accuracy = 90, - #endif - .effect = EFFECT_SWAGGER, - .power = 0, - .type = TYPE_NORMAL, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - }, - - [MOVE_MILK_DRINK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_SOFTBOILED, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SPARK] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 65, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FURY_CUTTER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 40, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 20, - #else - .power = 10, - #endif - .effect = EFFECT_FURY_CUTTER, - .type = TYPE_BUG, - .accuracy = 95, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_STEEL_WING] = - { - .effect = EFFECT_DEFENSE_UP_HIT, - .power = 80, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MEAN_LOOK] = - { - .effect = EFFECT_MEAN_LOOK, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = (B_UPDATED_MOVE_FLAGS >= GEN_6) || (B_UPDATED_MOVE_FLAGS <= GEN_3), - .magicCoatAffected = TRUE, - }, - - [MOVE_ATTRACT] = - { - .effect = EFFECT_ATTRACT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_SLEEP_TALK] = - { - .effect = EFFECT_SLEEP_TALK, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_BOOST_CRITS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .mimicBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_HEAL_BELL] = - { - .effect = EFFECT_HEAL_BELL, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .soundMove = B_UPDATED_MOVE_FLAGS != GEN_5, - }, - - [MOVE_RETURN] = - { - .effect = EFFECT_RETURN, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_PRESENT] = - { - .effect = EFFECT_PRESENT, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - }, - - [MOVE_FRUSTRATION] = - { - .effect = EFFECT_FRUSTRATION, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SAFEGUARD] = - { - .effect = EFFECT_SAFEGUARD, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_PAIN_SPLIT] = - { - .effect = EFFECT_PAIN_SPLIT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - }, - - [MOVE_SACRED_FIRE] = - { - .effect = EFFECT_BURN_HIT, - .power = 100, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - }, - - [MOVE_MAGNITUDE] = - { - .effect = EFFECT_MAGNITUDE, - .power = 1, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesUnderground = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_DYNAMIC_PUNCH] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 100, - .type = TYPE_FIGHTING, - .accuracy = 75, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MEGAHORN] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_BUG, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_DRAGON_BREATH] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 60, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - }, - - [MOVE_BATON_PASS] = - { - .effect = EFFECT_BATON_PASS, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ENCORE] = - { - .effect = EFFECT_ENCORE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .encoreBanned = TRUE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_PURSUIT] = - { - .effect = EFFECT_PURSUIT, - .power = 40, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 - }, - - [MOVE_RAPID_SPIN] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 50, - #else - .power = 20, - #endif - .effect = EFFECT_RAPID_SPIN, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SWEET_SCENT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .effect = EFFECT_EVASION_DOWN_2, - #else - .effect = EFFECT_EVASION_DOWN, - #endif - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_IRON_TAIL] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 110, - .type = TYPE_STEEL, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_METAL_CLAW] = - { - .effect = EFFECT_ATTACK_UP_HIT, - .power = 50, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_VITAL_THROW] = - { - .effect = EFFECT_VITAL_THROW, - .power = 80, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MORNING_SUN] = - { - .effect = EFFECT_MORNING_SUN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SYNTHESIS] = - { - .effect = EFFECT_SYNTHESIS, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_MOONLIGHT] = - { - #if B_UPDATED_MOVE_TYPES >= GEN_6 - .type = TYPE_FAIRY, - #else - .type = TYPE_NORMAL, - #endif - .effect = EFFECT_MOONLIGHT, - .power = 0, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HIDDEN_POWER] = - { - .power = B_HIDDEN_POWER_DMG >= GEN_6 ? 60 : 1, - .effect = EFFECT_HIDDEN_POWER, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_CROSS_CHOP] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_FIGHTING, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_TWISTER] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 50, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .damagesAirborneDoubleDamage = TRUE, - .windMove = TRUE, - }, - - [MOVE_RAIN_DANCE] = - { - .effect = EFFECT_RAIN_DANCE, - .power = 0, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SUNNY_DAY] = - { - .effect = EFFECT_SUNNY_DAY, - .power = 0, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_CRUNCH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .effect = EFFECT_DEFENSE_DOWN_HIT, - #else - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - #endif - .power = 80, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_MIRROR_COAT] = - { - .effect = EFFECT_MIRROR_COAT, - .power = 1, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = -5, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_PSYCH_UP] = - { - .effect = EFFECT_PSYCH_UP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = B_UPDATED_MOVE_FLAGS < GEN_5, - }, - - [MOVE_EXTREME_SPEED] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .priority = 2, - #else - .priority = 1, - #endif - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ANCIENT_POWER] = - { - #if B_UPDATED_MOVE_DATA < GEN_4 - .makesContact = TRUE, - #endif - .effect = EFFECT_ALL_STATS_UP_HIT, - .power = 60, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SHADOW_BALL] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 80, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_FUTURE_SIGHT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 120, - .accuracy = 100, - .pp = 10, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 100, - .accuracy = 100, - .pp = 10, - #else - .power = 80, - .accuracy = 90, - .pp = 15, - #endif - .effect = EFFECT_FUTURE_SIGHT, - .type = TYPE_PSYCHIC, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ROCK_SMASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 40, - #else - .power = 20, - #endif - .effect = EFFECT_DEFENSE_DOWN_HIT, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_WHIRLPOOL] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 35, - .accuracy = 85, - #else - .power = 15, - .accuracy = 70, - #endif - .effect = EFFECT_TRAP, - .type = TYPE_WATER, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesUnderwater = TRUE, - }, - - [MOVE_BEAT_UP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 1, - #else - .power = 10, - #endif - .effect = EFFECT_BEAT_UP, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_FAKE_OUT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .priority = 3, - .makesContact = TRUE, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .priority = 1, - .makesContact = TRUE, - #else - .priority = 1, - #endif - .effect = EFFECT_FAKE_OUT, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_UPROAR] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 100, - #else - .power = 50, - #endif - .effect = EFFECT_UPROAR, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_RANDOM, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_STOCKPILE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .pp = 20, - #else - .pp = 10, - #endif - .effect = EFFECT_STOCKPILE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SPIT_UP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 1, - #else - .power = 100, - #endif - .effect = EFFECT_SPIT_UP, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SWALLOW] = - { - .effect = EFFECT_SWALLOW, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEAT_WAVE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 95, - #else - .power = 100, - #endif - .effect = EFFECT_BURN_HIT, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_HAIL] = - { - .effect = EFFECT_HAIL, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TORMENT] = - { - .effect = EFFECT_TORMENT, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_FLATTER] = - { - .effect = EFFECT_FLATTER, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_WILL_O_WISP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 85, - #else - .accuracy = 75, - #endif - .effect = EFFECT_WILL_O_WISP, - .power = 0, - .type = TYPE_FIRE, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_MEMENTO] = - { - .effect = EFFECT_MEMENTO, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, - }, - - [MOVE_FACADE] = - { - .effect = EFFECT_FACADE, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FOCUS_PUNCH] = - { - .effect = EFFECT_FOCUS_PUNCH, - .power = 150, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -3, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .mirrorMoveBanned = TRUE, - .punchingMove = TRUE, - .meFirstBanned = TRUE, - .sleepTalkBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SMELLING_SALTS] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 60, - #endif - .effect = EFFECT_SMELLING_SALTS, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = STATUS1_PARALYSIS, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FOLLOW_ME] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .priority = 2, - #else - .priority = 3, - #endif - .effect = EFFECT_FOLLOW_ME, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_NATURE_POWER] = - { - .effect = EFFECT_NATURE_POWER, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .mimicBanned = TRUE, - }, - - [MOVE_CHARGE] = - { - .effect = EFFECT_CHARGE, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TAUNT] = - { - .effect = EFFECT_TAUNT, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_HELPING_HAND] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .target = MOVE_TARGET_ALLY, - #else - .target = MOVE_TARGET_USER, - #endif - .effect = EFFECT_HELPING_HAND, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .priority = 5, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_TRICK] = - { - .effect = EFFECT_TRICK, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_ROLE_PLAY] = - { - .effect = EFFECT_ROLE_PLAY, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_WISH] = - { - .effect = EFFECT_WISH, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .healBlockBanned = TRUE, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ASSIST] = - { - .effect = EFFECT_ASSIST, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .mimicBanned = TRUE, - }, - - [MOVE_INGRAIN] = - { - .effect = EFFECT_INGRAIN, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_SUPERPOWER] = - { - .effect = EFFECT_SUPERPOWER, - .power = 120, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MAGIC_COAT] = - { - .effect = EFFECT_MAGIC_COAT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_2, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_RECYCLE] = - { - .effect = EFFECT_RECYCLE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_REVENGE] = - { - .effect = EFFECT_REVENGE, - .power = 70, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -4, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BRICK_BREAK] = - { - .effect = EFFECT_BRICK_BREAK, - .power = 80, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_YAWN] = - { - .effect = EFFECT_YAWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_KNOCK_OFF] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 65, - #else - .power = 20, - #endif - .effect = EFFECT_KNOCK_OFF, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ENDEAVOR] = - { - .effect = EFFECT_ENDEAVOR, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .parentalBondBanned = TRUE, - }, - - [MOVE_ERUPTION] = - { - .effect = EFFECT_ERUPTION, - .power = 150, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SKILL_SWAP] = - { - .effect = EFFECT_SKILL_SWAP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = TRUE, - }, - - [MOVE_IMPRISON] = - { - .effect = EFFECT_IMPRISON, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_2, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .forcePressure = TRUE, - }, - - [MOVE_REFRESH] = - { - .effect = EFFECT_REFRESH, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_GRUDGE] = - { - .effect = EFFECT_GRUDGE, - .power = 0, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_FOLLOW_ME, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SNATCH] = - { - .effect = EFFECT_SNATCH, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .ignoresSubstitute = TRUE, - .forcePressure = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SECRET_POWER] = - { - .effect = EFFECT_SECRET_POWER, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DIVE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 100, - #else - .power = 60, - #endif - .effect = EFFECT_SEMI_INVULNERABLE, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_ARM_THRUST] = - { - .effect = EFFECT_MULTI_HIT, - .power = 20, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_CAMOUFLAGE] = - { - .effect = EFFECT_CAMOUFLAGE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TAIL_GLOW] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .effect = EFFECT_SPECIAL_ATTACK_UP_3, - #else - .effect = EFFECT_SPECIAL_ATTACK_UP_2, - #endif - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_LUSTER_PURGE] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = (B_UPDATED_MOVE_DATA >= GEN_9) ? 95 : 70, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MIST_BALL] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .power = (B_UPDATED_MOVE_DATA >= GEN_9) ? 95 : 70, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_FEATHER_DANCE] = - { - .effect = EFFECT_ATTACK_DOWN_2, - .power = 0, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - .danceMove = TRUE, - }, - - [MOVE_TEETER_DANCE] = - { - .effect = EFFECT_TEETER_DANCE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .danceMove = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_4, - }, - - [MOVE_BLAZE_KICK] = - { - .effect = EFFECT_BURN_HIT, - .power = 85, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MUD_SPORT] = - { - .effect = EFFECT_MUD_SPORT, - .power = 0, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_ICE_BALL] = - { - .effect = EFFECT_ROLLOUT, - .power = 30, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ballisticMove = TRUE, - .instructBanned = TRUE, - .parentalBondBanned = TRUE, - }, - - [MOVE_NEEDLE_ARM] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS < GEN_4, - }, - - [MOVE_SLACK_OFF] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_RESTORE_HP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HYPER_VOICE] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_POISON_FANG] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .secondaryEffectChance = 50, - #else - .secondaryEffectChance = 30, - #endif - .effect = EFFECT_POISON_FANG, - .power = 50, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_CRUSH_CLAW] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BLAST_BURN] = - { - .effect = EFFECT_RECOIL_50, - .power = 140, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_HYDRO_CANNON] = - { - .effect = EFFECT_RECOIL_50, - .power = 140, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .pulseMove = TRUE, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_METEOR_MASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 100, - .accuracy = 90, - #else - .power = 100, - .accuracy = 85, - #endif - .effect = EFFECT_ATTACK_UP_HIT, - .type = TYPE_STEEL, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ASTONISH] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 30, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS < GEN_4, - }, - - [MOVE_WEATHER_BALL] = - { - .effect = EFFECT_WEATHER_BALL, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_AROMATHERAPY] = - { - .effect = EFFECT_HEAL_BELL, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_FAKE_TEARS] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_AIR_CUTTER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 55, - #endif - .effect = EFFECT_HIT, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .windMove = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_OVERHEAT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 130, - #elif B_UPDATED_MOVE_DATA >= GEN_4 - .power = 140, - #else - .power = 140, - .makesContact = TRUE, - #endif - .effect = EFFECT_OVERHEAT, - .type = TYPE_FIRE, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_ODOR_SLEUTH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_FORESIGHT, - .power = 0, - .type = TYPE_NORMAL, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_ROCK_TOMB] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - .accuracy = 95, - .pp = 15, - #else - .power = 50, - .accuracy = 80, - .pp = 10, - #endif - .effect = EFFECT_SPEED_DOWN_HIT, - .type = TYPE_ROCK, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SILVER_WIND] = - { - .effect = EFFECT_ALL_STATS_UP_HIT, - .power = 60, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_METAL_SOUND] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_GRASS_WHISTLE] = - { - .effect = EFFECT_SLEEP, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 80, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_TICKLE] = - { - .effect = EFFECT_TICKLE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_COSMIC_POWER] = - { - .effect = EFFECT_COSMIC_POWER, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_WATER_SPOUT] = - { - .effect = EFFECT_ERUPTION, - .power = 150, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SIGNAL_BEAM] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 75, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SHADOW_PUNCH] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_EXTRASENSORY] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 20, - #else - .pp = 30, - #endif - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS < GEN_4, - }, - - [MOVE_SKY_UPPERCUT] = - { - .effect = EFFECT_SKY_UPPERCUT, - .power = 85, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .damagesAirborne = TRUE, - }, - - [MOVE_SAND_TOMB] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 35, - .accuracy = 85, - #else - .power = 15, - .accuracy = 70, - #endif - .effect = EFFECT_TRAP, - .type = TYPE_GROUND, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SHEER_COLD] = - { - .effect = EFFECT_OHKO, - .power = 1, - .type = TYPE_ICE, - .accuracy = 30, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_MUDDY_WATER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - #else - .power = 95, - #endif - .effect = EFFECT_SPEED_DOWN_HIT, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_BULLET_SEED] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 25, - #else - .power = 10, - #endif - .effect = EFFECT_MULTI_HIT, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_AERIAL_ACE] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_ICICLE_SPEAR] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 25, - #else - .power = 10, - #endif - .effect = EFFECT_MULTI_HIT, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_IRON_DEFENSE] = - { - .effect = EFFECT_DEFENSE_UP_2, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_BLOCK] = - { - .effect = EFFECT_MEAN_LOOK, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = (B_UPDATED_MOVE_FLAGS >= GEN_6) || (B_UPDATED_MOVE_FLAGS <= GEN_3), - .magicCoatAffected = TRUE, - }, - - [MOVE_HOWL] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .effect = EFFECT_ATTACK_UP_USER_ALLY, - #else - .effect = EFFECT_ATTACK_UP, - #endif - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .soundMove = B_UPDATED_MOVE_FLAGS >= GEN_8, - }, - - [MOVE_DRAGON_CLAW] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FRENZY_PLANT] = - { - .effect = EFFECT_RECOIL_50, - .power = 140, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .skyBattleBanned = TRUE, - }, - - [MOVE_BULK_UP] = - { - .effect = EFFECT_BULK_UP, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_BOUNCE] = - { - .effect = EFFECT_SEMI_INVULNERABLE, - .power = 80, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MOVE_EFFECT_PARALYSIS, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .gravityBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_MUD_SHOT] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 55, - .type = TYPE_GROUND, - .accuracy = 95, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_POISON_TAIL] = - { - .effect = EFFECT_POISON_HIT, - .power = 70, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_COVET] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - .pp = 25, - .makesContact = TRUE, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 60, - .pp = 40, - .makesContact = TRUE, - #elif B_UPDATED_MOVE_DATA == GEN_4 - .power = 40, - .pp = 40, - .makesContact = TRUE, - #else - .power = 40, - .pp = 40, - #endif - .effect = EFFECT_THIEF, - .type = TYPE_FAIRY, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_VOLT_TACKLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .effect = EFFECT_RECOIL_33_STATUS, - .argument = STATUS1_PARALYSIS, - #else - .effect = EFFECT_RECOIL_33, - #endif - .power = 130, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MAGICAL_LEAF] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_WATER_SPORT] = - { - .effect = EFFECT_WATER_SPORT, - .power = 0, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_CALM_MIND] = - { - .effect = EFFECT_CALM_MIND, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_LEAF_BLADE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_4 - .power = 90, - #else - .power = 70, - #endif - .effect = EFFECT_HIT, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_DRAGON_DANCE] = - { - .effect = EFFECT_DRAGON_DANCE, - .power = 0, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .danceMove = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ROCK_BLAST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .accuracy = 100, - #else - .accuracy = 80, - #endif - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_ROCK, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_SHOCK_WAVE] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_WATER_PULSE] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 60, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .pulseMove = TRUE, - }, - - [MOVE_DOOM_DESIRE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 140, - .accuracy = 100, - #else - .power = 120, - .accuracy = 85, - #endif - .effect = EFFECT_FUTURE_SIGHT, - .type = TYPE_STEEL, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_PSYCHO_BOOST] = - { - .effect = EFFECT_OVERHEAT, - .power = 140, - .type = TYPE_PSYCHIC, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_ROOST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_ROOST, - .power = 0, - .type = TYPE_FLYING, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_GRAVITY] = - { - .effect = EFFECT_GRAVITY, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_MIRACLE_EYE] = - { - .effect = EFFECT_MIRACLE_EYE, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_WAKE_UP_SLAP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 70, - #else - .power = 60, - #endif - .effect = EFFECT_WAKE_UP_SLAP, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = STATUS1_SLEEP, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_HAMMER_ARM] = - { - .effect = EFFECT_HAMMER_ARM, - .power = 100, - .type = TYPE_FIGHTING, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_GYRO_BALL] = - { - .effect = EFFECT_GYRO_BALL, - .power = 1, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_HEALING_WISH] = - { - .effect = EFFECT_HEALING_WISH, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .healBlockBanned = TRUE, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_BRINE] = - { - .effect = EFFECT_BRINE, - .power = 70, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_NATURAL_GIFT] = - { - .effect = EFFECT_NATURAL_GIFT, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_FEINT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 60, - #else - .power = 50, - #endif - .effect = EFFECT_FEINT, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 2, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_6, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_PLUCK] = - { - .effect = EFFECT_BUG_BITE, - .power = 60, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TAILWIND] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 15, - #else - .pp = 30, - #endif - .effect = EFFECT_TAILWIND, - .power = 0, - .type = TYPE_FLYING, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_BOOST_CRITS, - .snatchAffected = TRUE, - .windMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ACUPRESSURE] = - { - .effect = EFFECT_ACUPRESSURE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_BOOST_CRITS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .snatchAffected = B_UPDATED_MOVE_FLAGS < GEN_5, - }, - - [MOVE_METAL_BURST] = - { - .effect = EFFECT_METAL_BURST, - .power = 1, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .meFirstBanned = TRUE, - }, - - [MOVE_U_TURN] = - { - .effect = EFFECT_HIT_ESCAPE, - .power = 70, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_CLOSE_COMBAT] = - { - .effect = EFFECT_CLOSE_COMBAT, - .power = 120, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_PAYBACK] = - { - .effect = EFFECT_PAYBACK, - .power = 50, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ASSURANCE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 50, - #endif - .effect = EFFECT_ASSURANCE, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_EMBARGO] = - { - .effect = EFFECT_EMBARGO, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_FLING] = - { - .effect = EFFECT_FLING, - .power = 1, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .parentalBondBanned = TRUE, - }, - - [MOVE_PSYCHO_SHIFT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 100, - #else - .accuracy = 90, - #endif - .effect = EFFECT_PSYCHO_SHIFT, - .power = 0, - .type = TYPE_PSYCHIC, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_2, - }, - - [MOVE_TRUMP_CARD] = - { - .effect = EFFECT_TRUMP_CARD, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_HEAL_BLOCK] = - { - .effect = EFFECT_HEAL_BLOCK, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_2, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_WRING_OUT] = - { - .effect = EFFECT_WRING_OUT, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .makesContact = TRUE, - }, - - [MOVE_POWER_TRICK] = - { - .effect = EFFECT_POWER_TRICK, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_GASTRO_ACID] = - { - .effect = EFFECT_GASTRO_ACID, - .power = 0, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_LUCKY_CHANT] = - { - .effect = EFFECT_LUCKY_CHANT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ME_FIRST] = - { - .effect = EFFECT_ME_FIRST, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .ignoresSubstitute = TRUE, - .metronomeBanned = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .mimicBanned = TRUE, - }, - - [MOVE_COPYCAT] = - { - .effect = EFFECT_COPYCAT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .mimicBanned = TRUE, - }, - - [MOVE_POWER_SWAP] = - { - .effect = EFFECT_POWER_SWAP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = TRUE, - }, - - [MOVE_GUARD_SWAP] = - { - .effect = EFFECT_GUARD_SWAP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = TRUE, - }, - - [MOVE_PUNISHMENT] = - { - .effect = EFFECT_PUNISHMENT, - .power = 60, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_LAST_RESORT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 140, - #else - .power = 130, - #endif - .effect = EFFECT_LAST_RESORT, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_WORRY_SEED] = - { - .effect = EFFECT_WORRY_SEED, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_SUCKER_PUNCH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 70, - #else - .power = 80, - #endif - .effect = EFFECT_SUCKER_PUNCH, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TOXIC_SPIKES] = - { - .effect = EFFECT_TOXIC_SPIKES, - .power = 0, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_OPPONENTS_FIELD, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .forcePressure = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_HEART_SWAP] = - { - .effect = EFFECT_HEART_SWAP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_BOOST_CRITS, - .ignoresSubstitute = TRUE, - }, - - [MOVE_AQUA_RING] = - { - .effect = EFFECT_AQUA_RING, - .power = 0, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_MAGNET_RISE] = - { - .effect = EFFECT_MAGNET_RISE, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_EVSN_UP_1, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .gravityBanned = TRUE, - }, - - [MOVE_FLARE_BLITZ] = - { - .effect = EFFECT_RECOIL_33_STATUS, - .power = 120, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = STATUS1_BURN, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - }, - - [MOVE_FORCE_PALM] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 60, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_AURA_SPHERE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 90, - #endif - .effect = EFFECT_HIT, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .pulseMove = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_ROCK_POLISH] = - { - .effect = EFFECT_SPEED_UP_2, - .power = 0, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_POISON_JAB] = - { - .effect = EFFECT_POISON_HIT, - .power = 80, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DARK_PULSE] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .pulseMove = TRUE, - }, - - [MOVE_NIGHT_SLASH] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_AQUA_TAIL] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_WATER, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SEED_BOMB] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_AIR_SLASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 15, - #else - .pp = 20, - #endif - .effect = EFFECT_FLINCH_HIT, - .power = 75, - .type = TYPE_FLYING, - .accuracy = 95, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_X_SCISSOR] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_BUG_BUZZ] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 90, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_DRAGON_PULSE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 85, - #else - .power = 90, - #endif - .effect = EFFECT_HIT, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .pulseMove = TRUE, - }, - - [MOVE_DRAGON_RUSH] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 110, - .type = TYPE_DRAGON, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_POWER_GEM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 70, - #endif - .effect = EFFECT_HIT, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_DRAIN_PUNCH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_5 - .power = 75, - .pp = 10, - #else - .power = 60, - .pp = 5, - #endif - .effect = EFFECT_ABSORB, - .type = TYPE_FIGHTING, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_VACUUM_WAVE] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_FOCUS_BLAST] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 110, - .type = TYPE_FIGHTING, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_ENERGY_BALL] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 90, - #else - .power = 80, - #endif - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_BRAVE_BIRD] = - { - .effect = EFFECT_RECOIL_33, - .power = 120, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_EARTH_POWER] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 90, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_SWITCHEROO] = - { - .effect = EFFECT_TRICK, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_GIGA_IMPACT] = - { - .effect = EFFECT_RECHARGE, - .power = 150, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_NASTY_PLOT] = - { - .effect = EFFECT_SPECIAL_ATTACK_UP_2, - .power = 0, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_BULLET_PUNCH] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_AVALANCHE] = - { - .effect = EFFECT_REVENGE, - .power = 60, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = -4, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ICE_SHARD] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SHADOW_CLAW] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_THUNDER_FANG] = - { - .effect = EFFECT_FLINCH_STATUS, - .power = 70, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = STATUS1_PARALYSIS, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_ICE_FANG] = - { - #if B_USE_FROSTBITE == TRUE - .argument = STATUS1_FROSTBITE, - #else - .argument = STATUS1_FREEZE, - #endif - .effect = EFFECT_FLINCH_STATUS, - .power = 70, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_FIRE_FANG] = - { - .effect = EFFECT_FLINCH_STATUS, - .power = 70, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 15, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = STATUS1_BURN, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_SHADOW_SNEAK] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MUD_BOMB] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 65, - .type = TYPE_GROUND, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_PSYCHO_CUT] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_ZEN_HEADBUTT] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MIRROR_SHOT] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 65, - .type = TYPE_STEEL, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FLASH_CANNON] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 80, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ROCK_CLIMB] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 90, - .type = TYPE_NORMAL, - .accuracy = 85, - .pp = 20, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DEFOG] = - { - .effect = EFFECT_DEFOG, - .power = 0, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - //.ignoresSubstitute = TRUE, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - }, - - [MOVE_TRICK_ROOM] = - { - .effect = EFFECT_TRICK_ROOM, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = -7, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ACC_UP_1, - .ignoresProtect = TRUE, - }, - - [MOVE_DRACO_METEOR] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 130, - #else - .power = 140, - #endif - .effect = EFFECT_OVERHEAT, - .type = TYPE_DRAGON, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_DISCHARGE] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 80, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_LAVA_PLUME] = - { - .effect = EFFECT_BURN_HIT, - .power = 80, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_LEAF_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 130, - #else - .power = 140, - #endif - .effect = EFFECT_OVERHEAT, - .type = TYPE_GRASS, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_POWER_WHIP] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_GRASS, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ROCK_WRECKER] = - { - .effect = EFFECT_RECHARGE, - .power = 150, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_CROSS_POISON] = - { - .effect = EFFECT_POISON_HIT, - .power = 70, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - .sheerForceBoost = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_GUNK_SHOT] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .accuracy = 80, - #else - .accuracy = 70, - #endif - .effect = EFFECT_POISON_HIT, - .power = 120, - .type = TYPE_POISON, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_IRON_HEAD] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MAGNET_BOMB] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_STONE_EDGE] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_ROCK, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - }, - - [MOVE_CAPTIVATE] = - { - .effect = EFFECT_CAPTIVATE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_2, - .magicCoatAffected = TRUE, - }, - - [MOVE_STEALTH_ROCK] = - { - .effect = EFFECT_STEALTH_ROCK, - .power = 0, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_OPPONENTS_FIELD, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .forcePressure = TRUE, - }, - - [MOVE_GRASS_KNOT] = - { - .effect = EFFECT_LOW_KICK, - .power = 1, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_CHATTER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - .secondaryEffectChance = 100, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 60, - .secondaryEffectChance = 10, - #else - .power = 60, - .secondaryEffectChance = 31, - #endif - .effect = EFFECT_CONFUSE_HIT, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_6, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_JUDGMENT] = - { - .effect = EFFECT_CHANGE_TYPE_ON_ITEM, - .power = 100, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = HOLD_EFFECT_PLATE, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_BUG_BITE] = - { - .effect = EFFECT_BUG_BITE, - .power = 60, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_CHARGE_BEAM] = - { - .effect = EFFECT_SP_ATTACK_UP_HIT, - .power = 50, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_WOOD_HAMMER] = - { - .effect = EFFECT_RECOIL_33, - .power = 120, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_AQUA_JET] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_ATTACK_ORDER] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - }, - - [MOVE_DEFEND_ORDER] = - { - .effect = EFFECT_COSMIC_POWER, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEAL_ORDER] = - { - .effect = EFFECT_RESTORE_HP, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEAD_SMASH] = - { - .effect = EFFECT_RECOIL_50, - .power = 150, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_DOUBLE_HIT] = - { - .effect = EFFECT_HIT, - .power = 35, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 2, - }, - - [MOVE_ROAR_OF_TIME] = - { - .effect = EFFECT_RECOIL_50, - .power = 130, - .type = TYPE_DRAGON, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SPACIAL_REND] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_DRAGON, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - }, - - [MOVE_LUNAR_DANCE] = - { - .effect = EFFECT_HEALING_WISH, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .danceMove = TRUE, - }, - - [MOVE_CRUSH_GRIP] = - { - .effect = EFFECT_WRING_OUT, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MAGMA_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 100, - .accuracy = 85, - #elif B_UPDATED_MOVE_DATA == GEN_5 - .power = 120, - .accuracy = 75, - #else - .power = 120, - .accuracy = 70, - #endif - .effect = EFFECT_TRAP, - .type = TYPE_FIRE, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_DARK_VOID] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .accuracy = 75, - #else - .accuracy = 80, - #endif - .effect = EFFECT_DARK_VOID, - .power = 0, - .type = TYPE_DARK, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_SEED_FLARE] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, - .power = 120, - .type = TYPE_GRASS, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 40, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_OMINOUS_WIND] = - { - .effect = EFFECT_ALL_STATS_UP_HIT, - .power = 60, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_SHADOW_FORCE] = - { - .effect = EFFECT_SEMI_INVULNERABLE, - .power = 120, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .argument = MOVE_EFFECT_FEINT, - .twoTurnMove = TRUE, - .ignoresProtect = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS == GEN_6, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_HONE_CLAWS] = - { - .effect = EFFECT_ATTACK_ACCURACY_UP, - .power = 0, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_WIDE_GUARD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 3, - .split = SPLIT_STATUS, - .argument = TRUE, // Protects the whole side. - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .protectionMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GUARD_SPLIT] = - { - .effect = EFFECT_GUARD_SPLIT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_POWER_SPLIT] = - { - .effect = EFFECT_POWER_SPLIT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_WONDER_ROOM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .priority = 0, - #else - .priority = -7, - #endif - .effect = EFFECT_WONDER_ROOM, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - }, - - [MOVE_PSYSHOCK] = - { - .effect = EFFECT_PSYSHOCK, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_VENOSHOCK] = - { - .effect = EFFECT_VENOSHOCK, - .power = 65, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_AUTOTOMIZE] = - { - .effect = EFFECT_AUTOTOMIZE, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_RAGE_POWDER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .priority = 2, - #else - .priority = 3, - #endif - .effect = EFFECT_FOLLOW_ME, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .powderMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_TELEKINESIS] = - { - .effect = EFFECT_TELEKINESIS, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - .gravityBanned = TRUE, - }, - - [MOVE_MAGIC_ROOM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .priority = 0, - #else - .priority = -7, - #endif - .effect = EFFECT_MAGIC_ROOM, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - }, - - [MOVE_SMACK_DOWN] = - { - .effect = EFFECT_SMACK_DOWN, - .power = 50, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesAirborne = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_STORM_THROW] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 40, - #endif - .effect = EFFECT_ALWAYS_CRIT, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FLAME_BURST] = - { - .effect = EFFECT_FLAME_BURST, - .power = 70, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SLUDGE_WAVE] = - { - .effect = EFFECT_POISON_HIT, - .power = 95, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_QUIVER_DANCE] = - { - .effect = EFFECT_QUIVER_DANCE, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .danceMove = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEAVY_SLAM] = - { - .effect = EFFECT_HEAT_CRASH, - .power = 1, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS >= GEN_7, - .skyBattleBanned = TRUE, - }, - - [MOVE_SYNCHRONOISE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 120, - .pp = 10, - #else - .power = 70, - .pp = 15, - #endif - .effect = EFFECT_SYNCHRONOISE, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_ELECTRO_BALL] = - { - .effect = EFFECT_ELECTRO_BALL, - .power = 1, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_SOAK] = - { - .effect = EFFECT_SOAK, - .power = 0, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_FLAME_CHARGE] = - { - .effect = EFFECT_SPEED_UP_HIT, - .power = 50, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_COIL] = - { - .effect = EFFECT_COIL, - .power = 0, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_LOW_SWEEP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 65, - #else - .power = 60, - #endif - .effect = EFFECT_SPEED_DOWN_HIT, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ACID_SPRAY] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, - .power = 40, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_FOUL_PLAY] = - { - .effect = EFFECT_FOUL_PLAY, - .power = 95, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SIMPLE_BEAM] = - { - .effect = EFFECT_SIMPLE_BEAM, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_ENTRAINMENT] = - { - .effect = EFFECT_ENTRAINMENT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_AFTER_YOU] = - { - .effect = EFFECT_AFTER_YOU, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ROUND] = - { - .effect = EFFECT_ROUND, - .power = 60, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_ECHOED_VOICE] = - { - .effect = EFFECT_ECHOED_VOICE, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_CHIP_AWAY] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresTargetDefenseEvasionStages = TRUE, - }, - - [MOVE_CLEAR_SMOG] = - { - .effect = EFFECT_CLEAR_SMOG, - .power = 50, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_STORED_POWER] = - { - .effect = EFFECT_STORED_POWER, - .power = 20, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_QUICK_GUARD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 3, - .split = SPLIT_STATUS, - .argument = TRUE, // Protects the whole side. - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .protectionMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ALLY_SWITCH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .priority = 2, - #else - .priority = 1, - #endif - .effect = EFFECT_ALLY_SWITCH, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SCALD] = - { - .effect = EFFECT_BURN_HIT, - .power = 80, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - }, - - [MOVE_SHELL_SMASH] = - { - .effect = EFFECT_SHELL_SMASH, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEAL_PULSE] = - { - .effect = EFFECT_HEAL_PULSE, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .magicCoatAffected = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .pulseMove = TRUE, - }, - - [MOVE_HEX] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 65, - #else - .power = 50, - #endif - .effect = EFFECT_HEX, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SKY_DROP] = - { - .effect = EFFECT_SKY_DROP, - .power = 60, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .gravityBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SHIFT_GEAR] = - { - .effect = EFFECT_SHIFT_GEAR, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_CIRCLE_THROW] = - { - .effect = EFFECT_HIT_SWITCH_TARGET, - .power = 60, - .type = TYPE_FIGHTING, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -6, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_INCINERATE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 30, - #endif - .effect = EFFECT_INCINERATE, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_QUASH] = - { - .effect = EFFECT_QUASH, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .metronomeBanned = TRUE, - }, - - [MOVE_ACROBATICS] = - { - .effect = EFFECT_ACROBATICS, - .power = 55, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_REFLECT_TYPE] = - { - .effect = EFFECT_REFLECT_TYPE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_RETALIATE] = - { - .effect = EFFECT_RETALIATE, - .power = 70, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FINAL_GAMBIT] = - { - .effect = EFFECT_FINAL_GAMBIT, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - .parentalBondBanned = TRUE, - }, - - [MOVE_BESTOW] = - { - .effect = EFFECT_BESTOW, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_2, - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, - .ignoresSubstitute = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_INFERNO] = - { - .effect = EFFECT_BURN_HIT, - .power = 100, - .type = TYPE_FIRE, - .accuracy = 75, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_WATER_PLEDGE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 50, - #endif - .effect = EFFECT_PLEDGE, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .skyBattleBanned = TRUE, - }, - - [MOVE_FIRE_PLEDGE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 50, - #endif - .effect = EFFECT_PLEDGE, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .skyBattleBanned = TRUE, - }, - - [MOVE_GRASS_PLEDGE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 80, - #else - .power = 50, - #endif - .effect = EFFECT_PLEDGE, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .skyBattleBanned = TRUE, - }, - - [MOVE_VOLT_SWITCH] = - { - .effect = EFFECT_HIT_ESCAPE, - .power = 70, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_STRUGGLE_BUG] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 50, - #else - .power = 30, - #endif - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BULLDOZE] = - { - .effect = EFFECT_BULLDOZE, - .power = 60, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_FROST_BREATH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 60, - #else - .power = 40, - #endif - .effect = EFFECT_ALWAYS_CRIT, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_DRAGON_TAIL] = - { - .effect = EFFECT_HIT_SWITCH_TARGET, - .power = 60, - .type = TYPE_DRAGON, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -6, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_WORK_UP] = - { - .effect = EFFECT_ATTACK_SPATK_UP, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE - }, - - [MOVE_ELECTROWEB] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 55, - .type = TYPE_ELECTRIC, - .accuracy = 95, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_WILD_CHARGE] = - { - .effect = EFFECT_RECOIL_25, - .power = 100, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_DRILL_RUN] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_GROUND, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_DUAL_CHOP] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_DRAGON, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 2, - }, - - [MOVE_HEART_STAMP] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 60, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HORN_LEECH] = - { - .effect = EFFECT_ABSORB, - .power = 75, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_SACRED_SWORD] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .pp = 15, - #else - .pp = 20, - #endif - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_FIGHTING, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresTargetDefenseEvasionStages = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_RAZOR_SHELL] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 75, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_HEAT_CRASH] = - { - .effect = EFFECT_HEAT_CRASH, - .power = 1, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_LEAF_TORNADO] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 65, - .type = TYPE_GRASS, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - //.windMove = TRUE, - }, - - [MOVE_STEAMROLLER] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 65, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .minimizeDoubleDamage = TRUE, - }, - - [MOVE_COTTON_GUARD] = - { - .effect = EFFECT_DEFENSE_UP_3, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_NIGHT_DAZE] = - { - .effect = EFFECT_ACCURACY_DOWN_HIT, - .power = 85, - .type = TYPE_DARK, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 40, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PSYSTRIKE] = - { - .effect = EFFECT_PSYSHOCK, - .power = 100, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_TAIL_SLAP] = - { - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_HURRICANE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 110, - #else - .power = 120, - #endif - .effect = EFFECT_HURRICANE, - .type = TYPE_FLYING, - .accuracy = 70, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - .damagesAirborne = TRUE, - }, - - [MOVE_HEAD_CHARGE] = - { - .effect = EFFECT_RECOIL_25, - .power = 120, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_GEAR_GRIND] = - { - .effect = EFFECT_HIT, - .power = 50, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 2, - }, - - [MOVE_SEARING_SHOT] = - { - .effect = EFFECT_BURN_HIT, - .power = 100, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ballisticMove = TRUE, - }, - - [MOVE_TECHNO_BLAST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .power = 120, - #else - .power = 85, - #endif - .effect = EFFECT_CHANGE_TYPE_ON_ITEM, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = HOLD_EFFECT_DRIVE, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_RELIC_SONG] = - { - .effect = EFFECT_RELIC_SONG, - .power = 75, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SECRET_SWORD] = - { - .effect = EFFECT_PSYSHOCK, - .power = 85, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .slicingMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GLACIATE] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 65, - .type = TYPE_ICE, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BOLT_STRIKE] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 130, - .type = TYPE_ELECTRIC, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BLUE_FLARE] = - { - .effect = EFFECT_BURN_HIT, - .power = 130, - .type = TYPE_FIRE, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FIERY_DANCE] = - { - .effect = EFFECT_SP_ATTACK_UP_HIT, - .power = 80, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .danceMove = TRUE, - }, - - [MOVE_FREEZE_SHOCK] = - { - .effect = EFFECT_TWO_TURNS_ATTACK, - .power = 140, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MOVE_EFFECT_PARALYSIS, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_ICE_BURN] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = MOVE_EFFECT_BURN, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_SNARL] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .power = 60, - .type = TYPE_DARK, - .accuracy = 95, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ICICLE_CRASH] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 85, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_V_CREATE] = - { - .effect = EFFECT_V_CREATE, - .power = 180, - .type = TYPE_FIRE, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_FUSION_FLARE] = - { - .effect = EFFECT_FUSION_COMBO, - .power = 100, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .thawsUser = TRUE, - }, - - [MOVE_FUSION_BOLT] = - { - .effect = EFFECT_FUSION_COMBO, - .power = 100, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_FLYING_PRESS] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 100, - #else - .power = 80, - #endif - .effect = EFFECT_TWO_TYPED_MOVE, - .type = TYPE_FIGHTING, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = TYPE_FLYING, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .minimizeDoubleDamage = TRUE, - .gravityBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_MAT_BLOCK] = - { - .effect = EFFECT_MAT_BLOCK, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .argument = TRUE, // Protects the whole side. - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_BELCH] = - { - .effect = EFFECT_BELCH, - .power = 120, - .type = TYPE_POISON, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .mimicBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_ROTOTILLER] = - { - .effect = EFFECT_ROTOTILLER, - .power = 0, - .type = TYPE_GROUND, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_STICKY_WEB] = - { - .effect = EFFECT_STICKY_WEB, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_OPPONENTS_FIELD, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .magicCoatAffected = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_FELL_STINGER] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 50, - #else - .power = 30, - #endif - .effect = EFFECT_FELL_STINGER, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_PHANTOM_FORCE] = - { - .effect = EFFECT_SEMI_INVULNERABLE, - .power = 110, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MOVE_EFFECT_FEINT, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .ignoresProtect = TRUE, - .makesContact = TRUE, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS == GEN_6, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_TRICK_OR_TREAT] = - { - .effect = EFFECT_THIRD_TYPE, - .power = 0, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .argument = TYPE_GHOST, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_NOBLE_ROAR] = - { - .effect = EFFECT_NOBLE_ROAR, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .magicCoatAffected = TRUE, - .soundMove = TRUE, - }, - - [MOVE_ION_DELUGE] = - { - .effect = EFFECT_ION_DELUGE, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 25, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 1, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_PARABOLIC_CHARGE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 65, - #else - .power = 50, - #endif - .effect = EFFECT_ABSORB, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_FORESTS_CURSE] = - { - .effect = EFFECT_THIRD_TYPE, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .argument = TYPE_GRASS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_PETAL_BLIZZARD] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .windMove = TRUE, - }, - - [MOVE_FREEZE_DRY] = - { - .effect = EFFECT_FREEZE_DRY, - .power = 70, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DISARMING_VOICE] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_PARTING_SHOT] = - { - .effect = EFFECT_PARTING_SHOT, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, - .magicCoatAffected = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_TOPSY_TURVY] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .accuracy = 0, - #else - .accuracy = 100, - #endif - .effect = EFFECT_TOPSY_TURVY, - .power = 0, - .type = TYPE_DARK, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_DRAINING_KISS] = - { - .effect = EFFECT_ABSORB, - .power = 50, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = 75, // restores 75% HP instead of 50% HP - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_CRAFTY_SHIELD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 3, - .split = SPLIT_STATUS, - .argument = TRUE, // Protects the whole side. - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_FLOWER_SHIELD] = - { - .effect = EFFECT_FLOWER_SHIELD, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_GRASSY_TERRAIN] = - { - .effect = EFFECT_GRASSY_TERRAIN, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_MISTY_TERRAIN] = - { - .effect = EFFECT_MISTY_TERRAIN, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_ELECTRIFY] = - { - .effect = EFFECT_ELECTRIFY, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - }, - - [MOVE_PLAY_ROUGH] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 90, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FAIRY_WIND] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .windMove = TRUE, - }, - - [MOVE_MOONBLAST] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .power = 95, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BOOMBURST] = - { - .effect = EFFECT_HIT, - .power = 140, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_FAIRY_LOCK] = - { - .effect = EFFECT_FAIRY_LOCK, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_KINGS_SHIELD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_PLAY_NICE] = - { - .effect = EFFECT_ATTACK_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .magicCoatAffected = TRUE, - }, - - [MOVE_CONFIDE] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .ignoresProtect = TRUE, - .magicCoatAffected = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_DIAMOND_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .effect = EFFECT_DEFENSE_UP2_HIT, - #else - .effect = EFFECT_DEFENSE_UP_HIT, - #endif - .power = 100, - .type = TYPE_ROCK, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_STEAM_ERUPTION] = - { - .effect = EFFECT_BURN_HIT, - .power = 110, - .type = TYPE_WATER, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_HYPERSPACE_HOLE] = - { - .effect = EFFECT_FEINT, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_WATER_SHURIKEN] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .split = SPLIT_SPECIAL, - #else - .split = SPLIT_PHYSICAL, - #endif - .effect = EFFECT_MULTI_HIT, - .power = 15, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .zMoveEffect = Z_EFFECT_NONE, - - }, - - [MOVE_MYSTICAL_FIRE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_7 - .power = 75, - #else - .power = 65, - #endif - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SPIKY_SHIELD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_AROMATIC_MIST] = - { - .effect = EFFECT_AROMATIC_MIST, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_2, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_EERIE_IMPULSE] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_2, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_VENOM_DRENCH] = - { - .effect = EFFECT_VENOM_DRENCH, - .power = 0, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_POWDER] = - { - .effect = EFFECT_POWDER, - .power = 0, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_2, - .powderMove = TRUE, - .magicCoatAffected = TRUE, - }, - - [MOVE_GEOMANCY] = - { - .effect = EFFECT_GEOMANCY, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .twoTurnMove = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_MAGNETIC_FLUX] = - { - .effect = EFFECT_MAGNETIC_FLUX, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HAPPY_HOUR] = - { - .effect = EFFECT_DO_NOTHING, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_ELECTRIC_TERRAIN] = - { - .effect = EFFECT_ELECTRIC_TERRAIN, - .power = 0, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_DAZZLING_GLEAM] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_CELEBRATE] = - { - .effect = EFFECT_DO_NOTHING, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .mimicBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_HOLD_HANDS] = - { - .effect = EFFECT_DO_NOTHING, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .metronomeBanned = TRUE, - .mimicBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_BABY_DOLL_EYES] = - { - .effect = EFFECT_ATTACK_DOWN, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_NUZZLE] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 20, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_HOLD_BACK] = - { - .effect = EFFECT_FALSE_SWIPE, - .power = 40, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_INFESTATION] = - { - .effect = EFFECT_TRAP, - .power = 20, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_POWER_UP_PUNCH] = - { - .effect = EFFECT_ATTACK_UP_HIT, - .power = 40, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_OBLIVION_WING] = - { - .effect = EFFECT_ABSORB, - .power = 80, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = 75, // restores 75% HP instead of 50% HP - .zMoveEffect = Z_EFFECT_NONE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_THOUSAND_ARROWS] = - { - .effect = EFFECT_SMACK_DOWN, - .power = 90, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .damagesAirborne = TRUE, - .ignoreTypeIfFlyingAndUngrounded = TRUE, - .metronomeBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_THOUSAND_WAVES] = - { - .effect = EFFECT_HIT_PREVENT_ESCAPE, - .power = 90, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - .skyBattleBanned = TRUE, - }, - - [MOVE_LANDS_WRATH] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .skyBattleBanned = TRUE, - }, - - [MOVE_LIGHT_OF_RUIN] = - { - .effect = EFFECT_RECOIL_50, - .power = 140, - .type = TYPE_FAIRY, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_ORIGIN_PULSE] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_WATER, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .pulseMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_PRECIPICE_BLADES] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_GROUND, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_DRAGON_ASCENT] = - { - .effect = EFFECT_CLOSE_COMBAT, - .power = 120, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_HYPERSPACE_FURY] = - { - .effect = EFFECT_HYPERSPACE_FURY, - .power = 100, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .metronomeBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_SHORE_UP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 5, - #else - .pp = 10, - #endif - .effect = EFFECT_SHORE_UP, - .power = 0, - .type = TYPE_GROUND, - .accuracy = 0, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .healBlockBanned = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_FIRST_IMPRESSION] = - { - .effect = EFFECT_FAKE_OUT, - .power = 90, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 2, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BANEFUL_BUNKER] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_SPIRIT_SHACKLE] = - { - .effect = EFFECT_HIT_PREVENT_ESCAPE, - .power = 80, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_DARKEST_LARIAT] = - { - .effect = EFFECT_HIT, - .power = 85, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresTargetDefenseEvasionStages = TRUE, - }, - - [MOVE_SPARKLING_ARIA] = - { - .effect = EFFECT_SPARKLING_ARIA, - .power = 90, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = STATUS1_BURN, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_ICE_HAMMER] = - { - .effect = EFFECT_HAMMER_ARM, - .power = 100, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_FLORAL_HEALING] = - { - .effect = EFFECT_HEAL_PULSE, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .argument = MOVE_EFFECT_FLORAL_HEALING, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .magicCoatAffected = TRUE, - }, - - [MOVE_HIGH_HORSEPOWER] = - { - .effect = EFFECT_HIT, - .power = 95, - .type = TYPE_GROUND, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_STRENGTH_SAP] = - { - .effect = EFFECT_STRENGTH_SAP, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .magicCoatAffected = TRUE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_SOLAR_BLADE] = - { - .effect = EFFECT_SOLAR_BEAM, - .power = 125, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .makesContact = TRUE, - .slicingMove = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_LEAFAGE] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SPOTLIGHT] = - { - .effect = EFFECT_FOLLOW_ME, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 3, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPDEF_UP_1, - .magicCoatAffected = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_TOXIC_THREAD] = - { - .effect = EFFECT_TOXIC_THREAD, - .power = 0, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, - }, - - [MOVE_LASER_FOCUS] = - { - .effect = EFFECT_LASER_FOCUS, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 30, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_GEAR_UP] = - { - .effect = EFFECT_GEAR_UP, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_THROAT_CHOP] = - { - .effect = EFFECT_THROAT_CHOP, - .power = 80, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_POLLEN_PUFF] = - { - .effect = EFFECT_HIT_ENEMY_HEAL_ALLY, - .power = 90, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - }, - - [MOVE_ANCHOR_SHOT] = - { - .effect = EFFECT_HIT_PREVENT_ESCAPE, - .power = 80, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PSYCHIC_TERRAIN] = - { - .effect = EFFECT_PSYCHIC_TERRAIN, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_LUNGE] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 80, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_FIRE_LASH] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 80, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_POWER_TRIP] = - { - .effect = EFFECT_STORED_POWER, - .power = 20, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BURN_UP] = - { - .effect = EFFECT_BURN_UP, - .power = 130, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .thawsUser = TRUE, - }, - - [MOVE_SPEED_SWAP] = - { - .effect = EFFECT_SPEED_SWAP, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresSubstitute = TRUE, - }, - - [MOVE_SMART_STRIKE] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_PURIFY] = - { - .effect = EFFECT_PURIFY, - .power = 0, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .magicCoatAffected = TRUE, - }, - - [MOVE_REVELATION_DANCE] = - { - .effect = EFFECT_REVELATION_DANCE, - .power = 90, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .danceMove = TRUE, - }, - - [MOVE_CORE_ENFORCER] = - { - .effect = EFFECT_CORE_ENFORCER, - .power = 100, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_TROP_KICK] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 70, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_INSTRUCT] = - { - .effect = EFFECT_INSTRUCT, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_BEAK_BLAST] = - { - .effect = EFFECT_BEAK_BLAST, - .power = 100, - .type = TYPE_FLYING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = -3, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - .ballisticMove = TRUE, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_CLANGING_SCALES] = - { - .effect = EFFECT_ATTACKER_DEFENSE_DOWN_HIT, - .power = 110, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .soundMove = TRUE, - }, - - [MOVE_DRAGON_HAMMER] = - { - .effect = EFFECT_HIT, - .power = 90, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_BRUTAL_SWING] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_AURORA_VEIL] = - { - .effect = EFFECT_AURORA_VEIL, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_SHELL_TRAP] = - { - .effect = EFFECT_SHELL_TRAP, - .power = 150, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = -3, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_FLEUR_CANNON] = - { - .effect = EFFECT_OVERHEAT, - .power = 130, - .type = TYPE_FAIRY, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_PSYCHIC_FANGS] = - { - .effect = EFFECT_BRICK_BREAK, - .power = 85, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_STOMPING_TANTRUM] = - { - .effect = EFFECT_STOMPING_TANTRUM, - .power = 75, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_SHADOW_BONE] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 85, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ACCELEROCK] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_LIQUIDATION] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 85, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PRISMATIC_LASER] = - { - .effect = EFFECT_RECHARGE, - .power = 160, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SPECTRAL_THIEF] = - { - .effect = EFFECT_SPECTRAL_THIEF, - .power = 90, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = TRUE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SUNSTEEL_STRIKE] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresTargetAbility = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_8, - }, - - [MOVE_MOONGEIST_BEAM] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresTargetAbility = TRUE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_8, - }, - - [MOVE_TEARFUL_LOOK] = - { - .effect = EFFECT_NOBLE_ROAR, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .ignoresProtect = TRUE, - .magicCoatAffected = TRUE, - }, - - [MOVE_ZING_ZAP] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 80, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_NATURES_MADNESS] = - { - .effect = EFFECT_SUPER_FANG, - .power = 1, - .type = TYPE_FAIRY, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_8, - }, - - [MOVE_MULTI_ATTACK] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 120, - #else - .power = 90, - #endif - .effect = EFFECT_CHANGE_TYPE_ON_ITEM, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = HOLD_EFFECT_MEMORY, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MIND_BLOWN] = - { - .effect = EFFECT_MIND_BLOWN, - .power = 150, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_PLASMA_FISTS] = - { - .effect = EFFECT_PLASMA_FISTS, - .power = 100, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_PHOTON_GEYSER] = - { - .effect = EFFECT_PHOTON_GEYSER, - .power = 100, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresTargetAbility = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ZIPPY_ZAP] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 80, - .effect = EFFECT_EVASION_UP_HIT, - .pp = 10, - .sheerForceBoost = TRUE, - #else - .effect = EFFECT_ALWAYS_CRIT, - .power = 50, - .pp = 15, - #endif - .type = TYPE_ELECTRIC, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 2, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_SPLISHY_SPLASH] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 90, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_FLOATY_FALL] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 90, - .type = TYPE_FLYING, - .accuracy = 95, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .gravityBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_PIKA_PAPOW] = - { - .effect = EFFECT_RETURN, - .power = 1, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_BOUNCY_BUBBLE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 60, - .pp = 20, - .argument = 100, // restores 100% HP instead of 50% HP - #else - .power = 90, - .pp = 15, - #endif - .effect = EFFECT_ABSORB, - .type = TYPE_WATER, - .accuracy = 100, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, - }, - - [MOVE_BUZZY_BUZZ] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 60, - .pp = 20, - #else - .power = 90, - .pp = 15, - #endif - .effect = EFFECT_PARALYZE_HIT, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_SIZZLY_SLIDE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 60, - .pp = 20, - #else - .power = 90, - .pp = 15, - #endif - .effect = EFFECT_BURN_HIT, - .type = TYPE_FIRE, - .accuracy = 100, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .thawsUser = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GLITZY_GLOW] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 80, - .accuracy = 95, - #else - .power = 90, - .accuracy = 100, - #endif - .effect = EFFECT_GLITZY_GLOW, - .type = TYPE_PSYCHIC, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_BADDY_BAD] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 80, - .accuracy = 95, - #else - .power = 90, - .accuracy = 100, - #endif - .effect = EFFECT_BADDY_BAD, - .type = TYPE_DARK, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_SAPPY_SEED] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 100, - .accuracy = 90, - .pp = 10, - #else - .power = 90, - .accuracy = 100, - .pp = 15, - #endif - .effect = EFFECT_SAPPY_SEED, - .type = TYPE_GRASS, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .magicCoatAffected = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_FREEZY_FROST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 100, - .accuracy = 90, - .pp = 10, - #else - .power = 90, - .accuracy = 100, - .pp = 15, - #endif - .effect = EFFECT_FREEZY_FROST, - .type = TYPE_ICE, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_SPARKLY_SWIRL] = - { - #if B_UPDATED_MOVE_DATA >= GEN_8 - .power = 120, - .accuracy = 85, - .pp = 5, - #else - .power = 90, - .accuracy = 100, - .pp = 15, - #endif - .effect = EFFECT_SPARKLY_SWIRL, - .type = TYPE_FAIRY, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_VEEVEE_VOLLEY] = - { - .effect = EFFECT_RETURN, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_DOUBLE_IRON_BASH] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 60, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - .strikeCount = 2, - .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS < GEN_8, - .metronomeBanned = TRUE, - }, - - [MOVE_DYNAMAX_CANNON] = - { - .effect = EFFECT_DYNAMAX_DOUBLE_DMG, - .power = 100, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .mimicBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .parentalBondBanned = TRUE, - }, - - [MOVE_SNIPE_SHOT] = - { - .effect = EFFECT_SNIPE_SHOT, - .power = 80, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - }, - - [MOVE_JAW_LOCK] = - { - .effect = EFFECT_JAW_LOCK, - .power = 80, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_STUFF_CHEEKS] = - { - .effect = EFFECT_STUFF_CHEEKS, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_NO_RETREAT] = - { - .effect = EFFECT_NO_RETREAT, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TAR_SHOT] = - { - .effect = EFFECT_TAR_SHOT, - .power = 0, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .magicCoatAffected = TRUE, - }, - - [MOVE_MAGIC_POWDER] = - { - .effect = EFFECT_SOAK, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .argument = TYPE_PSYCHIC, - .zMoveEffect = Z_EFFECT_NONE, - .magicCoatAffected = TRUE, - .powderMove = TRUE, - }, - - [MOVE_DRAGON_DARTS] = - { - .effect = EFFECT_HIT, // TODO: EFFECT_DRAGON_DARTS - .power = 50, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .strikeCount = 2, - .parentalBondBanned = TRUE, - }, - - [MOVE_TEATIME] = - { - .effect = EFFECT_TEATIME, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_OCTOLOCK] = - { - .effect = EFFECT_OCTOLOCK, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_BOLT_BEAK] = - { - .effect = EFFECT_BOLT_BEAK, - .power = 85, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_FISHIOUS_REND] = - { - .effect = EFFECT_BOLT_BEAK, - .power = 85, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .bitingMove = TRUE, - }, - - [MOVE_COURT_CHANGE] = - { - .effect = EFFECT_COURT_CHANGE, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - }, - - [MOVE_CLANGOROUS_SOUL] = - { - .effect = EFFECT_CLANGOROUS_SOUL, - .power = 0, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .soundMove = TRUE, - .danceMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_BODY_PRESS] = - { - .effect = EFFECT_BODY_PRESS, - .power = 80, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_DECORATE] = - { - .effect = EFFECT_DECORATE, - .power = 0, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_DRUM_BEATING] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SNAP_TRAP] = - { - .effect = EFFECT_TRAP, - .power = 35, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_PYRO_BALL] = - { - .effect = EFFECT_BURN_HIT, - .power = 120, - .type = TYPE_FIRE, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - .ballisticMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_BEHEMOTH_BLADE] = - { - .effect = EFFECT_DYNAMAX_DOUBLE_DMG, - .power = 100, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .mimicBanned = TRUE, - .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_BEHEMOTH_BASH] = - { - .effect = EFFECT_DYNAMAX_DOUBLE_DMG, - .power = 100, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .mimicBanned = TRUE, - .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_AURA_WHEEL] = - { - .effect = EFFECT_AURA_WHEEL, - .power = 110, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_BREAKING_SWIPE] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 60, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_BRANCH_POKE] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 70, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_OVERDRIVE] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - .metronomeBanned = TRUE, - }, - - [MOVE_APPLE_ACID] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GRAV_APPLE] = - { - .effect = EFFECT_GRAV_APPLE, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SPIRIT_BREAK] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .power = 75, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_STRANGE_STEAM] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 90, - .type = TYPE_FAIRY, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_LIFE_DEW] = - { - .effect = EFFECT_JUNGLE_HEALING, - .power = 0, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_OBSTRUCT] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_FALSE_SURRENDER] = - { - .effect = EFFECT_HIT, - .power = 80, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_METEOR_ASSAULT] = - { - .effect = EFFECT_RECHARGE, - .power = 150, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_ETERNABEAM] = - { - .effect = EFFECT_RECHARGE, - .power = 160, - .type = TYPE_DRAGON, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_STEEL_BEAM] = - { - .effect = EFFECT_MAX_HP_50_RECOIL, - .power = 140, - .type = TYPE_STEEL, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_EXPANDING_FORCE] = - { - .effect = EFFECT_EXPANDING_FORCE, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_STEEL_ROLLER] = - { - .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, - .power = 130, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .argument = ARG_TRY_REMOVE_TERRAIN_FAIL, // Remove a field terrain if there is one and hit, otherwise fail. - .skyBattleBanned = TRUE, - }, - - [MOVE_SCALE_SHOT] = - { - .effect = EFFECT_MULTI_HIT, - .power = 25, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .argument = MOVE_EFFECT_SCALE_SHOT, - }, - - [MOVE_METEOR_BEAM] = - { - .effect = EFFECT_METEOR_BEAM, - .power = 120, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .twoTurnMove = TRUE, - .instructBanned = TRUE, - }, - - [MOVE_SHELL_SIDE_ARM] = - { - .effect = EFFECT_SHELL_SIDE_ARM, - .power = 90, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_MISTY_EXPLOSION] = - { - .effect = EFFECT_EXPLOSION, - .power = 100, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_GRASSY_GLIDE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 55, - #else - .power = 70, - #endif - .effect = EFFECT_GRASSY_GLIDE, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_RISING_VOLTAGE] = - { - .effect = EFFECT_RISING_VOLTAGE, - .power = 70, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_TERRAIN_PULSE] = - { - .effect = EFFECT_TERRAIN_PULSE, - .power = 50, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .pulseMove = TRUE, - }, - - [MOVE_SKITTER_SMACK] = - { - .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, - .power = 70, - .type = TYPE_BUG, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BURNING_JEALOUSY] = - { - .effect = EFFECT_BURN_HIT, - .power = 70, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_LASH_OUT] = - { - .effect = EFFECT_LASH_OUT, - .power = 75, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_POLTERGEIST] = - { - .effect = EFFECT_POLTERGEIST, - .power = 110, - .type = TYPE_GHOST, - .accuracy = 90, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_CORROSIVE_GAS] = - { - .effect = EFFECT_CORROSIVE_GAS, - .power = 0, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 40, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .magicCoatAffected = TRUE, - }, - - [MOVE_COACHING] = - { - .effect = EFFECT_COACHING, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_FLIP_TURN] = - { - .effect = EFFECT_HIT_ESCAPE, - .power = 60, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_TRIPLE_AXEL] = - { - .effect = EFFECT_TRIPLE_KICK, - .power = 20, - .type = TYPE_ICE, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 3, - }, - - [MOVE_DUAL_WINGBEAT] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_FLYING, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 2, - }, - - [MOVE_SCORCHING_SANDS] = - { - .effect = EFFECT_BURN_HIT, - .power = 70, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .thawsUser = TRUE, - }, - - [MOVE_JUNGLE_HEALING] = - { - .effect = EFFECT_JUNGLE_HEALING, - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .ignoresSubstitute = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_WICKED_BLOW] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 75, - #else - .power = 80, - #endif - .effect = EFFECT_ALWAYS_CRIT, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SURGING_STRIKES] = - { - .effect = EFFECT_ALWAYS_CRIT, - .power = 25, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .strikeCount = 3, - .metronomeBanned = TRUE, - }, - - [MOVE_THUNDER_CAGE] = - { - .effect = EFFECT_TRAP, - .power = 80, - .type = TYPE_ELECTRIC, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_DRAGON_ENERGY] = - { - .effect = EFFECT_ERUPTION, - .power = 150, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_FREEZING_GLARE] = - { - .power = 90, - #if B_USE_FROSTBITE == TRUE - .effect = EFFECT_FROSTBITE_HIT, - #else - .effect = EFFECT_FREEZE_HIT, - #endif - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_FIERY_WRATH] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 90, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_THUNDEROUS_KICK] = - { - .effect = EFFECT_DEFENSE_DOWN_HIT, - .power = 90, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GLACIAL_LANCE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 120, - #else - .power = 130, - #endif - .effect = EFFECT_HIT, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_ASTRAL_BARRAGE] = - { - .effect = EFFECT_HIT, - .power = 120, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_EERIE_SPELL] = - { - .effect = EFFECT_EERIE_SPELL, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_DIRE_CLAW] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 80, - #else - .power = 60, - #endif - .effect = EFFECT_DIRE_CLAW, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_PSYSHIELD_BASH] = - { - .effect = EFFECT_DEFENSE_UP_HIT, - .power = 70, - .type = TYPE_PSYCHIC, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_POWER_SHIFT] = - { - .effect = EFFECT_POWER_TRICK, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, -}, - - [MOVE_STONE_AXE] = - { - .effect = EFFECT_HIT_SET_ENTRY_HAZARD, - .power = 65, - .type = TYPE_ROCK, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .argument = MOVE_EFFECT_STEALTH_ROCK, - .sheerForceBoost = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_SPRINGTIDE_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 100, - #else - .power = 95, - #endif - .effect = EFFECT_ATTACK_DOWN_HIT, - .type = TYPE_FAIRY, - .accuracy = 80, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_MYSTICAL_POWER] = - { - .effect = EFFECT_SPECIAL_ATTACK_UP_HIT, - .power = 70, - .type = TYPE_PSYCHIC, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_RAGING_FURY] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 120, - #else - .power = 90, - #endif - .effect = EFFECT_RAMPAGE, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_RANDOM, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_WAVE_CRASH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 120, - #else - .power = 75, - #endif - .effect = EFFECT_RECOIL_33, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_CHLOROBLAST] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 150, - #else - .power = 120, - #endif - .effect = EFFECT_MAX_HP_50_RECOIL, - .type = TYPE_GRASS, - .accuracy = 95, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_MOUNTAIN_GALE] = - { - .effect = EFFECT_FLINCH_HIT, - .power = 100, - .type = TYPE_ICE, - .accuracy = 85, - .pp = 5, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_VICTORY_DANCE] = - { - .effect = EFFECT_VICTORY_DANCE, - .power = 0, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .danceMove = TRUE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_HEADLONG_RUSH] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 120, - #else - .power = 100, - #endif - .effect = EFFECT_CLOSE_COMBAT, - .type = TYPE_GROUND, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - }, - - [MOVE_BARB_BARRAGE] = - { - .effect = EFFECT_BARB_BARRAGE, - .power = 60, - .type = TYPE_POISON, - .accuracy = 100, - #if B_UPDATED_MOVE_DATA >= GEN_9 - .pp = 10, - #else - .pp = 15, - #endif - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ESPER_WING] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 80, - .accuracy = 100, - #else - .power = 75, - .accuracy = 90, - #endif - .effect = EFFECT_SPEED_UP_HIT, - .type = TYPE_PSYCHIC, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_BITTER_MALICE] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 75, - #else - .power = 60, - #endif - .effect = EFFECT_ATTACK_DOWN_HIT, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_SHELTER] = - { - .effect = EFFECT_DEFENSE_UP_2, - .power = 0, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TRIPLE_ARROWS] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 90, - .pp = 10, - #else - .power = 50, - .pp = 15, - #endif - .effect = EFFECT_TRIPLE_ARROWS, - .type = TYPE_FIGHTING, - .accuracy = 100, - .secondaryEffectChance = 100, // 50% Defense down, 30% Flinch. Can be modified in 'SetMoveEffect' - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_INFERNAL_PARADE] = - { - .effect = EFFECT_INFERNAL_PARADE, - .power = 60, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_CEASELESS_EDGE] = - { - .effect = EFFECT_HIT_SET_ENTRY_HAZARD, - .power = 65, - .type = TYPE_DARK, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .argument = MOVE_EFFECT_SPIKES, - .sheerForceBoost = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_BLEAKWIND_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 100, - .pp = 10, - #else - .power = 95, - .pp = 5, - #endif - .effect = EFFECT_SPEED_DOWN_HIT, - .type = TYPE_FLYING, - .accuracy = 80, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_WILDBOLT_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 100, - .pp = 10, - #else - .power = 95, - .pp = 5, - #endif - .effect = EFFECT_PARALYZE_HIT, - .type = TYPE_ELECTRIC, - .accuracy = 80, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_SANDSEAR_STORM] = - { - #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 100, - .pp = 10, - #else - .power = 95, - .pp = 5, - #endif - .effect = EFFECT_BURN_HIT, - .type = TYPE_GROUND, - .accuracy = 80, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - }, - - [MOVE_LUNAR_BLESSING] = - { - .effect = EFFECT_JUNGLE_HEALING, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .healBlockBanned = TRUE, - }, - - [MOVE_TAKE_HEART] = - { - .effect = EFFECT_TAKE_HEART, - .power = 0, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - }, - - [MOVE_TERA_BLAST] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_TERA_BLAST, - .power = 80, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, // Only since it isn't implemented yet - .forcePressure = TRUE, - }, - - [MOVE_SILK_TRAP] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_AXE_KICK] = - { - .effect = EFFECT_AXE_KICK, - .power = 120, - .type = TYPE_FIGHTING, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - }, - - [MOVE_LAST_RESPECTS] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_LAST_RESPECTS - .power = 50, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, // Only since it isn't implemented yet - }, - - [MOVE_LUMINA_CRASH] = - { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - }, - - [MOVE_ORDER_UP] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_ORDER_UP - .power = 80, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_JET_PUNCH] = - { - .effect = EFFECT_HIT, - .power = 60, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SPICY_EXTRACT] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SPICY_EXTRACT - .power = 0, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .magicCoatAffected = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SPIN_OUT] = - { - .effect = EFFECT_SPIN_OUT, - .power = 100, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_POPULATION_BOMB] = - { - .effect = EFFECT_POPULATION_BOMB, - .power = 20, - .type = TYPE_NORMAL, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - .metronomeBanned = TRUE, - .strikeCount = 10, - }, - - [MOVE_ICE_SPINNER] = - { - .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, - .power = 80, - .type = TYPE_ICE, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_GLAIVE_RUSH] = - { - .effect = EFFECT_GLAIVE_RUSH, - .power = 120, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, // Only since it isn't implemented yet - }, - - [MOVE_REVIVAL_BLESSING] = - { - .effect = EFFECT_REVIVAL_BLESSING, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .healBlockBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_SALT_CURE] = - { - .effect = EFFECT_SALT_CURE, - .power = 40, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_TRIPLE_DIVE] = - { - .effect = EFFECT_HIT, - .power = 30, - .type = TYPE_WATER, - .accuracy = 95, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .strikeCount = 3, - }, - - [MOVE_MORTAL_SPIN] = - { - .effect = EFFECT_MORTAL_SPIN, - .power = 30, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .makesContact = TRUE, - }, - - [MOVE_DOODLE] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_DOODLE - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_FILLET_AWAY] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_FILLET_AWAY - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RECOVER_HP, - .snatchAffected = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_KOWTOW_CLEAVE] = - { - .effect = EFFECT_HIT, - .power = 85, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_FLOWER_TRICK] = - { - .effect = EFFECT_ALWAYS_CRIT, - .power = 70, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_TORCH_SONG] = - { - .effect = EFFECT_SP_ATTACK_UP_HIT, - .power = 80, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - - [MOVE_AQUA_STEP] = - { - .effect = EFFECT_SPEED_UP_HIT, - .power = 80, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .sheerForceBoost = TRUE, - .danceMove = TRUE, - }, - - [MOVE_RAGING_BULL] = - { - .effect = EFFECT_RAGING_BULL, - .power = 90, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_MAKE_IT_RAIN] = - { - .effect = EFFECT_MAKE_IT_RAIN, - .power = 120, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_RUINATION] = - { - .effect = EFFECT_SUPER_FANG, - .power = 1, - .type = TYPE_DARK, - .accuracy = 90, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_COLLISION_COURSE] = - { - .effect = EFFECT_COLLISION_COURSE, - .power = 100, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ELECTRO_DRIFT] = - { - .effect = EFFECT_COLLISION_COURSE, - .power = 100, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SHED_TAIL] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHED_TAIL - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_RESET_STATS, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_CHILLY_RECEPTION] = - { - .effect = EFFECT_CHILLY_RECEPTION, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_TIDY_UP] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_TIDY_UP - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_SNOWSCAPE] = - { - .effect = EFFECT_SNOWSCAPE, - .power = 0, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_SPD_UP_1, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_POUNCE] = - { - .effect = EFFECT_SPEED_DOWN_HIT, - .power = 50, - .type = TYPE_BUG, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_TRAILBLAZE] = - { - .effect = EFFECT_SPEED_UP_HIT, - .power = 50, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_CHILLING_WATER] = - { - .effect = EFFECT_ATTACK_DOWN_HIT, - .power = 50, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_HYPER_DRILL] = - { - .effect = EFFECT_HIT, - .power = 100, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .ignoresProtect = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_TWIN_BEAM] = - { - .effect = EFFECT_HIT, - .power = 40, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .strikeCount = 2, - .metronomeBanned = TRUE, - }, - - [MOVE_RAGE_FIST] = - { - .effect = EFFECT_RAGE_FIST, - .power = 50, - .type = TYPE_GHOST, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .punchingMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ARMOR_CANNON] = - { - .effect = EFFECT_CLOSE_COMBAT, - .power = 120, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .metronomeBanned = TRUE, - }, - - [MOVE_BITTER_BLADE] = - { - .effect = EFFECT_ABSORB, - .power = 90, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - .healBlockBanned = TRUE, - }, - - [MOVE_DOUBLE_SHOCK] = - { - .effect = EFFECT_DOUBLE_SHOCK, - .power = 120, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_GIGATON_HAMMER] = - { - .effect = EFFECT_HIT, - .power = 160, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .cantUseTwice = TRUE, - }, - - [MOVE_COMEUPPANCE] = - { - .effect = EFFECT_METAL_BURST, - .power = 1, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_DEPENDS, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .meFirstBanned = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_AQUA_CUTTER] = - { - .effect = EFFECT_HIT, - .power = 70, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 20, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .slicingMove = TRUE, - .highCritRatio = TRUE, - }, - - [MOVE_BLAZING_TORQUE] = - { - .effect = EFFECT_BURN_HIT, - .power = 80, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_WICKED_TORQUE] = - { - .effect = EFFECT_SLEEP_HIT, - .power = 80, - .type = TYPE_DARK, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 10, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_NOXIOUS_TORQUE] = - { - .effect = EFFECT_POISON_HIT, - .power = 100, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_COMBAT_TORQUE] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 100, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_MAGICAL_TORQUE] = - { - .effect = EFFECT_CONFUSE_HIT, - .power = 100, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .sheerForceBoost = TRUE, - .mirrorMoveBanned = TRUE, - .meFirstBanned = TRUE, - .mimicBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, - .encoreBanned = TRUE, - .assistBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_PSYBLADE] = - { - .effect = EFFECT_PSYBLADE, - .power = 80, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_HYDRO_STEAM] = - { - .effect = EFFECT_HYDRO_STEAM, - .power = 80, - .type = TYPE_WATER, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .thawsUser = TRUE, - }, - - [MOVE_BLOOD_MOON] = - { - .effect = EFFECT_HIT, - .power = 140, - .type = TYPE_NORMAL, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .cantUseTwice = TRUE, - }, - - [MOVE_MATCHA_GOTCHA] = - { - .effect = EFFECT_MATCHA_GOTCHA, - .power = 80, - .type = TYPE_GRASS, - .accuracy = 90, - .pp = 15, - .secondaryEffectChance = 20, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .thawsUser = TRUE, - .metronomeBanned = TRUE, - .healBlockBanned = TRUE, - }, - - [MOVE_SYRUP_BOMB] = - { - .effect = EFFECT_SYRUP_BOMB, - .power = 60, - .type = TYPE_GRASS, - .accuracy = 85, - .pp = 10, - .secondaryEffectChance = 100, // syrup bomb volatile status - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .ballisticMove = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_IVY_CUDGEL] = - { - .effect = EFFECT_CHANGE_TYPE_ON_ITEM, - .power = 100, - .type = TYPE_GRASS, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = HOLD_EFFECT_MASK, - .zMoveEffect = Z_EFFECT_NONE, - .highCritRatio = TRUE, - .metronomeBanned = TRUE, - }, - - [MOVE_ELECTRO_SHOT] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_ELECTRO_SHOT - .power = 130, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - //.sheerForceBoost = TRUE, (uncomment when effect is implemented, otherwise it breaks the Sheer Force Test) - }, - - [MOVE_TERA_STARSTORM] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_TERA_STARSTORM - .power = 120, - .type = TYPE_NORMAL, // Stellar type if used by Terapagos-Stellar - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, // MOVE_TARGET_BOTH if used by Terapagos-Stellar - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .assistBanned = TRUE, - .copycatBanned = TRUE, - .mimicBanned = TRUE, - .sketchBanned = (B_SKETCH_BANS >= GEN_9), - }, - - [MOVE_FICKLE_BEAM] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_FICKLE_BEAM - .power = 80, - .type = TYPE_DRAGON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_BURNING_BULWARK] = - { - .effect = EFFECT_PLACEHOLDER, // EFFECT_PROTECT with effects - .power = 0, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_DEF_UP_1, - .protectionMove = TRUE, - .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, - .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .assistBanned = TRUE, - }, - - [MOVE_THUNDERCLAP] = - { - .effect = EFFECT_SUCKER_PUNCH, - .power = 70, - .type = TYPE_ELECTRIC, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 1, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_MIGHTY_CLEAVE] = - { - .effect = EFFECT_FEINT, - .power = 95, - .type = TYPE_ROCK, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - .slicingMove = TRUE, - }, - - [MOVE_TACHYON_CUTTER] = - { - .effect = EFFECT_HIT, - .power = 50, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .strikeCount = 2, - .slicingMove = TRUE, - }, - - [MOVE_HARD_PRESS] = - { - .effect = EFFECT_WRING_OUT, - .power = 1, - .type = TYPE_STEEL, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_DRAGON_CHEER] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_DRAGON_CHEER - .power = 0, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALLY, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = Z_EFFECT_NONE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_ALLURING_VOICE] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_ALLURING_VOICE - .power = 80, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .soundMove = TRUE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_TEMPER_FLARE] = - { - .effect = EFFECT_STOMPING_TANTRUM, - .power = 75, - .type = TYPE_FIRE, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_SUPERCELL_SLAM] = - { - .effect = EFFECT_RECOIL_IF_MISS, - .power = 100, - .type = TYPE_ELECTRIC, - .accuracy = 95, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_PSYCHIC_NOISE] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_PSYCHIC_NOISE - .power = 75, - .type = TYPE_PSYCHIC, - .accuracy = 100, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .soundMove = TRUE, - .ignoresSubstitute = TRUE, - }, - - [MOVE_UPPER_HAND] = - { - .effect = EFFECT_PLACEHOLDER, //EFFECT_UPPER_HAND - .power = 65, - .type = TYPE_FIGHTING, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 3, - .split = SPLIT_PHYSICAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, - }, - - [MOVE_MALIGNANT_CHAIN] = - { - .effect = EFFECT_POISON_FANG, - .power = 100, - .type = TYPE_POISON, - .accuracy = 100, - .pp = 5, - .secondaryEffectChance = 50, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - }, - - [MOVE_SYLPH_SONG] = - { - .effect = EFFECT_SLEEP_HIT, - .power = 100, - .type = TYPE_FAIRY, - .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 30, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = Z_EFFECT_NONE, - .makesContact = FALSE, - .sheerForceBoost = TRUE, - .windMove = TRUE, - .soundMove = TRUE, - }, - - // Z-Moves - [MOVE_BREAKNECK_BLITZ] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, //determined from move type - .zMoveEffect = 0, - }, - [MOVE_ALL_OUT_PUMMELING] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_SUPERSONIC_SKYSTRIKE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_ACID_DOWNPOUR] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_TECTONIC_RAGE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_GROUND, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - [MOVE_CONTINENTAL_CRUSH] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_SAVAGE_SPIN_OUT] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_NEVER_ENDING_NIGHTMARE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_CORKSCREW_CRASH] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_INFERNO_OVERDRIVE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_HYDRO_VORTEX] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_BLOOM_DOOM] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_GIGAVOLT_HAVOC] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_SHATTERED_PSYCHE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_SUBZERO_SLAMMER] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_DEVASTATING_DRAKE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_BLACK_HOLE_ECLIPSE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_TWINKLE_TACKLE] = - { - .effect = EFFECT_HIT, - .power = 1, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_CATASTROPIKA] = - { - .effect = EFFECT_HIT, - .power = 210, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_10000000_VOLT_THUNDERBOLT] = - { - .effect = EFFECT_HIT, - .power = 195, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - .highCritRatio = TRUE, - }, - [MOVE_STOKED_SPARKSURFER] = - { - .effect = EFFECT_PARALYZE_HIT, - .power = 175, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - }, - [MOVE_EXTREME_EVOBOOST] = - { - .effect = EFFECT_EXTREME_EVOBOOST, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 0, - .split = SPLIT_STATUS, - .zMoveEffect = 0, - }, - [MOVE_PULVERIZING_PANCAKE] = - { - .effect = EFFECT_HIT, - .power = 210, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_GENESIS_SUPERNOVA] = - { - .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, - .power = 185, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. - .zMoveEffect = 0, - }, - [MOVE_SINISTER_ARROW_RAID] = - { - .effect = EFFECT_HIT, - .power = 180, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_MALICIOUS_MOONSAULT] = - { - .effect = EFFECT_HIT, - .power = 180, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_OCEANIC_OPERETTA] = - { - .effect = EFFECT_HIT, - .power = 195, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - }, - [MOVE_SPLINTERED_STORMSHARDS] = - { - .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, - .power = 190, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. - .zMoveEffect = 0, - }, - [MOVE_LETS_SNUGGLE_FOREVER] = - { - .effect = EFFECT_HIT, - .power = 190, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_CLANGOROUS_SOULBLAZE] = - { - .effect = EFFECT_ALL_STATS_UP_HIT, - .power = 185, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_BOTH, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - .soundMove = TRUE, - .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, - }, - [MOVE_GUARDIAN_OF_ALOLA] = - { - .effect = EFFECT_SUPER_FANG, - .power = 1, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - }, - [MOVE_SEARING_SUNRAZE_SMASH] = - { - .effect = EFFECT_HIT, - .power = 200, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - [MOVE_MENACING_MOONRAZE_MAELSTROM] = - { - .effect = EFFECT_HIT, - .power = 200, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - }, - [MOVE_LIGHT_THAT_BURNS_THE_SKY] = - { - .effect = EFFECT_HIT, - .power = 200, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_SPECIAL, - .zMoveEffect = 0, - }, - [MOVE_SOUL_STEALING_7_STAR_STRIKE] = - { - .effect = EFFECT_HIT, - .power = 195, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 1, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .zMoveEffect = 0, - }, - - [MOVE_MAX_GUARD] = - { - .effect = EFFECT_PROTECT, - .power = 0, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, - .priority = 4, - .split = SPLIT_STATUS, - .protectionMove = TRUE, - }, - - [MOVE_MAX_FLARE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_SUN, - }, - - [MOVE_MAX_FLUTTERBY] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_SP_ATK, - }, - - [MOVE_MAX_LIGHTNING] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_ELECTRIC_TERRAIN, - }, - - [MOVE_MAX_STRIKE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_SPEED, - }, - - [MOVE_MAX_KNUCKLE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, - }, - - [MOVE_MAX_PHANTASM] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_DEFENSE, - }, - - [MOVE_MAX_HAILSTORM] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_HAIL, - }, - - [MOVE_MAX_OOZE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, - }, - - [MOVE_MAX_GEYSER] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAIN, - }, - - [MOVE_MAX_AIRSTREAM] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAISE_TEAM_SPEED, - }, - - [MOVE_MAX_STARFALL] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_MISTY_TERRAIN, - }, - - [MOVE_MAX_WYRMWIND] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_ATTACK, - }, - - [MOVE_MAX_MINDSTORM] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_PSYCHIC_TERRAIN, - }, - - [MOVE_MAX_ROCKFALL] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_SANDSTORM, - }, - - [MOVE_MAX_QUAKE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_GROUND, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, - .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - }, - - [MOVE_MAX_DARKNESS] = - { - .effect = EFFECT_MAX_MOVE, - .power = 1, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_SP_DEF, - }, - - [MOVE_MAX_OVERGROWTH] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_GRASSY_TERRAIN, - }, - - [MOVE_MAX_STEELSPIKE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, - }, - - [MOVE_G_MAX_VINE_LASH] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_VINE_LASH, - }, - - [MOVE_G_MAX_WILDFIRE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_WILDFIRE, - }, - - [MOVE_G_MAX_CANNONADE] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_CANNONADE, - }, - - [MOVE_G_MAX_BEFUDDLE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_BUG, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_EFFECT_SPORE_FOES, - }, - - [MOVE_G_MAX_VOLT_CRASH] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_PARALYZE_FOES, - }, - - [MOVE_G_MAX_GOLD_RUSH] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, - }, - - [MOVE_G_MAX_CHI_STRIKE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FIGHTING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_CRIT_PLUS, - }, - - [MOVE_G_MAX_TERROR] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GHOST, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_MEAN_LOOK, - }, - - [MOVE_G_MAX_FOAM_BURST] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, - }, - - [MOVE_G_MAX_RESONANCE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_ICE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_AURORA_VEIL, - }, - - [MOVE_G_MAX_CUDDLE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_INFATUATE_FOES, - }, - - [MOVE_G_MAX_REPLENISH] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_NORMAL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_RECYCLE_BERRIES, - }, - - [MOVE_G_MAX_MALODOR] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_POISON, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_POISON_FOES, - }, - - [MOVE_G_MAX_MELTDOWN] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_TORMENT_FOES, - }, - - [MOVE_G_MAX_DRUM_SOLO] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO - .ignoresTargetAbility = TRUE, - }, - - [MOVE_G_MAX_FIREBALL] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO - .ignoresTargetAbility = TRUE, - }, - - [MOVE_G_MAX_HYDROSNIPE] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO - .ignoresTargetAbility = TRUE, - }, - - [MOVE_G_MAX_WIND_RAGE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FLYING, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_DEFOG, - }, - - [MOVE_G_MAX_GRAVITAS] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_PSYCHIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_GRAVITY, - }, - - [MOVE_G_MAX_STONESURGE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_STEALTH_ROCK, - }, - - [MOVE_G_MAX_VOLCALITH] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_ROCK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_VOLCALITH, - }, - - [MOVE_G_MAX_TARTNESS] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, - }, - - [MOVE_G_MAX_SWEETNESS] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GRASS, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_AROMATHERAPY, - }, - - [MOVE_G_MAX_SANDBLAST] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_GROUND, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_SANDBLAST_FOES, - }, - - [MOVE_G_MAX_STUN_SHOCK] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_ELECTRIC, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_POISON_PARALYZE_FOES, - }, - - [MOVE_G_MAX_CENTIFERNO] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FIRE, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_FIRE_SPIN_FOES, - }, - - [MOVE_G_MAX_SMITE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_CONFUSE_FOES, - }, - - - [MOVE_G_MAX_SNOOZE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_YAWN_FOE, - }, - - [MOVE_G_MAX_FINALE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_FAIRY, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_HEAL_TEAM, - }, - - [MOVE_G_MAX_STEELSURGE] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_STEEL, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_STEELSURGE, - }, - - [MOVE_G_MAX_DEPLETION] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_DRAGON, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_SPITE, - }, - - [MOVE_G_MAX_ONE_BLOW] = - { - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_DARK, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO - }, - - [MOVE_G_MAX_RAPID_FLOW] = - { //ANIM TODO - .effect = EFFECT_MAX_MOVE, - .power = 10, - .type = TYPE_WATER, - .accuracy = 0, - .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, - .priority = 0, - .split = SPLIT_PHYSICAL, - .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO - }, - -}; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 8df9aed98c18..aacb27d06884 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -13026,19 +13026,19 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS - // const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/footprint.1bpp"); #endif //P_FOOTPRINTS - // const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/footprint.1bpp"); diff --git a/src/data/items.h b/src/data/items.h index ba2f7d029aa4..433c6c4325b0 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -578,7 +578,7 @@ const struct Item gItemsInfo[] = [ITEM_HYPER_POTION] = { .name = _("Hyper Potion"), - .price = (I_PRICE >= GEN_2 || I_PRICE <= GEN_6) ? 1200 : 1500, + .price = (I_PRICE >= GEN_2 && I_PRICE <= GEN_6) ? 1200 : 1500, .holdEffectParam = 120, .description = COMPOUND_STRING( "Restores the HP of\n" diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 35672537a6da..3865f0b0c6a4 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -14126,6 +14126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = B_UPDATED_MOVE_DATA >= GEN_7 ? MOVE_EFFECT_DEF_PLUS_2: MOVE_EFFECT_DEF_PLUS_1, + .self = TRUE, .chance = 50, }), .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, @@ -15017,7 +15018,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FLORAL_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FloralHealng", "Floral Healng"), + .name = HANDLE_EXPANDED_MOVE_NAME("FloralHealng", "Floral Healing"), .description = COMPOUND_STRING( "Restores an ally's HP.\n" "Heals more on grass."), @@ -17350,7 +17351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Deals better of physical and\n" "special damage. May poison."), - .effect = EFFECT_SHELL_SIDE_ARM, + .effect = EFFECT_HIT, // The effect is hardcoded to the move since SetShellSideArmCategory() can't be used with anything but Shell Side Arm because of the BP requirement .power = 90, .type = TYPE_POISON, .accuracy = 100, @@ -17678,7 +17679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_JUNGLE_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("JungleHealng", "Jungle Healng"), + .name = HANDLE_EXPANDED_MOVE_NAME("JungleHealng", "Jungle Healing"), .description = COMPOUND_STRING( "Heals HP and status of\n" "itself and allies in battle."), @@ -18233,7 +18234,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .name = HANDLE_EXPANDED_MOVE_NAME("BitterMalice", "Bitter Malice"), .description = COMPOUND_STRING( "A spine-chilling resentment.\n" - "May lower the foe's Attack."), + "Lowers the foe's Attack."), .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_9 ? 75 : 60, .type = TYPE_GHOST, @@ -20164,7 +20165,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = }, [MOVE_OCEANIC_OPERETTA] = { - .name = COMPOUND_STRING("Oceaning Operetta"), + .name = COMPOUND_STRING("Oceanic Operetta"), .description = sNullDescription, .effect = EFFECT_HIT, .power = 195, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 0b8eb485a9d4..84b7a86088db 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -624,7 +624,7 @@ static const struct FormChange sGiratinaFormChangeTable[] = { #if P_FAMILY_SHAYMIN static const struct FormChange sShayminFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, + {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY, STATUS1_FREEZE | STATUS1_FROSTBITE}, {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN_LAND}, {FORM_CHANGE_TIME_OF_DAY, SPECIES_SHAYMIN_LAND, NIGHT}, {FORM_CHANGE_STATUS, SPECIES_SHAYMIN_LAND, STATUS1_FREEZE | STATUS1_FROSTBITE}, diff --git a/src/data/pokemon/level_up_learnsets/gen_9.h b/src/data/pokemon/level_up_learnsets/gen_9.h index 21b0a96112c5..0db97107a22a 100644 --- a/src/data/pokemon/level_up_learnsets/gen_9.h +++ b/src/data/pokemon/level_up_learnsets/gen_9.h @@ -12801,7 +12801,6 @@ static const struct LevelUpMove sBasculinWhiteStripedLevelUpLearnset[] = { }; static const struct LevelUpMove sBasculegionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DIRE_CLAW), LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 164edebbc9f4..c9bfa7a24643 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -31,11 +31,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .categoryName = _("Unknown"), .height = 0, .weight = 0, - .description = COMPOUND_STRING( - "This is a newly discovered Pokémon.\n" - "It is currently under investigation.\n" - "No detailed information is available\n" - "at this time."), + .description = gFallbackPokedexText, .pokemonScale = 256, .pokemonOffset = 0, .trainerScale = 256, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 0fd37cc07728..f6114b214315 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -1411,7 +1411,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_NO_GUARD }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgey"), .cryId = CRY_PIDGEY, @@ -1464,7 +1468,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_NO_GUARD }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeotto"), .cryId = CRY_PIDGEOTTO, @@ -1528,7 +1536,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_NO_GUARD }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeot"), .cryId = CRY_PIDGEOT, @@ -3530,7 +3542,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidoran♀"), .cryId = CRY_NIDORAN_F, @@ -3584,7 +3600,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidorina"), .cryId = CRY_NIDORINA, @@ -3645,7 +3665,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_FILTER, ABILITY_RIVALRY, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidoqueen"), .cryId = CRY_NIDOQUEEN, @@ -3697,7 +3721,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidoran♂"), .cryId = CRY_NIDORAN_M, @@ -3750,7 +3778,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidorino"), .cryId = CRY_NIDORINO, @@ -3811,7 +3843,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidoking"), .cryId = CRY_NIDOKING, @@ -3874,7 +3910,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Cleffa"), @@ -3930,7 +3970,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Clefairy"), @@ -3993,7 +4037,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_UNAWARE }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_UNAWARE }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Clefable"), @@ -4281,7 +4329,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Igglybuff"), @@ -4337,7 +4389,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Jigglypuff"), @@ -4400,7 +4456,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_THICK_FAT, ABILITY_COMPETITIVE, ABILITY_FUR_COAT }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRISK }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Wigglytuff"), @@ -4879,7 +4939,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_HEAL, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Paras"), .cryId = CRY_PARAS, @@ -4936,7 +5000,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_HEAL, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Parasect"), .cryId = CRY_PARASECT, @@ -4991,7 +5059,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_COMPOUND_EYES, ABILITY_TINTED_LENS, ABILITY_RUN_AWAY }, + #else + .abilities = { ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_RUN_AWAY }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Venonat"), .cryId = CRY_VENONAT, @@ -5047,7 +5119,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHIELD_DUST, ABILITY_TINTED_LENS, ABILITY_WONDER_SKIN }, + #else + .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Venomoth"), .cryId = CRY_VENOMOTH, @@ -5341,7 +5417,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Meowth"), .cryId = CRY_MEOWTH, @@ -5398,7 +5478,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_LIMBER, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Persian"), .cryId = CRY_PERSIAN, @@ -5840,7 +5924,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT }, + #else + .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE, ABILITY_DEFIANT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Mankey"), .cryId = CRY_MANKEY, @@ -5894,7 +5982,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT }, + #else + .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE, ABILITY_DEFIANT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Primeape"), .cryId = CRY_PRIMEAPE, @@ -6724,7 +6816,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machop"), .cryId = CRY_MACHOP, @@ -6778,7 +6874,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, .speciesName = _("Machoke"), @@ -6842,7 +6942,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machamp"), .cryId = CRY_MACHAMP, @@ -6898,7 +7002,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machamp"), .cryId = CRY_MACHAMP, @@ -8687,7 +8795,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_ICE_BODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Seel"), .cryId = CRY_SEEL, @@ -8740,7 +8852,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_ICE_BODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Dewgong"), .cryId = CRY_DEWGONG, @@ -9024,7 +9140,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT }, + #else + .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_OVERCOAT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Shellder"), .cryId = CRY_SHELLDER, @@ -9080,7 +9200,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT }, + #else + .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_OVERCOAT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Cloyster"), .cryId = CRY_CLOYSTER, @@ -9602,7 +9726,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Drowzee"), .cryId = CRY_DROWZEE, @@ -9656,7 +9784,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_IMMUNITY, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Hypno"), .cryId = CRY_HYPNO, @@ -10507,7 +10639,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_VITAL_SPIRIT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Tyrogue"), .cryId = CRY_TYROGUE, @@ -10563,7 +10699,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_LIMBER, ABILITY_RECKLESS, ABILITY_UNBURDEN }, + #else + .abilities = { ABILITY_LIMBER, ABILITY_NONE, ABILITY_UNBURDEN }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmonlee"), .cryId = CRY_HITMONLEE, @@ -10615,7 +10755,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_IRON_FIST, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmonchan"), .cryId = CRY_HITMONCHAN, @@ -10668,7 +10812,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmontop"), .cryId = CRY_HITMONTOP, @@ -11364,7 +11512,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_REGENERATOR }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Tangela"), .cryId = CRY_TANGELA, @@ -11589,7 +11741,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Horsea"), .cryId = CRY_HORSEA, @@ -11644,7 +11800,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_SNIPER, ABILITY_DAMP }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Seadra"), .cryId = CRY_SEADRA, @@ -11708,7 +11868,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_DRIZZLE, ABILITY_MEGA_LAUNCHER }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Kingdra"), .cryId = CRY_KINGDRA, @@ -11997,7 +12161,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN }, + #else + .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_TECHNICIAN }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Mime Jr."), .cryId = CRY_MIME_JR, @@ -12219,7 +12387,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_SWARM, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Scyther"), .cryId = CRY_SCYTHER, @@ -12278,7 +12450,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL }, + #else + .abilities = { ABILITY_SWARM, ABILITY_NONE, ABILITY_LIGHT_METAL }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Scizor"), .cryId = CRY_SCIZOR, @@ -12450,7 +12626,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Smoochum"), .cryId = CRY_SMOOCHUM, @@ -12505,7 +12685,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_DRY_SKIN }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_DRY_SKIN }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Jynx"), .cryId = CRY_JYNX, @@ -12911,7 +13095,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE }, + #else + .abilities = { ABILITY_HYPER_CUTTER, ABILITY_NONE, ABILITY_MOXIE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pinsir"), .cryId = CRY_PINSIR, @@ -13026,7 +13214,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Tauros"), .cryId = CRY_TAUROS, @@ -13596,7 +13788,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION }, + #else + .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_ANTICIPATION }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Eevee"), .cryId = CRY_EEVEE, @@ -14201,7 +14397,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC }, + #else + .abilities = { ABILITY_TRACE, ABILITY_NONE, ABILITY_ANALYTIC }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Porygon"), .cryId = CRY_PORYGON, @@ -14256,7 +14456,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC }, + #else + .abilities = { ABILITY_TRACE, ABILITY_NONE, ABILITY_ANALYTIC }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Porygon2"), .cryId = CRY_PORYGON2, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index bf68a691191a..a9b503c0d9dc 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -1901,7 +1901,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), - .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED }, + .abilities = { ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_WATER_ABSORB }, .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Sudowoodo"), .cryId = CRY_SUDOWOODO, @@ -1959,7 +1959,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Hoppip"), .cryId = CRY_HOPPIP, @@ -2013,7 +2017,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Skiploom"), .cryId = CRY_SKIPLOOM, @@ -2075,7 +2083,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Jumpluff"), .cryId = CRY_JUMPLUFF, @@ -2247,7 +2259,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_STORM_DRAIN, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Sunkern"), .cryId = CRY_SUNKERN, @@ -2300,7 +2316,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_STORM_DRAIN, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Sunflora"), .cryId = CRY_SUNFLORA, @@ -2692,7 +2712,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_PRANKSTER }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Murkrow"), .cryId = CRY_MURKROW, @@ -3691,7 +3715,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Granbull"), .cryId = CRY_GRANBULL, @@ -3925,7 +3953,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_STURDY, ABILITY_GLUTTONY, ABILITY_CONTRARY }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_CONTRARY }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Shuckle"), .cryId = CRY_SHUCKLE, @@ -4330,12 +4362,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .catchRate = 120, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 66 : 124, .evYield_Attack = 1, + .itemCommon = ITEM_HONEY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_QUICK_FEET, ABILITY_HONEY_GATHER }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_HONEY_GATHER }, + #endif .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, .speciesName = _("Teddiursa"), @@ -4389,7 +4426,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_QUICK_FEET, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Ursaring"), .cryId = CRY_URSARING, @@ -4594,11 +4635,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = [SPECIES_MAGCARGO] = { - .baseHP = P_UPDATED_STATS >= GEN_7 ? 60 : 50, - .baseAttack = 50, + .baseHP = P_UPDATED_STATS >= GEN_7 ? 80 : 50, + .baseAttack = 40, .baseDefense = 120, - .baseSpeed = 30, - .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 90 : 80, + .baseSpeed = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 100 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_FIRE, TYPE_ROCK), .catchRate = 75, @@ -4615,7 +4656,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), - .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR }, + .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WATER_ABSORB }, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, .speciesName = _("Magcargo"), @@ -4670,7 +4711,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Swinub"), .cryId = CRY_SWINUB, @@ -4724,7 +4769,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Piloswine"), .cryId = CRY_PILOSWINE, @@ -5021,7 +5070,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_HUSTLE, ABILITY_SNIPER, ABILITY_MOODY }, + #else + .abilities = { ABILITY_HUSTLE, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Remoraid"), .cryId = CRY_REMORAID, @@ -5075,7 +5128,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SUCTION_CUPS, ABILITY_COLOR_CHANGE, ABILITY_MOODY }, + #else + .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Octillery"), .cryId = CRY_OCTILLERY, @@ -5640,7 +5697,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_SAP_SIPPER }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Stantler"), .cryId = CRY_STANTLER, @@ -5750,7 +5811,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_TECHNICIAN, ABILITY_MOODY }, + #else + .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Smeargle"), .cryId = CRY_SMEARGLE, @@ -5807,7 +5872,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_SCRAPPY, ABILITY_SAP_SIPPER }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_SAP_SIPPER }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Miltank"), .cryId = CRY_MILTANK, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 0c8367ae5ab4..624eb0a9cb49 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -713,7 +713,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_RUN_AWAY, ABILITY_QUICK_FEET, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Poochyena"), .cryId = CRY_POOCHYENA, @@ -766,7 +770,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_MOXIE }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Mightyena"), .cryId = CRY_MIGHTYENA, @@ -830,7 +838,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Zigzagoon"), .cryId = CRY_ZIGZAGOON, @@ -886,7 +898,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Linoone"), .cryId = CRY_LINOONE, @@ -1886,7 +1902,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_KEEN_EYE, ABILITY_HYDRATION, ABILITY_RAIN_DISH }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Wingull"), .cryId = CRY_WINGULL, @@ -1948,6 +1968,9 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), .abilities = { ABILITY_KEEN_EYE, ABILITY_DRIZZLE, ABILITY_RAIN_DISH }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Pelipper"), .cryId = CRY_PELIPPER, @@ -2478,7 +2501,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Shroomish"), .cryId = CRY_SHROOMISH, @@ -2533,7 +2560,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_TECHNICIAN }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_TECHNICIAN }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Breloom"), .cryId = CRY_BRELOOM, @@ -3307,7 +3338,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + + #if P_UPDATED_ABILITIES >= GEN_4 + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN }, + #else .abilities = { ABILITY_MISTY_SURGE, ABILITY_STAKEOUT, ABILITY_FUR_COAT }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Skitty"), .cryId = CRY_SKITTY, @@ -3367,7 +3403,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN }, + #else .abilities = { ABILITY_MISTY_SURGE, ABILITY_STAKEOUT, ABILITY_FUR_COAT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Delcatty"), .cryId = CRY_DELCATTY, @@ -3423,7 +3463,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 + .abilities = { ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER }, + #else .abilities = { ABILITY_TRICKSTER, ABILITY_TRICKSTER, ABILITY_TRICKSTER }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Sableye"), .cryId = CRY_SABLEYE, @@ -4227,7 +4271,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PLUS, ABILITY_NONE, ABILITY_LIGHTNING_ROD }, + #else + .abilities = { ABILITY_PLUS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Plusle"), .cryId = CRY_PLUSLE, @@ -4282,7 +4330,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_MINUS, ABILITY_NONE, ABILITY_VOLT_ABSORB }, + #else + .abilities = { ABILITY_MINUS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Minun"), .cryId = CRY_MINUN, @@ -4402,7 +4454,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_TINTED_LENS, ABILITY_PRANKSTER }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Illumise"), .cryId = CRY_ILLUMISE, @@ -5039,7 +5095,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SIMPLE, ABILITY_OWN_TEMPO }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_OWN_TEMPO }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Numel"), .cryId = CRY_NUMEL, @@ -5097,7 +5157,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT }, + #else + .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_NONE, ABILITY_ANGER_POINT }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Camerupt"), .cryId = CRY_CAMERUPT, @@ -5216,7 +5280,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_WHITE_SMOKE, ABILITY_DROUGHT, ABILITY_SHELL_ARMOR }, + #else + .abilities = { ABILITY_WHITE_SMOKE, ABILITY_NONE, ABILITY_SHELL_ARMOR }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Torkoal"), .cryId = CRY_TORKOAL, @@ -5378,7 +5446,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OWN_TEMPO, ABILITY_TANGLED_FEET, ABILITY_CONTRARY }, + #else + .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_CONTRARY }, + #endif .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, .speciesName = _("Spinda"), @@ -6133,7 +6205,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Barboach"), .cryId = CRY_BARBOACH, @@ -6187,7 +6263,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_UNAWARE, ABILITY_SAP_SIPPER, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Whiscash"), .cryId = CRY_WHISCASH, @@ -6699,7 +6779,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS, ABILITY_ADAPTABILITY }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_ADAPTABILITY }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Feebas"), .cryId = CRY_FEEBAS, @@ -6754,7 +6838,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_MARVEL_SCALE, ABILITY_COMPETITIVE, ABILITY_CUTE_CHARM }, + #else + .abilities = { ABILITY_MARVEL_SCALE, ABILITY_NONE, ABILITY_CUTE_CHARM }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Milotic"), .cryId = CRY_MILOTIC, @@ -7043,7 +7131,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_COLOR_CHANGE, ABILITY_TRACE, ABILITY_PROTEAN }, + #else + .abilities = { ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Kecleon"), .cryId = CRY_KECLEON, @@ -7099,7 +7191,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_CURSED_BODY }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Shuppet"), .cryId = CRY_SHUPPET, @@ -7154,7 +7250,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_PRANKSTER, ABILITY_CURSED_BODY }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_CURSED_BODY }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Banette"), .cryId = CRY_BANETTE, @@ -7270,7 +7370,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_LEVITATE, ABILITY_REGENERATOR, ABILITY_FRISK }, + #else + .abilities = { ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Duskull"), .cryId = CRY_DUSKULL, @@ -7326,7 +7430,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PRESSURE, ABILITY_REGENERATOR, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusclops"), .cryId = CRY_DUSCLOPS, @@ -7390,7 +7498,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PRESSURE, ABILITY_REGENERATOR, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusknoir"), .cryId = CRY_DUSKNOIR, @@ -7446,7 +7558,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_HARVEST }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Tropius"), .cryId = CRY_TROPIUS, @@ -7619,7 +7735,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_JUSTIFIED }, + #endif .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, .speciesName = _("Absol"), @@ -7736,7 +7856,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY }, + #else + .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Snorunt"), .cryId = CRY_SNORUNT, @@ -7791,7 +7915,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY }, + #else + .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Glalie"), .cryId = CRY_GLALIE, @@ -7960,7 +8088,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SNOW_WARNING, ABILITY_REGENERATOR, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Spheal"), .cryId = CRY_SPHEAL, @@ -8014,7 +8146,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), - .abilities = { ABILITY_SNOW_WARNING, ABILITY_REGENERATOR, ABILITY_THICK_FAT }, + #if P_UPDATED_ABILITIES >= GEN_4 + .abilities = { ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Sealeo"), .cryId = CRY_SEALEO, @@ -8073,7 +8209,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SNOW_WARNING, ABILITY_REGENERATOR, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Walrein"), .cryId = CRY_WALREIN, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index 57860ffeee3c..a8795d698e5d 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -539,7 +539,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RECKLESS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Starly"), .cryId = CRY_STARLY, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 6efb3b0eaaad..0a2e19a52009 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -1710,7 +1710,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Roggenrola"), .cryId = CRY_ROGGENROLA, @@ -1766,7 +1770,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Boldore"), .cryId = CRY_BOLDORE, @@ -1828,7 +1836,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_SAND_STREAM, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Gigalith"), .cryId = CRY_GIGALITH, @@ -5335,7 +5347,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothita"), .cryId = CRY_GOTHITA, @@ -5388,7 +5404,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothorita"), .cryId = CRY_GOTHORITA, @@ -5441,7 +5461,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothitelle"), .cryId = CRY_GOTHITELLE, @@ -5767,7 +5791,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanillite"), .cryId = CRY_VANILLITE, @@ -5821,7 +5849,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanillish"), .cryId = CRY_VANILLISH, @@ -5875,7 +5907,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_WARNING, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanilluxe"), .cryId = CRY_VANILLUXE, @@ -6973,7 +7009,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_ANTICIPATION }, + #else + .abilities = { ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Ferrothorn"), .cryId = CRY_FERROTHORN, @@ -7800,7 +7840,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Cubchoo"), .cryId = CRY_CUBCHOO, @@ -7853,7 +7897,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_SWIFT_SWIM }, + #else + .abilities = { ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SWIFT_SWIM }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Beartic"), .cryId = CRY_BEARTIC, @@ -8503,6 +8551,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .catchRate = 45, .expYield = 172, .evYield_Attack = 2, + .itemRare = ITEM_LEADERS_CREST, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index fef7f30e2e54..629ad59aa9db 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -1197,7 +1197,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .catchRate = 45, .expYield = 167, .evYield_SpAttack = 2, - .itemRare = ITEM_HONEY, + .itemRare = ITEM_RED_NECTAR, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -1252,7 +1252,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .catchRate = 45, .expYield = 167, .evYield_SpAttack = 2, - .itemRare = ITEM_HONEY, + .itemRare = ITEM_YELLOW_NECTAR, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -1307,7 +1307,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .catchRate = 45, .expYield = 167, .evYield_SpAttack = 2, - .itemRare = ITEM_HONEY, + .itemRare = ITEM_PINK_NECTAR, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -1362,7 +1362,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .catchRate = 45, .expYield = 167, .evYield_SpAttack = 2, - .itemRare = ITEM_HONEY, + .itemRare = ITEM_PURPLE_NECTAR, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -3617,6 +3617,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .baseSpAttack = 60, \ .baseSpDefense = 100, \ .weight = 400, \ + .description = gMiniorMeteorPokedexText, \ .frontPic = gMonFrontPic_MiniorMeteor, \ .frontPicSize = MON_COORDS_SIZE(48, 40), \ .frontPicYOffset = 14, \ diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index cb005553118e..8110770ffd43 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -900,7 +900,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Pawmi, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 0, + .backPicYOffset = 7, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Pawmi, .shinyPalette = gMonShinyPalette_Pawmi, @@ -953,7 +953,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Pawmo, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 4, + .backPicYOffset = 6, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Pawmo, .shinyPalette = gMonShinyPalette_Pawmo, @@ -2529,6 +2529,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 190, .expYield = 67, .evYield_SpDefense = 1, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -2582,6 +2584,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 90, .expYield = 180, .evYield_SpDefense = 2, + .itemCommon = ITEM_TINY_MUSHROOM, + .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, @@ -4354,6 +4358,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4409,6 +4414,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 50, .expYield = 285, .evYield_HP = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4464,6 +4470,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 50, .expYield = 285, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4521,6 +4528,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 1, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4577,6 +4585,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4631,6 +4640,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4686,6 +4696,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_Defense = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4741,6 +4752,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 50, .expYield = 285, .evYield_Speed = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4796,6 +4808,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 50, .expYield = 285, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4851,6 +4864,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4907,6 +4921,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -4963,6 +4978,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 30, .expYield = 285, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -5561,6 +5577,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -5617,6 +5634,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -5783,6 +5801,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 5, .expYield = 295, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -5837,6 +5856,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 5, .expYield = 295, .evYield_Attack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -6129,12 +6149,12 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .trainerOffset = 0, .frontPic = gMonFrontPic_Okidogi, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 1, + .frontPicYOffset = 2, .frontAnimFrames = sAnims_Okidogi, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Okidogi, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 16, + .backPicYOffset = 12, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Okidogi, .shinyPalette = gMonShinyPalette_Okidogi, @@ -6335,6 +6355,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_Defense = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -6390,6 +6411,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -6445,6 +6467,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_Speed = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -6499,6 +6522,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .catchRate = 10, .expYield = 295, .evYield_SpAttack = 3, + .itemRare = ITEM_BOOSTER_ENERGY, .genderRatio = MON_GENDERLESS, .eggCycles = 50, .friendship = 0, @@ -6576,17 +6600,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosNormal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPic = gMonFrontPic_TerapagosNormal, + .frontPicSize = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_TerapagosNormal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosNormal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosNormal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosNormal, - //.shinyPalette = gMonShinyPalette_TerapagosNormal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosNormal, + .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, FOOTPRINT(TerapagosNormal) @@ -6632,17 +6657,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosTerastal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 0, + .frontPic = gMonFrontPic_TerapagosTerastal, + .frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPicYOffset = 8, .frontAnimFrames = sAnims_TerapagosTerastal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosTerastal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosTerastal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosTerastal, - //.shinyPalette = gMonShinyPalette_TerapagosTerastal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosTerastal, + .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, FOOTPRINT(TerapagosTerastal) diff --git a/src/data/pokemon/species_info/shared_dex_text.h b/src/data/pokemon/species_info/shared_dex_text.h index dbfef82d7479..0c591bd811bc 100644 --- a/src/data/pokemon/species_info/shared_dex_text.h +++ b/src/data/pokemon/species_info/shared_dex_text.h @@ -1,3 +1,10 @@ +// fallback +const u8 gFallbackPokedexText[] = _( + "This is a newly discovered Pokémon.\n" + "It is currently under investigation.\n" + "No detailed information is available\n" + "at this time."); + // Gen 1 families const u8 gRaticateAlolanPokedexText[] = _( "It forms a group of Rattata, which it \n" diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index ab8707ac5dd9..d802521afe57 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -10120,8 +10120,20 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(IronCrown); #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosNormal); -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosTerastal); +static const union AnimCmd sAnim_TerapagosNormal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +static const union AnimCmd sAnim_TerapagosTerastal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosStellar); #endif //P_FAMILY_TERAPAGOS diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h deleted file mode 100644 index 1b20a896ac30..000000000000 --- a/src/data/text/abilities.h +++ /dev/null @@ -1,1242 +0,0 @@ -static const u8 sNoneDescription[] = _("No special ability."); -static const u8 sStenchDescription[] = _("May cause a foe to flinch."); -static const u8 sDrizzleDescription[] = _("Summons rain in battle."); -static const u8 sSpeedBoostDescription[] = _("Gradually boosts Speed."); -static const u8 sBattleArmorDescription[] = _("Blocks critical hits."); -static const u8 sSturdyDescription[] = _("Negates 1-hit KO attacks."); -static const u8 sDampDescription[] = _("Prevents self-destruction."); -static const u8 sLimberDescription[] = _("Prevents paralysis."); -static const u8 sSandVeilDescription[] = _("Ups evasion in a sandstorm."); -static const u8 sStaticDescription[] = _("Paralyzes on contact."); -static const u8 sVoltAbsorbDescription[] = _("Turns electricity into HP."); -static const u8 sWaterAbsorbDescription[] = _("Changes water into HP."); -static const u8 sObliviousDescription[] = _("Prevents attraction."); -static const u8 sCloudNineDescription[] = _("Negates weather effects."); -static const u8 sCompoundEyesDescription[] = _("Raises accuracy."); -static const u8 sInsomniaDescription[] = _("Prevents sleep."); -static const u8 sColorChangeDescription[] = _("Changes type to foe's move."); -static const u8 sImmunityDescription[] = _("Prevents poisoning."); -static const u8 sFlashFireDescription[] = _("Powers up if hit by fire."); -static const u8 sShieldDustDescription[] = _("Prevents added effects."); -static const u8 sOwnTempoDescription[] = _("Prevents confusion."); -static const u8 sSuctionCupsDescription[] = _("Firmly anchors the body."); -static const u8 sIntimidateDescription[] = _("Lowers the foe's Attack."); -static const u8 sShadowTagDescription[] = _("Prevents the foe's escape."); -static const u8 sRoughSkinDescription[] = _("Hurts to touch."); -static const u8 sWonderGuardDescription[] = _("“Supereffective” hits."); -static const u8 sLevitateDescription[] = _("Not hit by Ground attacks."); -static const u8 sEffectSporeDescription[] = _("Leaves spores on contact."); -static const u8 sSynchronizeDescription[] = _("Passes on status problems."); -static const u8 sClearBodyDescription[] = _("Prevents ability reduction."); -static const u8 sNaturalCureDescription[] = _("Heals upon switching out."); -static const u8 sLightningRodDescription[] = _("Draws electrical moves."); -static const u8 sSereneGraceDescription[] = _("Promotes added effects."); -static const u8 sSwiftSwimDescription[] = _("Raises Speed in rain."); -static const u8 sChlorophyllDescription[] = _("Raises Speed in sunshine."); -static const u8 sIlluminateDescription[] = _("Encounter rate increases."); -static const u8 sTraceDescription[] = _("Copies special ability."); -static const u8 sHugePowerDescription[] = _("Raises Attack."); -static const u8 sPoisonPointDescription[] = _("Poisons foe on contact."); -static const u8 sInnerFocusDescription[] = _("Prevents flinching."); -static const u8 sMagmaArmorDescription[] = _("Prevents freezing."); -static const u8 sWaterVeilDescription[] = _("Prevents burns."); -static const u8 sMagnetPullDescription[] = _("Traps Steel-type Pokémon."); -static const u8 sSoundproofDescription[] = _("Avoids sound-based moves."); -static const u8 sRainDishDescription[] = _("Slight HP recovery in rain."); -static const u8 sSandStreamDescription[] = _("Summons a sandstorm."); -static const u8 sPressureDescription[] = _("Raises foe's PP usage."); -static const u8 sThickFatDescription[] = _("Heat-and-cold protection."); -static const u8 sEarlyBirdDescription[] = _("Awakens quickly from sleep."); -static const u8 sFlameBodyDescription[] = _("Burns the foe on contact."); -static const u8 sRunAwayDescription[] = _("Makes escaping easier."); -static const u8 sKeenEyeDescription[] = _("Prevents loss of accuracy."); -static const u8 sHyperCutterDescription[] = _("Prevents Attack reduction."); -static const u8 sPickupDescription[] = _("May pick up items."); -static const u8 sTruantDescription[] = _("Moves only every two turns."); -static const u8 sHustleDescription[] = _("Trades accuracy for power."); -static const u8 sCuteCharmDescription[] = _("Infatuates on contact."); -static const u8 sPlusDescription[] = _("Powers up with Minus."); -static const u8 sMinusDescription[] = _("Powers up with Plus."); -static const u8 sForecastDescription[] = _("Changes with the weather."); -static const u8 sStickyHoldDescription[] = _("Prevents item theft."); -static const u8 sShedSkinDescription[] = _("Heals the body by shedding."); -static const u8 sGutsDescription[] = _("Ups Attack if suffering."); -static const u8 sMarvelScaleDescription[] = _("Ups Defense if suffering."); -static const u8 sLiquidOozeDescription[] = _("Draining causes injury."); -static const u8 sOvergrowDescription[] = _("Ups Grass moves in a pinch."); -static const u8 sBlazeDescription[] = _("Ups Fire moves in a pinch."); -static const u8 sTorrentDescription[] = _("Ups Water moves in a pinch."); -static const u8 sSwarmDescription[] = _("Ups Bug moves in a pinch."); -static const u8 sRockHeadDescription[] = _("Prevents recoil damage."); -static const u8 sDroughtDescription[] = _("Summons sunlight in battle."); -static const u8 sArenaTrapDescription[] = _("Prevents fleeing."); -static const u8 sVitalSpiritDescription[] = _("Prevents sleep."); -static const u8 sWhiteSmokeDescription[] = _("Prevents ability reduction."); -static const u8 sPurePowerDescription[] = _("Raises Attack."); -static const u8 sShellArmorDescription[] = _("Blocks critical hits."); -static const u8 sAirLockDescription[] = _("Negates weather effects."); -static const u8 sTangledFeetDescription[] = _("Ups evasion if confused."); -static const u8 sMotorDriveDescription[] = _("Electricity raises Speed."); -static const u8 sRivalryDescription[] = _("Powers up against rivals."); -static const u8 sSteadfastDescription[] = _("Flinching raises Speed."); -static const u8 sSnowCloakDescription[] = _("Ups evasion in Hail or Snow."); -static const u8 sGluttonyDescription[] = _("Eats Berries early."); -static const u8 sAngerPointDescription[] = _("Critical hits raise Attack."); -static const u8 sUnburdenDescription[] = _("Using a hold item ups Speed."); -static const u8 sHeatproofDescription[] = _("Heat and burn protection."); -static const u8 sSimpleDescription[] = _("Prone to wild stat changes."); -static const u8 sDrySkinDescription[] = _("Prefers moisture to heat."); -static const u8 sDownloadDescription[] = _("Adjusts power favorably."); -static const u8 sIronFistDescription[] = _("Boosts punching moves."); -static const u8 sPoisonHealDescription[] = _("Restores HP if poisoned."); -static const u8 sAdaptabilityDescription[] = _("Boosts same type attacks."); -static const u8 sSkillLinkDescription[] = _("Multi-hit moves hit 5 times."); -static const u8 sHydrationDescription[] = _("Cures status in rain."); -static const u8 sSolarPowerDescription[] = _("Powers up in sunshine."); -static const u8 sQuickFeetDescription[] = _("Ups Speed if suffering."); -static const u8 sNormalizeDescription[] = _("Moves become Normal-type."); -static const u8 sSniperDescription[] = _("Boosts critical hits."); -static const u8 sMagicGuardDescription[] = _("Only damaged by attacks."); -static const u8 sNoGuardDescription[] = _("Ensures that all moves hit."); -static const u8 sStallDescription[] = _("Always moves last."); -static const u8 sTechnicianDescription[] = _("Boosts weaker moves."); -static const u8 sLeafGuardDescription[] = _("Blocks status in sunshine."); -static const u8 sKlutzDescription[] = _("Can't use hold items."); -static const u8 sMoldBreakerDescription[] = _("Moves hit through abilities."); -static const u8 sSuperLuckDescription[] = _("Critical hits land often."); -static const u8 sAftermathDescription[] = _("Fainting damages the foe."); -static const u8 sAnticipationDescription[] = _("Senses dangerous moves."); -static const u8 sForewarnDescription[] = _("Determines a foe's move."); -static const u8 sUnawareDescription[] = _("Ignores stat changes."); -static const u8 sTintedLensDescription[] = _("Ups “not very effective”."); -static const u8 sFilterDescription[] = _("Weakens “supereffective”."); -static const u8 sSlowStartDescription[] = _("Takes a while to get going."); -static const u8 sScrappyDescription[] = _("Hits Ghost-type Pokémon."); -static const u8 sStormDrainDescription[] = _("Draws in Water moves."); -static const u8 sIceBodyDescription[] = _("HP recovery in Hail or Snow."); -#if B_SNOW_WARNING < GEN_9 -static const u8 sSnowWarningDescription[] = _("Summons a Hailstorm."); -#elif B_SNOW_WARNING >= GEN_9 -static const u8 sSnowWarningDescription[] = _("Summons a Snowstorm."); -#endif -static const u8 sHoneyGatherDescription[] = _("May gather Honey."); -static const u8 sFriskDescription[] = _("Checks a foe's item."); -static const u8 sRecklessDescription[] = _("Boosts moves with recoil."); -static const u8 sMultitypeDescription[] = _("Changes type to its Plate."); -static const u8 sFlowerGiftDescription[] = _("Allies power up in sunshine."); -static const u8 sBadDreamsDescription[] = _("Damages sleeping Pokémon."); -static const u8 sPickpocketDescription[] = _("Steals the foe's held item."); -static const u8 sSheerForceDescription[] = _("Trades effects for power."); -static const u8 sContraryDescription[] = _("Inverts stat changes."); -static const u8 sUnnerveDescription[] = _("Foes can't eat Berries."); -static const u8 sDefiantDescription[] = _("Lowered stats up Attack."); -static const u8 sDefeatistDescription[] = _("Gives up at half HP."); -static const u8 sCursedBodyDescription[] = _("Disables moves on contact."); -static const u8 sHealerDescription[] = _("Heals partner Pokémon."); -static const u8 sFriendGuardDescription[] = _("Lowers damage to partner."); -static const u8 sWeakArmorDescription[] = _("Its stats change when hit."); -static const u8 sHeavyMetalDescription[] = _("Doubles weight."); -static const u8 sLightMetalDescription[] = _("Halves weight."); -static const u8 sMultiscaleDescription[] = _("Halves damage at full HP."); -static const u8 sToxicBoostDescription[] = _("Ups Attack if poisoned."); -static const u8 sFlareBoostDescription[] = _("Ups Sp. Atk if burned."); -static const u8 sHarvestDescription[] = _("May recycle a used Berry."); -static const u8 sTelepathyDescription[] = _("Can't be damaged by an ally."); -static const u8 sMoodyDescription[] = _("Stats change gradually."); -static const u8 sOvercoatDescription[] = _("Blocks weather and powder."); -static const u8 sBigPecksDescription[] = _("Prevents Defense loss."); -static const u8 sSandRushDescription[] = _("Ups Speed in a sandstorm."); -static const u8 sWonderSkinDescription[] = _("May avoid status problems."); -static const u8 sAnalyticDescription[] = _("Moving last boosts power."); -static const u8 sIllusionDescription[] = _("Appears as a partner."); -static const u8 sImposterDescription[] = _("Transforms into the foe."); -static const u8 sInfiltratorDescription[] = _("Passes through barriers."); -static const u8 sMummyDescription[] = _("Spreads with contact."); -static const u8 sMoxieDescription[] = _("KOs raise Attack."); -static const u8 sJustifiedDescription[] = _("Dark hits raise Attack."); -static const u8 sRattledDescription[] = _("Raises Speed when scared."); -static const u8 sMagicBounceDescription[] = _("Reflects status moves."); -static const u8 sSapSipperDescription[] = _("Grass increases Attack."); -static const u8 sPranksterDescription[] = _("Status moves go first."); -static const u8 sSandForceDescription[] = _("Powers up in a sandstorm."); -static const u8 sZenModeDescription[] = _("Transforms at half HP."); -static const u8 sVictoryStarDescription[] = _("Raises party accuracy."); -static const u8 sAromaVeilDescription[] = _("Prevents limiting of moves."); -static const u8 sFlowerVeilDescription[] = _("Protects Grass-types."); -static const u8 sCheekPouchDescription[] = _("Eating Berries restores HP."); -static const u8 sProteanDescription[] = _("Changes type to used move."); -static const u8 sFurCoatDescription[] = _("Raises Defense."); -static const u8 sBulletproofDescription[] = _("Avoids some projectiles."); -static const u8 sCompetitiveDescription[] = _("Lowered stats up Sp. Atk."); -static const u8 sStrongJawDescription[] = _("Boosts biting moves."); -static const u8 sRefrigerateDescription[] = _("Normal moves become Ice."); -static const u8 sSweetVeilDescription[] = _("Prevents party from sleep."); -static const u8 sStanceChangeDescription[] = _("Transforms as it battles."); -static const u8 sGaleWingsDescription[] = _("Flying moves go first."); -static const u8 sMegaLauncherDescription[] = _("Boosts pulse moves."); -static const u8 sGrassPeltDescription[] = _("Ups Defense in grass."); -static const u8 sSymbiosisDescription[] = _("Passes its item to an ally."); -static const u8 sToughClawsDescription[] = _("Boosts contact moves."); -static const u8 sPixilateDescription[] = _("Normal moves become Fairy."); -static const u8 sGooeyDescription[] = _("Lowers Speed on contact."); -static const u8 sAerilateDescription[] = _("Normal moves become Flying."); -static const u8 sParentalBondDescription[] = _("Moves hit twice."); -static const u8 sDarkAuraDescription[] = _("Boosts Dark moves."); -static const u8 sFairyAuraDescription[] = _("Boosts Fairy moves."); -static const u8 sAuraBreakDescription[] = _("Reverse aura abilities."); -static const u8 sPrimordialSeaDescription[] = _("Summons heavy rain."); -static const u8 sDesolateLandDescription[] = _("Summons intense sunlight."); -static const u8 sDeltaStreamDescription[] = _("Summons strong winds."); -static const u8 sStaminaDescription[] = _("Boosts Defense when hit."); -static const u8 sWimpOutDescription[] = _("Flees at half HP."); -static const u8 sWaterCompactionDescription[] = _("Water boosts Defense."); -static const u8 sMercilessDescription[] = _("Criticals poisoned foes."); -static const u8 sShieldsDownDescription[] = _("Shell breaks at half HP."); -static const u8 sStakeoutDescription[] = _("Stronger as foes switch in."); -static const u8 sWaterBubbleDescription[] = _("Guards from fire and burns."); -static const u8 sSteelworkerDescription[] = _("Powers up Steel moves."); -static const u8 sBerserkDescription[] = _("Boosts Sp. Atk at low HP."); -static const u8 sSlushRushDescription[] = _("Raises Speed in Hail or Snow."); -static const u8 sLongReachDescription[] = _("Never makes contact."); -static const u8 sLiquidVoiceDescription[] = _("Makes sound moves Water."); -static const u8 sTriageDescription[] = _("Healing moves go first."); -static const u8 sGalvanizeDescription[] = _("Normal moves turn Electric."); -static const u8 sSurgeSurferDescription[] = _("Faster on electricity."); -static const u8 sSchoolingDescription[] = _("Forms a school when strong."); -static const u8 sDisguiseDescription[] = _("Decoy protects it once."); -static const u8 sBattleBondDescription[] = _("Changes form after a KO."); -static const u8 sPowerConstructDescription[] = _("Cells aid it when weakened."); -static const u8 sCorrosionDescription[] = _("Poisons any type."); -static const u8 sComatoseDescription[] = _("Always drowsing."); -static const u8 sQueenlyMajestyDescription[] = _("Protects from priority."); -static const u8 sInnardsOutDescription[] = _("Hurts foe when defeated."); -static const u8 sDancerDescription[] = _("Dances along with others."); -static const u8 sBatteryDescription[] = _("Boosts ally's Sp. Atk."); -static const u8 sFluffyDescription[] = _("Tougher but flammable."); -static const u8 sSoulHeartDescription[] = _("KOs raise Sp. Atk."); -static const u8 sTanglingHairDescription[] = _("Contact lowers Speed."); -static const u8 sReceiverDescription[] = _("Copies ally's ability."); -static const u8 sBeastBoostDescription[] = _("KOs boost best stat."); -static const u8 sRKSSystemDescription[] = _("Memories change its type."); -static const u8 sElectricSurgeDescription[] = _("Field becomes Electric."); -static const u8 sPsychicSurgeDescription[] = _("Field becomes weird."); -static const u8 sMistySurgeDescription[] = _("Field becomes misty."); -static const u8 sGrassySurgeDescription[] = _("Field becomes grassy."); -static const u8 sFullMetalBodyDescription[] = _("Prevents stat reduction."); -static const u8 sNeuroforceDescription[] = _("Ups “supereffective”."); -static const u8 sIntrepidSwordDescription[] = _("Ups Attack on entry."); -static const u8 sDauntlessShieldDescription[] = _("Ups Defense on entry."); -static const u8 sLiberoDescription[] = _("Changes type to move's."); -static const u8 sBallFetchDescription[] = _("Fetches failed Poké Ball."); -static const u8 sCottonDownDescription[] = _("Lower Speed of all when hit."); -static const u8 sPropellerTailDescription[] = _("Ignores foe's redirection."); -static const u8 sMirrorArmorDescription[] = _("Reflect stat decreases."); -static const u8 sGulpMissileDescription[] = _("If hit, spits prey from sea."); -static const u8 sStalwartDescription[] = _("Ignores foe's redirection."); -static const u8 sSteamEngineDescription[] = _("Fire or Water hits up Speed."); -static const u8 sPunkRockDescription[] = _("Ups and resists sound."); -static const u8 sSandSpitDescription[] = _("Creates a sandstorm if hit."); -static const u8 sIceScalesDescription[] = _("Halves special damage."); -static const u8 sRipenDescription[] = _("Doubles effect of Berries."); -static const u8 sIceFaceDescription[] = _("Hail or Snow renew free hit."); -static const u8 sPowerSpotDescription[] = _("Powers up ally moves."); -static const u8 sMimicryDescription[] = _("Changes type on terrain."); -static const u8 sScreenCleanerDescription[] = _("Removes walls of light."); -static const u8 sSteelySpiritDescription[] = _("Boosts ally's Steel moves."); -static const u8 sPerishBodyDescription[] = _("Foe faints in 3 turns if hit."); -static const u8 sWanderingSpiritDescription[] = _("Trade abilities on contact."); -static const u8 sGorillaTacticsDescription[] = _("Ups Attack and locks move."); -static const u8 sNeutralizingGasDescription[] = _("All Abilities are nullified."); -static const u8 sPastelVeilDescription[] = _("Protects team from poison."); -static const u8 sHungerSwitchDescription[] = _("Changes form each turn.");; -static const u8 sQuickDrawDescription[] = _("Moves first occasionally."); -static const u8 sUnseenFistDescription[] = _("Contact evades protection."); -static const u8 sCuriousMedicineDescription[] = _("Remove ally's stat changes."); -static const u8 sTransistorDescription[] = _("Ups Electric-type moves."); -static const u8 sDragonsMawDescription[] = _("Ups Dragon-type moves."); -static const u8 sChillingNeighDescription[] = _("KOs boost Attack stat."); -static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat."); -static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh."); -static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh."); -static const u8 sLingeringAromaDescription[] = _("Spreads with contact."); -static const u8 sSeedSowerDescription[] = _("Affects terrain when hit."); -static const u8 sThermalExchangeDescription[] = _("Fire hits up Attack."); -static const u8 sAngerShellDescription[] = _("Gets angry at half HP."); -static const u8 sPurifyingSaltDescription[] = _("Protected by pure salts."); -static const u8 sWellBakedBodyDescription[] = _("Strengthened by Fire."); -static const u8 sWindRiderDescription[] = _("Ups Attack if hit by wind."); -static const u8 sGuardDogDescription[] = _("Cannot be intimidated."); -static const u8 sRockyPayloadDescription[] = _("Powers up Rock moves."); -static const u8 sWindPowerDescription[] = _("Gets charged by wind."); -static const u8 sZeroToHeroDescription[] = _("Changes form on switch out."); -static const u8 sCommanderDescription[] = _("Commands from Dondozo."); -static const u8 sElectromorphosisDescription[] = _("Gets Charged on contact."); -static const u8 sProtosynthesisDescription[] = _("Sun boosts best stat."); -static const u8 sQuarkDriveDescription[] = _("Elec. field ups best stat."); -static const u8 sGoodAsGoldDescription[] = _("Avoids status problems."); -static const u8 sVesselOfRuinDescription[] = _("Lowers foes' sp. damage."); -static const u8 sSwordOfRuinDescription[] = _("Lowers foes' defense."); -static const u8 sTabletsOfRuinDescription[] = _("Lowers foes' damage."); -static const u8 sBeadsOfRuinDescription[] = _("Lowers foes' sp. defense."); -static const u8 sOrichalcumPulseDescription[] = _("Summons sunlight in battle."); -static const u8 sHadronEngineDescription[] = _("Field becomes Electric."); -static const u8 sOpportunistDescription[] = _("Copies foe's stat change."); -static const u8 sCudChewDescription[] = _("Eats a used berry again."); -static const u8 sSharpnessDescription[] = _("Strengthens slicing moves."); -static const u8 sSupremeOverlordDescription[] = _("Inherits fallen's strength."); -static const u8 sCostarDescription[] = _("Copies ally's stat changes."); -static const u8 sToxicDebrisDescription[] = _("Throws poison spikes if hit."); -static const u8 sArmorTailDescription[] = _("Protects from priority."); -static const u8 sEarthEaterDescription[] = _("Eats ground to heal HP."); -static const u8 sMyceliumMightDescription[] = _("Status moves never fail."); -static const u8 sHospitalityDescription[] = _("Restores ally's HP."); -static const u8 sMindsEyeDescription[] = _("Keen Eye and Scrappy."); -static const u8 sEmbodyAspectTealDescription[] = _("Raises Speed."); -static const u8 sEmbodyAspectHearthflameDescription[] = _("Raises Attack."); -static const u8 sEmbodyAspectWellspringDescription[] = _("Raises Sp. Def."); -static const u8 sEmbodyAspectCornerstoneDescription[] = _("Raises Defense."); -static const u8 sToxicChainDescription[] = _("Moves can poison."); -static const u8 sSupersweetSyrupDescription[] = _("Lowers the foe's Speed."); -static const u8 sAirForceDescription[] = _("Moxie, Levitate, Flying."); -static const u8 sTricksterDescription[] = _("Prankster & Strong Jaw."); - -#if B_EXPANDED_ABILITY_NAMES == TRUE -const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = -{ - [ABILITY_NONE] = _("-------"), - [ABILITY_STENCH] = _("Stench"), - [ABILITY_DRIZZLE] = _("Drizzle"), - [ABILITY_SPEED_BOOST] = _("Speed Boost"), - [ABILITY_BATTLE_ARMOR] = _("Battle Armor"), - [ABILITY_STURDY] = _("Sturdy"), - [ABILITY_DAMP] = _("Damp"), - [ABILITY_LIMBER] = _("Limber"), - [ABILITY_SAND_VEIL] = _("Sand Veil"), - [ABILITY_STATIC] = _("Static"), - [ABILITY_VOLT_ABSORB] = _("Volt Absorb"), - [ABILITY_WATER_ABSORB] = _("Water Absorb"), - [ABILITY_OBLIVIOUS] = _("Oblivious"), - [ABILITY_CLOUD_NINE] = _("Cloud Nine"), - [ABILITY_COMPOUND_EYES] = _("Compound Eyes"), - [ABILITY_INSOMNIA] = _("Insomnia"), - [ABILITY_COLOR_CHANGE] = _("Color Change"), - [ABILITY_IMMUNITY] = _("Immunity"), - [ABILITY_FLASH_FIRE] = _("Flash Fire"), - [ABILITY_SHIELD_DUST] = _("Shield Dust"), - [ABILITY_OWN_TEMPO] = _("Own Tempo"), - [ABILITY_SUCTION_CUPS] = _("Suction Cups"), - [ABILITY_INTIMIDATE] = _("Intimidate"), - [ABILITY_SHADOW_TAG] = _("Shadow Tag"), - [ABILITY_ROUGH_SKIN] = _("Rough Skin"), - [ABILITY_WONDER_GUARD] = _("Wonder Guard"), - [ABILITY_LEVITATE] = _("Levitate"), - [ABILITY_EFFECT_SPORE] = _("Effect Spore"), - [ABILITY_SYNCHRONIZE] = _("Synchronize"), - [ABILITY_CLEAR_BODY] = _("Clear Body"), - [ABILITY_NATURAL_CURE] = _("Natural Cure"), - [ABILITY_LIGHTNING_ROD] = _("Lightning Rod"), - [ABILITY_SERENE_GRACE] = _("Serene Grace"), - [ABILITY_SWIFT_SWIM] = _("Swift Swim"), - [ABILITY_CHLOROPHYLL] = _("Chlorophyll"), - [ABILITY_ILLUMINATE] = _("Illuminate"), - [ABILITY_TRACE] = _("Trace"), - [ABILITY_HUGE_POWER] = _("Huge Power"), - [ABILITY_POISON_POINT] = _("Poison Point"), - [ABILITY_INNER_FOCUS] = _("Inner Focus"), - [ABILITY_MAGMA_ARMOR] = _("Magma Armor"), - [ABILITY_WATER_VEIL] = _("Water Veil"), - [ABILITY_MAGNET_PULL] = _("Magnet Pull"), - [ABILITY_SOUNDPROOF] = _("Soundproof"), - [ABILITY_RAIN_DISH] = _("Rain Dish"), - [ABILITY_SAND_STREAM] = _("Sand Stream"), - [ABILITY_PRESSURE] = _("Pressure"), - [ABILITY_THICK_FAT] = _("Thick Fat"), - [ABILITY_EARLY_BIRD] = _("Early Bird"), - [ABILITY_FLAME_BODY] = _("Flame Body"), - [ABILITY_RUN_AWAY] = _("Run Away"), - [ABILITY_KEEN_EYE] = _("Keen Eye"), - [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"), - [ABILITY_PICKUP] = _("Pickup"), - [ABILITY_TRUANT] = _("Truant"), - [ABILITY_HUSTLE] = _("Hustle"), - [ABILITY_CUTE_CHARM] = _("Cute Charm"), - [ABILITY_PLUS] = _("Plus"), - [ABILITY_MINUS] = _("Minus"), - [ABILITY_FORECAST] = _("Forecast"), - [ABILITY_STICKY_HOLD] = _("Sticky Hold"), - [ABILITY_SHED_SKIN] = _("Shed Skin"), - [ABILITY_GUTS] = _("Guts"), - [ABILITY_MARVEL_SCALE] = _("Marvel Scale"), - [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"), - [ABILITY_OVERGROW] = _("Overgrow"), - [ABILITY_BLAZE] = _("Blaze"), - [ABILITY_TORRENT] = _("Torrent"), - [ABILITY_SWARM] = _("Swarm"), - [ABILITY_ROCK_HEAD] = _("Rock Head"), - [ABILITY_DROUGHT] = _("Drought"), - [ABILITY_ARENA_TRAP] = _("Arena Trap"), - [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"), - [ABILITY_WHITE_SMOKE] = _("White Smoke"), - [ABILITY_PURE_POWER] = _("Pure Power"), - [ABILITY_SHELL_ARMOR] = _("Shell Armor"), - [ABILITY_AIR_LOCK] = _("Air Lock"), - [ABILITY_TANGLED_FEET] = _("Tangled Feet"), - [ABILITY_MOTOR_DRIVE] = _("Motor Drive"), - [ABILITY_RIVALRY] = _("Rivalry"), - [ABILITY_STEADFAST] = _("Steadfast"), - [ABILITY_SNOW_CLOAK] = _("Snow Cloak"), - [ABILITY_GLUTTONY] = _("Gluttony"), - [ABILITY_ANGER_POINT] = _("Anger Point"), - [ABILITY_UNBURDEN] = _("Unburden"), - [ABILITY_HEATPROOF] = _("Heatproof"), - [ABILITY_SIMPLE] = _("Simple"), - [ABILITY_DRY_SKIN] = _("Dry Skin"), - [ABILITY_DOWNLOAD] = _("Download"), - [ABILITY_IRON_FIST] = _("Iron Fist"), - [ABILITY_POISON_HEAL] = _("Poison Heal"), - [ABILITY_ADAPTABILITY] = _("Adaptability"), - [ABILITY_SKILL_LINK] = _("Skill Link"), - [ABILITY_HYDRATION] = _("Hydration"), - [ABILITY_SOLAR_POWER] = _("Solar Power"), - [ABILITY_QUICK_FEET] = _("Quick Feet"), - [ABILITY_NORMALIZE] = _("Normalize"), - [ABILITY_SNIPER] = _("Sniper"), - [ABILITY_MAGIC_GUARD] = _("Magic Guard"), - [ABILITY_NO_GUARD] = _("No Guard"), - [ABILITY_STALL] = _("Stall"), - [ABILITY_TECHNICIAN] = _("Technician"), - [ABILITY_LEAF_GUARD] = _("Leaf Guard"), - [ABILITY_KLUTZ] = _("Klutz"), - [ABILITY_MOLD_BREAKER] = _("Mold Breaker"), - [ABILITY_SUPER_LUCK] = _("Super Luck"), - [ABILITY_AFTERMATH] = _("Aftermath"), - [ABILITY_ANTICIPATION] = _("Anticipation"), - [ABILITY_FOREWARN] = _("Forewarn"), - [ABILITY_UNAWARE] = _("Unaware"), - [ABILITY_TINTED_LENS] = _("Tinted Lens"), - [ABILITY_FILTER] = _("Filter"), - [ABILITY_SLOW_START] = _("Slow Start"), - [ABILITY_SCRAPPY] = _("Scrappy"), - [ABILITY_STORM_DRAIN] = _("Storm Drain"), - [ABILITY_ICE_BODY] = _("Ice Body"), - [ABILITY_SOLID_ROCK] = _("Solid Rock"), - [ABILITY_SNOW_WARNING] = _("Snow Warning"), - [ABILITY_HONEY_GATHER] = _("Honey Gather"), - [ABILITY_FRISK] = _("Frisk"), - [ABILITY_RECKLESS] = _("Reckless"), - [ABILITY_MULTITYPE] = _("Multitype"), - [ABILITY_FLOWER_GIFT] = _("Flower Gift"), - [ABILITY_BAD_DREAMS] = _("Bad Dreams"), - [ABILITY_PICKPOCKET] = _("Pickpocket"), - [ABILITY_SHEER_FORCE] = _("Sheer Force"), - [ABILITY_CONTRARY] = _("Contrary"), - [ABILITY_UNNERVE] = _("Unnerve"), - [ABILITY_DEFIANT] = _("Defiant"), - [ABILITY_DEFEATIST] = _("Defeatist"), - [ABILITY_CURSED_BODY] = _("Cursed Body"), - [ABILITY_HEALER] = _("Healer"), - [ABILITY_FRIEND_GUARD] = _("Friend Guard"), - [ABILITY_WEAK_ARMOR] = _("Weak Armor"), - [ABILITY_HEAVY_METAL] = _("Heavy Metal"), - [ABILITY_LIGHT_METAL] = _("Light Metal"), - [ABILITY_MULTISCALE] = _("Multiscale"), - [ABILITY_TOXIC_BOOST] = _("Toxic Boost"), - [ABILITY_FLARE_BOOST] = _("Flare Boost"), - [ABILITY_HARVEST] = _("Harvest"), - [ABILITY_TELEPATHY] = _("Telepathy"), - [ABILITY_MOODY] = _("Moody"), - [ABILITY_OVERCOAT] = _("Overcoat"), - [ABILITY_POISON_TOUCH] = _("Poison Touch"), - [ABILITY_REGENERATOR] = _("Regenerator"), - [ABILITY_BIG_PECKS] = _("Big Pecks"), - [ABILITY_SAND_RUSH] = _("Sand Rush"), - [ABILITY_WONDER_SKIN] = _("Wonder Skin"), - [ABILITY_ANALYTIC] = _("Analytic"), - [ABILITY_ILLUSION] = _("Illusion"), - [ABILITY_IMPOSTER] = _("Imposter"), - [ABILITY_INFILTRATOR] = _("Infiltrator"), - [ABILITY_MUMMY] = _("Mummy"), - [ABILITY_MOXIE] = _("Moxie"), - [ABILITY_JUSTIFIED] = _("Justified"), - [ABILITY_RATTLED] = _("Rattled"), - [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"), - [ABILITY_SAP_SIPPER] = _("Sap Sipper"), - [ABILITY_PRANKSTER] = _("Prankster"), - [ABILITY_SAND_FORCE] = _("Sand Force"), - [ABILITY_IRON_BARBS] = _("Iron Barbs"), - [ABILITY_ZEN_MODE] = _("Zen Mode"), - [ABILITY_VICTORY_STAR] = _("Victory Star"), - [ABILITY_TURBOBLAZE] = _("Turboblaze"), - [ABILITY_TERAVOLT] = _("Teravolt"), - [ABILITY_AROMA_VEIL] = _("Aroma Veil"), - [ABILITY_FLOWER_VEIL] = _("Flower Veil"), - [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"), - [ABILITY_PROTEAN] = _("Protean"), - [ABILITY_FUR_COAT] = _("Fur Coat"), - [ABILITY_MAGICIAN] = _("Magician"), - [ABILITY_BULLETPROOF] = _("Bulletproof"), - [ABILITY_COMPETITIVE] = _("Competitive"), - [ABILITY_STRONG_JAW] = _("Strong Jaw"), - [ABILITY_REFRIGERATE] = _("Refrigerate"), - [ABILITY_SWEET_VEIL] = _("Sweet Veil"), - [ABILITY_STANCE_CHANGE] = _("Stance Change"), - [ABILITY_GALE_WINGS] = _("Gale Wings"), - [ABILITY_MEGA_LAUNCHER] = _("Mega Launcher"), - [ABILITY_GRASS_PELT] = _("Grass Pelt"), - [ABILITY_SYMBIOSIS] = _("Symbiosis"), - [ABILITY_TOUGH_CLAWS] = _("Tough Claws"), - [ABILITY_PIXILATE] = _("Pixilate"), - [ABILITY_GOOEY] = _("Gooey"), - [ABILITY_AERILATE] = _("Aerilate"), - [ABILITY_PARENTAL_BOND] = _("Parental Bond"), - [ABILITY_DARK_AURA] = _("Dark Aura"), - [ABILITY_FAIRY_AURA] = _("Fairy Aura"), - [ABILITY_AURA_BREAK] = _("Aura Break"), - [ABILITY_PRIMORDIAL_SEA] = _("Primordial Sea"), - [ABILITY_DESOLATE_LAND] = _("Desolate Land"), - [ABILITY_DELTA_STREAM] = _("Delta Stream"), - [ABILITY_STAMINA] = _("Stamina"), - [ABILITY_WIMP_OUT] = _("Wimp Out"), - [ABILITY_EMERGENCY_EXIT] = _("Emergency Exit"), - [ABILITY_WATER_COMPACTION] = _("Water Compaction"), - [ABILITY_MERCILESS] = _("Merciless"), - [ABILITY_SHIELDS_DOWN] = _("Shields Down"), - [ABILITY_STAKEOUT] = _("Stakeout"), - [ABILITY_WATER_BUBBLE] = _("Water Bubble"), - [ABILITY_STEELWORKER] = _("Steelworker"), - [ABILITY_BERSERK] = _("Berserk"), - [ABILITY_SLUSH_RUSH] = _("Slush Rush"), - [ABILITY_LONG_REACH] = _("Long Reach"), - [ABILITY_LIQUID_VOICE] = _("Liquid Voice"), - [ABILITY_TRIAGE] = _("Triage"), - [ABILITY_GALVANIZE] = _("Galvanize"), - [ABILITY_SURGE_SURFER] = _("Surge Surfer"), - [ABILITY_SCHOOLING] = _("Schooling"), - [ABILITY_DISGUISE] = _("Disguise"), - [ABILITY_BATTLE_BOND] = _("Battle Bond"), - [ABILITY_POWER_CONSTRUCT] = _("Power Construct"), - [ABILITY_CORROSION] = _("Corrosion"), - [ABILITY_COMATOSE] = _("Comatose"), - [ABILITY_QUEENLY_MAJESTY] = _("Queenly Majesty"), - [ABILITY_INNARDS_OUT] = _("Innards Out"), - [ABILITY_DANCER] = _("Dancer"), - [ABILITY_BATTERY] = _("Battery"), - [ABILITY_FLUFFY] = _("Fluffy"), - [ABILITY_DAZZLING] = _("Dazzling"), - [ABILITY_SOUL_HEART] = _("Soul-Heart"), - [ABILITY_TANGLING_HAIR] = _("Tangling Hair"), - [ABILITY_RECEIVER] = _("Receiver"), - [ABILITY_POWER_OF_ALCHEMY] = _("Power Of Alchemy"), - [ABILITY_BEAST_BOOST] = _("Beast Boost"), - [ABILITY_RKS_SYSTEM] = _("RKS System"), - [ABILITY_ELECTRIC_SURGE] = _("Electric Surge"), - [ABILITY_PSYCHIC_SURGE] = _("Psychic Surge"), - [ABILITY_MISTY_SURGE] = _("Misty Surge"), - [ABILITY_GRASSY_SURGE] = _("Grassy Surge"), - [ABILITY_FULL_METAL_BODY] = _("Full Metal Body"), - [ABILITY_SHADOW_SHIELD] = _("Shadow Shield"), - [ABILITY_PRISM_ARMOR] = _("Prism Armor"), - [ABILITY_NEUROFORCE] = _("Neuroforce"), - [ABILITY_INTREPID_SWORD] = _("Intrepid Sword"), - [ABILITY_DAUNTLESS_SHIELD] = _("Dauntless Shield"), - [ABILITY_LIBERO] = _("Libero"), - [ABILITY_BALL_FETCH] = _("Ball Fetch"), - [ABILITY_COTTON_DOWN] = _("Cotton Down"), - [ABILITY_PROPELLER_TAIL] = _("Propeller Tail"), - [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"), - [ABILITY_GULP_MISSILE] = _("Gulp Missile"), - [ABILITY_STALWART] = _("Stalwart"), - [ABILITY_STEAM_ENGINE] = _("Steam Engine"), - [ABILITY_PUNK_ROCK] = _("Punk Rock"), - [ABILITY_SAND_SPIT] = _("Sand Spit"), - [ABILITY_ICE_SCALES] = _("Ice Scales"), - [ABILITY_RIPEN] = _("Ripen"), - [ABILITY_ICE_FACE] = _("Ice Face"), - [ABILITY_POWER_SPOT] = _("Power Spot"), - [ABILITY_MIMICRY] = _("Mimicry"), - [ABILITY_SCREEN_CLEANER] = _("Screen Cleaner"), - [ABILITY_STEELY_SPIRIT] = _("Steely Spirit"), - [ABILITY_PERISH_BODY] = _("Perish Body"), - [ABILITY_WANDERING_SPIRIT] = _("Wandering Spirit"), - [ABILITY_GORILLA_TACTICS] = _("Gorilla Tactics"), - [ABILITY_NEUTRALIZING_GAS] = _("Neutralizing Gas"), - [ABILITY_PASTEL_VEIL] = _("Pastel Veil"), - [ABILITY_HUNGER_SWITCH] = _("Hunger Switch"), - [ABILITY_QUICK_DRAW] = _("Quick Draw"), - [ABILITY_UNSEEN_FIST] = _("Unseen Fist"), - [ABILITY_CURIOUS_MEDICINE] = _("Curious Medicine"), - [ABILITY_TRANSISTOR] = _("Transistor"), - [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"), - [ABILITY_CHILLING_NEIGH] = _("Chilling Neigh"), - [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), - [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), - [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), - [ABILITY_LINGERING_AROMA] = _("Lingering Aroma"), - [ABILITY_SEED_SOWER] = _("Seed Sower"), - [ABILITY_THERMAL_EXCHANGE] = _("Thermal Exchange"), - [ABILITY_ANGER_SHELL] = _("Anger Shell"), - [ABILITY_PURIFYING_SALT] = _("Purifying Salt"), - [ABILITY_WELL_BAKED_BODY] = _("Well-Baked Body"), - [ABILITY_WIND_RIDER] = _("Wind Rider"), - [ABILITY_GUARD_DOG] = _("Guard Dog"), - [ABILITY_ROCKY_PAYLOAD] = _("Rocky Payload"), - [ABILITY_WIND_POWER] = _("Wind Power"), - [ABILITY_ZERO_TO_HERO] = _("Zero to Hero"), - [ABILITY_COMMANDER] = _("Commander"), - [ABILITY_ELECTROMORPHOSIS] = _("Electromorphosis"), - [ABILITY_PROTOSYNTHESIS] = _("Protosynthesis"), - [ABILITY_QUARK_DRIVE] = _("Quark Drive"), - [ABILITY_GOOD_AS_GOLD] = _("Good as Gold"), - [ABILITY_VESSEL_OF_RUIN] = _("Vessel of Ruin"), - [ABILITY_SWORD_OF_RUIN] = _("Sword of Ruin"), - [ABILITY_TABLETS_OF_RUIN] = _("Tablets of Ruin"), - [ABILITY_BEADS_OF_RUIN] = _("Beads of Ruin"), - [ABILITY_ORICHALCUM_PULSE] = _("Orichalcum Pulse"), - [ABILITY_HADRON_ENGINE] = _("Hadron Engine"), - [ABILITY_OPPORTUNIST] = _("Opportunist"), - [ABILITY_CUD_CHEW] = _("Cud Chew"), - [ABILITY_SHARPNESS] = _("Sharpness"), - [ABILITY_SUPREME_OVERLORD] = _("Supreme Overlord"), - [ABILITY_COSTAR] = _("Costar"), - [ABILITY_TOXIC_DEBRIS] = _("Toxic Debris"), - [ABILITY_ARMOR_TAIL] = _("Armor Tail"), - [ABILITY_EARTH_EATER] = _("Earth Eater"), - [ABILITY_MYCELIUM_MIGHT] = _("Mycelium Might"), - [ABILITY_HOSPITALITY] = _("Hospitality"), - [ABILITY_MINDS_EYE] = _("Mind's Eye"), - [ABILITY_EMBODY_ASPECT_TEAL] = _("Embody Aspect"), - [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("Embody Aspect"), - [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("Embody Aspect"), - [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("Embody Aspect"), - [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), - [ABILITY_SUPERSWEET_SYRUP] = _("Supersweet Syrup"), - [ABILITY_AIR_FORCE] = _("Air Force"), - [ABILITY_TRICKSTER] = _("Trickster"), -}; -#else // 12 characters -const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = -{ - [ABILITY_NONE] = _("-------"), - [ABILITY_STENCH] = _("Stench"), - [ABILITY_DRIZZLE] = _("Drizzle"), - [ABILITY_SPEED_BOOST] = _("Speed Boost"), - [ABILITY_BATTLE_ARMOR] = _("Battle Armor"), - [ABILITY_STURDY] = _("Sturdy"), - [ABILITY_DAMP] = _("Damp"), - [ABILITY_LIMBER] = _("Limber"), - [ABILITY_SAND_VEIL] = _("Sand Veil"), - [ABILITY_STATIC] = _("Static"), - [ABILITY_VOLT_ABSORB] = _("Volt Absorb"), - [ABILITY_WATER_ABSORB] = _("Water Absorb"), - [ABILITY_OBLIVIOUS] = _("Oblivious"), - [ABILITY_CLOUD_NINE] = _("Cloud Nine"), - [ABILITY_COMPOUND_EYES] = _("CompoundEyes"), - [ABILITY_INSOMNIA] = _("Insomnia"), - [ABILITY_COLOR_CHANGE] = _("Color Change"), - [ABILITY_IMMUNITY] = _("Immunity"), - [ABILITY_FLASH_FIRE] = _("Flash Fire"), - [ABILITY_SHIELD_DUST] = _("Shield Dust"), - [ABILITY_OWN_TEMPO] = _("Own Tempo"), - [ABILITY_SUCTION_CUPS] = _("Suction Cups"), - [ABILITY_INTIMIDATE] = _("Intimidate"), - [ABILITY_SHADOW_TAG] = _("Shadow Tag"), - [ABILITY_ROUGH_SKIN] = _("Rough Skin"), - [ABILITY_WONDER_GUARD] = _("Wonder Guard"), - [ABILITY_LEVITATE] = _("Levitate"), - [ABILITY_EFFECT_SPORE] = _("Effect Spore"), - [ABILITY_SYNCHRONIZE] = _("Synchronize"), - [ABILITY_CLEAR_BODY] = _("Clear Body"), - [ABILITY_NATURAL_CURE] = _("Natural Cure"), - [ABILITY_LIGHTNING_ROD] = _("LightningRod"), - [ABILITY_SERENE_GRACE] = _("Serene Grace"), - [ABILITY_SWIFT_SWIM] = _("Swift Swim"), - [ABILITY_CHLOROPHYLL] = _("Chlorophyll"), - [ABILITY_ILLUMINATE] = _("Illuminate"), - [ABILITY_TRACE] = _("Trace"), - [ABILITY_HUGE_POWER] = _("Huge Power"), - [ABILITY_POISON_POINT] = _("Poison Point"), - [ABILITY_INNER_FOCUS] = _("Inner Focus"), - [ABILITY_MAGMA_ARMOR] = _("Magma Armor"), - [ABILITY_WATER_VEIL] = _("Water Veil"), - [ABILITY_MAGNET_PULL] = _("Magnet Pull"), - [ABILITY_SOUNDPROOF] = _("Soundproof"), - [ABILITY_RAIN_DISH] = _("Rain Dish"), - [ABILITY_SAND_STREAM] = _("Sand Stream"), - [ABILITY_PRESSURE] = _("Pressure"), - [ABILITY_THICK_FAT] = _("Thick Fat"), - [ABILITY_EARLY_BIRD] = _("Early Bird"), - [ABILITY_FLAME_BODY] = _("Flame Body"), - [ABILITY_RUN_AWAY] = _("Run Away"), - [ABILITY_KEEN_EYE] = _("Keen Eye"), - [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"), - [ABILITY_PICKUP] = _("Pickup"), - [ABILITY_TRUANT] = _("Truant"), - [ABILITY_HUSTLE] = _("Hustle"), - [ABILITY_CUTE_CHARM] = _("Cute Charm"), - [ABILITY_PLUS] = _("Plus"), - [ABILITY_MINUS] = _("Minus"), - [ABILITY_FORECAST] = _("Forecast"), - [ABILITY_STICKY_HOLD] = _("Sticky Hold"), - [ABILITY_SHED_SKIN] = _("Shed Skin"), - [ABILITY_GUTS] = _("Guts"), - [ABILITY_MARVEL_SCALE] = _("Marvel Scale"), - [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"), - [ABILITY_OVERGROW] = _("Overgrow"), - [ABILITY_BLAZE] = _("Blaze"), - [ABILITY_TORRENT] = _("Torrent"), - [ABILITY_SWARM] = _("Swarm"), - [ABILITY_ROCK_HEAD] = _("Rock Head"), - [ABILITY_DROUGHT] = _("Drought"), - [ABILITY_ARENA_TRAP] = _("Arena Trap"), - [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"), - [ABILITY_WHITE_SMOKE] = _("White Smoke"), - [ABILITY_PURE_POWER] = _("Pure Power"), - [ABILITY_SHELL_ARMOR] = _("Shell Armor"), - [ABILITY_AIR_LOCK] = _("Air Lock"), - [ABILITY_TANGLED_FEET] = _("Tangled Feet"), - [ABILITY_MOTOR_DRIVE] = _("Motor Drive"), - [ABILITY_RIVALRY] = _("Rivalry"), - [ABILITY_STEADFAST] = _("Steadfast"), - [ABILITY_SNOW_CLOAK] = _("Snow Cloak"), - [ABILITY_GLUTTONY] = _("Gluttony"), - [ABILITY_ANGER_POINT] = _("Anger Point"), - [ABILITY_UNBURDEN] = _("Unburden"), - [ABILITY_HEATPROOF] = _("Heatproof"), - [ABILITY_SIMPLE] = _("Simple"), - [ABILITY_DRY_SKIN] = _("Dry Skin"), - [ABILITY_DOWNLOAD] = _("Download"), - [ABILITY_IRON_FIST] = _("Iron Fist"), - [ABILITY_POISON_HEAL] = _("Poison Heal"), - [ABILITY_ADAPTABILITY] = _("Adaptability"), - [ABILITY_SKILL_LINK] = _("Skill Link"), - [ABILITY_HYDRATION] = _("Hydration"), - [ABILITY_SOLAR_POWER] = _("Solar Power"), - [ABILITY_QUICK_FEET] = _("Quick Feet"), - [ABILITY_NORMALIZE] = _("Normalize"), - [ABILITY_SNIPER] = _("Sniper"), - [ABILITY_MAGIC_GUARD] = _("Magic Guard"), - [ABILITY_NO_GUARD] = _("No Guard"), - [ABILITY_STALL] = _("Stall"), - [ABILITY_TECHNICIAN] = _("Technician"), - [ABILITY_LEAF_GUARD] = _("Leaf Guard"), - [ABILITY_KLUTZ] = _("Klutz"), - [ABILITY_MOLD_BREAKER] = _("Mold Breaker"), - [ABILITY_SUPER_LUCK] = _("Super Luck"), - [ABILITY_AFTERMATH] = _("Aftermath"), - [ABILITY_ANTICIPATION] = _("Anticipation"), - [ABILITY_FOREWARN] = _("Forewarn"), - [ABILITY_UNAWARE] = _("Unaware"), - [ABILITY_TINTED_LENS] = _("Tinted Lens"), - [ABILITY_FILTER] = _("Filter"), - [ABILITY_SLOW_START] = _("Slow Start"), - [ABILITY_SCRAPPY] = _("Scrappy"), - [ABILITY_STORM_DRAIN] = _("Storm Drain"), - [ABILITY_ICE_BODY] = _("Ice Body"), - [ABILITY_SOLID_ROCK] = _("Solid Rock"), - [ABILITY_SNOW_WARNING] = _("Snow Warning"), - [ABILITY_HONEY_GATHER] = _("Honey Gather"), - [ABILITY_FRISK] = _("Frisk"), - [ABILITY_RECKLESS] = _("Reckless"), - [ABILITY_MULTITYPE] = _("Multitype"), - [ABILITY_FLOWER_GIFT] = _("Flower Gift"), - [ABILITY_BAD_DREAMS] = _("Bad Dreams"), - [ABILITY_PICKPOCKET] = _("Pickpocket"), - [ABILITY_SHEER_FORCE] = _("Sheer Force"), - [ABILITY_CONTRARY] = _("Contrary"), - [ABILITY_UNNERVE] = _("Unnerve"), - [ABILITY_DEFIANT] = _("Defiant"), - [ABILITY_DEFEATIST] = _("Defeatist"), - [ABILITY_CURSED_BODY] = _("Cursed Body"), - [ABILITY_HEALER] = _("Healer"), - [ABILITY_FRIEND_GUARD] = _("Friend Guard"), - [ABILITY_WEAK_ARMOR] = _("Weak Armor"), - [ABILITY_HEAVY_METAL] = _("Heavy Metal"), - [ABILITY_LIGHT_METAL] = _("Light Metal"), - [ABILITY_MULTISCALE] = _("Multiscale"), - [ABILITY_TOXIC_BOOST] = _("Toxic Boost"), - [ABILITY_FLARE_BOOST] = _("Flare Boost"), - [ABILITY_HARVEST] = _("Harvest"), - [ABILITY_TELEPATHY] = _("Telepathy"), - [ABILITY_MOODY] = _("Moody"), - [ABILITY_OVERCOAT] = _("Overcoat"), - [ABILITY_POISON_TOUCH] = _("Poison Touch"), - [ABILITY_REGENERATOR] = _("Regenerator"), - [ABILITY_BIG_PECKS] = _("Big Pecks"), - [ABILITY_SAND_RUSH] = _("Sand Rush"), - [ABILITY_WONDER_SKIN] = _("Wonder Skin"), - [ABILITY_ANALYTIC] = _("Analytic"), - [ABILITY_ILLUSION] = _("Illusion"), - [ABILITY_IMPOSTER] = _("Imposter"), - [ABILITY_INFILTRATOR] = _("Infiltrator"), - [ABILITY_MUMMY] = _("Mummy"), - [ABILITY_MOXIE] = _("Moxie"), - [ABILITY_JUSTIFIED] = _("Justified"), - [ABILITY_RATTLED] = _("Rattled"), - [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"), - [ABILITY_SAP_SIPPER] = _("Sap Sipper"), - [ABILITY_PRANKSTER] = _("Prankster"), - [ABILITY_SAND_FORCE] = _("Sand Force"), - [ABILITY_IRON_BARBS] = _("Iron Barbs"), - [ABILITY_ZEN_MODE] = _("Zen Mode"), - [ABILITY_VICTORY_STAR] = _("Victory Star"), - [ABILITY_TURBOBLAZE] = _("Turboblaze"), - [ABILITY_TERAVOLT] = _("Teravolt"), - [ABILITY_AROMA_VEIL] = _("Aroma Veil"), - [ABILITY_FLOWER_VEIL] = _("Flower Veil"), - [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"), - [ABILITY_PROTEAN] = _("Protean"), - [ABILITY_FUR_COAT] = _("Fur Coat"), - [ABILITY_MAGICIAN] = _("Magician"), - [ABILITY_BULLETPROOF] = _("Bulletproof"), - [ABILITY_COMPETITIVE] = _("Competitive"), - [ABILITY_STRONG_JAW] = _("Strong Jaw"), - [ABILITY_REFRIGERATE] = _("Refrigerate"), - [ABILITY_SWEET_VEIL] = _("Sweet Veil"), - [ABILITY_STANCE_CHANGE] = _("StanceChange"), - [ABILITY_GALE_WINGS] = _("Gale Wings"), - [ABILITY_MEGA_LAUNCHER] = _("MegaLauncher"), - [ABILITY_GRASS_PELT] = _("Grass Pelt"), - [ABILITY_SYMBIOSIS] = _("Symbiosis"), - [ABILITY_TOUGH_CLAWS] = _("Tough Claws"), - [ABILITY_PIXILATE] = _("Pixilate"), - [ABILITY_GOOEY] = _("Gooey"), - [ABILITY_AERILATE] = _("Aerilate"), - [ABILITY_PARENTAL_BOND] = _("ParentalBond"), - [ABILITY_DARK_AURA] = _("Dark Aura"), - [ABILITY_FAIRY_AURA] = _("Fairy Aura"), - [ABILITY_AURA_BREAK] = _("Aura Break"), - [ABILITY_PRIMORDIAL_SEA] = _("PrimrdialSea"), - [ABILITY_DESOLATE_LAND] = _("DesolateLand"), - [ABILITY_DELTA_STREAM] = _("Delta Stream"), - [ABILITY_STAMINA] = _("Stamina"), - [ABILITY_WIMP_OUT] = _("Wimp Out"), - [ABILITY_EMERGENCY_EXIT] = _("EmergncyExit"), - [ABILITY_WATER_COMPACTION] = _("WtrCmpaction"), - [ABILITY_MERCILESS] = _("Merciless"), - [ABILITY_SHIELDS_DOWN] = _("Shields Down"), - [ABILITY_STAKEOUT] = _("Stakeout"), - [ABILITY_WATER_BUBBLE] = _("Water Bubble"), - [ABILITY_STEELWORKER] = _("Steelworker"), - [ABILITY_BERSERK] = _("Berserk"), - [ABILITY_SLUSH_RUSH] = _("Slush Rush"), - [ABILITY_LONG_REACH] = _("Long Reach"), - [ABILITY_LIQUID_VOICE] = _("Liquid Voice"), - [ABILITY_TRIAGE] = _("Triage"), - [ABILITY_GALVANIZE] = _("Galvanize"), - [ABILITY_SURGE_SURFER] = _("Surge Surfer"), - [ABILITY_SCHOOLING] = _("Schooling"), - [ABILITY_DISGUISE] = _("Disguise"), - [ABILITY_BATTLE_BOND] = _("Battle Bond"), - [ABILITY_POWER_CONSTRUCT] = _("PwrConstruct"), - [ABILITY_CORROSION] = _("Corrosion"), - [ABILITY_COMATOSE] = _("Comatose"), - [ABILITY_QUEENLY_MAJESTY] = _("QueenlyMjsty"), - [ABILITY_INNARDS_OUT] = _("Innards Out"), - [ABILITY_DANCER] = _("Dancer"), - [ABILITY_BATTERY] = _("Battery"), - [ABILITY_FLUFFY] = _("Fluffy"), - [ABILITY_DAZZLING] = _("Dazzling"), - [ABILITY_SOUL_HEART] = _("Soul-Heart"), - [ABILITY_TANGLING_HAIR] = _("TanglingHair"), - [ABILITY_RECEIVER] = _("Receiver"), - [ABILITY_POWER_OF_ALCHEMY] = _("PwrOfAlchemy"), - [ABILITY_BEAST_BOOST] = _("Beast Boost"), - [ABILITY_RKS_SYSTEM] = _("RKS System"), - [ABILITY_ELECTRIC_SURGE] = _("ElectrcSurge"), - [ABILITY_PSYCHIC_SURGE] = _("PsychicSurge"), - [ABILITY_MISTY_SURGE] = _("Misty Surge"), - [ABILITY_GRASSY_SURGE] = _("Grassy Surge"), - [ABILITY_FULL_METAL_BODY] = _("FullMetalBdy"), - [ABILITY_SHADOW_SHIELD] = _("ShadowShield"), - [ABILITY_PRISM_ARMOR] = _("Prism Armor"), - [ABILITY_NEUROFORCE] = _("Neuroforce"), - [ABILITY_INTREPID_SWORD] = _("IntrepidSwrd"), - [ABILITY_DAUNTLESS_SHIELD] = _("DauntlssShld"), - [ABILITY_LIBERO] = _("Libero"), - [ABILITY_BALL_FETCH] = _("Ball Fetch"), - [ABILITY_COTTON_DOWN] = _("Cotton Down"), - [ABILITY_PROPELLER_TAIL] = _("PropellrTail"), - [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"), - [ABILITY_GULP_MISSILE] = _("Gulp Missile"), - [ABILITY_STALWART] = _("Stalwart"), - [ABILITY_STEAM_ENGINE] = _("Steam Engine"), - [ABILITY_PUNK_ROCK] = _("Punk Rock"), - [ABILITY_SAND_SPIT] = _("Sand Spit"), - [ABILITY_ICE_SCALES] = _("Ice Scales"), - [ABILITY_RIPEN] = _("Ripen"), - [ABILITY_ICE_FACE] = _("Ice Face"), - [ABILITY_POWER_SPOT] = _("Power Spot"), - [ABILITY_MIMICRY] = _("Mimicry"), - [ABILITY_SCREEN_CLEANER] = _("ScreenCleanr"), - [ABILITY_STEELY_SPIRIT] = _("SteelySpirit"), - [ABILITY_PERISH_BODY] = _("Perish Body"), - [ABILITY_WANDERING_SPIRIT] = _("WandrngSprit"), - [ABILITY_GORILLA_TACTICS] = _("GorillaTacti"), - [ABILITY_NEUTRALIZING_GAS] = _("NeutrlzngGas"), - [ABILITY_PASTEL_VEIL] = _("Pastel Veil"), - [ABILITY_HUNGER_SWITCH] = _("HungerSwitch"), - [ABILITY_QUICK_DRAW] = _("Quick Draw"), - [ABILITY_UNSEEN_FIST] = _("Unseen Fist"), - [ABILITY_CURIOUS_MEDICINE] = _("CuriusMedicn"), - [ABILITY_TRANSISTOR] = _("Transistor"), - [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"), - [ABILITY_CHILLING_NEIGH] = _("ChillngNeigh"), - [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), - [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), - [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), - [ABILITY_LINGERING_AROMA] = _("LngerngAroma"), - [ABILITY_SEED_SOWER] = _("Seed Sower"), - [ABILITY_THERMAL_EXCHANGE] = _("ThrmlExchnge"), - [ABILITY_ANGER_SHELL] = _("Anger Shell"), - [ABILITY_PURIFYING_SALT] = _("PurfyingSalt"), - [ABILITY_WELL_BAKED_BODY] = _("WellBakedBdy"), - [ABILITY_WIND_RIDER] = _("Wind Rider"), - [ABILITY_GUARD_DOG] = _("Guard Dog"), - [ABILITY_ROCKY_PAYLOAD] = _("RockyPayload"), - [ABILITY_WIND_POWER] = _("Wind Power"), - [ABILITY_ZERO_TO_HERO] = _("Zero to Hero"), - [ABILITY_COMMANDER] = _("Commander"), - [ABILITY_ELECTROMORPHOSIS] = _("Elecmrphosis"), - [ABILITY_PROTOSYNTHESIS] = _("Protosnthsis"), - [ABILITY_QUARK_DRIVE] = _("Quark Drive"), - [ABILITY_GOOD_AS_GOLD] = _("Good as Gold"), - [ABILITY_VESSEL_OF_RUIN] = _("VesselOfRuin"), - [ABILITY_SWORD_OF_RUIN] = _("SwordOfRuin"), - [ABILITY_TABLETS_OF_RUIN] = _("TabltsOfRuin"), - [ABILITY_BEADS_OF_RUIN] = _("BeadsOfRuin"), - [ABILITY_ORICHALCUM_PULSE] = _("OrchlcumPlse"), - [ABILITY_HADRON_ENGINE] = _("HadronEngine"), - [ABILITY_OPPORTUNIST] = _("Opportunist"), - [ABILITY_CUD_CHEW] = _("Cud Chew"), - [ABILITY_SHARPNESS] = _("Sharpness"), - [ABILITY_SUPREME_OVERLORD] = _("SuprmeOvrlrd"), - [ABILITY_COSTAR] = _("Costar"), - [ABILITY_TOXIC_DEBRIS] = _("Toxic Debris"), - [ABILITY_ARMOR_TAIL] = _("Armor Tail"), - [ABILITY_EARTH_EATER] = _("Earth Eater"), - [ABILITY_MYCELIUM_MIGHT] = _("MceliumMight"), - [ABILITY_HOSPITALITY] = _("Hospitality"), - [ABILITY_MINDS_EYE] = _("Mind's Eye"), - [ABILITY_EMBODY_ASPECT_TEAL] = _("EmbodyAspect"), - [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("EmbodyAspect"), - [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("EmbodyAspect"), - [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("EmbodyAspect"), - [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), - [ABILITY_SUPERSWEET_SYRUP] = _("SuprswtSyrup"), - [ABILITY_AIR_FORCE] = _("Air Force"), - [ABILITY_TRICKSTER] = _("Trickster"), -}; -#endif - -const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = -{ - [ABILITY_NONE] = sNoneDescription, - [ABILITY_STENCH] = sStenchDescription, - [ABILITY_DRIZZLE] = sDrizzleDescription, - [ABILITY_SPEED_BOOST] = sSpeedBoostDescription, - [ABILITY_BATTLE_ARMOR] = sBattleArmorDescription, - [ABILITY_STURDY] = sSturdyDescription, - [ABILITY_DAMP] = sDampDescription, - [ABILITY_LIMBER] = sLimberDescription, - [ABILITY_SAND_VEIL] = sSandVeilDescription, - [ABILITY_STATIC] = sStaticDescription, - [ABILITY_VOLT_ABSORB] = sVoltAbsorbDescription, - [ABILITY_WATER_ABSORB] = sWaterAbsorbDescription, - [ABILITY_OBLIVIOUS] = sObliviousDescription, - [ABILITY_CLOUD_NINE] = sCloudNineDescription, - [ABILITY_COMPOUND_EYES] = sCompoundEyesDescription, - [ABILITY_INSOMNIA] = sInsomniaDescription, - [ABILITY_COLOR_CHANGE] = sColorChangeDescription, - [ABILITY_IMMUNITY] = sImmunityDescription, - [ABILITY_FLASH_FIRE] = sFlashFireDescription, - [ABILITY_SHIELD_DUST] = sShieldDustDescription, - [ABILITY_OWN_TEMPO] = sOwnTempoDescription, - [ABILITY_SUCTION_CUPS] = sSuctionCupsDescription, - [ABILITY_INTIMIDATE] = sIntimidateDescription, - [ABILITY_SHADOW_TAG] = sShadowTagDescription, - [ABILITY_ROUGH_SKIN] = sRoughSkinDescription, - [ABILITY_WONDER_GUARD] = sWonderGuardDescription, - [ABILITY_LEVITATE] = sLevitateDescription, - [ABILITY_EFFECT_SPORE] = sEffectSporeDescription, - [ABILITY_SYNCHRONIZE] = sSynchronizeDescription, - [ABILITY_CLEAR_BODY] = sClearBodyDescription, - [ABILITY_NATURAL_CURE] = sNaturalCureDescription, - [ABILITY_LIGHTNING_ROD] = sLightningRodDescription, - [ABILITY_SERENE_GRACE] = sSereneGraceDescription, - [ABILITY_SWIFT_SWIM] = sSwiftSwimDescription, - [ABILITY_CHLOROPHYLL] = sChlorophyllDescription, - [ABILITY_ILLUMINATE] = sIlluminateDescription, - [ABILITY_TRACE] = sTraceDescription, - [ABILITY_HUGE_POWER] = sHugePowerDescription, - [ABILITY_POISON_POINT] = sPoisonPointDescription, - [ABILITY_INNER_FOCUS] = sInnerFocusDescription, - [ABILITY_MAGMA_ARMOR] = sMagmaArmorDescription, - [ABILITY_WATER_VEIL] = sWaterVeilDescription, - [ABILITY_MAGNET_PULL] = sMagnetPullDescription, - [ABILITY_SOUNDPROOF] = sSoundproofDescription, - [ABILITY_RAIN_DISH] = sRainDishDescription, - [ABILITY_SAND_STREAM] = sSandStreamDescription, - [ABILITY_PRESSURE] = sPressureDescription, - [ABILITY_THICK_FAT] = sThickFatDescription, - [ABILITY_EARLY_BIRD] = sEarlyBirdDescription, - [ABILITY_FLAME_BODY] = sFlameBodyDescription, - [ABILITY_RUN_AWAY] = sRunAwayDescription, - [ABILITY_KEEN_EYE] = sKeenEyeDescription, - [ABILITY_HYPER_CUTTER] = sHyperCutterDescription, - [ABILITY_PICKUP] = sPickupDescription, - [ABILITY_TRUANT] = sTruantDescription, - [ABILITY_HUSTLE] = sHustleDescription, - [ABILITY_CUTE_CHARM] = sCuteCharmDescription, - [ABILITY_PLUS] = sPlusDescription, - [ABILITY_MINUS] = sMinusDescription, - [ABILITY_FORECAST] = sForecastDescription, - [ABILITY_STICKY_HOLD] = sStickyHoldDescription, - [ABILITY_SHED_SKIN] = sShedSkinDescription, - [ABILITY_GUTS] = sGutsDescription, - [ABILITY_MARVEL_SCALE] = sMarvelScaleDescription, - [ABILITY_LIQUID_OOZE] = sLiquidOozeDescription, - [ABILITY_OVERGROW] = sOvergrowDescription, - [ABILITY_BLAZE] = sBlazeDescription, - [ABILITY_TORRENT] = sTorrentDescription, - [ABILITY_SWARM] = sSwarmDescription, - [ABILITY_ROCK_HEAD] = sRockHeadDescription, - [ABILITY_DROUGHT] = sDroughtDescription, - [ABILITY_ARENA_TRAP] = sArenaTrapDescription, - [ABILITY_VITAL_SPIRIT] = sVitalSpiritDescription, - [ABILITY_WHITE_SMOKE] = sWhiteSmokeDescription, - [ABILITY_PURE_POWER] = sPurePowerDescription, - [ABILITY_SHELL_ARMOR] = sShellArmorDescription, - [ABILITY_AIR_LOCK] = sAirLockDescription, - [ABILITY_TANGLED_FEET] = sTangledFeetDescription, - [ABILITY_MOTOR_DRIVE] = sMotorDriveDescription, - [ABILITY_RIVALRY] = sRivalryDescription, - [ABILITY_STEADFAST] = sSteadfastDescription, - [ABILITY_SNOW_CLOAK] = sSnowCloakDescription, - [ABILITY_GLUTTONY] = sGluttonyDescription, - [ABILITY_ANGER_POINT] = sAngerPointDescription, - [ABILITY_UNBURDEN] = sUnburdenDescription, - [ABILITY_HEATPROOF] = sHeatproofDescription, - [ABILITY_SIMPLE] = sSimpleDescription, - [ABILITY_DRY_SKIN] = sDrySkinDescription, - [ABILITY_DOWNLOAD] = sDownloadDescription, - [ABILITY_IRON_FIST] = sIronFistDescription, - [ABILITY_POISON_HEAL] = sPoisonHealDescription, - [ABILITY_ADAPTABILITY] = sAdaptabilityDescription, - [ABILITY_SKILL_LINK] = sSkillLinkDescription, - [ABILITY_HYDRATION] = sHydrationDescription, - [ABILITY_SOLAR_POWER] = sSolarPowerDescription, - [ABILITY_QUICK_FEET] = sQuickFeetDescription, - [ABILITY_NORMALIZE] = sNormalizeDescription, - [ABILITY_SNIPER] = sSniperDescription, - [ABILITY_MAGIC_GUARD] = sMagicGuardDescription, - [ABILITY_NO_GUARD] = sNoGuardDescription, - [ABILITY_STALL] = sStallDescription, - [ABILITY_TECHNICIAN] = sTechnicianDescription, - [ABILITY_LEAF_GUARD] = sLeafGuardDescription, - [ABILITY_KLUTZ] = sKlutzDescription, - [ABILITY_MOLD_BREAKER] = sMoldBreakerDescription, - [ABILITY_SUPER_LUCK] = sSuperLuckDescription, - [ABILITY_AFTERMATH] = sAftermathDescription, - [ABILITY_ANTICIPATION] = sAnticipationDescription, - [ABILITY_FOREWARN] = sForewarnDescription, - [ABILITY_UNAWARE] = sUnawareDescription, - [ABILITY_TINTED_LENS] = sTintedLensDescription, - [ABILITY_FILTER] = sFilterDescription, - [ABILITY_SLOW_START] = sSlowStartDescription, - [ABILITY_SCRAPPY] = sScrappyDescription, - [ABILITY_STORM_DRAIN] = sStormDrainDescription, - [ABILITY_ICE_BODY] = sIceBodyDescription, - [ABILITY_SOLID_ROCK] = sFilterDescription, - [ABILITY_SNOW_WARNING] = sSnowWarningDescription, - [ABILITY_HONEY_GATHER] = sHoneyGatherDescription, - [ABILITY_FRISK] = sFriskDescription, - [ABILITY_RECKLESS] = sRecklessDescription, - [ABILITY_MULTITYPE] = sMultitypeDescription, - [ABILITY_FLOWER_GIFT] = sFlowerGiftDescription, - [ABILITY_BAD_DREAMS] = sBadDreamsDescription, - [ABILITY_PICKPOCKET] = sPickpocketDescription, - [ABILITY_SHEER_FORCE] = sSheerForceDescription, - [ABILITY_CONTRARY] = sContraryDescription, - [ABILITY_UNNERVE] = sUnnerveDescription, - [ABILITY_DEFIANT] = sDefiantDescription, - [ABILITY_DEFEATIST] = sDefeatistDescription, - [ABILITY_CURSED_BODY] = sCursedBodyDescription, - [ABILITY_HEALER] = sHealerDescription, - [ABILITY_FRIEND_GUARD] = sFriendGuardDescription, - [ABILITY_WEAK_ARMOR] = sWeakArmorDescription, - [ABILITY_HEAVY_METAL] = sHeavyMetalDescription, - [ABILITY_LIGHT_METAL] = sLightMetalDescription, - [ABILITY_MULTISCALE] = sMultiscaleDescription, - [ABILITY_TOXIC_BOOST] = sToxicBoostDescription, - [ABILITY_FLARE_BOOST] = sFlareBoostDescription, - [ABILITY_HARVEST] = sHarvestDescription, - [ABILITY_TELEPATHY] = sTelepathyDescription, - [ABILITY_MOODY] = sMoodyDescription, - [ABILITY_OVERCOAT] = sOvercoatDescription, - [ABILITY_POISON_TOUCH] = sPoisonPointDescription, - [ABILITY_REGENERATOR] = sNaturalCureDescription, - [ABILITY_BIG_PECKS] = sBigPecksDescription, - [ABILITY_SAND_RUSH] = sSandRushDescription, - [ABILITY_WONDER_SKIN] = sWonderSkinDescription, - [ABILITY_ANALYTIC] = sAnalyticDescription, - [ABILITY_ILLUSION] = sIllusionDescription, - [ABILITY_IMPOSTER] = sImposterDescription, - [ABILITY_INFILTRATOR] = sInfiltratorDescription, - [ABILITY_MUMMY] = sMummyDescription, - [ABILITY_MOXIE] = sMoxieDescription, - [ABILITY_JUSTIFIED] = sJustifiedDescription, - [ABILITY_RATTLED] = sRattledDescription, - [ABILITY_MAGIC_BOUNCE] = sMagicBounceDescription, - [ABILITY_SAP_SIPPER] = sSapSipperDescription, - [ABILITY_PRANKSTER] = sPranksterDescription, - [ABILITY_SAND_FORCE] = sSandForceDescription, - [ABILITY_IRON_BARBS] = sRoughSkinDescription, - [ABILITY_ZEN_MODE] = sZenModeDescription, - [ABILITY_VICTORY_STAR] = sVictoryStarDescription, - [ABILITY_TURBOBLAZE] = sMoldBreakerDescription, - [ABILITY_TERAVOLT] = sMoldBreakerDescription, - [ABILITY_AROMA_VEIL] = sAromaVeilDescription, - [ABILITY_FLOWER_VEIL] = sFlowerVeilDescription, - [ABILITY_CHEEK_POUCH] = sCheekPouchDescription, - [ABILITY_PROTEAN] = sProteanDescription, - [ABILITY_FUR_COAT] = sFurCoatDescription, - [ABILITY_MAGICIAN] = sPickpocketDescription, - [ABILITY_BULLETPROOF] = sBulletproofDescription, - [ABILITY_COMPETITIVE] = sCompetitiveDescription, - [ABILITY_STRONG_JAW] = sStrongJawDescription, - [ABILITY_REFRIGERATE] = sRefrigerateDescription, - [ABILITY_SWEET_VEIL] = sSweetVeilDescription, - [ABILITY_STANCE_CHANGE] = sStanceChangeDescription, - [ABILITY_GALE_WINGS] = sGaleWingsDescription, - [ABILITY_MEGA_LAUNCHER] = sMegaLauncherDescription, - [ABILITY_GRASS_PELT] = sGrassPeltDescription, - [ABILITY_SYMBIOSIS] = sSymbiosisDescription, - [ABILITY_TOUGH_CLAWS] = sToughClawsDescription, - [ABILITY_PIXILATE] = sPixilateDescription, - [ABILITY_GOOEY] = sGooeyDescription, - [ABILITY_AERILATE] = sAerilateDescription, - [ABILITY_PARENTAL_BOND] = sParentalBondDescription, - [ABILITY_DARK_AURA] = sDarkAuraDescription, - [ABILITY_FAIRY_AURA] = sFairyAuraDescription, - [ABILITY_AURA_BREAK] = sAuraBreakDescription, - [ABILITY_PRIMORDIAL_SEA] = sPrimordialSeaDescription, - [ABILITY_DESOLATE_LAND] = sDesolateLandDescription, - [ABILITY_DELTA_STREAM] = sDeltaStreamDescription, - [ABILITY_STAMINA] = sStaminaDescription, - [ABILITY_WIMP_OUT] = sWimpOutDescription, - [ABILITY_EMERGENCY_EXIT] = sWimpOutDescription, - [ABILITY_WATER_COMPACTION] = sWaterCompactionDescription, - [ABILITY_MERCILESS] = sMercilessDescription, - [ABILITY_SHIELDS_DOWN] = sShieldsDownDescription, - [ABILITY_STAKEOUT] = sStakeoutDescription, - [ABILITY_WATER_BUBBLE] = sWaterBubbleDescription, - [ABILITY_STEELWORKER] = sSteelworkerDescription, - [ABILITY_BERSERK] = sBerserkDescription, - [ABILITY_SLUSH_RUSH] = sSlushRushDescription, - [ABILITY_LONG_REACH] = sLongReachDescription, - [ABILITY_LIQUID_VOICE] = sLiquidVoiceDescription, - [ABILITY_TRIAGE] = sTriageDescription, - [ABILITY_GALVANIZE] = sGalvanizeDescription, - [ABILITY_SURGE_SURFER] = sSurgeSurferDescription, - [ABILITY_SCHOOLING] = sSchoolingDescription, - [ABILITY_DISGUISE] = sDisguiseDescription, - [ABILITY_BATTLE_BOND] = sBattleBondDescription, - [ABILITY_POWER_CONSTRUCT] = sPowerConstructDescription, - [ABILITY_CORROSION] = sCorrosionDescription, - [ABILITY_COMATOSE] = sComatoseDescription, - [ABILITY_QUEENLY_MAJESTY] = sQueenlyMajestyDescription, - [ABILITY_INNARDS_OUT] = sInnardsOutDescription, - [ABILITY_DANCER] = sDancerDescription, - [ABILITY_BATTERY] = sBatteryDescription, - [ABILITY_FLUFFY] = sFluffyDescription, - [ABILITY_DAZZLING] = sQueenlyMajestyDescription, - [ABILITY_SOUL_HEART] = sSoulHeartDescription, - [ABILITY_TANGLING_HAIR] = sGooeyDescription, - [ABILITY_RECEIVER] = sReceiverDescription, - [ABILITY_POWER_OF_ALCHEMY] = sReceiverDescription, - [ABILITY_BEAST_BOOST] = sBeastBoostDescription, - [ABILITY_RKS_SYSTEM] = sRKSSystemDescription, - [ABILITY_ELECTRIC_SURGE] = sElectricSurgeDescription, - [ABILITY_PSYCHIC_SURGE] = sPsychicSurgeDescription, - [ABILITY_MISTY_SURGE] = sMistySurgeDescription, - [ABILITY_GRASSY_SURGE] = sGrassySurgeDescription, - [ABILITY_FULL_METAL_BODY] = sFullMetalBodyDescription, - [ABILITY_SHADOW_SHIELD] = sMultiscaleDescription, - [ABILITY_PRISM_ARMOR] = sFilterDescription, - [ABILITY_NEUROFORCE] = sNeuroforceDescription, - [ABILITY_INTREPID_SWORD] = sIntrepidSwordDescription, - [ABILITY_DAUNTLESS_SHIELD] = sDauntlessShieldDescription, - [ABILITY_LIBERO] = sLiberoDescription, - [ABILITY_BALL_FETCH] = sBallFetchDescription, - [ABILITY_COTTON_DOWN] = sCottonDownDescription, - [ABILITY_PROPELLER_TAIL] = sPropellerTailDescription, - [ABILITY_MIRROR_ARMOR] = sMirrorArmorDescription, - [ABILITY_GULP_MISSILE] = sGulpMissileDescription, - [ABILITY_STALWART] = sStalwartDescription, - [ABILITY_STEAM_ENGINE] = sSteamEngineDescription, - [ABILITY_PUNK_ROCK] = sPunkRockDescription, - [ABILITY_SAND_SPIT] = sSandSpitDescription, - [ABILITY_ICE_SCALES] = sIceScalesDescription, - [ABILITY_RIPEN] = sRipenDescription, - [ABILITY_ICE_FACE] = sIceFaceDescription, - [ABILITY_POWER_SPOT] = sPowerSpotDescription, - [ABILITY_MIMICRY] = sMimicryDescription, - [ABILITY_SCREEN_CLEANER] = sScreenCleanerDescription, - [ABILITY_STEELY_SPIRIT] = sSteelySpiritDescription, - [ABILITY_PERISH_BODY] = sPerishBodyDescription, - [ABILITY_WANDERING_SPIRIT] = sWanderingSpiritDescription, - [ABILITY_GORILLA_TACTICS] = sGorillaTacticsDescription, - [ABILITY_NEUTRALIZING_GAS] = sNeutralizingGasDescription, - [ABILITY_PASTEL_VEIL] = sPastelVeilDescription, - [ABILITY_HUNGER_SWITCH] = sHungerSwitchDescription, - [ABILITY_QUICK_DRAW] = sQuickDrawDescription, - [ABILITY_UNSEEN_FIST] = sUnseenFistDescription, - [ABILITY_CURIOUS_MEDICINE] = sCuriousMedicineDescription, - [ABILITY_TRANSISTOR] = sTransistorDescription, - [ABILITY_DRAGONS_MAW] = sDragonsMawDescription, - [ABILITY_CHILLING_NEIGH] = sChillingNeighDescription, - [ABILITY_GRIM_NEIGH] = sGrimNeighDescription, - [ABILITY_AS_ONE_ICE_RIDER] = sAsOneIceRiderDescription, - [ABILITY_AS_ONE_SHADOW_RIDER] = sAsOneShadowRiderDescription, - [ABILITY_LINGERING_AROMA] = sLingeringAromaDescription, - [ABILITY_SEED_SOWER] = sSeedSowerDescription, - [ABILITY_THERMAL_EXCHANGE] = sThermalExchangeDescription, - [ABILITY_ANGER_SHELL] = sAngerShellDescription, - [ABILITY_PURIFYING_SALT] = sPurifyingSaltDescription, - [ABILITY_WELL_BAKED_BODY] = sWellBakedBodyDescription, - [ABILITY_WIND_RIDER] = sWindRiderDescription, - [ABILITY_GUARD_DOG] = sGuardDogDescription, - [ABILITY_ROCKY_PAYLOAD] = sRockyPayloadDescription, - [ABILITY_WIND_POWER] = sWindPowerDescription, - [ABILITY_ZERO_TO_HERO] = sZeroToHeroDescription, - [ABILITY_COMMANDER] = sCommanderDescription, - [ABILITY_ELECTROMORPHOSIS] = sElectromorphosisDescription, - [ABILITY_PROTOSYNTHESIS] = sProtosynthesisDescription, - [ABILITY_QUARK_DRIVE] = sQuarkDriveDescription, - [ABILITY_GOOD_AS_GOLD] = sGoodAsGoldDescription, - [ABILITY_VESSEL_OF_RUIN] = sVesselOfRuinDescription, - [ABILITY_SWORD_OF_RUIN] = sSwordOfRuinDescription, - [ABILITY_TABLETS_OF_RUIN] = sTabletsOfRuinDescription, - [ABILITY_BEADS_OF_RUIN] = sBeadsOfRuinDescription, - [ABILITY_ORICHALCUM_PULSE] = sOrichalcumPulseDescription, - [ABILITY_HADRON_ENGINE] = sHadronEngineDescription, - [ABILITY_OPPORTUNIST] = sOpportunistDescription, - [ABILITY_CUD_CHEW] = sCudChewDescription, - [ABILITY_SHARPNESS] = sSharpnessDescription, - [ABILITY_SUPREME_OVERLORD] = sSupremeOverlordDescription, - [ABILITY_COSTAR] = sCostarDescription, - [ABILITY_TOXIC_DEBRIS] = sToxicDebrisDescription, - [ABILITY_ARMOR_TAIL] = sArmorTailDescription, - [ABILITY_EARTH_EATER] = sEarthEaterDescription, - [ABILITY_MYCELIUM_MIGHT] = sMyceliumMightDescription, - [ABILITY_HOSPITALITY] = sHospitalityDescription, - [ABILITY_MINDS_EYE] = sMindsEyeDescription, - [ABILITY_EMBODY_ASPECT_TEAL] = sEmbodyAspectTealDescription, - [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = sEmbodyAspectHearthflameDescription, - [ABILITY_EMBODY_ASPECT_WELLSPRING] = sEmbodyAspectWellspringDescription, - [ABILITY_EMBODY_ASPECT_CORNERSTONE] = sEmbodyAspectCornerstoneDescription, - [ABILITY_TOXIC_CHAIN] = sToxicChainDescription, - [ABILITY_SUPERSWEET_SYRUP] = sSupersweetSyrupDescription, - [ABILITY_AIR_FORCE] = sAirForceDescription, - [ABILITY_TRICKSTER] = sTricksterDescription, -}; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h deleted file mode 100644 index 1a4c422c0f71..000000000000 --- a/src/data/text/item_descriptions.h +++ /dev/null @@ -1,4090 +0,0 @@ -static const u8 sDummyDesc[] = _( - "?????"); - -// Poké Balls -static const u8 sPokeBallDesc[] = _( - "A tool used for\n" - "catching wild\n" - "Pokémon."); - -static const u8 sGreatBallDesc[] = _( - "A good Ball with a\n" - "higher catch rate\n" - "than a Poké Ball."); - -static const u8 sUltraBallDesc[] = _( - "A better Ball with\n" - "a higher catch rate\n" - "than a Great Ball."); - -static const u8 sMasterBallDesc[] = _( - "The best Ball that\n" - "catches a Pokémon\n" - "without fail."); - -static const u8 sPremierBallDesc[] = _( - "A rare Ball made\n" - "in commemoration\n" - "of some event."); - -static const u8 sHealBallDesc[] = _( - "A remedial Ball\n" - "that restores\n" - "caught Pokémon."); - -static const u8 sNetBallDesc[] = _( - "A Ball that works\n" - "well on Water- and\n" - "Bug-type Pokémon."); - -static const u8 sNestBallDesc[] = _( - "A Ball that works\n" - "better on weaker\n" - "Pokémon."); - -static const u8 sDiveBallDesc[] = _( - "A Ball that works\n" - "better on Pokémon\n" - "on the ocean floor."); - -static const u8 sDuskBallDesc[] = _( - "Works well if\n" - "used in a\n" - "dark place."); - -static const u8 sTimerBallDesc[] = _( - "A Ball that gains\n" - "power in battles\n" - "taking many turns."); - -static const u8 sQuickBallDesc[] = _( - "Works well if\n" - "used on the\n" - "first turn."); - -static const u8 sRepeatBallDesc[] = _( - "A Ball that works\n" - "better on Pokémon\n" - "caught before."); - -static const u8 sLuxuryBallDesc[] = _( - "A cozy Ball that\n" - "makes Pokémon\n" - "more friendly."); - -static const u8 sLevelBallDesc[] = _( - "A Ball that works\n" - "well on lower\n" - "level Pokémon."); - -static const u8 sLureBallDesc[] = _( - "A Ball that works\n" - "well on fished\n" - "up Pokémon."); - -static const u8 sMoonBallDesc[] = _( - "A Ball that works\n" - "well on Moon\n" - "Stone users."); - -static const u8 sFriendBallDesc[] = _( - "A Ball that makes\n" - "a Pokémon friendly\n" - "when caught."); - -static const u8 sLoveBallDesc[] = _( - "Works well on\n" - "Pokémon of the\n" - "opposite gender."); - -static const u8 sFastBallDesc[] = _( - "Works well on\n" - "very fast\n" - "Pokémon."); - -static const u8 sHeavyBallDesc[] = _( - "Works well on\n" - "very heavy\n" - "Pokémon."); - -static const u8 sDreamBallDesc[] = _( -#if B_DREAM_BALL_MODIFIER >= GEN_8 - "A Ball that works\n" - "well on sleeping\n" - "Pokémon."); -#else - "A Poké Ball used in\n" - "the Entree Forest."); -#endif - -static const u8 sSafariBallDesc[] = _( - "A special Ball that\n" - "is used only in the\n" - "Safari Zone."); - -static const u8 sSportBallDesc[] = _( - "A special Ball used\n" - "in the Bug-Catching\n" - "Contest."); - -static const u8 sParkBallDesc[] = _( - "A special Ball for\n" - "the Pal Park."); - -static const u8 sBeastBallDesc[] = _( - "A Ball designed to\n" - "catch Ultra Beasts."); - -static const u8 sCherishBallDesc[] = _( - "A rare Ball made\n" - "in commemoration\n" - "of some event."); - -// Medicine -static const u8 sPotionDesc[] = _( - "Restores the HP of\n" - "a Pokémon by\n" - "20 points."); - -static const u8 sSuperPotionDesc[] = _( - "Restores the HP of\n" - "a Pokémon by\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "60 points."); -#else - "50 points."); -#endif - -static const u8 sHyperPotionDesc[] = _( - "Restores the HP of\n" - "a Pokémon by\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "120 points."); -#else - "200 points."); -#endif - -static const u8 sMaxPotionDesc[] = _( - "Fully restores the\n" - "HP of a Pokémon."); - -static const u8 sFullRestoreDesc[] = _( - "Fully restores the\n" - "HP and status of a\n" - "Pokémon."); - -static const u8 sReviveDesc[] = _( - "Revives a fainted\n" - "Pokémon with half\n" - "its HP."); - -static const u8 sMaxReviveDesc[] = _( - "Revives a fainted\n" - "Pokémon with all\n" - "its HP."); - -static const u8 sFreshWaterDesc[] = _( - "A mineral water\n" - "that restores HP\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "by 30 points."); -#else - "by 50 points."); -#endif - -static const u8 sSodaPopDesc[] = _( - "A fizzy soda drink\n" - "that restores HP\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "by 50 points."); -#else - "by 60 points."); -#endif - -static const u8 sLemonadeDesc[] = _( - "A very sweet drink\n" - "that restores HP\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "by 70 points."); -#else - "by 80 points."); -#endif - -static const u8 sMoomooMilkDesc[] = _( - "A nutritious milk\n" - "that restores HP\n" - "by 100 points."); - -static const u8 sEnergyPowderDesc[] = _( - "A bitter powder\n" - "that restores HP\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "by 60 points."); -#else - "by 50 points."); -#endif - -static const u8 sEnergyRootDesc[] = _( - "A bitter root\n" - "that restores HP\n" -#if I_HEALTH_RECOVERY >= GEN_7 - "by 120 points."); -#else - "by 200 points."); -#endif - -static const u8 sHealPowderDesc[] = _( - "A bitter powder\n" - "that heals all\n" - "status problems."); - -static const u8 sRevivalHerbDesc[] = _( - "A very bitter herb\n" - "that revives a\n" - "fainted Pokémon."); - -static const u8 sAntidoteDesc[] = _( - "Heals a poisoned\n" - "Pokémon."); - -static const u8 sParalyzeHealDesc[] = _( - "Heals a paralyzed\n" - "Pokémon."); - -static const u8 sBurnHealDesc[] = _( - "Heals Pokémon\n" - "of a burn."); - -static const u8 sIceHealDesc[] = _( - "Defrosts a frozen\n" - "Pokémon."); - -static const u8 sAwakeningDesc[] = _( - "Awakens a sleeping\n" - "Pokémon."); - -static const u8 sFullHealDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sEtherDesc[] = _( - "Restores the PP\n" - "of a selected move\n" - "by 10."); - -static const u8 sMaxEtherDesc[] = _( - "Fully restores the\n" - "PP of a selected\n" - "move."); - -static const u8 sElixirDesc[] = _( - "Restores the PP\n" - "of all moves by 10."); - -static const u8 sMaxElixirDesc[] = _( - "Fully restores the\n" - "PP of a Pokémon's\n" - "moves."); - -static const u8 sBerryJuiceDesc[] = _( - "A 100% pure juice\n" - "that restores HP\n" - "by 20 points."); - -static const u8 sSacredAshDesc[] = _( - "Fully revives and\n" - "restores all\n" - "fainted Pokémon."); - -static const u8 sSweetHeartDesc[] = _( - "A sweet chocolate\n" - "that restores HP\n" - "by 20 points."); - -static const u8 sMaxHoneyDesc[] = _( - "Revives a fainted\n" - "Pokémon with all\n" - "its HP."); - -static const u8 sPewterCrunchiesDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sRageCandyBarDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sLavaCookieDesc[] = _( - "A local specialty\n" - "that heals all\n" - "status problems."); - -static const u8 sOldGateauDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sCasteliaconeDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sLumioseGaletteDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sShalourSableDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -static const u8 sBigMalasadaDesc[] = _( - "Heals all the\n" - "status problems of\n" - "one Pokémon."); - -// Vitamins -static const u8 sHPUpDesc[] = _( - "Raises the base HP\n" - "of one Pokémon."); - -static const u8 sProteinDesc[] = _( - "Raises the base\n" - "Attack stat of one\n" - "Pokémon."); - -static const u8 sIronDesc[] = _( - "Raises the base\n" - "Defense stat of\n" - "one Pokémon."); - -static const u8 sCalciumDesc[] = _( - "Raises the base\n" - "Sp. Atk stat of one\n" - "Pokémon."); - -static const u8 sZincDesc[] = _( - "Raises the base\n" - "Sp. Def stat of one\n" - "Pokémon."); - -static const u8 sCarbosDesc[] = _( - "Raises the base\n" - "Speed stat of one\n" - "Pokémon."); - -static const u8 sPPUpDesc[] = _( - "Raises the maximum\n" - "PP of a selected\n" - "move."); - -static const u8 sPPMaxDesc[] = _( - "Raises the PP of a\n" - "move to its maximum\n" - "points."); - -// EV Feathers -static const u8 sHealthFeatherDesc[] = _( - "An item that raises\n" - "the base HP of\n" - "a Pokémon."); - -static const u8 sMuscleFeatherDesc[] = _( - "An item that raises\n" - "the base Attack of\n" - "a Pokémon."); - -static const u8 sResistFeatherDesc[] = _( - "An item that raises\n" - "the base Defense\n" - "of a Pokémon."); - -static const u8 sGeniusFeatherDesc[] = _( - "An item that raises\n" - "the base Sp. Atk.\n" - "of a Pokémon."); - -static const u8 sCleverFeatherDesc[] = _( - "An item that raises\n" - "the base Sp. Def.\n" - "of a Pokémon."); - -static const u8 sSwiftFeatherDesc[] = _( - "An item that raises\n" - "the base Speed of\n" - "a Pokémon."); - -// Ability Modifiers -static const u8 sAbilityCapsuleDesc[] = _( - "Switches a Poké-\n" - "mon's ability."); - -static const u8 sAbilityPatchDesc[] = _( - "Turns the ability\n" - "of a Pokémon into\n" - "a rare ability."); - -// Mints -static const u8 sLonelyMintDesc[] = _( - "Can be smelled. It\n" - "ups Attack, but\n" - "reduces Defense."); - -static const u8 sAdamantMintDesc[] = _( - "Can be smelled. It\n" - "ups Attack, but\n" - "reduces Sp. Atk."); - -static const u8 sNaughtyMintDesc[] = _( - "Can be smelled. It\n" - "ups Attack, but\n" - "reduces Sp. Def."); - -static const u8 sBraveMintDesc[] = _( - "Can be smelled. It\n" - "ups Attack, but\n" - "reduces Speed."); - -static const u8 sBoldMintDesc[] = _( - "Can be smelled. It\n" - "ups Defense, but\n" - "reduces Attack."); - -static const u8 sImpishMintDesc[] = _( - "Can be smelled. It\n" - "ups Defense, but\n" - "reduces Sp. Atk."); - -static const u8 sLaxMintDesc[] = _( - "Can be smelled. It\n" - "ups Defense, but\n" - "reduces Sp. Def."); - -static const u8 sRelaxedMintDesc[] = _( - "Can be smelled. It\n" - "ups Defense, but\n" - "reduces Speed."); - -static const u8 sModestMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Atk, but\n" - "reduces Attack."); - -static const u8 sMildMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Atk, but\n" - "reduces Defense."); - -static const u8 sRashMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Atk, but\n" - "reduces Sp. Def."); - -static const u8 sQuietMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Atk, but\n" - "reduces Speed."); - -static const u8 sCalmMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Def, but\n" - "reduces Attack."); - -static const u8 sGentleMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Def, but\n" - "reduces Defense."); - -static const u8 sCarefulMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Def, but\n" - "reduces Sp. Atk."); - -static const u8 sSassyMintDesc[] = _( - "Can be smelled. It\n" - "ups Sp. Def, but\n" - "reduces Speed."); - -static const u8 sTimidMintDesc[] = _( - "Can be smelled. It\n" - "ups Speed, but\n" - "reduces Attack."); - -static const u8 sHastyMintDesc[] = _( - "Can be smelled. It\n" - "ups Speed, but\n" - "reduces Defense."); - -static const u8 sJollyMintDesc[] = _( - "Can be smelled. It\n" - "ups Speed, but\n" - "reduces Sp. Atk."); - -static const u8 sNaiveMintDesc[] = _( - "Can be smelled. It\n" - "ups Speed, but\n" - "reduces Sp. Def."); - -static const u8 sSeriousMintDesc[] = _( - "Can be smelled. It\n" - "ups Speed, but\n" - "reduces Attack."); - -// Candy -static const u8 sRareCandyDesc[] = _( - "Raises the level\n" - "of a Pokémon by\n" - "one."); - -static const u8 sExpCandyXSDesc[] = _( - "Gives a very small\n" - "amount of Exp. to\n" - "a single Pokémon."); - -static const u8 sExpCandySDesc[] = _( - "Gives a small\n" - "amount of Exp. to\n" - "a single Pokémon."); - -static const u8 sExpCandyMDesc[] = _( - "Gives a moderate\n" - "amount of Exp. to\n" - "a single Pokémon."); - -static const u8 sExpCandyLDesc[] = _( - "Gives a large\n" - "amount of Exp. to\n" - "a single Pokémon."); - -static const u8 sExpCandyXLDesc[] = _( - "Gives a very large\n" - "amount of Exp. to\n" - "a single Pokémon."); - -static const u8 sDynamaxCandyDesc[] = _( - "Raises the Dynamax\n" - "Level of a single\n" - "Pokémon by one."); - -// Medicinal Flutes -static const u8 sBlueFluteDesc[] = _( - "A glass flute that\n" - "awakens sleeping\n" - "Pokémon."); - -static const u8 sYellowFluteDesc[] = _( - "A glass flute that\n" - "snaps Pokémon\n" - "out of confusion."); - -static const u8 sRedFluteDesc[] = _( - "A glass flute that\n" - "snaps Pokémon\n" - "out of attraction."); - -// Encounter-modifying Flutes -static const u8 sBlackFluteDesc[] = _( - "A glass flute that\n" - "keeps away wild\n" - "Pokémon."); - -static const u8 sWhiteFluteDesc[] = _( - "A glass flute that\n" - "lures wild Pokémon."); - -// Encounter Modifiers -static const u8 sRepelDesc[] = _( - "Repels weak wild\n" - "Pokémon for 100\n" - "steps."); - -static const u8 sSuperRepelDesc[] = _( - "Repels weak wild\n" - "Pokémon for 200\n" - "steps."); - -static const u8 sMaxRepelDesc[] = _( - "Repels weak wild\n" - "Pokémon for 250\n" - "steps."); - -static const u8 sLureDesc[] = _( - "Makes Pokémon more\n" - "likely to appear\n" - "for 100 steps."); - -static const u8 sSuperLureDesc[] = _( - "Makes Pokémon more\n" - "likely to appear\n" - "for 200 steps."); - -static const u8 sMaxLureDesc[] = _( - "Makes Pokémon more\n" - "likely to appear\n" - "for 250 steps."); - -static const u8 sEscapeRopeDesc[] = _( - "Use to escape\n" - "instantly from a\n" - "cave or a dungeon."); - -// Battle items -static const u8 sXAttackDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises stat\n" - "Attack during\n" - "one battle."); -#else - "Raises the stat\n" - "Attack during one\n" - "battle."); -#endif - -static const u8 sXDefenseDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises stat\n" - "Defense during\n" - "one battle."); -#else - "Raises the stat\n" - "Defense during one\n" - "battle."); -#endif - -static const u8 sXSpAtkDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises stat\n" - "Sp. Atk during\n" - "one battle."); -#else - "Raises the stat\n" - "Sp. Atk during one\n" - "battle."); -#endif - -static const u8 sXSpDefDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises stat\n" - "Sp. Def during\n" - "one battle."); -#else - "Raises the stat\n" - "Sp. Def during one\n" - "battle."); -#endif - -static const u8 sXSpeedDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises stat\n" - "Speed during\n" - "one battle."); -#else - "Raises the stat\n" - "Speed during one\n" - "battle."); -#endif - -static const u8 sXAccuracyDesc[] = _( -#if B_X_ITEMS_BUFF >= GEN_7 - "Sharply raises move\n" - "accuracy during\n" - "one battle."); -#else - "Raises accuracy\n" - "of attack moves\n" - "during one battle."); -#endif - -static const u8 sDireHitDesc[] = _( - "Raises the\n" - "critical-hit ratio\n" - "during one battle."); - -static const u8 sGuardSpecDesc[] = _( - "Prevents stat\n" - "reduction when\n" - "used in battle."); - -// Escape Items -static const u8 sPokeDollDesc[] = _( - "Use to flee from\n" - "any battle with\n" - "a wild Pokémon."); - -static const u8 sFluffyTailDesc[] = _( - "Use to flee from\n" - "any battle with\n" - "a wild Pokémon."); - -static const u8 sPokeToyDesc[] = _( - "Use to flee from\n" - "any battle with\n" - "a wild Pokémon."); - -static const u8 sMaxMushroomsDesc[] = _( - "Raises every stat\n" - "during one battle\n" - "by one stage."); - -// Treasures -static const u8 sBottleCapDesc[] = _( - "A beautiful bottle\n" - "cap that gives off\n" - "a silver gleam."); - -static const u8 sGoldBottleCapDesc[] = _( - "A beautiful bottle\n" - "cap that gives off\n" - "a golden gleam."); - -static const u8 sNuggetDesc[] = _( - "A nugget of pure\n" - "gold. Can be sold at\n" - "a high price."); - -static const u8 sBigNuggetDesc[] = _( - "A big nugget made\n" - "of gold, sellable\n" - "at a high price."); - -static const u8 sTinyMushroomDesc[] = _( - "A plain mushroom\n" - "that would sell\n" - "at a cheap price."); - -static const u8 sBigMushroomDesc[] = _( - "A rare mushroom\n" - "that would sell at a\n" - "high price."); - -static const u8 sBalmMushroomDesc[] = _( - "A rare mushroom\n" - "that would sell at a\n" - "high price."); - -static const u8 sPearlDesc[] = _( - "A pretty pearl\n" - "that would sell at a\n" - "cheap price."); - -static const u8 sBigPearlDesc[] = _( - "A lovely large pearl\n" - "that would sell at a\n" - "high price."); - -static const u8 sPearlStringDesc[] = _( - "Very large pearls\n" - "that would sell at a\n" - "high price."); - -static const u8 sStardustDesc[] = _( - "Beautiful red sand.\n" - "Can be sold at a\n" - "high price."); - -static const u8 sStarPieceDesc[] = _( - "A red gem shard.\n" - "It would sell for a\n" - "very high price."); - -static const u8 sCometShardDesc[] = _( - "A comet's shard.\n" - "It would sell for a\n" - "high price."); - -static const u8 sShoalSaltDesc[] = _( - "Salt obtained from\n" - "deep inside the\n" - "Shoal Cave."); - -static const u8 sShoalShellDesc[] = _( - "A seashell found\n" - "deep inside the\n" - "Shoal Cave."); - -static const u8 sRedShardDesc[] = _( - "A shard from an\n" - "ancient item. Can\n" - "be sold cheaply."); - -static const u8 sBlueShardDesc[] = _( - "A shard from an\n" - "ancient item. Can\n" - "be sold cheaply."); - -static const u8 sYellowShardDesc[] = _( - "A shard from an\n" - "ancient item. Can\n" - "be sold cheaply."); - -static const u8 sGreenShardDesc[] = _( - "A shard from an\n" - "ancient item. Can\n" - "be sold cheaply."); - -static const u8 sHeartScaleDesc[] = _( - "A lovely scale.\n" - "It is coveted by\n" - "collectors."); - -static const u8 sHoneyDesc[] = _( - "Sweet honey that\n" - "attracts wild\n" - "Pokémon when used."); - -static const u8 sRareBoneDesc[] = _( - "A very rare bone.\n" - "It can be sold at\n" - "a high price."); - -static const u8 sOddKeystoneDesc[] = _( - "Voices can be heard\n" - "from this odd stone\n" - "occasionally."); - -static const u8 sPrettyFeatherDesc[] = _( - "A beautiful yet\n" - "plain feather that\n" - "does nothing."); - -static const u8 sRelicCopperDesc[] = _( - "A copper coin used\n" - "long ago. It sells\n" - "at a high price."); - -static const u8 sRelicSilverDesc[] = _( - "A silver coin used\n" - "long ago. It sells\n" - "at a high price."); - -static const u8 sRelicGoldDesc[] = _( - "A gold coin used\n" - "long ago. It sells\n" - "at a high price."); - -static const u8 sRelicVaseDesc[] = _( - "A vase made long\n" - "ago. It sells at\n" - "a high price."); - -static const u8 sRelicBandDesc[] = _( - "An old bracelet.\n" - "It sells at a\n" - "high price."); - -static const u8 sRelicStatueDesc[] = _( - "An old statue.\n" - "It sells at a\n" - "high price."); - -static const u8 sRelicCrownDesc[] = _( - "An old crown.\n" - "It sells at a\n" - "high price."); - -static const u8 sStrangeSouvenirDesc[] = _( - "An ornament that\n" - "depicts a Pokémon\n" - "from Alola."); - -// Fossils -static const u8 sHelixFossilDesc[] = _( - "A piece of an\n" - "ancient marine\n" - "Pokémon's seashell."); - -static const u8 sDomeFossilDesc[] = _( - "A piece of an\n" - "ancient marine\n" - "Pokémon's shell."); - -static const u8 sOldAmberDesc[] = _( - "A stone containing\n" - "the genes of an\n" - "ancient Pokémon."); - -static const u8 sRootFossilDesc[] = _( - "A fossil of an\n" - "ancient, seafloor-\n" - "dwelling Pokémon."); - -static const u8 sClawFossilDesc[] = _( - "A fossil of an\n" - "ancient, seafloor-\n" - "dwelling Pokémon."); - -static const u8 sArmorFossilDesc[] = _( - "A piece of a\n" - "prehistoric Poké-\n" - "mon's head."); - -static const u8 sSkullFossilDesc[] = _( - "A piece of a\n" - "prehistoric Poké-\n" - "mon's head."); - -static const u8 sCoverFossilDesc[] = _( - "A piece of a\n" - "prehistoric Poké-\n" - "mon's back."); - -static const u8 sPlumeFossilDesc[] = _( - "A piece of a\n" - "prehistoric Poké-\n" - "mon's wing."); - -static const u8 sJawFossilDesc[] = _( - "A piece of a prehis-\n" - "toric Pokémon's\n" - "large jaw."); - -static const u8 sSailFossilDesc[] = _( - "A piece of a prehis-\n" - "toric Pokémon's\n" - "skin sail."); - -static const u8 sFossilizedBirdDesc[] = _( - "A fossil of an\n" - "ancient, sky-\n" - "soaring Pokémon."); - -static const u8 sFossilizedFishDesc[] = _( - "A fossil of an\n" - "ancient, sea-\n" - "dwelling Pokémon."); - -static const u8 sFossilizedDrakeDesc[] = _( - "A fossil of an\n" - "ancient, land-\n" - "roaming Pokémon."); - -static const u8 sFossilizedDinoDesc[] = _( - "A fossil of an\n" - "ancient, sea-\n" - "dwelling Pokémon."); - -// Mulch -static const u8 sGrowthMulchDesc[] = _( - "A fertilizer that\n" - "accelerates the\n" - "growth of Berries."); - -static const u8 sDampMulchDesc[] = _( - "A fertilizer that\n" - "decelerates the\n" - "growth of Berries."); - -static const u8 sStableMulchDesc[] = _( - "A fertilizer that\n" - "ups the life time\n" - "of Berry trees."); - -static const u8 sGooeyMulchDesc[] = _( - "A fertilizer that\n" - "makes more Berries\n" - "regrow after fall."); - -static const u8 sRichMulchDesc[] = _( - "A fertilizer that\n" - "ups the number of\n" - "Berries harvested."); - -static const u8 sSurpriseMulchDesc[] = _( - "A fertilizer that\n" - "ups the chance of\n" - "Berry mutations."); - -static const u8 sBoostMulchDesc[] = _( - "A fertilizer that\n" - "ups the dry speed\n" - "of soft soil."); - -static const u8 sAmazeMulchDesc[] = _( - "A fertilizer Rich\n" - "Surprising and\n" - "Boosting as well."); - -// Apricorns -static const u8 sRedApricornDesc[] = _( - "A red apricorn.\n" - "It assails your\n" - "nostrils."); - -static const u8 sBlueApricornDesc[] = _( - "A blue apricorn.\n" - "It smells a bit\n" - "like grass."); - -static const u8 sYellowApricornDesc[] = _( - "A yellow apricorn.\n" - "It has an invigor-\n" - "ating scent."); - -static const u8 sGreenApricornDesc[] = _( - "A green apricorn.\n" - "It has a strange,\n" - "aromatic scent."); - -static const u8 sPinkApricornDesc[] = _( - "A pink apricorn.\n" - "It has a nice,\n" - "sweet scent."); - -static const u8 sWhiteApricornDesc[] = _( - "A white apricorn.\n" - "It doesn't smell\n" - "like anything."); - -static const u8 sBlackApricornDesc[] = _( - "A black apricorn.\n" - "It has an inde-\n" - "scribable scent."); - -static const u8 sWishingPieceDesc[] = _( - "Throw into a\n" - "{PKMN} Den to attract\n" - "Dynamax Pokémon."); - -static const u8 sGalaricaTwigDesc[] = _( - "A twig from a tree\n" - "in Galar called\n" - "Galarica."); - -static const u8 sArmoriteOreDesc[] = _( - "A rare ore. Can be\n" - "found in the Isle\n" - "of Armor at Galar."); - -static const u8 sDyniteOreDesc[] = _( - "A mysterious ore.\n" - "It can be found in\n" - "Galar's Max Lair."); - -// Mail -static const u8 sOrangeMailDesc[] = _( - "A Zigzagoon-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sHarborMailDesc[] = _( - "A Wingull-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sGlitterMailDesc[] = _( - "A Pikachu-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sMechMailDesc[] = _( - "A Magnemite-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sWoodMailDesc[] = _( - "A Slakoth-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sWaveMailDesc[] = _( - "A Wailmer-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sBeadMailDesc[] = _( - "Mail featuring a\n" - "sketch of the\n" - "holding Pokémon."); - -static const u8 sShadowMailDesc[] = _( - "A Duskull-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sTropicMailDesc[] = _( - "A Bellossom-print\n" - "Mail to be held by\n" - "a Pokémon."); - -static const u8 sDreamMailDesc[] = _( - "Mail featuring a\n" - "sketch of the\n" - "holding Pokémon."); - -static const u8 sFabMailDesc[] = _( - "A gorgeous-print\n" - "Mail to be held\n" - "by a Pokémon."); - -static const u8 sRetroMailDesc[] = _( - "Mail featuring the\n" - "drawings of three\n" - "Pokémon."); - -// Evolution Items -static const u8 sFireStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sWaterStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sThunderStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sLeafStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sIceStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sSunStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sMoonStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sShinyStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sDuskStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sDawnStoneDesc[] = _( - "Makes certain\n" - "species of Pokémon\n" - "evolve."); - -static const u8 sSweetAppleDesc[] = _( - "A very sweet apple\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sTartAppleDesc[] = _( - "A very tart apple\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sCrackedPotDesc[] = _( - "A cracked teapot\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sChippedPotDesc[] = _( - "A chipped teapot\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sGalaricaCuffDesc[] = _( - "A cuff from Galar\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sGalaricaWreathDesc[] = _( - "A wreath made in\n" - "Galar. Makes some\n" - "Pokémon evolve."); - -static const u8 sDragonScaleDesc[] = _( - "A strange scale\n" - "held by Dragon-\n" - "type Pokémon."); - -static const u8 sUpgradeDesc[] = _( - "A peculiar box made\n" - "by Silph Co."); - -static const u8 sProtectorDesc[] = _( - "Loved by a certain\n" - "Pokémon. It's stiff\n" - "and heavy."); - -static const u8 sElectirizerDesc[] = _( - "Loved by a certain\n" - "Pokémon. It's full\n" - "of electric energy."); - -static const u8 sMagmarizerDesc[] = _( - "Loved by a certain\n" - "Pokémon. It's full\n" - "of magma energy."); - -static const u8 sDubiousDiscDesc[] = _( - "A transparent device\n" - "overflowing with\n" - "dubious data."); - -static const u8 sReaperClothDesc[] = _( - "Loved by a certain\n" - "Pokémon. Imbued with\n" - "spiritual energy."); - -static const u8 sPrismScaleDesc[] = _( - "A mysterious scale\n" - "that evolves certain\n" - "Pokémon. It shines."); - -static const u8 sWhippedDreamDesc[] = _( - "A soft and sweet\n" - "treat loved by\n" - "a certain Pokémon."); - -static const u8 sSachetDesc[] = _( - "A sachet filled with\n" - "perfumes loved by\n" - "a certain Pokémon."); - -static const u8 sOvalStoneDesc[] = _( - "Makes a certain\n" - "Pokémon evolve. It's\n" - "shaped like an egg."); - -static const u8 sStrawberrySweetDesc[] = _( - "Strawberry-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sLoveSweetDesc[] = _( - "A heart-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sBerrySweetDesc[] = _( - "A berry-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sCloverSweetDesc[] = _( - "A clover-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sFlowerSweetDesc[] = _( - "A flower-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sStarSweetDesc[] = _( - "A star-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sRibbonSweetDesc[] = _( - "A ribbon-shaped\n" - "sweet loved by\n" - "Milcery."); - -static const u8 sEverstoneDesc[] = _( - "A wondrous hold\n" - "item that prevents\n" - "evolution."); - -static const u8 sBlackAuguriteDesc[] = _( - "A black stone that\n" - "makes some Pokémon\n" - "evolve.");; - -static const u8 sLinkingCordDesc[] = _( - "A mysterious string\n" - "that makes some\n" - "Pokémon evolve."); - -static const u8 sPeatBlockDesc[] = _( - "A block of material\n" - "that makes some\n" - "Pokémon evolve."); - -// Nectars -static const u8 sRedNectarDesc[] = _( - "Flower nectar that\n" - "changes the form\n" - "of certain Pokémon."); - -static const u8 sYellowNectarDesc[] = _( - "Flower nectar that\n" - "changes the form\n" - "of certain Pokémon."); - -static const u8 sPinkNectarDesc[] = _( - "Flower nectar that\n" - "changes the form\n" - "of certain Pokémon."); - -static const u8 sPurpleNectarDesc[] = _( - "Flower nectar that\n" - "changes the form\n" - "of certain Pokémon."); - -// Plates -static const u8 sFlamePlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Fire-type moves."); - -static const u8 sSplashPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Water-type moves."); - -static const u8 sZapPlateDesc[] = _( - "A tablet that ups\n" - "the power of Elec-\n" - "tric-type moves."); - -static const u8 sMeadowPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Grass-type moves."); - -static const u8 sIciclePlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Ice-type moves."); - -static const u8 sFistPlateDesc[] = _( - "A tablet that ups\n" - "the power of Fight-\n" - "ing-type moves."); - -static const u8 sToxicPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Poison-type moves."); - -static const u8 sEarthPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Ground-type moves."); - -static const u8 sSkyPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Flying-type moves."); - -static const u8 sMindPlateDesc[] = _( - "A tablet that ups\n" - "the power of Psy\n" - "chic-type moves."); - -static const u8 sInsectPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Bug-type moves."); - -static const u8 sStonePlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Rock-type moves."); - -static const u8 sSpookyPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Ghost-type moves."); - -static const u8 sDracoPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Dragon-type moves."); - -static const u8 sDreadPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Dark-type moves."); - -static const u8 sIronPlateDesc[] = _( - "A tablet that ups\n" - "the power of\n" - "Steel-type moves."); - -static const u8 sPixiePlateDesc[] = _( - "A stone tablet that\n" - "boosts the power of\n" - "Fairy-type moves."); - -// Drives -static const u8 sDouseDriveDesc[] = _( - "Changes Genesect's\n" - "Techno Blast to\n" - "Water-type."); - -static const u8 sShockDriveDesc[] = _( - "Changes Genesect's\n" - "Techno Blast to\n" - "Electric-type."); - -static const u8 sBurnDriveDesc[] = _( - "Changes Genesect's\n" - "Techno Blast to\n" - "Fire-type."); - -static const u8 sChillDriveDesc[] = _( - "Changes Genesect's\n" - "Techno Blast to\n" - "Ice-type."); - -// Memories -static const u8 sFireMemoryDesc[] = _( - "A disc with Fire\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sWaterMemoryDesc[] = _( - "A disc with Water\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sElectricMemoryDesc[] = _( - "A disc with Electric\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sGrassMemoryDesc[] = _( - "A disc with Grass\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sIceMemoryDesc[] = _( - "A disc with Ice\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sFightingMemoryDesc[] = _( - "A disc with Fighting\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sPoisonMemoryDesc[] = _( - "A disc with Poison\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sGroundMemoryDesc[] = _( - "A disc with Ground\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sFlyingMemoryDesc[] = _( - "A disc with Flying\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sPsychicMemoryDesc[] = _( - "A disc with Psychic\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sBugMemoryDesc[] = _( - "A disc with Bug\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sRockMemoryDesc[] = _( - "A disc with Rock\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sGhostMemoryDesc[] = _( - "A disc with Ghost\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sDragonMemoryDesc[] = _( - "A disc with Dragon\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sDarkMemoryDesc[] = _( - "A disc with Dark\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sSteelMemoryDesc[] = _( - "A disc with Steel\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sFairyMemoryDesc[] = _( - "A disc with Fairy\n" - "type data. It swaps\n" - "Silvally's type."); - -static const u8 sRustedSwordDesc[] = _( - "A rusty sword. A\n" - "hero used it to\n" - "halt a disaster."); - -static const u8 sRustedShieldDesc[] = _( - "A rusty shield. A\n" - "hero used it to\n" - "halt a disaster."); - -// Colored Orbs -static const u8 sRedOrbDesc[] = _( - "A red, glowing orb\n" - "said to contain an\n" - "ancient power."); - -static const u8 sBlueOrbDesc[] = _( - "A blue, glowing orb\n" - "said to contain an\n" - "ancient power."); - -// Mega Stones -static const u8 sVenusauriteDesc[] = _( - "This stone enables\n" - "Venusaur to Mega\n" - "Evolve in battle."); - -static const u8 sCharizarditeDesc[] = _( - "This stone enables\n" - "Charizard to Mega\n" - "Evolve in battle."); - -static const u8 sBlastoisiniteDesc[] = _( - "This stone enables\n" - "Blastoise to Mega\n" - "Evolve in battle."); - -static const u8 sBeedrilliteDesc[] = _( - "This stone enables\n" - "Beedrill to Mega\n" - "Evolve in battle."); - -static const u8 sPidgeotiteDesc[] = _( - "This stone enables\n" - "Pidgeot to Mega\n" - "Evolve in battle."); - -static const u8 sAlakaziteDesc[] = _( - "This stone enables\n" - "Alakazam to Mega\n" - "Evolve in battle."); - -static const u8 sSlowbroniteDesc[] = _( - "This stone enables\n" - "Slowbro to Mega\n" - "Evolve in battle."); - -static const u8 sGengariteDesc[] = _( - "This stone enables\n" - "Gengar to Mega\n" - "Evolve in battle."); - -static const u8 sKangaskhaniteDesc[] = _( - "This stone enables\n" - "Kangaskhan to Mega\n" - "Evolve in battle."); - -static const u8 sPinsiriteDesc[] = _( - "This stone enables\n" - "Pinsir to Mega\n" - "Evolve in battle."); - -static const u8 sGyaradositeDesc[] = _( - "This stone enables\n" - "Gyarados to Mega\n" - "Evolve in battle."); - -static const u8 sAerodactyliteDesc[] = _( - "This stone enables\n" - "Aerodactyl to Mega\n" - "Evolve in battle."); - -static const u8 sMewtwoniteDesc[] = _( - "This stone enables\n" - "Mewtwo to Mega\n" - "Evolve in battle."); - -static const u8 sAmpharositeDesc[] = _( - "This stone enables\n" - "Ampharos to Mega\n" - "Evolve in battle."); - -static const u8 sSteelixiteDesc[] = _( - "This stone enables\n" - "Steelix to Mega\n" - "Evolve in battle."); - -static const u8 sScizoriteDesc[] = _( - "This stone enables\n" - "Scizor to Mega\n" - "Evolve in battle."); - -static const u8 sHeracroniteDesc[] = _( - "This stone enables\n" - "Heracross to Mega\n" - "Evolve in battle."); - -static const u8 sHoundoominiteDesc[] = _( - "This stone enables\n" - "Houndoom to Mega\n" - "Evolve in battle."); - -static const u8 sTyranitariteDesc[] = _( - "This stone enables\n" - "Tyranitar to Mega\n" - "Evolve in battle."); - -static const u8 sSceptiliteDesc[] = _( - "This stone enables\n" - "Sceptile to Mega\n" - "Evolve in battle."); - -static const u8 sBlazikeniteDesc[] = _( - "This stone enables\n" - "Blaziken to Mega\n" - "Evolve in battle."); - -static const u8 sSwampertiteDesc[] = _( - "This stone enables\n" - "Swampert to Mega\n" - "Evolve in battle."); - -static const u8 sGardevoiriteDesc[] = _( - "This stone enables\n" - "Gardevoir to Mega\n" - "Evolve in battle."); - -static const u8 sSableniteDesc[] = _( - "This stone enables\n" - "Sableye to Mega\n" - "Evolve in battle."); - -static const u8 sMawiliteDesc[] = _( - "This stone enables\n" - "Mawile to Mega\n" - "Evolve in battle."); - -static const u8 sAggroniteDesc[] = _( - "This stone enables\n" - "Aggron to Mega\n" - "Evolve in battle."); - -static const u8 sMedichamiteDesc[] = _( - "This stone enables\n" - "Medicham to Mega\n" - "Evolve in battle."); - -static const u8 sManectiteDesc[] = _( - "This stone enables\n" - "Manectric to Mega\n" - "Evolve in battle."); - -static const u8 sSharpedoniteDesc[] = _( - "This stone enables\n" - "Sharpedo to Mega\n" - "Evolve in battle."); - -static const u8 sCameruptiteDesc[] = _( - "This stone enables\n" - "Camerupt to Mega\n" - "Evolve in battle."); - -static const u8 sAltarianiteDesc[] = _( - "This stone enables\n" - "Altaria to Mega\n" - "Evolve in battle."); - -static const u8 sBanettiteDesc[] = _( - "This stone enables\n" - "Banette to Mega\n" - "Evolve in battle."); - -static const u8 sAbsoliteDesc[] = _( - "This stone enables\n" - "Absol to Mega\n" - "Evolve in battle."); - -static const u8 sGlalititeDesc[] = _( - "This stone enables\n" - "Glalie to Mega\n" - "Evolve in battle."); - -static const u8 sSalamenciteDesc[] = _( - "This stone enables\n" - "Salamence to Mega\n" - "Evolve in battle."); - -static const u8 sMetagrossiteDesc[] = _( - "This stone enables\n" - "Metagross to Mega\n" - "Evolve in battle."); - -static const u8 sLatiasiteDesc[] = _( - "This stone enables\n" - "Latias to Mega\n" - "Evolve in battle."); - -static const u8 sLatiositeDesc[] = _( - "This stone enables\n" - "Latios to Mega\n" - "Evolve in battle."); - -static const u8 sLopunniteDesc[] = _( - "This stone enables\n" - "Lopunny to Mega\n" - "Evolve in battle."); - -static const u8 sGarchompiteDesc[] = _( - "This stone enables\n" - "Garchomp to Mega\n" - "Evolve in battle."); - -static const u8 sLucarioniteDesc[] = _( - "This stone enables\n" - "Lucario to Mega\n" - "Evolve in battle."); - -static const u8 sAbomasiteDesc[] = _( - "This stone enables\n" - "Abomasnow to Mega\n" - "Evolve in battle."); - -static const u8 sGalladiteDesc[] = _( - "This stone enables\n" - "Gallade to Mega\n" - "Evolve in battle."); - -static const u8 sAudiniteDesc[] = _( - "This stone enables\n" - "Audino to Mega\n" - "Evolve in battle."); - -static const u8 sDianciteDesc[] = _( - "This stone enables\n" - "Diancie to Mega\n" - "Evolve in battle."); - -// Gems -static const u8 sNormalGemDesc[] = _( - "Increases the\n" - "power of Normal\n" - "Type moves."); - -static const u8 sFireGemDesc[] = _( - "Increases the\n" - "power of Fire\n" - "Type moves."); - -static const u8 sWaterGemDesc[] = _( - "Increases the\n" - "power of Water\n" - "Type moves."); - -static const u8 sElectricGemDesc[] = _( - "Increases the\n" - "power of Electric\n" - "Type moves."); - -static const u8 sGrassGemDesc[] = _( - "Increases the\n" - "power of Grass\n" - "Type moves."); - -static const u8 sIceGemDesc[] = _( - "Increases the\n" - "power of Ice\n" - "Type moves."); - -static const u8 sFightingGemDesc[] = _( - "Increases the\n" - "power of Fighting\n" - "Type moves."); - -static const u8 sPoisonGemDesc[] = _( - "Increases the\n" - "power of Poison\n" - "Type moves."); - -static const u8 sGroundGemDesc[] = _( - "Increases the\n" - "power of Ground\n" - "Type moves."); - -static const u8 sFlyingGemDesc[] = _( - "Increases the\n" - "power of Flying\n" - "Type moves."); - -static const u8 sPsychicGemDesc[] = _( - "Increases the\n" - "power of Psychic\n" - "Type moves."); - -static const u8 sBugGemDesc[] = _( - "Increases the\n" - "power of Bug\n" - "Type moves."); - -static const u8 sRockGemDesc[] = _( - "Increases the\n" - "power of Rock\n" - "Type moves."); - -static const u8 sGhostGemDesc[] = _( - "Increases the\n" - "power of Ghost\n" - "Type moves."); - -static const u8 sDragonGemDesc[] = _( - "Increases the\n" - "power of Dragon\n" - "Type moves."); - -static const u8 sDarkGemDesc[] = _( - "Increases the\n" - "power of Dark\n" - "Type moves."); - -static const u8 sSteelGemDesc[] = _( - "Increases the\n" - "power of Steel\n" - "Type moves."); - -static const u8 sFairyGemDesc[] = _( - "Increases the\n" - "power of Fairy\n" - "Type moves."); - -// Z-Crystals -static const u8 sNormaliumZDesc[] = _( - "Upgrade Normal-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sFiriumZDesc[] = _( - "Upgrade Fire-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sWateriumZDesc[] = _( - "Upgrade Water-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sElectriumZDesc[] = _( - "Upgrade Electric-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sGrassiumZDesc[] = _( - "Upgrade Grass-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sIciumZDesc[] = _( - "Upgrade Ice-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sFightiniumZDesc[] = _( - "Upgrade Fighting-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sPoisoniumZDesc[] = _( - "Upgrade Poison-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sGroundiumZDesc[] = _( - "Upgrade Ground-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sFlyiniumZDesc[] = _( - "Upgrade Flying-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sPsychiumZDesc[] = _( - "Upgrade Psychic-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sBuginiumZDesc[] = _( - "Upgrade Bug-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sRockiumZDesc[] = _( - "Upgrade Rock-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sGhostiumZDesc[] = _( - "Upgrade Ghost-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sDragoniumZDesc[] = _( - "Upgrade Dragon-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sDarkiniumZDesc[] = _( - "Upgrade Dark-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sSteeliumZDesc[] = _( - "Upgrade Steel-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sFairiumZDesc[] = _( - "Upgrade Fairy-\n" - "type moves into\n" - "Z-Moves."); - -static const u8 sPikaniumZDesc[] = _( - "Upgrade Pikachu's\n" - "Volt Tackle\n" - "into a Z-Move."); - -static const u8 sEeviumZDesc[] = _( - "Upgrade Eevee's\n" - "Last Resort\n" - "into a Z-Move."); - -static const u8 sSnorliumZDesc[] = _( - "Upgrade Snorlax's\n" - "Giga Impact\n" - "into a Z-Move."); - -static const u8 sMewniumZDesc[] = _( - "Upgrade Mew's\n" - "Psychic into\n" - "a Z-Move."); - -static const u8 sDecidiumZDesc[] = _( - "Upgrade Decidu-\n" - "eye's Spirit Sha-\n" - "ckle into a Z-Move."); - -static const u8 sInciniumZDesc[] = _( - "Upgrade Incine-\n" - "roar's Darkest La-\n" - "riat into a Z-Move."); - -static const u8 sPrimariumZDesc[] = _( - "Upgrade Primarina's\n" - "Sparkling Aria\n" - "into a Z-Move."); - -static const u8 sLycaniumZDesc[] = _( - "Upgrade Lycanroc's\n" - "Stone Edge\n" - "into a Z-Move."); - -static const u8 sMimikiumZDesc[] = _( - "Upgrade Mimikyu's\n" - "Play Rough\n" - "into a Z-Move."); - -static const u8 sKommoniumZDesc[] = _( - "Upgrade Kommo-o's\n" - "Clanging Scales\n" - "into a Z-Move."); - -static const u8 sTapuniumZDesc[] = _( - "Upgrade the tapu's\n" - "Nature's Madness\n" - "into a Z-Move."); - -static const u8 sSolganiumZDesc[] = _( - "Upgrade Solgaleo's\n" - "Sunsteel Strike\n" - "into a Z-Move."); - -static const u8 sLunaliumZDesc[] = _( - "Upgrade Lunala's\n" - "Moongeist Beam\n" - "into a Z-Move."); - -static const u8 sMarshadiumZDesc[] = _( - "Upgrade Marsha-\n" - "dow's Spectral Thi-\n" - "ef into a Z-Move."); - -static const u8 sAloraichiumZDesc[] = _( - "Upgrade Alolan\n" - "Raichu's Thunder-\n" - "bolt into a Z-Move."); - -static const u8 sPikashuniumZDesc[] = _( - "Upgrade Pikachu w/\n" - "a cap's Thunderbolt\n" - "into a Z-Move."); - -static const u8 sUltranecroziumZDesc[] = _( - "A crystal to turn\n" - "fused Necrozma\n" - "into a new form."); - -// Species-specific Held Items -static const u8 sLightBallDesc[] = _( - "A hold item that\n" - "raises the Atk and\n" - "Sp. Atk of Pikachu."); - -static const u8 sLeekDesc[] = _( - "A hold item that\n" - "raises Farfetch'd's\n" - "critical-hit ratio."); - -static const u8 sThickClubDesc[] = _( - "A hold item that \n" - "raises Cubone or\n" - "Marowak's Attack."); - -static const u8 sLuckyPunchDesc[] = _( - "A hold item that\n" - "raises Chansey's\n" - "critical-hit rate."); - -static const u8 sMetalPowderDesc[] = _( - "A hold item that\n" - "raises Ditto's\n" - "Defense."); - -static const u8 sQuickPowderDesc[] = _( - "An item to be held\n" - "by Ditto. This odd\n" - "powder boosts Speed."); - -static const u8 sDeepSeaScaleDesc[] = _( - "A hold item that\n" - "raises the Sp. Def\n" - "of Clamperl."); - -static const u8 sDeepSeaToothDesc[] = _( - "A hold item that\n" - "raises the Sp. Atk\n" - "of Clamperl."); - -static const u8 sSoulDewDesc[] = _( -#if B_SOUL_DEW_BOOST >= GEN_7 - "Powers up Latios' &\n" - "Latias' Psychic and\n" - "Dragon-type moves."); -#else - "Hold item: raises\n" - "Sp. Atk & Sp. Def of\n" - "Latios & Latias."); -#endif - -static const u8 sAdamantOrbDesc[] = _( - "Boosts the power of\n" - "Dialga's Dragon and\n" - "Steel-type moves."); - -static const u8 sLustrousOrbDesc[] = _( - "Boosts the power of\n" - "Palkia's Dragon and\n" - "Water-type moves."); - -static const u8 sGriseousOrbDesc[] = _( - "Powers up Giratina's\n" - "Dragon and Ghost-\n" - "type moves."); - -// Incenses -static const u8 sSeaIncenseDesc[] = _( - "A hold item that\n" - "slightly boosts\n" - "Water-type moves."); - -static const u8 sLaxIncenseDesc[] = _( - "A hold item that\n" - "slightly lowers the\n" - "foe's accuracy."); - -static const u8 sOddIncenseDesc[] = _( - "A hold item that\n" - "boosts Psychic-\n" - "type moves."); - -static const u8 sRockIncenseDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Rock-type moves."); - -static const u8 sFullIncenseDesc[] = _( - "A held item that\n" - "makes the holder\n" - "move slower."); - -static const u8 sWaveIncenseDesc[] = _( - "A hold item that\n" - "slightly boosts\n" - "Water-type moves."); - -static const u8 sRoseIncenseDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Grass-type moves."); - -static const u8 sLuckIncenseDesc[] = _( - "Doubles money in\n" - "battle if the\n" - "holder takes part."); - -static const u8 sPureIncenseDesc[] = _( - "A hold item that\n" - "helps repel wild\n" - "Pokémon."); - -// Contest Scarves -static const u8 sRedScarfDesc[] = _( - "A hold item that\n" - "raises Cool in\n" - "Contests."); - -static const u8 sBlueScarfDesc[] = _( - "A hold item that\n" - "raises Beauty in\n" - "Contests."); - -static const u8 sPinkScarfDesc[] = _( - "A hold item that\n" - "raises Cute in\n" - "Contests."); - -static const u8 sGreenScarfDesc[] = _( - "A hold item that\n" - "raises Smart in\n" - "Contests."); - -static const u8 sYellowScarfDesc[] = _( - "A hold item that\n" - "raises Tough in\n" - "Contests."); - -// EV Gain Modifiers -static const u8 sMachoBraceDesc[] = _( - "A hold item that\n" - "promotes growth,\n" - "but reduces Speed."); - -static const u8 sPowerWeightDesc[] = _( - "A hold item that\n" - "promotes HP gain,\n" - "but reduces Speed."); - -static const u8 sPowerBracerDesc[] = _( - "A hold item that\n" - "promotes Atk gain,\n" - "but reduces Speed."); - -static const u8 sPowerBeltDesc[] = _( - "A hold item that\n" - "promotes Def gain,\n" - "but reduces Speed."); - -static const u8 sPowerLensDesc[] = _( - "Hold item that pro-\n" - "motes Sp. Atk gain,\n" - "but reduces Speed."); - -static const u8 sPowerBandDesc[] = _( - "Hold item that pro-\n" - "motes Sp. Def gain,\n" - "but reduces Speed."); - -static const u8 sPowerAnkletDesc[] = _( - "A hold item that\n" - "promotes Spd gain,\n" - "but reduces Speed."); - -// Type-boosting Held Items -static const u8 sSilkScarfDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Normal-type moves."); - -static const u8 sCharcoalDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Fire-type moves."); - -static const u8 sMysticWaterDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Water-type moves."); - -static const u8 sMagnetDesc[] = _( - "A hold item that\n" - "boosts Electric-\n" - "type moves."); - -static const u8 sMiracleSeedDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Grass-type moves."); - -static const u8 sNeverMeltIceDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Ice-type moves."); - -static const u8 sBlackBeltDesc[] = _( - "A hold item that\n" - "boosts Fighting-\n" - "type moves."); - -static const u8 sPoisonBarbDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Poison-type moves."); - -static const u8 sSoftSandDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Ground-type moves."); - -static const u8 sSharpBeakDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Flying-type moves."); - -static const u8 sTwistedSpoonDesc[] = _( - "A hold item that\n" - "boosts Psychic-\n" - "type moves."); - -static const u8 sSilverPowderDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Bug-type moves."); - -static const u8 sHardStoneDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Rock-type moves."); - -static const u8 sSpellTagDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Ghost-type moves."); - -static const u8 sDragonFangDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Dragon-type moves."); - -static const u8 sBlackGlassesDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Dark-type moves."); - -static const u8 sMetalCoatDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Steel-type moves."); - -// Choice Items -static const u8 sChoiceBandDesc[] = _( - "Raises a move's\n" - "power, but permits\n" - "only that move."); - -static const u8 sChoiceSpecsDesc[] = _( - "Boosts Sp. Atk, but\n" - "allows the use of\n" - "only one move."); - -static const u8 sChoiceScarfDesc[] = _( - "Boosts Speed, but\n" - "allows the use of\n" - "only one move."); - -// Status Orbs -static const u8 sFlameOrbDesc[] = _( - "A bizarre orb that\n" - "inflicts a burn on\n" - "holder in battle."); - -static const u8 sToxicOrbDesc[] = _( - "A bizarre orb that\n" - "badly poisons the\n" - "holder in battle."); - -// Weather Rocks -static const u8 sDampRockDesc[] = _( - "Extends the length\n" - "of Rain Dance if\n" - "used by the holder."); - -static const u8 sHeatRockDesc[] = _( - "Extends the length\n" - "of Sunny Day if\n" - "used by the holder."); - -static const u8 sSmoothRockDesc[] = _( - "Extends the length\n" - "of Sandstorm if\n" - "used by the holder."); - -static const u8 sIcyRockDesc[] = _( - "Extends the length\n" - "of the move Hail\n" - "used by the holder."); - -// Terrain Seeds -static const u8 sElectricSeedDesc[] = _( - "Boosts Defense on\n" - "Electric Terrain,\n" - "but only one time."); - -static const u8 sPsychicSeedDesc[] = _( - "Boosts Sp. Def. on\n" - "Psychic Terrain,\n" - "but only one time."); - -static const u8 sMistySeedDesc[] = _( - "Boosts Sp. Def. on\n" - "Misty Terrain,\n" - "but only one time."); - -static const u8 sGrassySeedDesc[] = _( - "Boosts Defense on\n" - "Grassy Terrain,\n" - "but only one time."); - -// Type-activated Stat Modifiers -static const u8 sAbsorbBulbDesc[] = _( - "Raises Sp. Atk if\n" - "the holder is hit by\n" - "a Water-type move."); - -static const u8 sCellBatteryDesc[] = _( - "Raises Atk if the\n" - "holder is hit by an\n" - "Electric-type move."); - -static const u8 sLuminousMossDesc[] = _( - "Raises Sp. Def if\n" - "the holder is hit by\n" - "a Water-type move."); - -static const u8 sSnowballDesc[] = _( - "Raises Atk if its\n" - "holder is hit by an\n" - "Ice-type move."); - -// Misc. Held Items -static const u8 sBrightPowderDesc[] = _( - "A hold item that\n" - "casts a glare to\n" - "reduce accuracy."); - -static const u8 sWhiteHerbDesc[] = _( - "A hold item that\n" - "restores any\n" - "lowered stat."); - -static const u8 sExpShareDesc[] = _( -#if I_EXP_SHARE_ITEM >= GEN_6 - "This device gives\n" - "exp. to other\n" - "party members."); -#else - "A hold item that\n" - "gets Exp. points\n" - "from battles."); -#endif - -static const u8 sQuickClawDesc[] = _( - "A hold item that\n" - "occasionally allows\n" - "the first strike."); - -static const u8 sSootheBellDesc[] = _( - "A hold item that\n" - "calms spirits and\n" - "fosters friendship."); - -#if B_MENTAL_HERB >= GEN_5 -static const u8 sMentalHerbDesc[] = _( - "Snaps Pokémon out\n" - "of move-binding\n" - "effects."); -#else -static const u8 sMentalHerbDesc[] = _( - "A hold item that\n" - "snaps Pokémon out\n" - "of infatuation."); -#endif - -static const u8 sKingsRockDesc[] = _( - "A hold item that\n" - "may cause flinching\n" - "when the foe is hit."); - -static const u8 sAmuletCoinDesc[] = _( - "Doubles money in\n" - "battle if the\n" - "holder takes part."); - -static const u8 sCleanseTagDesc[] = _( - "A hold item that\n" - "helps repel wild\n" - "Pokémon."); - -static const u8 sSmokeBallDesc[] = _( - "A hold item that\n" - "assures fleeing\n" - "from wild Pokémon."); - -static const u8 sFocusBandDesc[] = _( - "A hold item that\n" - "occasionally\n" - "prevents fainting."); - -static const u8 sLuckyEggDesc[] = _( - "A hold item that\n" - "boosts Exp. points\n" - "earned in battle."); - -static const u8 sScopeLensDesc[] = _( - "A hold item that\n" - "improves the\n" - "critical-hit rate."); - -static const u8 sLeftoversDesc[] = _( - "A hold item that\n" - "gradually restores\n" - "HP in battle."); - -static const u8 sShellBellDesc[] = _( - "A hold item that\n" - "restores HP upon\n" - "striking the foe."); - -static const u8 sWideLensDesc[] = _( - "A magnifying lens\n" - "that boosts the\n" - "accuracy of moves."); - -static const u8 sMuscleBandDesc[] = _( - "A headband that\n" - "boosts the power of\n" - "physical moves."); - -static const u8 sWiseGlassesDesc[] = _( - "A pair of glasses\n" - "that ups the power\n" - "of special moves."); - -static const u8 sExpertBeltDesc[] = _( - "A belt that boosts\n" - "the power of super\n" - "effective moves."); - -static const u8 sLightClayDesc[] = _( - "Extends the length\n" - "of barrier moves\n" - "used by the holder."); - -static const u8 sLifeOrbDesc[] = _( - "Boosts the power of\n" - "moves at the cost\n" - "of some HP per turn."); - -static const u8 sPowerHerbDesc[] = _( - "Allows immediate\n" - "use of a move that\n" - "charges first."); - -static const u8 sFocusSashDesc[] = _( - "If the holder has\n" - "full HP, it endures\n" - "KO hits with 1 HP."); - -static const u8 sZoomLensDesc[] = _( - "If the holder moves\n" - "after the foe, it'll\n" - "boost accuracy."); - -static const u8 sMetronomeDesc[] = _( - "A held item that\n" - "boosts a move used\n" - "consecutively."); - -static const u8 sIronBallDesc[] = _( - "Cuts Speed and lets\n" - "Flying-types be hit\n" - "by Ground moves."); - -static const u8 sLaggingTailDesc[] = _( - "A held item that\n" - "makes the holder\n" - "move slower."); - -static const u8 sDestinyKnotDesc[] = _( - "If the holder falls\n" - "in love, the foe\n" - "does too."); - -static const u8 sBlackSludgeDesc[] = _( - "Gradually restores\n" - "HP of Poison-types.\n" - "Damages others."); - -static const u8 sGripClawDesc[] = _( - "Makes binding moves\n" - "used by the holder\n" - "go on for 7 turns."); - -static const u8 sStickyBarbDesc[] = _( - "Damages the holder\n" - "each turn. May latch\n" - "on to foes."); - -static const u8 sShedShellDesc[] = _( - "Enables the holder\n" - "to switch out of\n" - "battle without fail."); - -static const u8 sBigRootDesc[] = _( - "A held item that\n" - "boosts the power of\n" - "HP-stealing moves."); - -static const u8 sRazorClawDesc[] = _( - "A hooked claw that\n" - "ups the holder's\n" - "critical-hit ratio."); - -static const u8 sRazorFangDesc[] = _( - "A hold item that\n" - "may cause flinching\n" - "when the foe is hit."); - -static const u8 sEvioliteDesc[] = _( - "Raises the Def and\n" - "Sp. Def of Pokémon\n" - "that can evolve."); - -static const u8 sFloatStoneDesc[] = _( - "It's so light that\n" - "when held, it halves\n" - "a Pokémon's weight."); - -static const u8 sRockyHelmetDesc[] = _( - "Hurts the foe if\n" - "they touch its\n" - "holder."); - -static const u8 sAirBalloonDesc[] = _( - "Elevates the holder\n" - "in the air. If hit,\n" - "this item will burst."); - -static const u8 sRedCardDesc[] = _( - "Switches out the\n" - "foe if they hit the\n" - "holder."); - -static const u8 sRingTargetDesc[] = _( - "Moves that wouldn't\n" - "have effect will\n" - "land on its holder."); - -static const u8 sBindingBandDesc[] = _( - "Increases the\n" - "power of binding\n" - "moves when held."); - -static const u8 sEjectButtonDesc[] = _( - "Switches out the\n" - "user if they're hit\n" - "by the foe."); - -static const u8 sWeaknessPolicyDesc[] = _( - "If hit by a Super\n" - "Effective move, ups\n" - "Atk and Sp. Atk."); - -static const u8 sAssaultVestDesc[] = _( - "Raises Sp. Def but\n" - "prevents the use\n" - "of status moves."); - -static const u8 sSafetyGogglesDesc[] = _( - "Protect from\n" - "weather damage and\n" - "powder moves."); - -static const u8 sAdrenalineOrbDesc[] = _( - "Boosts Speed if the\n" - "user is intimidated,\n" - "but only one time."); - -static const u8 sTerrainExtenderDesc[] = _( - "Extends the length\n" - "of the active\n" - "battle terrain."); - -static const u8 sProtectivePadsDesc[] = _( - "Guard the holder\n" - "from contact move\n" - "effects."); - -static const u8 sThroatSprayDesc[] = _( - "Raises Sp. Atk. if\n" - "the holder uses a\n" - "sound-based move."); - -static const u8 sEjectPackDesc[] = _( - "Forces the user to\n" - "switch if its stats\n" - "are lowered."); - -static const u8 sHeavyDutyBootsDesc[] = _( - "Boots that prevent\n" - "effects of traps\n" - "set in the field."); - -static const u8 sBlunderPolicyDesc[] = _( - "Raises Speed if\n" - "the user misses\n" - "due to Accuracy."); - -static const u8 sRoomServiceDesc[] = _( - "Lowers Speed if\n" - "Trick Room is\n" - "active."); - -static const u8 sUtilityUmbrellaDesc[] = _( - "An umbrella that\n" - "protects from\n" - "weather effects."); - -// Berries -static const u8 sCheriBerryDesc[] = _( - "A hold item that\n" - "heals paralysis\n" - "in battle."); - -static const u8 sChestoBerryDesc[] = _( - "A hold item that\n" - "awakens Pokémon\n" - "in battle."); - -static const u8 sPechaBerryDesc[] = _( - "A hold item that\n" - "heals poisoning\n" - "in battle."); - -static const u8 sRawstBerryDesc[] = _( - "A hold item that\n" - "heals a burn in\n" - "battle."); - -static const u8 sAspearBerryDesc[] = _( - "A hold item that\n" - "defrosts Pokémon\n" - "in battle."); - -static const u8 sLeppaBerryDesc[] = _( - "A hold item that\n" - "restores 10 PP in\n" - "battle."); - -static const u8 sOranBerryDesc[] = _( - "A hold item that\n" - "restores 10 HP in\n" - "battle."); - -static const u8 sPersimBerryDesc[] = _( - "A hold item that\n" - "heals confusion\n" - "in battle."); - -static const u8 sLumBerryDesc[] = _( - "A hold item that\n" - "heals any status\n" - "problem in battle."); - -static const u8 sSitrusBerryDesc[] = _( -#if I_SITRUS_BERRY_HEAL >= GEN_4 - "A hold item that\n" - "restores the user's\n" - "HP a little."); -#else - "A hold item that\n" - "restores 30 HP in\n" - "battle."); -#endif - -static const u8 sFigyBerryDesc[] = _( - "A hold item that\n" - "restores HP but\n" - "may confuse."); - -static const u8 sWikiBerryDesc[] = _( - "A hold item that\n" - "restores HP but\n" - "may confuse."); - -static const u8 sMagoBerryDesc[] = _( - "A hold item that\n" - "restores HP but\n" - "may confuse."); - -static const u8 sAguavBerryDesc[] = _( - "A hold item that\n" - "restores HP but\n" - "may confuse."); - -static const u8 sIapapaBerryDesc[] = _( - "A hold item that\n" - "restores HP but\n" - "may confuse."); - -static const u8 sRazzBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Razz."); - -static const u8 sBlukBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Bluk."); - -static const u8 sNanabBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Nanab."); - -static const u8 sWepearBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Wepear."); - -static const u8 sPinapBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Pinap."); - -static const u8 sPomegBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base HP."); - -static const u8 sKelpsyBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base Attack."); - -static const u8 sQualotBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base Defense."); - -static const u8 sHondewBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base Sp. Atk."); - -static const u8 sGrepaBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base Sp. Def."); - -static const u8 sTamatoBerryDesc[] = _( - "Makes a Pokémon\n" - "friendly but lowers\n" - "base Speed."); - -static const u8 sCornnBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Cornn."); - -static const u8 sMagostBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Magost."); - -static const u8 sRabutaBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Rabuta."); - -static const u8 sNomelBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Nomel."); - -static const u8 sSpelonBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Spelon."); - -static const u8 sPamtreBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Pamtre."); - -static const u8 sWatmelBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Watmel."); - -static const u8 sDurinBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Durin."); - -static const u8 sBelueBerryDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow Belue."); - -static const u8 sChilanBerryDesc[] = _( - "A hold item that\n" - "weakens a Normal\n" - "move."); - -static const u8 sOccaBerryDesc[] = _( - "A hold item that\n" - "weakens a Fire\n" - "move if weak to it."); - -static const u8 sPasshoBerryDesc[] = _( - "A hold item that\n" - "weakens a Water\n" - "move if weak to it."); - -static const u8 sWacanBerryDesc[] = _( - "A hold item that\n" - "weakens a Electric\n" - "move if weak to it."); - -static const u8 sRindoBerryDesc[] = _( - "A hold item that\n" - "weakens a Grass\n" - "move if weak to it."); - -static const u8 sYacheBerryDesc[] = _( - "A hold item that\n" - "weakens a Ice\n" - "move if weak to it."); - -static const u8 sChopleBerryDesc[] = _( - "A hold item that\n" - "weakens a Fighting\n" - "move if weak to it."); - -static const u8 sKebiaBerryDesc[] = _( - "A hold item that\n" - "weakens a Poison\n" - "move if weak to it."); - -static const u8 sShucaBerryDesc[] = _( - "A hold item that\n" - "weakens a Ground\n" - "move if weak to it."); - -static const u8 sCobaBerryDesc[] = _( - "A hold item that\n" - "weakens a Flying\n" - "move if weak to it."); - -static const u8 sPayapaBerryDesc[] = _( - "A hold item that\n" - "weakens a Psychic\n" - "move if weak to it."); - -static const u8 sTangaBerryDesc[] = _( - "A hold item that\n" - "weakens a Bug\n" - "move if weak to it."); - -static const u8 sChartiBerryDesc[] = _( - "A hold item that\n" - "weakens a Rock\n" - "move if weak to it."); - -static const u8 sKasibBerryDesc[] = _( - "A hold item that\n" - "weakens a Ghost\n" - "move if weak to it."); - -static const u8 sHabanBerryDesc[] = _( - "A hold item that\n" - "weakens a Dragon\n" - "move if weak to it."); - -static const u8 sColburBerryDesc[] = _( - "A hold item that\n" - "weakens a Dark\n" - "move if weak to it."); - -static const u8 sBabiriBerryDesc[] = _( - "A hold item that\n" - "weakens a Steel\n" - "move if weak to it."); - -static const u8 sRoseliBerryDesc[] = _( - "A hold item that\n" - "weakens a Fairy\n" - "move if weak to it."); - -static const u8 sLiechiBerryDesc[] = _( - "A hold item that\n" - "raises Attack in\n" - "a pinch."); - -static const u8 sGanlonBerryDesc[] = _( - "A hold item that\n" - "raises Defense in\n" - "a pinch."); - -static const u8 sSalacBerryDesc[] = _( - "A hold item that\n" - "raises Speed in\n" - "a pinch."); - -static const u8 sPetayaBerryDesc[] = _( - "A hold item that\n" - "raises Sp. Atk in\n" - "a pinch."); - -static const u8 sApicotBerryDesc[] = _( - "A hold item that\n" - "raises Sp. Def in\n" - "a pinch."); - -static const u8 sLansatBerryDesc[] = _( - "A hold item that\n" - "ups the critical-\n" - "hit rate in a pinch."); - -static const u8 sStarfBerryDesc[] = _( - "A hold item that\n" - "sharply boosts a\n" - "stat in a pinch."); - -static const u8 sEnigmaBerryDesc[] = _( - "A hold item that\n" - "heals from super\n" - "effective moves."); - -static const u8 sMicleBerryDesc[] = _( - "When held, it ups\n" - "the Accuracy of a\n" - "move in a pinch."); - -static const u8 sCustapBerryDesc[] = _( - "It allows a Pokémon\n" - "in a pinch to move\n" - "first just once."); - -static const u8 sJabocaBerryDesc[] = _( - "If hit by a physical\n" - "move, it will hurt\n" - "the attacker a bit."); - -static const u8 sRowapBerryDesc[] = _( - "If hit by a special\n" - "move, it will hurt\n" - "the attacker a bit."); - -static const u8 sKeeBerryDesc[] = _( - "If hit by a physical\n" - "move, it raises the\n" - "Defense a bit."); - -static const u8 sMarangaBerryDesc[] = _( - "If hit by a special\n" - "move, it raises the\n" - "Sp. Def. a bit."); - -static const u8 sEnigmaBerryEReaderDesc[] = _( - "{POKEBLOCK} ingredient.\n" - "Plant in loamy soil\n" - "to grow a mystery."); - -// TMs/HMs -static const u8 sTM01Desc[] = _( - "Powerful, but makes\n" - "the user flinch if\n" - "hit by the foe."); - -static const u8 sTM02Desc[] = _( - "Hooks and slashes\n" - "the foe with long,\n" - "sharp claws."); - -static const u8 sTM03Desc[] = _( - "Generates an\n" - "ultrasonic wave\n" - "that may confuse."); - -static const u8 sTM04Desc[] = _( - "Raises Sp. Atk and\n" - "Sp. Def by focusing\n" - "the mind."); - -static const u8 sTM05Desc[] = _( - "A savage roar that\n" - "makes the foe flee \n" - "to end the battle."); - -static const u8 sTM06Desc[] = _( - "Poisons the foe\n" - "with a toxin that\n" - "gradually worsens."); - -static const u8 sTM07Desc[] = _( - "Creates a hailstorm\n" - "that damages all\n" - "types except Ice."); - -static const u8 sTM08Desc[] = _( - "Bulks up the body\n" - "to boost both\n" - "Attack & Defense."); - -static const u8 sTM09Desc[] = _( - "Shoots 2 to 5 seeds\n" - "in a row to strike\n" - "the foe."); - -static const u8 sTM10Desc[] = _( - "The attack power\n" - "varies among\n" - "different Pokémon."); - -static const u8 sTM11Desc[] = _( - "Raises the power of\n" - "Fire-type moves\n" - "for 5 turns."); - -static const u8 sTM12Desc[] = _( - "Enrages the foe so\n" - "it can only use\n" - "attack moves."); - -static const u8 sTM13Desc[] = _( - "Fires an icy cold\n" - "beam that may\n" - "freeze the foe."); - -static const u8 sTM14Desc[] = _( - "A brutal snow-and-\n" - "wind attack that\n" - "may freeze the foe."); - -static const u8 sTM15Desc[] = _( - "Powerful, but needs\n" - "recharging the\n" - "next turn."); - -static const u8 sTM16Desc[] = _( - "Creates a wall of\n" - "light that lowers\n" - "Sp. Atk damage."); - -static const u8 sTM17Desc[] = _( - "Negates all damage,\n" - "but may fail if used\n" - "in succession."); - -static const u8 sTM18Desc[] = _( - "Raises the power of\n" - "Water-type moves\n" - "for 5 turns."); - -static const u8 sTM19Desc[] = _( - "Recovers half the\n" - "HP of the damage \n" - "this move inflicts."); - -static const u8 sTM20Desc[] = _( - "Prevents status\n" - "abnormality with a\n" - "mystical power."); - -static const u8 sTM21Desc[] = _( - "The less the user\n" - "likes you, the more\n" - "powerful this move."); - -static const u8 sTM22Desc[] = _( - "Absorbs sunlight in\n" - "the 1st turn, then\n" - "attacks next turn."); - -static const u8 sTM23Desc[] = _( - "Slams the foe with\n" - "a hard tail. It may\n" - "lower Defense."); - -static const u8 sTM24Desc[] = _( - "A powerful electric\n" - "attack that may\n" - "cause paralysis."); - -static const u8 sTM25Desc[] = _( - "Strikes the foe\n" - "with a thunderbolt.\n" - "It may paralyze."); - -static const u8 sTM26Desc[] = _( - "Causes a quake\n" - "that has no effect\n" - "on flying foes."); - -static const u8 sTM27Desc[] = _( - "The more the user\n" - "likes you, the more\n" - "powerful this move."); - -static const u8 sTM28Desc[] = _( - "Digs underground\n" - "the 1st turn, then\n" - "strikes next turn."); - -static const u8 sTM29Desc[] = _( - "A powerful psychic\n" - "attack that may\n" - "lower Sp. Def."); - -static const u8 sTM30Desc[] = _( - "Hurls a dark lump\n" - "at the foe. It may\n" - "lower Sp. Def."); - -static const u8 sTM31Desc[] = _( - "Destroys barriers\n" - "like Light Screen\n" - "and causes damage."); - -static const u8 sTM32Desc[] = _( - "Creates illusory\n" - "copies to enhance\n" - "elusiveness."); - -static const u8 sTM33Desc[] = _( - "Creates a wall of\n" - "light that weakens\n" - "physical attacks."); - -static const u8 sTM34Desc[] = _( - "Zaps the foe with a\n" - "jolt of electricity\n" - "that never misses."); - -static const u8 sTM35Desc[] = _( - "Looses a stream of\n" - "fire that may burn\n" - "the foe."); - -static const u8 sTM36Desc[] = _( - "Hurls sludge at the\n" - "foe. It may poison\n" - "the foe."); - -static const u8 sTM37Desc[] = _( - "Causes a sandstorm\n" - "that hits the foe\n" - "over several turns."); - -static const u8 sTM38Desc[] = _( - "A powerful fire\n" - "attack that may\n" - "burn the foe."); - -static const u8 sTM39Desc[] = _( - "Stops the foe from\n" - "moving with rocks.\n" - "May lower Speed."); - -static const u8 sTM40Desc[] = _( - "An extremely fast\n" - "attack that can't\n" - "be avoided."); - -static const u8 sTM41Desc[] = _( - "Prevents the foe\n" - "from using the same\n" - "move in a row."); - -static const u8 sTM42Desc[] = _( - "Raises Attack when\n" - "poisoned, burned,\n" - "or paralyzed."); - -static const u8 sTM43Desc[] = _( - "Adds an effect to\n" - "attack depending\n" - "on the location."); - -static const u8 sTM44Desc[] = _( - "The user sleeps for\n" - "2 turns to restore\n" - "health and status."); - -static const u8 sTM45Desc[] = _( - "Makes it tough to\n" - "attack a foe of the\n" - "opposite gender."); - -static const u8 sTM46Desc[] = _( - "While attacking,\n" - "it may steal the\n" - "foe's held item."); - -static const u8 sTM47Desc[] = _( - "Spreads hard-\n" - "edged wings and\n" - "slams into the foe."); - -static const u8 sTM48Desc[] = _( - "Switches abilities\n" - "with the foe on the\n" - "turn this is used."); - -static const u8 sTM49Desc[] = _( - "Steals the effects\n" - "of the move the foe\n" - "is trying to use."); - -static const u8 sTM50Desc[] = _( - "Enables full-power\n" - "attack, but sharply\n" - "lowers Sp. Atk."); - -static const u8 sTM51Desc[] = _( // Roost - "Restores users HP\n" - "by half of its\n" - "maximum HP."); - -static const u8 sTM52Desc[] = _( // Focus Blast - "Attacks at full\n" - "power, may lower\n" - "Sp. Def."); - -static const u8 sTM53Desc[] = _( // Energy Ball - "Hurls a ball of\n" - "energy that may\n" - "lower Sp. Def."); - -static const u8 sTM54Desc[] = _( //False Swipe - "An attack that\n" - "leaves the foe with\n" - "at least 1 HP."); - -static const u8 sTM55Desc[] = _( // Brine - "Deals twice as\n" - "much damage to foes\n" - "under half HP."); - -static const u8 sTM56Desc[] = _( // Fling - "Hurls held item at\n" - "target. Effect\n" - "depends on item."); - -static const u8 sTM57Desc[] = _( // Charge Beam - "Fires a beam\n" - "of electricity,\n" - "raising Sp. Atk."); - -static const u8 sTM58Desc[] = _( // Earth Power - "The ground erupts\n" - "with power. May\n" - "lower Sp. Def."); - -static const u8 sTM59Desc[] = _( // Dragon Pulse - "A powerful wave\n" - "of energy damages\n" - "the target."); - -static const u8 sTM60Desc[] = _( // Drain Punch - "Absorbs half of\n" - "the damage dealt."); - - static const u8 sTM61Desc[] = _( // Will-O-Wisp - "Shoots a mystical\n" - "fire that burns\n" - "the target."); - -static const u8 sTM62Desc[] = _( // Silver Wind - "A powdery attack\n" - "the may raise all\n" - "stats."); - -static const u8 sTM63Desc[] = _( // Ancient Power - "Projects rocks at\n" - "the target. May\n" - "rsise all stats."); - -static const u8 sTM64Desc[] = _( // Explosion - "The user explodes,\n" - "fainting and\n" - "dealing damage."); - -static const u8 sTM65Desc[] = _( // Shadow Claw - "Slashes with a\n" - "shadowy claw. High\n" - "critical-hit ratio."); - -static const u8 sTM66Desc[] = _( // Payback - "If the user moves\n" - "after the target,\n" - "power is doubled."); - -static const u8 sTM67Desc[] = _( // Recycle - "Recycles an item\n" - "used during the\n" - "battle."); - -static const u8 sTM68Desc[] = _( // Giga Impact - "Attacks with\n" - "tremendous power,\n" - "then must rest."); - -static const u8 sTM69Desc[] = _( // Rock Polish - "Polishes the body,\n" - "sharply raising\n" - "Speed."); - -static const u8 sTM70Desc[] = _( // Growth - "Encourages growth,\n" - "raising Attack &\n" - "Sp. Atk."); - -static const u8 sTM71Desc[] = _( // Stone Edge - "Stabs the foe with\n" - "stones. High\n" - "critical-hit ratio."); - -static const u8 sTM72Desc[] = _( // Avalanche - "An ice move that\n" - "gains power if\n" - "the user is hit."); - -static const u8 sTM73Desc[] = _( // Thunder Wave - "An electric jolt,\n" - "causes paralysis\n" - "if it hits."); - -static const u8 sTM74Desc[] = _( // Gyro Ball - "A high-speed spin,\n" - "deals more damage\n" - "to faster foes."); - -static const u8 sTM75Desc[] = _( // Swords Dance - "A fighting dance\n" - "that raises Attack\n" - "sharply."); - -static const u8 sTM76Desc[] = _( // Stealth Rock - "A floating stone\n" - "trap that damages\n" - "incoming foes."); - -static const u8 sTM77Desc[] = _( // Psych Up - "Copies the foes\n" - "effects and gives\n" - "them to the user."); - -static const u8 sTM78Desc[] = _( // Superpower - "Deals high damage\n" - "but lowers Attack\n" - "& Defense."); - -static const u8 sTM79Desc[] = _( // Dark Pulse - "Attacks with a\n" - "horrible aura. May\n" - "cause flinching."); - -static const u8 sTM80Desc[] = _( // Rock Slide - "Large boulders are\n" - "hurled. May cause\n" - "flinching."); - -static const u8 sTM81Desc[] = _( // X-Scissor - "Slashes at the\n" - "target with a\n" - "sharp appendage."); - -static const u8 sTM82Desc[] = _( // Sleep Talk - "Randomly uses a\n" - "moves while asleep."); - -static const u8 sTM83Desc[] = _( // Nasty Plot - "A crafty scheme\n" - "boosts Sp. Atk\n" - "sharply."); - -static const u8 sTM84Desc[] = _( // Poison Jab - "A stabbing attack\n" - "that maye poison\n" - "the target."); - -static const u8 sTM85Desc[] = _( // Dream Eater - "Takes half of the\n" - "damage inflicted on\n" - "a sleeping foe."); - -static const u8 sTM86Desc[] = _( // Grass Knot - "The user snares\n" - "the target, dealing\n" - "more to heavy foes."); - -static const u8 sTM87Desc[] = _( // Swagger - "Confuses the foe,\n" - "also sharply raises\n" - "Attack."); - -static const u8 sTM88Desc[] = _( // Pluck - "Eats the foes held\n" - "berry, gaining its\n" - "its effect."); - -static const u8 sTM89Desc[] = _( // U-turn - "Damages the target\n" - "then switches out."); - -static const u8 sTM90Desc[] = _( // Substitute - "Creates a decoy\n" - "using 1/4 of the\n" - "user's maximum HP."); - -static const u8 sTM91Desc[] = _( // Flash Cannon - "Release a blast\n" - "of light that\n" - "may lower Sp. Def."); - -static const u8 sTM92Desc[] = _( // Trick Room - "Slower Pokémon\n" - "move first for\n" - "5 turns."); - -static const u8 sTM93Desc[] = _( // Wild Charge - "A powerful charge\n" - "that damages the\n" - "user."); - -static const u8 sTM94Desc[] = _( // Metronome - "Wiggles its finger,\n" - "picking a random\n" - "move to use."); - -static const u8 sTM95Desc[] = _( // Snarl - "Yells and rants,\n" - "at the foe. Lowers\n" - "Sp. Atk stat."); - -static const u8 sTM96Desc[] = _( // Power Gem - "A sparkling ray\n" - "of gemstone light\n" - "hits the target."); - -static const u8 sTM97Desc[] = _( // Draining Kiss - "The user blows\n" - "a kiss, healing\n" - "half damage dealt."); - -static const u8 sTM98Desc[] = _( // Power-Up Punch - "Punches the foe,\n" - "raising Attack\n" - "stat."); - -static const u8 sTM99Desc[] = _( // Dazzling Gleam - "Damages foes in\n" - "a flash of bright\n" - "light."); - -static const u8 sTM100Desc[] = _( // Unused - ""); - -static const u8 sHM01Desc[] = _( - "Attacks the foe\n" - "with sharp blades\n" - "or claws."); - -static const u8 sHM02Desc[] = _( - "Flies up on the\n" - "first turn, then\n" - "attacks next turn."); - -static const u8 sHM03Desc[] = _( - "Creates a huge\n" - "wave, then crashes\n" - "it down on the foe."); - -static const u8 sHM04Desc[] = _( - "Builds enormous\n" - "power, then slams\n" - "the foe."); - -static const u8 sHM05Desc[] = _( - "Looses a powerful\n" - "blast of light that\n" - "reduces accuracy."); - -static const u8 sHM06Desc[] = _( - "A rock-crushingly\n" - "tough attack that\n" - "lowers Defense."); - -static const u8 sHM07Desc[] = _( - "Attacks the foe\n" - "with enough power\n" - "to climb waterfalls."); - -static const u8 sHM08Desc[] = _( - "Dives underwater\n" - "the 1st turn, then\n" - "attacks next turn."); - -// Charms -static const u8 sOvalCharmDesc[] = _( - "Raises the chance\n" - "of finding eggs\n" - "at the daycare."); - -static const u8 sShinyCharmDesc[] = _( - "A charm that will\n" - "raise the chance\n" - "of Shiny Pokémon."); - -static const u8 sCatchingCharmDesc[] = _( - "A charm that raises\n" - "the chance of\n" - "Critical Captures."); - -static const u8 sExpCharmDesc[] = _( - "A charm that raises\n" - "the amount of Exp.\n" - "earned in battle."); - -// Form-changing Key Items -static const u8 sRotomCatalogDesc[] = _( - "A catalog full of\n" - "deviced liked by\n" - "Rotom."); - -static const u8 sGracideaDesc[] = _( - "Bouquets made with\n" - "it are offered as a\n" - "token of gratitude."); - -static const u8 sRevealGlassDesc[] = _( - "This glass returns\n" - "a Pokémon back to\n" - "its original form."); - -static const u8 sDNASplicersDesc[] = _( - "Splicer that fuses\n" - "Kyurem and a\n" - "certain Pokémon."); - -static const u8 sZygardeCubeDesc[] = _( - "An item to store\n" - "Zygarde Cores and\n" - "Cells."); - -static const u8 sPrisonBottleDesc[] = _( - "A bottle used to\n" - "seal a certain\n" - "Pokémon long ago."); - -static const u8 sNSolarizerDesc[] = _( - "A device to fuse\n" - "and split Necrozma\n" - "using a Solgaleo."); - -static const u8 sNLunarizerDesc[] = _( - "A device to fuse\n" - "and split Necrozma\n" - "using a Lunala."); - -static const u8 sReinsOfUnityDesc[] = _( - "Reins that unite\n" - "Calyrex with its\n" - "beloved steed."); - -// Battle Mechanic Key Items -static const u8 sMegaRingDesc[] = _( - "Enables {PKMN} holding\n" - "their Mega Stone to\n" - "Mega Evolve."); - -static const u8 sZPowerRingDesc[] = _( - "A strange ring\n" - "that enables\n" - "Z-Move usage."); - -static const u8 sDynamaxBandDesc[] = _( - "A band carrying a\n" - "Wishing Star that\n" - "allows Dynamaxing."); - -// Misc. Key Items -static const u8 sBicycleDesc[] = _( - "A folding bicycle\n" - "that is faster than\n" - "the Running Shoes."); - -static const u8 sMachBikeDesc[] = _( - "A folding bicycle\n" - "that doubles your\n" - "speed or better."); - -static const u8 sAcroBikeDesc[] = _( - "A folding bicycle\n" - "capable of jumps\n" - "and wheelies."); - -static const u8 sOldRodDesc[] = _( - "Use by any body of\n" - "water to fish for\n" - "wild Pokémon."); - -static const u8 sGoodRodDesc[] = _( - "A decent fishing\n" - "rod for catching\n" - "wild Pokémon."); - -static const u8 sSuperRodDesc[] = _( - "The best fishing\n" - "rod for catching\n" - "wild Pokémon."); - -static const u8 sDowsingMachineDesc[] = _( - "A device that\n" - "signals an invisible\n" - "item by sound."); - -static const u8 sTownMapDesc[] = _( - "Can be viewed\n" - "anytime. Shows your\n" - "present location."); - -static const u8 sVsSeekerDesc[] = _( - "A rechargeable unit\n" - "that flags battle-\n" - "ready Trainers."); - -static const u8 sTMCaseDesc[] = _( - "A convenient case \n" - "that holds TMs and\n" - "HMs."); - -static const u8 sBerryPouchDesc[] = _( - "A convenient\n" - "container that\n" - "holds Berries."); - -static const u8 sPokemonBoxLinkDesc[] = _( - "This device grants\n" - "access to the {PKMN}\n" - "Storage System."); - -static const u8 sCoinCaseDesc[] = _( - "A case that holds\n" - "up to 9,999 Coins."); - -static const u8 sPowderJarDesc[] = _( - "Stores Berry\n" - "Powder made using\n" - "a Berry Crusher."); - -static const u8 sWailmerPailDesc[] = _( - "A tool used for\n" - "watering Berries\n" - "and plants."); - -static const u8 sPokeRadarDesc[] = _( - "A tool used to\n" - "search out Pokémon\n" - "hiding in grass."); - -static const u8 sPokeblockCaseDesc[] = _( - "A case for holding\n" - "{POKEBLOCK}s made with\n" - "a Berry Blender."); - -static const u8 sSootSackDesc[] = _( - "A sack used to\n" - "gather and hold\n" - "volcanic ash."); - -static const u8 sPokeFluteDesc[] = _( - "A sweet-sounding\n" - "flute that awakens\n" - "Pokémon."); - -static const u8 sFameCheckerDesc[] = _( - "Stores information\n" - "on famous people\n" - "for instant recall."); - -static const u8 sTeachyTVDesc[] = _( - "A TV set tuned to\n" - "an advice program\n" - "for Trainers."); - -// Story Key Items -static const u8 sSSTicketDesc[] = _( - "The ticket required\n" - "for sailing on a\n" - "ferry."); - -static const u8 sEonTicketDesc[] = _( - "The ticket for a\n" - "ferry to a distant\n" - "southern island."); - -static const u8 sMysticTicketDesc[] = _( - "A ticket required\n" - "to board the ship\n" - "to Navel Rock."); - -static const u8 sAuroraTicketDesc[] = _( - "A ticket required\n" - "to board the ship\n" - "to Birth Island."); - -static const u8 sOldSeaMapDesc[] = _( - "A faded sea chart\n" - "that shows the way\n" - "to a certain island."); - -static const u8 sLetterDesc[] = _( - "A letter to Steven\n" - "from the President\n" - "of the Devon Corp."); - -static const u8 sDevonPartsDesc[] = _( - "A package that\n" - "contains Devon's\n" - "machine parts."); - -static const u8 sGoGogglesDesc[] = _( - "Nifty goggles that\n" - "protect eyes from\n" - "desert sandstorms."); - -static const u8 sDevonScopeDesc[] = _( - "A device by Devon\n" - "that signals any\n" - "unseeable Pokémon."); - -static const u8 sBasementKeyDesc[] = _( - "The key for New\n" - "Mauville beneath\n" - "Mauville City."); - -static const u8 sScannerDesc[] = _( - "A device found\n" - "inside the\n" - "Abandoned Ship."); - -static const u8 sStorageKeyDesc[] = _( - "The key to the\n" - "storage inside the\n" - "Abandoned Ship."); - -static const u8 sKeyToRoom1Desc[] = _( - "A key that opens a\n" - "door inside the\n" - "Abandoned Ship."); - -static const u8 sKeyToRoom2Desc[] = _( - "A key that opens a\n" - "door inside the\n" - "Abandoned Ship."); - -static const u8 sKeyToRoom4Desc[] = _( - "A key that opens a\n" - "door inside the\n" - "Abandoned Ship."); - -static const u8 sKeyToRoom6Desc[] = _( - "A key that opens a\n" - "door inside the\n" - "Abandoned Ship."); - -static const u8 sMeteoriteDesc[] = _( - "A meteorite found\n" - "at Meteor Falls."); - -static const u8 sMagmaEmblemDesc[] = _( - "A medal-like item in\n" - "the same shape as\n" - "Team Magma's mark."); - -static const u8 sContestPassDesc[] = _( - "The pass required\n" - "for entering\n" - "Pokémon Contests."); - -static const u8 sParcelDesc[] = _( - "A parcel for Prof.\n" - "Oak from a Pokémon\n" - "Mart's clerk."); - -static const u8 sSecretKeyDesc[] = _( - "The key to the\n" - "Cinnabar Island\n" - "Gym's entrance."); - -static const u8 sBikeVoucherDesc[] = _( - "A voucher for\n" - "obtaining a bicycle\n" - "from the Bike Shop."); - -static const u8 sGoldTeethDesc[] = _( - "Gold dentures lost\n" - "by the Safari\n" - "Zone's Warden."); - -static const u8 sCardKeyDesc[] = _( - "A card-type door\n" - "key used in Silph\n" - "Co's office."); - -static const u8 sLiftKeyDesc[] = _( - "An elevator key\n" - "used in Team\n" - "Rocket's Hideout."); - -static const u8 sSilphScopeDesc[] = _( - "Silph Co's scope\n" - "makes unseeable\n" - "POKéMON visible."); - -static const u8 sTriPassDesc[] = _( - "A pass for ferries\n" - "between One, Two,\n" - "and Three Island."); - -static const u8 sRainbowPassDesc[] = _( - "For ferries serving\n" - "Vermilion and the\n" - "Sevii Islands."); - -static const u8 sTeaDesc[] = _( - "A thirst-quenching\n" - "tea prepared by an\n" - "old lady."); - -static const u8 sRubyDesc[] = _( - "An exquisite, red-\n" - "glowing gem that\n" - "symbolizes passion."); - -static const u8 sSapphireDesc[] = _( - "A brilliant blue gem\n" - "that symbolizes\n" - "honesty."); - -static const u8 sAbilityShieldDesc[] = _( - "Ability changes are\n" - "prevented for this\n" - "items's holder."); - -static const u8 sClearAmuletDesc[] = _( - "Stat lowering is\n" - "prevented for this\n" - "items's holder."); - -static const u8 sPunchingGloveDesc[] = _( - "Powers up punching\n" - "moves and removes\n" - "their contact."); - -static const u8 sCovertCloakDesc[] = _( - "Protects the holder\n" - "from secondary\n" - "move effects."); - -static const u8 sLoadedDiceDesc[] = _( - "Rolls high numbers.\n" - "Multihit strikes\n" - "hit more times."); - -static const u8 sAuspiciousArmorDesc[] = _( - "Armor inhabited by\n" - "auspicious wishes.\n" - "Causes evolution."); - -static const u8 sBoosterEnergyDesc[] = _( - "Encapsuled energy\n" - "ups Pokémon with\n" - "certain Abilities."); - -static const u8 sBigBambooShootDesc[] = _( - "A large and rare\n" - "bamboo shoot. Best\n" - "sold to gourmands."); - -static const u8 sGimmighoulCoinDesc[] = _( - "Gimmighoul hoard\n" - "and treasure these\n" - "curious coins."); - -static const u8 sLeadersCrestDesc[] = _( - "A shard of an old\n" - "blade of some sort.\n" - "Held by Bisharp."); - -static const u8 sMaliciousArmorDesc[] = _( - "Armor inhabited by\n" - "malicious will.\n" - "Causes evolution."); - -static const u8 sMirrorHerbDesc[] = _( - "Mirrors an enemy's\n" - "stat increases\n" - "but only once."); - -static const u8 sScrollOfDarknessDesc[] = _( - "A peculiar scroll\n" - "with secrets of\n" - "the dark path."); - -static const u8 sScrollOfWatersDesc[] = _( - "A peculiar scroll\n" - "with secrets of\n" - "the water path."); - -static const u8 sTeraOrbDesc[] = _( - "Energy charges can\n" - "be used to cause\n" - "Terastallization."); - -static const u8 sTinyBambooShootDesc[] = _( - "A small and rare\n" - "bamboo shoot. Best\n" - "sold to gourmands."); - -static const u8 sTeraShardDesc[] = _( - "These shards may\n" - "form when a Tera\n" - "Pokémon faints."); - -static const u8 sAdamantCrystalDesc[] = _( - "A large, glowing gem\n" - "that lets Dialga\n" - "change form."); - -static const u8 sGriseousCoreDesc[] = _( - "A large, glowing gem\n" - "that lets Giratina\n" - "change form."); - -static const u8 sLustrousGlobeDesc[] = _( - "A large, glowing gem\n" - "that lets Palkia\n" - "change form."); - -static const u8 sBerserkGene[] = _( - "Sharply boosts\n" - "Attack, but causes\n" - "lasting confusion."); - -static const u8 sFairyFeatherDesc[] = _( - "A hold item that\n" - "raises the power of\n" - "Fairy-type moves."); - -static const u8 sSyrupyAppleDesc[] = _( - "A very syrupy apple\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sUnremarkableTeacupDesc[] = _( - "A cracked teacup\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sMasterpieceTeacupDesc[] = _( - "A chipped teacup\n" - "that makes certain\n" - "Pokémon evolve."); - -static const u8 sCornerstoneMaskDesc[] = _( - "Allows Ogerpon to\n" - "wield the Rock-\n" - "type in battle."); - -static const u8 sWellspringMaskDesc[] = _( - "Allows Ogerpon to\n" - "wield the Water-\n" - "type in battle."); - -static const u8 sHearthflameMaskDesc[] = _( - "Allows Ogerpon to\n" - "wield the Fire-\n" - "type in battle."); - -static const u8 sHealthMochiDesc[] = _( - "An item that raises\n" - "the base HP of\n" - "a Pokémon."); - -static const u8 sMuscleMochiDesc[] = _( - "An item that raises\n" - "the base Attack of\n" - "a Pokémon."); - -static const u8 sResistMochiDesc[] = _( - "An item that raises\n" - "the base Defense\n" - "of a Pokémon."); - -static const u8 sGeniusMochiDesc[] = _( - "An item that raises\n" - "the base Sp. Atk.\n" - "of a Pokémon."); - -static const u8 sCleverMochiDesc[] = _( - "An item that raises\n" - "the base Sp. Def.\n" - "of a Pokémon."); - -static const u8 sSwiftMochiDesc[] = _( - "An item that raises\n" - "the base Speed of\n" - "a Pokémon."); - -static const u8 sFreshStartMochiDesc[] = _( - "An item that resets\n" - "all base points of\n" - "a Pokémon."); - -static const u8 sGlimmeringCharmDesc[] = _( - "A charm that will\n" - "raise the shards\n" - "from Tera Raids."); diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h deleted file mode 100644 index be5b5e6d7bbc..000000000000 --- a/src/data/text/move_descriptions.h +++ /dev/null @@ -1,4198 +0,0 @@ - -#if B_BINDING_TURNS >= GEN_5 -#define BINDING_TURNS "4 or 5" -#else -#define BINDING_TURNS "2 to 5" -#endif - -static const u8 sNullDescription[] = _( - ""); - -static const u8 sPoundDescription[] = _( - "Pounds the foe with\n" - "forelegs or tail."); - -static const u8 sKarateChopDescription[] = _( - "A chopping attack with a\n" - "high critical-hit ratio."); - -static const u8 sDoubleSlapDescription[] = _( - "Repeatedly slaps the foe\n" - "2 to 5 times."); - -static const u8 sCometPunchDescription[] = _( - "Repeatedly punches the foe\n" - "2 to 5 times."); - -static const u8 sMegaPunchDescription[] = _( - "A strong punch that may\n" - "raise Attack."); - -static const u8 sPayDayDescription[] = _( - "Throws coins at the foe.\n" - "Money is recovered after."); - -static const u8 sFirePunchDescription[] = _( - "A fiery punch that may burn\n" - "the foe."); - -static const u8 sIcePunchDescription[] = _( - "An icy punch that may\n" -#if B_USE_FROSTBITE == TRUE - "leave the foe with frostbite."); -#else - "freeze the foe."); -#endif - -static const u8 sThunderPunchDescription[] = _( - "An electrified punch that\n" - "may paralyze the foe."); - -static const u8 sScratchDescription[] = _( - "Scratches the foe with\n" - "sharp claws."); - -static const u8 sViseGripDescription[] = _( - "Grips the foe with large and\n" - "powerful pincers."); - -static const u8 sGuillotineDescription[] = _( - "A powerful pincer attack\n" - "that may cause fainting."); - -static const u8 sRazorWindDescription[] = _( - "A a wave of wind that\n" - "always hits critically."); - -static const u8 sSwordsDanceDescription[] = _( - "A fighting dance that\n" - "sharply raises Attack."); - -static const u8 sCutDescription[] = _( - "Cuts the foe with sharp\n" - "scythes, claws, etc."); - -static const u8 sGustDescription[] = _( - "Strikes the foe with a gust\n" - "of wind whipped up by wings."); - -static const u8 sWingAttackDescription[] = _( - "Strikes the foe with wings\n" - "spread wide."); - -static const u8 sWhirlwindDescription[] = _( - "Blows away the foe with\n" - "wind and ends the battle."); - -static const u8 sFlyDescription[] = _( - "Flies up on the first turn,\n" - "then strikes the next turn."); - -static const u8 sBindDescription[] = _( - "Binds and squeezes the foe\n" - "for "BINDING_TURNS" turns."); - -static const u8 sSlamDescription[] = _( - "Slams the foe with a long\n" - "tail, vine, etc."); - -static const u8 sVineWhipDescription[] = _( - "Strikes the foe with\n" - "slender, whiplike vines."); - -static const u8 sStompDescription[] = _( - "Stomps the enemy with a big\n" - "foot. May cause flinching."); - -static const u8 sDoubleKickDescription[] = _( - "A double-kicking attack\n" - "that strikes the foe twice."); - -static const u8 sMegaKickDescription[] = _( - "An extremely powerful kick\n" - "that lowers targets Defense."); - -static const u8 sJumpKickDescription[] = _( - "A strong jumping kick. May\n" - "miss and hurt the kicker."); - -static const u8 sRollingKickDescription[] = _( - "A fast kick delivered from\n" - "a rapid spin."); - -static const u8 sSandAttackDescription[] = _( - "Reduces the foe's accuracy\n" - "by hurling sand in its face."); - -static const u8 sHeadbuttDescription[] = _( - "A ramming attack that may\n" - "cause flinching."); - -static const u8 sHornAttackDescription[] = _( - "Jabs the foe with sharp\n" - "horns."); - -static const u8 sFuryAttackDescription[] = _( - "Jabs the foe 2 to 5 times\n" - "with sharp horns, etc."); - -static const u8 sHornDrillDescription[] = _( - "A one-hit KO attack that\n" - "uses a horn like a drill."); - -static const u8 sTackleDescription[] = _( - "Charges the foe with a full-\n" - "body tackle."); - -static const u8 sBodySlamDescription[] = _( - "A full-body slam that may\n" - "cause paralysis."); - -static const u8 sWrapDescription[] = _( - "Wraps and squeezes the foe\n" - BINDING_TURNS" times with vines, etc."); - -static const u8 sTakeDownDescription[] = _( - "A reckless charge attack\n" - "that also hurts the user."); - -static const u8 sThrashDescription[] = _( - "A rampage of 2 to 3 turns\n" - "that confuses the user."); - -static const u8 sDoubleEdgeDescription[] = _( - "A life-risking tackle that\n" - "also hurts the user."); - -static const u8 sTailWhipDescription[] = _( - "Wags the tail to lower the\n" - "foe's Defense."); - -static const u8 sPoisonStingDescription[] = _( - "A toxic attack with barbs,\n" - "etc., that may poison."); - -static const u8 sTwineedleDescription[] = _( - "Stingers on the forelegs\n" - "jab the foe twice."); - -static const u8 sPinMissileDescription[] = _( - "Sharp pins are fired to\n" - "strike 2 to 5 times."); - -static const u8 sLeerDescription[] = _( - "Frightens the foe with a\n" - "leer to lower Defense."); - -static const u8 sBiteDescription[] = _( - "Bites with vicious fangs.\n" - "May cause flinching."); - -static const u8 sGrowlDescription[] = _( - "Growls cutely to reduce the\n" - "foe's Attack."); - -static const u8 sRoarDescription[] = _( - "Makes the foe flee to end\n" - "the battle."); - -static const u8 sSingDescription[] = _( - "A soothing song lulls the\n" - "foe into a deep slumber."); - -static const u8 sSupersonicDescription[] = _( - "Emits bizarre sound waves\n" - "that may confuse the foe."); - -static const u8 sSonicBoomDescription[] = _( - "Launches shock waves that\n" - "always inflict 20 HP damage."); - -static const u8 sDisableDescription[] = _( - "Psychically disables one of\n" - "the foe's moves."); - -static const u8 sAcidDescription[] = _( - "Sprays a hide-melting acid.\n" -#if B_UPDATED_MOVE_DATA >= GEN_4 - "May lower Sp. Def."); -#else - "May lower Defense."); -#endif - -static const u8 sEmberDescription[] = _( - "A weak fire attack that may\n" - "inflict a burn."); - -static const u8 sFlamethrowerDescription[] = _( - "A powerful fire attack that\n" - "may inflict a burn."); - -static const u8 sMistDescription[] = _( - "Creates a mist that stops\n" - "reduction of abilities."); - -static const u8 sWaterGunDescription[] = _( - "Squirts water to attack\n" - "the foe."); - -static const u8 sHydroPumpDescription[] = _( - "Blasts water at high power\n" - "to strike the foe."); - -static const u8 sSurfDescription[] = _( - "Creates a huge wave, then\n" - "crashes it down on the foe."); - -static const u8 sIceBeamDescription[] = _( - "Blasts the foe with an icy\n" -#if B_USE_FROSTBITE == TRUE - "beam. May cause frostbite."); -#else - "beam that may freeze it."); -#endif - -static const u8 sBlizzardDescription[] = _( - "Hits the foe with an icy\n" -#if B_USE_FROSTBITE == TRUE - "storm. May cause frostbite."); -#else - "storm that may freeze it."); -#endif - -static const u8 sPsybeamDescription[] = _( - "Fires a peculiar ray that\n" - "may confuse the foe."); - -static const u8 sBubbleBeamDescription[] = _( - "Forcefully sprays bubbles\n" - "that may lower Speed."); - -static const u8 sAuroraBeamDescription[] = _( - "Fires a rainbow-colored\n" - "beam that may lower Attack."); - -static const u8 sHyperBeamDescription[] = _( - "Powerful, but leaves the\n" - "user immobile the next turn."); - -static const u8 sPeckDescription[] = _( - "Attacks the foe with a\n" - "jabbing beak, etc."); - -static const u8 sDrillPeckDescription[] = _( - "A corkscrewing attack with\n" - "the beak acting as a drill."); - -static const u8 sSubmissionDescription[] = _( - "A reckless body slam that\n" - "also hurts the user."); - -static const u8 sLowKickDescription[] = _( - "A kick that inflicts more\n" - "damage on heavier foes."); - -static const u8 sCounterDescription[] = _( - "Retaliates any physical hit\n" - "with double the power."); - -static const u8 sSeismicTossDescription[] = _( - "Inflicts damage identical\n" - "to the user's level."); - -static const u8 sStrengthDescription[] = _( - "Builds enormous power,\n" - "then slams the foe."); - -static const u8 sAbsorbDescription[] = _( - "An attack that absorbs\n" - "half the damage inflicted."); - -static const u8 sMegaDrainDescription[] = _( - "An attack that absorbs\n" - "half the damage inflicted."); - -static const u8 sLeechSeedDescription[] = _( - "Plants a seed on the foe to\n" - "steal HP on every turn."); - -static const u8 sGrowthDescription[] = _( - "Forces the body to grow\n" - "and heightens Sp. Atk."); - -static const u8 sRazorLeafDescription[] = _( - "Cuts the enemy with leaves.\n" - "High critical-hit ratio."); - -static const u8 sSolarBeamDescription[] = _( - "Absorbs light in one turn,\n" - "then attacks next turn."); - -static const u8 sPoisonPowderDescription[] = _( - "Scatters a toxic powder\n" - "that may poison the foe."); - -static const u8 sStunSporeDescription[] = _( - "Scatters a powder that may\n" - "paralyze the foe."); - -static const u8 sSleepPowderDescription[] = _( - "Scatters a powder that may\n" - "cause the foe to sleep."); - -static const u8 sPetalDanceDescription[] = _( - "A rampage of 2 to 3 turns\n" - "that confuses the user."); - -static const u8 sStringShotDescription[] = _( - "Binds the foe with string\n" - "to reduce its Speed."); - -static const u8 sDragonRageDescription[] = _( - "Launches shock waves that\n" - "always inflict 40 HP damage."); - -static const u8 sFireSpinDescription[] = _( - "Traps the foe in a ring of\n" - "fire for "BINDING_TURNS" turns."); - -static const u8 sThunderShockDescription[] = _( - "An electrical attack that\n" - "may paralyze the foe."); - -static const u8 sThunderboltDescription[] = _( - "A strong electrical attack\n" - "that may paralyze the foe."); - -static const u8 sThunderWaveDescription[] = _( - "A weak jolt of electricity\n" - "that paralyzes the foe."); - -static const u8 sThunderDescription[] = _( - "A lightning attack that may\n" - "cause paralysis."); - -static const u8 sRockThrowDescription[] = _( - "Throws small rocks to\n" - "strike the foe."); - -static const u8 sEarthquakeDescription[] = _( - "A powerful quake, but has\n" - "no effect on flying foes."); - -static const u8 sFissureDescription[] = _( - "A one-hit KO move that\n" - "drops the foe in a fissure."); - -static const u8 sDigDescription[] = _( - "Digs underground the first\n" - "turn and strikes next turn."); - -static const u8 sToxicDescription[] = _( - "Poisons the foe with an\n" - "intensifying toxin."); - -static const u8 sConfusionDescription[] = _( - "A psychic attack that may\n" - "cause confusion."); - -static const u8 sPsychicDescription[] = _( - "A powerful psychic attack\n" - "that may lower Sp. Def."); - -static const u8 sHypnosisDescription[] = _( - "A hypnotizing move that\n" - "may induce sleep."); - -static const u8 sMeditateDescription[] = _( - "Meditates in a peaceful\n" - "fashion to raise Attack."); - -static const u8 sAgilityDescription[] = _( - "Relaxes the body to sharply\n" - "boost Speed."); - -static const u8 sQuickAttackDescription[] = _( - "An extremely fast attack\n" - "that always strikes first."); - -static const u8 sRageDescription[] = _( - "Raises the user's Attack\n" - "every time it is hit."); - -static const u8 sTeleportDescription[] = _( - "A psychic move for fleeing\n" - "from battle instantly."); - -static const u8 sNightShadeDescription[] = _( - "Inflicts damage identical\n" - "to the user's level."); - -static const u8 sMimicDescription[] = _( - "Copies a move used by the\n" - "foe during one battle."); - -static const u8 sScreechDescription[] = _( - "Emits a screech to sharply\n" - "reduce the foe's Defense."); - -static const u8 sDoubleTeamDescription[] = _( - "Creates illusory copies to\n" - "raise evasiveness."); - -static const u8 sRecoverDescription[] = _( - "Recovers up to half the\n" - "user's maximum HP."); - -static const u8 sHardenDescription[] = _( - "Stiffens the body's \n" - "muscles to raise Defense."); - -static const u8 sMinimizeDescription[] = _( - "Minimizes the user's size\n" - "to raise evasiveness."); - -static const u8 sSmokescreenDescription[] = _( - "Lowers the foe's accuracy\n" - "using smoke, ink, etc."); - -static const u8 sConfuseRayDescription[] = _( - "A sinister ray that\n" - "confuses the foe."); - -static const u8 sWithdrawDescription[] = _( - "Retreats into a shell,\n" - "raising Defense and Sp. Def."); - -static const u8 sDefenseCurlDescription[] = _( - "Curls up to conceal weak\n" - "spots and raise Defense."); - -static const u8 sBarrierDescription[] = _( - "Creates a barrier that\n" - "sharply raises Defense."); - -static const u8 sLightScreenDescription[] = _( - "Creates a wall of light that\n" - "lowers Sp. Atk damage."); - -static const u8 sHazeDescription[] = _( - "Creates a black haze that\n" - "eliminates all stat changes."); - -static const u8 sReflectDescription[] = _( - "Creates a wall of light that\n" - "weakens physical attacks."); - -static const u8 sFocusEnergyDescription[] = _( - "Focuses power to raise the\n" - "critical-hit ratio."); - -static const u8 sBideDescription[] = _( - "Endures attack for 2\n" - "turns to retaliate double."); - -static const u8 sMetronomeDescription[] = _( - "Waggles a finger to use any\n" - "Pokémon move at random."); - -static const u8 sMirrorMoveDescription[] = _( - "Counters the foe's attack\n" - "with the same move."); - -static const u8 sSelfDestructDescription[] = _( - "Inflicts severe damage but\n" - "makes the user faint."); - -static const u8 sEggBombDescription[] = _( - "An egg is forcibly hurled at\n" - "the foe."); - -static const u8 sLickDescription[] = _( - "Licks with a long tongue to\n" - "injure. May also paralyze."); - -static const u8 sSmogDescription[] = _( - "An exhaust-gas attack\n" - "that may also poison."); - -static const u8 sSludgeDescription[] = _( - "Sludge is hurled to inflict\n" - "damage. May also poison."); - -static const u8 sBoneClubDescription[] = _( - "Clubs the foe with a bone.\n" - "May cause flinching."); - -static const u8 sFireBlastDescription[] = _( - "Incinerates everything it\n" - "strikes. May cause a burn."); - -static const u8 sWaterfallDescription[] = _( - "Charges the foe with speed\n" - "to climb waterfalls."); - -static const u8 sClampDescription[] = _( - "Traps and squeezes the\n" - "foe for "BINDING_TURNS" turns."); - -static const u8 sSwiftDescription[] = _( - "Sprays star-shaped rays\n" - "that never miss."); - -static const u8 sSkullBashDescription[] = _( - "Tucks in the head, then\n" - "attacks on the next turn."); - -static const u8 sSpikeCannonDescription[] = _( - "Launches sharp spikes that\n" - "strike 2 to 5 times."); - -static const u8 sConstrictDescription[] = _( - "Constricts to inflict pain.\n" - "May lower Speed."); - -static const u8 sAmnesiaDescription[] = _( - "Forgets about something\n" - "and sharply raises Sp. Def."); - -static const u8 sKinesisDescription[] = _( - "Distracts the foe.\n" - "May lower accuracy."); - -static const u8 sSoftBoiledDescription[] = _( - "Recovers up to half the\n" - "user's maximum HP."); - -static const u8 sHighJumpKickDescription[] = _( - "A jumping knee kick. If it\n" - "misses, the user is hurt."); - -static const u8 sGlareDescription[] = _( - "Intimidates and frightens\n" - "the foe into paralysis."); - -static const u8 sDreamEaterDescription[] = _( - "Takes one half the damage\n" - "inflicted on a sleeping foe."); - -static const u8 sPoisonGasDescription[] = _( - "Envelops the foe in a toxic\n" - "gas that may poison."); - -static const u8 sBarrageDescription[] = _( - "Hurls round objects at the\n" - "foe 2 to 5 times."); - -static const u8 sLeechLifeDescription[] = _( - "An attack that steals half\n" - "the damage inflicted."); - -static const u8 sLovelyKissDescription[] = _( - "Demands a kiss with a scary\n" - "face that induces sleep."); - -static const u8 sSkyAttackDescription[] = _( - "Seeks weak spots then\n" - "attacks. May cause flinching."); - -static const u8 sTransformDescription[] = _( - "Alters the user's cells to\n" - "become a copy of the foe."); - -static const u8 sBubbleDescription[] = _( - "An attack using bubbles.\n" - "May lower the foe's Speed."); - -static const u8 sDizzyPunchDescription[] = _( - "A high priority punch\n" - "that may confuse the foe."); - -static const u8 sSporeDescription[] = _( - "Scatters a cloud of spores\n" - "that always induce sleep."); - -static const u8 sFlashDescription[] = _( - "Looses a powerful blast of\n" - "light that cuts accuracy."); - -static const u8 sPsywaveDescription[] = _( - "Attacks with a psychic\n" - "wave of varying intensity."); - -static const u8 sSplashDescription[] = _( - "It's just a splash...\n" - "Has no effect whatsoever."); - -static const u8 sAcidArmorDescription[] = _( - "Liquifies the user's body\n" - "to sharply raise Defense."); - -static const u8 sCrabhammerDescription[] = _( - "Hammers with a pincer. Has a\n" - "high critical-hit ratio."); - -static const u8 sExplosionDescription[] = _( - "Inflicts severe damage but\n" - "makes the user faint."); - -static const u8 sFurySwipesDescription[] = _( - "Rakes the foe with sharp\n" - "claws, etc., 2 to 5 times."); - -static const u8 sBonemerangDescription[] = _( - "Throws a bone boomerang\n" - "that strikes twice."); - -static const u8 sRestDescription[] = _( - "The user sleeps for 2 turns,\n" - "restoring HP and status."); - -static const u8 sRockSlideDescription[] = _( - "Large boulders are hurled.\n" - "May cause flinching."); - -static const u8 sHyperFangDescription[] = _( - "Attacks with sharp fangs.\n" - "May cause flinching."); - -static const u8 sSharpenDescription[] = _( - "Reduces the polygon count\n" - "and raises Attack."); - -static const u8 sConversionDescription[] = _( - "Changes the user's type\n" - "into a known move's type."); - -static const u8 sTriAttackDescription[] = _( - "Fires three types of beams\n" - "at the same time."); - -static const u8 sSuperFangDescription[] = _( - "Attacks with sharp fangs\n" - "and cuts half the foe's HP."); - -static const u8 sSlashDescription[] = _( - "Slashes with claws, etc. Always\n" - "results in a critical hit."); - -static const u8 sSubstituteDescription[] = _( - "Creates a decoy using 1/4\n" - "of the user's maximum HP."); - -static const u8 sStruggleDescription[] = _( - "Used only if all PP are gone.\n" - "Also hurts the user a little."); - -static const u8 sSketchDescription[] = _( - "Copies the foe's last move\n" - "permanently."); - -static const u8 sTripleKickDescription[] = _( - "Kicks the foe 3 times in a\n" - "row with rising intensity."); - -static const u8 sThiefDescription[] = _( - "While attacking, it may\n" - "steal the foe's held item."); - -static const u8 sSpiderWebDescription[] = _( - "Ensnares the foe to stop it\n" - "from fleeing or switching."); - -static const u8 sMindReaderDescription[] = _( - "Senses the foe's action to\n" - "ensure the next move's hit."); - -static const u8 sNightmareDescription[] = _( - "Inflicts 1/4 damage on a\n" - "sleeping foe every turn."); - -static const u8 sFlameWheelDescription[] = _( - "A fiery charge attack that\n" - "may inflict a burn."); - -static const u8 sSnoreDescription[] = _( - "A loud attack that can be\n" - "used only while asleep."); - -static const u8 sCurseDescription[] = _( - "A move that functions\n" - "differently for GHOSTS."); - -static const u8 sFlailDescription[] = _( - "Inflicts more damage when\n" - "the user's HP is down."); - -static const u8 sConversion2Description[] = _( - "Makes the user resistant\n" - "to the last attack's type."); - -static const u8 sAeroblastDescription[] = _( - "Launches a vacuumed blast.\n" - "High critical-hit ratio."); - -static const u8 sCottonSporeDescription[] = _( - "Spores cling to the foe,\n" - "sharply reducing Speed."); - -static const u8 sReversalDescription[] = _( - "Inflicts more damage when\n" - "the user's HP is down."); - -static const u8 sSpiteDescription[] = _( - "Spitefully cuts the PP\n" - "of the foe's last move."); - -static const u8 sPowderSnowDescription[] = _( - "Blasts the foe with a snowy\n" - "gust. May cause freezing."); - -static const u8 sProtectDescription[] = _( - "Evades attack, but may fail\n" - "if used in succession."); - -static const u8 sMachPunchDescription[] = _( - "A punch is thrown at wicked\n" - "speed to strike first."); - -static const u8 sScaryFaceDescription[] = _( - "Frightens with a scary face\n" - "to sharply reduce Speed."); - -static const u8 sFeintAttackDescription[] = _( - "Draws the foe close, then\n" - "strikes without fail."); - -static const u8 sSweetKissDescription[] = _( - "Demands a kiss with a cute\n" - "look. May cause confusion."); - -static const u8 sBellyDrumDescription[] = _( - "Maximizes Attack while\n" - "sacrificing HP."); - -static const u8 sSludgeBombDescription[] = _( - "Sludge is hurled to inflict\n" - "damage. May also poison."); - -static const u8 sMudSlapDescription[] = _( - "Hurls mud in the foe's face\n" - "to reduce its accuracy."); - -static const u8 sOctazookaDescription[] = _( - "Fires a lump of ink to\n" - "damage and cut accuracy."); - -static const u8 sSpikesDescription[] = _( - "Sets spikes that hurt a \n" - "foe switching in."); - -static const u8 sZapCannonDescription[] = _( - "Powerful and sure to cause\n" - "paralysis, but inaccurate."); - -static const u8 sForesightDescription[] = _( - "Negates the foe's efforts\n" - "to heighten evasiveness."); - -static const u8 sDestinyBondDescription[] = _( - "If the user faints, the foe\n" - "is also made to faint."); - -static const u8 sPerishSongDescription[] = _( - "Any Pokémon hearing this\n" - "song faints in 3 turns."); - -static const u8 sIcyWindDescription[] = _( - "A chilling attack that\n" - "lowers the foe's Speed."); - -static const u8 sDetectDescription[] = _( - "Evades attack, but may fail\n" - "if used in succession."); - -static const u8 sBoneRushDescription[] = _( - "Strikes the foe with a bone\n" - "in hand 2 to 5 times."); - -static const u8 sLockOnDescription[] = _( - "Locks on to the foe to\n" - "ensure the next move hits."); - -static const u8 sOutrageDescription[] = _( - "A rampage of 2 to 3 turns\n" - "that confuses the user."); - -static const u8 sSandstormDescription[] = _( - "Causes a sandstorm that\n" - "rages for several turns."); - -static const u8 sGigaDrainDescription[] = _( - "An attack that steals half\n" - "the damage inflicted."); - -static const u8 sEndureDescription[] = _( - "Endures any attack for\n" - "1 turn, leaving at least 1HP."); - -static const u8 sCharmDescription[] = _( - "Charms the foe and sharply\n" - "reduces its Attack."); - -static const u8 sRolloutDescription[] = _( - "An attack lasting 5 turns\n" - "with rising intensity."); - -static const u8 sFalseSwipeDescription[] = _( - "An attack that leaves the\n" - "foe with at least 1 HP."); - -static const u8 sSwaggerDescription[] = _( - "Confuses the foe, but also\n" - "sharply raises Attack."); - -static const u8 sMilkDrinkDescription[] = _( - "Recovers up to half the\n" - "user's maximum HP."); - -static const u8 sSparkDescription[] = _( - "An electrified tackle that\n" - "may paralyze the foe."); - -static const u8 sFuryCutterDescription[] = _( - "An attack that intensifies\n" - "on each successive hit."); - -static const u8 sSteelWingDescription[] = _( - "Strikes the foe with hard\n" - "wings spread wide."); - -static const u8 sMeanLookDescription[] = _( - "Fixes the foe with a mean\n" - "look that prevents escape."); - -static const u8 sAttractDescription[] = _( - "Makes the opposite gender\n" - "less likely to attack."); - -static const u8 sSleepTalkDescription[] = _( - "Uses an available move\n" - "randomly while asleep."); - -static const u8 sHealBellDescription[] = _( - "Chimes soothingly to heal\n" - "all status abnormalities."); - -static const u8 sReturnDescription[] = _( - "An attack that increases\n" - "in power with friendship."); - -static const u8 sPresentDescription[] = _( - "A gift in the form of a\n" - "bomb. May restore HP."); - -static const u8 sFrustrationDescription[] = _( - "An attack that is stronger\n" - "if the Trainer is disliked."); - -static const u8 sSafeguardDescription[] = _( - "A mystical force prevents\n" - "all status problems."); - -static const u8 sPainSplitDescription[] = _( - "Adds the user and foe's HP,\n" - "then shares them equally."); - -static const u8 sSacredFireDescription[] = _( - "A mystical fire attack that\n" - "may inflict a burn."); - -static const u8 sMagnitudeDescription[] = _( - "A ground-shaking attack\n" - "of random intensity."); - -static const u8 sDynamicPunchDescription[] = _( - "Powerful and sure to cause\n" - "confusion, but inaccurate."); - -static const u8 sMegahornDescription[] = _( - "A brutal ramming attack\n" - "using out-thrust horns."); - -static const u8 sDragonBreathDescription[] = _( - "Strikes the foe with an\n" - "incredible blast of breath."); - -static const u8 sBatonPassDescription[] = _( - "Switches out the user while\n" - "keeping effects in play."); - -static const u8 sEncoreDescription[] = _( - "Makes the foe repeat its\n" - "last move over 2 to 6 turns."); - -static const u8 sPursuitDescription[] = _( - "Inflicts bad damage if used\n" - "on a foe switching out."); - -static const u8 sRapidSpinDescription[] = _( - "Spins the body at high\n" - "speed to strike the foe."); - -static const u8 sSweetScentDescription[] = _( - "Allures the foe to reduce\n" - "evasiveness."); - -static const u8 sIronTailDescription[] = _( - "Attacks with a rock-hard\n" - "tail. May lower Defense."); - -static const u8 sMetalClawDescription[] = _( - "A claw attack that may\n" - "raise the user's Attack."); - -static const u8 sVitalThrowDescription[] = _( - "Makes the user's move last,\n" - "but it never misses."); - -static const u8 sMorningSunDescription[] = _( - "Restores HP. The amount\n" - "varies with the weather."); - -static const u8 sSynthesisDescription[] = _( - "Restores HP. The amount\n" - "varies with the weather."); - -static const u8 sMoonlightDescription[] = _( - "Restores HP. The amount\n" - "varies with the weather."); - -static const u8 sHiddenPowerDescription[] = _( - "The effectiveness varies\n" - "with the user."); - -static const u8 sCrossChopDescription[] = _( - "A double-chopping attack.\n" - "High critical-hit ratio."); - -static const u8 sTwisterDescription[] = _( - "Whips up a vicious twister\n" - "to tear at the foe."); - -static const u8 sRainDanceDescription[] = _( - "Boosts the power of Water-\n" - "type moves for 5 turns."); - -static const u8 sSunnyDayDescription[] = _( - "Boosts the power of Fire-\n" - "type moves for 5 turns."); - -static const u8 sCrunchDescription[] = _( - "Crunches with sharp fangs.\n" -#if B_UPDATED_MOVE_DATA >= GEN_4 - "May lower Defense."); -#else - "May lower Sp. Def."); -#endif - -static const u8 sMirrorCoatDescription[] = _( - "Counters the foe's special\n" - "attack at double the power."); - -static const u8 sPsychUpDescription[] = _( - "Copies the foe's effect(s)\n" - "and gives to the user."); - -static const u8 sExtremeSpeedDescription[] = _( - "An extremely fast and\n" - "powerful attack."); - -static const u8 sAncientPowerDescription[] = _( - "An attack that may raise\n" - "all stats."); - -static const u8 sShadowBallDescription[] = _( - "Hurls a black blob that may\n" - "lower the foe's Sp. Def."); - -static const u8 sFutureSightDescription[] = _( - "Heightens inner power to\n" - "strike 2 turns later."); - -static const u8 sRockSmashDescription[] = _( - "A rock-crushing attack\n" - "that may lower Defense."); - -static const u8 sWhirlpoolDescription[] = _( - "Traps and hurts the foe in\n" - "a whirlpool for "BINDING_TURNS" turns."); - -static const u8 sBeatUpDescription[] = _( - "Summons party Pokémon to\n" - "join in the attack."); - -static const u8 sFakeOutDescription[] = _( - "A 1st-turn, 1st-strike move\n" - "that causes flinching."); - -static const u8 sUproarDescription[] = _( -#if B_UPROAR_TURNS >= GEN_5 - "Causes an uproar for 2 to 5\n" -#else - "Causes an uproar for 3\n" -#endif - "turns and prevents sleep."); - -static const u8 sStockpileDescription[] = _( - "Charges up power for up to\n" - "3 turns."); - -static const u8 sSpitUpDescription[] = _( - "Releases stockpiled power\n" - "(the more the better)."); - -static const u8 sSwallowDescription[] = _( - "Absorbs stockpiled power\n" - "and restores HP."); - -static const u8 sHeatWaveDescription[] = _( - "Exhales a hot breath on the\n" - "foe. May inflict a burn."); - -static const u8 sHailDescription[] = _( - "Summons a hailstorm that\n" - "strikes every turn."); - -static const u8 sTormentDescription[] = _( - "Torments the foe and stops\n" - "successive use of a move."); - -static const u8 sFlatterDescription[] = _( - "Confuses the foe, but\n" - "raises its Sp. Atk."); - -static const u8 sWillOWispDescription[] = _( - "Inflicts a burn on the foe\n" - "with intense fire."); - -static const u8 sMementoDescription[] = _( - "The user faints and lowers\n" - "the foe's abilities."); - -static const u8 sFacadeDescription[] = _( - "Boosts Attack when burned,\n" - "paralyzed, or poisoned."); - -static const u8 sFocusPunchDescription[] = _( - "A powerful loyalty attack.\n" - "The user flinches if hit."); - -static const u8 sSmellingSaltsDescription[] = _( - "Powerful against paralyzed\n" - "foes, but also heals them."); - -static const u8 sFollowMeDescription[] = _( - "Draws attention to make\n" - "foes attack only the user."); - -static const u8 sNaturePowerDescription[] = _( - "The type of attack varies\n" - "depending on the location."); - -static const u8 sChargeDescription[] = _( - "Charges power to boost the\n" - "electric move used next."); - -static const u8 sTauntDescription[] = _( - "Taunts the foe into only\n" - "using attack moves."); - -static const u8 sHelpingHandDescription[] = _( - "Boosts the power of the\n" - "recipient's moves."); - -static const u8 sTrickDescription[] = _( - "Tricks the foe into trading\n" - "held items."); - -static const u8 sRolePlayDescription[] = _( - "Mimics the target and\n" - "copies its special ability."); - -static const u8 sWishDescription[] = _( - "A wish that restores HP.\n" - "It takes time to work."); - -static const u8 sAssistDescription[] = _( - "Attacks randomly with one\n" - "of the partner's moves."); - -static const u8 sIngrainDescription[] = _( - "Lays roots that restore HP.\n" - "The user can't switch out."); - -static const u8 sSuperpowerDescription[] = _( - "Boosts strength sharply,\n" - "but lowers abilities."); - -static const u8 sMagicCoatDescription[] = _( - "Reflects special effects\n" - "back to the attacker."); - -static const u8 sRecycleDescription[] = _( - "Recycles a used item for\n" - "one more use."); - -static const u8 sRevengeDescription[] = _( - "An attack that gains power\n" - "if injured by the foe."); - -static const u8 sBrickBreakDescription[] = _( - "Destroys barriers such as\n" - "REFLECT and causes damage."); - -static const u8 sYawnDescription[] = _( - "Lulls the foe into yawning,\n" - "then sleeping next turn."); - -static const u8 sKnockOffDescription[] = _( - "Knocks down the foe's held\n" - "item to prevent its use."); - -static const u8 sEndeavorDescription[] = _( - "Gains power if the user's HP\n" - "is lower than the foe's HP."); - -static const u8 sEruptionDescription[] = _( - "The higher the user's HP,\n" - "the more damage caused."); - -static const u8 sSkillSwapDescription[] = _( - "The user swaps special\n" - "abilities with the target."); - -static const u8 sImprisonDescription[] = _( - "Prevents foes from using\n" - "moves known by the user."); - -static const u8 sRefreshDescription[] = _( - "Heals poisoning, paralysis,\n" - "or a burn."); - -static const u8 sGrudgeDescription[] = _( - "If the user faints, deletes\n" - "all PP of foe's last move."); - -static const u8 sSnatchDescription[] = _( - "Steals the effects of the\n" - "move the target uses next."); - -static const u8 sSecretPowerDescription[] = _( - "An attack with effects\n" - "that vary by location."); - -static const u8 sDiveDescription[] = _( - "Dives underwater the first\n" - "turn and strikes next turn."); - -static const u8 sArmThrustDescription[] = _( - "Straight-arm punches that\n" - "strike the foe 2 to 5 times."); - -static const u8 sCamouflageDescription[] = _( - "Alters the Pokémon's type\n" - "depending on the location."); - -static const u8 sTailGlowDescription[] = _( - "Flashes a light that sharply\n" - "raises Sp. Atk."); - -static const u8 sLusterPurgeDescription[] = _( - "Attacks with a burst of\n" - "light. May lower Sp. Def."); - -static const u8 sMistBallDescription[] = _( - "Attacks with a flurry of\n" - "down. May lower Sp. Atk."); - -static const u8 sFeatherDanceDescription[] = _( - "Envelops the foe with down\n" - "to sharply reduce Attack."); - -static const u8 sTeeterDanceDescription[] = _( - "Confuses all Pokémon on\n" - "the scene."); - -static const u8 sBlazeKickDescription[] = _( - "A kick with a high critical-\n" - "hit ratio. May cause a burn."); - -static const u8 sMudSportDescription[] = _( - "Covers the user in mud to\n" - "raise electrical resistance."); - -static const u8 sIceBallDescription[] = _( - "A 5-turn attack that gains\n" - "power on successive hits."); - -static const u8 sNeedleArmDescription[] = _( - "Attacks with thorny arms.\n" - "May cause flinching."); - -static const u8 sSlackOffDescription[] = _( - "Slacks off and restores\n" - "half the maximum HP."); - -static const u8 sHyperVoiceDescription[] = _( - "A loud attack that uses\n" - "sound waves to injure."); - -static const u8 sPoisonFangDescription[] = _( - "A sharp-fanged attack.\n" - "May badly poison the foe."); - -static const u8 sCrushClawDescription[] = _( - "Tears at the foe with sharp\n" - "claws. May lower Defense."); - -static const u8 sBlastBurnDescription[] = _( - "Powerful, but damages the\n" - "user heavily."); - -static const u8 sHydroCannonDescription[] = _( - "Powerful, but damages the\n" - "user heavily."); - -static const u8 sMeteorMashDescription[] = _( - "Fires a meteor-like punch.\n" - "May raise Attack."); - -static const u8 sAstonishDescription[] = _( - "An attack that may shock\n" - "the foe into flinching."); - -static const u8 sWeatherBallDescription[] = _( - "The move's type and power\n" - "change with the weather."); - -static const u8 sAromatherapyDescription[] = _( - "Heals all status problems\n" - "with a soothing scent."); - -static const u8 sFakeTearsDescription[] = _( - "Feigns crying to sharply\n" - "lower the foe's Sp. Def."); - -static const u8 sAirCutterDescription[] = _( - "Hacks with razorlike wind.\n" - "High critical-hit ratio."); - -static const u8 sOverheatDescription[] = _( - "Allows a full-power attack,\n" - "but sharply lowers Sp. Atk."); - -static const u8 sOdorSleuthDescription[] = _( - "Negates the foe's efforts\n" - "to heighten evasiveness."); - -static const u8 sRockTombDescription[] = _( - "Stops the foe from moving\n" - "with rocks and cuts Speed."); - -static const u8 sSilverWindDescription[] = _( - "A powdery attack that may\n" - "raise abilities."); - -static const u8 sMetalSoundDescription[] = _( - "Emits a horrible screech\n" - "that sharply lowers Sp. Def."); - -static const u8 sGrassWhistleDescription[] = _( - "Lulls the foe into sleep\n" - "with a pleasant melody."); - -static const u8 sTickleDescription[] = _( - "Makes the foe laugh to\n" - "lower Attack and Defense."); - -static const u8 sCosmicPowerDescription[] = _( - "Raises Defense and Sp. Def\n" - "with a mystic power."); - -static const u8 sWaterSpoutDescription[] = _( - "Inflicts more damage if the\n" - "user's HP is high."); - -static const u8 sSignalBeamDescription[] = _( - "A strange beam attack that\n" - "may confuse the foe."); - -static const u8 sShadowPunchDescription[] = _( - "An unavoidable punch that\n" - "is thrown from shadows."); - -static const u8 sExtrasensoryDescription[] = _( - "Attacks with a peculiar\n" - "power. May cause flinching."); - -static const u8 sSkyUppercutDescription[] = _( - "An uppercut thrown as if\n" - "leaping into the sky."); - -static const u8 sSandTombDescription[] = _( - "Traps and hurts the foe in\n" - "quicksand for "BINDING_TURNS" turns."); - -static const u8 sSheerColdDescription[] = _( - "A chilling attack that\n" - "causes fainting if it hits."); - -static const u8 sMuddyWaterDescription[] = _( - "Attacks with muddy water.\n" - "May lower accuracy."); - -static const u8 sBulletSeedDescription[] = _( - "Shoots 2 to 5 seeds in a row\n" - "to strike the foe."); - -static const u8 sAerialAceDescription[] = _( - "An extremely speedy and\n" - "unavoidable attack."); - -static const u8 sIcicleSpearDescription[] = _( - "Attacks the foe by firing\n" - "2 to 5 icicles in a row."); - -static const u8 sIronDefenseDescription[] = _( - "Hardens the body's surface\n" - "to sharply raise Defense."); - -static const u8 sBlockDescription[] = _( - "Blocks the foe's way to\n" - "prevent escape."); - -static const u8 sHowlDescription[] = _( - "Howls to raise the spirit\n" - "and boosts Attack."); - -static const u8 sDragonClawDescription[] = _( - "Slashes the foe with sharp\n" - "claws."); - -static const u8 sFrenzyPlantDescription[] = _( - "Powerful, but damages the\n" - "user heavily."); - -static const u8 sBulkUpDescription[] = _( - "Bulks up the body to boost\n" - "both Attack and Defense."); - -static const u8 sBounceDescription[] = _( - "Bounces up, then down the\n" - "next turn. May paralyze."); - -static const u8 sMudShotDescription[] = _( - "Hurls mud at the foe and\n" - "reduces Speed."); - -static const u8 sPoisonTailDescription[] = _( - "Has a high critical-hit\n" - "ratio. May also poison."); - -static const u8 sCovetDescription[] = _( - "Cutely begs to obtain an\n" - "item held by the foe."); - -static const u8 sVoltTackleDescription[] = _( - "A life-risking tackle that\n" - "slightly hurts the user."); - -static const u8 sMagicalLeafDescription[] = _( - "Attacks with a strange leaf\n" - "that cannot be evaded."); - -static const u8 sWaterSportDescription[] = _( - "The user becomes soaked to\n" - "raise resistance to fire."); - -static const u8 sCalmMindDescription[] = _( - "Raises Sp. Atk and Sp. Def\n" - "by focusing the mind."); - -static const u8 sLeafBladeDescription[] = _( - "Slashes with a sharp leaf.\n" - "High critical-hit ratio."); - -static const u8 sDragonDanceDescription[] = _( - "A mystical dance that ups\n" - "Attack and Speed."); - -static const u8 sRockBlastDescription[] = _( - "Hurls boulders at the foe\n" - "2 to 5 times in a row."); - -static const u8 sShockWaveDescription[] = _( - "A fast and unavoidable\n" - "electric attack."); - -static const u8 sWaterPulseDescription[] = _( - "Attacks with ultrasonic\n" - "waves. May confuse the foe."); - -static const u8 sDoomDesireDescription[] = _( - "Summons strong sunlight to\n" - "attack 2 turns later."); - -static const u8 sPsychoBoostDescription[] = _( - "Allows a full-power attack,\n" - "but sharply lowers Sp. Atk."); - -static const u8 sRoostDescription[] = _( - "Restores the user's HP by\n" - "half of its max HP."); - -static const u8 sGravityDescription[] = _( - "Gravity is intensified\n" - "negating levitation."); - -static const u8 sMiracleEyeDescription[] = _( - "Negate evasiveness and\n" - "Dark-type's immunities."); - -static const u8 sWakeUpSlapDescription[] = _( - "Powerful against sleeping\n" - "foes, but also heals them."); - -static const u8 sHammerArmDescription[] = _( - "A swinging fist attack\n" - "that also lowers Speed."); - -static const u8 sGyroBallDescription[] = _( - "A high-speed spin that does\n" - "more damage to faster foes."); - -static const u8 sHealingWishDescription[] = _( - "The user faints to heal up\n" - "the recipient."); - -static const u8 sBrineDescription[] = _( - "Does double damage to foes\n" - "with half HP."); - -static const u8 sNaturalGiftDescription[] = _( - "The effectiveness varies\n" - "with the held Berry."); - -static const u8 sFeintDescription[] = _( - "An attack that hits foes\n" - "using moves like Protect."); - -static const u8 sPluckDescription[] = _( - "Eats the foe's held Berry\n" - "gaining its effect."); - -static const u8 sTailwindDescription[] = _( - "Whips up a turbulent breeze\n" - "that raises Speed."); - -static const u8 sAcupressureDescription[] = _( - "The user sharply raises\n" - "one of its stats."); - -static const u8 sMetalBurstDescription[] = _( - "Retaliates any hit with\n" - "greater power."); - -static const u8 sUTurnDescription[] = _( - "Does damage then switches\n" - "out the user."); - -static const u8 sCloseCombatDescription[] = _( - "A strong attack but lowers\n" - "the defensive stats."); - -static const u8 sPaybackDescription[] = _( - "An attack that gains power\n" - "if the user moves last."); - -static const u8 sAssuranceDescription[] = _( - "An attack that gains power\n" - "if the foe has been hurt."); - -static const u8 sEmbargoDescription[] = _( - "Prevents the foe from\n" - "using any items."); - -static const u8 sFlingDescription[] = _( - "The effectiveness varies\n" - "with the held item."); - -static const u8 sPsychoShiftDescription[] = _( - "Transfers status problems\n" - "to the foe."); - -static const u8 sTrumpCardDescription[] = _( - "The less PP the move has\n" - "the more damage it does."); - -static const u8 sHealBlockDescription[] = _( - "Prevents the foe from\n" - "recovering any HP."); - -static const u8 sWringOutDescription[] = _( - "The higher the foe's HP\n" - "the more damage caused."); - -static const u8 sPowerTrickDescription[] = _( - "The user swaps its Attack\n" - "and Defense stats."); - -static const u8 sGastroAcidDescription[] = _( - "Stomach acid suppresses\n" - "the foe's ability."); - -static const u8 sLuckyChantDescription[] = _( - "Prevents the foe from\n" - "landing critical hits."); - -static const u8 sMeFirstDescription[] = _( - "Executes the foe's attack\n" - "with greater power."); - -static const u8 sCopycatDescription[] = _( - "The user mimics the last\n" - "move used by a foe."); - -static const u8 sPowerSwapDescription[] = _( - "Swaps changes to Attack\n" - "and Sp. Atk with the foe."); - -static const u8 sGuardSwapDescription[] = _( - "Swaps changes to Defense\n" - "and Sp. Def with the foe."); - -static const u8 sPunishmentDescription[] = _( - "Does more damage if the\n" - "foe has powered up."); - -static const u8 sLastResortDescription[] = _( - "Can only be used if every\n" - "other move has been used."); - -static const u8 sWorrySeedDescription[] = _( - "Plants a seed on the foe\n" - "giving it Insomnia."); - -static const u8 sSuckerPunchDescription[] = _( - "Strikes first if the foe\n" - "is preparing an attack."); - -static const u8 sToxicSpikesDescription[] = _( - "Sets spikes that poison a\n" - "foe switching in."); - -static const u8 sHeartSwapDescription[] = _( - "Swaps any stat changes\n" - "with the foe."); - -static const u8 sAquaRingDescription[] = _( - "Forms a veil of water\n" - "that restores HP."); - -static const u8 sMagnetRiseDescription[] = _( - "The user levitates with\n" - "electromagnetism."); - -static const u8 sFlareBlitzDescription[] = _( - "A charge that may burn the\n" - "foe. Also hurts the user."); - -static const u8 sForcePalmDescription[] = _( - "A shock wave attack that\n" - "may paralyze the foe."); - -static const u8 sAuraSphereDescription[] = _( - "Attacks with an aura blast\n" - "that cannot be evaded."); - -static const u8 sRockPolishDescription[] = _( - "Polishes the body to\n" - "sharply raise Speed."); - -static const u8 sPoisonJabDescription[] = _( - "A stabbing attack that\n" - "may poison the foe."); - -static const u8 sDarkPulseDescription[] = _( - "Attacks with a horrible\n" - "aura. May cause flinching."); - -static const u8 sNightSlashDescription[] = _( - "Hits as soon as possible.\n" - "High critical-hit ratio."); - -static const u8 sAquaTailDescription[] = _( - "The user swings its tail\n" - "like a wave to attack."); - -static const u8 sSeedBombDescription[] = _( - "A barrage of hard seeds\n" - "is fired at the foe."); - -static const u8 sAirSlashDescription[] = _( - "Attacks with a blade of\n" - "air. May cause flinching."); - -static const u8 sXScissorDescription[] = _( - "Slashes the foe with crossed\n" - "scythes, claws, etc."); - -static const u8 sBugBuzzDescription[] = _( - "A damaging sound wave that\n" - "may lower Sp. Def."); - -static const u8 sDragonPulseDescription[] = _( - "Generates a shock wave to\n" - "damage the foe."); - -static const u8 sDragonRushDescription[] = _( - "Tackles the foe with menace.\n" - "May cause flinching."); - -static const u8 sPowerGemDescription[] = _( - "Attacks with rays of light\n" - "that sparkle like diamonds."); - -static const u8 sVacuumWaveDescription[] = _( - "Whirls its fists to send\n" - "a wave that strikes first."); - -static const u8 sFocusBlastDescription[] = _( - "Attacks at full power.\n" - "May lower Sp. Def."); - -static const u8 sEnergyBallDescription[] = _( - "Draws power from nature to\n" - "attack. May lower Sp. Def."); - -static const u8 sBraveBirdDescription[] = _( - "A low altitude charge that\n" - "also hurts the user."); - -static const u8 sEarthPowerDescription[] = _( - "Makes the ground erupt with\n" - "power. May lower Sp. Def."); - -static const u8 sSwitcherooDescription[] = _( - "Swaps items with the foe\n" - "faster than the eye can see."); - -static const u8 sNastyPlotDescription[] = _( - "Thinks bad thoughts to\n" - "sharply boost Sp. Atk."); - -static const u8 sBulletPunchDescription[] = _( - "Punches as fast as a bul-\n" - "let. It always hits first."); - -static const u8 sIceShardDescription[] = _( - "Hurls a chunk of ice that\n" - "always strike first."); - -static const u8 sShadowClawDescription[] = _( - "Strikes with a shadow claw.\n" - "High critical-hit ratio."); - -static const u8 sThunderFangDescription[] = _( - "May cause flinching or\n" - "leave the foe paralyzed."); - -static const u8 sIceFangDescription[] = _( - "May cause flinching or\n" - "leave the foe frozen."); - -static const u8 sFireFangDescription[] = _( - "May cause flinching or\n" - "leave the foe with a burn."); - -static const u8 sShadowSneakDescription[] = _( - "Extends the user's shadow\n" - "to strike first."); - -static const u8 sMudBombDescription[] = _( - "Throws a blob of mud to\n" - "damage and cut accuracy."); - -static const u8 sPsychoCutDescription[] = _( - "Tears with psychic blades.\n" - "High critical-hit ratio."); - -static const u8 sZenHeadbuttDescription[] = _( - "Hits with a strong head-\n" - "butt. May cause flinching."); - -static const u8 sMirrorShotDescription[] = _( - "Emits a flash of energy to\n" - "damage and cut accuracy."); - -static const u8 sFlashCannonDescription[] = _( - "Releases a blast of light\n" - "that may lower Sp. Def."); - -static const u8 sRockClimbDescription[] = _( - "A charging attack that may\n" - "confuse the foe."); - -static const u8 sDefogDescription[] = _( - "Removes obstacles and\n" - "lowers evasion."); - -static const u8 sTrickRoomDescription[] = _( - "Slower Pokémon get to move\n" - "first for 5 turns."); - -static const u8 sDracoMeteorDescription[] = _( - "Casts comets onto the foe.\n" - "Harshly lowers the Sp. Atk."); - -static const u8 sDischargeDescription[] = _( - "Zaps the foes with electri-\n" - "city. May paralyze them."); - -static const u8 sPowerWhipDescription[] = _( - "Violently lashes the foe\n" - "with vines or tentacles."); - -static const u8 sCrossPoisonDescription[] = _( - "A slash that may poison a\n" - "foe and do critical damage."); - -static const u8 sGunkShotDescription[] = _( - "Shoots filthy garbage at\n" - "the foe. May also poison."); - -static const u8 sIronHeadDescription[] = _( - "Slams the foe with a hard\n" - "head. May cause flinching."); - -static const u8 sMagnetBombDescription[] = _( - "Launches a magnet that\n" - "strikes without fail."); - -static const u8 sStoneEdgeDescription[] = _( - "Stabs the foe with stones.\n" - "High critical-hit ratio."); - -static const u8 sCaptivateDescription[] = _( - "Makes the opposite gender\n" - "sharply reduce its Sp. Atk."); - -static const u8 sStealthRockDescription[] = _( - "Sets floating stones that\n" - "hurt a foe switching in."); - -static const u8 sGrassKnotDescription[] = _( - "A snare attack that does\n" - "more damage to heavier foes."); - -static const u8 sChatterDescription[] = _( - "Attacks with a sound wave\n" - "that causes confusion."); - -static const u8 sJudgmentDescription[] = _( - "The type varies with the\n" - "kind of Plate held."); - -static const u8 sChargeBeamDescription[] = _( - "Fires a beam of electricity.\n" - "May raise Sp. Atk."); - -static const u8 sWoodHammerDescription[] = _( - "Slams the body into a foe.\n" - "The user gets hurt too."); - -static const u8 sAquaJetDescription[] = _( - "Strikes first by dashing\n" - "at the foe at a high speed."); - -static const u8 sAttackOrderDescription[] = _( - "Underlings pummel the foe.\n" - "High critical-hit ratio."); - -static const u8 sDefendOrderDescription[] = _( - "Raises Defense and Sp. Def\n" - "with a living shield."); - -static const u8 sHealOrderDescription[] = _( - "The user's underlings show\n" - "up to heal half its max HP."); - -static const u8 sHeadSmashDescription[] = _( - "A life-risking headbutt that\n" - "seriously hurts the user."); - -static const u8 sDoubleHitDescription[] = _( - "Slams the foe with a tail\n" - "etc. Strikes twice."); - -static const u8 sRoarOfTimeDescription[] = _( - "Powerful, but leaves the\n" - "user immobile the next turn."); - -static const u8 sSpacialRendDescription[] = _( - "Tears the foe, and space.\n" - "High critical-hit ratio."); - -static const u8 sMagmaStormDescription[] = _( - "Traps the foe in a vortex\n" - "of fire for "BINDING_TURNS" turns."); - -static const u8 sDarkVoidDescription[] = _( - "Drags the foe into total\n" - "darkness, inducing Sleep."); - -static const u8 sSeedFlareDescription[] = _( - "Generates a shock wave that\n" - "sharply reduces Sp. Def."); - -static const u8 sOminousWindDescription[] = _( - "A repulsive attack that may\n" - "raise all stats."); - -static const u8 sShadowForceDescription[] = _( - "Vanishes on the first turn\n" - "then strikes the next turn."); - -static const u8 sHoneClawsDescription[] = _( - "Sharpens its claws to raise\n" - "Attack and Accuracy."); - -static const u8 sWideGuardDescription[] = _( - "Evades wide-ranging attacks\n" - "for one turn."); - -static const u8 sGuardSplitDescription[] = _( - "Averages changes to Defense\n" - "and Sp. Def with the foe."); - -static const u8 sPowerSplitDescription[] = _( - "Averages changes to Attack\n" - "and Sp. Atk with the foe."); - -static const u8 sWonderRoomDescription[] = _( - "Defense and Sp. Def stats\n" - "are swapped for 5 turns."); - -static const u8 sPsyshockDescription[] = _( - "Attacks with a psychic wave\n" - "that does physical damage."); - -static const u8 sTailSlapDescription[] = _( - "Strikes the foe with its\n" - "tail 2 to 5 times."); - -static const u8 sVenoshockDescription[] = _( - "Does double damage if the\n" - "foe is poisoned."); - -static const u8 sAutotomizeDescription[] = _( - "Sheds additional weight to\n" - "sharply boost Speed."); - -static const u8 sRagePowderDescription[] = _( - "Scatters powder to make\n" - "foes attack only the user."); - -static const u8 sTelekinesisDescription[] = _( - "Makes the foe float. It is\n" - "easier to hit for 3 turns."); - -static const u8 sMagicRoomDescription[] = _( - "Hold items lose their\n" - "effects for 5 turns."); - -static const u8 sSmackDownDescription[] = _( - "Throws a rock to knock the\n" - "foe down to the ground."); - -static const u8 sStormThrowDescription[] = _( - "This attack always results\n" - "in a critical hit."); - -static const u8 sFlameBurstDescription[] = _( - "A bursting flame that does\n" - "damage to all foes."); - -static const u8 sSludgeWaveDescription[] = _( - "Swamps the foe with a wave\n" - "of sludge. May also poison."); - -static const u8 sQuiverDanceDescription[] = _( - "Dances to raise Sp. Atk\n" - "Sp. Def and Speed."); - -static const u8 sHeavySlamDescription[] = _( - "Does more damage if the\n" - "user outweighs the foe."); - -static const u8 sSynchronoiseDescription[] = _( - "An odd shock wave that only\n" - "damages same-type foes."); - -static const u8 sElectroBallDescription[] = _( - "Hurls an orb that does more\n" - "damage to slower foes."); - -static const u8 sSoakDescription[] = _( - "Sprays water at the foe\n" - "making it Water-type."); - -static const u8 sFlameChargeDescription[] = _( - "Attacks in a cloak of\n" - "flames. Raises Speed."); - -static const u8 sCoilDescription[] = _( - "Coils up to raise Attack\n" - "Defense and Accuracy."); - -static const u8 sLowSweepDescription[] = _( - "Attacks the foe's legs\n" - "lowering its Speed."); - -static const u8 sAcidSprayDescription[] = _( - "Sprays a hide-melting acid.\n" - "Sharply reduces Sp. Def."); - -static const u8 sFoulPlayDescription[] = _( - "The higher the foe's Attack\n" - "the more damage caused."); - -static const u8 sSimpleBeamDescription[] = _( - "A beam that changes the\n" - "foe's ability to Simple."); - -static const u8 sEntrainmentDescription[] = _( - "Makes the foe mimic the\n" - "user, gaining its ability."); - -static const u8 sAfterYouDescription[] = _( - "Helps out the foe, letting\n" - "it move next."); - -static const u8 sRoundDescription[] = _( - "A song that inflicts damage.\n" - "Others can join in too."); - -static const u8 sEchoedVoiceDescription[] = _( - "Does more damage every turn\n" - "it is used."); - -static const u8 sChipAwayDescription[] = _( - "Strikes through the foe's\n" - "stat changes."); - -static const u8 sClearSmogDescription[] = _( - "Attacks with white haze that\n" - "eliminates all stat changes."); - -static const u8 sStoredPowerDescription[] = _( - "The higher the user's stats\n" - "the more damage caused."); - -static const u8 sQuickGuardDescription[] = _( - "Evades priority attacks\n" - "for one turn."); - -static const u8 sAllySwitchDescription[] = _( - "The user switches places\n" - "with its partner."); - -static const u8 sScaldDescription[] = _( - "Shoots boiling water at the\n" - "foe. May inflict a burn."); - -static const u8 sShellSmashDescription[] = _( - "Raises offensive stats, but\n" - "lowers defensive stats."); - -static const u8 sHealPulseDescription[] = _( - "Recovers up to half the\n" - "target's maximum HP."); - -static const u8 sHexDescription[] = _( - "Does double damage if the\n" - "foe has a status problem."); - -static const u8 sSkyDropDescription[] = _( - "Takes the foe into the sky\n" - "then drops it the next turn."); - -static const u8 sShiftGearDescription[] = _( - "Rotates its gears to raise\n" - "Attack and Speed."); - -static const u8 sCircleThrowDescription[] = _( - "Knocks the foe away to end\n" - "the battle."); - -static const u8 sIncinerateDescription[] = _( - "Burns up Berries and Gems\n" - "preventing their use."); - -static const u8 sQuashDescription[] = _( - "Suppresses the foe, making\n" - "it move last."); - -static const u8 sAcrobaticsDescription[] = _( - "Does double damage if the\n" - "user has no item."); - -static const u8 sReflectTypeDescription[] = _( - "The user reflects the foe's\n" - "type, copying it."); - -static const u8 sRetaliateDescription[] = _( - "An attack that does more\n" - "damage if an ally fainted."); - -static const u8 sFinalGambitDescription[] = _( - "The user faints to damage\n" - "the foe equal to its HP."); - -static const u8 sBestowDescription[] = _( - "The user gives its held\n" - "item to the foe."); - -static const u8 sInfernoDescription[] = _( - "Powerful and sure to inflict\n" - "a burn, but inaccurate."); - -static const u8 sWaterPledgeDescription[] = _( - "Attacks with a column of\n" - "water. May make a rainbow."); - -static const u8 sFirePledgeDescription[] = _( - "Attacks with a column of\n" - "fire. May burn the grass."); - -static const u8 sGrassPledgeDescription[] = _( - "Attacks with a column of\n" - "grass. May create a swamp."); - -static const u8 sStruggleBugDescription[] = _( - "Resisting, the user attacks\n" - "the foe. Lowers Sp. Atk."); - -static const u8 sBulldozeDescription[] = _( - "Stomps down on the ground.\n" - "Lowers Speed."); - -static const u8 sWorkUpDescription[] = _( - "The user is roused.\n" - "Ups Attack and Sp. Atk."); - -static const u8 sElectrowebDescription[] = _( - "Snares the foe with an\n" - "electric net. Lowers Speed."); - -static const u8 sWildChargeDescription[] = _( - "An electrical tackle that\n" - "also hurts the user."); - -static const u8 sDrillRunDescription[] = _( - "Spins its body like a drill.\n" - "High critical-hit ratio."); - -static const u8 sDualChopDescription[] = _( - "Attacks with brutal hits\n" - "that strike twice."); - -static const u8 sHeartStampDescription[] = _( - "A sudden blow after a cute\n" - "act. May cause flinching."); - -static const u8 sRazorShellDescription[] = _( - "Tears at the foe with sharp\n" - "shells. May lower Defense."); - -static const u8 sLeafTornadoDescription[] = _( - "Circles the foe with leaves\n" - "to damage and cut accuracy."); - -static const u8 sSteamrollerDescription[] = _( - "Crushes the foe with its\n" - "body. May cause flinching."); - -static const u8 sCottonGuardDescription[] = _( - "Wraps its body in cotton.\n" - "Drastically raises Defense."); - -static const u8 sNightDazeDescription[] = _( - "Looses a pitch-black shock\n" - "wave. May lower accuracy."); - -static const u8 sHurricaneDescription[] = _( - "Traps the foe in a fierce\n" - "wind. May cause confusion."); - -static const u8 sHeadChargeDescription[] = _( - "A charge using guard hair.\n" - "It hurts the user a little."); - -static const u8 sGearGrindDescription[] = _( - "Throws two steel gears\n" - "that strike twice."); - -static const u8 sTechnoBlastDescription[] = _( - "The type varies with the\n" - "kind of Drive held."); - -static const u8 sRelicSongDescription[] = _( - "Attacks with an ancient\n" - "song. May induce sleep."); - -static const u8 sSecretSwordDescription[] = _( - "Cuts with a long horn that\n" - "does physical damage."); - -static const u8 sGlaciateDescription[] = _( - "Blows very cold air at the\n" - "foe. It lowers their Speed."); - -static const u8 sBoltStrikeDescription[] = _( - "Strikes with a great amount\n" - "of lightning. May paralyze."); - -static const u8 sBlueFlareDescription[] = _( - "Engulfs the foe in a blue\n" - "flame. May inflict a burn."); - -static const u8 sFieryDanceDescription[] = _( - "Dances cloaked in flames.\n" - "May raise Sp. Atk."); - -static const u8 sFreezeShockDescription[] = _( - "A powerful 2-turn move that\n" - "may paralyze the foe."); - -static const u8 sIceBurnDescription[] = _( - "A powerful 2-turn move that\n" - "may inflict a burn."); - -static const u8 sSnarlDescription[] = _( - "Yells and rants at the foe\n" - "lowering its Sp. Atk."); - -static const u8 sIcicleCrashDescription[] = _( - "Drops large icicles on the\n" - "foe. May cause flinching."); - -static const u8 sVCreateDescription[] = _( - "Very powerful, but lowers\n" - "Defense, Sp. Def and Speed."); - -static const u8 sFusionFlareDescription[] = _( - "Summons a fireball. Works\n" - "well with a thunderbolt."); - -static const u8 sFusionBoltDescription[] = _( - "Summons a thunderbolt.\n" - "Works well with a fireball."); - -static const u8 sFlyingPressDescription[] = _( - "This attack does Fighting\n" - "and Flying-type damage."); - -static const u8 sMatBlockDescription[] = _( - "Evades damaging moves\n" - "for one turn."); - -static const u8 sBelchDescription[] = _( - "Lets out a loud belch.\n" - "Must eat a Berry to use it."); - -static const u8 sRototillerDescription[] = _( - "Ups the Attack and Sp. Atk\n" - "of Grass-type Pokémon."); - -static const u8 sStickyWebDescription[] = _( - "Weaves a sticky net that\n" - "slows foes switching in."); - -static const u8 sFellStingerDescription[] = _( - "If it knocks out a foe\n" - "the Attack stat is raised."); - -static const u8 sTrickOrTreatDescription[] = _( - "Goes trick-or-treating\n" - "making the foe Ghost-type."); - -static const u8 sNobleRoarDescription[] = _( - "Intimidates the foe, to cut\n" - "Attack and Sp. Atk."); - -static const u8 sIonDelugeDescription[] = _( - "Electrifies Normal-type\n" - "moves with charged atoms."); - -static const u8 sParabolicChargeDescription[] = _( - "Damages adjacent Pokémon and\n" - "heals up by half of it."); - -static const u8 sForestsCurseDescription[] = _( - "Puts a curse on the foe\n" - "making the foe Grass-type."); - -static const u8 sPetalBlizzardDescription[] = _( - "Stirs up a violent storm\n" - "of petals to attack."); - -static const u8 sFreezeDryDescription[] = _( - "Super effective on Water-\n" - "types. May cause freezing."); - -static const u8 sDisarmingVoiceDescription[] = _( - "Lets out a charming cry\n" - "that cannot be evaded."); - -static const u8 sPartingShotDescription[] = _( - "Lowers the foe's Attack and\n" - "Sp. Atk, then switches out."); - -static const u8 sTopsyTurvyDescription[] = _( - "Swaps all stat changes that\n" - "affect the target."); - -static const u8 sDrainingKissDescription[] = _( - "An attack that absorbs over\n" - "half the damage inflicted."); - -static const u8 sCraftyShieldDescription[] = _( - "Evades status moves for\n" - "one turn."); - -static const u8 sFlowerShieldDescription[] = _( - "Raises the Defense of\n" - "Grass-type Pokémon."); - -static const u8 sGrassyTerrainDescription[] = _( - "The ground turns to grass\n" - "for 5 turns. Restores HP."); - -static const u8 sMistyTerrainDescription[] = _( - "Covers the ground with mist\n" - "for 5 turns. Blocks status."); - -static const u8 sElectrifyDescription[] = _( - "Electrifies the foe, making\n" - "its next move Electric-type."); - -static const u8 sPlayRoughDescription[] = _( - "Plays rough with the foe.\n" - "May lower Attack."); - -static const u8 sFairyWindDescription[] = _( - "Stirs up a fairy wind to\n" - "strike the foe."); - -static const u8 sMoonblastDescription[] = _( - "Attacks with the power of\n" - "the moon. May lower Sp. Atk."); - -static const u8 sBoomburstDescription[] = _( - "Attacks everything with a\n" - "destructive sound wave."); - -static const u8 sFairyLockDescription[] = _( - "Locks down the battlefield\n" - "preventing escape next turn."); - -static const u8 sKingsShieldDescription[] = _( - "Evades damage, and sharply\n" - "reduces Attack if struck."); - -static const u8 sPlayNiceDescription[] = _( - "Befriend the foe, lowering\n" - "its Attack without fail."); - -static const u8 sConfideDescription[] = _( - "Shares a secret with the\n" - "foe, lowering Sp. Atk."); - -static const u8 sDiamondStormDescription[] = _( - "Whips up a storm of\n" - "diamonds. May up Defense."); - -static const u8 sSteamEruptionDescription[] = _( - "Immerses the foe in heated\n" - "steam. May inflict a burn."); - -static const u8 sHyperspaceHoleDescription[] = _( - "Uses a warp hole to attack.\n" - "Can't be evaded."); - -static const u8 sWaterShurikenDescription[] = _( - "Throws 2 to 5 stars that\n" - "are sure to strike first."); - -static const u8 sMysticalFireDescription[] = _( - "Breathes a special, hot\n" - "fire. Lowers Sp. Atk."); - -static const u8 sSpikyShieldDescription[] = _( - "Evades attack, and damages\n" - "the foe if struck."); - -static const u8 sAromaticMistDescription[] = _( - "Raises the Sp. Def of a\n" - "partner Pokémon."); - -static const u8 sEerieImpulseDescription[] = _( - "Exposes the foe to a pulse\n" - "that sharply cuts Sp. Atk."); - -static const u8 sVenomDrenchDescription[] = _( - "Lowers the Attack, Sp. Atk\n" - "and Speed of a poisoned foe."); - -static const u8 sPowderDescription[] = _( - "Damages the foe if it uses\n" - "a Fire-type move."); - -static const u8 sGeomancyDescription[] = _( - "Raises Sp. Atk, Sp. Def and\n" - "Speed on the 2nd turn."); - -static const u8 sMagneticFluxDescription[] = _( - "Boosts the defenses of\n" - "those with Plus or Minus."); - -static const u8 sHappyHourDescription[] = _( - "Doubles the amount of\n" - "Prize Money received."); - -static const u8 sElectricTerrainDescription[] = _( - "Electrifies the ground for\n" - "5 turns. Prevents sleep."); - -static const u8 sDazzlingGleamDescription[] = _( - "Damages foes by emitting\n" - "a bright flash."); - -static const u8 sCelebrateDescription[] = _( - "Congratulates you on your\n" - "special day."); - -static const u8 sHoldHandsDescription[] = _( - "The user and ally hold hands\n" - "making them happy."); - -static const u8 sBabyDollEyesDescription[] = _( - "Lowers the foe's Attack\n" - "before it can move."); - -static const u8 sNuzzleDescription[] = _( - "Rubs its cheecks against\n" - "the foe, paralyzing it."); - -static const u8 sInfestationDescription[] = _( - "The foe is infested and\n" - "attacked for "BINDING_TURNS" turns."); - -static const u8 sPowerUpPunchDescription[] = _( - "A hard punch that raises\n" - "the user's Attack."); - -static const u8 sThousandArrowsDescription[] = _( - "Can hit Flying foes, then\n" - "knocks them to the ground."); - -static const u8 sThousandWavesDescription[] = _( - "Those hit by the wave can\n" - "no longer escape."); - -static const u8 sLandsWrathDescription[] = _( - "Gathers the energy of the\n" - "land to attack every foe."); - -static const u8 sLightOfRuinDescription[] = _( - "Fires a great beam of light\n" - "that also hurts the user."); - -static const u8 sOriginPulseDescription[] = _( - "Beams of glowing blue light\n" - "blast both foes."); - -static const u8 sPrecipiceBladesDescription[] = _( - "Fearsome blades of stone\n" - "attack both foes."); - -static const u8 sLavaPlumeDescription[] = _( - "Scarlet flames torch\n" - "everything around the user."); - -static const u8 sLeafStormDescription[] = _( - "Whips up a storm of leaves.\n" - "Harshly lowers the Sp. Atk."); - -static const u8 sShoreUpDescription[] = _( - "Restores the user's HP.\n" - "More HP in a sandstorm."); - -static const u8 sFirstImpressionDescription[] = _( - "Hits hard and first.\n" - "Only works first turn."); - -static const u8 sBanefulBunkerDescription[] = _( - "Protects user and poisons\n" - "foes on contact."); - -static const u8 sSpiritShackleDescription[] = _( - "After being hit, foes can\n" - "no longer escape."); - -static const u8 sDarkestLariatDescription[] = _( - "Swings the arms to strike\n" - "It ignores stat changes."); - -static const u8 sSparklingAriaDescription[] = _( - "Sings with bubbles. Cures\n" - "burns on contact."); - -static const u8 sIceHammerDescription[] = _( - "Swings the fist to strike.\n" - "Lowers the user's Speed."); - -static const u8 sFloralHealingDescription[] = _( - "Restores an ally's HP.\n" - "Heals more on grass."); - -static const u8 sHighHorsepowerDescription[] = _( - "Slams hard into the foe with\n" - "its entire body."); - -static const u8 sStrengthSapDescription[] = _( - "Saps the foe's Attack to\n" - "heal HP, then drops Attack."); - -static const u8 sSolarBladeDescription[] = _( - "Charges first turn, then\n" - "chops with a blade of light."); - -static const u8 sLeafageDescription[] = _( - "Attacks with a flurry of\n" - "small leaves."); - -static const u8 sSpotlightDescription[] = _( - "Makes the foe attack the\n" - "spotlighted Pokémon."); - -static const u8 sToxicThreadDescription[] = _( - "Attacks with a thread that\n" - "poisons and drops Speed."); - -static const u8 sLaserFocusDescription[] = _( - "Guarantees the next move\n" - "will be a critical hit."); - -static const u8 sGearUpDescription[] = _( - "Boosts the attacks of\n" - "those with Plus or Minus."); - -static const u8 sThroatChopDescription[] = _( - "Chops the throat to disable\n" - "sound moves for a while."); - -static const u8 sPollenPuffDescription[] = _( - "Explodes on foes, but\n" - "restores ally's HP."); - -static const u8 sAnchorShotDescription[] = _( - "Strangles the foe with a\n" - "chain. The foe can't escape."); - -static const u8 sPsychicTerrainDescription[] = _( - "The ground turns weird for\n" - "5 turns. Blocks priority."); - -static const u8 sLungeDescription[] = _( - "Lunges at the foe to lower\n" - "its Attack stat."); - -static const u8 sFireLashDescription[] = _( - "Whips the foe with fire\n" - "lowering its Defense."); - -static const u8 sPowerTripDescription[] = _( - "It hits harder the more\n" - "stat boosts the user has."); - -static const u8 sBurnUpDescription[] = _( - "Burns out the user fully\n" - "removing the Fire type."); - -static const u8 sSpeedSwapDescription[] = _( - "Swaps user's Speed with\n" - "the target's."); - -static const u8 sSmartStrikeDescription[] = _( - "Hits with an accurate\n" - "horn that never misses."); - -static const u8 sPurifyDescription[] = _( - "Cures the foe's status\n" - "to restore HP."); - -static const u8 sRevelationDanceDescription[] = _( - "Dances with mystical power.\n" - "Matches user's first type."); - -static const u8 sCoreEnforcerDescription[] = _( - "Hits with a ray that\n" - "nullifies the foe's ability."); - -static const u8 sTropKickDescription[] = _( - "An intense kick from the\n" - "tropics. Lowers Attack."); - -static const u8 sInstructDescription[] = _( - "Orders the target to use\n" - "its last move again."); - -static const u8 sBeakBlastDescription[] = _( - "Heats up beak to attack.\n" - "Burns foe on contact."); - -static const u8 sClangingScalesDescription[] = _( - "Makes a big noise with\n" - "its scales. Drops Defense."); - -static const u8 sDragonHammerDescription[] = _( - "Swings its whole body\n" - "like a hammer to damage."); - -static const u8 sBrutalSwingDescription[] = _( - "Violently swings around\n" - "to hurt everyone nearby."); - -static const u8 sAuroraVeilDescription[] = _( - "Weakens all attacks, but\n" - "only usable with hail."); - -static const u8 sShellTrapDescription[] = _( - "Sets a shell trap that\n" - "damages on contact."); - -static const u8 sFleurCannonDescription[] = _( - "A strong ray that harshly\n" - "lowers Sp. Attack."); - -static const u8 sPsychicFangsDescription[] = _( - "Chomps with psychic fangs.\n" - "Destroys any barriers."); - -static const u8 sStompingTantrumDescription[] = _( - "Stomps around angrily.\n" - "Stronger after a failure."); - -static const u8 sShadowBoneDescription[] = _( - "Strikes with a haunted\n" - "bone. Might drop Defense."); - -static const u8 sAccelerockDescription[] = _( - "Hits with a high-speed\n" - "rock that always goes first."); - -static const u8 sLiquidationDescription[] = _( - "Slams the foe with water.\n" - "Can lower Defense."); - -static const u8 sPrismaticLaserDescription[] = _( - "A high power laser that\n" - "forces recharge next turn."); - -static const u8 sSpectralThiefDescription[] = _( - "Steals the target's stat\n" - "boosts, then attacks."); - -static const u8 sSunsteelStrikeDescription[] = _( - "A sun-fueled strike that\n" - "ignores abilities."); - -static const u8 sMoongeistBeamDescription[] = _( - "A moon-powered beam that\n" - "ignores abilities."); - -static const u8 sTearfulLookDescription[] = _( - "The user tears up, dropping\n" - "Attack and Sp. Attack."); - -static const u8 sZingZapDescription[] = _( - "An electrified impact that\n" - "can cause flinching."); - -static const u8 sNaturesMadnessDescription[] = _( - "Halves the foe's HP with\n" - "the power of nature."); - -static const u8 sMultiAttackDescription[] = _( - "An attack that changes\n" - "with Memories."); - -static const u8 sMindBlownDescription[] = _( - "It explodes the user's head\n" - "to damage everything around."); - -static const u8 sPlasmaFistsDescription[] = _( - "Hits with electrical fists.\n" - "Normal moves become Electric."); - -static const u8 sPhotonGeyserDescription[] = _( - "User's highest attack stat\n" - "determines its category."); - -static const u8 sZippyZapDescription[] = _( - "Electric bursts always go\n" - "first and land a critical hit."); - -static const u8 sSplishySplashDescription[] = _( - "A huge electrified wave that\n" - "may paralyze the foe."); - -static const u8 sFloatyFallDescription[] = _( - "Floats in air and dives at\n" - "angle. May cause flinching."); - -static const u8 sPikaPapowDescription[] = _( - "Pikachu's love increases its\n" - "power. It never misses."); - -static const u8 sBouncyBubbleDescription[] = _( - "An attack that absorbs\n" -#if B_UPDATED_MOVE_DATA >= GEN_8 - "all the damage inflicted."); -#else - "half the damage inflicted."); -#endif - -static const u8 sBuzzyBuzzDescription[] = _( - "Shoots a jolt of electricity\n" - "that always paralyzes."); - -static const u8 sSizzlySlideDescription[] = _( - "User cloaked in fire charges.\n" - "Leaves the foe with a burn."); - -static const u8 sGlitzyGlowDescription[] = _( - "Telekinetic force that sets\n" - "wall, lowering Sp. Atk damage."); - -static const u8 sBaddyBadDescription[] = _( - "Acting badly, attacks. Sets\n" - "wall, lowering Attack damage."); - -static const u8 sSappySeedDescription[] = _( - "Giant stalk scatters seeds\n" - "that drain HP every turn."); - -static const u8 sFreezyFrostDescription[] = _( - "Crystal from cold haze hits.\n" - "Eliminates all stat changes."); - -static const u8 sSparklySwirlDescription[] = _( - "Wrap foe with whirlwind of\n" - "scent. Heals party's status."); - -static const u8 sVeeveeVolleyDescription[] = _( - "Eevee's love increases its\n" - "power. It never misses."); - -static const u8 sDoubleIronBashDescription[] = _( - "The user spins and hits with\n" - "its arms. May cause flinch."); - -// GEN 8 -static const u8 sDynamaxCannonDescription[] = _( - "Fires a strong beam. Deals\n" - "2x damage to Dynamaxed foes."); - -static const u8 sSnipeShotDescription[] = _( - "The user ignores effects\n" - "that draw in moves."); - -static const u8 sJawLockDescription[] = _( - "Prevents the user and\n" - "the target from escaping."); - -static const u8 sStuffCheeksDescription[] = _( - "Consumes the user's Berry,\n" - "then sharply raises Def."); - -static const u8 sNoRetreatDescription[] = _( - "Raises all of the user's\n" - "stats but prevents escape."); - -static const u8 sTarShotDescription[] = _( - "Lowers the foe's Speed and\n" - "makes it weak to Fire."); - -static const u8 sMagicPowderDescription[] = _( - "Magic powder changes the\n" - "target into a Psychic-type."); - -static const u8 sDragonDartsDescription[] = _( - "The user attacks twice. Two\n" - "targets are hit once each."); - -static const u8 sTeatimeDescription[] = _( - "All Pokémon have teatime\n" - "and eat their Berries."); - -static const u8 sOctolockDescription[] = _( - "Traps the foe to lower Def\n" - "and Sp. Def fall each turn."); - -static const u8 sBoltBeakDescription[] = _( - "Double power if the user\n" - "moves before the target."); - -static const u8 sFishiousRendDescription[] = _( - "Double power if the user\n" - "moves before the target."); - -static const u8 sCourtChangeDescription[] = _( - "The user swaps effects on\n" - "either side of the field."); - -static const u8 sClangorousSoulDescription[] = _( - "The user uses some of its\n" - "HP to raise all its stats."); - -static const u8 sBodyPressDescription[] = _( - "Does more damage the\n" - "higher the user's Def."); - -static const u8 sDecorateDescription[] = _( - "The user sharply raises\n" - "the target's Atk and Sp.Atk"); - -static const u8 sDrumBeatingDescription[] = _( - "Plays a drum to attack.\n" - "The foe's Speed is lowered."); - -static const u8 sSnapTrapDescription[] = _( - "Snares the target in a snap\n" - "trap for four to five turns."); - -static const u8 sPyroBallDescription[] = _( - "Launches a fiery ball at the\n" - "target. It may cause a burn."); - -static const u8 sBehemothBladeDescription[] = _( - "Strikes as a sword. Deals 2x\n" - "damage to Dynamaxed foes."); - -static const u8 sBehemothBashDescription[] = _( - "Attacks as a shield. Deals 2x\n" - "damage to Dynamaxed foes."); - -static const u8 sAuraWheelDescription[] = _( - "Raises Speed to attack. The\n" - "Type is based on its form."); - -static const u8 sBreakingSwipeDescription[] = _( - "Swings its tail to attack.\n" - "Lowers the Atk of those hit."); - -static const u8 sBranchPokeDescription[] = _( - "The user pokes the target\n" - "with a pointed branch."); - -static const u8 sOverdriveDescription[] = _( - "The user twangs its guitar,\n" - "causing strong vibrations."); - -static const u8 sAppleAcidDescription[] = _( - "Attacks with tart apple acid\n" - "to lower the foe's Sp. Def."); - -static const u8 sGravAppleDescription[] = _( - "Drops an apple from above.\n" - "Lowers the foe's Defense."); - -static const u8 sSpiritBreakDescription[] = _( - "Attacks with spirit-breaking\n" - "force. Lowers Sp. Atk."); - -static const u8 sStrangeSteamDescription[] = _( - "Emits a strange steam to\n" - "potentially confuse the foe."); - -static const u8 sLifeDewDescription[] = _( - "Scatters water to restore\n" - "the HP of itself and allies."); - -static const u8 sObstructDescription[] = _( - "Protects itself, harshly\n" - "lowering Def on contact."); - -static const u8 sFalseSurrenderDescription[] = _( - "Bows to stab the foe\n" - "with hair. It never misses."); - -static const u8 sMeteorAssaultDescription[] = _( - "Attacks with a thick leek.\n" - "The user must then rest."); - -static const u8 sEternabeamDescription[] = _( - "Eternatus' strongest move.\n" - "The user rests next turn."); - -static const u8 sSteelBeamDescription[] = _( - "Fires a beam of steel from\n" - "its body. It hurts the user."); - -static const u8 sExpandingForceDescription[] = _( - "Power goes up and damages\n" - "all foes on Psychic Terrain."); - -static const u8 sSteelRollerDescription[] = _( - "Destroys terrain. Fails if\n" - "ground isn't terrain."); - -static const u8 sScaleShotDescription[] = _( - "Shoots scales 2 to 5 times.\n" - "Ups Speed, lowers defense."); - -static const u8 sMeteorBeamDescription[] = _( - "A 2-turn move that raises\n" - "Sp. Attack before attacking."); - -static const u8 sShellSideArmDescription[] = _( - "Deals better of physical and\n" - "special damage. May poison."); - -static const u8 sMistyExplosionDescription[] = _( - "Hit everything and faint.\n" - "Powers up on Misty Terrain."); - -static const u8 sGrassyGlideDescription[] = _( - "Gliding on ground, hits. Goes\n" - "first on Grassy Terrain."); - -static const u8 sRisingVoltageDescription[] = _( - "This move's power doubles\n" - "when on Electric Terrain."); - -static const u8 sTerrainPulseDescription[] = _( - "Type and power changes\n" - "depending on the terrain."); - -static const u8 sSkitterSmackDescription[] = _( - "User skitters behind foe to\n" - "attack. Lowers foe's Sp. Atk."); - -static const u8 sBurningJealousyDescription[] = _( - "Foes that have stats upped\n" - "during the turn get burned."); - -static const u8 sLashOutDescription[] = _( - "If stats lowered during this\n" - "turn, power is doubled."); - -static const u8 sPoltergeistDescription[] = _( - "Control foe's item to attack.\n" - "Fails if foe has no item."); - -static const u8 sCorrosiveGasDescription[] = _( - "Highly acidic gas melts items\n" - "held by surrounding Pokémon."); - -static const u8 sCoachingDescription[] = _( - "Properly coaches allies to\n" - "up their Attack and Defense."); - -static const u8 sFlipTurnDescription[] = _( - "Attacks and rushes back to\n" - "switch with a party Pokémon."); - -static const u8 sTripleAxelDescription[] = _( - "A 3-kick attack that gets\n" - "more powerful with each hit."); - -static const u8 sDualWingbeatDescription[] = _( - "User slams the target with\n" - "wings and hits twice in a row."); - -static const u8 sScorchingSandsDescription[] = _( - "Throws scorching sand at\n" - "the target. May leave a burn."); - -static const u8 sJungleHealingDescription[] = _( - "Heals HP and status of\n" - "itself and allies in battle."); - -static const u8 sWickedBlowDescription[] = _( - "Mastering the Dark style,\n" - "strikes with a critical hit."); - -static const u8 sSurgingStrikesDescription[] = _( - "Mastering the Water style,\n" - "strikes with 3 critical hits."); - -static const u8 sThunderCageDescription[] = _( - "Traps the foe in a cage of\n" - "electricity for "BINDING_TURNS" turns."); - -static const u8 sDragonEnergyDescription[] = _( - "The higher the user's HP\n" - "the more damage caused."); - -static const u8 sFreezingGlareDescription[] = _( - "Shoots psychic power from\n" -#if B_USE_FROSTBITE == TRUE - "the eyes. May frostbite."); -#else - "the eyes. May freeze the foe."); -#endif - -static const u8 sFieryWrathDescription[] = _( - "An attack fueled by your\n" - "wrath. May cause flinching."); - -static const u8 sThunderousKickDescription[] = _( - "Uses a lightning-like kick\n" - "to hit. Lowers foe's Defense."); - -static const u8 sGlacialLanceDescription[] = _( - "Strikes by hurling a blizzard-\n" - "cloaked icicle lance at foes."); - -static const u8 sAstralBarrageDescription[] = _( - "Strikes by sending a frightful\n" - "amount of ghosts at foes."); - -static const u8 sEerieSpellDescription[] = _( - "Attacks with psychic power.\n" - "Foe's last move has 3 PP cut."); - -static const u8 sDireClawDescription[] = _( - "High critical hit chance. May\n" - "paralyze, poison or drowse."); - -static const u8 sPsyshieldBashDescription[] = _( - "Hits a foe with psychic\n" - "energy. May raise Defense."); - -static const u8 sPowerShiftDescription[] = _( - "The user swaps its Attack\n" - "and Defense stats."); - -static const u8 sStoneAxeDescription[] = _( - "High critical hit ratio. Sets\n" - "Splinters that hurt the foe."); - -static const u8 sSpringtideStormDescription[] = _( - "Wraps a foe in fierce winds.\n" - "Varies with the user's form."); - -static const u8 sMysticalPowerDescription[] = _( - "A mysterious power strikes,\n" - "raising the user's Sp. Atk."); - -static const u8 sRagingFuryDescription[] = _( - "A rampage of 2 to 3 turns\n" - "that confuses the user."); - -static const u8 sWaveCrashDescription[] = _( - "A slam shrouded in water.\n" - "It also hurts the user."); - -static const u8 sChloroblastDescription[] = _( - "A user-hurting blast of\n" - "amassed chlorophyll."); - -static const u8 sMountainGaleDescription[] = _( - "Giant chunks of ice damage\n" - "the foe. It may flinch."); - -static const u8 sVictoryDanceDescription[] = _( - "Dances to raise Attack,\n" - "Defense and Speed."); - -static const u8 sHeadlongRushDescription[] = _( - "Hits with a full-body tackle.\n" - "Lowers the users's defenses."); - -static const u8 sBarbBarrageDescription[] = _( - "Can poison on impact. Powers\n" - "up against poisoned foes."); - -static const u8 sEsperWingDescription[] = _( - "High critical hit ratio.\n" - "Ups the user's Speed."); - -static const u8 sBitterMaliceDescription[] = _( - "A spine-chilling resentment.\n" - "May lower the foe's Attack."); - -static const u8 sShelterDescription[] = _( - "The user hardens their skin,\n" - "sharply raising its Defense."); - -static const u8 sTripleArrowsDescription[] = _( - "High critical hit ratio.\n" - "May lower Defense or flinch."); - -static const u8 sInfernalParadeDescription[] = _( - "Hurts a foe harder if it has\n" - "an ailment. May leave a burn."); - -static const u8 sCeaselessEdgeDescription[] = _( - "High critical hit ratio. Sets\n" - "Splinters that hurt the foe."); - -static const u8 sBleakwindStormDescription[] = _( - "Hits with brutal, cold winds.\n" - "May lower the foe's Speed."); - -static const u8 sWildboltStormDescription[] = _( - "Hits with a brutal tempest.\n" - "May inflict paralysis."); - -static const u8 sSandsearStormDescription[] = _( - "Hits with brutally hot sand.\n" - "May inflict a burn."); - -static const u8 sLunarBlessingDescription[] = _( - "The user heals and cures\n" - "itself and its ally."); - -static const u8 sTakeHeartDescription[] = _( - "The user lifts its spirits to\n" - "heal and strengthen itself."); - -static const u8 sTeraBlastDescription[] = _( - "If the user's Terastallized,\n" - "it hits with its Tera-type."); - -static const u8 sSilkTrapDescription[] =_( - "Protects itself, lowering\n" - "Speed on contact."); - -static const u8 sAxeKickDescription[] = _( - "May miss and hurt the kicker.\n" - "May cause confusion."); - -static const u8 sLastRespectsDescription[] = _( - "This move deals more damage\n" - "for each defeated ally."); - -static const u8 sLuminaCrashDescription[] = _( - "A mind-affecting light\n" - "harshly lowers Sp. Def."); - -static const u8 sOrderUpDescription[] = _( - "Boosts a user's stats\n" - "depending on Tatsugiri."); - -static const u8 sJetPunchDescription[] = _( - "A punch is thrown at blinding\n" - "speed to strike first."); - -static const u8 sSpicyExtractDescription[] = _( - "Sharply ups target's Attack,\n" - "harshly lowers its Defense."); - -static const u8 sSpinOutDescription[] = _( - "Furiously strains its legs.\n" - "Harshly lowers user's Speed."); - -static const u8 sPopulationBombDescription[] = _( - "The user's fellows hit one\n" - "to ten times in a row."); - -static const u8 sIceSpinnerDescription[] = _( - "Ice-covered feet hit a foe\n" - "and destroy the terrain."); - -static const u8 sGlaiveRushDescription[] = _( - "Foe attacks next turn can't\n" - "miss and do double damage."); - -static const u8 sRevivalBlessingDescription[] = _( - "Revives a fainted party {PKMN}\n" - "and restores half of its HP."); - -static const u8 sSaltCureDescription[] = _( - "Hurts foe every turn. Double\n" - "damage to Steel and Water."); - -static const u8 sTripleDiveDescription[] = _( - "Hits target with splashes\n" - "of water 3 times in a row."); - -static const u8 sMortalSpinDescription[] = _( - "Erases trap moves and Leech\n" - "Seed. Poisons adjecent foes."); - -static const u8 sDoodleDescription[] = _( - "Changes user's and ally's\n" - "Ability into the target's."); - -static const u8 sFilletAwayDescription[] = _( - "Sharply boosts offenses and\n" - "Speed by using its own HP."); - -static const u8 sKowtowCleaveDescription[] = _( - "User slashes the foe after\n" - "kowtowing. It never misses."); - -static const u8 sFlowerTrickDescription[] = _( - "Rigged bouquet. Always gets\n" - "a critical hit, never missing."); - -static const u8 sTorchSongDescription[] = _( - "Flames scorch the target.\n" - "Boosts the user's Sp. Atk."); - -static const u8 sAquaStepDescription[] = _( - "Hits with light, fluid dance\n" - "steps. Ups the user's Speed."); - -static const u8 sRagingBullDescription[] = _( - "Tackle that breaks barriers.\n" - "User's form determines type."); - -static const u8 sMakeItRainDescription[] = _( - "Lowers the user's Sp. Atk.\n" - "Money is recovered after."); - -static const u8 sRuinationDescription[] = _( - "Summons a ruinous disaster\n" - "and cuts half the foe's HP."); - -static const u8 sCollisionCourseDescription[] = _( - "Prehistoric explosion that's\n" - "stronger if supereffective."); - -static const u8 sElectroDriftDescription[] = _( - "Futuristic electricity. It's\n" - "stronger if supereffective."); - -static const u8 sShedTailDescription[] = _( - "Creates a Substitute for\n" - "itself before switching out."); - -static const u8 sChillyReceptionDescription[] =_( - "Bad joke summons snowstorm.\n" - "The user also switches out."); - -static const u8 sTidyUpDescription[] = _( - "User tidies up hazards and\n" - "raises its Attack and Speed."); - -static const u8 sSnowscapeDescription[] = _( - "Summons a snowstorm that\n" - "lasts for five turns."); - -static const u8 sPounceDescription[] = _( - "The user pounces on the foe,\n" - "lowering its Speed."); - -static const u8 sTrailblazeDescription[] = _( - "The user attacks suddenly,\n" - "raising its Speed."); - -static const u8 sChillingWaterDescription[] = _( - "A shower with ice-cold water\n" - "lowers the target's Attack."); - -static const u8 sHyperDrillDescription[] = _( - "A spinning pointed part\n" - "bypasses a foe's Protect."); - -static const u8 sTwinBeamDescription[] = _( - "Mystical eye-beams that hit\n" - "the target twice in a row."); - -static const u8 sRageFistDescription[] = _( - "The more the user has been\n" - "hit, the stronger the move."); - -static const u8 sArmorCannonDescription[] = _( - "A strong attack but lowers\n" - "the defensive stats."); - -static const u8 sBitterBladeDescription[] = _( - "An attack that absorbs\n" - "half the damage inflicted."); - -static const u8 sDoubleShockDescription[] = _( - "Discharges all electricity,\n" - "losing the Electric type."); - -static const u8 sGigatonHammerDescription[] = _( - "Swings a huge hammer. Can't\n" - "be used twice in a row."); - -static const u8 sComeuppanceDescription[] = _( - "Retaliates strongly against\n" - "who last hurt the user."); - -static const u8 sAquaCutterDescription[] = _( - "Pressurized water cut with a\n" - "high critical-hit ratio."); - -static const u8 sBlazingTorqueDescription[] = _( - "---"); - -static const u8 sWickedTorqueDescription[] = _( - "---"); - -static const u8 sNoxiousTorqueDescription[] = _( - "---"); - -static const u8 sCombatTorqueDescription[] = _( - "---"); - -static const u8 sMagicalTorqueDescription[] = _( - "---"); - -static const u8 sPsybladeDescription[] = _( - "This move's power increases\n" - "when on Electric Terrain."); - -static const u8 sHydroSteamDescription[] = _( - "This move's power increases\n" - "under harsh sunlight."); - -static const u8 sBloodMoonDescription[] = _( - "Unleashes the blood moon.\n" - "Can't be used twice in a row."); - -static const u8 sMatchaGotchaDescription[] = _( - "Absorbs half the damage\n" - "inflicted. May cause a burn."); - -static const u8 sSyrupBombDescription[] = _( - "Lowers the foe's speed\n" - "each turn for 3 turns."); - -static const u8 sIvyCudgelDescription[] = _( - "Type changes with held mask.\n" - "High critical-hit ratio."); - -static const u8 sElectroShotDescription[] = _( - "Absorbs electricity in one turn,\n" - "then attacks next turn."); - -static const u8 sTeraStarstormDescription[] = _( - "Damages all opponents if user is\n" - "Stellar form Terapagos."); - -static const u8 sFickleBeamDescription[] = _( - "Shoots a beam of light. Sometimes\n" - "twice as strong."); - -static const u8 sBurningBulwarkDescription[] = _( - "Evades attack, and burns\n" - "the foe if struck."); - -static const u8 sTachyonCutterDescription[] = _( - "Launches particle blades at\n" - "the target. Strikes twice."); - -static const u8 sDragonCheerDescription[] = _( - "Increases allies' critical hit\n" - "ration, especially if Dragons."); - -static const u8 sAlluringVoiceDescription[] = _( - "Confuses the target if their\n" - "stats were boosted this turn."); - -static const u8 sTemperFlareDescription[] = _( - "A desperation attack. Power\n" - "doubles if last move failed."); - -static const u8 sSupercellSlamDescription[] = _( - "An electrified slam. If it\n" - "misses, the user is hurt."); - -static const u8 sPsychicNoiseDescription[] = _( - "Unpleasant sound waves that\n" - "damage and prevent healing."); - -static const u8 sUpperHandDescription[] = _( - "Makes the target flinch if\n" - "readying a priority move."); - -static const u8 sMalignantChainDescription[] = _( - "A corrosive chain attack\n" - "that may badly poison."); - -static const u8 sSylphSongDescription[] = _( - "A powerfull song that\n" - "may induce sleep."); - -const u8 gNotDoneYetDescription[] = _( - "This move can't be used. Its\n" - "effect is in development."); - -#undef BINDING_TURNS - -// MOVE_NONE is ignored in this table. Make sure to always subtract 1 before getting the right pointer. -const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = -{ - [MOVE_POUND - 1] = sPoundDescription, - [MOVE_KARATE_CHOP - 1] = sKarateChopDescription, - [MOVE_DOUBLE_SLAP - 1] = sDoubleSlapDescription, - [MOVE_COMET_PUNCH - 1] = sCometPunchDescription, - [MOVE_MEGA_PUNCH - 1] = sMegaPunchDescription, - [MOVE_PAY_DAY - 1] = sPayDayDescription, - [MOVE_FIRE_PUNCH - 1] = sFirePunchDescription, - [MOVE_ICE_PUNCH - 1] = sIcePunchDescription, - [MOVE_THUNDER_PUNCH - 1] = sThunderPunchDescription, - [MOVE_SCRATCH - 1] = sScratchDescription, - [MOVE_VISE_GRIP - 1] = sViseGripDescription, - [MOVE_GUILLOTINE - 1] = sGuillotineDescription, - [MOVE_RAZOR_WIND - 1] = sRazorWindDescription, - [MOVE_SWORDS_DANCE - 1] = sSwordsDanceDescription, - [MOVE_CUT - 1] = sCutDescription, - [MOVE_GUST - 1] = sGustDescription, - [MOVE_WING_ATTACK - 1] = sWingAttackDescription, - [MOVE_WHIRLWIND - 1] = sWhirlwindDescription, - [MOVE_FLY - 1] = sFlyDescription, - [MOVE_BIND - 1] = sBindDescription, - [MOVE_SLAM - 1] = sSlamDescription, - [MOVE_VINE_WHIP - 1] = sVineWhipDescription, - [MOVE_STOMP - 1] = sStompDescription, - [MOVE_DOUBLE_KICK - 1] = sDoubleKickDescription, - [MOVE_MEGA_KICK - 1] = sMegaKickDescription, - [MOVE_JUMP_KICK - 1] = sJumpKickDescription, - [MOVE_ROLLING_KICK - 1] = sRollingKickDescription, - [MOVE_SAND_ATTACK - 1] = sSandAttackDescription, - [MOVE_HEADBUTT - 1] = sHeadbuttDescription, - [MOVE_HORN_ATTACK - 1] = sHornAttackDescription, - [MOVE_FURY_ATTACK - 1] = sFuryAttackDescription, - [MOVE_HORN_DRILL - 1] = sHornDrillDescription, - [MOVE_TACKLE - 1] = sTackleDescription, - [MOVE_BODY_SLAM - 1] = sBodySlamDescription, - [MOVE_WRAP - 1] = sWrapDescription, - [MOVE_TAKE_DOWN - 1] = sTakeDownDescription, - [MOVE_THRASH - 1] = sThrashDescription, - [MOVE_DOUBLE_EDGE - 1] = sDoubleEdgeDescription, - [MOVE_TAIL_WHIP - 1] = sTailWhipDescription, - [MOVE_POISON_STING - 1] = sPoisonStingDescription, - [MOVE_TWINEEDLE - 1] = sTwineedleDescription, - [MOVE_PIN_MISSILE - 1] = sPinMissileDescription, - [MOVE_LEER - 1] = sLeerDescription, - [MOVE_BITE - 1] = sBiteDescription, - [MOVE_GROWL - 1] = sGrowlDescription, - [MOVE_ROAR - 1] = sRoarDescription, - [MOVE_SING - 1] = sSingDescription, - [MOVE_SUPERSONIC - 1] = sSupersonicDescription, - [MOVE_SONIC_BOOM - 1] = sSonicBoomDescription, - [MOVE_DISABLE - 1] = sDisableDescription, - [MOVE_ACID - 1] = sAcidDescription, - [MOVE_EMBER - 1] = sEmberDescription, - [MOVE_FLAMETHROWER - 1] = sFlamethrowerDescription, - [MOVE_MIST - 1] = sMistDescription, - [MOVE_WATER_GUN - 1] = sWaterGunDescription, - [MOVE_HYDRO_PUMP - 1] = sHydroPumpDescription, - [MOVE_SURF - 1] = sSurfDescription, - [MOVE_ICE_BEAM - 1] = sIceBeamDescription, - [MOVE_BLIZZARD - 1] = sBlizzardDescription, - [MOVE_PSYBEAM - 1] = sPsybeamDescription, - [MOVE_BUBBLE_BEAM - 1] = sBubbleBeamDescription, - [MOVE_AURORA_BEAM - 1] = sAuroraBeamDescription, - [MOVE_HYPER_BEAM - 1] = sHyperBeamDescription, - [MOVE_PECK - 1] = sPeckDescription, - [MOVE_DRILL_PECK - 1] = sDrillPeckDescription, - [MOVE_SUBMISSION - 1] = sSubmissionDescription, - [MOVE_LOW_KICK - 1] = sLowKickDescription, - [MOVE_COUNTER - 1] = sCounterDescription, - [MOVE_SEISMIC_TOSS - 1] = sSeismicTossDescription, - [MOVE_STRENGTH - 1] = sStrengthDescription, - [MOVE_ABSORB - 1] = sAbsorbDescription, - [MOVE_MEGA_DRAIN - 1] = sMegaDrainDescription, - [MOVE_LEECH_SEED - 1] = sLeechSeedDescription, - [MOVE_GROWTH - 1] = sGrowthDescription, - [MOVE_RAZOR_LEAF - 1] = sRazorLeafDescription, - [MOVE_SOLAR_BEAM - 1] = sSolarBeamDescription, - [MOVE_POISON_POWDER - 1] = sPoisonPowderDescription, - [MOVE_STUN_SPORE - 1] = sStunSporeDescription, - [MOVE_SLEEP_POWDER - 1] = sSleepPowderDescription, - [MOVE_PETAL_DANCE - 1] = sPetalDanceDescription, - [MOVE_STRING_SHOT - 1] = sStringShotDescription, - [MOVE_DRAGON_RAGE - 1] = sDragonRageDescription, - [MOVE_FIRE_SPIN - 1] = sFireSpinDescription, - [MOVE_THUNDER_SHOCK - 1] = sThunderShockDescription, - [MOVE_THUNDERBOLT - 1] = sThunderboltDescription, - [MOVE_THUNDER_WAVE - 1] = sThunderWaveDescription, - [MOVE_THUNDER - 1] = sThunderDescription, - [MOVE_ROCK_THROW - 1] = sRockThrowDescription, - [MOVE_EARTHQUAKE - 1] = sEarthquakeDescription, - [MOVE_FISSURE - 1] = sFissureDescription, - [MOVE_DIG - 1] = sDigDescription, - [MOVE_TOXIC - 1] = sToxicDescription, - [MOVE_CONFUSION - 1] = sConfusionDescription, - [MOVE_PSYCHIC - 1] = sPsychicDescription, - [MOVE_HYPNOSIS - 1] = sHypnosisDescription, - [MOVE_MEDITATE - 1] = sMeditateDescription, - [MOVE_AGILITY - 1] = sAgilityDescription, - [MOVE_QUICK_ATTACK - 1] = sQuickAttackDescription, - [MOVE_RAGE - 1] = sRageDescription, - [MOVE_TELEPORT - 1] = sTeleportDescription, - [MOVE_NIGHT_SHADE - 1] = sNightShadeDescription, - [MOVE_MIMIC - 1] = sMimicDescription, - [MOVE_SCREECH - 1] = sScreechDescription, - [MOVE_DOUBLE_TEAM - 1] = sDoubleTeamDescription, - [MOVE_RECOVER - 1] = sRecoverDescription, - [MOVE_HARDEN - 1] = sHardenDescription, - [MOVE_MINIMIZE - 1] = sMinimizeDescription, - [MOVE_SMOKESCREEN - 1] = sSmokescreenDescription, - [MOVE_CONFUSE_RAY - 1] = sConfuseRayDescription, - [MOVE_WITHDRAW - 1] = sWithdrawDescription, - [MOVE_DEFENSE_CURL - 1] = sDefenseCurlDescription, - [MOVE_BARRIER - 1] = sBarrierDescription, - [MOVE_LIGHT_SCREEN - 1] = sLightScreenDescription, - [MOVE_HAZE - 1] = sHazeDescription, - [MOVE_REFLECT - 1] = sReflectDescription, - [MOVE_FOCUS_ENERGY - 1] = sFocusEnergyDescription, - [MOVE_BIDE - 1] = sBideDescription, - [MOVE_METRONOME - 1] = sMetronomeDescription, - [MOVE_MIRROR_MOVE - 1] = sMirrorMoveDescription, - [MOVE_SELF_DESTRUCT - 1] = sSelfDestructDescription, - [MOVE_EGG_BOMB - 1] = sEggBombDescription, - [MOVE_LICK - 1] = sLickDescription, - [MOVE_SMOG - 1] = sSmogDescription, - [MOVE_SLUDGE - 1] = sSludgeDescription, - [MOVE_BONE_CLUB - 1] = sBoneClubDescription, - [MOVE_FIRE_BLAST - 1] = sFireBlastDescription, - [MOVE_WATERFALL - 1] = sWaterfallDescription, - [MOVE_CLAMP - 1] = sClampDescription, - [MOVE_SWIFT - 1] = sSwiftDescription, - [MOVE_SKULL_BASH - 1] = sSkullBashDescription, - [MOVE_SPIKE_CANNON - 1] = sSpikeCannonDescription, - [MOVE_CONSTRICT - 1] = sConstrictDescription, - [MOVE_AMNESIA - 1] = sAmnesiaDescription, - [MOVE_KINESIS - 1] = sKinesisDescription, - [MOVE_SOFT_BOILED - 1] = sSoftBoiledDescription, - [MOVE_HIGH_JUMP_KICK - 1] = sHighJumpKickDescription, - [MOVE_GLARE - 1] = sGlareDescription, - [MOVE_DREAM_EATER - 1] = sDreamEaterDescription, - [MOVE_POISON_GAS - 1] = sPoisonGasDescription, - [MOVE_BARRAGE - 1] = sBarrageDescription, - [MOVE_LEECH_LIFE - 1] = sLeechLifeDescription, - [MOVE_LOVELY_KISS - 1] = sLovelyKissDescription, - [MOVE_SKY_ATTACK - 1] = sSkyAttackDescription, - [MOVE_TRANSFORM - 1] = sTransformDescription, - [MOVE_BUBBLE - 1] = sBubbleDescription, - [MOVE_DIZZY_PUNCH - 1] = sDizzyPunchDescription, - [MOVE_SPORE - 1] = sSporeDescription, - [MOVE_FLASH - 1] = sFlashDescription, - [MOVE_PSYWAVE - 1] = sPsywaveDescription, - [MOVE_SPLASH - 1] = sSplashDescription, - [MOVE_ACID_ARMOR - 1] = sAcidArmorDescription, - [MOVE_CRABHAMMER - 1] = sCrabhammerDescription, - [MOVE_EXPLOSION - 1] = sExplosionDescription, - [MOVE_FURY_SWIPES - 1] = sFurySwipesDescription, - [MOVE_BONEMERANG - 1] = sBonemerangDescription, - [MOVE_REST - 1] = sRestDescription, - [MOVE_ROCK_SLIDE - 1] = sRockSlideDescription, - [MOVE_HYPER_FANG - 1] = sHyperFangDescription, - [MOVE_SHARPEN - 1] = sSharpenDescription, - [MOVE_CONVERSION - 1] = sConversionDescription, - [MOVE_TRI_ATTACK - 1] = sTriAttackDescription, - [MOVE_SUPER_FANG - 1] = sSuperFangDescription, - [MOVE_SLASH - 1] = sSlashDescription, - [MOVE_SUBSTITUTE - 1] = sSubstituteDescription, - [MOVE_STRUGGLE - 1] = sStruggleDescription, - [MOVE_SKETCH - 1] = sSketchDescription, - [MOVE_TRIPLE_KICK - 1] = sTripleKickDescription, - [MOVE_THIEF - 1] = sThiefDescription, - [MOVE_SPIDER_WEB - 1] = sSpiderWebDescription, - [MOVE_MIND_READER - 1] = sMindReaderDescription, - [MOVE_NIGHTMARE - 1] = sNightmareDescription, - [MOVE_FLAME_WHEEL - 1] = sFlameWheelDescription, - [MOVE_SNORE - 1] = sSnoreDescription, - [MOVE_CURSE - 1] = sCurseDescription, - [MOVE_FLAIL - 1] = sFlailDescription, - [MOVE_CONVERSION_2 - 1] = sConversion2Description, - [MOVE_AEROBLAST - 1] = sAeroblastDescription, - [MOVE_COTTON_SPORE - 1] = sCottonSporeDescription, - [MOVE_REVERSAL - 1] = sReversalDescription, - [MOVE_SPITE - 1] = sSpiteDescription, - [MOVE_POWDER_SNOW - 1] = sPowderSnowDescription, - [MOVE_PROTECT - 1] = sProtectDescription, - [MOVE_MACH_PUNCH - 1] = sMachPunchDescription, - [MOVE_SCARY_FACE - 1] = sScaryFaceDescription, - [MOVE_FEINT_ATTACK - 1] = sFeintAttackDescription, - [MOVE_SWEET_KISS - 1] = sSweetKissDescription, - [MOVE_BELLY_DRUM - 1] = sBellyDrumDescription, - [MOVE_SLUDGE_BOMB - 1] = sSludgeBombDescription, - [MOVE_MUD_SLAP - 1] = sMudSlapDescription, - [MOVE_OCTAZOOKA - 1] = sOctazookaDescription, - [MOVE_SPIKES - 1] = sSpikesDescription, - [MOVE_ZAP_CANNON - 1] = sZapCannonDescription, - [MOVE_FORESIGHT - 1] = sForesightDescription, - [MOVE_DESTINY_BOND - 1] = sDestinyBondDescription, - [MOVE_PERISH_SONG - 1] = sPerishSongDescription, - [MOVE_ICY_WIND - 1] = sIcyWindDescription, - [MOVE_DETECT - 1] = sDetectDescription, - [MOVE_BONE_RUSH - 1] = sBoneRushDescription, - [MOVE_LOCK_ON - 1] = sLockOnDescription, - [MOVE_OUTRAGE - 1] = sOutrageDescription, - [MOVE_SANDSTORM - 1] = sSandstormDescription, - [MOVE_GIGA_DRAIN - 1] = sGigaDrainDescription, - [MOVE_ENDURE - 1] = sEndureDescription, - [MOVE_CHARM - 1] = sCharmDescription, - [MOVE_ROLLOUT - 1] = sRolloutDescription, - [MOVE_FALSE_SWIPE - 1] = sFalseSwipeDescription, - [MOVE_SWAGGER - 1] = sSwaggerDescription, - [MOVE_MILK_DRINK - 1] = sMilkDrinkDescription, - [MOVE_SPARK - 1] = sSparkDescription, - [MOVE_FURY_CUTTER - 1] = sFuryCutterDescription, - [MOVE_STEEL_WING - 1] = sSteelWingDescription, - [MOVE_MEAN_LOOK - 1] = sMeanLookDescription, - [MOVE_ATTRACT - 1] = sAttractDescription, - [MOVE_SLEEP_TALK - 1] = sSleepTalkDescription, - [MOVE_HEAL_BELL - 1] = sHealBellDescription, - [MOVE_RETURN - 1] = sReturnDescription, - [MOVE_PRESENT - 1] = sPresentDescription, - [MOVE_FRUSTRATION - 1] = sFrustrationDescription, - [MOVE_SAFEGUARD - 1] = sSafeguardDescription, - [MOVE_PAIN_SPLIT - 1] = sPainSplitDescription, - [MOVE_SACRED_FIRE - 1] = sSacredFireDescription, - [MOVE_MAGNITUDE - 1] = sMagnitudeDescription, - [MOVE_DYNAMIC_PUNCH - 1] = sDynamicPunchDescription, - [MOVE_MEGAHORN - 1] = sMegahornDescription, - [MOVE_DRAGON_BREATH - 1] = sDragonBreathDescription, - [MOVE_BATON_PASS - 1] = sBatonPassDescription, - [MOVE_ENCORE - 1] = sEncoreDescription, - [MOVE_PURSUIT - 1] = sPursuitDescription, - [MOVE_RAPID_SPIN - 1] = sRapidSpinDescription, - [MOVE_SWEET_SCENT - 1] = sSweetScentDescription, - [MOVE_IRON_TAIL - 1] = sIronTailDescription, - [MOVE_METAL_CLAW - 1] = sMetalClawDescription, - [MOVE_VITAL_THROW - 1] = sVitalThrowDescription, - [MOVE_MORNING_SUN - 1] = sMorningSunDescription, - [MOVE_SYNTHESIS - 1] = sSynthesisDescription, - [MOVE_MOONLIGHT - 1] = sMoonlightDescription, - [MOVE_HIDDEN_POWER - 1] = sHiddenPowerDescription, - [MOVE_CROSS_CHOP - 1] = sCrossChopDescription, - [MOVE_TWISTER - 1] = sTwisterDescription, - [MOVE_RAIN_DANCE - 1] = sRainDanceDescription, - [MOVE_SUNNY_DAY - 1] = sSunnyDayDescription, - [MOVE_CRUNCH - 1] = sCrunchDescription, - [MOVE_MIRROR_COAT - 1] = sMirrorCoatDescription, - [MOVE_PSYCH_UP - 1] = sPsychUpDescription, - [MOVE_EXTREME_SPEED - 1] = sExtremeSpeedDescription, - [MOVE_ANCIENT_POWER - 1] = sAncientPowerDescription, - [MOVE_SHADOW_BALL - 1] = sShadowBallDescription, - [MOVE_FUTURE_SIGHT - 1] = sFutureSightDescription, - [MOVE_ROCK_SMASH - 1] = sRockSmashDescription, - [MOVE_WHIRLPOOL - 1] = sWhirlpoolDescription, - [MOVE_BEAT_UP - 1] = sBeatUpDescription, - [MOVE_FAKE_OUT - 1] = sFakeOutDescription, - [MOVE_UPROAR - 1] = sUproarDescription, - [MOVE_STOCKPILE - 1] = sStockpileDescription, - [MOVE_SPIT_UP - 1] = sSpitUpDescription, - [MOVE_SWALLOW - 1] = sSwallowDescription, - [MOVE_HEAT_WAVE - 1] = sHeatWaveDescription, - [MOVE_HAIL - 1] = sHailDescription, - [MOVE_TORMENT - 1] = sTormentDescription, - [MOVE_FLATTER - 1] = sFlatterDescription, - [MOVE_WILL_O_WISP - 1] = sWillOWispDescription, - [MOVE_MEMENTO - 1] = sMementoDescription, - [MOVE_FACADE - 1] = sFacadeDescription, - [MOVE_FOCUS_PUNCH - 1] = sFocusPunchDescription, - [MOVE_SMELLING_SALTS - 1] = sSmellingSaltsDescription, - [MOVE_FOLLOW_ME - 1] = sFollowMeDescription, - [MOVE_NATURE_POWER - 1] = sNaturePowerDescription, - [MOVE_CHARGE - 1] = sChargeDescription, - [MOVE_TAUNT - 1] = sTauntDescription, - [MOVE_HELPING_HAND - 1] = sHelpingHandDescription, - [MOVE_TRICK - 1] = sTrickDescription, - [MOVE_ROLE_PLAY - 1] = sRolePlayDescription, - [MOVE_WISH - 1] = sWishDescription, - [MOVE_ASSIST - 1] = sAssistDescription, - [MOVE_INGRAIN - 1] = sIngrainDescription, - [MOVE_SUPERPOWER - 1] = sSuperpowerDescription, - [MOVE_MAGIC_COAT - 1] = sMagicCoatDescription, - [MOVE_RECYCLE - 1] = sRecycleDescription, - [MOVE_REVENGE - 1] = sRevengeDescription, - [MOVE_BRICK_BREAK - 1] = sBrickBreakDescription, - [MOVE_YAWN - 1] = sYawnDescription, - [MOVE_KNOCK_OFF - 1] = sKnockOffDescription, - [MOVE_ENDEAVOR - 1] = sEndeavorDescription, - [MOVE_ERUPTION - 1] = sEruptionDescription, - [MOVE_SKILL_SWAP - 1] = sSkillSwapDescription, - [MOVE_IMPRISON - 1] = sImprisonDescription, - [MOVE_REFRESH - 1] = sRefreshDescription, - [MOVE_GRUDGE - 1] = sGrudgeDescription, - [MOVE_SNATCH - 1] = sSnatchDescription, - [MOVE_SECRET_POWER - 1] = sSecretPowerDescription, - [MOVE_DIVE - 1] = sDiveDescription, - [MOVE_ARM_THRUST - 1] = sArmThrustDescription, - [MOVE_CAMOUFLAGE - 1] = sCamouflageDescription, - [MOVE_TAIL_GLOW - 1] = sTailGlowDescription, - [MOVE_LUSTER_PURGE - 1] = sLusterPurgeDescription, - [MOVE_MIST_BALL - 1] = sMistBallDescription, - [MOVE_FEATHER_DANCE - 1] = sFeatherDanceDescription, - [MOVE_TEETER_DANCE - 1] = sTeeterDanceDescription, - [MOVE_BLAZE_KICK - 1] = sBlazeKickDescription, - [MOVE_MUD_SPORT - 1] = sMudSportDescription, - [MOVE_ICE_BALL - 1] = sIceBallDescription, - [MOVE_NEEDLE_ARM - 1] = sNeedleArmDescription, - [MOVE_SLACK_OFF - 1] = sSlackOffDescription, - [MOVE_HYPER_VOICE - 1] = sHyperVoiceDescription, - [MOVE_POISON_FANG - 1] = sPoisonFangDescription, - [MOVE_CRUSH_CLAW - 1] = sCrushClawDescription, - [MOVE_BLAST_BURN - 1] = sBlastBurnDescription, - [MOVE_HYDRO_CANNON - 1] = sHydroCannonDescription, - [MOVE_METEOR_MASH - 1] = sMeteorMashDescription, - [MOVE_ASTONISH - 1] = sAstonishDescription, - [MOVE_WEATHER_BALL - 1] = sWeatherBallDescription, - [MOVE_AROMATHERAPY - 1] = sAromatherapyDescription, - [MOVE_FAKE_TEARS - 1] = sFakeTearsDescription, - [MOVE_AIR_CUTTER - 1] = sAirCutterDescription, - [MOVE_OVERHEAT - 1] = sOverheatDescription, - [MOVE_ODOR_SLEUTH - 1] = sOdorSleuthDescription, - [MOVE_ROCK_TOMB - 1] = sRockTombDescription, - [MOVE_SILVER_WIND - 1] = sSilverWindDescription, - [MOVE_METAL_SOUND - 1] = sMetalSoundDescription, - [MOVE_GRASS_WHISTLE - 1] = sGrassWhistleDescription, - [MOVE_TICKLE - 1] = sTickleDescription, - [MOVE_COSMIC_POWER - 1] = sCosmicPowerDescription, - [MOVE_WATER_SPOUT - 1] = sWaterSpoutDescription, - [MOVE_SIGNAL_BEAM - 1] = sSignalBeamDescription, - [MOVE_SHADOW_PUNCH - 1] = sShadowPunchDescription, - [MOVE_EXTRASENSORY - 1] = sExtrasensoryDescription, - [MOVE_SKY_UPPERCUT - 1] = sSkyUppercutDescription, - [MOVE_SAND_TOMB - 1] = sSandTombDescription, - [MOVE_SHEER_COLD - 1] = sSheerColdDescription, - [MOVE_MUDDY_WATER - 1] = sMuddyWaterDescription, - [MOVE_BULLET_SEED - 1] = sBulletSeedDescription, - [MOVE_AERIAL_ACE - 1] = sAerialAceDescription, - [MOVE_ICICLE_SPEAR - 1] = sIcicleSpearDescription, - [MOVE_IRON_DEFENSE - 1] = sIronDefenseDescription, - [MOVE_BLOCK - 1] = sBlockDescription, - [MOVE_HOWL - 1] = sHowlDescription, - [MOVE_DRAGON_CLAW - 1] = sDragonClawDescription, - [MOVE_FRENZY_PLANT - 1] = sFrenzyPlantDescription, - [MOVE_BULK_UP - 1] = sBulkUpDescription, - [MOVE_BOUNCE - 1] = sBounceDescription, - [MOVE_MUD_SHOT - 1] = sMudShotDescription, - [MOVE_POISON_TAIL - 1] = sPoisonTailDescription, - [MOVE_COVET - 1] = sCovetDescription, - [MOVE_VOLT_TACKLE - 1] = sVoltTackleDescription, - [MOVE_MAGICAL_LEAF - 1] = sMagicalLeafDescription, - [MOVE_WATER_SPORT - 1] = sWaterSportDescription, - [MOVE_CALM_MIND - 1] = sCalmMindDescription, - [MOVE_LEAF_BLADE - 1] = sLeafBladeDescription, - [MOVE_DRAGON_DANCE - 1] = sDragonDanceDescription, - [MOVE_ROCK_BLAST - 1] = sRockBlastDescription, - [MOVE_SHOCK_WAVE - 1] = sShockWaveDescription, - [MOVE_WATER_PULSE - 1] = sWaterPulseDescription, - [MOVE_DOOM_DESIRE - 1] = sDoomDesireDescription, - [MOVE_PSYCHO_BOOST - 1] = sPsychoBoostDescription, - [MOVE_ROOST - 1] = sRoostDescription, - [MOVE_GRAVITY - 1] = sGravityDescription, - [MOVE_MIRACLE_EYE - 1] = sMiracleEyeDescription, - [MOVE_WAKE_UP_SLAP - 1] = sWakeUpSlapDescription, - [MOVE_HAMMER_ARM - 1] = sHammerArmDescription, - [MOVE_GYRO_BALL - 1] = sGyroBallDescription, - [MOVE_HEALING_WISH - 1] = sHealingWishDescription, - [MOVE_BRINE - 1] = sBrineDescription, - [MOVE_NATURAL_GIFT - 1] = sNaturalGiftDescription, - [MOVE_FEINT - 1] = sFeintDescription, - [MOVE_PLUCK - 1] = sPluckDescription, - [MOVE_TAILWIND - 1] = sTailwindDescription, - [MOVE_ACUPRESSURE - 1] = sAcupressureDescription, - [MOVE_METAL_BURST - 1] = sMetalBurstDescription, - [MOVE_U_TURN - 1] = sUTurnDescription, - [MOVE_CLOSE_COMBAT - 1] = sCloseCombatDescription, - [MOVE_PAYBACK - 1] = sPaybackDescription, - [MOVE_ASSURANCE - 1] = sAssuranceDescription, - [MOVE_EMBARGO - 1] = sEmbargoDescription, - [MOVE_FLING - 1] = sFlingDescription, - [MOVE_PSYCHO_SHIFT - 1] = sPsychoShiftDescription, - [MOVE_TRUMP_CARD - 1] = sTrumpCardDescription, - [MOVE_HEAL_BLOCK - 1] = sHealBlockDescription, - [MOVE_WRING_OUT - 1] = sWringOutDescription, - [MOVE_POWER_TRICK - 1] = sPowerTrickDescription, - [MOVE_GASTRO_ACID - 1] = sGastroAcidDescription, - [MOVE_LUCKY_CHANT - 1] = sLuckyChantDescription, - [MOVE_ME_FIRST - 1] = sMeFirstDescription, - [MOVE_COPYCAT - 1] = sCopycatDescription, - [MOVE_POWER_SWAP - 1] = sPowerSwapDescription, - [MOVE_GUARD_SWAP - 1] = sGuardSwapDescription, - [MOVE_PUNISHMENT - 1] = sPunishmentDescription, - [MOVE_LAST_RESORT - 1] = sLastResortDescription, - [MOVE_WORRY_SEED - 1] = sWorrySeedDescription, - [MOVE_SUCKER_PUNCH - 1] = sSuckerPunchDescription, - [MOVE_TOXIC_SPIKES - 1] = sToxicSpikesDescription, - [MOVE_HEART_SWAP - 1] = sHeartSwapDescription, - [MOVE_AQUA_RING - 1] = sAquaRingDescription, - [MOVE_MAGNET_RISE - 1] = sMagnetRiseDescription, - [MOVE_FLARE_BLITZ - 1] = sFlareBlitzDescription, - [MOVE_FORCE_PALM - 1] = sForcePalmDescription, - [MOVE_AURA_SPHERE - 1] = sAuraSphereDescription, - [MOVE_ROCK_POLISH - 1] = sRockPolishDescription, - [MOVE_POISON_JAB - 1] = sPoisonJabDescription, - [MOVE_DARK_PULSE - 1] = sDarkPulseDescription, - [MOVE_NIGHT_SLASH - 1] = sNightSlashDescription, - [MOVE_AQUA_TAIL - 1] = sAquaTailDescription, - [MOVE_SEED_BOMB - 1] = sSeedBombDescription, - [MOVE_AIR_SLASH - 1] = sAirSlashDescription, - [MOVE_X_SCISSOR - 1] = sXScissorDescription, - [MOVE_BUG_BUZZ - 1] = sBugBuzzDescription, - [MOVE_DRAGON_PULSE - 1] = sDragonPulseDescription, - [MOVE_DRAGON_RUSH - 1] = sDragonRushDescription, - [MOVE_POWER_GEM - 1] = sPowerGemDescription, - [MOVE_DRAIN_PUNCH - 1] = sMegaDrainDescription, - [MOVE_VACUUM_WAVE - 1] = sVacuumWaveDescription, - [MOVE_FOCUS_BLAST - 1] = sFocusBlastDescription, - [MOVE_ENERGY_BALL - 1] = sEnergyBallDescription, - [MOVE_BRAVE_BIRD - 1] = sBraveBirdDescription, - [MOVE_EARTH_POWER - 1] = sEarthPowerDescription, - [MOVE_SWITCHEROO - 1] = sSwitcherooDescription, - [MOVE_GIGA_IMPACT - 1] = sHyperBeamDescription, - [MOVE_NASTY_PLOT - 1] = sNastyPlotDescription, - [MOVE_BULLET_PUNCH - 1] = sBulletPunchDescription, - [MOVE_AVALANCHE - 1] = sRevengeDescription, - [MOVE_ICE_SHARD - 1] = sIceShardDescription, - [MOVE_SHADOW_CLAW - 1] = sShadowClawDescription, - [MOVE_THUNDER_FANG - 1] = sThunderFangDescription, - [MOVE_ICE_FANG - 1] = sIceFangDescription, - [MOVE_FIRE_FANG - 1] = sFireFangDescription, - [MOVE_SHADOW_SNEAK - 1] = sShadowSneakDescription, - [MOVE_MUD_BOMB - 1] = sMudBombDescription, - [MOVE_PSYCHO_CUT - 1] = sPsychoCutDescription, - [MOVE_ZEN_HEADBUTT - 1] = sZenHeadbuttDescription, - [MOVE_MIRROR_SHOT - 1] = sMirrorShotDescription, - [MOVE_FLASH_CANNON - 1] = sFlashCannonDescription, - [MOVE_ROCK_CLIMB - 1] = sRockClimbDescription, - [MOVE_DEFOG - 1] = sDefogDescription, - [MOVE_TRICK_ROOM - 1] = sTrickRoomDescription, - [MOVE_DRACO_METEOR - 1] = sDracoMeteorDescription, - [MOVE_DISCHARGE - 1] = sDischargeDescription, - [MOVE_LAVA_PLUME - 1] = sLavaPlumeDescription, - [MOVE_LEAF_STORM - 1] = sLeafStormDescription, - [MOVE_POWER_WHIP - 1] = sPowerWhipDescription, - [MOVE_ROCK_WRECKER - 1] = sHyperBeamDescription, - [MOVE_CROSS_POISON - 1] = sCrossPoisonDescription, - [MOVE_GUNK_SHOT - 1] = sGunkShotDescription, - [MOVE_IRON_HEAD - 1] = sIronHeadDescription, - [MOVE_MAGNET_BOMB - 1] = sMagnetBombDescription, - [MOVE_STONE_EDGE - 1] = sStoneEdgeDescription, - [MOVE_CAPTIVATE - 1] = sCaptivateDescription, - [MOVE_STEALTH_ROCK - 1] = sStealthRockDescription, - [MOVE_GRASS_KNOT - 1] = sGrassKnotDescription, - [MOVE_CHATTER - 1] = sChatterDescription, - [MOVE_JUDGMENT - 1] = sJudgmentDescription, - [MOVE_BUG_BITE - 1] = sPluckDescription, - [MOVE_CHARGE_BEAM - 1] = sChargeBeamDescription, - [MOVE_WOOD_HAMMER - 1] = sWoodHammerDescription, - [MOVE_AQUA_JET - 1] = sAquaJetDescription, - [MOVE_ATTACK_ORDER - 1] = sAttackOrderDescription, - [MOVE_DEFEND_ORDER - 1] = sDefendOrderDescription, - [MOVE_HEAL_ORDER - 1] = sHealOrderDescription, - [MOVE_HEAD_SMASH - 1] = sHeadSmashDescription, - [MOVE_DOUBLE_HIT - 1] = sDoubleHitDescription, - [MOVE_ROAR_OF_TIME - 1] = sRoarOfTimeDescription, - [MOVE_SPACIAL_REND - 1] = sSpacialRendDescription, - [MOVE_LUNAR_DANCE - 1] = sHealingWishDescription, - [MOVE_CRUSH_GRIP - 1] = sWringOutDescription, - [MOVE_MAGMA_STORM - 1] = sMagmaStormDescription, - [MOVE_DARK_VOID - 1] = sDarkVoidDescription, - [MOVE_SEED_FLARE - 1] = sSeedFlareDescription, - [MOVE_OMINOUS_WIND - 1] = sOminousWindDescription, - [MOVE_SHADOW_FORCE - 1] = sShadowForceDescription, - [MOVE_HONE_CLAWS - 1] = sHoneClawsDescription, - [MOVE_WIDE_GUARD - 1] = sWideGuardDescription, - [MOVE_GUARD_SPLIT - 1] = sGuardSplitDescription, - [MOVE_POWER_SPLIT - 1] = sPowerSplitDescription, - [MOVE_WONDER_ROOM - 1] = sWonderRoomDescription, - [MOVE_PSYSHOCK - 1] = sPsyshockDescription, - [MOVE_VENOSHOCK - 1] = sVenoshockDescription, - [MOVE_AUTOTOMIZE - 1] = sAutotomizeDescription, - [MOVE_RAGE_POWDER - 1] = sRagePowderDescription, - [MOVE_TELEKINESIS - 1] = sTelekinesisDescription, - [MOVE_MAGIC_ROOM - 1] = sMagicRoomDescription, - [MOVE_SMACK_DOWN - 1] = sSmackDownDescription, - [MOVE_STORM_THROW - 1] = sStormThrowDescription, - [MOVE_FLAME_BURST - 1] = sFlameBurstDescription, - [MOVE_SLUDGE_WAVE - 1] = sSludgeWaveDescription, - [MOVE_QUIVER_DANCE - 1] = sQuiverDanceDescription, - [MOVE_HEAVY_SLAM - 1] = sHeavySlamDescription, - [MOVE_SYNCHRONOISE - 1] = sSynchronoiseDescription, - [MOVE_ELECTRO_BALL - 1] = sElectroBallDescription, - [MOVE_SOAK - 1] = sSoakDescription, - [MOVE_FLAME_CHARGE - 1] = sFlameChargeDescription, - [MOVE_COIL - 1] = sCoilDescription, - [MOVE_LOW_SWEEP - 1] = sLowSweepDescription, - [MOVE_ACID_SPRAY - 1] = sAcidSprayDescription, - [MOVE_FOUL_PLAY - 1] = sFoulPlayDescription, - [MOVE_SIMPLE_BEAM - 1] = sSimpleBeamDescription, - [MOVE_ENTRAINMENT - 1] = sEntrainmentDescription, - [MOVE_AFTER_YOU - 1] = sAfterYouDescription, - [MOVE_ROUND - 1] = sRoundDescription, - [MOVE_ECHOED_VOICE - 1] = sEchoedVoiceDescription, - [MOVE_CHIP_AWAY - 1] = sChipAwayDescription, - [MOVE_CLEAR_SMOG - 1] = sClearSmogDescription, - [MOVE_STORED_POWER - 1] = sStoredPowerDescription, - [MOVE_QUICK_GUARD - 1] = sQuickGuardDescription, - [MOVE_ALLY_SWITCH - 1] = sAllySwitchDescription, - [MOVE_SCALD - 1] = sScaldDescription, - [MOVE_SHELL_SMASH - 1] = sShellSmashDescription, - [MOVE_HEAL_PULSE - 1] = sHealPulseDescription, - [MOVE_HEX - 1] = sHexDescription, - [MOVE_SKY_DROP - 1] = sSkyDropDescription, - [MOVE_SHIFT_GEAR - 1] = sShiftGearDescription, - [MOVE_CIRCLE_THROW - 1] = sCircleThrowDescription, - [MOVE_INCINERATE - 1] = sIncinerateDescription, - [MOVE_QUASH - 1] = sQuashDescription, - [MOVE_ACROBATICS - 1] = sAcrobaticsDescription, - [MOVE_REFLECT_TYPE - 1] = sReflectTypeDescription, - [MOVE_RETALIATE - 1] = sRetaliateDescription, - [MOVE_FINAL_GAMBIT - 1] = sFinalGambitDescription, - [MOVE_BESTOW - 1] = sBestowDescription, - [MOVE_INFERNO - 1] = sInfernoDescription, - [MOVE_WATER_PLEDGE - 1] = sWaterPledgeDescription, - [MOVE_FIRE_PLEDGE - 1] = sFirePledgeDescription, - [MOVE_GRASS_PLEDGE - 1] = sGrassPledgeDescription, - [MOVE_VOLT_SWITCH - 1] = sUTurnDescription, - [MOVE_STRUGGLE_BUG - 1] = sStruggleBugDescription, - [MOVE_BULLDOZE - 1] = sBulldozeDescription, - [MOVE_FROST_BREATH - 1] = sStormThrowDescription, - [MOVE_DRAGON_TAIL - 1] = sCircleThrowDescription, - [MOVE_WORK_UP - 1] = sWorkUpDescription, - [MOVE_ELECTROWEB - 1] = sElectrowebDescription, - [MOVE_WILD_CHARGE - 1] = sWildChargeDescription, - [MOVE_DRILL_RUN - 1] = sDrillRunDescription, - [MOVE_DUAL_CHOP - 1] = sDualChopDescription, - [MOVE_HEART_STAMP - 1] = sHeartStampDescription, - [MOVE_HORN_LEECH - 1] = sMegaDrainDescription, - [MOVE_SACRED_SWORD - 1] = sChipAwayDescription, - [MOVE_RAZOR_SHELL - 1] = sRazorShellDescription, - [MOVE_HEAT_CRASH - 1] = sHeavySlamDescription, - [MOVE_LEAF_TORNADO - 1] = sLeafTornadoDescription, - [MOVE_STEAMROLLER - 1] = sSteamrollerDescription, - [MOVE_COTTON_GUARD - 1] = sCottonGuardDescription, - [MOVE_NIGHT_DAZE - 1] = sNightDazeDescription, - [MOVE_PSYSTRIKE - 1] = sPsyshockDescription, - [MOVE_TAIL_SLAP - 1] = sTailSlapDescription, - [MOVE_HURRICANE - 1] = sHurricaneDescription, - [MOVE_HEAD_CHARGE - 1] = sHeadChargeDescription, - [MOVE_GEAR_GRIND - 1] = sGearGrindDescription, - [MOVE_SEARING_SHOT - 1] = sLavaPlumeDescription, - [MOVE_TECHNO_BLAST - 1] = sTechnoBlastDescription, - [MOVE_RELIC_SONG - 1] = sRelicSongDescription, - [MOVE_SECRET_SWORD - 1] = sSecretSwordDescription, - [MOVE_GLACIATE - 1] = sGlaciateDescription, - [MOVE_BOLT_STRIKE - 1] = sBoltStrikeDescription, - [MOVE_BLUE_FLARE - 1] = sBlueFlareDescription, - [MOVE_FIERY_DANCE - 1] = sFieryDanceDescription, - [MOVE_FREEZE_SHOCK - 1] = sFreezeShockDescription, - [MOVE_ICE_BURN - 1] = sIceBurnDescription, - [MOVE_SNARL - 1] = sSnarlDescription, - [MOVE_ICICLE_CRASH - 1] = sIcicleCrashDescription, - [MOVE_V_CREATE - 1] = sVCreateDescription, - [MOVE_FUSION_FLARE - 1] = sFusionFlareDescription, - [MOVE_FUSION_BOLT - 1] = sFusionBoltDescription, - [MOVE_FLYING_PRESS - 1] = sFlyingPressDescription, - [MOVE_MAT_BLOCK - 1] = sMatBlockDescription, - [MOVE_BELCH - 1] = sBelchDescription, - [MOVE_ROTOTILLER - 1] = sRototillerDescription, - [MOVE_STICKY_WEB - 1] = sStickyWebDescription, - [MOVE_FELL_STINGER - 1] = sFellStingerDescription, - [MOVE_PHANTOM_FORCE - 1] = sShadowForceDescription, - [MOVE_TRICK_OR_TREAT - 1] = sTrickOrTreatDescription, - [MOVE_NOBLE_ROAR - 1] = sNobleRoarDescription, - [MOVE_ION_DELUGE - 1] = sIonDelugeDescription, - [MOVE_PARABOLIC_CHARGE - 1] = sParabolicChargeDescription, - [MOVE_FORESTS_CURSE - 1] = sForestsCurseDescription, - [MOVE_PETAL_BLIZZARD - 1] = sPetalBlizzardDescription, - [MOVE_FREEZE_DRY - 1] = sFreezeDryDescription, - [MOVE_DISARMING_VOICE - 1] = sDisarmingVoiceDescription, - [MOVE_PARTING_SHOT - 1] = sPartingShotDescription, - [MOVE_TOPSY_TURVY - 1] = sTopsyTurvyDescription, - [MOVE_DRAINING_KISS - 1] = sDrainingKissDescription, - [MOVE_CRAFTY_SHIELD - 1] = sCraftyShieldDescription, - [MOVE_FLOWER_SHIELD - 1] = sFlowerShieldDescription, - [MOVE_GRASSY_TERRAIN - 1] = sGrassyTerrainDescription, - [MOVE_MISTY_TERRAIN - 1] = sMistyTerrainDescription, - [MOVE_ELECTRIFY - 1] = sElectrifyDescription, - [MOVE_PLAY_ROUGH - 1] = sPlayRoughDescription, - [MOVE_FAIRY_WIND - 1] = sFairyWindDescription, - [MOVE_MOONBLAST - 1] = sMoonblastDescription, - [MOVE_BOOMBURST - 1] = sBoomburstDescription, - [MOVE_FAIRY_LOCK - 1] = sFairyLockDescription, - [MOVE_KINGS_SHIELD - 1] = sKingsShieldDescription, - [MOVE_PLAY_NICE - 1] = sPlayNiceDescription, - [MOVE_CONFIDE - 1] = sConfideDescription, - [MOVE_DIAMOND_STORM - 1] = sDiamondStormDescription, - [MOVE_STEAM_ERUPTION - 1] = sSteamEruptionDescription, - [MOVE_HYPERSPACE_HOLE - 1] = sHyperspaceHoleDescription, - [MOVE_WATER_SHURIKEN - 1] = sWaterShurikenDescription, - [MOVE_MYSTICAL_FIRE - 1] = sMysticalFireDescription, - [MOVE_SPIKY_SHIELD - 1] = sSpikyShieldDescription, - [MOVE_AROMATIC_MIST - 1] = sAromaticMistDescription, - [MOVE_EERIE_IMPULSE - 1] = sEerieImpulseDescription, - [MOVE_VENOM_DRENCH - 1] = sVenomDrenchDescription, - [MOVE_POWDER - 1] = sPowderDescription, - [MOVE_GEOMANCY - 1] = sGeomancyDescription, - [MOVE_MAGNETIC_FLUX - 1] = sMagneticFluxDescription, - [MOVE_HAPPY_HOUR - 1] = sHappyHourDescription, - [MOVE_ELECTRIC_TERRAIN - 1] = sElectricTerrainDescription, - [MOVE_DAZZLING_GLEAM - 1] = sDazzlingGleamDescription, - [MOVE_CELEBRATE - 1] = sCelebrateDescription, - [MOVE_HOLD_HANDS - 1] = sHoldHandsDescription, - [MOVE_BABY_DOLL_EYES - 1] = sBabyDollEyesDescription, - [MOVE_NUZZLE - 1] = sNuzzleDescription, - [MOVE_HOLD_BACK - 1] = sFalseSwipeDescription, - [MOVE_INFESTATION - 1] = sInfestationDescription, - [MOVE_POWER_UP_PUNCH - 1] = sPowerUpPunchDescription, - [MOVE_OBLIVION_WING - 1] = sDrainingKissDescription, - [MOVE_THOUSAND_ARROWS - 1] = sThousandArrowsDescription, - [MOVE_THOUSAND_WAVES - 1] = sThousandWavesDescription, - [MOVE_LANDS_WRATH - 1] = sLandsWrathDescription, - [MOVE_LIGHT_OF_RUIN - 1] = sLightOfRuinDescription, - [MOVE_ORIGIN_PULSE - 1] = sOriginPulseDescription, - [MOVE_PRECIPICE_BLADES - 1] = sPrecipiceBladesDescription, - [MOVE_DRAGON_ASCENT - 1] = sCloseCombatDescription, - [MOVE_HYPERSPACE_FURY - 1] = sHyperspaceHoleDescription, - [MOVE_SHORE_UP - 1] = sShoreUpDescription, - [MOVE_FIRST_IMPRESSION - 1] = sFirstImpressionDescription, - [MOVE_BANEFUL_BUNKER - 1] = sBanefulBunkerDescription, - [MOVE_SPIRIT_SHACKLE - 1] = sSpiritShackleDescription, - [MOVE_DARKEST_LARIAT - 1] = sDarkestLariatDescription, - [MOVE_SPARKLING_ARIA - 1] = sSparklingAriaDescription, - [MOVE_ICE_HAMMER - 1] = sIceHammerDescription, - [MOVE_FLORAL_HEALING - 1] = sFloralHealingDescription, - [MOVE_HIGH_HORSEPOWER - 1] = sHighHorsepowerDescription, - [MOVE_STRENGTH_SAP - 1] = sStrengthSapDescription, - [MOVE_SOLAR_BLADE - 1] = sSolarBladeDescription, - [MOVE_LEAFAGE - 1] = sLeafageDescription, - [MOVE_SPOTLIGHT - 1] = sSpotlightDescription, - [MOVE_TOXIC_THREAD - 1] = sToxicThreadDescription, - [MOVE_LASER_FOCUS - 1] = sLaserFocusDescription, - [MOVE_GEAR_UP - 1] = sGearUpDescription, - [MOVE_THROAT_CHOP - 1] = sThroatChopDescription, - [MOVE_POLLEN_PUFF - 1] = sPollenPuffDescription, - [MOVE_ANCHOR_SHOT - 1] = sAnchorShotDescription, - [MOVE_PSYCHIC_TERRAIN - 1] = sPsychicTerrainDescription, - [MOVE_LUNGE - 1] = sLungeDescription, - [MOVE_FIRE_LASH - 1] = sFireLashDescription, - [MOVE_POWER_TRIP - 1] = sPowerTripDescription, - [MOVE_BURN_UP - 1] = sBurnUpDescription, - [MOVE_SPEED_SWAP - 1] = sSpeedSwapDescription, - [MOVE_SMART_STRIKE - 1] = sSmartStrikeDescription, - [MOVE_PURIFY - 1] = sPurifyDescription, - [MOVE_REVELATION_DANCE - 1] = sRevelationDanceDescription, - [MOVE_CORE_ENFORCER - 1] = sCoreEnforcerDescription, - [MOVE_TROP_KICK - 1] = sTropKickDescription, - [MOVE_INSTRUCT - 1] = sInstructDescription, - [MOVE_BEAK_BLAST - 1] = sBeakBlastDescription, - [MOVE_CLANGING_SCALES - 1] = sClangingScalesDescription, - [MOVE_DRAGON_HAMMER - 1] = sDragonHammerDescription, - [MOVE_BRUTAL_SWING - 1] = sBrutalSwingDescription, - [MOVE_AURORA_VEIL - 1] = sAuroraVeilDescription, - [MOVE_SHELL_TRAP - 1] = sShellTrapDescription, - [MOVE_FLEUR_CANNON - 1] = sFleurCannonDescription, - [MOVE_PSYCHIC_FANGS - 1] = sPsychicFangsDescription, - [MOVE_STOMPING_TANTRUM - 1] = sStompingTantrumDescription, - [MOVE_SHADOW_BONE - 1] = sShadowBoneDescription, - [MOVE_ACCELEROCK - 1] = sAccelerockDescription, - [MOVE_LIQUIDATION - 1] = sLiquidationDescription, - [MOVE_PRISMATIC_LASER - 1] = sPrismaticLaserDescription, - [MOVE_SPECTRAL_THIEF - 1] = sSpectralThiefDescription, - [MOVE_SUNSTEEL_STRIKE - 1] = sSunsteelStrikeDescription, - [MOVE_MOONGEIST_BEAM - 1] = sMoongeistBeamDescription, - [MOVE_TEARFUL_LOOK - 1] = sTearfulLookDescription, - [MOVE_ZING_ZAP - 1] = sZingZapDescription, - [MOVE_NATURES_MADNESS - 1] = sNaturesMadnessDescription, - [MOVE_MULTI_ATTACK - 1] = sMultiAttackDescription, - [MOVE_MIND_BLOWN - 1] = sMindBlownDescription, - [MOVE_PLASMA_FISTS - 1] = sPlasmaFistsDescription, - [MOVE_PHOTON_GEYSER - 1] = sPhotonGeyserDescription, - [MOVE_ZIPPY_ZAP - 1] = sZippyZapDescription, - [MOVE_SPLISHY_SPLASH - 1] = sSplishySplashDescription, - [MOVE_FLOATY_FALL - 1] = sFloatyFallDescription, - [MOVE_PIKA_PAPOW - 1] = sPikaPapowDescription, - [MOVE_BOUNCY_BUBBLE - 1] = sBouncyBubbleDescription, - [MOVE_BUZZY_BUZZ - 1] = sBuzzyBuzzDescription, - [MOVE_SIZZLY_SLIDE - 1] = sSizzlySlideDescription, - [MOVE_GLITZY_GLOW - 1] = sGlitzyGlowDescription, - [MOVE_BADDY_BAD - 1] = sBaddyBadDescription, - [MOVE_SAPPY_SEED - 1] = sSappySeedDescription, - [MOVE_FREEZY_FROST - 1] = sFreezyFrostDescription, - [MOVE_SPARKLY_SWIRL - 1] = sSparklySwirlDescription, - [MOVE_VEEVEE_VOLLEY - 1] = sVeeveeVolleyDescription, - [MOVE_DOUBLE_IRON_BASH - 1] = sDoubleIronBashDescription, - - //GEN 8 - [MOVE_DYNAMAX_CANNON - 1] = sDynamaxCannonDescription, - [MOVE_SNIPE_SHOT - 1] = sSnipeShotDescription, - [MOVE_JAW_LOCK - 1] = sJawLockDescription, - [MOVE_STUFF_CHEEKS - 1] = sStuffCheeksDescription, - [MOVE_NO_RETREAT - 1] = sNoRetreatDescription, - [MOVE_TAR_SHOT - 1] = sTarShotDescription, - [MOVE_MAGIC_POWDER - 1] = sMagicPowderDescription, - [MOVE_DRAGON_DARTS - 1] = sDragonDartsDescription, - [MOVE_TEATIME - 1] = sTeatimeDescription, - [MOVE_OCTOLOCK - 1] = sOctolockDescription, - [MOVE_BOLT_BEAK - 1] = sBoltBeakDescription, - [MOVE_FISHIOUS_REND - 1] = sFishiousRendDescription, - [MOVE_COURT_CHANGE - 1] = sCourtChangeDescription, - [MOVE_CLANGOROUS_SOUL - 1] = sClangorousSoulDescription, - [MOVE_BODY_PRESS - 1] = sBodyPressDescription, - [MOVE_DECORATE - 1] = sDecorateDescription, - [MOVE_DRUM_BEATING - 1] = sDrumBeatingDescription, - [MOVE_SNAP_TRAP - 1] = sSnapTrapDescription, - [MOVE_PYRO_BALL - 1] = sPyroBallDescription, - [MOVE_BEHEMOTH_BLADE - 1] = sBehemothBladeDescription, - [MOVE_BEHEMOTH_BASH - 1] = sBehemothBashDescription, - [MOVE_AURA_WHEEL - 1] = sAuraWheelDescription, - [MOVE_BREAKING_SWIPE - 1] = sBreakingSwipeDescription, - [MOVE_BRANCH_POKE - 1] = sBranchPokeDescription, - [MOVE_OVERDRIVE - 1] = sOverdriveDescription, - [MOVE_APPLE_ACID - 1] = sAppleAcidDescription, - [MOVE_GRAV_APPLE - 1] = sGravAppleDescription, - [MOVE_SPIRIT_BREAK - 1] = sSpiritBreakDescription, - [MOVE_STRANGE_STEAM - 1] = sStrangeSteamDescription, - [MOVE_LIFE_DEW - 1] = sLifeDewDescription, - [MOVE_OBSTRUCT - 1] = sObstructDescription, - [MOVE_FALSE_SURRENDER - 1] = sFalseSurrenderDescription, - [MOVE_METEOR_ASSAULT - 1] = sMeteorAssaultDescription, - [MOVE_ETERNABEAM - 1] = sEternabeamDescription, - [MOVE_STEEL_BEAM - 1] = sSteelBeamDescription, - [MOVE_EXPANDING_FORCE - 1] = sExpandingForceDescription, - [MOVE_STEEL_ROLLER - 1] = sSteelRollerDescription, - [MOVE_SCALE_SHOT - 1] = sScaleShotDescription, - [MOVE_METEOR_BEAM - 1] = sMeteorBeamDescription, - [MOVE_SHELL_SIDE_ARM - 1] = sShellSideArmDescription, - [MOVE_MISTY_EXPLOSION - 1] = sMistyExplosionDescription, - [MOVE_GRASSY_GLIDE - 1] = sGrassyGlideDescription, - [MOVE_RISING_VOLTAGE - 1] = sRisingVoltageDescription, - [MOVE_TERRAIN_PULSE - 1] = sTerrainPulseDescription, - [MOVE_SKITTER_SMACK - 1] = sSkitterSmackDescription, - [MOVE_BURNING_JEALOUSY - 1] = sBurningJealousyDescription, - [MOVE_LASH_OUT - 1] = sLashOutDescription, - [MOVE_POLTERGEIST - 1] = sPoltergeistDescription, - [MOVE_CORROSIVE_GAS - 1] = sCorrosiveGasDescription, - [MOVE_COACHING - 1] = sCoachingDescription, - [MOVE_FLIP_TURN - 1] = sFlipTurnDescription, - [MOVE_TRIPLE_AXEL - 1] = sTripleAxelDescription, - [MOVE_DUAL_WINGBEAT - 1] = sDualWingbeatDescription, - [MOVE_SCORCHING_SANDS - 1] = sScorchingSandsDescription, - [MOVE_JUNGLE_HEALING - 1] = sJungleHealingDescription, - [MOVE_WICKED_BLOW - 1] = sWickedBlowDescription, - [MOVE_SURGING_STRIKES - 1] = sSurgingStrikesDescription, - [MOVE_THUNDER_CAGE - 1] = sThunderCageDescription, - [MOVE_DRAGON_ENERGY - 1] = sDragonEnergyDescription, - [MOVE_FREEZING_GLARE - 1] = sFreezingGlareDescription, - [MOVE_FIERY_WRATH - 1] = sFieryWrathDescription, - [MOVE_THUNDEROUS_KICK - 1] = sThunderousKickDescription, - [MOVE_GLACIAL_LANCE - 1] = sGlacialLanceDescription, - [MOVE_ASTRAL_BARRAGE - 1] = sAstralBarrageDescription, - [MOVE_EERIE_SPELL - 1] = sEerieSpellDescription, - [MOVE_DIRE_CLAW - 1] = sDireClawDescription, - [MOVE_PSYSHIELD_BASH - 1] = sPsyshieldBashDescription, - [MOVE_POWER_SHIFT - 1] = sPowerShiftDescription, - [MOVE_STONE_AXE - 1] = sStoneAxeDescription, - [MOVE_SPRINGTIDE_STORM - 1] = sSpringtideStormDescription, - [MOVE_MYSTICAL_POWER - 1] = sMysticalPowerDescription, - [MOVE_RAGING_FURY - 1] = sRagingFuryDescription, - [MOVE_WAVE_CRASH - 1] = sWaveCrashDescription, - [MOVE_CHLOROBLAST - 1] = sChloroblastDescription, - [MOVE_MOUNTAIN_GALE - 1] = sMountainGaleDescription, - [MOVE_VICTORY_DANCE - 1] = sVictoryDanceDescription, - [MOVE_HEADLONG_RUSH - 1] = sHeadlongRushDescription, - [MOVE_BARB_BARRAGE - 1] = sBarbBarrageDescription, - [MOVE_ESPER_WING - 1] = sEsperWingDescription, - [MOVE_BITTER_MALICE - 1] = sBitterMaliceDescription, - [MOVE_SHELTER - 1] = sShelterDescription, - [MOVE_TRIPLE_ARROWS - 1] = sTripleArrowsDescription, - [MOVE_INFERNAL_PARADE - 1] = sInfernalParadeDescription, - [MOVE_CEASELESS_EDGE - 1] = sCeaselessEdgeDescription, - [MOVE_BLEAKWIND_STORM - 1] = sBleakwindStormDescription, - [MOVE_WILDBOLT_STORM - 1] = sWildboltStormDescription, - [MOVE_SANDSEAR_STORM - 1] = sSandsearStormDescription, - [MOVE_LUNAR_BLESSING - 1] = sLunarBlessingDescription, - [MOVE_TAKE_HEART - 1] = sTakeHeartDescription, - [MOVE_TERA_BLAST - 1] = sTeraBlastDescription, - [MOVE_SILK_TRAP - 1] = sSilkTrapDescription, - [MOVE_AXE_KICK - 1] = sAxeKickDescription, - [MOVE_LAST_RESPECTS - 1] = sLastRespectsDescription, - [MOVE_LUMINA_CRASH - 1] = sLuminaCrashDescription, - [MOVE_ORDER_UP - 1] = sOrderUpDescription, - [MOVE_JET_PUNCH - 1] = sJetPunchDescription, - [MOVE_SPICY_EXTRACT - 1] = sSpicyExtractDescription, - [MOVE_SPIN_OUT - 1] = sSpinOutDescription, - [MOVE_POPULATION_BOMB - 1] = sPopulationBombDescription, - [MOVE_ICE_SPINNER - 1] = sIceSpinnerDescription, - [MOVE_GLAIVE_RUSH - 1] = sGlaiveRushDescription, - [MOVE_REVIVAL_BLESSING - 1] = sRevivalBlessingDescription, - [MOVE_SALT_CURE - 1] = sSaltCureDescription, - [MOVE_TRIPLE_DIVE - 1] = sTripleDiveDescription, - [MOVE_MORTAL_SPIN - 1] = sMortalSpinDescription, - [MOVE_DOODLE - 1] = sDoodleDescription, - [MOVE_FILLET_AWAY - 1] = sFilletAwayDescription, - [MOVE_KOWTOW_CLEAVE - 1] = sKowtowCleaveDescription, - [MOVE_FLOWER_TRICK - 1] = sFlowerTrickDescription, - [MOVE_TORCH_SONG - 1] = sTorchSongDescription, - [MOVE_AQUA_STEP - 1] = sAquaStepDescription, - [MOVE_RAGING_BULL - 1] = sRagingBullDescription, - [MOVE_MAKE_IT_RAIN - 1] = sMakeItRainDescription, - [MOVE_RUINATION - 1] = sRuinationDescription, - [MOVE_COLLISION_COURSE - 1] = sCollisionCourseDescription, - [MOVE_ELECTRO_DRIFT - 1] = sElectroDriftDescription, - [MOVE_SHED_TAIL - 1] = sShedTailDescription, - [MOVE_CHILLY_RECEPTION - 1] = sChillyReceptionDescription, - [MOVE_TIDY_UP - 1] = sTidyUpDescription, - [MOVE_SNOWSCAPE - 1] = sSnowscapeDescription, - [MOVE_POUNCE - 1] = sPounceDescription, - [MOVE_TRAILBLAZE - 1] = sTrailblazeDescription, - [MOVE_CHILLING_WATER - 1] = sChillingWaterDescription, - [MOVE_HYPER_DRILL - 1] = sHyperDrillDescription, - [MOVE_TWIN_BEAM - 1] = sTwinBeamDescription, - [MOVE_RAGE_FIST - 1] = sRageFistDescription, - [MOVE_ARMOR_CANNON - 1] = sArmorCannonDescription, - [MOVE_BITTER_BLADE - 1] = sBitterBladeDescription, - [MOVE_DOUBLE_SHOCK - 1] = sDoubleShockDescription, - [MOVE_GIGATON_HAMMER - 1] = sGigatonHammerDescription, - [MOVE_COMEUPPANCE - 1] = sComeuppanceDescription, - [MOVE_AQUA_CUTTER - 1] = sAquaCutterDescription, - [MOVE_BLAZING_TORQUE - 1] = sBlazingTorqueDescription, - [MOVE_WICKED_TORQUE - 1] = sWickedTorqueDescription, - [MOVE_NOXIOUS_TORQUE - 1] = sNoxiousTorqueDescription, - [MOVE_COMBAT_TORQUE - 1] = sCombatTorqueDescription, - [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, - [MOVE_PSYBLADE - 1] = sPsybladeDescription, - [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, - [MOVE_BLOOD_MOON - 1] = sBloodMoonDescription, - [MOVE_MATCHA_GOTCHA - 1] = sMatchaGotchaDescription, - [MOVE_SYRUP_BOMB - 1] = sSyrupBombDescription, - [MOVE_IVY_CUDGEL - 1] = sIvyCudgelDescription, - [MOVE_ELECTRO_SHOT - 1] = sElectroShotDescription, - [MOVE_TERA_STARSTORM - 1] = sTeraStarstormDescription, - [MOVE_FICKLE_BEAM - 1] = sFickleBeamDescription, - [MOVE_BURNING_BULWARK - 1] = sBurningBulwarkDescription, - [MOVE_THUNDERCLAP - 1] = sSuckerPunchDescription, - [MOVE_MIGHTY_CLEAVE - 1] = sFeintDescription, - [MOVE_TACHYON_CUTTER - 1] = sTachyonCutterDescription, - [MOVE_HARD_PRESS - 1] = sWringOutDescription, - [MOVE_DRAGON_CHEER - 1] = sDragonCheerDescription, - [MOVE_ALLURING_VOICE - 1] = sAlluringVoiceDescription, - [MOVE_TEMPER_FLARE - 1] = sTemperFlareDescription, - [MOVE_SUPERCELL_SLAM - 1] = sSupercellSlamDescription, - [MOVE_PSYCHIC_NOISE - 1] = sPsychicNoiseDescription, - [MOVE_UPPER_HAND - 1] = sUpperHandDescription, - [MOVE_MALIGNANT_CHAIN - 1] = sMalignantChainDescription, - [MOVE_SYLPH_SONG - 1] = sSylphSongDescription, -}; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h deleted file mode 100644 index ddbf7cfe3960..000000000000 --- a/src/data/text/move_names.h +++ /dev/null @@ -1,2002 +0,0 @@ -#if B_EXPANDED_MOVE_NAMES == TRUE -// 16 letters -const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1] = -{ - [MOVE_NONE] = _("-"), - [MOVE_POUND] = _("Pound"), - [MOVE_KARATE_CHOP] = _("Karate Chop"), - [MOVE_DOUBLE_SLAP] = _("Double Slap"), - [MOVE_COMET_PUNCH] = _("Comet Punch"), - [MOVE_MEGA_PUNCH] = _("Mega Punch"), - [MOVE_PAY_DAY] = _("Pay Day"), - [MOVE_FIRE_PUNCH] = _("Fire Punch"), - [MOVE_ICE_PUNCH] = _("Ice Punch"), - [MOVE_THUNDER_PUNCH] = _("Thunder Punch"), - [MOVE_SCRATCH] = _("Scratch"), - [MOVE_VISE_GRIP] = _("Vise Grip"), - [MOVE_GUILLOTINE] = _("Guillotine"), - [MOVE_RAZOR_WIND] = _("Razor Wind"), - [MOVE_SWORDS_DANCE] = _("Swords Dance"), - [MOVE_CUT] = _("Cut"), - [MOVE_GUST] = _("Gust"), - [MOVE_WING_ATTACK] = _("Wing Attack"), - [MOVE_WHIRLWIND] = _("Whirlwind"), - [MOVE_FLY] = _("Fly"), - [MOVE_BIND] = _("Bind"), - [MOVE_SLAM] = _("Slam"), - [MOVE_VINE_WHIP] = _("Vine Whip"), - [MOVE_STOMP] = _("Stomp"), - [MOVE_DOUBLE_KICK] = _("Double Kick"), - [MOVE_MEGA_KICK] = _("Mega Kick"), - [MOVE_JUMP_KICK] = _("Jump Kick"), - [MOVE_ROLLING_KICK] = _("Rolling Kick"), - [MOVE_SAND_ATTACK] = _("Sand Attack"), - [MOVE_HEADBUTT] = _("Headbutt"), - [MOVE_HORN_ATTACK] = _("Horn Attack"), - [MOVE_FURY_ATTACK] = _("Fury Attack"), - [MOVE_HORN_DRILL] = _("Horn Drill"), - [MOVE_TACKLE] = _("Tackle"), - [MOVE_BODY_SLAM] = _("Body Slam"), - [MOVE_WRAP] = _("Wrap"), - [MOVE_TAKE_DOWN] = _("Take Down"), - [MOVE_THRASH] = _("Thrash"), - [MOVE_DOUBLE_EDGE] = _("Double-Edge"), - [MOVE_TAIL_WHIP] = _("Tail Whip"), - [MOVE_POISON_STING] = _("Poison Sting"), - [MOVE_TWINEEDLE] = _("Twineedle"), - [MOVE_PIN_MISSILE] = _("Pin Missile"), - [MOVE_LEER] = _("Leer"), - [MOVE_BITE] = _("Bite"), - [MOVE_GROWL] = _("Growl"), - [MOVE_ROAR] = _("Roar"), - [MOVE_SING] = _("Sing"), - [MOVE_SUPERSONIC] = _("Supersonic"), - [MOVE_SONIC_BOOM] = _("Sonic Boom"), - [MOVE_DISABLE] = _("Disable"), - [MOVE_ACID] = _("Acid"), - [MOVE_EMBER] = _("Ember"), - [MOVE_FLAMETHROWER] = _("Flamethrower"), - [MOVE_MIST] = _("Mist"), - [MOVE_WATER_GUN] = _("Water Gun"), - [MOVE_HYDRO_PUMP] = _("Hydro Pump"), - [MOVE_SURF] = _("Surf"), - [MOVE_ICE_BEAM] = _("Ice Beam"), - [MOVE_BLIZZARD] = _("Blizzard"), - [MOVE_PSYBEAM] = _("Psybeam"), - [MOVE_BUBBLE_BEAM] = _("Bubble Beam"), - [MOVE_AURORA_BEAM] = _("Aurora Beam"), - [MOVE_HYPER_BEAM] = _("Hyper Beam"), - [MOVE_PECK] = _("Peck"), - [MOVE_DRILL_PECK] = _("Drill Peck"), - [MOVE_SUBMISSION] = _("Submission"), - [MOVE_LOW_KICK] = _("Low Kick"), - [MOVE_COUNTER] = _("Counter"), - [MOVE_SEISMIC_TOSS] = _("Seismic Toss"), - [MOVE_STRENGTH] = _("Strength"), - [MOVE_ABSORB] = _("Absorb"), - [MOVE_MEGA_DRAIN] = _("Mega Drain"), - [MOVE_LEECH_SEED] = _("Leech Seed"), - [MOVE_GROWTH] = _("Growth"), - [MOVE_RAZOR_LEAF] = _("Razor Leaf"), - [MOVE_SOLAR_BEAM] = _("Solar Beam"), - [MOVE_POISON_POWDER] = _("Poison Powder"), - [MOVE_STUN_SPORE] = _("Stun Spore"), - [MOVE_SLEEP_POWDER] = _("Sleep Powder"), - [MOVE_PETAL_DANCE] = _("Petal Dance"), - [MOVE_STRING_SHOT] = _("String Shot"), - [MOVE_DRAGON_RAGE] = _("Dragon Rage"), - [MOVE_FIRE_SPIN] = _("Fire Spin"), - [MOVE_THUNDER_SHOCK] = _("Thunder Shock"), - [MOVE_THUNDERBOLT] = _("Thunderbolt"), - [MOVE_THUNDER_WAVE] = _("Thunder Wave"), - [MOVE_THUNDER] = _("Thunder"), - [MOVE_ROCK_THROW] = _("Rock Throw"), - [MOVE_EARTHQUAKE] = _("Earthquake"), - [MOVE_FISSURE] = _("Fissure"), - [MOVE_DIG] = _("Dig"), - [MOVE_TOXIC] = _("Toxic"), - [MOVE_CONFUSION] = _("Confusion"), - [MOVE_PSYCHIC] = _("Psychic"), - [MOVE_HYPNOSIS] = _("Hypnosis"), - [MOVE_MEDITATE] = _("Meditate"), - [MOVE_AGILITY] = _("Agility"), - [MOVE_QUICK_ATTACK] = _("Quick Attack"), - [MOVE_RAGE] = _("Rage"), - [MOVE_TELEPORT] = _("Teleport"), - [MOVE_NIGHT_SHADE] = _("Night Shade"), - [MOVE_MIMIC] = _("Mimic"), - [MOVE_SCREECH] = _("Screech"), - [MOVE_DOUBLE_TEAM] = _("Double Team"), - [MOVE_RECOVER] = _("Recover"), - [MOVE_HARDEN] = _("Harden"), - [MOVE_MINIMIZE] = _("Minimize"), - [MOVE_SMOKESCREEN] = _("Smokescreen"), - [MOVE_CONFUSE_RAY] = _("Confuse Ray"), - [MOVE_WITHDRAW] = _("Withdraw"), - [MOVE_DEFENSE_CURL] = _("Defense Curl"), - [MOVE_BARRIER] = _("Barrier"), - [MOVE_LIGHT_SCREEN] = _("Light Screen"), - [MOVE_HAZE] = _("Haze"), - [MOVE_REFLECT] = _("Reflect"), - [MOVE_FOCUS_ENERGY] = _("Focus Energy"), - [MOVE_BIDE] = _("Bide"), - [MOVE_METRONOME] = _("Metronome"), - [MOVE_MIRROR_MOVE] = _("Mirror Move"), - [MOVE_SELF_DESTRUCT] = _("Self-Destruct"), - [MOVE_EGG_BOMB] = _("Egg Bomb"), - [MOVE_LICK] = _("Lick"), - [MOVE_SMOG] = _("Smog"), - [MOVE_SLUDGE] = _("Sludge"), - [MOVE_BONE_CLUB] = _("Bone Club"), - [MOVE_FIRE_BLAST] = _("Fire Blast"), - [MOVE_WATERFALL] = _("Waterfall"), - [MOVE_CLAMP] = _("Clamp"), - [MOVE_SWIFT] = _("Swift"), - [MOVE_SKULL_BASH] = _("Skull Bash"), - [MOVE_SPIKE_CANNON] = _("Spike Cannon"), - [MOVE_CONSTRICT] = _("Constrict"), - [MOVE_AMNESIA] = _("Amnesia"), - [MOVE_KINESIS] = _("Kinesis"), - [MOVE_SOFT_BOILED] = _("Soft-Boiled"), - [MOVE_HIGH_JUMP_KICK] = _("High Jump Kick"), - [MOVE_GLARE] = _("Glare"), - [MOVE_DREAM_EATER] = _("Dream Eater"), - [MOVE_POISON_GAS] = _("Poison Gas"), - [MOVE_BARRAGE] = _("Barrage"), - [MOVE_LEECH_LIFE] = _("Leech Life"), - [MOVE_LOVELY_KISS] = _("Lovely Kiss"), - [MOVE_SKY_ATTACK] = _("Sky Attack"), - [MOVE_TRANSFORM] = _("Transform"), - [MOVE_BUBBLE] = _("Bubble"), - [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"), - [MOVE_SPORE] = _("Spore"), - [MOVE_FLASH] = _("Flash"), - [MOVE_PSYWAVE] = _("Psywave"), - [MOVE_SPLASH] = _("Splash"), - [MOVE_ACID_ARMOR] = _("Acid Armor"), - [MOVE_CRABHAMMER] = _("Crabhammer"), - [MOVE_EXPLOSION] = _("Explosion"), - [MOVE_FURY_SWIPES] = _("Fury Swipes"), - [MOVE_BONEMERANG] = _("Bonemerang"), - [MOVE_REST] = _("Rest"), - [MOVE_ROCK_SLIDE] = _("Rock Slide"), - [MOVE_HYPER_FANG] = _("Hyper Fang"), - [MOVE_SHARPEN] = _("Sharpen"), - [MOVE_CONVERSION] = _("Conversion"), - [MOVE_TRI_ATTACK] = _("Tri Attack"), - [MOVE_SUPER_FANG] = _("Super Fang"), - [MOVE_SLASH] = _("Slash"), - [MOVE_SUBSTITUTE] = _("Substitute"), - [MOVE_STRUGGLE] = _("Struggle"), - [MOVE_SKETCH] = _("Sketch"), - [MOVE_TRIPLE_KICK] = _("Triple Kick"), - [MOVE_THIEF] = _("Thief"), - [MOVE_SPIDER_WEB] = _("Spider Web"), - [MOVE_MIND_READER] = _("Mind Reader"), - [MOVE_NIGHTMARE] = _("Nightmare"), - [MOVE_FLAME_WHEEL] = _("Flame Wheel"), - [MOVE_SNORE] = _("Snore"), - [MOVE_CURSE] = _("Curse"), - [MOVE_FLAIL] = _("Flail"), - [MOVE_CONVERSION_2] = _("Conversion 2"), - [MOVE_AEROBLAST] = _("Aeroblast"), - [MOVE_COTTON_SPORE] = _("Cotton Spore"), - [MOVE_REVERSAL] = _("Reversal"), - [MOVE_SPITE] = _("Spite"), - [MOVE_POWDER_SNOW] = _("Powder Snow"), - [MOVE_PROTECT] = _("Protect"), - [MOVE_MACH_PUNCH] = _("Mach Punch"), - [MOVE_SCARY_FACE] = _("Scary Face"), - [MOVE_FEINT_ATTACK] = _("Feint Attack"), - [MOVE_SWEET_KISS] = _("Sweet Kiss"), - [MOVE_BELLY_DRUM] = _("Belly Drum"), - [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"), - [MOVE_MUD_SLAP] = _("Mud-Slap"), - [MOVE_OCTAZOOKA] = _("Octazooka"), - [MOVE_SPIKES] = _("Spikes"), - [MOVE_ZAP_CANNON] = _("Zap Cannon"), - [MOVE_FORESIGHT] = _("Foresight"), - [MOVE_DESTINY_BOND] = _("Destiny Bond"), - [MOVE_PERISH_SONG] = _("Perish Song"), - [MOVE_ICY_WIND] = _("Icy Wind"), - [MOVE_DETECT] = _("Detect"), - [MOVE_BONE_RUSH] = _("Bone Rush"), - [MOVE_LOCK_ON] = _("Lock-On"), - [MOVE_OUTRAGE] = _("Outrage"), - [MOVE_SANDSTORM] = _("Sandstorm"), - [MOVE_GIGA_DRAIN] = _("Giga Drain"), - [MOVE_ENDURE] = _("Endure"), - [MOVE_CHARM] = _("Charm"), - [MOVE_ROLLOUT] = _("Rollout"), - [MOVE_FALSE_SWIPE] = _("False Swipe"), - [MOVE_SWAGGER] = _("Swagger"), - [MOVE_MILK_DRINK] = _("Milk Drink"), - [MOVE_SPARK] = _("Spark"), - [MOVE_FURY_CUTTER] = _("Fury Cutter"), - [MOVE_STEEL_WING] = _("Steel Wing"), - [MOVE_MEAN_LOOK] = _("Mean Look"), - [MOVE_ATTRACT] = _("Attract"), - [MOVE_SLEEP_TALK] = _("Sleep Talk"), - [MOVE_HEAL_BELL] = _("Heal Bell"), - [MOVE_RETURN] = _("Return"), - [MOVE_PRESENT] = _("Present"), - [MOVE_FRUSTRATION] = _("Frustration"), - [MOVE_SAFEGUARD] = _("Safeguard"), - [MOVE_PAIN_SPLIT] = _("Pain Split"), - [MOVE_SACRED_FIRE] = _("Sacred Fire"), - [MOVE_MAGNITUDE] = _("Magnitude"), - [MOVE_DYNAMIC_PUNCH] = _("Dynamic Punch"), - [MOVE_MEGAHORN] = _("Megahorn"), - [MOVE_DRAGON_BREATH] = _("Dragon Breath"), - [MOVE_BATON_PASS] = _("Baton Pass"), - [MOVE_ENCORE] = _("Encore"), - [MOVE_PURSUIT] = _("Pursuit"), - [MOVE_RAPID_SPIN] = _("Rapid Spin"), - [MOVE_SWEET_SCENT] = _("Sweet Scent"), - [MOVE_IRON_TAIL] = _("Iron Tail"), - [MOVE_METAL_CLAW] = _("Metal Claw"), - [MOVE_VITAL_THROW] = _("Vital Throw"), - [MOVE_MORNING_SUN] = _("Morning Sun"), - [MOVE_SYNTHESIS] = _("Synthesis"), - [MOVE_MOONLIGHT] = _("Moonlight"), - [MOVE_HIDDEN_POWER] = _("Hidden Power"), - [MOVE_CROSS_CHOP] = _("Cross Chop"), - [MOVE_TWISTER] = _("Twister"), - [MOVE_RAIN_DANCE] = _("Rain Dance"), - [MOVE_SUNNY_DAY] = _("Sunny Day"), - [MOVE_CRUNCH] = _("Crunch"), - [MOVE_MIRROR_COAT] = _("Mirror Coat"), - [MOVE_PSYCH_UP] = _("Psych Up"), - [MOVE_EXTREME_SPEED] = _("Extreme Speed"), - [MOVE_ANCIENT_POWER] = _("Ancient Power"), - [MOVE_SHADOW_BALL] = _("Shadow Ball"), - [MOVE_FUTURE_SIGHT] = _("Future Sight"), - [MOVE_ROCK_SMASH] = _("Rock Smash"), - [MOVE_WHIRLPOOL] = _("Whirlpool"), - [MOVE_BEAT_UP] = _("Beat Up"), - [MOVE_FAKE_OUT] = _("Fake Out"), - [MOVE_UPROAR] = _("Uproar"), - [MOVE_STOCKPILE] = _("Stockpile"), - [MOVE_SPIT_UP] = _("Spit Up"), - [MOVE_SWALLOW] = _("Swallow"), - [MOVE_HEAT_WAVE] = _("Heat Wave"), - [MOVE_HAIL] = _("Hail"), - [MOVE_TORMENT] = _("Torment"), - [MOVE_FLATTER] = _("Flatter"), - [MOVE_WILL_O_WISP] = _("Will-o-Wisp"), - [MOVE_MEMENTO] = _("Memento"), - [MOVE_FACADE] = _("Facade"), - [MOVE_FOCUS_PUNCH] = _("Focus Punch"), - [MOVE_SMELLING_SALTS] = _("Smelling Salts"), - [MOVE_FOLLOW_ME] = _("Follow Me"), - [MOVE_NATURE_POWER] = _("Nature Power"), - [MOVE_CHARGE] = _("Charge"), - [MOVE_TAUNT] = _("Taunt"), - [MOVE_HELPING_HAND] = _("Helping Hand"), - [MOVE_TRICK] = _("Trick"), - [MOVE_ROLE_PLAY] = _("Role Play"), - [MOVE_WISH] = _("Wish"), - [MOVE_ASSIST] = _("Assist"), - [MOVE_INGRAIN] = _("Ingrain"), - [MOVE_SUPERPOWER] = _("Superpower"), - [MOVE_MAGIC_COAT] = _("Magic Coat"), - [MOVE_RECYCLE] = _("Recycle"), - [MOVE_REVENGE] = _("Revenge"), - [MOVE_BRICK_BREAK] = _("Brick Break"), - [MOVE_YAWN] = _("Yawn"), - [MOVE_KNOCK_OFF] = _("Knock Off"), - [MOVE_ENDEAVOR] = _("Endeavor"), - [MOVE_ERUPTION] = _("Eruption"), - [MOVE_SKILL_SWAP] = _("Skill Swap"), - [MOVE_IMPRISON] = _("Imprison"), - [MOVE_REFRESH] = _("Refresh"), - [MOVE_GRUDGE] = _("Grudge"), - [MOVE_SNATCH] = _("Snatch"), - [MOVE_SECRET_POWER] = _("Secret Power"), - [MOVE_DIVE] = _("Dive"), - [MOVE_ARM_THRUST] = _("Arm Thrust"), - [MOVE_CAMOUFLAGE] = _("Camouflage"), - [MOVE_TAIL_GLOW] = _("Tail Glow"), - [MOVE_LUSTER_PURGE] = _("Luster Purge"), - [MOVE_MIST_BALL] = _("Mist Ball"), - [MOVE_FEATHER_DANCE] = _("Feather Dance"), - [MOVE_TEETER_DANCE] = _("Teeter Dance"), - [MOVE_BLAZE_KICK] = _("Blaze Kick"), - [MOVE_MUD_SPORT] = _("Mud Sport"), - [MOVE_ICE_BALL] = _("Ice Ball"), - [MOVE_NEEDLE_ARM] = _("Needle Arm"), - [MOVE_SLACK_OFF] = _("Slack Off"), - [MOVE_HYPER_VOICE] = _("Hyper Voice"), - [MOVE_POISON_FANG] = _("Poison Fang"), - [MOVE_CRUSH_CLAW] = _("Crush Claw"), - [MOVE_BLAST_BURN] = _("Blast Burn"), - [MOVE_HYDRO_CANNON] = _("Hydro Cannon"), - [MOVE_METEOR_MASH] = _("Meteor Mash"), - [MOVE_ASTONISH] = _("Astonish"), - [MOVE_WEATHER_BALL] = _("Weather Ball"), - [MOVE_AROMATHERAPY] = _("Aromatherapy"), - [MOVE_FAKE_TEARS] = _("Fake Tears"), - [MOVE_AIR_CUTTER] = _("Air Cutter"), - [MOVE_OVERHEAT] = _("Overheat"), - [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"), - [MOVE_ROCK_TOMB] = _("Rock Tomb"), - [MOVE_SILVER_WIND] = _("Silver Wind"), - [MOVE_METAL_SOUND] = _("Metal Sound"), - [MOVE_GRASS_WHISTLE] = _("Grass Whistle"), - [MOVE_TICKLE] = _("Tickle"), - [MOVE_COSMIC_POWER] = _("Cosmic Power"), - [MOVE_WATER_SPOUT] = _("Water Spout"), - [MOVE_SIGNAL_BEAM] = _("Signal Beam"), - [MOVE_SHADOW_PUNCH] = _("Shadow Punch"), - [MOVE_EXTRASENSORY] = _("Extrasensory"), - [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"), - [MOVE_SAND_TOMB] = _("Sand Tomb"), - [MOVE_SHEER_COLD] = _("Sheer Cold"), - [MOVE_MUDDY_WATER] = _("Muddy Water"), - [MOVE_BULLET_SEED] = _("Bullet Seed"), - [MOVE_AERIAL_ACE] = _("Aerial Ace"), - [MOVE_ICICLE_SPEAR] = _("Icicle Spear"), - [MOVE_IRON_DEFENSE] = _("Iron Defense"), - [MOVE_BLOCK] = _("Block"), - [MOVE_HOWL] = _("Howl"), - [MOVE_DRAGON_CLAW] = _("Dragon Claw"), - [MOVE_FRENZY_PLANT] = _("Frenzy Plant"), - [MOVE_BULK_UP] = _("Bulk Up"), - [MOVE_BOUNCE] = _("Bounce"), - [MOVE_MUD_SHOT] = _("Mud Shot"), - [MOVE_POISON_TAIL] = _("Poison Tail"), - [MOVE_COVET] = _("Covet"), - [MOVE_VOLT_TACKLE] = _("Volt Tackle"), - [MOVE_MAGICAL_LEAF] = _("Magical Leaf"), - [MOVE_WATER_SPORT] = _("Water Sport"), - [MOVE_CALM_MIND] = _("Calm Mind"), - [MOVE_LEAF_BLADE] = _("Leaf Blade"), - [MOVE_DRAGON_DANCE] = _("Dragon Dance"), - [MOVE_ROCK_BLAST] = _("Rock Blast"), - [MOVE_SHOCK_WAVE] = _("Shock Wave"), - [MOVE_WATER_PULSE] = _("Water Pulse"), - [MOVE_DOOM_DESIRE] = _("Doom Desire"), - [MOVE_PSYCHO_BOOST] = _("Psycho Boost"), - [MOVE_ROOST] = _("Roost"), - [MOVE_GRAVITY] = _("Gravity"), - [MOVE_MIRACLE_EYE] = _("Miracle Eye"), - [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"), - [MOVE_HAMMER_ARM] = _("Hammer Arm"), - [MOVE_GYRO_BALL] = _("Gyro Ball"), - [MOVE_HEALING_WISH] = _("Healing Wish"), - [MOVE_BRINE] = _("Brine"), - [MOVE_NATURAL_GIFT] = _("Natural Gift"), - [MOVE_FEINT] = _("Feint"), - [MOVE_PLUCK] = _("Pluck"), - [MOVE_TAILWIND] = _("Tailwind"), - [MOVE_ACUPRESSURE] = _("Acupressure"), - [MOVE_METAL_BURST] = _("Metal Burst"), - [MOVE_U_TURN] = _("U-turn"), - [MOVE_CLOSE_COMBAT] = _("Close Combat"), - [MOVE_PAYBACK] = _("Payback"), - [MOVE_ASSURANCE] = _("Assurance"), - [MOVE_EMBARGO] = _("Embargo"), - [MOVE_FLING] = _("Fling"), - [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"), - [MOVE_TRUMP_CARD] = _("Trump Card"), - [MOVE_HEAL_BLOCK] = _("Heal Block"), - [MOVE_WRING_OUT] = _("Wring Out"), - [MOVE_POWER_TRICK] = _("Power Trick"), - [MOVE_GASTRO_ACID] = _("Gastro Acid"), - [MOVE_LUCKY_CHANT] = _("Lucky Chant"), - [MOVE_ME_FIRST] = _("Me First"), - [MOVE_COPYCAT] = _("Copycat"), - [MOVE_POWER_SWAP] = _("Power Swap"), - [MOVE_GUARD_SWAP] = _("Guard Swap"), - [MOVE_PUNISHMENT] = _("Punishment"), - [MOVE_LAST_RESORT] = _("Last Resort"), - [MOVE_WORRY_SEED] = _("Worry Seed"), - [MOVE_SUCKER_PUNCH] = _("Sucker Punch"), - [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"), - [MOVE_HEART_SWAP] = _("Heart Swap"), - [MOVE_AQUA_RING] = _("Aqua Ring"), - [MOVE_MAGNET_RISE] = _("Magnet Rise"), - [MOVE_FLARE_BLITZ] = _("Flare Blitz"), - [MOVE_FORCE_PALM] = _("Force Palm"), - [MOVE_AURA_SPHERE] = _("Aura Sphere"), - [MOVE_ROCK_POLISH] = _("Rock Polish"), - [MOVE_POISON_JAB] = _("Poison Jab"), - [MOVE_DARK_PULSE] = _("Dark Pulse"), - [MOVE_NIGHT_SLASH] = _("Night Slash"), - [MOVE_AQUA_TAIL] = _("Aqua Tail"), - [MOVE_SEED_BOMB] = _("Seed Bomb"), - [MOVE_AIR_SLASH] = _("Air Slash"), - [MOVE_X_SCISSOR] = _("X-Scissor"), - [MOVE_BUG_BUZZ] = _("Bug Buzz"), - [MOVE_DRAGON_PULSE] = _("Dragon Pulse"), - [MOVE_DRAGON_RUSH] = _("Dragon Rush"), - [MOVE_POWER_GEM] = _("Power Gem"), - [MOVE_DRAIN_PUNCH] = _("Drain Punch"), - [MOVE_VACUUM_WAVE] = _("Vacuum Wave"), - [MOVE_FOCUS_BLAST] = _("Focus Blast"), - [MOVE_ENERGY_BALL] = _("Energy Ball"), - [MOVE_BRAVE_BIRD] = _("Brave Bird"), - [MOVE_EARTH_POWER] = _("Earth Power"), - [MOVE_SWITCHEROO] = _("Switcheroo"), - [MOVE_GIGA_IMPACT] = _("Giga Impact"), - [MOVE_NASTY_PLOT] = _("Nasty Plot"), - [MOVE_BULLET_PUNCH] = _("Bullet Punch"), - [MOVE_AVALANCHE] = _("Avalanche"), - [MOVE_ICE_SHARD] = _("Ice Shard"), - [MOVE_SHADOW_CLAW] = _("Shadow Claw"), - [MOVE_THUNDER_FANG] = _("Thunder Fang"), - [MOVE_ICE_FANG] = _("Ice Fang"), - [MOVE_FIRE_FANG] = _("Fire Fang"), - [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"), - [MOVE_MUD_BOMB] = _("Mud Bomb"), - [MOVE_PSYCHO_CUT] = _("Psycho Cut"), - [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"), - [MOVE_MIRROR_SHOT] = _("Mirror Shot"), - [MOVE_FLASH_CANNON] = _("Flash Cannon"), - [MOVE_ROCK_CLIMB] = _("Rock Climb"), - [MOVE_DEFOG] = _("Defog"), - [MOVE_TRICK_ROOM] = _("Trick Room"), - [MOVE_DRACO_METEOR] = _("Draco Meteor"), - [MOVE_DISCHARGE] = _("Discharge"), - [MOVE_LAVA_PLUME] = _("Lava Plume"), - [MOVE_LEAF_STORM] = _("Leaf Storm"), - [MOVE_POWER_WHIP] = _("Power Whip"), - [MOVE_ROCK_WRECKER] = _("Rock Wrecker"), - [MOVE_CROSS_POISON] = _("Cross Poison"), - [MOVE_GUNK_SHOT] = _("Gunk Shot"), - [MOVE_IRON_HEAD] = _("Iron Head"), - [MOVE_MAGNET_BOMB] = _("Magnet Bomb"), - [MOVE_STONE_EDGE] = _("Stone Edge"), - [MOVE_CAPTIVATE] = _("Captivate"), - [MOVE_STEALTH_ROCK] = _("Stealth Rock"), - [MOVE_GRASS_KNOT] = _("Grass Knot"), - [MOVE_CHATTER] = _("Chatter"), - [MOVE_JUDGMENT] = _("Judgment"), - [MOVE_BUG_BITE] = _("Bug Bite"), - [MOVE_CHARGE_BEAM] = _("Charge Beam"), - [MOVE_WOOD_HAMMER] = _("Wood Hammer"), - [MOVE_AQUA_JET] = _("Aqua Jet"), - [MOVE_ATTACK_ORDER] = _("Attack Order"), - [MOVE_DEFEND_ORDER] = _("Defend Order"), - [MOVE_HEAL_ORDER] = _("Heal Order"), - [MOVE_HEAD_SMASH] = _("Head Smash"), - [MOVE_DOUBLE_HIT] = _("Double Hit"), - [MOVE_ROAR_OF_TIME] = _("Roar of Time"), - [MOVE_SPACIAL_REND] = _("Spacial Rend"), - [MOVE_LUNAR_DANCE] = _("Lunar Dance"), - [MOVE_CRUSH_GRIP] = _("Crush Grip"), - [MOVE_MAGMA_STORM] = _("Magma Storm"), - [MOVE_DARK_VOID] = _("Dark Void"), - [MOVE_SEED_FLARE] = _("Seed Flare"), - [MOVE_OMINOUS_WIND] = _("Ominous Wind"), - [MOVE_SHADOW_FORCE] = _("Shadow Force"), - [MOVE_HONE_CLAWS] = _("Hone Claws"), - [MOVE_WIDE_GUARD] = _("Wide Guard"), - [MOVE_GUARD_SPLIT] = _("Guard Split"), - [MOVE_POWER_SPLIT] = _("Power Split"), - [MOVE_WONDER_ROOM] = _("Wonder Room"), - [MOVE_PSYSHOCK] = _("Psyshock"), - [MOVE_VENOSHOCK] = _("Venoshock"), - [MOVE_AUTOTOMIZE] = _("Autotomize"), - [MOVE_RAGE_POWDER] = _("Rage Powder"), - [MOVE_TELEKINESIS] = _("Telekinesis"), - [MOVE_MAGIC_ROOM] = _("Magic Room"), - [MOVE_SMACK_DOWN] = _("Smack Down"), - [MOVE_STORM_THROW] = _("Storm Throw"), - [MOVE_FLAME_BURST] = _("Flame Burst"), - [MOVE_SLUDGE_WAVE] = _("Sludge Wave"), - [MOVE_QUIVER_DANCE] = _("Quiver Dance"), - [MOVE_HEAVY_SLAM] = _("Heavy Slam"), - [MOVE_SYNCHRONOISE] = _("Synchronoise"), - [MOVE_ELECTRO_BALL] = _("Electro Ball"), - [MOVE_SOAK] = _("Soak"), - [MOVE_FLAME_CHARGE] = _("Flame Charge"), - [MOVE_COIL] = _("Coil"), - [MOVE_LOW_SWEEP] = _("Low Sweep"), - [MOVE_ACID_SPRAY] = _("Acid Spray"), - [MOVE_FOUL_PLAY] = _("Foul Play"), - [MOVE_SIMPLE_BEAM] = _("Simple Beam"), - [MOVE_ENTRAINMENT] = _("Entrainment"), - [MOVE_AFTER_YOU] = _("After You"), - [MOVE_ROUND] = _("Round"), - [MOVE_ECHOED_VOICE] = _("Echoed Voice"), - [MOVE_CHIP_AWAY] = _("Chip Away"), - [MOVE_CLEAR_SMOG] = _("Clear Smog"), - [MOVE_STORED_POWER] = _("Stored Power"), - [MOVE_QUICK_GUARD] = _("Quick Guard"), - [MOVE_ALLY_SWITCH] = _("Ally Switch"), - [MOVE_SCALD] = _("Scald"), - [MOVE_SHELL_SMASH] = _("Shell Smash"), - [MOVE_HEAL_PULSE] = _("Heal Pulse"), - [MOVE_HEX] = _("Hex"), - [MOVE_SKY_DROP] = _("Sky Drop"), - [MOVE_SHIFT_GEAR] = _("Shift Gear"), - [MOVE_CIRCLE_THROW] = _("Circle Throw"), - [MOVE_INCINERATE] = _("Incinerate"), - [MOVE_QUASH] = _("Quash"), - [MOVE_ACROBATICS] = _("Acrobatics"), - [MOVE_REFLECT_TYPE] = _("Reflect Type"), - [MOVE_RETALIATE] = _("Retaliate"), - [MOVE_FINAL_GAMBIT] = _("Final Gambit"), - [MOVE_BESTOW] = _("Bestow"), - [MOVE_INFERNO] = _("Inferno"), - [MOVE_WATER_PLEDGE] = _("Water Pledge"), - [MOVE_FIRE_PLEDGE] = _("Fire Pledge"), - [MOVE_GRASS_PLEDGE] = _("Grass Pledge"), - [MOVE_VOLT_SWITCH] = _("Volt Switch"), - [MOVE_STRUGGLE_BUG] = _("Struggle Bug"), - [MOVE_BULLDOZE] = _("Bulldoze"), - [MOVE_FROST_BREATH] = _("Frost Breath"), - [MOVE_DRAGON_TAIL] = _("Dragon Tail"), - [MOVE_WORK_UP] = _("Work Up"), - [MOVE_ELECTROWEB] = _("Electroweb"), - [MOVE_WILD_CHARGE] = _("Wild Charge"), - [MOVE_DRILL_RUN] = _("Drill Run"), - [MOVE_DUAL_CHOP] = _("Dual Chop"), - [MOVE_HEART_STAMP] = _("Heart Stamp"), - [MOVE_HORN_LEECH] = _("Horn Leech"), - [MOVE_SACRED_SWORD] = _("Sacred Sword"), - [MOVE_RAZOR_SHELL] = _("Razor Shell"), - [MOVE_HEAT_CRASH] = _("Heat Crash"), - [MOVE_LEAF_TORNADO] = _("Leaf Tornado"), - [MOVE_STEAMROLLER] = _("Steamroller"), - [MOVE_COTTON_GUARD] = _("Cotton Guard"), - [MOVE_NIGHT_DAZE] = _("Night Daze"), - [MOVE_PSYSTRIKE] = _("Psystrike"), - [MOVE_TAIL_SLAP] = _("Tail Slap"), - [MOVE_HURRICANE] = _("Hurricane"), - [MOVE_HEAD_CHARGE] = _("Head Charge"), - [MOVE_GEAR_GRIND] = _("Gear Grind"), - [MOVE_SEARING_SHOT] = _("Searing Shot"), - [MOVE_TECHNO_BLAST] = _("Techno Blast"), - [MOVE_RELIC_SONG] = _("Relic Song"), - [MOVE_SECRET_SWORD] = _("Secret Sword"), - [MOVE_GLACIATE] = _("Glaciate"), - [MOVE_BOLT_STRIKE] = _("Bolt Strike"), - [MOVE_BLUE_FLARE] = _("Blue Flare"), - [MOVE_FIERY_DANCE] = _("Fiery Dance"), - [MOVE_FREEZE_SHOCK] = _("Freeze Shock"), - [MOVE_ICE_BURN] = _("Ice Burn"), - [MOVE_SNARL] = _("Snarl"), - [MOVE_ICICLE_CRASH] = _("Icicle Crash"), - [MOVE_V_CREATE] = _("V-create"), - [MOVE_FUSION_FLARE] = _("Fusion Flare"), - [MOVE_FUSION_BOLT] = _("Fusion Bolt"), - [MOVE_FLYING_PRESS] = _("Flying Press"), - [MOVE_MAT_BLOCK] = _("Mat Block"), - [MOVE_BELCH] = _("Belch"), - [MOVE_ROTOTILLER] = _("Rototiller"), - [MOVE_STICKY_WEB] = _("Sticky Web"), - [MOVE_FELL_STINGER] = _("Fell Stinger"), - [MOVE_PHANTOM_FORCE] = _("Phantom Force"), - [MOVE_TRICK_OR_TREAT] = _("Trick-Or-Treat"), - [MOVE_NOBLE_ROAR] = _("Noble Roar"), - [MOVE_ION_DELUGE] = _("Ion Deluge"), - [MOVE_PARABOLIC_CHARGE] = _("Parabolic Charge"), - [MOVE_FORESTS_CURSE] = _("Forest's Curse"), - [MOVE_PETAL_BLIZZARD] = _("Petal Blizzard"), - [MOVE_FREEZE_DRY] = _("Freeze-Dry"), - [MOVE_DISARMING_VOICE] = _("Disarming Voice"), - [MOVE_PARTING_SHOT] = _("Parting Shot"), - [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"), - [MOVE_DRAINING_KISS] = _("Draining Kiss"), - [MOVE_CRAFTY_SHIELD] = _("Crafty Shield"), - [MOVE_FLOWER_SHIELD] = _("Flower Shield"), - [MOVE_GRASSY_TERRAIN] = _("Grassy Terrain"), - [MOVE_MISTY_TERRAIN] = _("Misty Terrain"), - [MOVE_ELECTRIFY] = _("Electrify"), - [MOVE_PLAY_ROUGH] = _("Play Rough"), - [MOVE_FAIRY_WIND] = _("Fairy Wind"), - [MOVE_MOONBLAST] = _("Moonblast"), - [MOVE_BOOMBURST] = _("Boomburst"), - [MOVE_FAIRY_LOCK] = _("Fairy Lock"), - [MOVE_KINGS_SHIELD] = _("King's Shield"), - [MOVE_PLAY_NICE] = _("Play Nice"), - [MOVE_CONFIDE] = _("Confide"), - [MOVE_DIAMOND_STORM] = _("Diamond Storm"), - [MOVE_STEAM_ERUPTION] = _("Steam Eruption"), - [MOVE_HYPERSPACE_HOLE] = _("Hyprspace Hole"), - [MOVE_WATER_SHURIKEN] = _("Water Shuriken"), - [MOVE_MYSTICAL_FIRE] = _("Mystical Fire"), - [MOVE_SPIKY_SHIELD] = _("Spiky Shield"), - [MOVE_AROMATIC_MIST] = _("Aromatic Mist"), - [MOVE_EERIE_IMPULSE] = _("Eerie Impulse"), - [MOVE_VENOM_DRENCH] = _("Venom Drench"), - [MOVE_POWDER] = _("Powder"), - [MOVE_GEOMANCY] = _("Geomancy"), - [MOVE_MAGNETIC_FLUX] = _("Magnetic Flux"), - [MOVE_HAPPY_HOUR] = _("Happy Hour"), - [MOVE_ELECTRIC_TERRAIN] = _("Electric Terrain"), - [MOVE_DAZZLING_GLEAM] = _("Dazzling Gleam"), - [MOVE_CELEBRATE] = _("Celebrate"), - [MOVE_HOLD_HANDS] = _("Hold Hands"), - [MOVE_BABY_DOLL_EYES] = _("Baby-Doll Eyes"), - [MOVE_NUZZLE] = _("Nuzzle"), - [MOVE_HOLD_BACK] = _("Hold Back"), - [MOVE_INFESTATION] = _("Infestation"), - [MOVE_POWER_UP_PUNCH] = _("Power-Up Punch"), - [MOVE_OBLIVION_WING] = _("Oblivion Wing"), - [MOVE_THOUSAND_ARROWS] = _("Thousand Arrows"), - [MOVE_THOUSAND_WAVES] = _("Thousand Waves"), - [MOVE_LANDS_WRATH] = _("Land's Wrath"), - [MOVE_LIGHT_OF_RUIN] = _("Light Of Ruin"), - [MOVE_ORIGIN_PULSE] = _("Origin Pulse"), - [MOVE_PRECIPICE_BLADES] = _("Precipice Blades"), - [MOVE_DRAGON_ASCENT] = _("Dragon Ascent"), - [MOVE_HYPERSPACE_FURY] = _("Hyperspace Fury"), - [MOVE_SHORE_UP] = _("Shore Up"), - [MOVE_FIRST_IMPRESSION] = _("First Impression"), - [MOVE_BANEFUL_BUNKER] = _("Baneful Bunker"), - [MOVE_SPIRIT_SHACKLE] = _("Spirit Shackle"), - [MOVE_DARKEST_LARIAT] = _("Darkest Lariat"), - [MOVE_SPARKLING_ARIA] = _("Sparkling Aria"), - [MOVE_ICE_HAMMER] = _("Ice Hammer"), - [MOVE_FLORAL_HEALING] = _("Floral Healng"), - [MOVE_HIGH_HORSEPOWER] = _("High Horsepower"), - [MOVE_STRENGTH_SAP] = _("Strength Sap"), - [MOVE_SOLAR_BLADE] = _("Solar Blade"), - [MOVE_LEAFAGE] = _("Leafage"), - [MOVE_SPOTLIGHT] = _("Spotlight"), - [MOVE_TOXIC_THREAD] = _("Toxic Thread"), - [MOVE_LASER_FOCUS] = _("Laser Focus"), - [MOVE_GEAR_UP] = _("Gear Up"), - [MOVE_THROAT_CHOP] = _("Throat Chop"), - [MOVE_POLLEN_PUFF] = _("Pollen Puff"), - [MOVE_ANCHOR_SHOT] = _("Anchor Shot"), - [MOVE_PSYCHIC_TERRAIN] = _("Psychic Terrain"), - [MOVE_LUNGE] = _("Lunge"), - [MOVE_FIRE_LASH] = _("Fire Lash"), - [MOVE_POWER_TRIP] = _("Power Trip"), - [MOVE_BURN_UP] = _("Burn Up"), - [MOVE_SPEED_SWAP] = _("Speed Swap"), - [MOVE_SMART_STRIKE] = _("Smart Strike"), - [MOVE_PURIFY] = _("Purify"), - [MOVE_REVELATION_DANCE] = _("Revelation Dance"), - [MOVE_CORE_ENFORCER] = _("Core Enforcer"), - [MOVE_TROP_KICK] = _("Trop Kick"), - [MOVE_INSTRUCT] = _("Instruct"), - [MOVE_BEAK_BLAST] = _("Beak Blast"), - [MOVE_CLANGING_SCALES] = _("Clanging Scales"), - [MOVE_DRAGON_HAMMER] = _("Dragon Hammer"), - [MOVE_BRUTAL_SWING] = _("Brutal Swing"), - [MOVE_AURORA_VEIL] = _("Aurora Veil"), - [MOVE_SHELL_TRAP] = _("Shell Trap"), - [MOVE_FLEUR_CANNON] = _("Fleur Cannon"), - [MOVE_PSYCHIC_FANGS] = _("Psychic Fangs"), - [MOVE_STOMPING_TANTRUM] = _("Stomping Tantrum"), - [MOVE_SHADOW_BONE] = _("Shadow Bone"), - [MOVE_ACCELEROCK] = _("Accelerock"), - [MOVE_LIQUIDATION] = _("Liquidation"), - [MOVE_PRISMATIC_LASER] = _("Prismatic Laser"), - [MOVE_SPECTRAL_THIEF] = _("Spectral Thief"), - [MOVE_SUNSTEEL_STRIKE] = _("Sunsteel Strike"), - [MOVE_MOONGEIST_BEAM] = _("Moongeist Beam"), - [MOVE_TEARFUL_LOOK] = _("Tearful Look"), - [MOVE_ZING_ZAP] = _("Zing Zap"), - [MOVE_NATURES_MADNESS] = _("Nature's Madness"), - [MOVE_MULTI_ATTACK] = _("Multi-Attack"), - [MOVE_MIND_BLOWN] = _("Mind Blown"), - [MOVE_PLASMA_FISTS] = _("Plasma Fists"), - [MOVE_PHOTON_GEYSER] = _("Photon Geyser"), - [MOVE_ZIPPY_ZAP] = _("Zippy Zap"), - [MOVE_SPLISHY_SPLASH] = _("Splishy Splash"), - [MOVE_FLOATY_FALL] = _("Floaty Fall"), - [MOVE_PIKA_PAPOW] = _("Pika Papow"), - [MOVE_BOUNCY_BUBBLE] = _("Bouncy Bubble"), - [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"), - [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"), - [MOVE_GLITZY_GLOW] = _("Glitzy Glow"), - [MOVE_BADDY_BAD] = _("Baddy Bad"), - [MOVE_SAPPY_SEED] = _("Sappy Seed"), - [MOVE_FREEZY_FROST] = _("Freezy Frost"), - [MOVE_SPARKLY_SWIRL] = _("Sparkly Swirl"), - [MOVE_VEEVEE_VOLLEY] = _("Veevee Volley"), - [MOVE_DOUBLE_IRON_BASH] = _("Double Iron Bash"), - [MOVE_DYNAMAX_CANNON] = _("Dynamax Cannon"), - [MOVE_SNIPE_SHOT] = _("Snipe Shot"), - [MOVE_JAW_LOCK] = _("Jaw Lock"), - [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"), - [MOVE_NO_RETREAT] = _("No Retreat"), - [MOVE_TAR_SHOT] = _("Tar Shot"), - [MOVE_MAGIC_POWDER] = _("Magic Powder"), - [MOVE_DRAGON_DARTS] = _("Dragon Darts"), - [MOVE_TEATIME] = _("Teatime"), - [MOVE_OCTOLOCK] = _("Octolock"), - [MOVE_BOLT_BEAK] = _("Bolt Beak"), - [MOVE_FISHIOUS_REND] = _("Fishious Rend"), - [MOVE_COURT_CHANGE] = _("Court Change"), - [MOVE_CLANGOROUS_SOUL] = _("Clangorous Soul"), - [MOVE_BODY_PRESS] = _("Body Press"), - [MOVE_DECORATE] = _("Decorate"), - [MOVE_DRUM_BEATING] = _("Drum Beating"), - [MOVE_SNAP_TRAP] = _("Snap Trap"), - [MOVE_PYRO_BALL] = _("Pyro Ball"), - [MOVE_BEHEMOTH_BLADE] = _("Behemoth Blade"), - [MOVE_BEHEMOTH_BASH] = _("Behemoth Bash"), - [MOVE_AURA_WHEEL] = _("Aura Wheel"), - [MOVE_BREAKING_SWIPE] = _("Breaking Swipe"), - [MOVE_BRANCH_POKE] = _("Branch Poke"), - [MOVE_OVERDRIVE] = _("Overdrive"), - [MOVE_APPLE_ACID] = _("Apple Acid"), - [MOVE_GRAV_APPLE] = _("Grav Apple"), - [MOVE_SPIRIT_BREAK] = _("Spirit Break"), - [MOVE_STRANGE_STEAM] = _("Strange Steam"), - [MOVE_LIFE_DEW] = _("Life Dew"), - [MOVE_OBSTRUCT] = _("Obstruct"), - [MOVE_FALSE_SURRENDER] = _("False Surrender"), - [MOVE_METEOR_ASSAULT] = _("Meteor Assault"), - [MOVE_ETERNABEAM] = _("Eternabeam"), - [MOVE_STEEL_BEAM] = _("Steel Beam"), - [MOVE_EXPANDING_FORCE] = _("Expanding Force"), - [MOVE_STEEL_ROLLER] = _("Steel Roller"), - [MOVE_SCALE_SHOT] = _("Scale Shot"), - [MOVE_METEOR_BEAM] = _("Meteor Beam"), - [MOVE_SHELL_SIDE_ARM] = _("Shell Side Arm"), - [MOVE_MISTY_EXPLOSION] = _("Misty Explosion"), - [MOVE_GRASSY_GLIDE] = _("Grassy Glide"), - [MOVE_RISING_VOLTAGE] = _("Rising Voltage"), - [MOVE_TERRAIN_PULSE] = _("Terrain Pulse"), - [MOVE_SKITTER_SMACK] = _("Skitter Smack"), - [MOVE_BURNING_JEALOUSY] = _("Burning Jealousy"), - [MOVE_LASH_OUT] = _("Lash Out"), - [MOVE_POLTERGEIST] = _("Poltergeist"), - [MOVE_CORROSIVE_GAS] = _("Corrosive Gas"), - [MOVE_COACHING] = _("Coaching"), - [MOVE_FLIP_TURN] = _("Flip Turn"), - [MOVE_TRIPLE_AXEL] = _("Triple Axel"), - [MOVE_DUAL_WINGBEAT] = _("Dual Wingbeat"), - [MOVE_SCORCHING_SANDS] = _("Scorching Sands"), - [MOVE_JUNGLE_HEALING] = _("Jungle Healng"), - [MOVE_WICKED_BLOW] = _("Wicked Blow"), - [MOVE_SURGING_STRIKES] = _("Surging Strikes"), - [MOVE_THUNDER_CAGE] = _("Thunder Cage"), - [MOVE_DRAGON_ENERGY] = _("Dragon Energy"), - [MOVE_FREEZING_GLARE] = _("Freezing Glare"), - [MOVE_FIERY_WRATH] = _("Fiery Wrath"), - [MOVE_THUNDEROUS_KICK] = _("Thunderous Kick"), - [MOVE_GLACIAL_LANCE] = _("Glacial Lance"), - [MOVE_ASTRAL_BARRAGE] = _("Astral Barrage"), - [MOVE_EERIE_SPELL] = _("Eerie Spell"), - [MOVE_DIRE_CLAW] = _("Dire Claw"), - [MOVE_PSYSHIELD_BASH] = _("Psyshield Bash"), - [MOVE_POWER_SHIFT] = _("Power Shift"), - [MOVE_STONE_AXE] = _("Stone Axe"), - [MOVE_SPRINGTIDE_STORM] = _("Springtide Storm"), - [MOVE_MYSTICAL_POWER] = _("Mystical Power"), - [MOVE_RAGING_FURY] = _("Raging Fury"), - [MOVE_WAVE_CRASH] = _("Wave Crash"), - [MOVE_CHLOROBLAST] = _("Chloroblast"), - [MOVE_MOUNTAIN_GALE] = _("Mountain Gale"), - [MOVE_VICTORY_DANCE] = _("Victory Dance"), - [MOVE_HEADLONG_RUSH] = _("Headlong Rush"), - [MOVE_BARB_BARRAGE] = _("Barb Barrage"), - [MOVE_ESPER_WING] = _("Esper Wing"), - [MOVE_BITTER_MALICE] = _("Bitter Malice"), - [MOVE_SHELTER] = _("Shelter"), - [MOVE_TRIPLE_ARROWS] = _("Triple Arrows"), - [MOVE_INFERNAL_PARADE] = _("Infernal Parade"), - [MOVE_CEASELESS_EDGE] = _("Ceaseless Edge"), - [MOVE_BLEAKWIND_STORM] = _("Bleakwind Storm"), - [MOVE_WILDBOLT_STORM] = _("Wildbolt Storm"), - [MOVE_SANDSEAR_STORM] = _("Sandsear Storm"), - [MOVE_LUNAR_BLESSING] = _("Lunar Blessing"), - [MOVE_TAKE_HEART] = _("Take Heart"), - [MOVE_TERA_BLAST] = _("Tera Blast"), - [MOVE_SILK_TRAP] = _("Silk Trap"), - [MOVE_AXE_KICK] = _("Axe Kick"), - [MOVE_LAST_RESPECTS] = _("Last Respects"), - [MOVE_LUMINA_CRASH] = _("Lumina Crash"), - [MOVE_ORDER_UP] = _("Order Up"), - [MOVE_JET_PUNCH] = _("Jet Punch"), - [MOVE_SPICY_EXTRACT] = _("Spicy Extract"), - [MOVE_SPIN_OUT] = _("Spin Out"), - [MOVE_POPULATION_BOMB] = _("Population Bomb"), - [MOVE_ICE_SPINNER] = _("Ice Spinner"), - [MOVE_GLAIVE_RUSH] = _("Glaive Rush"), - [MOVE_REVIVAL_BLESSING] = _("Revival Blessing"), - [MOVE_SALT_CURE] = _("Salt Cure"), - [MOVE_TRIPLE_DIVE] = _("Triple Dive"), - [MOVE_MORTAL_SPIN] = _("Mortal Spin"), - [MOVE_DOODLE] = _("Doodle"), - [MOVE_FILLET_AWAY] = _("Fillet Away"), - [MOVE_KOWTOW_CLEAVE] = _("Kowtow Cleave"), - [MOVE_FLOWER_TRICK] = _("Flower Trick"), - [MOVE_TORCH_SONG] = _("Torch Song"), - [MOVE_AQUA_STEP] = _("Aqua Step"), - [MOVE_RAGING_BULL] = _("Raging Bull"), - [MOVE_MAKE_IT_RAIN] = _("Make It Rain"), - [MOVE_RUINATION] = _("Ruination"), - [MOVE_COLLISION_COURSE] = _("Collision Course"), - [MOVE_ELECTRO_DRIFT] = _("Electro Drift"), - [MOVE_SHED_TAIL] = _("Shed Tail"), - [MOVE_CHILLY_RECEPTION] = _("Chilly Reception"), - [MOVE_TIDY_UP] = _("Tidy Up"), - [MOVE_SNOWSCAPE] = _("Snowscape"), - [MOVE_POUNCE] = _("Pounce"), - [MOVE_TRAILBLAZE] = _("Trailblaze"), - [MOVE_CHILLING_WATER] = _("Chilling Water"), - [MOVE_HYPER_DRILL] = _("Hyper Drill"), - [MOVE_TWIN_BEAM] = _("Twin Beam"), - [MOVE_RAGE_FIST] = _("Rage Fist"), - [MOVE_ARMOR_CANNON] = _("Armor Cannon"), - [MOVE_BITTER_BLADE] = _("Bitter Blade"), - [MOVE_DOUBLE_SHOCK] = _("Double Shock"), - [MOVE_GIGATON_HAMMER] = _("Gigaton Hammer"), - [MOVE_COMEUPPANCE] = _("Comeuppance"), - [MOVE_AQUA_CUTTER] = _("Aqua Cutter"), - [MOVE_BLAZING_TORQUE] = _("Blazing Torque"), - [MOVE_WICKED_TORQUE] = _("Wicked Torque"), - [MOVE_NOXIOUS_TORQUE] = _("Noxious Torque"), - [MOVE_COMBAT_TORQUE] = _("Combat Torque"), - [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), - [MOVE_PSYBLADE] = _("Psyblade"), - [MOVE_HYDRO_STEAM] = _("Hydro Steam"), - [MOVE_BLOOD_MOON] = _("Blood Moon"), - [MOVE_MATCHA_GOTCHA] = _("Matcha Gotcha"), - [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), - [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), - [MOVE_ELECTRO_SHOT] = _("Electro Shot"), - [MOVE_TERA_STARSTORM] = _("Tera Starstorm"), - [MOVE_FICKLE_BEAM] = _("Fickle Beam"), - [MOVE_BURNING_BULWARK] = _("Burning Bulwark"), - [MOVE_THUNDERCLAP] = _("Thunderclap"), - [MOVE_MIGHTY_CLEAVE] = _("Mighty Cleave"), - [MOVE_TACHYON_CUTTER] = _("Tachyon Cutter"), - [MOVE_HARD_PRESS] = _("Hard Press"), - [MOVE_DRAGON_CHEER] = _("Dragon Cheer"), - [MOVE_ALLURING_VOICE] = _("Alluring Voice"), - [MOVE_TEMPER_FLARE] = _("Temper Flare"), - [MOVE_SUPERCELL_SLAM] = _("Supercell Slam"), - [MOVE_PSYCHIC_NOISE] = _("Psychic Noise"), - [MOVE_UPPER_HAND] = _("Upper Hand"), - [MOVE_MALIGNANT_CHAIN] = _("Malignant Chain"), - [MOVE_SYLPH_SONG] = _("Sylph Song"), - // Max Moves - [MOVE_MAX_GUARD] = _("Max Guard"), - [MOVE_MAX_STRIKE] = _("Max Strike"), - [MOVE_MAX_KNUCKLE] = _("Max Knuckle"), - [MOVE_MAX_AIRSTREAM] = _("Max Airstream"), - [MOVE_MAX_OOZE] = _("Max Ooze"), - [MOVE_MAX_QUAKE] = _("Max Quake"), - [MOVE_MAX_ROCKFALL] = _("Max Rockfall"), - [MOVE_MAX_FLUTTERBY] = _("Max Flutterby"), - [MOVE_MAX_PHANTASM] = _("Max Phantasm"), - [MOVE_MAX_STEELSPIKE] = _("Max Steelspike"), - [MOVE_MAX_FLARE] = _("Max Flare"), - [MOVE_MAX_GEYSER] = _("Max Geyser"), - [MOVE_MAX_OVERGROWTH] = _("Max Overgrowth"), - [MOVE_MAX_LIGHTNING] = _("Max Lightning"), - [MOVE_MAX_HAILSTORM] = _("Max Hailstorm"), - [MOVE_MAX_MINDSTORM] = _("Max Mindstorm"), - [MOVE_MAX_WYRMWIND] = _("Max Wyrmwind"), - [MOVE_MAX_DARKNESS] = _("Max Darkness"), - [MOVE_MAX_STARFALL] = _("Max Starfall"), - // Gigantamax Moves - [MOVE_G_MAX_VINE_LASH] = _("Gmax Vine Lash"), - [MOVE_G_MAX_WILDFIRE] = _("Gmax Wildfire"), - [MOVE_G_MAX_CANNONADE] = _("Gmax Cannonade"), - [MOVE_G_MAX_BEFUDDLE] = _("Gmax Befuddle"), - [MOVE_G_MAX_VOLT_CRASH] = _("Gmax Volt Crash"), - [MOVE_G_MAX_GOLD_RUSH] = _("Gmax Gold Rush"), - [MOVE_G_MAX_CHI_STRIKE] = _("Gmax Chi Strike"), - [MOVE_G_MAX_TERROR] = _("Gmax Terror"), - [MOVE_G_MAX_FOAM_BURST] = _("Gmax Foam Burst"), - [MOVE_G_MAX_RESONANCE] = _("Gmax Resonance"), - [MOVE_G_MAX_CUDDLE] = _("Gmax Cuddle"), - [MOVE_G_MAX_REPLENISH] = _("Gmax Replenish"), - [MOVE_G_MAX_MALODOR] = _("Gmax Malodor"), - [MOVE_G_MAX_MELTDOWN] = _("Gmax Meltdown"), - [MOVE_G_MAX_DRUM_SOLO] = _("Gmax Drum Solo"), - [MOVE_G_MAX_FIREBALL] = _("Gmax Fireball"), - [MOVE_G_MAX_HYDROSNIPE] = _("Gmax Hydrosnipe"), - [MOVE_G_MAX_WIND_RAGE] = _("Gmax Wind Rage"), - [MOVE_G_MAX_GRAVITAS] = _("Gmax Gravitas"), - [MOVE_G_MAX_STONESURGE] = _("Gmax Stonesurge"), - [MOVE_G_MAX_VOLCALITH] = _("Gmax Volcalith"), - [MOVE_G_MAX_TARTNESS] = _("Gmax Tartness"), - [MOVE_G_MAX_SWEETNESS] = _("Gmax Sweetness"), - [MOVE_G_MAX_SANDBLAST] = _("Gmax Sandblast"), - [MOVE_G_MAX_STUN_SHOCK] = _("Gmax Stun Shock"), - [MOVE_G_MAX_CENTIFERNO] = _("Gmax Centiferno"), - [MOVE_G_MAX_SMITE] = _("Gmax Smite"), - [MOVE_G_MAX_SNOOZE] = _("Gmax Snooze"), - [MOVE_G_MAX_FINALE] = _("Gmax Finale"), - [MOVE_G_MAX_STEELSURGE] = _("Gmax Steelsurge"), - [MOVE_G_MAX_DEPLETION] = _("Gmax Depletion"), - [MOVE_G_MAX_ONE_BLOW] = _("Gmax One Blow"), - [MOVE_G_MAX_RAPID_FLOW] = _("Gmax Rapid Flow"), -}; -#else -// 12 letters -const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1] = -{ - [MOVE_NONE] = _("-"), - [MOVE_POUND] = _("Pound"), - [MOVE_KARATE_CHOP] = _("Karate Chop"), - [MOVE_DOUBLE_SLAP] = _("Double Slap"), - [MOVE_COMET_PUNCH] = _("Comet Punch"), - [MOVE_MEGA_PUNCH] = _("Mega Punch"), - [MOVE_PAY_DAY] = _("Pay Day"), - [MOVE_FIRE_PUNCH] = _("Fire Punch"), - [MOVE_ICE_PUNCH] = _("Ice Punch"), - [MOVE_THUNDER_PUNCH] = _("ThunderPunch"), - [MOVE_SCRATCH] = _("Scratch"), - [MOVE_VISE_GRIP] = _("Vise Grip"), - [MOVE_GUILLOTINE] = _("Guillotine"), - [MOVE_RAZOR_WIND] = _("Razor Wind"), - [MOVE_SWORDS_DANCE] = _("Swords Dance"), - [MOVE_CUT] = _("Cut"), - [MOVE_GUST] = _("Gust"), - [MOVE_WING_ATTACK] = _("Wing Attack"), - [MOVE_WHIRLWIND] = _("Whirlwind"), - [MOVE_FLY] = _("Fly"), - [MOVE_BIND] = _("Bind"), - [MOVE_SLAM] = _("Slam"), - [MOVE_VINE_WHIP] = _("Vine Whip"), - [MOVE_STOMP] = _("Stomp"), - [MOVE_DOUBLE_KICK] = _("Double Kick"), - [MOVE_MEGA_KICK] = _("Mega Kick"), - [MOVE_JUMP_KICK] = _("Jump Kick"), - [MOVE_ROLLING_KICK] = _("Rolling Kick"), - [MOVE_SAND_ATTACK] = _("Sand Attack"), - [MOVE_HEADBUTT] = _("Headbutt"), - [MOVE_HORN_ATTACK] = _("Horn Attack"), - [MOVE_FURY_ATTACK] = _("Fury Attack"), - [MOVE_HORN_DRILL] = _("Horn Drill"), - [MOVE_TACKLE] = _("Tackle"), - [MOVE_BODY_SLAM] = _("Body Slam"), - [MOVE_WRAP] = _("Wrap"), - [MOVE_TAKE_DOWN] = _("Take Down"), - [MOVE_THRASH] = _("Thrash"), - [MOVE_DOUBLE_EDGE] = _("Double-Edge"), - [MOVE_TAIL_WHIP] = _("Tail Whip"), - [MOVE_POISON_STING] = _("Poison Sting"), - [MOVE_TWINEEDLE] = _("Twineedle"), - [MOVE_PIN_MISSILE] = _("Pin Missile"), - [MOVE_LEER] = _("Leer"), - [MOVE_BITE] = _("Bite"), - [MOVE_GROWL] = _("Growl"), - [MOVE_ROAR] = _("Roar"), - [MOVE_SING] = _("Sing"), - [MOVE_SUPERSONIC] = _("Supersonic"), - [MOVE_SONIC_BOOM] = _("Sonic Boom"), - [MOVE_DISABLE] = _("Disable"), - [MOVE_ACID] = _("Acid"), - [MOVE_EMBER] = _("Ember"), - [MOVE_FLAMETHROWER] = _("Flamethrower"), - [MOVE_MIST] = _("Mist"), - [MOVE_WATER_GUN] = _("Water Gun"), - [MOVE_HYDRO_PUMP] = _("Hydro Pump"), - [MOVE_SURF] = _("Surf"), - [MOVE_ICE_BEAM] = _("Ice Beam"), - [MOVE_BLIZZARD] = _("Blizzard"), - [MOVE_PSYBEAM] = _("Psybeam"), - [MOVE_BUBBLE_BEAM] = _("Bubble Beam"), - [MOVE_AURORA_BEAM] = _("Aurora Beam"), - [MOVE_HYPER_BEAM] = _("Hyper Beam"), - [MOVE_PECK] = _("Peck"), - [MOVE_DRILL_PECK] = _("Drill Peck"), - [MOVE_SUBMISSION] = _("Submission"), - [MOVE_LOW_KICK] = _("Low Kick"), - [MOVE_COUNTER] = _("Counter"), - [MOVE_SEISMIC_TOSS] = _("Seismic Toss"), - [MOVE_STRENGTH] = _("Strength"), - [MOVE_ABSORB] = _("Absorb"), - [MOVE_MEGA_DRAIN] = _("Mega Drain"), - [MOVE_LEECH_SEED] = _("Leech Seed"), - [MOVE_GROWTH] = _("Growth"), - [MOVE_RAZOR_LEAF] = _("Razor Leaf"), - [MOVE_SOLAR_BEAM] = _("Solar Beam"), - [MOVE_POISON_POWDER] = _("PoisonPowder"), - [MOVE_STUN_SPORE] = _("Stun Spore"), - [MOVE_SLEEP_POWDER] = _("Sleep Powder"), - [MOVE_PETAL_DANCE] = _("Petal Dance"), - [MOVE_STRING_SHOT] = _("String Shot"), - [MOVE_DRAGON_RAGE] = _("Dragon Rage"), - [MOVE_FIRE_SPIN] = _("Fire Spin"), - [MOVE_THUNDER_SHOCK] = _("ThunderShock"), - [MOVE_THUNDERBOLT] = _("Thunderbolt"), - [MOVE_THUNDER_WAVE] = _("Thunder Wave"), - [MOVE_THUNDER] = _("Thunder"), - [MOVE_ROCK_THROW] = _("Rock Throw"), - [MOVE_EARTHQUAKE] = _("Earthquake"), - [MOVE_FISSURE] = _("Fissure"), - [MOVE_DIG] = _("Dig"), - [MOVE_TOXIC] = _("Toxic"), - [MOVE_CONFUSION] = _("Confusion"), - [MOVE_PSYCHIC] = _("Psychic"), - [MOVE_HYPNOSIS] = _("Hypnosis"), - [MOVE_MEDITATE] = _("Meditate"), - [MOVE_AGILITY] = _("Agility"), - [MOVE_QUICK_ATTACK] = _("Quick Attack"), - [MOVE_RAGE] = _("Rage"), - [MOVE_TELEPORT] = _("Teleport"), - [MOVE_NIGHT_SHADE] = _("Night Shade"), - [MOVE_MIMIC] = _("Mimic"), - [MOVE_SCREECH] = _("Screech"), - [MOVE_DOUBLE_TEAM] = _("Double Team"), - [MOVE_RECOVER] = _("Recover"), - [MOVE_HARDEN] = _("Harden"), - [MOVE_MINIMIZE] = _("Minimize"), - [MOVE_SMOKESCREEN] = _("Smokescreen"), - [MOVE_CONFUSE_RAY] = _("Confuse Ray"), - [MOVE_WITHDRAW] = _("Withdraw"), - [MOVE_DEFENSE_CURL] = _("Defense Curl"), - [MOVE_BARRIER] = _("Barrier"), - [MOVE_LIGHT_SCREEN] = _("Light Screen"), - [MOVE_HAZE] = _("Haze"), - [MOVE_REFLECT] = _("Reflect"), - [MOVE_FOCUS_ENERGY] = _("Focus Energy"), - [MOVE_BIDE] = _("Bide"), - [MOVE_METRONOME] = _("Metronome"), - [MOVE_MIRROR_MOVE] = _("Mirror Move"), - [MOVE_SELF_DESTRUCT] = _("SelfDestruct"), - [MOVE_EGG_BOMB] = _("Egg Bomb"), - [MOVE_LICK] = _("Lick"), - [MOVE_SMOG] = _("Smog"), - [MOVE_SLUDGE] = _("Sludge"), - [MOVE_BONE_CLUB] = _("Bone Club"), - [MOVE_FIRE_BLAST] = _("Fire Blast"), - [MOVE_WATERFALL] = _("Waterfall"), - [MOVE_CLAMP] = _("Clamp"), - [MOVE_SWIFT] = _("Swift"), - [MOVE_SKULL_BASH] = _("Skull Bash"), - [MOVE_SPIKE_CANNON] = _("Spike Cannon"), - [MOVE_CONSTRICT] = _("Constrict"), - [MOVE_AMNESIA] = _("Amnesia"), - [MOVE_KINESIS] = _("Kinesis"), - [MOVE_SOFT_BOILED] = _("Soft-Boiled"), - [MOVE_HIGH_JUMP_KICK] = _("HighJumpKick"), - [MOVE_GLARE] = _("Glare"), - [MOVE_DREAM_EATER] = _("Dream Eater"), - [MOVE_POISON_GAS] = _("Poison Gas"), - [MOVE_BARRAGE] = _("Barrage"), - [MOVE_LEECH_LIFE] = _("Leech Life"), - [MOVE_LOVELY_KISS] = _("Lovely Kiss"), - [MOVE_SKY_ATTACK] = _("Sky Attack"), - [MOVE_TRANSFORM] = _("Transform"), - [MOVE_BUBBLE] = _("Bubble"), - [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"), - [MOVE_SPORE] = _("Spore"), - [MOVE_FLASH] = _("Flash"), - [MOVE_PSYWAVE] = _("Psywave"), - [MOVE_SPLASH] = _("Splash"), - [MOVE_ACID_ARMOR] = _("Acid Armor"), - [MOVE_CRABHAMMER] = _("Crabhammer"), - [MOVE_EXPLOSION] = _("Explosion"), - [MOVE_FURY_SWIPES] = _("Fury Swipes"), - [MOVE_BONEMERANG] = _("Bonemerang"), - [MOVE_REST] = _("Rest"), - [MOVE_ROCK_SLIDE] = _("Rock Slide"), - [MOVE_HYPER_FANG] = _("Hyper Fang"), - [MOVE_SHARPEN] = _("Sharpen"), - [MOVE_CONVERSION] = _("Conversion"), - [MOVE_TRI_ATTACK] = _("Tri Attack"), - [MOVE_SUPER_FANG] = _("Super Fang"), - [MOVE_SLASH] = _("Slash"), - [MOVE_SUBSTITUTE] = _("Substitute"), - [MOVE_STRUGGLE] = _("Struggle"), - [MOVE_SKETCH] = _("Sketch"), - [MOVE_TRIPLE_KICK] = _("Triple Kick"), - [MOVE_THIEF] = _("Thief"), - [MOVE_SPIDER_WEB] = _("Spider Web"), - [MOVE_MIND_READER] = _("Mind Reader"), - [MOVE_NIGHTMARE] = _("Nightmare"), - [MOVE_FLAME_WHEEL] = _("Flame Wheel"), - [MOVE_SNORE] = _("Snore"), - [MOVE_CURSE] = _("Curse"), - [MOVE_FLAIL] = _("Flail"), - [MOVE_CONVERSION_2] = _("Conversion 2"), - [MOVE_AEROBLAST] = _("Aeroblast"), - [MOVE_COTTON_SPORE] = _("Cotton Spore"), - [MOVE_REVERSAL] = _("Reversal"), - [MOVE_SPITE] = _("Spite"), - [MOVE_POWDER_SNOW] = _("Powder Snow"), - [MOVE_PROTECT] = _("Protect"), - [MOVE_MACH_PUNCH] = _("Mach Punch"), - [MOVE_SCARY_FACE] = _("Scary Face"), - [MOVE_FEINT_ATTACK] = _("Feint Attack"), - [MOVE_SWEET_KISS] = _("Sweet Kiss"), - [MOVE_BELLY_DRUM] = _("Belly Drum"), - [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"), - [MOVE_MUD_SLAP] = _("Mud-Slap"), - [MOVE_OCTAZOOKA] = _("Octazooka"), - [MOVE_SPIKES] = _("Spikes"), - [MOVE_ZAP_CANNON] = _("Zap Cannon"), - [MOVE_FORESIGHT] = _("Foresight"), - [MOVE_DESTINY_BOND] = _("Destiny Bond"), - [MOVE_PERISH_SONG] = _("Perish Song"), - [MOVE_ICY_WIND] = _("Icy Wind"), - [MOVE_DETECT] = _("Detect"), - [MOVE_BONE_RUSH] = _("Bone Rush"), - [MOVE_LOCK_ON] = _("Lock-On"), - [MOVE_OUTRAGE] = _("Outrage"), - [MOVE_SANDSTORM] = _("Sandstorm"), - [MOVE_GIGA_DRAIN] = _("Giga Drain"), - [MOVE_ENDURE] = _("Endure"), - [MOVE_CHARM] = _("Charm"), - [MOVE_ROLLOUT] = _("Rollout"), - [MOVE_FALSE_SWIPE] = _("False Swipe"), - [MOVE_SWAGGER] = _("Swagger"), - [MOVE_MILK_DRINK] = _("Milk Drink"), - [MOVE_SPARK] = _("Spark"), - [MOVE_FURY_CUTTER] = _("Fury Cutter"), - [MOVE_STEEL_WING] = _("Steel Wing"), - [MOVE_MEAN_LOOK] = _("Mean Look"), - [MOVE_ATTRACT] = _("Attract"), - [MOVE_SLEEP_TALK] = _("Sleep Talk"), - [MOVE_HEAL_BELL] = _("Heal Bell"), - [MOVE_RETURN] = _("Return"), - [MOVE_PRESENT] = _("Present"), - [MOVE_FRUSTRATION] = _("Frustration"), - [MOVE_SAFEGUARD] = _("Safeguard"), - [MOVE_PAIN_SPLIT] = _("Pain Split"), - [MOVE_SACRED_FIRE] = _("Sacred Fire"), - [MOVE_MAGNITUDE] = _("Magnitude"), - [MOVE_DYNAMIC_PUNCH] = _("DynamicPunch"), - [MOVE_MEGAHORN] = _("Megahorn"), - [MOVE_DRAGON_BREATH] = _("DragonBreath"), - [MOVE_BATON_PASS] = _("Baton Pass"), - [MOVE_ENCORE] = _("Encore"), - [MOVE_PURSUIT] = _("Pursuit"), - [MOVE_RAPID_SPIN] = _("Rapid Spin"), - [MOVE_SWEET_SCENT] = _("Sweet Scent"), - [MOVE_IRON_TAIL] = _("Iron Tail"), - [MOVE_METAL_CLAW] = _("Metal Claw"), - [MOVE_VITAL_THROW] = _("Vital Throw"), - [MOVE_MORNING_SUN] = _("Morning Sun"), - [MOVE_SYNTHESIS] = _("Synthesis"), - [MOVE_MOONLIGHT] = _("Moonlight"), - [MOVE_HIDDEN_POWER] = _("Hidden Power"), - [MOVE_CROSS_CHOP] = _("Cross Chop"), - [MOVE_TWISTER] = _("Twister"), - [MOVE_RAIN_DANCE] = _("Rain Dance"), - [MOVE_SUNNY_DAY] = _("Sunny Day"), - [MOVE_CRUNCH] = _("Crunch"), - [MOVE_MIRROR_COAT] = _("Mirror Coat"), - [MOVE_PSYCH_UP] = _("Psych Up"), - [MOVE_EXTREME_SPEED] = _("ExtremeSpeed"), - [MOVE_ANCIENT_POWER] = _("AncientPower"), - [MOVE_SHADOW_BALL] = _("Shadow Ball"), - [MOVE_FUTURE_SIGHT] = _("Future Sight"), - [MOVE_ROCK_SMASH] = _("Rock Smash"), - [MOVE_WHIRLPOOL] = _("Whirlpool"), - [MOVE_BEAT_UP] = _("Beat Up"), - [MOVE_FAKE_OUT] = _("Fake Out"), - [MOVE_UPROAR] = _("Uproar"), - [MOVE_STOCKPILE] = _("Stockpile"), - [MOVE_SPIT_UP] = _("Spit Up"), - [MOVE_SWALLOW] = _("Swallow"), - [MOVE_HEAT_WAVE] = _("Heat Wave"), - [MOVE_HAIL] = _("Hail"), - [MOVE_TORMENT] = _("Torment"), - [MOVE_FLATTER] = _("Flatter"), - [MOVE_WILL_O_WISP] = _("Will-o-Wisp"), - [MOVE_MEMENTO] = _("Memento"), - [MOVE_FACADE] = _("Facade"), - [MOVE_FOCUS_PUNCH] = _("Focus Punch"), - [MOVE_SMELLING_SALTS] = _("SmellngSalts"), - [MOVE_FOLLOW_ME] = _("Follow Me"), - [MOVE_NATURE_POWER] = _("Nature Power"), - [MOVE_CHARGE] = _("Charge"), - [MOVE_TAUNT] = _("Taunt"), - [MOVE_HELPING_HAND] = _("Helping Hand"), - [MOVE_TRICK] = _("Trick"), - [MOVE_ROLE_PLAY] = _("Role Play"), - [MOVE_WISH] = _("Wish"), - [MOVE_ASSIST] = _("Assist"), - [MOVE_INGRAIN] = _("Ingrain"), - [MOVE_SUPERPOWER] = _("Superpower"), - [MOVE_MAGIC_COAT] = _("Magic Coat"), - [MOVE_RECYCLE] = _("Recycle"), - [MOVE_REVENGE] = _("Revenge"), - [MOVE_BRICK_BREAK] = _("Brick Break"), - [MOVE_YAWN] = _("Yawn"), - [MOVE_KNOCK_OFF] = _("Knock Off"), - [MOVE_ENDEAVOR] = _("Endeavor"), - [MOVE_ERUPTION] = _("Eruption"), - [MOVE_SKILL_SWAP] = _("Skill Swap"), - [MOVE_IMPRISON] = _("Imprison"), - [MOVE_REFRESH] = _("Refresh"), - [MOVE_GRUDGE] = _("Grudge"), - [MOVE_SNATCH] = _("Snatch"), - [MOVE_SECRET_POWER] = _("Secret Power"), - [MOVE_DIVE] = _("Dive"), - [MOVE_ARM_THRUST] = _("Arm Thrust"), - [MOVE_CAMOUFLAGE] = _("Camouflage"), - [MOVE_TAIL_GLOW] = _("Tail Glow"), - [MOVE_LUSTER_PURGE] = _("Luster Purge"), - [MOVE_MIST_BALL] = _("Mist Ball"), - [MOVE_FEATHER_DANCE] = _("FeatherDance"), - [MOVE_TEETER_DANCE] = _("Teeter Dance"), - [MOVE_BLAZE_KICK] = _("Blaze Kick"), - [MOVE_MUD_SPORT] = _("Mud Sport"), - [MOVE_ICE_BALL] = _("Ice Ball"), - [MOVE_NEEDLE_ARM] = _("Needle Arm"), - [MOVE_SLACK_OFF] = _("Slack Off"), - [MOVE_HYPER_VOICE] = _("Hyper Voice"), - [MOVE_POISON_FANG] = _("Poison Fang"), - [MOVE_CRUSH_CLAW] = _("Crush Claw"), - [MOVE_BLAST_BURN] = _("Blast Burn"), - [MOVE_HYDRO_CANNON] = _("Hydro Cannon"), - [MOVE_METEOR_MASH] = _("Meteor Mash"), - [MOVE_ASTONISH] = _("Astonish"), - [MOVE_WEATHER_BALL] = _("Weather Ball"), - [MOVE_AROMATHERAPY] = _("Aromatherapy"), - [MOVE_FAKE_TEARS] = _("Fake Tears"), - [MOVE_AIR_CUTTER] = _("Air Cutter"), - [MOVE_OVERHEAT] = _("Overheat"), - [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"), - [MOVE_ROCK_TOMB] = _("Rock Tomb"), - [MOVE_SILVER_WIND] = _("Silver Wind"), - [MOVE_METAL_SOUND] = _("Metal Sound"), - [MOVE_GRASS_WHISTLE] = _("GrassWhistle"), - [MOVE_TICKLE] = _("Tickle"), - [MOVE_COSMIC_POWER] = _("Cosmic Power"), - [MOVE_WATER_SPOUT] = _("Water Spout"), - [MOVE_SIGNAL_BEAM] = _("Signal Beam"), - [MOVE_SHADOW_PUNCH] = _("Shadow Punch"), - [MOVE_EXTRASENSORY] = _("Extrasensory"), - [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"), - [MOVE_SAND_TOMB] = _("Sand Tomb"), - [MOVE_SHEER_COLD] = _("Sheer Cold"), - [MOVE_MUDDY_WATER] = _("Muddy Water"), - [MOVE_BULLET_SEED] = _("Bullet Seed"), - [MOVE_AERIAL_ACE] = _("Aerial Ace"), - [MOVE_ICICLE_SPEAR] = _("Icicle Spear"), - [MOVE_IRON_DEFENSE] = _("Iron Defense"), - [MOVE_BLOCK] = _("Block"), - [MOVE_HOWL] = _("Howl"), - [MOVE_DRAGON_CLAW] = _("Dragon Claw"), - [MOVE_FRENZY_PLANT] = _("Frenzy Plant"), - [MOVE_BULK_UP] = _("Bulk Up"), - [MOVE_BOUNCE] = _("Bounce"), - [MOVE_MUD_SHOT] = _("Mud Shot"), - [MOVE_POISON_TAIL] = _("Poison Tail"), - [MOVE_COVET] = _("Covet"), - [MOVE_VOLT_TACKLE] = _("Volt Tackle"), - [MOVE_MAGICAL_LEAF] = _("Magical Leaf"), - [MOVE_WATER_SPORT] = _("Water Sport"), - [MOVE_CALM_MIND] = _("Calm Mind"), - [MOVE_LEAF_BLADE] = _("Leaf Blade"), - [MOVE_DRAGON_DANCE] = _("Dragon Dance"), - [MOVE_ROCK_BLAST] = _("Rock Blast"), - [MOVE_SHOCK_WAVE] = _("Shock Wave"), - [MOVE_WATER_PULSE] = _("Water Pulse"), - [MOVE_DOOM_DESIRE] = _("Doom Desire"), - [MOVE_PSYCHO_BOOST] = _("Psycho Boost"), - [MOVE_ROOST] = _("Roost"), - [MOVE_GRAVITY] = _("Gravity"), - [MOVE_MIRACLE_EYE] = _("Miracle Eye"), - [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"), - [MOVE_HAMMER_ARM] = _("Hammer Arm"), - [MOVE_GYRO_BALL] = _("Gyro Ball"), - [MOVE_HEALING_WISH] = _("Healing Wish"), - [MOVE_BRINE] = _("Brine"), - [MOVE_NATURAL_GIFT] = _("Natural Gift"), - [MOVE_FEINT] = _("Feint"), - [MOVE_PLUCK] = _("Pluck"), - [MOVE_TAILWIND] = _("Tailwind"), - [MOVE_ACUPRESSURE] = _("Acupressure"), - [MOVE_METAL_BURST] = _("Metal Burst"), - [MOVE_U_TURN] = _("U-turn"), - [MOVE_CLOSE_COMBAT] = _("Close Combat"), - [MOVE_PAYBACK] = _("Payback"), - [MOVE_ASSURANCE] = _("Assurance"), - [MOVE_EMBARGO] = _("Embargo"), - [MOVE_FLING] = _("Fling"), - [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"), - [MOVE_TRUMP_CARD] = _("Trump Card"), - [MOVE_HEAL_BLOCK] = _("Heal Block"), - [MOVE_WRING_OUT] = _("Wring Out"), - [MOVE_POWER_TRICK] = _("Power Trick"), - [MOVE_GASTRO_ACID] = _("Gastro Acid"), - [MOVE_LUCKY_CHANT] = _("Lucky Chant"), - [MOVE_ME_FIRST] = _("Me First"), - [MOVE_COPYCAT] = _("Copycat"), - [MOVE_POWER_SWAP] = _("Power Swap"), - [MOVE_GUARD_SWAP] = _("Guard Swap"), - [MOVE_PUNISHMENT] = _("Punishment"), - [MOVE_LAST_RESORT] = _("Last Resort"), - [MOVE_WORRY_SEED] = _("Worry Seed"), - [MOVE_SUCKER_PUNCH] = _("Sucker Punch"), - [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"), - [MOVE_HEART_SWAP] = _("Heart Swap"), - [MOVE_AQUA_RING] = _("Aqua Ring"), - [MOVE_MAGNET_RISE] = _("Magnet Rise"), - [MOVE_FLARE_BLITZ] = _("Flare Blitz"), - [MOVE_FORCE_PALM] = _("Force Palm"), - [MOVE_AURA_SPHERE] = _("Aura Sphere"), - [MOVE_ROCK_POLISH] = _("Rock Polish"), - [MOVE_POISON_JAB] = _("Poison Jab"), - [MOVE_DARK_PULSE] = _("Dark Pulse"), - [MOVE_NIGHT_SLASH] = _("Night Slash"), - [MOVE_AQUA_TAIL] = _("Aqua Tail"), - [MOVE_SEED_BOMB] = _("Seed Bomb"), - [MOVE_AIR_SLASH] = _("Air Slash"), - [MOVE_X_SCISSOR] = _("X-Scissor"), - [MOVE_BUG_BUZZ] = _("Bug Buzz"), - [MOVE_DRAGON_PULSE] = _("Dragon Pulse"), - [MOVE_DRAGON_RUSH] = _("Dragon Rush"), - [MOVE_POWER_GEM] = _("Power Gem"), - [MOVE_DRAIN_PUNCH] = _("Drain Punch"), - [MOVE_VACUUM_WAVE] = _("Vacuum Wave"), - [MOVE_FOCUS_BLAST] = _("Focus Blast"), - [MOVE_ENERGY_BALL] = _("Energy Ball"), - [MOVE_BRAVE_BIRD] = _("Brave Bird"), - [MOVE_EARTH_POWER] = _("Earth Power"), - [MOVE_SWITCHEROO] = _("Switcheroo"), - [MOVE_GIGA_IMPACT] = _("Giga Impact"), - [MOVE_NASTY_PLOT] = _("Nasty Plot"), - [MOVE_BULLET_PUNCH] = _("Bullet Punch"), - [MOVE_AVALANCHE] = _("Avalanche"), - [MOVE_ICE_SHARD] = _("Ice Shard"), - [MOVE_SHADOW_CLAW] = _("Shadow Claw"), - [MOVE_THUNDER_FANG] = _("Thunder Fang"), - [MOVE_ICE_FANG] = _("Ice Fang"), - [MOVE_FIRE_FANG] = _("Fire Fang"), - [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"), - [MOVE_MUD_BOMB] = _("Mud Bomb"), - [MOVE_PSYCHO_CUT] = _("Psycho Cut"), - [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"), - [MOVE_MIRROR_SHOT] = _("Mirror Shot"), - [MOVE_FLASH_CANNON] = _("Flash Cannon"), - [MOVE_ROCK_CLIMB] = _("Rock Climb"), - [MOVE_DEFOG] = _("Defog"), - [MOVE_TRICK_ROOM] = _("Trick Room"), - [MOVE_DRACO_METEOR] = _("Draco Meteor"), - [MOVE_DISCHARGE] = _("Discharge"), - [MOVE_LAVA_PLUME] = _("Lava Plume"), - [MOVE_LEAF_STORM] = _("Leaf Storm"), - [MOVE_POWER_WHIP] = _("Power Whip"), - [MOVE_ROCK_WRECKER] = _("Rock Wrecker"), - [MOVE_CROSS_POISON] = _("Cross Poison"), - [MOVE_GUNK_SHOT] = _("Gunk Shot"), - [MOVE_IRON_HEAD] = _("Iron Head"), - [MOVE_MAGNET_BOMB] = _("Magnet Bomb"), - [MOVE_STONE_EDGE] = _("Stone Edge"), - [MOVE_CAPTIVATE] = _("Captivate"), - [MOVE_STEALTH_ROCK] = _("Stealth Rock"), - [MOVE_GRASS_KNOT] = _("Grass Knot"), - [MOVE_CHATTER] = _("Chatter"), - [MOVE_JUDGMENT] = _("Judgment"), - [MOVE_BUG_BITE] = _("Bug Bite"), - [MOVE_CHARGE_BEAM] = _("Charge Beam"), - [MOVE_WOOD_HAMMER] = _("Wood Hammer"), - [MOVE_AQUA_JET] = _("Aqua Jet"), - [MOVE_ATTACK_ORDER] = _("Attack Order"), - [MOVE_DEFEND_ORDER] = _("Defend Order"), - [MOVE_HEAL_ORDER] = _("Heal Order"), - [MOVE_HEAD_SMASH] = _("Head Smash"), - [MOVE_DOUBLE_HIT] = _("Double Hit"), - [MOVE_ROAR_OF_TIME] = _("Roar of Time"), - [MOVE_SPACIAL_REND] = _("Spacial Rend"), - [MOVE_LUNAR_DANCE] = _("Lunar Dance"), - [MOVE_CRUSH_GRIP] = _("Crush Grip"), - [MOVE_MAGMA_STORM] = _("Magma Storm"), - [MOVE_DARK_VOID] = _("Dark Void"), - [MOVE_SEED_FLARE] = _("Seed Flare"), - [MOVE_OMINOUS_WIND] = _("Ominous Wind"), - [MOVE_SHADOW_FORCE] = _("Shadow Force"), - [MOVE_HONE_CLAWS] = _("Hone Claws"), - [MOVE_WIDE_GUARD] = _("Wide Guard"), - [MOVE_GUARD_SPLIT] = _("Guard Split"), - [MOVE_POWER_SPLIT] = _("Power Split"), - [MOVE_WONDER_ROOM] = _("Wonder Room"), - [MOVE_PSYSHOCK] = _("Psyshock"), - [MOVE_VENOSHOCK] = _("Venoshock"), - [MOVE_AUTOTOMIZE] = _("Autotomize"), - [MOVE_RAGE_POWDER] = _("Rage Powder"), - [MOVE_TELEKINESIS] = _("Telekinesis"), - [MOVE_MAGIC_ROOM] = _("Magic Room"), - [MOVE_SMACK_DOWN] = _("Smack Down"), - [MOVE_STORM_THROW] = _("Storm Throw"), - [MOVE_FLAME_BURST] = _("Flame Burst"), - [MOVE_SLUDGE_WAVE] = _("Sludge Wave"), - [MOVE_QUIVER_DANCE] = _("Quiver Dance"), - [MOVE_HEAVY_SLAM] = _("Heavy Slam"), - [MOVE_SYNCHRONOISE] = _("Synchronoise"), - [MOVE_ELECTRO_BALL] = _("Electro Ball"), - [MOVE_SOAK] = _("Soak"), - [MOVE_FLAME_CHARGE] = _("Flame Charge"), - [MOVE_COIL] = _("Coil"), - [MOVE_LOW_SWEEP] = _("Low Sweep"), - [MOVE_ACID_SPRAY] = _("Acid Spray"), - [MOVE_FOUL_PLAY] = _("Foul Play"), - [MOVE_SIMPLE_BEAM] = _("Simple Beam"), - [MOVE_ENTRAINMENT] = _("Entrainment"), - [MOVE_AFTER_YOU] = _("After You"), - [MOVE_ROUND] = _("Round"), - [MOVE_ECHOED_VOICE] = _("Echoed Voice"), - [MOVE_CHIP_AWAY] = _("Chip Away"), - [MOVE_CLEAR_SMOG] = _("Clear Smog"), - [MOVE_STORED_POWER] = _("Stored Power"), - [MOVE_QUICK_GUARD] = _("Quick Guard"), - [MOVE_ALLY_SWITCH] = _("Ally Switch"), - [MOVE_SCALD] = _("Scald"), - [MOVE_SHELL_SMASH] = _("Shell Smash"), - [MOVE_HEAL_PULSE] = _("Heal Pulse"), - [MOVE_HEX] = _("Hex"), - [MOVE_SKY_DROP] = _("Sky Drop"), - [MOVE_SHIFT_GEAR] = _("Shift Gear"), - [MOVE_CIRCLE_THROW] = _("Circle Throw"), - [MOVE_INCINERATE] = _("Incinerate"), - [MOVE_QUASH] = _("Quash"), - [MOVE_ACROBATICS] = _("Acrobatics"), - [MOVE_REFLECT_TYPE] = _("Reflect Type"), - [MOVE_RETALIATE] = _("Retaliate"), - [MOVE_FINAL_GAMBIT] = _("Final Gambit"), - [MOVE_BESTOW] = _("Bestow"), - [MOVE_INFERNO] = _("Inferno"), - [MOVE_WATER_PLEDGE] = _("Water Pledge"), - [MOVE_FIRE_PLEDGE] = _("Fire Pledge"), - [MOVE_GRASS_PLEDGE] = _("Grass Pledge"), - [MOVE_VOLT_SWITCH] = _("Volt Switch"), - [MOVE_STRUGGLE_BUG] = _("Struggle Bug"), - [MOVE_BULLDOZE] = _("Bulldoze"), - [MOVE_FROST_BREATH] = _("Frost Breath"), - [MOVE_DRAGON_TAIL] = _("Dragon Tail"), - [MOVE_WORK_UP] = _("Work Up"), - [MOVE_ELECTROWEB] = _("Electroweb"), - [MOVE_WILD_CHARGE] = _("Wild Charge"), - [MOVE_DRILL_RUN] = _("Drill Run"), - [MOVE_DUAL_CHOP] = _("Dual Chop"), - [MOVE_HEART_STAMP] = _("Heart Stamp"), - [MOVE_HORN_LEECH] = _("Horn Leech"), - [MOVE_SACRED_SWORD] = _("Sacred Sword"), - [MOVE_RAZOR_SHELL] = _("Razor Shell"), - [MOVE_HEAT_CRASH] = _("Heat Crash"), - [MOVE_LEAF_TORNADO] = _("Leaf Tornado"), - [MOVE_STEAMROLLER] = _("Steamroller"), - [MOVE_COTTON_GUARD] = _("Cotton Guard"), - [MOVE_NIGHT_DAZE] = _("Night Daze"), - [MOVE_PSYSTRIKE] = _("Psystrike"), - [MOVE_TAIL_SLAP] = _("Tail Slap"), - [MOVE_HURRICANE] = _("Hurricane"), - [MOVE_HEAD_CHARGE] = _("Head Charge"), - [MOVE_GEAR_GRIND] = _("Gear Grind"), - [MOVE_SEARING_SHOT] = _("Searing Shot"), - [MOVE_TECHNO_BLAST] = _("Techno Blast"), - [MOVE_RELIC_SONG] = _("Relic Song"), - [MOVE_SECRET_SWORD] = _("Secret Sword"), - [MOVE_GLACIATE] = _("Glaciate"), - [MOVE_BOLT_STRIKE] = _("Bolt Strike"), - [MOVE_BLUE_FLARE] = _("Blue Flare"), - [MOVE_FIERY_DANCE] = _("Fiery Dance"), - [MOVE_FREEZE_SHOCK] = _("Freeze Shock"), - [MOVE_ICE_BURN] = _("Ice Burn"), - [MOVE_SNARL] = _("Snarl"), - [MOVE_ICICLE_CRASH] = _("Icicle Crash"), - [MOVE_V_CREATE] = _("V-create"), - [MOVE_FUSION_FLARE] = _("Fusion Flare"), - [MOVE_FUSION_BOLT] = _("Fusion Bolt"), - [MOVE_FLYING_PRESS] = _("Flying Press"), - [MOVE_MAT_BLOCK] = _("Mat Block"), - [MOVE_BELCH] = _("Belch"), - [MOVE_ROTOTILLER] = _("Rototiller"), - [MOVE_STICKY_WEB] = _("Sticky Web"), - [MOVE_FELL_STINGER] = _("Fell Stinger"), - [MOVE_PHANTOM_FORCE] = _("PhantomForce"), - [MOVE_TRICK_OR_TREAT] = _("TrickOrTreat"), - [MOVE_NOBLE_ROAR] = _("Noble Roar"), - [MOVE_ION_DELUGE] = _("Ion Deluge"), - [MOVE_PARABOLIC_CHARGE] = _("ParabolcChrg"), - [MOVE_FORESTS_CURSE] = _("Forest'sCurs"), - [MOVE_PETAL_BLIZZARD] = _("PetalBlizzrd"), - [MOVE_FREEZE_DRY] = _("Freeze-Dry"), - [MOVE_DISARMING_VOICE] = _("DisrmngVoice"), - [MOVE_PARTING_SHOT] = _("Parting Shot"), - [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"), - [MOVE_DRAINING_KISS] = _("DrainingKiss"), - [MOVE_CRAFTY_SHIELD] = _("CraftyShield"), - [MOVE_FLOWER_SHIELD] = _("FlowerShield"), - [MOVE_GRASSY_TERRAIN] = _("GrssyTerrain"), - [MOVE_MISTY_TERRAIN] = _("MistyTerrain"), - [MOVE_ELECTRIFY] = _("Electrify"), - [MOVE_PLAY_ROUGH] = _("Play Rough"), - [MOVE_FAIRY_WIND] = _("Fairy Wind"), - [MOVE_MOONBLAST] = _("Moonblast"), - [MOVE_BOOMBURST] = _("Boomburst"), - [MOVE_FAIRY_LOCK] = _("Fairy Lock"), - [MOVE_KINGS_SHIELD] = _("King'sShield"), - [MOVE_PLAY_NICE] = _("Play Nice"), - [MOVE_CONFIDE] = _("Confide"), - [MOVE_DIAMOND_STORM] = _("DiamondStorm"), - [MOVE_STEAM_ERUPTION] = _("SteamErption"), - [MOVE_HYPERSPACE_HOLE] = _("HyprspceHole"), - [MOVE_WATER_SHURIKEN] = _("WatrShuriken"), - [MOVE_MYSTICAL_FIRE] = _("MysticalFire"), - [MOVE_SPIKY_SHIELD] = _("Spiky Shield"), - [MOVE_AROMATIC_MIST] = _("AromaticMist"), - [MOVE_EERIE_IMPULSE] = _("EerieImpulse"), - [MOVE_VENOM_DRENCH] = _("Venom Drench"), - [MOVE_POWDER] = _("Powder"), - [MOVE_GEOMANCY] = _("Geomancy"), - [MOVE_MAGNETIC_FLUX] = _("MagneticFlux"), - [MOVE_HAPPY_HOUR] = _("Happy Hour"), - [MOVE_ELECTRIC_TERRAIN] = _("ElctrcTrrain"), - [MOVE_DAZZLING_GLEAM] = _("DazzlngGleam"), - [MOVE_CELEBRATE] = _("Celebrate"), - [MOVE_HOLD_HANDS] = _("Hold Hands"), - [MOVE_BABY_DOLL_EYES] = _("BabyDollEyes"), - [MOVE_NUZZLE] = _("Nuzzle"), - [MOVE_HOLD_BACK] = _("Hold Back"), - [MOVE_INFESTATION] = _("Infestation"), - [MOVE_POWER_UP_PUNCH] = _("PowerUpPunch"), - [MOVE_OBLIVION_WING] = _("OblivionWing"), - [MOVE_THOUSAND_ARROWS] = _("ThousndArrws"), - [MOVE_THOUSAND_WAVES] = _("ThousndWaves"), - [MOVE_LANDS_WRATH] = _("Land's Wrath"), - [MOVE_LIGHT_OF_RUIN] = _("LightOfRuin"), - [MOVE_ORIGIN_PULSE] = _("Origin Pulse"), - [MOVE_PRECIPICE_BLADES] = _("PrcipceBldes"), - [MOVE_DRAGON_ASCENT] = _("DragonAscent"), - [MOVE_HYPERSPACE_FURY] = _("HyprspceFury"), - [MOVE_SHORE_UP] = _("Shore Up"), - [MOVE_FIRST_IMPRESSION] = _("FrstImpressn"), - [MOVE_BANEFUL_BUNKER] = _("BanefulBunkr"), - [MOVE_SPIRIT_SHACKLE] = _("SpiritShackl"), - [MOVE_DARKEST_LARIAT] = _("DarkstLariat"), - [MOVE_SPARKLING_ARIA] = _("SparklngAria"), - [MOVE_ICE_HAMMER] = _("Ice Hammer"), - [MOVE_FLORAL_HEALING] = _("FloralHealng"), - [MOVE_HIGH_HORSEPOWER] = _("HighHorsepwr"), - [MOVE_STRENGTH_SAP] = _("Strength Sap"), - [MOVE_SOLAR_BLADE] = _("Solar Blade"), - [MOVE_LEAFAGE] = _("Leafage"), - [MOVE_SPOTLIGHT] = _("Spotlight"), - [MOVE_TOXIC_THREAD] = _("Toxic Thread"), - [MOVE_LASER_FOCUS] = _("Laser Focus"), - [MOVE_GEAR_UP] = _("Gear Up"), - [MOVE_THROAT_CHOP] = _("Throat Chop"), - [MOVE_POLLEN_PUFF] = _("Pollen Puff"), - [MOVE_ANCHOR_SHOT] = _("Anchor Shot"), - [MOVE_PSYCHIC_TERRAIN] = _("PsychcTrrain"), - [MOVE_LUNGE] = _("Lunge"), - [MOVE_FIRE_LASH] = _("Fire Lash"), - [MOVE_POWER_TRIP] = _("Power Trip"), - [MOVE_BURN_UP] = _("Burn Up"), - [MOVE_SPEED_SWAP] = _("Speed Swap"), - [MOVE_SMART_STRIKE] = _("Smart Strike"), - [MOVE_PURIFY] = _("Purify"), - [MOVE_REVELATION_DANCE] = _("RvlationDnce"), - [MOVE_CORE_ENFORCER] = _("CoreEnforcer"), - [MOVE_TROP_KICK] = _("Trop Kick"), - [MOVE_INSTRUCT] = _("Instruct"), - [MOVE_BEAK_BLAST] = _("Beak Blast"), - [MOVE_CLANGING_SCALES] = _("ClngngScales"), - [MOVE_DRAGON_HAMMER] = _("DragonHammer"), - [MOVE_BRUTAL_SWING] = _("Brutal Swing"), - [MOVE_AURORA_VEIL] = _("Aurora Veil"), - [MOVE_SHELL_TRAP] = _("Shell Trap"), - [MOVE_FLEUR_CANNON] = _("Fleur Cannon"), - [MOVE_PSYCHIC_FANGS] = _("PsychicFangs"), - [MOVE_STOMPING_TANTRUM] = _("StmpngTantrm"), - [MOVE_SHADOW_BONE] = _("Shadow Bone"), - [MOVE_ACCELEROCK] = _("Accelerock"), - [MOVE_LIQUIDATION] = _("Liquidation"), - [MOVE_PRISMATIC_LASER] = _("PrsmaticLasr"), - [MOVE_SPECTRAL_THIEF] = _("SpectrlThief"), - [MOVE_SUNSTEEL_STRIKE] = _("SnsteelStrke"), - [MOVE_MOONGEIST_BEAM] = _("MoongestBeam"), - [MOVE_TEARFUL_LOOK] = _("Tearful Look"), - [MOVE_ZING_ZAP] = _("Zing Zap"), - [MOVE_NATURES_MADNESS] = _("Natur'sMadns"), - [MOVE_MULTI_ATTACK] = _("Multi-Attack"), - [MOVE_MIND_BLOWN] = _("Mind Blown"), - [MOVE_PLASMA_FISTS] = _("Plasma Fists"), - [MOVE_PHOTON_GEYSER] = _("PhotonGeyser"), - [MOVE_ZIPPY_ZAP] = _("Zippy Zap"), - [MOVE_SPLISHY_SPLASH] = _("SplishySplsh"), - [MOVE_FLOATY_FALL] = _("Floaty Fall"), - [MOVE_PIKA_PAPOW] = _("Pika Papow"), - [MOVE_BOUNCY_BUBBLE] = _("BouncyBubble"), - [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"), - [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"), - [MOVE_GLITZY_GLOW] = _("Glitzy Glow"), - [MOVE_BADDY_BAD] = _("Baddy Bad"), - [MOVE_SAPPY_SEED] = _("Sappy Seed"), - [MOVE_FREEZY_FROST] = _("Freezy Frost"), - [MOVE_SPARKLY_SWIRL] = _("SparklySwirl"), - [MOVE_VEEVEE_VOLLEY] = _("VeeveeVolley"), - [MOVE_DOUBLE_IRON_BASH] = _("DublIronBash"), - [MOVE_DYNAMAX_CANNON] = _("DynamxCannon"), - [MOVE_SNIPE_SHOT] = _("Snipe Shot"), - [MOVE_JAW_LOCK] = _("Jaw Lock"), - [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"), - [MOVE_NO_RETREAT] = _("No Retreat"), - [MOVE_TAR_SHOT] = _("Tar Shot"), - [MOVE_MAGIC_POWDER] = _("Magic Powder"), - [MOVE_DRAGON_DARTS] = _("Dragon Darts"), - [MOVE_TEATIME] = _("Teatime"), - [MOVE_OCTOLOCK] = _("Octolock"), - [MOVE_BOLT_BEAK] = _("Bolt Beak"), - [MOVE_FISHIOUS_REND] = _("FishiousRend"), - [MOVE_COURT_CHANGE] = _("Court Change"), - [MOVE_CLANGOROUS_SOUL] = _("ClngrousSoul"), - [MOVE_BODY_PRESS] = _("Body Press"), - [MOVE_DECORATE] = _("Decorate"), - [MOVE_DRUM_BEATING] = _("Drum Beating"), - [MOVE_SNAP_TRAP] = _("Snap Trap"), - [MOVE_PYRO_BALL] = _("Pyro Ball"), - [MOVE_BEHEMOTH_BLADE] = _("BehemthBlade"), - [MOVE_BEHEMOTH_BASH] = _("BehemothBash"), - [MOVE_AURA_WHEEL] = _("Aura Wheel"), - [MOVE_BREAKING_SWIPE] = _("BreakngSwipe"), - [MOVE_BRANCH_POKE] = _("Branch Poke"), - [MOVE_OVERDRIVE] = _("Overdrive"), - [MOVE_APPLE_ACID] = _("Apple Acid"), - [MOVE_GRAV_APPLE] = _("Grav Apple"), - [MOVE_SPIRIT_BREAK] = _("Spirit Break"), - [MOVE_STRANGE_STEAM] = _("StrangeSteam"), - [MOVE_LIFE_DEW] = _("Life Dew"), - [MOVE_OBSTRUCT] = _("Obstruct"), - [MOVE_FALSE_SURRENDER] = _("FalsSurrendr"), - [MOVE_METEOR_ASSAULT] = _("MeteorAssalt"), - [MOVE_ETERNABEAM] = _("Eternabeam"), - [MOVE_STEEL_BEAM] = _("Steel Beam"), - [MOVE_EXPANDING_FORCE] = _("ExpandngForc"), - [MOVE_STEEL_ROLLER] = _("Steel Roller"), - [MOVE_SCALE_SHOT] = _("Scale Shot"), - [MOVE_METEOR_BEAM] = _("Meteor Beam"), - [MOVE_SHELL_SIDE_ARM] = _("ShellSideArm"), - [MOVE_MISTY_EXPLOSION] = _("MstyExplsion"), - [MOVE_GRASSY_GLIDE] = _("Grassy Glide"), - [MOVE_RISING_VOLTAGE] = _("RisngVoltage"), - [MOVE_TERRAIN_PULSE] = _("TerrainPulse"), - [MOVE_SKITTER_SMACK] = _("SkitterSmack"), - [MOVE_BURNING_JEALOUSY] = _("BrningJelosy"), - [MOVE_LASH_OUT] = _("Lash Out"), - [MOVE_POLTERGEIST] = _("Poltergeist"), - [MOVE_CORROSIVE_GAS] = _("CorrosiveGas"), - [MOVE_COACHING] = _("Coaching"), - [MOVE_FLIP_TURN] = _("Flip Turn"), - [MOVE_TRIPLE_AXEL] = _("Triple Axel"), - [MOVE_DUAL_WINGBEAT] = _("DualWingbeat"), - [MOVE_SCORCHING_SANDS] = _("ScorchngSnds"), - [MOVE_JUNGLE_HEALING] = _("JungleHealng"), - [MOVE_WICKED_BLOW] = _("Wicked Blow"), - [MOVE_SURGING_STRIKES] = _("SurgngStrkes"), - [MOVE_THUNDER_CAGE] = _("Thunder Cage"), - [MOVE_DRAGON_ENERGY] = _("DragonEnergy"), - [MOVE_FREEZING_GLARE] = _("FreezngGlare"), - [MOVE_FIERY_WRATH] = _("Fiery Wrath"), - [MOVE_THUNDEROUS_KICK] = _("ThnderusKick"), - [MOVE_GLACIAL_LANCE] = _("GlacialLance"), - [MOVE_ASTRAL_BARRAGE] = _("AstrlBarrage"), - [MOVE_EERIE_SPELL] = _("Eerie Spell"), - [MOVE_DIRE_CLAW] = _("Dire Claw"), - [MOVE_PSYSHIELD_BASH] = _("PsyshieldBsh"), - [MOVE_POWER_SHIFT] = _("Power Shift"), - [MOVE_STONE_AXE] = _("Stone Axe"), - [MOVE_SPRINGTIDE_STORM] = _("SprngtdeStrm"), - [MOVE_MYSTICAL_POWER] = _("MystcalPower"), - [MOVE_RAGING_FURY] = _("Raging Fury"), - [MOVE_WAVE_CRASH] = _("Wave Crash"), - [MOVE_CHLOROBLAST] = _("Chloroblast"), - [MOVE_MOUNTAIN_GALE] = _("MountainGale"), - [MOVE_VICTORY_DANCE] = _("VictoryDance"), - [MOVE_HEADLONG_RUSH] = _("HeadlongRush"), - [MOVE_BARB_BARRAGE] = _("Barb Barrage"), - [MOVE_ESPER_WING] = _("Esper Wing"), - [MOVE_BITTER_MALICE] = _("BitterMalice"), - [MOVE_SHELTER] = _("Shelter"), - [MOVE_TRIPLE_ARROWS] = _("TripleArrows"), - [MOVE_INFERNAL_PARADE] = _("InfrnlParade"), - [MOVE_CEASELESS_EDGE] = _("CeaslessEdge"), - [MOVE_BLEAKWIND_STORM] = _("BlekwndStorm"), - [MOVE_WILDBOLT_STORM] = _("WildbltStorm"), - [MOVE_SANDSEAR_STORM] = _("SndsearStorm"), - [MOVE_LUNAR_BLESSING] = _("LunarBlessng"), - [MOVE_TAKE_HEART] = _("Take Heart"), - [MOVE_TERA_BLAST] = _("Tera Blast"), - [MOVE_SILK_TRAP] = _("Silk Trap"), - [MOVE_AXE_KICK] = _("Axe Kick"), - [MOVE_LAST_RESPECTS] = _("LastRespects"), - [MOVE_LUMINA_CRASH] = _("Lumina Crash"), - [MOVE_ORDER_UP] = _("Order Up"), - [MOVE_JET_PUNCH] = _("Jet Punch"), - [MOVE_SPICY_EXTRACT] = _("SpicyExtract"), - [MOVE_SPIN_OUT] = _("Spin Out"), - [MOVE_POPULATION_BOMB] = _("PoplatinBomb"), - [MOVE_ICE_SPINNER] = _("Ice Spinner"), - [MOVE_GLAIVE_RUSH] = _("Glaive Rush"), - [MOVE_REVIVAL_BLESSING] = _("RevivlBlesng"), - [MOVE_SALT_CURE] = _("Salt Cure"), - [MOVE_TRIPLE_DIVE] = _("Triple Dive"), - [MOVE_MORTAL_SPIN] = _("Mortal Spin"), - [MOVE_DOODLE] = _("Doodle"), - [MOVE_FILLET_AWAY] = _("Fillet Away"), - [MOVE_KOWTOW_CLEAVE] = _("KowtowCleave"), - [MOVE_FLOWER_TRICK] = _("Flower Trick"), - [MOVE_TORCH_SONG] = _("Torch Song"), - [MOVE_AQUA_STEP] = _("Aqua Step"), - [MOVE_RAGING_BULL] = _("Raging Bull"), - [MOVE_MAKE_IT_RAIN] = _("Make It Rain"), - [MOVE_RUINATION] = _("Ruination"), - [MOVE_COLLISION_COURSE] = _("ColisinCours"), - [MOVE_ELECTRO_DRIFT] = _("ElectroDrift"), - [MOVE_SHED_TAIL] = _("Shed Tail"), - [MOVE_CHILLY_RECEPTION] = _("ChilReceptin"), - [MOVE_TIDY_UP] = _("Tidy Up"), - [MOVE_SNOWSCAPE] = _("Snowscape"), - [MOVE_POUNCE] = _("Pounce"), - [MOVE_TRAILBLAZE] = _("Trailblaze"), - [MOVE_CHILLING_WATER] = _("ChillingWatr"), - [MOVE_HYPER_DRILL] = _("Hyper Drill"), - [MOVE_TWIN_BEAM] = _("Twin Beam"), - [MOVE_RAGE_FIST] = _("Rage Fist"), - [MOVE_ARMOR_CANNON] = _("Armor Cannon"), - [MOVE_BITTER_BLADE] = _("Bitter Blade"), - [MOVE_DOUBLE_SHOCK] = _("Double Shock"), - [MOVE_GIGATON_HAMMER] = _("GigatonHammr"), - [MOVE_COMEUPPANCE] = _("Comeuppance"), - [MOVE_AQUA_CUTTER] = _("Aqua Cutter"), - [MOVE_BLAZING_TORQUE] = _("BlazngTorque"), - [MOVE_WICKED_TORQUE] = _("WickedTorque"), - [MOVE_NOXIOUS_TORQUE] = _("NoxiusTorque"), - [MOVE_COMBAT_TORQUE] = _("CombatTorque"), - [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), - [MOVE_PSYBLADE] = _("Psyblade"), - [MOVE_HYDRO_STEAM] = _("Hydro Steam"), - [MOVE_BLOOD_MOON] = _("Blood Moon"), - [MOVE_MATCHA_GOTCHA] = _("MatchaGotcha"), - [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), - [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), - [MOVE_ELECTRO_SHOT] = _("Electro Shot"), - [MOVE_TERA_STARSTORM] = _("TeraStarstrm"), - [MOVE_FICKLE_BEAM] = _("Fickle Beam"), - [MOVE_BURNING_BULWARK] = _("BurnngBulwrk"), - [MOVE_THUNDERCLAP] = _("Thunderclap"), - [MOVE_MIGHTY_CLEAVE] = _("MightyCleave"), - [MOVE_TACHYON_CUTTER] = _("TachyonCuttr"), - [MOVE_HARD_PRESS] = _("Hard Press"), - [MOVE_DRAGON_CHEER] = _("Dragon Cheer"), - [MOVE_ALLURING_VOICE] = _("AllurngVoice"), - [MOVE_TEMPER_FLARE] = _("Temper Flare"), - [MOVE_SUPERCELL_SLAM] = _("SuprcellSlam"), - [MOVE_PSYCHIC_NOISE] = _("PsychicNoise"), - [MOVE_UPPER_HAND] = _("Upper Hand"), - [MOVE_MALIGNANT_CHAIN] = _("MalignntChan"), - [MOVE_SLYPH_SONG] = _("Slyph Song"), - // Max Moves - [MOVE_MAX_GUARD] = _("M-Guard"), - [MOVE_MAX_STRIKE] = _("M-Strike"), - [MOVE_MAX_KNUCKLE] = _("M-Knuckle"), - [MOVE_MAX_AIRSTREAM] = _("M-Airstream"), - [MOVE_MAX_OOZE] = _("M-Ooze"), - [MOVE_MAX_QUAKE] = _("M-Quake"), - [MOVE_MAX_ROCKFALL] = _("M-Rockfall"), - [MOVE_MAX_FLUTTERBY] = _("M-Flutterby"), - [MOVE_MAX_PHANTASM] = _("M-Phantasm"), - [MOVE_MAX_STEELSPIKE] = _("M-Steelspike"), - [MOVE_MAX_FLARE] = _("M-Flare"), - [MOVE_MAX_GEYSER] = _("M-Geyser"), - [MOVE_MAX_OVERGROWTH] = _("M-Overgrowth"), - [MOVE_MAX_LIGHTNING] = _("M-Lightning"), - [MOVE_MAX_HAILSTORM] = _("M-Hailstorm"), - [MOVE_MAX_MINDSTORM] = _("M-Mindstorm"), - [MOVE_MAX_WYRMWIND] = _("M-Wyrmwind"), - [MOVE_MAX_DARKNESS] = _("M-Darkness"), - [MOVE_MAX_STARFALL] = _("M-Starfall"), -// Gigantamax Moves - [MOVE_G_MAX_VINE_LASH] = _("G-Vine Lash"), - [MOVE_G_MAX_WILDFIRE] = _("G-Wildfire"), - [MOVE_G_MAX_CANNONADE] = _("G-Cannonade"), - [MOVE_G_MAX_BEFUDDLE] = _("G-Befuddle"), - [MOVE_G_MAX_VOLT_CRASH] = _("G-VoltCrash"), - [MOVE_G_MAX_GOLD_RUSH] = _("G-Gold Rush"), - [MOVE_G_MAX_CHI_STRIKE] = _("G-ChiStrike"), - [MOVE_G_MAX_TERROR] = _("G-Terror"), - [MOVE_G_MAX_FOAM_BURST] = _("G-FoamBurst"), - [MOVE_G_MAX_RESONANCE] = _("G-Resonance"), - [MOVE_G_MAX_CUDDLE] = _("G-Cuddle"), - [MOVE_G_MAX_REPLENISH] = _("G-Replenish"), - [MOVE_G_MAX_MALODOR] = _("G-Malodor"), - [MOVE_G_MAX_MELTDOWN] = _("G-Meltdown"), - [MOVE_G_MAX_DRUM_SOLO] = _("G-Drum Solo"), - [MOVE_G_MAX_FIREBALL] = _("G-Fireball"), - [MOVE_G_MAX_HYDROSNIPE] = _("G-Hydrsnipe"), - [MOVE_G_MAX_WIND_RAGE] = _("G-Wind Rage"), - [MOVE_G_MAX_GRAVITAS] = _("G-Gravitas"), - [MOVE_G_MAX_STONESURGE] = _("G-Stonesrge"), - [MOVE_G_MAX_VOLCALITH] = _("G-Volcalith"), - [MOVE_G_MAX_TARTNESS] = _("G-Tartness"), - [MOVE_G_MAX_SWEETNESS] = _("G-Sweetness"), - [MOVE_G_MAX_SANDBLAST] = _("G-Sandblast"), - [MOVE_G_MAX_STUN_SHOCK] = _("G-StunShock"), - [MOVE_G_MAX_CENTIFERNO] = _("G-Centiferno"), - [MOVE_G_MAX_SMITE] = _("G-Smite"), - [MOVE_G_MAX_SNOOZE] = _("G-Snooze"), - [MOVE_G_MAX_FINALE] = _("G-Finale"), - [MOVE_G_MAX_STEELSURGE] = _("G-Steelsrge"), - [MOVE_G_MAX_DEPLETION] = _("G-Depletion"), - [MOVE_G_MAX_ONE_BLOW] = _("G-One Blow"), - [MOVE_G_MAX_RAPID_FLOW] = _("G-Rapid Flow"), -}; -#endif - -static const u8 sText_Breakneck_Blitz[] = _("Breakneck Blitz"); -static const u8 sText_All_Out_Pummeling[] = _("All Out Pummeling"); -static const u8 sText_Supersonic_Skystrike[] = _("Supersonic Skystrike"); -static const u8 sText_Acid_Downpour[] = _("Acid Downpour"); -static const u8 sText_Tectonic_Rage[] = _("Tectonic Rage"); -static const u8 sText_Continental_Crush[] = _("Continental Crush"); -static const u8 sText_Savage_Spin_Out[] = _("Savage Spin Out"); -static const u8 sText_Never_Ending_Nightmare[] = _("Never Ending Nightmare"); -static const u8 sText_Corkscrew_Crash[] = _("Corkscrew Crash"); -static const u8 sText_Inferno_Overdrive[] = _("Inferno Overdrive"); -static const u8 sText_Hydro_Vortex[] = _("Hydro Vortex"); -static const u8 sText_Bloom_Doom[] = _("Bloom Doom"); -static const u8 sText_Gigavolt_Havoc[] = _("Gigavolt Havoc"); -static const u8 sText_Shattered_Psyche[] = _("Shattered Psyche"); -static const u8 sText_Subzero_Slammer[] = _("Subzero Slammer"); -static const u8 sText_Devastating_Drake[] = _("Devastating Drake"); -static const u8 sText_Black_Hole_Eclipse[] = _("Black Hole Eclipse"); -static const u8 sText_Twinkle_Tackle[] = _("Twinkle Tackle"); -static const u8 sText_Catastropika[] = _("Catastropika"); -static const u8 sText_10000000_Volt_Thunderbolt[] = _("10000000 Volt Thunderbolt"); -static const u8 sText_Stoked_Sparksurfer[] = _("Stoked Sparksurfer"); -static const u8 sText_Extreme_Evoboost[] = _("Extreme Evoboost"); -static const u8 sText_Pulverizing_Pancake[] = _("Pulverizing Pancake"); -static const u8 sText_Genesis_Supernova[] = _("Genesis Supernova"); -static const u8 sText_Sinister_Arrow_Raid[] = _("Sinister Arrow Raid"); -static const u8 sText_Malicious_Moonsault[] = _("Malicious Moonsault"); -static const u8 sText_Oceanic_Operetta[] = _("Oceanic Operetta"); -static const u8 sText_Splintered_Stormshards[] = _("Splintered Stormshards"); -static const u8 sText_Lets_Snuggle_Forever[] = _("Let's Snuggle Forever"); -static const u8 sText_Clangorous_Soulblaze[] = _("Clangorous Soulblaze"); -static const u8 sText_Guardian_Of_Alola[] = _("Guardian Of Alola"); -static const u8 sText_Searing_Sunraze_Smash[] = _("Searing Sunraze Smash"); -static const u8 sText_Menacing_Moonraze_Maelstrom[] = _("Menacing Moonraze Maelstrom"); -static const u8 sText_Light_That_Burns_The_Sky[] = _("Light That Burns The Sky"); -static const u8 sText_Soul_Stealing_7_Star_Strike[] = _("Soul Stealing 7 Star Strike"); - -const u8 *const gZMoveNames[] = -{ - [MOVE_BREAKNECK_BLITZ - FIRST_Z_MOVE] = sText_Breakneck_Blitz, - [MOVE_ALL_OUT_PUMMELING - FIRST_Z_MOVE] = sText_All_Out_Pummeling, - [MOVE_SUPERSONIC_SKYSTRIKE - FIRST_Z_MOVE] = sText_Supersonic_Skystrike, - [MOVE_ACID_DOWNPOUR - FIRST_Z_MOVE] = sText_Acid_Downpour, - [MOVE_TECTONIC_RAGE - FIRST_Z_MOVE] = sText_Tectonic_Rage, - [MOVE_CONTINENTAL_CRUSH - FIRST_Z_MOVE] = sText_Continental_Crush, - [MOVE_SAVAGE_SPIN_OUT - FIRST_Z_MOVE] = sText_Savage_Spin_Out, - [MOVE_NEVER_ENDING_NIGHTMARE - FIRST_Z_MOVE] = sText_Never_Ending_Nightmare, - [MOVE_CORKSCREW_CRASH - FIRST_Z_MOVE] = sText_Corkscrew_Crash, - [MOVE_INFERNO_OVERDRIVE - FIRST_Z_MOVE] = sText_Inferno_Overdrive, - [MOVE_HYDRO_VORTEX - FIRST_Z_MOVE] = sText_Hydro_Vortex, - [MOVE_BLOOM_DOOM - FIRST_Z_MOVE] = sText_Bloom_Doom, - [MOVE_GIGAVOLT_HAVOC - FIRST_Z_MOVE] = sText_Gigavolt_Havoc, - [MOVE_SHATTERED_PSYCHE - FIRST_Z_MOVE] = sText_Shattered_Psyche, - [MOVE_SUBZERO_SLAMMER - FIRST_Z_MOVE] = sText_Subzero_Slammer, - [MOVE_DEVASTATING_DRAKE - FIRST_Z_MOVE] = sText_Devastating_Drake, - [MOVE_BLACK_HOLE_ECLIPSE - FIRST_Z_MOVE] = sText_Black_Hole_Eclipse, - [MOVE_TWINKLE_TACKLE - FIRST_Z_MOVE] = sText_Twinkle_Tackle, - [MOVE_CATASTROPIKA - FIRST_Z_MOVE] = sText_Catastropika, - [MOVE_10000000_VOLT_THUNDERBOLT - FIRST_Z_MOVE] = sText_10000000_Volt_Thunderbolt, - [MOVE_STOKED_SPARKSURFER - FIRST_Z_MOVE] = sText_Stoked_Sparksurfer, - [MOVE_EXTREME_EVOBOOST - FIRST_Z_MOVE] = sText_Extreme_Evoboost, - [MOVE_PULVERIZING_PANCAKE - FIRST_Z_MOVE] = sText_Pulverizing_Pancake, - [MOVE_GENESIS_SUPERNOVA - FIRST_Z_MOVE] = sText_Genesis_Supernova, - [MOVE_SINISTER_ARROW_RAID - FIRST_Z_MOVE] = sText_Sinister_Arrow_Raid, - [MOVE_MALICIOUS_MOONSAULT - FIRST_Z_MOVE] = sText_Malicious_Moonsault, - [MOVE_OCEANIC_OPERETTA - FIRST_Z_MOVE] = sText_Oceanic_Operetta, - [MOVE_SPLINTERED_STORMSHARDS - FIRST_Z_MOVE] = sText_Splintered_Stormshards, - [MOVE_LETS_SNUGGLE_FOREVER - FIRST_Z_MOVE] = sText_Lets_Snuggle_Forever, - [MOVE_CLANGOROUS_SOULBLAZE - FIRST_Z_MOVE] = sText_Clangorous_Soulblaze, - [MOVE_GUARDIAN_OF_ALOLA - FIRST_Z_MOVE] = sText_Guardian_Of_Alola, - [MOVE_SEARING_SUNRAZE_SMASH - FIRST_Z_MOVE] = sText_Searing_Sunraze_Smash, - [MOVE_MENACING_MOONRAZE_MAELSTROM - FIRST_Z_MOVE] = sText_Menacing_Moonraze_Maelstrom, - [MOVE_LIGHT_THAT_BURNS_THE_SKY - FIRST_Z_MOVE] = sText_Light_That_Burns_The_Sky, - [MOVE_SOUL_STEALING_7_STAR_STRIKE - FIRST_Z_MOVE] = sText_Soul_Stealing_7_Star_Strike, -}; - -// Max Moves -static const u8 sText_Max_Guard[] = _("Max Guard"); -static const u8 sText_Max_Strike[] = _("Max Strike"); -static const u8 sText_Max_Knuckle[] = _("Max Knuckle"); -static const u8 sText_Max_Airstream[] = _("Max Airstream"); -static const u8 sText_Max_Ooze[] = _("Max Ooze"); -static const u8 sText_Max_Quake[] = _("Max Quake"); -static const u8 sText_Max_Rockfall[] = _("Max Rockfall"); -static const u8 sText_Max_Flutterby[] = _("Max Flutterby"); -static const u8 sText_Max_Phantasm[] = _("Max Phantasm"); -static const u8 sText_Max_Steelspike[] = _("Max Steelspike"); -static const u8 sText_Max_Flare[] = _("Max Flare"); -static const u8 sText_Max_Geyser[] = _("Max Geyser"); -static const u8 sText_Max_Overgrowth[] = _("Max Overgrowth"); -static const u8 sText_Max_Lightning[] = _("Max Lightning"); -static const u8 sText_Max_Hailstorm[] = _("Max Hailstorm"); -static const u8 sText_Max_Mindstorm[] = _("Max Mindstorm"); -static const u8 sText_Max_Wyrmwind[] = _("Max Wyrmwind"); -static const u8 sText_Max_Darkness[] = _("Max Darkness"); -static const u8 sText_Max_Starfall[] = _("Max Starfall"); -static const u8 sText_G_Max_Vine_Lash[] = _("G-Max Vine Lash"); -static const u8 sText_G_Max_Wildfire[] = _("G-Max Wildfire"); -static const u8 sText_G_Max_Cannonade[] = _("G-Max Cannonade"); -static const u8 sText_G_Max_Befuddle[] = _("G-Max Befuddle"); -static const u8 sText_G_Max_Volt_Crash[] = _("G-Max Volt Crash"); -static const u8 sText_G_Max_Gold_Rush[] = _("G-Max Gold Rush"); -static const u8 sText_G_Max_Chi_Strike[] = _("G-Max Chi Strike"); -static const u8 sText_G_Max_Terror[] = _("G-Max Terror"); -static const u8 sText_G_Max_Foam_Burst[] = _("G-Max Foam Burst"); -static const u8 sText_G_Max_Resonance[] = _("G-Max Resonance"); -static const u8 sText_G_Max_Cuddle[] = _("G-Max Cuddle"); -static const u8 sText_G_Max_Replenish[] = _("G-Max Replenish"); -static const u8 sText_G_Max_Malodor[] = _("G-Max Malodor"); -static const u8 sText_G_Max_Meltdown[] = _("G-Max Meltdown"); -static const u8 sText_G_Max_Drum_Solo[] = _("G-Max Drum Solo"); -static const u8 sText_G_Max_Fireball[] = _("G-Max Fireball"); -static const u8 sText_G_Max_Hydrosnipe[] = _("G-Max Hydrosnipe"); -static const u8 sText_G_Max_Wind_Rage[] = _("G-Max Wind Rage"); -static const u8 sText_G_Max_Gravitas[] = _("G-Max Gravitas"); -static const u8 sText_G_Max_Stonesurge[] = _("G-Max Stonesurge"); -static const u8 sText_G_Max_Volcalith[] = _("G-Max Volcalith"); -static const u8 sText_G_Max_Tartness[] = _("G-Max Tartness"); -static const u8 sText_G_Max_Sweetness[] = _("G-Max Sweetness"); -static const u8 sText_G_Max_Sandblast[] = _("G-Max Sandblast"); -static const u8 sText_G_Max_Stun_Shock[] = _("G-Max Stun Shock"); -static const u8 sText_G_Max_Centiferno[] = _("G-Max Centiferno"); -static const u8 sText_G_Max_Smite[] = _("G-Max Smite"); -static const u8 sText_G_Max_Snooze[] = _("G-Max Snooze"); -static const u8 sText_G_Max_Finale[] = _("G-Max Finale"); -static const u8 sText_G_Max_Steelsurge[] = _("G-Max Steelsurge"); -static const u8 sText_G_Max_Depletion[] = _("G-Max Depletion"); -static const u8 sText_G_Max_One_Blow[] = _("G-Max One Blow"); -static const u8 sText_G_Max_Rapid_Flow[] = _("G-Max Rapid Flow"); - -const u8 *const gMaxMoveNames[] = -{ - [MOVE_MAX_GUARD - FIRST_MAX_MOVE] = sText_Max_Guard, - [MOVE_MAX_STRIKE - FIRST_MAX_MOVE] = sText_Max_Strike, - [MOVE_MAX_KNUCKLE - FIRST_MAX_MOVE] = sText_Max_Knuckle, - [MOVE_MAX_AIRSTREAM - FIRST_MAX_MOVE] = sText_Max_Airstream, - [MOVE_MAX_OOZE - FIRST_MAX_MOVE] = sText_Max_Ooze, - [MOVE_MAX_QUAKE - FIRST_MAX_MOVE] = sText_Max_Quake, - [MOVE_MAX_ROCKFALL - FIRST_MAX_MOVE] = sText_Max_Rockfall, - [MOVE_MAX_FLUTTERBY - FIRST_MAX_MOVE] = sText_Max_Flutterby, - [MOVE_MAX_PHANTASM - FIRST_MAX_MOVE] = sText_Max_Phantasm, - [MOVE_MAX_STEELSPIKE - FIRST_MAX_MOVE] = sText_Max_Steelspike, - [MOVE_MAX_FLARE - FIRST_MAX_MOVE] = sText_Max_Flare, - [MOVE_MAX_GEYSER - FIRST_MAX_MOVE] = sText_Max_Geyser, - [MOVE_MAX_OVERGROWTH - FIRST_MAX_MOVE] = sText_Max_Overgrowth, - [MOVE_MAX_LIGHTNING - FIRST_MAX_MOVE] = sText_Max_Lightning, - [MOVE_MAX_HAILSTORM - FIRST_MAX_MOVE] = sText_Max_Hailstorm, - [MOVE_MAX_MINDSTORM - FIRST_MAX_MOVE] = sText_Max_Mindstorm, - [MOVE_MAX_WYRMWIND - FIRST_MAX_MOVE] = sText_Max_Wyrmwind, - [MOVE_MAX_DARKNESS - FIRST_MAX_MOVE] = sText_Max_Darkness, - [MOVE_MAX_STARFALL - FIRST_MAX_MOVE] = sText_Max_Starfall, - [MOVE_G_MAX_VINE_LASH - FIRST_MAX_MOVE] = sText_G_Max_Vine_Lash, - [MOVE_G_MAX_WILDFIRE - FIRST_MAX_MOVE] = sText_G_Max_Wildfire, - [MOVE_G_MAX_CANNONADE - FIRST_MAX_MOVE] = sText_G_Max_Cannonade, - [MOVE_G_MAX_BEFUDDLE - FIRST_MAX_MOVE] = sText_G_Max_Befuddle, - [MOVE_G_MAX_VOLT_CRASH - FIRST_MAX_MOVE] = sText_G_Max_Volt_Crash, - [MOVE_G_MAX_GOLD_RUSH - FIRST_MAX_MOVE] = sText_G_Max_Gold_Rush, - [MOVE_G_MAX_CHI_STRIKE - FIRST_MAX_MOVE] = sText_G_Max_Chi_Strike, - [MOVE_G_MAX_TERROR - FIRST_MAX_MOVE] = sText_G_Max_Terror, - [MOVE_G_MAX_FOAM_BURST - FIRST_MAX_MOVE] = sText_G_Max_Foam_Burst, - [MOVE_G_MAX_RESONANCE - FIRST_MAX_MOVE] = sText_G_Max_Resonance, - [MOVE_G_MAX_CUDDLE - FIRST_MAX_MOVE] = sText_G_Max_Cuddle, - [MOVE_G_MAX_REPLENISH - FIRST_MAX_MOVE] = sText_G_Max_Replenish, - [MOVE_G_MAX_MALODOR - FIRST_MAX_MOVE] = sText_G_Max_Malodor, - [MOVE_G_MAX_MELTDOWN - FIRST_MAX_MOVE] = sText_G_Max_Meltdown, - [MOVE_G_MAX_DRUM_SOLO - FIRST_MAX_MOVE] = sText_G_Max_Drum_Solo, - [MOVE_G_MAX_FIREBALL - FIRST_MAX_MOVE] = sText_G_Max_Fireball, - [MOVE_G_MAX_HYDROSNIPE - FIRST_MAX_MOVE] = sText_G_Max_Hydrosnipe, - [MOVE_G_MAX_WIND_RAGE - FIRST_MAX_MOVE] = sText_G_Max_Wind_Rage, - [MOVE_G_MAX_GRAVITAS - FIRST_MAX_MOVE] = sText_G_Max_Gravitas, - [MOVE_G_MAX_STONESURGE - FIRST_MAX_MOVE] = sText_G_Max_Stonesurge, - [MOVE_G_MAX_VOLCALITH - FIRST_MAX_MOVE] = sText_G_Max_Volcalith, - [MOVE_G_MAX_TARTNESS - FIRST_MAX_MOVE] = sText_G_Max_Tartness, - [MOVE_G_MAX_SWEETNESS - FIRST_MAX_MOVE] = sText_G_Max_Sweetness, - [MOVE_G_MAX_SANDBLAST - FIRST_MAX_MOVE] = sText_G_Max_Sandblast, - [MOVE_G_MAX_STUN_SHOCK - FIRST_MAX_MOVE] = sText_G_Max_Stun_Shock, - [MOVE_G_MAX_CENTIFERNO - FIRST_MAX_MOVE] = sText_G_Max_Centiferno, - [MOVE_G_MAX_SMITE - FIRST_MAX_MOVE] = sText_G_Max_Smite, - [MOVE_G_MAX_SNOOZE - FIRST_MAX_MOVE] = sText_G_Max_Snooze, - [MOVE_G_MAX_FINALE - FIRST_MAX_MOVE] = sText_G_Max_Finale, - [MOVE_G_MAX_STEELSURGE - FIRST_MAX_MOVE] = sText_G_Max_Steelsurge, - [MOVE_G_MAX_DEPLETION - FIRST_MAX_MOVE] = sText_G_Max_Depletion, - [MOVE_G_MAX_ONE_BLOW - FIRST_MAX_MOVE] = sText_G_Max_One_Blow, - [MOVE_G_MAX_RAPID_FLOW - FIRST_MAX_MOVE] = sText_G_Max_Rapid_Flow, -}; diff --git a/src/daycare.c b/src/daycare.c index 537311f99dd6..d007de359ded 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -34,6 +34,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y); static u8 ModifyBreedingScoreForOvalCharm(u8 score); static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves); +static u16 GetEggSpecies(u16 species); // RAM buffers used to assist with BuildEggMoveset() EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; @@ -86,6 +87,24 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = .cursorKind = CURSOR_BLACK_ARROW }; +static const struct { + u16 currSpecies; + u16 item; + u16 babySpecies; +} sIncenseBabyTable[] = +{ + // Regular offspring, Item, Incense Offspring + { SPECIES_WOBBUFFET, ITEM_LAX_INCENSE, SPECIES_WYNAUT }, + { SPECIES_MARILL, ITEM_SEA_INCENSE, SPECIES_AZURILL }, + { SPECIES_SNORLAX, ITEM_FULL_INCENSE, SPECIES_MUNCHLAX }, + { SPECIES_CHANSEY, ITEM_LUCK_INCENSE, SPECIES_HAPPINY }, + { SPECIES_MR_MIME, ITEM_ODD_INCENSE, SPECIES_MIME_JR }, + { SPECIES_CHIMECHO, ITEM_PURE_INCENSE, SPECIES_CHINGLING }, + { SPECIES_SUDOWOODO, ITEM_ROCK_INCENSE, SPECIES_BONSLY }, + { SPECIES_ROSELIA, ITEM_ROSE_INCENSE, SPECIES_BUDEW }, + { SPECIES_MANTINE, ITEM_WAVE_INCENSE, SPECIES_MANTYKE }, +}; + static const u8 *const sCompatibilityMessages[] = { gDaycareText_GetAlongVeryWell, @@ -174,26 +193,42 @@ static void TransferEggMoves(void) { u32 i, j, k, l; u16 numEggMoves; - struct Pokemon mon; for (i = 0; i < DAYCARE_MON_COUNT; i++) { + u16 moveLearnerSpecies = GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SPECIES); + u16 eggSpecies = GetEggSpecies(moveLearnerSpecies); + if (!GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SANITY_HAS_SPECIES)) continue; - BoxMonToMon(&gSaveBlock1Ptr->daycare.mons[i].mon, &mon); + // Prevent non-baby species from learning incense baby egg moves + if (P_INCENSE_BREEDING < GEN_9 && eggSpecies != moveLearnerSpecies) + { + for (j = 0; j < ARRAY_COUNT(sIncenseBabyTable); j++) + { + if (sIncenseBabyTable[j].babySpecies == eggSpecies) + { + eggSpecies = sIncenseBabyTable[j].currSpecies; + break; + } + } + } + ClearHatchedEggMoves(); - numEggMoves = GetEggMoves(&mon, sHatchedEggEggMoves); + numEggMoves = GetEggMovesBySpecies(eggSpecies, sHatchedEggEggMoves); for (j = 0; j < numEggMoves; j++) { // Go through other Daycare mons for (k = 0; k < DAYCARE_MON_COUNT; k++) { + u16 moveTeacherSpecies = GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_SPECIES); + if (k == i || !GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_SANITY_HAS_SPECIES)) continue; // Check if you can inherit from them - if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_SPECIES) != GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SPECIES) + if (GET_BASE_SPECIES_ID(moveTeacherSpecies) != GET_BASE_SPECIES_ID(moveLearnerSpecies) && (P_EGG_MOVE_TRANSFER < GEN_9 || GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_HELD_ITEM) != ITEM_MIRROR_HERB) ) continue; @@ -697,7 +732,7 @@ static void InheritPokeball(struct Pokemon *egg, struct BoxPokemon *father, stru if (P_BALL_INHERITING >= GEN_7) { - if (fatherSpecies == motherSpecies) + if (GET_BASE_SPECIES_ID(fatherSpecies) == GET_BASE_SPECIES_ID(motherSpecies)) inheritBall = (Random() % 2 == 0 ? motherBall : fatherBall); else if (motherSpecies != SPECIES_DITTO) inheritBall = motherBall; @@ -770,7 +805,7 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) return numEggMoves; } -u8 GetEggMovesSpecies(u16 species, u16 *eggMoves) +u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves) { u16 eggMoveIdx; u16 numEggMoves; @@ -954,26 +989,6 @@ void RejectEggFromDayCare(void) RemoveEggFromDayCare(&gSaveBlock1Ptr->daycare); } - -static const struct { - u16 currSpecies; - u16 item; - u16 babySpecies; -} sIncenseBabyTable[] = -{ - // Regular offspring, Item, Incense Offspring - { SPECIES_WOBBUFFET, ITEM_LAX_INCENSE, SPECIES_WYNAUT }, - { SPECIES_MARILL, ITEM_SEA_INCENSE, SPECIES_AZURILL }, - { SPECIES_SNORLAX, ITEM_FULL_INCENSE, SPECIES_MUNCHLAX }, - { SPECIES_CHANSEY, ITEM_LUCK_INCENSE, SPECIES_HAPPINY }, - { SPECIES_MR_MIME, ITEM_ODD_INCENSE, SPECIES_MIME_JR }, - { SPECIES_CHIMECHO, ITEM_PURE_INCENSE, SPECIES_CHINGLING }, - { SPECIES_SUDOWOODO, ITEM_ROCK_INCENSE, SPECIES_BONSLY }, - { SPECIES_ROSELIA, ITEM_ROSE_INCENSE, SPECIES_BUDEW }, - { SPECIES_MANTINE, ITEM_WAVE_INCENSE, SPECIES_MANTYKE }, -}; - -#if P_INCENSE_BREEDING < GEN_9 static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare) { u32 i; @@ -990,7 +1005,6 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare } } } -#endif static const struct { u16 offspring; @@ -1024,7 +1038,8 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent { u16 i; u16 species[DAYCARE_MON_COUNT]; - u16 eggSpecies; + u16 eggSpecies, parentSpecies; + bool8 hasMotherEverstone, hasFatherEverstone; for (i = 0; i < DAYCARE_MON_COUNT; i++) { @@ -1041,7 +1056,18 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent } } - eggSpecies = GetEggSpecies(species[parentSlots[0]]); + hasMotherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE; + hasFatherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE; + + if (hasMotherEverstone) + parentSpecies = species[parentSlots[0]]; + else if (hasFatherEverstone && GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[0]])) == GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[1]]))) + parentSpecies = species[parentSlots[1]]; + else + parentSpecies = GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[0]])); + + eggSpecies = GetEggSpecies(parentSpecies); + if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) eggSpecies = SPECIES_NIDORAN_M; else if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) @@ -1052,12 +1078,14 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent eggSpecies = SPECIES_ILLUMISE; else if (eggSpecies == SPECIES_MANAPHY) eggSpecies = SPECIES_PHIONE; - else if (eggSpecies == SPECIES_SINISTEA_ANTIQUE) - eggSpecies = SPECIES_SINISTEA_PHONY; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_ROTOM) eggSpecies = SPECIES_ROTOM; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_FURFROU) eggSpecies = SPECIES_FURFROU; + else if (eggSpecies == SPECIES_SINISTEA_ANTIQUE) + eggSpecies = SPECIES_SINISTEA_PHONY; + else if (eggSpecies == SPECIES_POLTCHAGEIST_ARTISAN) + eggSpecies = SPECIES_POLTCHAGEIST_COUNTERFEIT; // To avoid single-stage Totem Pokémon to breed more of themselves. else if (eggSpecies == SPECIES_MIMIKYU_TOTEM_DISGUISED) eggSpecies = SPECIES_MIMIKYU_DISGUISED; @@ -1083,9 +1111,8 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) bool8 isEgg; species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); -#if P_INCENSE_BREEDING < GEN_9 - AlterEggSpeciesWithIncenseItem(&species, daycare); -#endif + if (P_INCENSE_BREEDING < GEN_9) + AlterEggSpeciesWithIncenseItem(&species, daycare); SetInitialEggData(&egg, species, daycare); InheritIVs(&egg, daycare); InheritPokeball(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 588563d5d200..40f2d29278e7 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -313,7 +313,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter; + u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter, ball; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -333,6 +333,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); isModernFatefulEncounter = GetMonData(egg, MON_DATA_MODERN_FATEFUL_ENCOUNTER); + ball = GetMonData(egg, MON_DATA_POKEBALL); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -351,6 +352,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); SetMonData(temp, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(temp, MON_DATA_POKEBALL, &ball); *egg = *temp; } diff --git a/src/item_use.c b/src/item_use.c index 824b30852429..502612a18407 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1041,14 +1041,10 @@ static void ItemUseOnFieldCB_EscapeRope(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); if (I_KEY_ESCAPE_ROPE < GEN_8) - { - RemoveUsedItem(); - } - else - { - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - } + RemoveBagItem(gSpecialVar_ItemId, 1); + + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, gStringVar4, Task_UseDigEscapeRopeOnField); } @@ -1422,7 +1418,9 @@ void Task_UseHoneyOnField(u8 taskId) static void ItemUseOnFieldCB_Honey(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); - RemoveUsedItem(); + RemoveBagItem(gSpecialVar_ItemId, 1); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, gStringVar4, Task_UseHoneyOnField); } diff --git a/src/level_caps.c b/src/level_caps.c index c3aac3a25921..61b4c8dc8f30 100644 --- a/src/level_caps.c +++ b/src/level_caps.c @@ -9,15 +9,15 @@ u32 GetCurrentLevelCap(void) { static const u32 sLevelCapFlagMap[][2] = { - {FLAG_BADGE01_GET, 16}, //roxanne - {FLAG_BADGE02_GET, 26}, //brawly - {FLAG_BADGE03_GET, 36}, //watson - {FLAG_BADGE04_GET, 43}, //flannery - {FLAG_BADGE05_GET, 55}, //norman - {FLAG_BADGE06_GET, 60}, - {FLAG_BADGE07_GET, 70}, - {FLAG_BADGE08_GET, 85}, - {FLAG_IS_CHAMPION, 100}, + {FLAG_BADGE01_GET, 15}, + {FLAG_BADGE02_GET, 19}, + {FLAG_BADGE03_GET, 24}, + {FLAG_BADGE04_GET, 29}, + {FLAG_BADGE05_GET, 31}, + {FLAG_BADGE06_GET, 33}, + {FLAG_BADGE07_GET, 42}, + {FLAG_BADGE08_GET, 46}, + {FLAG_IS_CHAMPION, 58}, }; u32 i; diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 3bea813de00b..9afd928e82c5 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -5138,7 +5138,7 @@ static bool8 CalculateMoves(void) species = GetFormSpeciesId(species, 0); //Calculate amount of Egg and LevelUp moves - numEggMoves = GetEggMovesSpecies(species, statsMovesEgg); + numEggMoves = GetEggMovesBySpecies(species, statsMovesEgg); numLevelUpMoves = GetLevelUpMovesBySpecies(species, statsMovesLevelUp); //Egg moves diff --git a/src/pokemon.c b/src/pokemon.c index daa02077ce14..240dab132286 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3394,6 +3394,7 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) dst->type1 = gSpeciesInfo[dst->species].types[0]; dst->type2 = gSpeciesInfo[dst->species].types[1]; dst->type3 = TYPE_MYSTERY; + dst->isShiny = IsMonShiny(src); dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum); GetMonData(src, MON_DATA_NICKNAME, nickname); StringCopy_Nickname(dst->nickname, nickname); @@ -4176,6 +4177,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s switch (mode) { case EVO_MODE_NORMAL: + case EVO_MODE_BATTLE_ONLY: level = GetMonData(mon, MON_DATA_LEVEL, 0); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); @@ -4264,11 +4266,11 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s targetSpecies = evolutions[i].targetSpecies; break; case EVO_LEVEL_FAMILY_OF_FOUR: - if (evolutions[i].param <= level && (personality % 100) != 0) + if (mode == EVO_MODE_BATTLE_ONLY && evolutions[i].param <= level && (personality % 100) != 0) targetSpecies = evolutions[i].targetSpecies; break; case EVO_LEVEL_FAMILY_OF_THREE: - if (evolutions[i].param <= level && (personality % 100) == 0) + if (mode == EVO_MODE_BATTLE_ONLY && evolutions[i].param <= level && (personality % 100) == 0) targetSpecies = evolutions[i].targetSpecies; break; case EVO_BEAUTY: @@ -6196,20 +6198,24 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 case FORM_CHANGE_ITEM_USE: if (arg == formChanges[i].param1) { + bool32 pass = TRUE; switch (formChanges[i].param2) { case DAY: - if (GetTimeOfDay() != TIME_NIGHT) - targetSpecies = formChanges[i].targetSpecies; - break; - case NIGHT: if (GetTimeOfDay() == TIME_NIGHT) - targetSpecies = formChanges[i].targetSpecies; + pass = FALSE; break; - default: - targetSpecies = formChanges[i].targetSpecies; + case NIGHT: + if (GetTimeOfDay() != TIME_NIGHT) + pass = FALSE; break; } + + if (formChanges[i].param3 != STATUS1_NONE && GetBoxMonData(boxMon, MON_DATA_STATUS, NULL) & formChanges[i].param3) + pass = FALSE; + + if (pass) + targetSpecies = formChanges[i].targetSpecies; } break; case FORM_CHANGE_ITEM_USE_MULTICHOICE: diff --git a/src/roamer.c b/src/roamer.c index e9dc72a99383..daa70dcb9494 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -90,7 +90,8 @@ static void CreateInitialRoamerMon(bool16 createLatios) CreateMon(&gEnemyParty[0], ROAMER->species, 40, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); ROAMER->level = 40; - ROAMER->status = 0; + ROAMER->statusA = 0; + ROAMER->statusB = 0; ROAMER->active = TRUE; ROAMER->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS); ROAMER->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY); @@ -193,18 +194,11 @@ bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) void CreateRoamerMonInstance(void) { - u32 status; + u32 status = ROAMER->statusA + (ROAMER->statusB << 8); struct Pokemon *mon = &gEnemyParty[0]; ZeroEnemyPartyMons(); CreateMonWithIVsPersonality(mon, ROAMER->species, ROAMER->level, ROAMER->ivs, ROAMER->personality); -// The roamer's status field is u8, but SetMonData expects status to be u32, so will set the roamer's status -// using the status field and the following 3 bytes (cool, beauty, and cute). -#ifdef BUGFIX - status = ROAMER->status; SetMonData(mon, MON_DATA_STATUS, &status); -#else - SetMonData(mon, MON_DATA_STATUS, &ROAMER->status); -#endif SetMonData(mon, MON_DATA_HP, &ROAMER->hp); SetMonData(mon, MON_DATA_COOL, &ROAMER->cool); SetMonData(mon, MON_DATA_BEAUTY, &ROAMER->beauty); @@ -228,8 +222,11 @@ bool8 TryStartRoamerEncounter(void) void UpdateRoamerHPStatus(struct Pokemon *mon) { + u32 status = GetMonData(mon, MON_DATA_STATUS); + ROAMER->hp = GetMonData(mon, MON_DATA_HP); - ROAMER->status = GetMonData(mon, MON_DATA_STATUS); + ROAMER->statusA = status; + ROAMER->statusB = status >> 8; RoamerMoveToOtherLocationSet(); } diff --git a/src/shop.c b/src/shop.c index 88d66a43e9fd..f72736c89f3d 100644 --- a/src/shop.c +++ b/src/shop.c @@ -628,7 +628,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) gStringVar1, ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT), STR_CONV_MODE_LEFT_ALIGN, - 5); + 6); } else { @@ -636,7 +636,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) gStringVar1, gDecorations[itemId].price, STR_CONV_MODE_LEFT_ALIGN, - 5); + 6); } if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 63b6c6f9d533..30dcb74ce0c4 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -577,6 +577,14 @@ u16 GetRematchTrainerIdVSSeeker(u16 trainerId) return gRematchTable[tableId].trainerIds[rematchTrainerIdx]; } +bool32 IsVsSeekerEnabled(void) +{ + if (I_VS_SEEKER_CHARGING == 0) + return FALSE; + + return (CheckBagHasItem(ITEM_VS_SEEKER, 1)); +} + static bool8 ObjectEventIdIsSane(u8 objectEventId) { struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c new file mode 100644 index 000000000000..0b13b9df4bcf --- /dev/null +++ b/test/battle/ability/anger_point.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Anger Point raises Attack stage to maximum after receiving a critical hit") +{ + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); + + GIVEN { + PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); } + OPPONENT(SPECIES_SNORUNT); + } WHEN { + TURN { MOVE(opponent, MOVE_FROST_BREATH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); + MESSAGE("A critical hit!"); + ABILITY_POPUP(player, ABILITY_ANGER_POINT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Primeape's Anger Point maxed its Attack!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack stage") +{ + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); + ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); + + GIVEN { + PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); } + OPPONENT(SPECIES_SNORUNT) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_BELLY_DRUM); MOVE(opponent, MOVE_FROST_BREATH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Primeape cut its own HP and maximized ATTACK!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); + MESSAGE("A critical hit!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_ANGER_POINT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Primeape's Anger Point maxed its Attack!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit") +{ + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); + + GIVEN { + PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); } + OPPONENT(SPECIES_SNORUNT) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_FROST_BREATH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); + MESSAGE("Primeape made a SUBSTITUTE!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); + MESSAGE("A critical hit!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_ANGER_POINT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Primeape's Anger Point maxed its Attack!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/ability/anger_shell.c b/test/battle/ability/anger_shell.c index 3591c4077f26..f0d11d757649 100644 --- a/test/battle/ability/anger_shell.c +++ b/test/battle/ability/anger_shell.c @@ -6,6 +6,7 @@ SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% o bool32 activates = FALSE; u16 maxHp = 500, hp = 0; + PARAMETRIZE { hp = 250; activates = FALSE; } PARAMETRIZE { hp = 249; activates = FALSE; } PARAMETRIZE { hp = 100; activates = FALSE; } PARAMETRIZE { hp = 50; activates = FALSE; } @@ -41,7 +42,7 @@ SINGLE_BATTLE_TEST("Anger Shell lowers Def/Sp.Def by 1 and raises Atk/Sp.Atk/Spd u16 maxHp = 500; GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } + PLAYER(SPECIES_KLAWF) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } @@ -49,15 +50,15 @@ SINGLE_BATTLE_TEST("Anger Shell lowers Def/Sp.Def by 1 and raises Atk/Sp.Atk/Spd ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_ANGER_SHELL); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Defense fell!"); + MESSAGE("Klawf's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Sp. Def fell!"); + MESSAGE("Klawf's Sp. Def fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Attack rose!"); + MESSAGE("Klawf's Attack rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Sp. Atk rose!"); + MESSAGE("Klawf's Sp. Atk rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Speed rose!"); + MESSAGE("Klawf's Speed rose!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE - 1); @@ -73,13 +74,12 @@ SINGLE_BATTLE_TEST("Anger Shell activates after all hits from a multi-hit move") u16 maxHp = 500; GIVEN { ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT); - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } + PLAYER(SPECIES_KLAWF) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } OPPONENT(SPECIES_SHELLDER) { Ability(ABILITY_SKILL_LINK); } // Always hits 5 times. } WHEN { TURN { MOVE(opponent, MOVE_DOUBLE_SLAP); } } SCENE { - for (j = 0; j < 4; j++) - { + for (j = 0; j < 4; j++) { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SLAP, opponent); NOT ABILITY_POPUP(player, ABILITY_ANGER_SHELL); } diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index 2fc4f9cdc1f7..f7c9c267dceb 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -46,9 +46,9 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Chi-Yu!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_BEADS_OF_RUIN); MESSAGE("Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ability/berserk.c b/test/battle/ability/berserk.c new file mode 100644 index 000000000000..3bf269e1eef1 --- /dev/null +++ b/test/battle/ability/berserk.c @@ -0,0 +1,75 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Berserk activates only if the target had more than 50% of its hp") +{ + bool32 activates = FALSE; + u16 maxHp = 500, hp = 0; + + PARAMETRIZE { hp = 250; activates = FALSE; } + PARAMETRIZE { hp = 249; activates = FALSE; } + PARAMETRIZE { hp = 100; activates = FALSE; } + PARAMETRIZE { hp = 50; activates = FALSE; } + PARAMETRIZE { hp = 251; activates = TRUE; } + PARAMETRIZE { hp = 254; activates = TRUE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_DRAMPA) { Ability(ABILITY_BERSERK); MaxHP(maxHp); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + if (activates) { + ABILITY_POPUP(player, ABILITY_BERSERK); + } else { + NOT ABILITY_POPUP(player, ABILITY_BERSERK); + } + } THEN { + if (activates) { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } + } +} + +SINGLE_BATTLE_TEST("Berserk raises Sp.Atk by 1") +{ + u16 maxHp = 500; + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_DRAMPA) { Ability(ABILITY_BERSERK); MaxHP(maxHp); HP(maxHp / 2 + 1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ABILITY_POPUP(player, ABILITY_BERSERK); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Drampa's Sp. Atk rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Berserk activates after all hits from a multi-hit move") +{ + u32 j; + u16 maxHp = 500; + GIVEN { + ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_DRAMPA) { Ability(ABILITY_BERSERK); MaxHP(maxHp); HP(maxHp / 2 + 1); } + OPPONENT(SPECIES_SHELLDER) { Ability(ABILITY_SKILL_LINK); } // Always hits 5 times. + } WHEN { + TURN { MOVE(opponent, MOVE_DOUBLE_SLAP); } + } SCENE { + for (j = 0; j < 4; j++) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SLAP, opponent); + NOT ABILITY_POPUP(player, ABILITY_BERSERK); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SLAP, opponent); + ABILITY_POPUP(player, ABILITY_BERSERK); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } +} diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 7f167c9fe7a2..5dd4eff5db2d 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -1,15 +1,19 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Clear Body prevents intimidate") +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimidate") { s16 turnOneHit; s16 turnTwoHit; + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }; + OPPONENT(species) { Ability(ability); }; } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } @@ -17,22 +21,394 @@ SINGLE_BATTLE_TEST("Clear Body prevents intimidate") } SCENE { HP_BAR(player, captureDamage: &turnOneHit); ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); } } -TO_DO_BATTLE_TEST("Clear Body prevents stat stage reduction from moves"); // Growl, Leer, Confide, Fake Tears, Scary Face, Sweet Scent, Sand Attack (Attack, Defense, Sp. Attack, Sp. Defense, Speed, Evasion, Accuracy -TO_DO_BATTLE_TEST("Clear Body prevents Sticky Web"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent stat stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("Clear Body doesn't prevent Speed reduction from Iron Ball"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent Speed reduction from paralysis"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent receiving negative stat changes from Baton Pass"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("Clear Body doesn't prevent Spectral Thief from resetting positive stat changes"); -TO_DO_BATTLE_TEST("Clear Body is ignored by Mold Breaker"); +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent stat stage reduction from moves") +{ + u16 move = MOVE_NONE; + u32 j, species = SPECIES_NONE, ability = ABILITY_NONE; + static const u16 statReductionMoves[] = { + MOVE_GROWL, + MOVE_LEER, + MOVE_CONFIDE, + MOVE_FAKE_TEARS, + MOVE_SCARY_FACE, + MOVE_SWEET_SCENT, + MOVE_SAND_ATTACK, + }; + for (j = 0; j < ARRAY_COUNT(statReductionMoves); j++) + { + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; move = statReductionMoves[j]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; move = statReductionMoves[j]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; move = statReductionMoves[j]; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_FAKE_TEARS].effect == EFFECT_SPECIAL_DEFENSE_DOWN_2); + ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); + ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); + ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent Sticky Web effect on switchin") +{ + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(SPECIES_WOBBUFFET) + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + TURN { SWITCH(opponent, 1); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + else + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent stat stage reduction from moves used by the user") +{ + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + GIVEN { + ASSUME(MoveHasAdditionalEffectSelf(MOVE_SUPERPOWER, MOVE_EFFECT_ATK_DEF_DOWN) == TRUE); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUPERPOWER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); + NONE_OF { + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + } + } +} + +SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body and White Smoke, but not Full Metal Body") +{ + u32 j, k, species = SPECIES_NONE, ability = ABILITY_NONE; + u16 breakerAbility = ABILITY_NONE; + u16 move = ABILITY_NONE; + static const u16 breakerAbilities[] = { + ABILITY_MOLD_BREAKER, + ABILITY_TERAVOLT, + ABILITY_TURBOBLAZE, + }; + static const u16 statReductionMoves[] = { + MOVE_GROWL, + MOVE_LEER, + MOVE_CONFIDE, + MOVE_FAKE_TEARS, + MOVE_SCARY_FACE, + MOVE_SWEET_SCENT, + MOVE_SAND_ATTACK, + }; + + for (j = 0; j < ARRAY_COUNT(statReductionMoves); j++) + { + for (k = 0; k < ARRAY_COUNT(breakerAbilities); k++) + { + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; move = statReductionMoves[j]; breakerAbility = breakerAbilities[k]; } + } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_FAKE_TEARS].effect == EFFECT_SPECIAL_DEFENSE_DOWN_2); + ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); + ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); + ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); + PLAYER(SPECIES_WOBBUFFET) { Ability(breakerAbility); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (ability == ABILITY_FULL_METAL_BODY){ // Full Metal Body can't be ignored by breaker abilities + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + } + else{ + ANIMATION(ANIM_TYPE_MOVE, move, player); + NONE_OF { + ABILITY_POPUP(opponent, ability); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Speed reduction from Iron Ball") +{ + u32 j, species = SPECIES_NONE, ability = ABILITY_NONE; + u16 heldItem = ITEM_NONE; + static const u16 heldItems[] = { + ITEM_NONE, + ITEM_IRON_BALL, + }; + for (j = 0; j < ARRAY_COUNT(heldItems); j++) + { + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; heldItem = heldItems[j]; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; heldItem = heldItems[j]; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; heldItem = heldItems[j]; } + } + GIVEN { + ASSUME(gItemsInfo[ITEM_IRON_BALL].holdEffect == HOLD_EFFECT_IRON_BALL); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(species) { Speed(6); Ability(ability); Item(heldItem); } + } WHEN { + TURN { } + } SCENE { + NOT ABILITY_POPUP(opponent, ability); + if (heldItem == ITEM_IRON_BALL) { + MESSAGE("Wobbuffet used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + } else { + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Wobbuffet used Celebrate!"); + } + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Speed reduction from paralysis") +{ + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(species) { Speed(6); Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDER_WAVE); } + TURN { MOVE(player, MOVE_THUNDER_WAVE); } + } SCENE { + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Wobbuffet used Thunder Wave!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); + NOT ABILITY_POPUP(opponent, ability); + MESSAGE("Wobbuffet used Thunder Wave!"); + ONE_OF { + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Foe Metang is paralyzed! It can't move!"); + MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("Foe Solgaleo is paralyzed! It can't move!"); + MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("Foe Torkoal is paralyzed! It can't move!"); + } + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Attack reduction from burn", s16 damage) +{ + bool32 burned = FALSE; + u32 species, ability; + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; burned = TRUE; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; burned = TRUE; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; burned = FALSE; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; burned = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(species) { Ability(ability); if (burned) Status1(STATUS1_BURN); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + NOT ABILITY_POPUP(opponent, ability); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent receiving negative stat changes from Baton Pass") +{ + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(species) { Speed(6); Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SCARY_FACE); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_SCARY_FACE); } + } SCENE { + MESSAGE("Wobbuffet used Scary Face!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Topsy-Turvy") +{ + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TOPSY_TURVY].effect == EFFECT_TOPSY_TURVY); + ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(species) { Speed(6); Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SCARY_FACE); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TOPSY_TURVY); } + TURN { MOVE(player, MOVE_SCARY_FACE); } + } SCENE { + MESSAGE("Wobbuffet used Topsy-Turvy!"); + NOT ABILITY_POPUP(opponent, ability); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); + if (ability == ABILITY_FULL_METAL_BODY) { + MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("Foe Solgaleo used Celebrate!"); + } + else if (ability == ABILITY_WHITE_SMOKE) { + MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("Foe Torkoal used Celebrate!"); + } + else { + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Foe Metang used Celebrate!"); + } + MESSAGE("Wobbuffet used Scary Face!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); + ABILITY_POPUP(opponent, ability); + } +} + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent Spectral Thief from resetting positive stat changes") +{ + u32 species, ability; + + PARAMETRIZE{ species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_SPECTRAL_THIEF, MOVE_EFFECT_SPECTRAL_THIEF) == TRUE); + ASSUME(gMovesInfo[MOVE_AGILITY].effect == EFFECT_SPEED_UP_2); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(species) { Speed(5); Ability(ability); } + } WHEN { + TURN{ MOVE(opponent, MOVE_AGILITY); } + TURN{ MOVE(player, MOVE_SPECTRAL_THIEF); } + TURN{ } + } SCENE { + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Agility!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Agility!"); + else + MESSAGE("Foe Metang used Agility!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AGILITY, opponent); + MESSAGE("Wobbuffet used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("Wobbuffet used SpectrlThief!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); + NOT ABILITY_POPUP(opponent, ability); + MESSAGE("Wobbuffet used Celebrate!"); + if (ability == ABILITY_FULL_METAL_BODY) + MESSAGE("Foe Solgaleo used Celebrate!"); + else if (ability == ABILITY_WHITE_SMOKE) + MESSAGE("Foe Torkoal used Celebrate!"); + else + MESSAGE("Foe Metang used Celebrate!"); + } +} diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c new file mode 100644 index 000000000000..bd991c258eb9 --- /dev/null +++ b/test/battle/ability/comatose.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Comatose prevents status-inducing moves") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISONPOWDER; } + PARAMETRIZE { move = MOVE_SLEEP_POWDER; } + PARAMETRIZE { move = MOVE_THUNDER_WAVE; } + + GIVEN { + PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + MESSAGE("Komala is drowsing!"); + + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ABILITY_POPUP(player, ABILITY_COMATOSE); + MESSAGE("It doesn't affect Komala…"); + } +} + +SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pokemon with Comatose ability and was under the effects of Gastro Acid") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISONPOWDER; } + PARAMETRIZE { move = MOVE_SLEEP_POWDER; } + PARAMETRIZE { move = MOVE_THUNDER_WAVE; } + + GIVEN { + PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); Speed(30); } + OPPONENT(SPECIES_DITTO) { Speed(20); } + } WHEN { + TURN { MOVE(player, MOVE_GASTRO_ACID); MOVE(opponent, MOVE_TRANSFORM); } + TURN { MOVE(player, move); } + } SCENE { + MESSAGE("Komala is drowsing!"); + MESSAGE("Komala used Gastro Acid!"); + MESSAGE("Foe Ditto used Transform!"); + MESSAGE("Foe Ditto transformed into Komala!"); + + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_POISONPOWDER) { STATUS_ICON(opponent, poison: TRUE); } + else if (move == MOVE_TOXIC) { STATUS_ICON(opponent, badPoison: TRUE); } + else if (move == MOVE_THUNDER_WAVE) { STATUS_ICON(opponent, paralysis: TRUE); } + else if (move == MOVE_SLEEP_POWDER) { STATUS_ICON(opponent, sleep: TRUE); } + } +} diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c index 87477ddbcc37..8addbd90faab 100644 --- a/test/battle/ability/corrosion.c +++ b/test/battle/ability/corrosion.c @@ -106,23 +106,122 @@ SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion holds a T SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion poisons a target with Synchronize, Synchronize will not poison Poison- or Steel-type Pokémon") { + u16 move; + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISON_POWDER; } GIVEN { ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } OPPONENT(SPECIES_ABRA) { Ability(ABILITY_SYNCHRONIZE); } } WHEN { - TURN { MOVE(player, MOVE_TOXIC); } + TURN { MOVE(player, move); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - STATUS_ICON(opponent, badPoison: TRUE); + if (move == MOVE_TOXIC) + STATUS_ICON(opponent, badPoison: TRUE); + else + STATUS_ICON(opponent, poison: TRUE); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); STATUS_ICON(player, badPoison: TRUE); + STATUS_ICON(player, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Corrosion cannot bypass moves that prevent poisoning such as Safeguard") +{ + u16 move; + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISON_POWDER; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); + PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SAFEGUARD); MOVE(player, move); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Corrosion cannot bypass abilities that prevent poisoning such as Immunity") +{ + u16 move; + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISON_POWDER; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); + PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + STATUS_ICON(opponent, poison: TRUE); } } } -TO_DO_BATTLE_TEST("Corrosion cannot bypass moves or Abilities that prevent poisoning, such as Safeguard or Immunity"); -TO_DO_BATTLE_TEST("If the Pokémon with this Ability uses Magic Coat to reflect a status move that inflicts poison, the reflected move will be able to poison Poison- or Steel-type Pokémon."); -TO_DO_BATTLE_TEST("Moves used by a Pokémon with Corrosion that are reflected by Magic Coat or Magic Bounce do not retain the ability to poison Poison- or Steel-type Pokémon.") +SINGLE_BATTLE_TEST("Corrosion allows the Pokémon with the ability to poison a Steel or Poison-type opponent by using Magic Coat") +{ + u16 move; + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISON_POWDER; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); + ASSUME(gMovesInfo[MOVE_MAGIC_COAT].effect == EFFECT_MAGIC_COAT); + PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } + OPPONENT(SPECIES_BELDUM); + } WHEN { + TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); // Bounced by Magic Coat + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + if (move == MOVE_TOXIC) + STATUS_ICON(opponent, badPoison: TRUE); + else + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Corrosion's effect is lost if the move used by the Pokémon with the ability is reflected by Magic Coat") +{ + u16 move; + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POISON_POWDER; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); + ASSUME(gMovesInfo[MOVE_MAGIC_COAT].effect == EFFECT_MAGIC_COAT); + PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_MAGIC_COAT); MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); + if (move == MOVE_TOXIC) + STATUS_ICON(opponent, badPoison: TRUE); + else + STATUS_ICON(opponent, poison: TRUE); + } + } +} diff --git a/test/battle/ability/cursed_body.c b/test/battle/ability/cursed_body.c new file mode 100644 index 000000000000..20fe659d21ac --- /dev/null +++ b/test/battle/ability/cursed_body.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Cursed Body triggers 30% of the time") +{ + PASSES_RANDOMLY(3, 10, RNG_CURSED_BODY); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_FRILLISH) { Ability(ABILITY_CURSED_BODY); } + } WHEN { + TURN { MOVE(player, MOVE_AQUA_JET); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, player); + ABILITY_POPUP(opponent, ABILITY_CURSED_BODY); + MESSAGE("Wobbuffet's Aqua Jet was disabled by Foe Frillish's Cursed Body!"); + } +} diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index d0e896fd7adb..4a6daf8d189d 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -56,6 +56,7 @@ SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp. Def than De SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet", s16 damagePhysical, s16 damageSpecial) { u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } PARAMETRIZE { ability = ABILITY_DOWNLOAD; } GIVEN { @@ -73,13 +74,13 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet // Everyone faints. MESSAGE("Go! Porygon!"); - MESSAGE("2 sent out Porygon2!"); - NONE_OF { ABILITY_POPUP(player, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Porygon's Download raised its Attack!"); } + MESSAGE("2 sent out Porygon2!"); + if (ability == ABILITY_DOWNLOAD) { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); diff --git a/test/battle/ability/full_metal_body.c b/test/battle/ability/full_metal_body.c index d00714d524a1..3b36f2d1f244 100644 --- a/test/battle/ability/full_metal_body.c +++ b/test/battle/ability/full_metal_body.c @@ -1,38 +1,4 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Full Metal Body prevents intimidate") -{ - s16 turnOneHit; - s16 turnTwoHit; - - GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_SOLGALEO) { Ability(ABILITY_FULL_METAL_BODY); }; - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } - - } SCENE { - HP_BAR(player, captureDamage: &turnOneHit); - ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - HP_BAR(player, captureDamage: &turnTwoHit); - } THEN { - EXPECT_EQ(turnOneHit, turnTwoHit); - } -} - -TO_DO_BATTLE_TEST("Full Metal Body prevents stat stage reduction from moves"); // Growl, Leer, Confide, Fake Tears, Scary Face, Sweet Scent, Sand Attack (Attack, Defense, Sp. Attack, Sp. Defense, Speed, Evasion, Accuracy -TO_DO_BATTLE_TEST("Full Metal Body prevents Sticky Web"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent stat stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Speed reduction from Iron Ball"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Speed reduction from paralysis"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent receiving negative stat changes from Baton Pass"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("Full Metal Body doesn't prevent Spectral Thief from resetting positive stat changes"); -TO_DO_BATTLE_TEST("Full Metal Body is ignored by Mold Breaker"); +// Tests for Full Metal Body are handled in test/battle/ability/clear_body.c diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 08560ccb00ad..09677523c1ef 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -78,23 +78,29 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba // Everyone faints. MESSAGE("Go! Ekans!"); - MESSAGE("2 sent out Arbok!"); - MESSAGE("Go! Abra!"); - MESSAGE("2 sent out Wynaut!"); - NONE_OF { ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); - + } + MESSAGE("2 sent out Arbok!"); + NONE_OF { ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } + MESSAGE("Go! Abra!"); + MESSAGE("2 sent out Wynaut!"); + // Intimidate activates after all battlers have been brought out + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); + + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } @@ -210,3 +216,32 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is EXPECT_EQ(player->statStages[STAT_ATK], MIN_STAT_STAGE); } } + +DOUBLE_BATTLE_TEST("Intimidate is not going to trigger if a mon switches out through u-turn and the opposing field is empty") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TREECKO); + OPPONENT(SPECIES_TORCHIC); + } WHEN { + TURN { + MOVE(opponentRight, MOVE_HEALING_WISH); + MOVE(playerLeft, MOVE_U_TURN, target: opponentLeft); + SEND_OUT(playerLeft, 2); + SEND_OUT(opponentLeft, 2); + SEND_OUT(opponentRight, 3); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, playerLeft); + HP_BAR(opponentLeft); + MESSAGE("2 sent out Treecko!"); + MESSAGE("2 sent out Torchic!"); + NOT ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + } +} diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c new file mode 100644 index 000000000000..33dd27a6fbf5 --- /dev/null +++ b/test/battle/ability/lightning_rod.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Lightning Rod absorbs Electric-type moves and increases the Sp. Attack [Gen5+]") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent); + }; + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to target the Pokémon with this Ability.") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentRight); + MOVE(playerRight, MOVE_THUNDERBOLT, target: opponentRight); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + }; + ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + } else { + NONE_OF { + HP_BAR(opponentRight); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, playerRight); + HP_BAR(opponentLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } +} diff --git a/test/battle/ability/lingering_aroma.c b/test/battle/ability/lingering_aroma.c new file mode 100644 index 000000000000..a4ef5fc48fa2 --- /dev/null +++ b/test/battle/ability/lingering_aroma.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Lingering Aroma are handled in test/battle/ability/mummy.c diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c index 6498f9f098dc..7799735ee2e8 100644 --- a/test/battle/ability/minds_eye.c +++ b/test/battle/ability/minds_eye.c @@ -49,8 +49,8 @@ AI_SINGLE_BATTLE_TEST("AI doesn't use accuracy-lowering moves if it knows that t for (j = MOVE_NONE + 1; j < MOVES_COUNT; j++) { if (gMovesInfo[j].effect == EFFECT_ACCURACY_DOWN || gMovesInfo[j].effect == EFFECT_ACCURACY_DOWN_2) { - PARAMETRIZE{ moveAI = j; abilityAI = ABILITY_SWIFT_SWIM; } - PARAMETRIZE{ moveAI = j; abilityAI = ABILITY_MOLD_BREAKER; } + PARAMETRIZE { moveAI = j; abilityAI = ABILITY_SWIFT_SWIM; } + PARAMETRIZE { moveAI = j; abilityAI = ABILITY_MOLD_BREAKER; } } } diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c new file mode 100644 index 000000000000..b60a11507acd --- /dev/null +++ b/test/battle/ability/moxie.c @@ -0,0 +1,121 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Moxie raises Attack by one stage after directly causing a Pokemon to faint") +{ + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + + GIVEN { + PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + PLAYER(SPECIES_SNORUNT) { HP(1); } + OPPONENT(SPECIES_GLALIE) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Salamence's Moxie raised its Attack!"); + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 3); + } +} + +DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") +{ + GIVEN { + PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_GLALIE) { HP(1); Status1(STATUS1_BURN); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Salamence's Moxie raised its Attack!"); + } + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Moxie does not trigger when already at maximum Attack stage") +{ + ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); + + GIVEN { + PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + OPPONENT(SPECIES_SNORUNT) { HP(1); } + OPPONENT(SPECIES_SNORUNT); + } WHEN { + TURN { MOVE(player, MOVE_BELLY_DRUM); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + MESSAGE("Foe Snorunt fainted!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_MOXIE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Salamence's Moxie raised its Attack!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("Moxie does not increase damage done by the same move that causes another Pokemon to faint") +{ + s16 damage[2]; + + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + + KNOWN_FAILING; // Requires simultaneous damage implementation + GIVEN { + PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + PLAYER(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damage[0]); + HP_BAR(playerRight); + MESSAGE("Abra fainted!"); + ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Salamence's Moxie raised its Attack!"); + HP_BAR(opponentRight, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(damage[0], damage[1]); + } +} diff --git a/test/battle/ability/mummy.c b/test/battle/ability/mummy.c new file mode 100644 index 000000000000..ed80a178e6f4 --- /dev/null +++ b/test/battle/ability/mummy.c @@ -0,0 +1,98 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Mummy/Lingering Aroma replace the attacker's ability on contact") +{ + u32 move, ability, species; + + PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; } + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK;} + PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; } + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_AQUA_JET].makesContact); + ASSUME(!gMovesInfo[MOVE_WATER_GUN].makesContact); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (gMovesInfo[move].makesContact) { + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_MUMMY) + MESSAGE("Wobbuffet acquired Mummy!"); + else + MESSAGE("Wobbuffet acquired Lingering Aroma!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ability); + if (ability == ABILITY_MUMMY) + MESSAGE("Wobbuffet acquired Mummy!"); + else + MESSAGE("Wobbuffet acquired Lingering Aroma!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Mummy and Lingering Aroma don't replace each other") +{ + u32 ability1, species1, ability2, species2; + + PARAMETRIZE { ability1 = ability2 = ABILITY_MUMMY; species1 = species2 = SPECIES_YAMASK; } + PARAMETRIZE { ability1 = ABILITY_MUMMY; species1 = SPECIES_YAMASK; ability2 = ABILITY_LINGERING_AROMA; species2 = SPECIES_OINKOLOGNE; } + PARAMETRIZE { ability1 = ability2 = ABILITY_LINGERING_AROMA; species1 = species2 = SPECIES_OINKOLOGNE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_AQUA_JET].makesContact); + PLAYER(species1) { Ability(ability1); Speed(2); } + OPPONENT(species2) { Ability(ability2); Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_AQUA_JET); MOVE(opponent, MOVE_AQUA_JET); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, opponent); + NONE_OF { + ABILITY_POPUP(player, ability1); + ABILITY_POPUP(player, ability2); + ABILITY_POPUP(opponent, ability1); + ABILITY_POPUP(opponent, ability2); + MESSAGE("Yamask acquired Mummy!"); + MESSAGE("Yamask acquired Lingering Aroma!"); + MESSAGE("Oinkologne acquired Mummy!"); + MESSAGE("Oinkologne acquired Lingering Aroma!"); + } + } +} + +SINGLE_BATTLE_TEST("Mummy doesn't replace abilities that can't be suppressed") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } + PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } + PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; } + + GIVEN { + PLAYER(SPECIES_YAMASK); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_AQUA_JET); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, opponent); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_MUMMY); + } + } +} diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index d5a6f58a723c..a37bc0024a83 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -56,6 +56,23 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") } } +SINGLE_BATTLE_TEST("Own Tempo is ignored by Mold Breaker") +{ + KNOWN_FAILING; // Ideally the func CanBeConfused should be split into AttackerCanBeConfused and TargetCanBeConfused or we do it in the same func but have a check for when battlerAtk == battlerDef + GIVEN { + ASSUME(gMovesInfo[MOVE_CONFUSE_RAY].effect == EFFECT_CONFUSE); + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + } WHEN { + TURN { MOVE(player, MOVE_CONFUSE_RAY); } + } SCENE { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); + MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + } + } +} + SINGLE_BATTLE_TEST("Own Tempo cures confusion obtained from an opponent with Mold Breaker") { KNOWN_FAILING; diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 46e71096de41..d262de362d4f 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -239,6 +239,30 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil } } +SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SMACK_DOWN].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_SMACK_DOWN].strikeCount < 2); + ASSUME(MoveHasAdditionalEffect(MOVE_SMACK_DOWN, MOVE_EFFECT_SMACK_DOWN)); + PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } + OPPONENT(SPECIES_SKARMORY); + } WHEN { + TURN { MOVE(player, MOVE_SMACK_DOWN, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); + MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SMACK_DOWN, player); + HP_BAR(opponent); + NOT MESSAGE("Foe Skarmory fell straight down!"); + HP_BAR(opponent); + MESSAGE("Foe Skarmory fell straight down!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_KANGASKHAN_MEGA); + } +} + TO_DO_BATTLE_TEST("Parental Bond tests"); // Temporary TODO: Convert Bulbapedia description into tests. diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c new file mode 100644 index 000000000000..b69fa2044430 --- /dev/null +++ b/test/battle/ability/poison_touch.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Poison Touch has a 30% chance to poison when attacking with contact moves") +{ + PASSES_RANDOMLY(3, 10, RNG_POISON_TOUCH); + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); + ASSUME(gMovesInfo[MOVE_TACKLE].makesContact); + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_POISON_TOUCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(player, ABILITY_POISON_TOUCH); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Poison Touch only applies when using contact moves") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].makesContact); + ASSUME(!gMovesInfo[MOVE_SWIFT].makesContact); + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_POISON_TOUCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (gMovesInfo[move].makesContact) { + ABILITY_POPUP(player, ABILITY_POISON_TOUCH); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + STATUS_ICON(opponent, poison: TRUE); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_POISON_TOUCH); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + STATUS_ICON(opponent, poison: TRUE); + } + } + } +} + +SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ARM_THRUST].effect == EFFECT_MULTI_HIT); + ASSUME(gMovesInfo[MOVE_ARM_THRUST].makesContact); + ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_POISON_TOUCH); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); }; + } WHEN { + TURN { MOVE(player, MOVE_ARM_THRUST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ARM_THRUST, player); + ABILITY_POPUP(player, ABILITY_POISON_TOUCH); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + STATUS_ICON(opponent, poison: TRUE); + MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + STATUS_ICON(opponent, poison: FALSE); + ABILITY_POPUP(player, ABILITY_POISON_TOUCH); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + STATUS_ICON(opponent, poison: TRUE); + } +} diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index d6c5a924629a..8c5feaee430a 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -136,7 +136,7 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves that target all Pokémon are succes { GIVEN { ASSUME(gMovesInfo[MOVE_CAPTIVATE].target == MOVE_TARGET_BOTH); - PLAYER(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } + PLAYER(SPECIES_ILLUMISE) { Ability(ABILITY_PRANKSTER); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_UMBREON); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/sticky_hold.c b/test/battle/ability/sticky_hold.c new file mode 100644 index 000000000000..2c7cc095350c --- /dev/null +++ b/test/battle/ability/sticky_hold.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Sticky Hold prevents item theft") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_THIEF, MOVE_EFFECT_STEAL_ITEM)); + PLAYER(SPECIES_URSALUNA) { Item(ITEM_NONE); } + OPPONENT(SPECIES_GASTRODON) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_LIFE_ORB); } + } WHEN { + TURN { MOVE(player, MOVE_THIEF); } + } SCENE { + MESSAGE("Ursaluna used Thief!"); + ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); + MESSAGE("Foe Gastrodon's Sticky Hold made Thief ineffective!"); + } +} + diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c new file mode 100644 index 000000000000..38d4a9be7595 --- /dev/null +++ b/test/battle/ability/storm_drain.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. Attack [Gen5+]") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); + HP_BAR(opponent); + }; + ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); + HP_BAR(opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target the Pokémon with this Ability.") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_WATER_GUN, target: opponentRight); + MOVE(playerRight, MOVE_WATER_GUN, target: opponentRight); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + }; + ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + } else { + NONE_OF { + HP_BAR(opponentRight); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, playerRight); + HP_BAR(opponentLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } +} diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c index 061324c73996..baf20764298c 100644 --- a/test/battle/ability/supreme_overlord.c +++ b/test/battle/ability/supreme_overlord.c @@ -107,9 +107,9 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Kingambit!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_SUPREME_OVERLORD); MESSAGE("Kingambit gained strength from the fallen!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ability/switch_in_abilities.c b/test/battle/ability/switch_in_abilities.c new file mode 100644 index 000000000000..79cf2b2dc966 --- /dev/null +++ b/test/battle/ability/switch_in_abilities.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's start - Single Battle") +{ + u32 spdPlayer, spdOpponent; + + PARAMETRIZE { spdPlayer = 5; spdOpponent = 1; } + PARAMETRIZE { spdOpponent = 5; spdPlayer = 1; } + + GIVEN { + PLAYER(SPECIES_EKANS) { Speed(spdPlayer); Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_NINETALES) { Speed(spdOpponent); Ability(ABILITY_DROUGHT); } + } WHEN { + TURN { ; } + } SCENE { + if (spdPlayer > spdOpponent) { + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + } else { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + } + } +} + +DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's start - Double Battle") +{ + u32 spdPlayer1, spdPlayer2, spdOpponent1, spdOpponent2; + + PARAMETRIZE { spdPlayer1 = 5; spdPlayer2 = 4; spdOpponent1 = 3; spdOpponent2 = 2; } + PARAMETRIZE { spdPlayer1 = 2; spdPlayer2 = 3; spdOpponent1 = 4; spdOpponent2 = 5; } + PARAMETRIZE { spdPlayer1 = 4; spdPlayer2 = 3; spdOpponent1 = 5; spdOpponent2 = 2; } + + GIVEN { + PLAYER(SPECIES_KYOGRE) { Speed(spdPlayer1); Ability(ABILITY_DRIZZLE); } + PLAYER(SPECIES_GYARADOS) { Speed(spdPlayer2); Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent1); Ability(ABILITY_DOWNLOAD); } + OPPONENT(SPECIES_PINSIR) { Speed(spdOpponent2); Ability(ABILITY_MOLD_BREAKER); } + } WHEN { + TURN { ; } + } SCENE { + if (spdPlayer1 == 5) { + ABILITY_POPUP(playerLeft, ABILITY_DRIZZLE); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentLeft, ABILITY_DOWNLOAD); + ABILITY_POPUP(opponentRight, ABILITY_MOLD_BREAKER); + } else if (spdOpponent2 == 5) { + ABILITY_POPUP(opponentRight, ABILITY_MOLD_BREAKER); + ABILITY_POPUP(opponentLeft, ABILITY_DOWNLOAD); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(playerLeft, ABILITY_DRIZZLE); + } else { + ABILITY_POPUP(opponentLeft, ABILITY_DOWNLOAD); + ABILITY_POPUP(playerLeft, ABILITY_DRIZZLE); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentRight, ABILITY_MOLD_BREAKER); + } + } +} + +SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO switch - Single Battle") +{ + u32 spdPlayer, spdOpponent; + + PARAMETRIZE { spdPlayer = 5; spdOpponent = 1; } + PARAMETRIZE { spdOpponent = 5; spdPlayer = 1; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + PLAYER(SPECIES_EKANS) { Speed(spdPlayer); Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent); Ability(ABILITY_DOWNLOAD); } + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { ; } + } SCENE { + MESSAGE("Wobbuffet used Explosion!"); + if (spdPlayer > spdOpponent) { + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + } else { + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + } + } +} + +DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO switch - Double Battle") +{ + u32 spdPlayer1, spdPlayer2, spdOpponent1, spdOpponent2; + + PARAMETRIZE { spdPlayer1 = 5; spdPlayer2 = 4; spdOpponent1 = 3; spdOpponent2 = 2; } + PARAMETRIZE { spdPlayer1 = 2; spdPlayer2 = 3; spdOpponent1 = 4; spdOpponent2 = 5; } + PARAMETRIZE { spdPlayer1 = 4; spdPlayer2 = 3; spdOpponent1 = 5; spdOpponent2 = 2; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + PLAYER(SPECIES_TYRANITAR) { Speed(spdPlayer1); Ability(ABILITY_SAND_STREAM); } + PLAYER(SPECIES_GYARADOS) { Speed(spdPlayer2); Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_WEEZING_GALARIAN) { Speed(spdOpponent1); Ability(ABILITY_MISTY_SURGE); } + OPPONENT(SPECIES_VULPIX_ALOLAN) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } + TURN { ; } + } SCENE { + MESSAGE("Wobbuffet used Explosion!"); + if (spdPlayer1 == 5) { + ABILITY_POPUP(playerLeft, ABILITY_SAND_STREAM); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentLeft, ABILITY_MISTY_SURGE); + ABILITY_POPUP(opponentRight, ABILITY_SNOW_WARNING); + } else if (spdOpponent2 == 5) { + ABILITY_POPUP(opponentRight, ABILITY_SNOW_WARNING); + ABILITY_POPUP(opponentLeft, ABILITY_MISTY_SURGE); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(playerLeft, ABILITY_SAND_STREAM); + } else { + ABILITY_POPUP(opponentLeft, ABILITY_MISTY_SURGE); + ABILITY_POPUP(playerLeft, ABILITY_SAND_STREAM); + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentRight, ABILITY_SNOW_WARNING); + } + } +} diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index 329031f68d3b..7fc2c30d2a1f 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -46,9 +46,9 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Chien-Pao!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_SWORD_OF_RUIN); MESSAGE("Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c index abdaab756388..d8858aca2edc 100644 --- a/test/battle/ability/tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -46,9 +46,9 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Wo-Chien!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_TABLETS_OF_RUIN); MESSAGE("Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index bb72f38860bf..acc49bcf1398 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -79,3 +79,20 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); } } + +DOUBLE_BATTLE_TEST("Trace respects the turn order") +{ + GIVEN { + PLAYER(SPECIES_DEOXYS_SPEED) { Speed(40); Ability(ABILITY_PRESSURE); } + PLAYER(SPECIES_GARDEVOIR) { Speed(20); Ability(ABILITY_TRACE); } + OPPONENT(SPECIES_HIPPOWDON) { Speed(10); Ability(ABILITY_SAND_STREAM); } + OPPONENT(SPECIES_DEOXYS_SPEED) { Speed(30); Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_PRESSURE); + ABILITY_POPUP(opponentRight, ABILITY_PRESSURE); + ABILITY_POPUP(playerRight, ABILITY_TRACE); + ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM); + } +} diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c index ce8eae4dabd9..5f83a6c07f25 100644 --- a/test/battle/ability/vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -46,9 +46,9 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Ting-Lu!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_VESSEL_OF_RUIN); MESSAGE("Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ability/white_smoke.c b/test/battle/ability/white_smoke.c index 7bedbca24298..4cb1687141a7 100644 --- a/test/battle/ability/white_smoke.c +++ b/test/battle/ability/white_smoke.c @@ -1,39 +1,4 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("White Smoke prevents intimidate") -{ - s16 turnOneHit; - s16 turnTwoHit; - - GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_WHITE_SMOKE); }; - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } - - } SCENE { - HP_BAR(player, captureDamage: &turnOneHit); - ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - HP_BAR(player, captureDamage: &turnTwoHit); - } THEN { - EXPECT_EQ(turnOneHit, turnTwoHit); - } -} - - -TO_DO_BATTLE_TEST("White Smoke prevents stat stage reduction from moves"); // Growl, Leer, Confide, Fake Tears, Scary Face, Sweet Scent, Sand Attack (Attack, Defense, Sp. Attack, Sp. Defense, Speed, Evasion, Accuracy -TO_DO_BATTLE_TEST("White Smoke prevents Sticky Web"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent stat stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Speed reduction from Iron Ball"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Speed reduction from paralysis"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent receiving negative stat changes from Baton Pass"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("White Smoke doesn't prevent Spectral Thief from resetting positive stat changes"); -TO_DO_BATTLE_TEST("White Smoke is ignored by Mold Breaker"); +// Tests for White Smoke are handled in test/battle/ability/clear_body.c diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index b4e64d935754..3939c6cb7859 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -153,9 +153,9 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); // Everyone faints. MESSAGE("Go! Palafin!"); + MESSAGE("2 sent out Wobbuffet!"); ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); - MESSAGE("2 sent out Wobbuffet!"); } } diff --git a/test/battle/ai.c b/test/battle/ai.c index b293841bda18..e98cb7b08e26 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -52,7 +52,6 @@ AI_SINGLE_BATTLE_TEST("AI prefers Water Gun over Bubble if it knows that foe has u32 abilityAI; PARAMETRIZE { abilityAI = ABILITY_MOXIE; } - PARAMETRIZE { abilityAI = ABILITY_AIR_FORCE; } PARAMETRIZE { abilityAI = ABILITY_MOLD_BREAKER; } // Mold Breaker ignores Contrary. GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); @@ -423,9 +422,9 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any { u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; - PARAMETRIZE{ move1 = MOVE_LEER; move2 = MOVE_TOXIC; } - PARAMETRIZE{ move1 = MOVE_HELPING_HAND; move2 = MOVE_PROTECT; } - PARAMETRIZE{ move1 = MOVE_ACUPRESSURE; move2 = MOVE_DOUBLE_TEAM; move3 = MOVE_TOXIC; move4 = MOVE_PROTECT; } + PARAMETRIZE { move1 = MOVE_LEER; move2 = MOVE_TOXIC; } + PARAMETRIZE { move1 = MOVE_HELPING_HAND; move2 = MOVE_PROTECT; } + PARAMETRIZE { move1 = MOVE_ACUPRESSURE; move2 = MOVE_DOUBLE_TEAM; move3 = MOVE_TOXIC; move4 = MOVE_PROTECT; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); @@ -452,7 +451,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He for (j = MOVE_NONE + 1; j < MOVES_COUNT; j++) { if (gMovesInfo[j].category == DAMAGE_CATEGORY_STATUS) { - PARAMETRIZE{ statusMove = j; } + PARAMETRIZE { statusMove = j; } } } @@ -586,9 +585,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemo u32 speedAlakazm; u32 aiSmartSwitchFlags = 0; - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in - PARAMETRIZE{ speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in + PARAMETRIZE { speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off + PARAMETRIZE { speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in + PARAMETRIZE { speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in GIVEN { ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); @@ -635,8 +634,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage whe u32 aiIsSmart = 0; u32 aiSmartSwitchFlags = 0; - PARAMETRIZE{ aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd - PARAMETRIZE{ aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage + PARAMETRIZE { aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd + PARAMETRIZE { aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); @@ -657,10 +656,10 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize u32 move2; u32 expectedIndex; - PARAMETRIZE{ expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } - PARAMETRIZE{ expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } + PARAMETRIZE { expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage + PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } + PARAMETRIZE { expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move + PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); @@ -717,8 +716,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemo { u32 move1; - PARAMETRIZE{ move1 = MOVE_TACKLE; } - PARAMETRIZE{ move1 = MOVE_RAPID_SPIN; } + PARAMETRIZE { move1 = MOVE_TACKLE; } + PARAMETRIZE { move1 = MOVE_RAPID_SPIN; } GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); @@ -820,8 +819,9 @@ AI_SINGLE_BATTLE_TEST("AI will not choose Burn Up if the user lost the Fire typi } } -AI_SINGLE_BATTLE_TEST("AI will choose Surf over Thunderbolt and Ice Beam if the opposing mon has Volt Absorb") +AI_SINGLE_BATTLE_TEST("AI will only choose Surf 1/3 times if the opposing mon has Volt Absorb") { + PASSES_RANDOMLY(1, 3, RNG_AI_ABILITY); GIVEN { ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); @@ -829,6 +829,27 @@ AI_SINGLE_BATTLE_TEST("AI will choose Surf over Thunderbolt and Ice Beam if the OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_SURF); } + TURN { EXPECT_MOVE(opponent, MOVE_SURF); } + } SCENE { + MESSAGE("Foe Lanturn used Surf!"); + MESSAGE("Foe Lanturn used Surf!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI will choose Thunderbolt then Surf 2/3 times if the opposing mon has Volt Absorb") +{ + PASSES_RANDOMLY(2, 3, RNG_AI_ABILITY); + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } + TURN { EXPECT_MOVE(opponent, MOVE_SURF); } + } SCENE { + MESSAGE("Foe Lanturn used Thunderbolt!"); + MESSAGE("Foe Lanturn used Surf!"); } } @@ -956,3 +977,66 @@ AI_DOUBLE_BATTLE_TEST("AI will the see a corresponding absorbing ability on part TURN { EXPECT_MOVE(opponentLeft, MOVE_TACKLE); } } } + +AI_SINGLE_BATTLE_TEST("AI calculates guaranteed criticals and detects critical immunity") +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_SWIFT_SWIM; } + PARAMETRIZE { ability = ABILITY_SHELL_ARMOR; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_STORM_THROW].alwaysCriticalHit); + ASSUME(gMovesInfo[MOVE_STORM_THROW].power == 60); + ASSUME(gMovesInfo[MOVE_BRICK_BREAK].power == 75); + ASSUME(gMovesInfo[MOVE_STORM_THROW].type == gMovesInfo[MOVE_BRICK_BREAK].type); + ASSUME(gMovesInfo[MOVE_STORM_THROW].category == gMovesInfo[MOVE_BRICK_BREAK].category); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_OMASTAR) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_STORM_THROW, MOVE_BRICK_BREAK); } + } WHEN { + if (ability == ABILITY_SHELL_ARMOR) + TURN { EXPECT_MOVE(opponent, MOVE_BRICK_BREAK); } + else + TURN { EXPECT_MOVE(opponent, MOVE_STORM_THROW); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI recognizes Volt Absorb received from Trace") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MAGNETON); + PLAYER(SPECIES_GARDEVOIR) { Ability(ABILITY_TRACE); } + OPPONENT(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); Moves(MOVE_THUNDER_WAVE, MOVE_THUNDERSHOCK, MOVE_WATER_GUN); } + OPPONENT(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); Moves(MOVE_THUNDER_WAVE, MOVE_THUNDERSHOCK, MOVE_WATER_GUN); } + } WHEN { + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_THUNDERSHOCK); NOT_EXPECT_MOVE(opponentLeft, MOVE_THUNDER_WAVE); NOT_EXPECT_MOVE(opponentRight, MOVE_THUNDER_WAVE); } + } THEN { + EXPECT(gBattleResources->aiData->abilities[B_POSITION_PLAYER_RIGHT] == ABILITY_VOLT_ABSORB); + } +} + +AI_SINGLE_BATTLE_TEST("AI avoids contact moves against rocky helmet") +{ + u32 item; + + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_ROCKY_HELMET; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_BRANCH_POKE].makesContact); + ASSUME(!gMovesInfo[MOVE_LEAFAGE].makesContact); + ASSUME(gMovesInfo[MOVE_BRANCH_POKE].power == gMovesInfo[MOVE_LEAFAGE].power); + ASSUME(gMovesInfo[MOVE_BRANCH_POKE].type == gMovesInfo[MOVE_LEAFAGE].type); + ASSUME(gMovesInfo[MOVE_BRANCH_POKE].category == gMovesInfo[MOVE_LEAFAGE].category); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Item(item); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BRANCH_POKE, MOVE_LEAFAGE); } + } WHEN { + if (item == ITEM_ROCKY_HELMET) + TURN { EXPECT_MOVE(opponent, MOVE_LEAFAGE); } + else + TURN { EXPECT_MOVES(opponent, MOVE_LEAFAGE, MOVE_BRANCH_POKE); } + } +} + diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index b2426933f767..a42c003a3dde 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -153,3 +153,26 @@ SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can h EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); } } + +SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CRUNCH].makesContact == TRUE); + ASSUME(gSpeciesInfo[SPECIES_GARCHOMP_MEGA].abilities[0] != ABILITY_ROUGH_SKIN); + ASSUME(gSpeciesInfo[SPECIES_GARCHOMP_MEGA].abilities[1] != ABILITY_ROUGH_SKIN); + ASSUME(gSpeciesInfo[SPECIES_GARCHOMP_MEGA].abilities[2] != ABILITY_ROUGH_SKIN); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GARCHOMP) { Ability(ABILITY_ROUGH_SKIN); Item(ITEM_GARCHOMPITE); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_CRUNCH); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player); + MESSAGE("Foe Garchomp fainted!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); + MESSAGE("Wobbuffet was hurt by Foe Garchomp's Rough Skin!"); + HP_BAR(player); + } + } +} diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index c84397abfa6c..ee84b2c5e0d5 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -32,3 +32,75 @@ SINGLE_BATTLE_TEST("Ability Shield prevents Neutralizing Gas") } } } + +SINGLE_BATTLE_TEST("Ability Shield protects against Mold Breaker") +{ + u32 item; + + PARAMETRIZE { item = ITEM_ABILITY_SHIELD; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + PLAYER(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); Item(item); } + OPPONENT(SPECIES_TINKATON) { Ability(ABILITY_MOLD_BREAKER); } + } WHEN { + TURN { MOVE(opponent, MOVE_GIGATON_HAMMER); } + } SCENE { + if (item == ITEM_ABILITY_SHIELD) { + NONE_OF { + MESSAGE("Shedinja fainted!"); + } + } else { + MESSAGE("Shedinja fainted!"); + } + } +} + +SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might") +{ + u32 item; + + PARAMETRIZE { item = ITEM_ABILITY_SHIELD; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + PLAYER(SPECIES_VIGOROTH) { Ability(ABILITY_VITAL_SPIRIT); Item(item); } + OPPONENT(SPECIES_TOEDSCOOL) { Ability(ABILITY_MYCELIUM_MIGHT); } + } WHEN { + TURN { MOVE(opponent, MOVE_SPORE); MOVE(player, MOVE_SPORE); } + } SCENE { + + if (item == ITEM_ABILITY_SHIELD) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); + STATUS_ICON(player, sleep: TRUE); + } + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); + STATUS_ICON(player, sleep: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Ability Shield protects against Sunsteel Strike") +{ + u32 item; + + PARAMETRIZE { item = ITEM_ABILITY_SHIELD; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + PLAYER(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNSTEEL_STRIKE); } + } SCENE { + if (item == ITEM_ABILITY_SHIELD) { + NONE_OF { + MESSAGE("Shedinja fainted!"); + } + } else { + MESSAGE("Shedinja fainted!"); + } + } +} diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index 9500419540f5..f2059a02854e 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -47,8 +47,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); ASSUME(gMovesInfo[MOVE_FAKE_TEARS].effect == EFFECT_SPECIAL_DEFENSE_DOWN_2); ASSUME(gMovesInfo[MOVE_SCARY_FACE].effect == EFFECT_SPEED_DOWN_2); - ASSUME(B_UPDATED_MOVE_DATA >= GEN_6); - ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == EFFECT_EVASION_DOWN_2); + ASSUME(gMovesInfo[MOVE_SWEET_SCENT].effect == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }; diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 5f985b803edb..37b88c4d07ea 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -163,12 +163,12 @@ SINGLE_BATTLE_TEST("Berry hold effect cures status if a pokemon enters a battle" u16 status; u16 item; - PARAMETRIZE{ status = STATUS1_BURN; item = ITEM_RAWST_BERRY; } - PARAMETRIZE{ status = STATUS1_FREEZE; item = ITEM_ASPEAR_BERRY; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; item = ITEM_CHERI_BERRY; } - PARAMETRIZE{ status = STATUS1_POISON; item = ITEM_PECHA_BERRY; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; item = ITEM_PECHA_BERRY; } - PARAMETRIZE{ status = STATUS1_SLEEP; item = ITEM_CHESTO_BERRY; } + PARAMETRIZE { status = STATUS1_BURN; item = ITEM_RAWST_BERRY; } + PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_ASPEAR_BERRY; } + PARAMETRIZE { status = STATUS1_PARALYSIS; item = ITEM_CHERI_BERRY; } + PARAMETRIZE { status = STATUS1_POISON; item = ITEM_PECHA_BERRY; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; item = ITEM_PECHA_BERRY; } + PARAMETRIZE { status = STATUS1_SLEEP; item = ITEM_CHESTO_BERRY; } GIVEN { ASSUME(gItemsInfo[ITEM_RAWST_BERRY].holdEffect == HOLD_EFFECT_CURE_BRN); diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c index da335b7ac559..135ec270b3c1 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -48,3 +48,28 @@ SINGLE_BATTLE_TEST("Mirror Herb copies all of Stuff Cheeks' stat boosts") EXPECT_EQ(player->statStages[STAT_DEF], opponent->statStages[STAT_DEF]); } } + +DOUBLE_BATTLE_TEST("Mirror Herb does not trigger for Ally's Soul Heart's stat raise") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); } + PLAYER(SPECIES_WYNAUT) { Ability(ABILITY_SOUL_HEART); } // Raises Sp. Atk after fainting am on + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TACKLE, target:opponentLeft); } + } SCENE { + MESSAGE("Wynaut used Tackle!"); + MESSAGE("Foe Wobbuffet fainted!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet used its Mirror Herb to mirror its opponent's stat changes!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + } + } + THEN { + EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index f73bbae32773..6c7cc2e64dea 100644 --- a/test/battle/item_effect/cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -112,12 +112,12 @@ SINGLE_BATTLE_TEST("Ice Heal heals a battler from being frozen") SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -134,12 +134,12 @@ SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") SINGLE_BATTLE_TEST("Heal Powder heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_HEAL_POWDER].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -156,12 +156,12 @@ SINGLE_BATTLE_TEST("Heal Powder heals a battler from any primary status") SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_PEWTER_CRUNCHIES].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -178,12 +178,12 @@ SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_LAVA_COOKIE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -200,12 +200,12 @@ SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_RAGE_CANDY_BAR].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -222,12 +222,12 @@ SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_OLD_GATEAU].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -244,12 +244,12 @@ SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_CASTELIACONE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -266,12 +266,12 @@ SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_LUMIOSE_GALETTE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -288,12 +288,12 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_SHALOUR_SABLE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -310,12 +310,12 @@ SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(gItemsInfo[ITEM_BIG_MALASADA].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c index 80719cf2311c..70dc8322dba9 100644 --- a/test/battle/item_effect/heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -9,13 +9,13 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } - PARAMETRIZE{ status = STATUS1_NONE; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_NONE; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); Status1(status); } OPPONENT(SPECIES_WOBBUFFET); @@ -35,13 +35,13 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s SINGLE_BATTLE_TEST("Full Restore restores a party members HP and cures any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } - PARAMETRIZE{ status = STATUS1_NONE; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_NONE; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); Status1(status); } PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(300); Status1(status); } @@ -64,12 +64,12 @@ SINGLE_BATTLE_TEST("Full Restore restores a party members HP and cures any prima SINGLE_BATTLE_TEST("Full Restore heals a battler from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(status); } OPPONENT(SPECIES_WYNAUT); @@ -86,12 +86,12 @@ SINGLE_BATTLE_TEST("Full Restore heals a battler from any primary status") SINGLE_BATTLE_TEST("Full Restore heals a party member from any primary status") { u16 status; - PARAMETRIZE{ status = STATUS1_BURN; } - PARAMETRIZE{ status = STATUS1_FREEZE; } - PARAMETRIZE{ status = STATUS1_PARALYSIS; } - PARAMETRIZE{ status = STATUS1_POISON; } - PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } - PARAMETRIZE{ status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT) { Status1(status); } diff --git a/test/battle/item_effect/revive.c b/test/battle/item_effect/revive.c index eac16899a6a0..e113b6ae3398 100644 --- a/test/battle/item_effect/revive.c +++ b/test/battle/item_effect/revive.c @@ -73,4 +73,30 @@ SINGLE_BATTLE_TEST("Max Honey restores a fainted battler's HP fully") } } +// Note: this test is oddly specific with implicit moves/speeds, because I had errors/invalids without them. +DOUBLE_BATTLE_TEST("Revive works for a partner in a double battle") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_REVIVE].battleUsage == EFFECT_ITEM_REVIVE); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(200); Moves(MOVE_IRON_DEFENSE, MOVE_CELEBRATE); Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(4); } + OPPONENT(SPECIES_ABRA) { Speed(3); Moves(MOVE_TACKLE, MOVE_PSYCHIC, MOVE_CELEBRATE); } + OPPONENT(SPECIES_KADABRA) { Speed(2); Moves(MOVE_TACKLE, MOVE_PSYCHIC, MOVE_CELEBRATE, MOVE_EXPLOSION); } + } WHEN { + TURN { MOVE(opponentRight, MOVE_PSYCHIC, target:playerLeft); MOVE(playerLeft, MOVE_CELEBRATE); } // Wynaut faints + TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 0); MOVE(opponentRight, MOVE_PSYCHIC, target:playerRight); } // Wynaut gets revived, Wobb faints + // Wynaut is functionally back + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); } + TURN { MOVE(opponentRight, MOVE_TACKLE, target:playerLeft); } + TURN { MOVE(opponentRight, MOVE_EXPLOSION); } // Everyone dies, the test can finish. + } SCENE { + MESSAGE("Wynaut fainted!"); + MESSAGE("You used Revive!"); + // Switch-in animation + MESSAGE("Wobbuffet fainted!"); + HP_BAR(playerLeft); + HP_BAR(playerLeft); + } +} + TO_DO_BATTLE_TEST("Revive won't restore a battler's HP if it hasn't fainted") diff --git a/test/battle/move_animations/smack_down.c b/test/battle/move_animations/smack_down.c new file mode 100644 index 000000000000..acd97e9505b2 --- /dev/null +++ b/test/battle/move_animations/smack_down.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Move Animation Test: Smack Down works when used 15 times in a row") +{ + u16 j, nTurns = 15; + FORCE_MOVE_ANIM(TRUE); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (j = 0; j < nTurns; j++) + { + TURN { MOVE(player, MOVE_SMACK_DOWN); MOVE(opponent, MOVE_HELPING_HAND); } // Helping Hand, so there's no anim on the opponent's side. + } + } SCENE { + for (j = 0; j < nTurns; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SMACK_DOWN, player); + } + } THEN { + FORCE_MOVE_ANIM(FALSE); + } +} diff --git a/test/battle/move_effect/acrobatics.c b/test/battle/move_effect/acrobatics.c index bc34719a42b3..70953d0958d9 100644 --- a/test/battle/move_effect/acrobatics.c +++ b/test/battle/move_effect/acrobatics.c @@ -1,5 +1,48 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Acrobatics doubles in power if the user has no held item"); -TO_DO_BATTLE_TEST("Acrobatics still doubles in power when Flying Gem is consumed"); +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_ACROBATICS].effect == EFFECT_ACROBATICS); + ASSUME(gMovesInfo[MOVE_ACROBATICS].type == TYPE_FLYING); +} + +SINGLE_BATTLE_TEST("Acrobatics doubles in power if the user has no held item", s16 damage) +{ + u16 heldItem; + PARAMETRIZE { heldItem = ITEM_POTION; } + PARAMETRIZE { heldItem = ITEM_NONE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); } + } WHEN { + TURN { MOVE(opponent, MOVE_ACROBATICS); } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Acrobatics still doubles in power when Flying Gem is consumed", s16 damage) +{ + u16 heldItem; + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_FLYING_GEM; } + GIVEN { + ASSUME(I_GEM_BOOST_POWER >= GEN_6); + ASSUME(gItemsInfo[ITEM_FLYING_GEM].holdEffect == HOLD_EFFECT_GEMS); + ASSUME(gItemsInfo[ITEM_FLYING_GEM].secondaryId == TYPE_FLYING); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); } + } WHEN { + TURN { MOVE(opponent, MOVE_ACROBATICS); } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + if (I_GEM_BOOST_POWER >= GEN_6) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), (results[1].damage)); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), (results[1].damage)); + } +} diff --git a/test/battle/move_effect/attack_accuracy_up.c b/test/battle/move_effect/attack_accuracy_up.c index 025a0cb86f3b..102f4d4d213b 100644 --- a/test/battle/move_effect/attack_accuracy_up.c +++ b/test/battle/move_effect/attack_accuracy_up.c @@ -1,4 +1,18 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Hone Claws increases Attack and Accuracy by one stage each"); +SINGLE_BATTLE_TEST("Hone Claws increases Attack and Accuracy by one stage each") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_HONE_CLAWS].effect == EFFECT_ATTACK_ACCURACY_UP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HONE_CLAWS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HONE_CLAWS, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Attack rose!"); + MESSAGE("Wobbuffet's accuracy rose!"); + } +} diff --git a/test/battle/move_effect/aura_wheel.c b/test/battle/move_effect/aura_wheel.c index fa4190dbdfae..3d601f3583a7 100644 --- a/test/battle/move_effect/aura_wheel.c +++ b/test/battle/move_effect/aura_wheel.c @@ -10,8 +10,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Aura Wheel raises Speed; fails if the user is not Morpeko") { u16 species; - PARAMETRIZE{ species = SPECIES_WOBBUFFET; } - PARAMETRIZE{ species = SPECIES_MORPEKO; } + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + PARAMETRIZE { species = SPECIES_MORPEKO; } GIVEN { PLAYER(species); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c index 6fad1c1605a2..02d8a8839ead 100644 --- a/test/battle/move_effect/baton_pass.c +++ b/test/battle/move_effect/baton_pass.c @@ -1,6 +1,30 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); +} + +// This softlocked the game before. +SINGLE_BATTLE_TEST("Baton Pass used after Memento works correctly") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_CATERPIE); + } WHEN { + TURN { MOVE(player, MOVE_MEMENTO); SEND_OUT(player, 1); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + } SCENE { + MESSAGE("Wobbuffet used Memento!"); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Foe Wynaut used Baton Pass!"); + MESSAGE("2 sent out Caterpie!"); + MESSAGE("Go! Wobbuffet!"); + } +} + TO_DO_BATTLE_TEST("Baton Pass switches out the user"); TO_DO_BATTLE_TEST("Baton Pass fails if there's no valid party Pokémon left"); TO_DO_BATTLE_TEST("Baton Pass passes both positive and negative stat changes"); diff --git a/test/battle/move_effect/body_press.c b/test/battle/move_effect/body_press.c index e1bf54f4e8fb..d7dccf14283a 100644 --- a/test/battle/move_effect/body_press.c +++ b/test/battle/move_effect/body_press.c @@ -1,8 +1,100 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Body Press's damage depends on the user's base Defense instead of its base Attack"); -TO_DO_BATTLE_TEST("Body Press's damage depends on the user's Defense stat stages"); +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_BODY_PRESS].effect == EFFECT_BODY_PRESS); +} + +SINGLE_BATTLE_TEST("Body Press's damage depends on the user's base Defense instead of its base Attack", s16 damage) +{ + u32 def, atk; + PARAMETRIZE { def = 150; atk = 179; } // Atk is higher + PARAMETRIZE { atk = 150; def = 179; } // Atk is lower + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Attack(atk); Defense(def); } + } WHEN { + TURN { MOVE(opponent, MOVE_BODY_PRESS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BODY_PRESS, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[1].damage, results[0].damage); + } +} + +SINGLE_BATTLE_TEST("Body Press's damage depends on the user's Defense and not Attack stat stages", s16 damage) +{ + u32 move; + + PARAMETRIZE { move = MOVE_IRON_DEFENSE; } + PARAMETRIZE { move = MOVE_SWORDS_DANCE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } // Nothing, stats are default + GIVEN { + ASSUME(gMovesInfo[MOVE_IRON_DEFENSE].effect == EFFECT_DEFENSE_UP_2); + ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Attack(150); Defense(150); } + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(opponent, MOVE_BODY_PRESS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BODY_PRESS, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[0].damage, results[1].damage); + EXPECT_EQ(results[1].damage, results[2].damage); + } +} + +SINGLE_BATTLE_TEST("Body Press uses Defense Stat even in Wonder Room", s16 damage) +{ + u32 move; + + PARAMETRIZE { move = MOVE_WONDER_ROOM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_WONDER_ROOM].effect == EFFECT_WONDER_ROOM); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { SpDefense(50); Defense(150); } + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(opponent, MOVE_BODY_PRESS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BODY_PRESS, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Body Press uses Special Defense stat Stages in Wonder Room", s16 damage) +{ + u32 move; + + PARAMETRIZE { move = MOVE_IRON_DEFENSE; } + PARAMETRIZE { move = MOVE_AMNESIA; } + PARAMETRIZE { move = MOVE_CELEBRATE; } // Nothing, stats are default + GIVEN { + ASSUME(gMovesInfo[MOVE_IRON_DEFENSE].effect == EFFECT_DEFENSE_UP_2); + ASSUME(gMovesInfo[MOVE_AMNESIA].effect == EFFECT_SPECIAL_DEFENSE_UP_2); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { SpDefense(150); Defense(150); } + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_WONDER_ROOM); } + TURN { MOVE(opponent, MOVE_BODY_PRESS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BODY_PRESS, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[1].damage, results[0].damage); + EXPECT_EQ(results[0].damage, results[2].damage); + } +} // Could be split into multiple tests or maybe to separate files based on the modifier? TO_DO_BATTLE_TEST("Body Press's damage is influenced by all other Attack modifiers that are not stat stages"); diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 628fc4411963..a9b1b4523d1b 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -253,8 +253,8 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J { u32 heldItem; - PARAMETRIZE{ heldItem = ITEM_NONE; } - PARAMETRIZE{ heldItem = ITEM_PIXIE_PLATE; } + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_PIXIE_PLATE; } GIVEN { PLAYER(SPECIES_ARCEUS) { Item(heldItem); }; OPPONENT(SPECIES_DRAGONITE); @@ -274,8 +274,8 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T { u32 heldItem; - PARAMETRIZE{ heldItem = ITEM_NONE; } - PARAMETRIZE{ heldItem = ITEM_SHOCK_DRIVE; } + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_SHOCK_DRIVE; } GIVEN { PLAYER(SPECIES_GENESECT) { Item(heldItem); }; OPPONENT(SPECIES_GYARADOS); @@ -295,8 +295,8 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move { u32 heldItem; - PARAMETRIZE{ heldItem = ITEM_NONE; } - PARAMETRIZE{ heldItem = ITEM_FIRE_MEMORY; } + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_FIRE_MEMORY; } GIVEN { PLAYER(SPECIES_SILVALLY) { Item(heldItem); }; OPPONENT(SPECIES_VENUSAUR); diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index 670122dc3711..db7f5eb04207 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -6,40 +6,90 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE); } -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for player") +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: Encore used before move") { GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); } + // TURN { FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } + TURN { MOVE(player, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player); + } +} + +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: Encore used after move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_ENCORE); } TURN { FORCED_MOVE(player); } TURN { FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } TURN { MOVE(player, MOVE_SPLASH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player); } } -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for opponent") +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for opponent: Encore used before move") { GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_ENCORE); MOVE(opponent, MOVE_CELEBRATE); } + // TURN { FORCED_MOVE(opponent); } + TURN { FORCED_MOVE(opponent); } + TURN { FORCED_MOVE(opponent); } + TURN { MOVE(opponent, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + } +} + +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for opponent: Encore used after move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_ENCORE); } TURN { FORCED_MOVE(opponent); } TURN { FORCED_MOVE(opponent); } + TURN { FORCED_MOVE(opponent); } TURN { MOVE(opponent, MOVE_SPLASH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); } } diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c new file mode 100644 index 000000000000..d222325a7b69 --- /dev/null +++ b/test/battle/move_effect/flame_burst.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_FLAME_BURST].additionalEffects->moveEffect == MOVE_EFFECT_FLAME_BURST); +} + +// Flame Burst AoE is supposed to hit through Substitute +DOUBLE_BATTLE_TEST("Flame Burst Substitute") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(playerRight, MOVE_FLAME_BURST, target: opponentRight); } + } SCENE { + MESSAGE("The bursting flames hit Foe Wynaut!"); + NOT MESSAGE("The SUBSTITUTE took damage for Foe Wynaut!"); + } +} diff --git a/test/battle/move_effect/fury_cutter.c b/test/battle/move_effect/fury_cutter.c new file mode 100644 index 000000000000..cf3871964e5b --- /dev/null +++ b/test/battle/move_effect/fury_cutter.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_FURY_CUTTER].effect == EFFECT_FURY_CUTTER); +} + +SINGLE_BATTLE_TEST("Fury Cutter power doubles with each use, up to 160 power") +{ + s16 damage[6]; + int turn; + int maxTurns; + + if (B_UPDATED_MOVE_DATA >= GEN_6) + maxTurns = 4; + else if (B_UPDATED_MOVE_DATA == GEN_5) + maxTurns = 5; + else + maxTurns = 6; + + GIVEN { + PLAYER(SPECIES_CROBAT); + OPPONENT(SPECIES_LINOONE) { HP(900); } + } WHEN { + for (turn = 0; turn < maxTurns; turn++) + TURN { MOVE(player, MOVE_FURY_CUTTER); } + } SCENE { + for (turn = 0; turn < maxTurns; turn++) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_CUTTER, player); + HP_BAR(opponent, captureDamage: &damage[turn]); + } + } THEN { + for (turn = 1; turn < maxTurns - 1; turn++) + EXPECT_MUL_EQ(damage[turn - 1], UQ_4_12(2.0), damage[turn]); + EXPECT_EQ(damage[maxTurns - 2], damage[maxTurns - 1]); + } +} diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index 235e0773feb7..e483ee9a8ad9 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -126,6 +126,7 @@ SINGLE_BATTLE_TEST("Held items are consumed immediately after a mon switched in ABILITY_POPUP(player, ABILITY_ELECTRIC_SURGE); ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("2 sent out Wynaut!"); @@ -149,7 +150,7 @@ SINGLE_BATTLE_TEST("Held items are consumed immediately after a mon switched in ABILITY_POPUP(player, ABILITY_ELECTRIC_SURGE); ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); - NOT ABILITY_POPUP(player, ABILITY_INTIMIDATE); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index ab64667b06f3..93e147e07d0d 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -41,7 +41,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit NONE_OF { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Wild Zebstrika's Sp.Atk rose!"); + MESSAGE("Wild Zebstrika's Sp. Atk rose!"); MESSAGE("Wild Zebstrika's Speed rose!"); } MESSAGE("A deluge of ions showers the battlefield!"); diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c index a7b1ac5f6ae8..1252de7b54f0 100644 --- a/test/battle/move_effect/plasma_fists.c +++ b/test/battle/move_effect/plasma_fists.c @@ -47,20 +47,19 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remain } } -SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Pixilate") +SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate") { GIVEN { PLAYER(SPECIES_KRABBY) { Speed(300); }; - OPPONENT(SPECIES_ALTARIA) { Speed(1); Item(ITEM_ALTARIANITE); } + OPPONENT(SPECIES_SYLVEON) { Speed(1); Ability(ABILITY_PIXILATE); } } WHEN { - TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_EMBER, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE); } } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Altaria used Ember!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + MESSAGE("Foe Sylveon used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NOT MESSAGE("It's super effective!"); } } diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 0b517d4228e6..ec2345dbddb4 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -25,4 +25,25 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac } } +// Checked so that Pursuit has only 1 PP and it forces the player to use Struggle. +SINGLE_BATTLE_TEST("Pursuit becomes a locked move after being used on switch-out while holding a Choice Item") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHOICE_BAND); MovesWithPP({MOVE_PURSUIT, 1}, {MOVE_CELEBRATE, 10}, {MOVE_WATER_GUN, 10}, {MOVE_TACKLE, 10}); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(opponent, 1); MOVE(player, MOVE_PURSUIT); } + TURN { FORCED_MOVE(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, player); + HP_BAR(opponent); + MESSAGE("2 sent out Wobbuffet!"); + + MESSAGE("Wobbuffet used Struggle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); + } +} + TO_DO_BATTLE_TEST("Baton Pass doesn't cause Pursuit to increase its power or priority"); diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c index 52db4a360149..3ea405cc50e7 100644 --- a/test/battle/move_effect/relic_song.c +++ b/test/battle/move_effect/relic_song.c @@ -85,6 +85,25 @@ SINGLE_BATTLE_TEST("Relic Song transforms Meloetta if used successfully") } } +SINGLE_BATTLE_TEST("Relic Song does not transform Pokemon other than Meloetta") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Wobbuffet transformed!"); + } + } THEN { + EXPECT_EQ(player->species, SPECIES_WOBBUFFET); + } +} + SINGLE_BATTLE_TEST("Relic Song transforms Meloetta twice if used successfully") { GIVEN { diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index 1ae84dd088d7..b4c0186bf0a4 100644 --- a/test/battle/move_effect/roost.c +++ b/test/battle/move_effect/roost.c @@ -111,24 +111,24 @@ SINGLE_BATTLE_TEST("Roost suppresses the user's Flying-typing this turn, then re SINGLE_BATTLE_TEST("Roost, if used by a Flying/Flying type, treats the user as a Normal-type (or Typeless in Gen. 4) until the end of the turn") { u32 damagingMove; - PARAMETRIZE{ damagingMove = MOVE_POUND; } - PARAMETRIZE{ damagingMove = MOVE_KARATE_CHOP; } - PARAMETRIZE{ damagingMove = MOVE_GUST; } - PARAMETRIZE{ damagingMove = MOVE_POISON_STING; } - PARAMETRIZE{ damagingMove = MOVE_EARTHQUAKE; } - PARAMETRIZE{ damagingMove = MOVE_ROCK_THROW; } - PARAMETRIZE{ damagingMove = MOVE_LEECH_LIFE; } - PARAMETRIZE{ damagingMove = MOVE_LICK; } - PARAMETRIZE{ damagingMove = MOVE_STEEL_WING; } - PARAMETRIZE{ damagingMove = MOVE_EMBER; } - PARAMETRIZE{ damagingMove = MOVE_WATER_GUN; } - PARAMETRIZE{ damagingMove = MOVE_VINE_WHIP; } - PARAMETRIZE{ damagingMove = MOVE_THUNDER_SHOCK; } - PARAMETRIZE{ damagingMove = MOVE_CONFUSION; } - PARAMETRIZE{ damagingMove = MOVE_ICE_BEAM; } - PARAMETRIZE{ damagingMove = MOVE_DRAGON_BREATH; } - PARAMETRIZE{ damagingMove = MOVE_BITE; } - PARAMETRIZE{ damagingMove = MOVE_DISARMING_VOICE; } + PARAMETRIZE { damagingMove = MOVE_POUND; } + PARAMETRIZE { damagingMove = MOVE_KARATE_CHOP; } + PARAMETRIZE { damagingMove = MOVE_GUST; } + PARAMETRIZE { damagingMove = MOVE_POISON_STING; } + PARAMETRIZE { damagingMove = MOVE_EARTHQUAKE; } + PARAMETRIZE { damagingMove = MOVE_ROCK_THROW; } + PARAMETRIZE { damagingMove = MOVE_LEECH_LIFE; } + PARAMETRIZE { damagingMove = MOVE_LICK; } + PARAMETRIZE { damagingMove = MOVE_STEEL_WING; } + PARAMETRIZE { damagingMove = MOVE_EMBER; } + PARAMETRIZE { damagingMove = MOVE_WATER_GUN; } + PARAMETRIZE { damagingMove = MOVE_VINE_WHIP; } + PARAMETRIZE { damagingMove = MOVE_THUNDER_SHOCK; } + PARAMETRIZE { damagingMove = MOVE_CONFUSION; } + PARAMETRIZE { damagingMove = MOVE_ICE_BEAM; } + PARAMETRIZE { damagingMove = MOVE_DRAGON_BREATH; } + PARAMETRIZE { damagingMove = MOVE_BITE; } + PARAMETRIZE { damagingMove = MOVE_DISARMING_VOICE; } GIVEN { ASSUME(gSpeciesInfo[SPECIES_TORNADUS].types[0] == TYPE_FLYING); @@ -179,24 +179,24 @@ SINGLE_BATTLE_TEST("Roost, if used by a Flying/Flying type, treats the user as a SINGLE_BATTLE_TEST("Roost, if used by a Mystery/Flying type, treats the user as a Mystery/Mystery type until the end of the turn") { u32 damagingMove; - PARAMETRIZE{ damagingMove = MOVE_POUND; } - PARAMETRIZE{ damagingMove = MOVE_KARATE_CHOP; } - PARAMETRIZE{ damagingMove = MOVE_GUST; } - PARAMETRIZE{ damagingMove = MOVE_POISON_STING; } - PARAMETRIZE{ damagingMove = MOVE_EARTHQUAKE; } - PARAMETRIZE{ damagingMove = MOVE_ROCK_THROW; } - PARAMETRIZE{ damagingMove = MOVE_LEECH_LIFE; } - PARAMETRIZE{ damagingMove = MOVE_LICK; } - PARAMETRIZE{ damagingMove = MOVE_STEEL_WING; } - PARAMETRIZE{ damagingMove = MOVE_EMBER; } - PARAMETRIZE{ damagingMove = MOVE_WATER_GUN; } - PARAMETRIZE{ damagingMove = MOVE_VINE_WHIP; } - PARAMETRIZE{ damagingMove = MOVE_THUNDER_SHOCK; } - PARAMETRIZE{ damagingMove = MOVE_CONFUSION; } - PARAMETRIZE{ damagingMove = MOVE_ICE_BEAM; } - PARAMETRIZE{ damagingMove = MOVE_DRAGON_BREATH; } - PARAMETRIZE{ damagingMove = MOVE_BITE; } - PARAMETRIZE{ damagingMove = MOVE_DISARMING_VOICE; } + PARAMETRIZE { damagingMove = MOVE_POUND; } + PARAMETRIZE { damagingMove = MOVE_KARATE_CHOP; } + PARAMETRIZE { damagingMove = MOVE_GUST; } + PARAMETRIZE { damagingMove = MOVE_POISON_STING; } + PARAMETRIZE { damagingMove = MOVE_EARTHQUAKE; } + PARAMETRIZE { damagingMove = MOVE_ROCK_THROW; } + PARAMETRIZE { damagingMove = MOVE_LEECH_LIFE; } + PARAMETRIZE { damagingMove = MOVE_LICK; } + PARAMETRIZE { damagingMove = MOVE_STEEL_WING; } + PARAMETRIZE { damagingMove = MOVE_EMBER; } + PARAMETRIZE { damagingMove = MOVE_WATER_GUN; } + PARAMETRIZE { damagingMove = MOVE_VINE_WHIP; } + PARAMETRIZE { damagingMove = MOVE_THUNDER_SHOCK; } + PARAMETRIZE { damagingMove = MOVE_CONFUSION; } + PARAMETRIZE { damagingMove = MOVE_ICE_BEAM; } + PARAMETRIZE { damagingMove = MOVE_DRAGON_BREATH; } + PARAMETRIZE { damagingMove = MOVE_BITE; } + PARAMETRIZE { damagingMove = MOVE_DISARMING_VOICE; } GIVEN { ASSUME(gSpeciesInfo[SPECIES_MOLTRES].types[0] == TYPE_FIRE); diff --git a/test/battle/move_effect/shell_side_arm.c b/test/battle/move_effect/shell_side_arm.c new file mode 100644 index 000000000000..f0b3dd74dc22 --- /dev/null +++ b/test/battle/move_effect/shell_side_arm.c @@ -0,0 +1,100 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Shell Side Arm can be countered if it is physical") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SHELL_SIDE_ARM); } + OPPONENT(SPECIES_REGICE) { Defense(100); SpDefense(200); } + } WHEN { + TURN { MOVE(player, MOVE_SHELL_SIDE_ARM); MOVE(opponent, MOVE_COUNTER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, opponent); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Shell Side Arm can be mirror coated if it is special") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SHELL_SIDE_ARM); } + OPPONENT(SPECIES_REGIROCK) { Defense(200); SpDefense(100); } + } WHEN { + TURN { MOVE(player, MOVE_SHELL_SIDE_ARM); MOVE(opponent, MOVE_MIRROR_COAT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponent); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Shell Side Arm does not change catogory mid-turn") +{ + s16 damage[3]; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SHELL_SIDE_ARM); } + OPPONENT(SPECIES_WOBBUFFET) { Defense(100); SpDefense(120); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SHELL_SIDE_ARM); } + TURN { MOVE(opponent, MOVE_LIGHT_SCREEN); MOVE(player, MOVE_SHELL_SIDE_ARM); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SHELL_SIDE_ARM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + EXPECT_EQ(damage[1], damage[2]); + } +} + +DOUBLE_BATTLE_TEST("Shell Side Arm is choosing it's type for each battler on the field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_SHELL_SIDE_ARM); } + PLAYER(SPECIES_WOBBUFFET) { Speed(20); } + OPPONENT(SPECIES_REGIROCK) { Speed(30); Defense(200); SpDefense(100); } + OPPONENT(SPECIES_REGICE) { Speed(30); Defense(100); SpDefense(200); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentRight); MOVE(opponentRight, MOVE_COUNTER); } + TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); MOVE(opponentLeft, MOVE_MIRROR_COAT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, opponentRight); + HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponentLeft); + HP_BAR(playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_SHELL_SIDE_ARM); } + PLAYER(SPECIES_WOBBUFFET) { Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(30); Defense(200); SpDefense(190); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(40); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); + MOVE(opponentRight, MOVE_LIGHT_SCREEN); + MOVE(opponentLeft, MOVE_MIRROR_COAT); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponentLeft); + HP_BAR(playerLeft); + } +} diff --git a/test/battle/move_effect/smack_down.c b/test/battle/move_effect/smack_down.c index 54bf6885af9e..d68cb75ec331 100644 --- a/test/battle/move_effect/smack_down.c +++ b/test/battle/move_effect/smack_down.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_SMACK_DOWN].additionalEffects->moveEffect == MOVE_EFFECT_SMACK_DOWN); + ASSUME(MoveHasAdditionalEffect(MOVE_SMACK_DOWN, MOVE_EFFECT_SMACK_DOWN) == TRUE); } SINGLE_BATTLE_TEST("Smack Down does not ground mons behind substitutes") diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 09168f8a1e75..311024a153ae 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].additionalEffects->moveEffect == MOVE_EFFECT_REMOVE_STATUS); + ASSUME(MoveHasAdditionalEffect(MOVE_SMELLING_SALTS, MOVE_EFFECT_REMOVE_STATUS) == TRUE); ASSUME(gMovesInfo[MOVE_SMELLING_SALTS].argument == STATUS1_PARALYSIS); } diff --git a/test/battle/move_effect/sparkling_aria.c b/test/battle/move_effect/sparkling_aria.c index 1bf7de2df487..0cbfdbc3e9de 100644 --- a/test/battle/move_effect/sparkling_aria.c +++ b/test/battle/move_effect/sparkling_aria.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].additionalEffects->moveEffect == MOVE_EFFECT_REMOVE_STATUS); + ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLING_ARIA, MOVE_EFFECT_REMOVE_STATUS) == TRUE); ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].argument == STATUS1_BURN); ASSUME(gMovesInfo[MOVE_SPARKLING_ARIA].soundMove == TRUE); } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index 6c6f8f156cb2..37f5fce077c5 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -56,7 +56,7 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} OPPONENT(SPECIES_WYNAUT) {Speed(10);} - OPPONENT(SPECIES_WYNAUT) {Speed(10);} + OPPONENT(SPECIES_ALAKAZAM) {Speed(100);} } WHEN { TURN { MOVE(playerRight, MOVE_STICKY_WEB); MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); } TURN {} @@ -65,13 +65,13 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos MESSAGE("A sticky web spreads out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); + MESSAGE("2 sent out Alakazam!"); + MESSAGE("Foe Alakazam was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Alakazam's Speed fell!"); MESSAGE("Foe Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wynaut's Speed fell!"); - MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's Speed fell!"); } } diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 000f5ff41afb..0b055edb12e1 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -10,8 +10,8 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar { u32 atkStat = 0; - PARAMETRIZE{ atkStat = 100; } - PARAMETRIZE{ atkStat = 50; } + PARAMETRIZE { atkStat = 100; } + PARAMETRIZE { atkStat = 50; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(200); } @@ -35,8 +35,8 @@ SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind { u32 atkStat = 0; - PARAMETRIZE{ atkStat = 100; } - PARAMETRIZE{ atkStat = 50; } + PARAMETRIZE { atkStat = 100; } + PARAMETRIZE { atkStat = 50; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(200); } @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar for (j = 0; j <= MAX_STAT_STAGE; j++) { if (j == DEFAULT_STAT_STAGE - 1) { continue; } // Ignore -6, because Strength Sap won't work otherwise - PARAMETRIZE{ statStage = j; } + PARAMETRIZE { statStage = j; } } GIVEN { diff --git a/test/battle/move_effect/tar_shot.c b/test/battle/move_effect/tar_shot.c new file mode 100644 index 000000000000..61aca1bec1aa --- /dev/null +++ b/test/battle/move_effect/tar_shot.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TAR_SHOT].effect == EFFECT_TAR_SHOT); +} + +SINGLE_BATTLE_TEST("Tar Shot doubles the effectiveness of Fire-type moves used on the target") +{ + s16 damage[2]; + u32 species; + + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + PARAMETRIZE { species = SPECIES_OMASTAR; } // Dual type with double resists + + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_OMASTAR].types[0] == TYPE_ROCK); + ASSUME(gSpeciesInfo[SPECIES_OMASTAR].types[1] == TYPE_WATER); + ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + TURN { MOVE(player, MOVE_TAR_SHOT); } + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAR_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent, captureDamage: &damage[1]); + if (species != SPECIES_OMASTAR) + MESSAGE("It's super effective!"); + else + MESSAGE("It's not very effective…"); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + } +} + diff --git a/test/battle/move_effect/thousand_arrows.c b/test/battle/move_effect/thousand_arrows.c index bff3706c34fa..ff1b041cba05 100644 --- a/test/battle/move_effect/thousand_arrows.c +++ b/test/battle/move_effect/thousand_arrows.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_THOUSAND_ARROWS].additionalEffects->moveEffect == MOVE_EFFECT_SMACK_DOWN); + ASSUME(MoveHasAdditionalEffect(MOVE_THOUSAND_ARROWS, MOVE_EFFECT_SMACK_DOWN) == TRUE); ASSUME(gMovesInfo[MOVE_THOUSAND_ARROWS].ignoreTypeIfFlyingAndUngrounded == TRUE); } diff --git a/test/battle/move_effect/toxic.c b/test/battle/move_effect/toxic.c index 35bfaa064486..804ed56b8f75 100644 --- a/test/battle/move_effect/toxic.c +++ b/test/battle/move_effect/toxic.c @@ -48,3 +48,21 @@ SINGLE_BATTLE_TEST("Toxic cannot miss if used by a Poison-type") } } } + +AI_SINGLE_BATTLE_TEST("AI avoids toxic when it can not poison target") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_SNORLAX; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_NACLI; ability = ABILITY_PURIFYING_SALT; } + PARAMETRIZE { species = SPECIES_BULBASAUR; ability = ABILITY_OVERGROW; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_TOXIC); } + } WHEN { + TURN { SCORE_EQ(opponent, MOVE_CELEBRATE, MOVE_TOXIC); } // Both get -10 + } +} diff --git a/test/battle/move_effect/two_turns_attack.c b/test/battle/move_effect/two_turns_attack.c index 9225afb48eba..4b7adc6f812d 100644 --- a/test/battle/move_effect/two_turns_attack.c +++ b/test/battle/move_effect/two_turns_attack.c @@ -243,8 +243,8 @@ SINGLE_BATTLE_TEST("Solar Beam and Solar Blade can be used instantly in Sunlight SINGLE_BATTLE_TEST("Solar Beam's power is halved in Rain", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -261,8 +261,8 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in Rain", s16 damage) SINGLE_BATTLE_TEST("Solar Blade's power is halved in Rain", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); @@ -279,8 +279,8 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in Rain", s16 damage) SINGLE_BATTLE_TEST("Solar Beam's power is halved in a Sandstorm", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; @@ -297,8 +297,8 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in a Sandstorm", s16 damage) SINGLE_BATTLE_TEST("Solar Blade's power is halved in a Sandstorm", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; @@ -315,8 +315,8 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in a Sandstorm", s16 damage) SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HAIL; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; @@ -333,8 +333,8 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage) SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HAIL; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; @@ -351,8 +351,8 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage) SINGLE_BATTLE_TEST("Solar Beam's power is halved in Snow", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -369,8 +369,8 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in Snow", s16 damage) SINGLE_BATTLE_TEST("Solar Blade's power is halved in Snow", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 98bcf95b2027..2c9dd7ed2441 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].additionalEffects->moveEffect == MOVE_EFFECT_REMOVE_STATUS); + ASSUME(MoveHasAdditionalEffect(MOVE_WAKE_UP_SLAP, MOVE_EFFECT_REMOVE_STATUS) == TRUE); ASSUME(gMovesInfo[MOVE_WAKE_UP_SLAP].argument == STATUS1_SLEEP); } diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c index 38c902f507f7..1656b60d87b0 100644 --- a/test/battle/move_effect/weather_ball.c +++ b/test/battle/move_effect/weather_ball.c @@ -9,8 +9,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Fire-type move in Sunlight", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SUNNY_DAY; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_MEGANIUM); @@ -27,8 +27,8 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Fire-type move SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Water-type move in Rain", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ARCANINE); @@ -45,8 +45,8 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Water-type mov SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Rock-type move in a Sandstorm", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); }; @@ -63,9 +63,9 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Rock-type move SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move in Hail and Snow", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_HAIL; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); }; diff --git a/test/battle/move_effect_secondary/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c index 67c361bac0eb..35c6e73d94b3 100644 --- a/test/battle/move_effect_secondary/dire_claw.c +++ b/test/battle/move_effect_secondary/dire_claw.c @@ -67,7 +67,8 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } diff --git a/test/battle/move_effect_secondary/thrash.c b/test/battle/move_effect_secondary/thrash.c index 5ceb56f6dc4c..83a49554d741 100644 --- a/test/battle/move_effect_secondary/thrash.c +++ b/test/battle/move_effect_secondary/thrash.c @@ -46,7 +46,6 @@ SINGLE_BATTLE_TEST("Thrash confuses the user after it finishes") SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 of 3") { GIVEN { - ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -61,7 +60,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 of 3") { GIVEN { - ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -73,9 +71,8 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 } } -SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") +SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3, Protect") { - KNOWN_FAILING; GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); PLAYER(SPECIES_WOBBUFFET); @@ -89,6 +86,22 @@ SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") } } +SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3, Immunity") +{ + GIVEN { + ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GENGAR); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { SKIP_TURN(player); } + TURN { SWITCH(opponent, 1); SKIP_TURN(player); } + } SCENE { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + } +} + SINGLE_BATTLE_TEST("Petal Dance does not lock mons that copy the move with Dancer") { GIVEN { diff --git a/test/battle/move_effects_combined/hurricane.c b/test/battle/move_effects_combined/hurricane.c index eab843e7209f..61acac664994 100644 --- a/test/battle/move_effects_combined/hurricane.c +++ b/test/battle/move_effects_combined/hurricane.c @@ -32,4 +32,42 @@ SINGLE_BATTLE_TEST("Hurricane bypasses accuracy checks in Rain") NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } } } -TO_DO_BATTLE_TEST("Hurricane Veil can hit airborne targets") // Fly, Bounce, Sky Drop + +SINGLE_BATTLE_TEST("Hurricane can hit airborne targets (Fly, Bounce)") +{ + u16 move; + PARAMETRIZE { move = MOVE_FLY; } + PARAMETRIZE { move = MOVE_BOUNCE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE); + ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_FLY].argument)) == STATUS3_ON_AIR); + ASSUME(gMovesInfo[MOVE_BOUNCE].effect == EFFECT_SEMI_INVULNERABLE); + ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_BOUNCE].argument)) == STATUS3_ON_AIR); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(move); } + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_HURRICANE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HURRICANE, player); + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} + +DOUBLE_BATTLE_TEST("Hurricane can hit airborne targets (Sky Drop)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SKY_DROP].effect == EFFECT_SKY_DROP); + ASSUME(UNCOMPRESS_BITS(HIHALF(gMovesInfo[MOVE_SKY_DROP].argument)) == STATUS3_ON_AIR); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_SKY_DROP, target: opponentLeft); MOVE(playerRight, MOVE_HURRICANE, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKY_DROP, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HURRICANE, playerRight); + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} diff --git a/test/battle/move_flags/ignores_target_ability.c b/test/battle/move_flags/ignores_target_ability.c new file mode 100644 index 000000000000..2836f4838ec0 --- /dev/null +++ b/test/battle/move_flags/ignores_target_ability.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SUNSTEEL_STRIKE].ignoresTargetAbility); + ASSUME(gMovesInfo[MOVE_MOONGEIST_BEAM].ignoresTargetAbility); + ASSUME(gMovesInfo[MOVE_PHOTON_GEYSER].ignoresTargetAbility); +} + +SINGLE_BATTLE_TEST("ignoresTargetAbility moves do not ignore the attacker's own ability", s16 damage) +{ + u32 ability, move; + + PARAMETRIZE { move = MOVE_SUNSTEEL_STRIKE; ability = ABILITY_MAGIC_GUARD; } + PARAMETRIZE { move = MOVE_SUNSTEEL_STRIKE; ability = ABILITY_UNAWARE; } + PARAMETRIZE { move = MOVE_MOONGEIST_BEAM; ability = ABILITY_MAGIC_GUARD; } + PARAMETRIZE { move = MOVE_MOONGEIST_BEAM; ability = ABILITY_UNAWARE; } + PARAMETRIZE { move = MOVE_PHOTON_GEYSER; ability = ABILITY_MAGIC_GUARD; } + PARAMETRIZE { move = MOVE_PHOTON_GEYSER; ability = ABILITY_UNAWARE; } + + ASSUME(gAbilitiesInfo[ABILITY_UNAWARE].breakable); + ASSUME(gMovesInfo[MOVE_IRON_DEFENSE].effect == EFFECT_DEFENSE_UP_2); + ASSUME(gMovesInfo[MOVE_AMNESIA].effect == EFFECT_SPECIAL_DEFENSE_UP_2); + + GIVEN { + PLAYER(SPECIES_CLEFABLE) { Speed(1); Ability(ability); } + OPPONENT(SPECIES_ARON) { Speed(2); } + } WHEN { + if (gMovesInfo[move].category == DAMAGE_CATEGORY_PHYSICAL) + TURN { MOVE(opponent, MOVE_IRON_DEFENSE); MOVE(player, move); } + else + TURN { MOVE(opponent, MOVE_AMNESIA); MOVE(player, move); } + } SCENE { + if (gMovesInfo[move].category == DAMAGE_CATEGORY_PHYSICAL) + ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_DEFENSE, opponent); + else + ANIMATION(ANIM_TYPE_MOVE, MOVE_AMNESIA, opponent); + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, UQ_4_12(2.0), results[3].damage); + EXPECT_MUL_EQ(results[4].damage, UQ_4_12(2.0), results[5].damage); + } +} + +SINGLE_BATTLE_TEST("ignoresTargetAbility moves do ignore target's abilities", s16 damage) +{ + u32 ability, move; + + PARAMETRIZE { move = MOVE_SUNSTEEL_STRIKE; ability = ABILITY_INNER_FOCUS; } + PARAMETRIZE { move = MOVE_SUNSTEEL_STRIKE; ability = ABILITY_MULTISCALE; } + PARAMETRIZE { move = MOVE_MOONGEIST_BEAM; ability = ABILITY_INNER_FOCUS; } + PARAMETRIZE { move = MOVE_MOONGEIST_BEAM; ability = ABILITY_MULTISCALE; } + PARAMETRIZE { move = MOVE_PHOTON_GEYSER; ability = ABILITY_INNER_FOCUS; } + PARAMETRIZE { move = MOVE_PHOTON_GEYSER; ability = ABILITY_MULTISCALE; } + + ASSUME(gAbilitiesInfo[ABILITY_MULTISCALE].breakable); + + GIVEN { + PLAYER(SPECIES_AZUMARILL); + OPPONENT(SPECIES_DRAGONITE) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_EQ(results[2].damage, results[3].damage); + EXPECT_EQ(results[4].damage, results[5].damage); + } +} diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index c49bd7a3f250..4da40589fb54 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -35,3 +35,23 @@ SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); } } + +AI_SINGLE_BATTLE_TEST("AI avoids Will-o-Wisp when it can not burn target") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BUIZEL; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_ARCTIBAX; ability = ABILITY_THERMAL_EXCHANGE; } + PARAMETRIZE { species = SPECIES_NACLI; ability = ABILITY_PURIFYING_SALT; } + PARAMETRIZE { species = SPECIES_CHARMANDER; ability = ABILITY_BLAZE; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_WILL_O_WISP); } + } WHEN { + TURN { SCORE_EQ(opponent, MOVE_CELEBRATE, MOVE_WILL_O_WISP); } // Both get -10 + } +} diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index b6edaf26352f..558ce4fc3752 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -42,3 +42,21 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") MESSAGE("Wobbuffet is paralyzed! It can't move!"); } } + +AI_SINGLE_BATTLE_TEST("AI avoids Thunder Wave when it can not paralyse target") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_HITMONLEE; ability = ABILITY_LIMBER; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_NACLI; ability = ABILITY_PURIFYING_SALT; } + PARAMETRIZE { species = SPECIES_PIKACHU; ability = ABILITY_STATIC; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_THUNDER_WAVE); } + } WHEN { + TURN { SCORE_EQ(opponent, MOVE_CELEBRATE, MOVE_THUNDER_WAVE); } // Both get -10 + } +} diff --git a/test/battle/status1/sleep.c b/test/battle/status1/sleep.c index b3dd403eb1e8..f42f4bd71411 100644 --- a/test/battle/status1/sleep.c +++ b/test/battle/status1/sleep.c @@ -21,3 +21,21 @@ SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") MESSAGE("Wobbuffet used Celebrate!"); } } + +AI_SINGLE_BATTLE_TEST("AI avoids hypnosis when it can not put target to sleep") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_HOOTHOOT; ability = ABILITY_INSOMNIA; } + PARAMETRIZE { species = SPECIES_MANKEY; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_NACLI; ability = ABILITY_PURIFYING_SALT; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_HYPNOSIS); } + } WHEN { + TURN { SCORE_EQ(opponent, MOVE_CELEBRATE, MOVE_HYPNOSIS); } // Both get -10 + } +} diff --git a/test/battle/status2/confusion.c b/test/battle/status2/confusion.c new file mode 100644 index 000000000000..3c86e5d5552b --- /dev/null +++ b/test/battle/status2/confusion.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") +{ + s16 damage[2]; + + ASSUME(gMovesInfo[MOVE_TACKLE].power == 40); + + PASSES_RANDOMLY(B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50, 100, RNG_CONFUSION); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }; + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, WITH_RNG(RNG_DAMAGE_MODIFIER, 0)); MOVE(player, MOVE_CONFUSE_RAY); } + TURN; + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); + MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("Foe Wobbuffet is confused!"); + MESSAGE("It hurt itself in its confusion!"); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 678352dc5ec1..862c9052fd30 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -85,3 +85,27 @@ SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") MESSAGE("The grass disappeared from the battlefield."); } } + +SINGLE_BATTLE_TEST("Grassy Terrain heals the pokemon on the field for the duration of the terrain, including last turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); + MESSAGE("Grass grew to cover the battlefield!"); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The grass disappeared from the battlefield."); + } +} diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c new file mode 100644 index 000000000000..37caa20bc7f9 --- /dev/null +++ b/test/battle/terrain/starting_terrain.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "event_data.h" +#include "test/battle.h" + +#if B_VAR_STARTING_STATUS != 0 + +SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginning of battle and lasts infinitely long") +{ + u16 terrain; + + PARAMETRIZE { terrain = STARTING_STATUS_GRASSY_TERRAIN; } + PARAMETRIZE { terrain = STARTING_STATUS_PSYCHIC_TERRAIN; } + PARAMETRIZE { terrain = STARTING_STATUS_MISTY_TERRAIN; } + PARAMETRIZE { terrain = STARTING_STATUS_ELECTRIC_TERRAIN; } + + VarSet(B_VAR_STARTING_STATUS, terrain); + VarSet(B_VAR_STARTING_STATUS_TIMER, 0); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + // More than 5 turns + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + } SCENE { + switch (terrain) { + case STARTING_STATUS_GRASSY_TERRAIN: + MESSAGE("Grass grew to cover the battlefield!"); + break; + case STARTING_STATUS_PSYCHIC_TERRAIN: + MESSAGE("The battlefield got weird!"); + break; + case STARTING_STATUS_MISTY_TERRAIN: + MESSAGE("Mist swirled about the battlefield!"); + break; + case STARTING_STATUS_ELECTRIC_TERRAIN: + MESSAGE("An electric current runs across the battlefield!"); + break; + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); + MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The electricity disappeared from the battlefield."); + MESSAGE("The mist disappeared from the battlefield."); + MESSAGE("The grass disappeared from the battlefield."); + } + } THEN { + VarSet(B_VAR_STARTING_STATUS, 0); + } +} + +SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts only 5 turns") +{ + bool32 viaMove; + + PARAMETRIZE { viaMove = TRUE; } + PARAMETRIZE { viaMove = FALSE; } + + VarSet(B_VAR_STARTING_STATUS, STARTING_STATUS_ELECTRIC_TERRAIN); + VarSet(B_VAR_STARTING_STATUS_TIMER, 0); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(viaMove == TRUE ? ABILITY_SHADOW_TAG : ABILITY_GRASSY_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + // More than 5 turns + TURN { MOVE(player, viaMove == TRUE ? MOVE_GRASSY_TERRAIN : MOVE_CELEBRATE); } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + TURN { ; } + } SCENE { + // Electric Terrain at battle's start + MESSAGE("An electric current runs across the battlefield!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); + // Player uses Grassy Terrain + if (viaMove) { + MESSAGE("Wobbuffet used GrssyTerrain!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); + MESSAGE("Grass grew to cover the battlefield!"); + } else { + ABILITY_POPUP(player, ABILITY_GRASSY_SURGE); + MESSAGE("Grass grew to cover the battlefield!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); + } + + // 5 turns + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("The grass disappeared from the battlefield."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); + } THEN { + VarSet(B_VAR_STARTING_STATUS, 0); + } +} + +#endif // B_VAR_STARTING_STATUS diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 5d7a6f1713cf..2f3f4e7ca266 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -20,8 +20,8 @@ SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn") SINGLE_BATTLE_TEST("Sandstorm multiplies the special defense of Rock-types by 1.5x", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_SANDSTORM; } - PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { ASSUME(gMovesInfo[MOVE_SWIFT].category == DAMAGE_CATEGORY_SPECIAL); PLAYER(SPECIES_WOBBUFFET) ; diff --git a/test/battle/weather/snow.c b/test/battle/weather/snow.c index c617f651c495..6ce3e1e0f2fb 100644 --- a/test/battle/weather/snow.c +++ b/test/battle/weather/snow.c @@ -13,8 +13,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Snow multiplies the defense of Ice-types by 1.5x", s16 damage) { u16 move; - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } - PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GLALIE); diff --git a/test/species.c b/test/species.c index d412dd005ad5..709985544381 100644 --- a/test/species.c +++ b/test/species.c @@ -1,4 +1,5 @@ #include "global.h" +#include "string_util.h" #include "test/test.h" #include "constants/form_change_types.h" @@ -6,12 +7,14 @@ TEST("Form species ID tables are shared between all forms") { u32 i; u32 species = SPECIES_NONE; + const u16 *formSpeciesIdTable; + for (i = 0; i < NUM_SPECIES; i++) { if (gSpeciesInfo[i].formSpeciesIdTable) PARAMETRIZE { species = i; } } - const u16 *formSpeciesIdTable = gSpeciesInfo[species].formSpeciesIdTable; + formSpeciesIdTable = gSpeciesInfo[species].formSpeciesIdTable; for (i = 0; formSpeciesIdTable[i] != FORM_SPECIES_END; i++) { u32 formSpeciesId = formSpeciesIdTable[i]; @@ -23,13 +26,16 @@ TEST("Form change tables contain only forms in the form species ID table") { u32 i, j; u32 species = SPECIES_NONE; + const struct FormChange *formChangeTable; + const u16 *formSpeciesIdTable; + for (i = 0; i < NUM_SPECIES; i++) { if (gSpeciesInfo[i].formChangeTable) PARAMETRIZE { species = i; } } - const struct FormChange *formChangeTable = gSpeciesInfo[species].formChangeTable; - const u16 *formSpeciesIdTable = gSpeciesInfo[species].formSpeciesIdTable; + formChangeTable = gSpeciesInfo[species].formChangeTable; + formSpeciesIdTable = gSpeciesInfo[species].formSpeciesIdTable; EXPECT(formSpeciesIdTable); for (i = 0; formChangeTable[i].method != FORM_CHANGE_TERMINATOR; i++) @@ -51,12 +57,14 @@ TEST("Form change targets have the appropriate species flags") { u32 i; u32 species = SPECIES_NONE; + const struct FormChange *formChangeTable; + for (i = 0; i < NUM_SPECIES; i++) { if (gSpeciesInfo[i].formChangeTable) PARAMETRIZE { species = i; } } - const struct FormChange *formChangeTable = gSpeciesInfo[species].formChangeTable; + formChangeTable = gSpeciesInfo[species].formChangeTable; for (i = 0; formChangeTable[i].method != FORM_CHANGE_TERMINATOR; i++) { const struct SpeciesInfo *targetSpeciesInfo = &gSpeciesInfo[formChangeTable[i].targetSpecies]; @@ -78,3 +86,62 @@ TEST("Form change targets have the appropriate species flags") } } } + +TEST("No species has two evolutions that use the evolution tracker") +{ + u32 i; + u32 species = SPECIES_NONE; + u32 evolutionTrackerEvolutions; + bool32 hasGenderBasedRecoil; + const struct Evolution *evolutions; + + for (i = 0; i < NUM_SPECIES; i++) + { + if (GetSpeciesEvolutions(i) != NULL) PARAMETRIZE { species = i; } + } + + evolutionTrackerEvolutions = 0; + hasGenderBasedRecoil = FALSE; + evolutions = GetSpeciesEvolutions(species); + + for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + { + if (evolutions[i].method == EVO_LEVEL_MOVE_TWENTY_TIMES + #ifdef EVO_DEFEAT_WITH_ITEM + || evolutions[i].method == EVO_DEFEAT_WITH_ITEM + #endif //EVO_DEFEAT_WITH_ITEM + #ifdef EVO_OVERWORLD_STEPS + || evolutions[i].method == EVO_OVERWORLD_STEPS + #endif //EVO_OVERWORLD_STEPS + ) + evolutionTrackerEvolutions++; + + if (evolutions[i].method == EVO_LEVEL_RECOIL_DAMAGE_MALE + || evolutions[i].method == EVO_LEVEL_RECOIL_DAMAGE_FEMALE) + { + // Special handling for these since they can be combined as the evolution tracker field is used for the same purpose + if (!hasGenderBasedRecoil) + { + hasGenderBasedRecoil = TRUE; + evolutionTrackerEvolutions++; + } + } + } + + EXPECT(evolutionTrackerEvolutions < 2); +} + +extern const u8 gFallbackPokedexText[]; + +TEST("Every species has a description") +{ + u32 i; + u32 species = SPECIES_NONE; + for (i = 1; i < NUM_SPECIES; i++) + { + if (IsSpeciesEnabled(i)) + PARAMETRIZE { species = i; } + } + + EXPECT_NE(StringCompare(GetSpeciesPokedexDescription(species), gFallbackPokedexText), 0); +} diff --git a/test/test_runner.c b/test/test_runner.c index f5b72245230b..cbe9a6c6e07b 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -668,7 +668,11 @@ static s32 MgbaVPrintf_(const char *fmt, va_list va) /* Entry point for the Debugging and Control System. Handles illegal * instructions, which are typically caused by branching to an invalid * address. */ +#if MODERN __attribute__((naked, section(".dacs"), target("arm"))) +#else +__attribute__((naked, section(".dacs"))) +#endif void DACSEntry(void) { asm(".arm\n\ diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 30183a6dc811..376c3be8a55b 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1553,7 +1553,7 @@ void OpenPokemon(u32 sourceLine, u32 side, u32 species) DATA.currentSide = side; DATA.currentPartyIndex = *partySize; DATA.currentMon = &party[DATA.currentPartyIndex]; - DATA.gender = MON_MALE; + DATA.gender = 0xFF; // Male DATA.nature = NATURE_HARDY; (*partySize)++; diff --git a/tools/gbagfx/jasc_pal.c b/tools/gbagfx/jasc_pal.c index e5ba9c3c2f25..8d4bb137d542 100644 --- a/tools/gbagfx/jasc_pal.c +++ b/tools/gbagfx/jasc_pal.c @@ -46,10 +46,14 @@ void ReadJascPaletteLine(FILE *fp, char *line) } if (c == '\n') - FATAL_ERROR("LF line endings aren't supported.\n"); + { + line[length] = 0; + + return; + } if (c == EOF) - FATAL_ERROR("Unexpected EOF. No CRLF at end of file.\n"); + FATAL_ERROR("Unexpected EOF. No LF or CRLF at end of file.\n"); if (c == 0) FATAL_ERROR("NUL character in file.\n");