diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 32a1ce2626..310f92c118 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,19 +23,17 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.9.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.6 + - 1.8.5 + - 1.8.4 - 1.8.3 - 1.8.2 - 1.8.1 - 1.8.0 - - 1.7.4 - - 1.7.3 - - 1.7.2 - - 1.7.1 - - 1.7.0 - - pre-1.7.0 + - pre-1.8.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 3e21436c1a..9fcb1595a2 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,18 +23,17 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.9.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.6 + - 1.8.5 + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - - 1.7.4 - - 1.7.3 - - 1.7.2 - - 1.7.1 - - 1.7.0 - - pre-1.7.0 + - pre-1.8.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index fcbf4b8884..73d9fd11d3 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,18 +23,17 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.9.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.6 + - 1.8.5 + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - - 1.7.4 - - 1.7.3 - - 1.7.2 - - 1.7.1 - - 1.7.0 - - pre-1.7.0 + - pre-1.8.0 validations: required: true - type: input diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 244976ea1e..874ebdd590 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -26,8 +26,18 @@ jobs: 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: @@ -35,3 +45,4 @@ jobs: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 + if: steps.check_pages.outcome == 'success' diff --git a/CHANGELOG.md b/CHANGELOG.md index f513818cbb..0999ae5f7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,48 +1,53 @@ # Pokeemerald-Expansion Changelogs +## 1.9.x +- **[Version 1.9.0](docs/changelogs/1.9.x/1.9.0.md) - ✨ Feature Release** + ## 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.6](docs/changelogs/1.8.x/1.8.6.md) - 🧹 Bugfix 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 fe8ea2e391..6349d24fbb 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -33,27 +33,23 @@ WSL1 is the preferred terminal to build **pokeemerald Expansion**. The following - 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). +1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following commands (Right Click or Shift+Insert is paste in the Powershell). ```powershell - dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart + wsl --install -d Ubuntu --enable-wsl1 ``` 2. Once the process finishes, restart your machine. -3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice. +3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. + + ```powershell + wsl --set-version Ubuntu 1 + ```
- Note for advanced users... + Note... - > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. -
- -4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. -
- Notes... - - > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. - > Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number). + > WSL may open automatically after restarting, but you can ignore it for now.
### Setting up WSL1 @@ -475,6 +471,20 @@ 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!)_ diff --git a/Makefile b/Makefile index 74e6449236..055bc848b2 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ 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) @@ -346,7 +346,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/global.h | tail -n1) ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) -%.h: %.party tools ; $(CPP) $(CPPFLAGS) - < $< | sed '/#[^p]/d' | $(TRAINERPROC) -o $@ -i $< - +%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | sed '/#[^p]/d' | $(TRAINERPROC) -o $@ -i $< - endif ifeq ($(MODERN),0) @@ -384,7 +384,7 @@ ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c ifeq (,$(KEEP_TEMPS)) @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - else @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s @@ -396,7 +396,7 @@ define C_DEP $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else @$$(CPP) $$(CPPFLAGS) $$< -o $$(C_BUILDDIR)/$3.i @$$(PREPROC) $$(C_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(C_BUILDDIR)/$3.s @@ -411,7 +411,7 @@ ifeq ($(NODEP),1) $(GFLIB_BUILDDIR)/%.o: $(GFLIB_SUBDIR)/%.c $$(c_dep) ifeq (,$(KEEP_TEMPS)) @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - else @$(CPP) $(CPPFLAGS) $< -o $(GFLIB_BUILDDIR)/$*.i @$(PREPROC) $(GFLIB_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(GFLIB_BUILDDIR)/$*.s @@ -423,7 +423,7 @@ define GFLIB_DEP $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else @$$(CPP) $$(CPPFLAGS) $$< -o $$(GFLIB_BUILDDIR)/$3.i @$$(PREPROC) $$(GFLIB_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(GFLIB_BUILDDIR)/$3.s @@ -436,11 +436,11 @@ endif ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -i $$< charmap.txt | $(AS) $(ASFLAGS) -o $@ else define SRC_ASM_DATA_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(PREPROC) -ie $$< charmap.txt | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(C_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -458,7 +458,7 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $$< charmap.txt | $(AS) $(ASFLAGS) -o $@ else $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -484,7 +484,7 @@ $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scr define TEST_DEP $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - endef $(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) @@ -509,7 +509,12 @@ $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ $(FIX) $@ -p --silent -agbcc: all +# Uncomment the next line, and then comment the 4 lines after it to reenable agbcc. +#agbcc: all +agbcc: + @echo "'make agbcc' is deprecated as of pokeemerald-expansion 1.9 and will be removed in 1.10." + @echo "Search for 'agbcc: all' in Makefile to reenable agbcc." + @exit 1 modern: all diff --git a/README.md b/README.md index fabb3f86c6..3a87ac27f6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.9.0 https://github.com/rh-hideout/pokeemerald-expansion/ ``` ## What features are included? diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index ecfea5c197..1b35991809 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -315,8 +315,14 @@ .Lsprite_\@_2: .endm -.macro createdragondartsprite anim_battler:req, subpriority_offset:req, argv:vararg + .macro jumpifmovetypeequal type:req, jumpInstr:req .byte 0x33 + .byte \type + .4byte \jumpInstr + .endm + + .macro createdragondartsprite anim_battler:req, subpriority_offset:req, argv:vararg + .byte 0x34 .if \anim_battler == ANIM_TARGET .byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F) .else diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index a28613e32b..12439efc4a 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -838,7 +838,7 @@ .byte 0x95 .endm - .macro weatherdamage + .macro unused_96 .byte 0x96 .endm @@ -1359,15 +1359,15 @@ .macro restoretarget callnative BS_RestoreTarget .endm - + .macro saveattacker callnative BS_SaveAttacker .endm - + .macro restoreattacker callnative BS_RestoreAttacker .endm - + .macro metalburstdamagecalculator failInstr:req callnative BS_CalcMetalBurstDmg .4byte \failInstr @@ -1520,18 +1520,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 @@ -1568,10 +1560,6 @@ .4byte \failInstr .endm - .macro damagenontypes - callnative BS_DamageNonTypes - .endm - .macro trysetstatus1, ptr:req callnative BS_TrySetStatus1 .4byte \ptr @@ -1664,14 +1652,24 @@ .4byte \failInstr .endm + .macro copyfoesstatincrease battler:req, failInstr:req + callnative BS_CopyFoesStatIncrease + .byte \battler + .4byte \failInstr + .endm + .macro removeweather callnative BS_RemoveWeather .endm - + .macro applyterastallization callnative BS_ApplyTerastallization .endm + .macro damagetoquartertargethp + callnative BS_DamageToQuarterTargetHP + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/asm/macros/event.inc b/asm/macros/event.inc index bab06a0da1..83338673cf 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1055,7 +1055,7 @@ .endm @ creates a mon for a given party and slot - @ otherwise + @ otherwise .macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType callnative ScrCmd_createmon .byte \side @ 0 - player, 1 - opponent @@ -2095,6 +2095,11 @@ special CreateEnemyEventMon .endm + .macro setdynamicaifunc func:req + callnative ScriptSetDynamicAiFunc + .4byte \func + .endm + @ Set up a totem boost for the next battle. @ 'battler' is the position of the mon you want to gain a boost. see B_POSITION_xx in include/constants/battle.h. @ The rest of the arguments are the stat change values to each stat. @@ -2295,9 +2300,24 @@ .byte \sourceId .byte \targetId .endm - + @ set the wild double battle flag @ can be used in conjunection with createmon to set up a wild battle with 2 player mons vs. 1 enemy mon .macro setwilddoubleflag callnative ScriptSetDoubleBattleFlag .endm + + @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will stop the flow of time. + .macro pausefakertc + callnative Script_PauseFakeRtc + .endm + + @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time. + .macro resumefakertc + callnative Script_ResumeFakeRtc + .endm + + @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time if paused, and stop the flow of time otherwise. + .macro togglefakertc + callnative Script_ToggleFakeRtc + .endm diff --git a/asmdiff.sh b/asmdiff.sh index f5a7010747..aca670e324 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 e98274d2f6..f842b8c113 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -85,6 +85,7 @@ gBattleAnims_General:: .4byte General_Fog @ B_ANIM_FOG_CONTINUES .4byte General_TeraCharge @ B_ANIM_TERA_CHARGE .4byte General_TeraActivate @ B_ANIM_TERA_ACTIVATE + .4byte General_SimpleHeal @ B_ANIM_SIMPLE_HEAL .align 2 gBattleAnims_Special:: @@ -16899,6 +16900,59 @@ ElectroShotUnleash: blendoff end +Move_IVY_CUDGEL:: + loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS + loadspritegfx ANIM_TAG_WOOD_HAMMER + loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 4 + jumpifmovetypeequal TYPE_FIRE, IvyCudgelFire + jumpifmovetypeequal TYPE_ROCK, IvyCudgelRock + jumpifmovetypeequal TYPE_WATER, IvyCudgelWater + createsprite gIvyCudgelSpriteTemplate, ANIM_TARGET, 2 + delay 60 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 + delay 18 + createvisualtask AnimTask_SquishTarget, 0x2 + delay 6 + call WoodHammerImpact + waitforvisualfinish + end +IvyCudgelFire: + loadspritegfx ANIM_TAG_IVY_CUDGEL_FIRE + createsprite gIvyCudgelFireSpriteTemplate, ANIM_TARGET, 2 + delay 60 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 + delay 18 + createvisualtask AnimTask_SquishTarget, 0x2 + delay 6 + call WoodHammerImpact + waitforvisualfinish + end +IvyCudgelRock: + loadspritegfx ANIM_TAG_IVY_CUDGEL_ROCK + createsprite gIvyCudgelRockSpriteTemplate, ANIM_TARGET, 2 + delay 60 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 + delay 18 + createvisualtask AnimTask_SquishTarget, 0x2 + delay 6 + call WoodHammerImpact + waitforvisualfinish + end +IvyCudgelWater: + loadspritegfx ANIM_TAG_IVY_CUDGEL_WATER + createsprite gIvyCudgelWaterSpriteTemplate, ANIM_TARGET, 2 + delay 60 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 + delay 18 + createvisualtask AnimTask_SquishTarget, 0x2 + delay 6 + call WoodHammerImpact + waitforvisualfinish + end + Move_SPICY_EXTRACT:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -16944,8 +16998,22 @@ Move_SPICY_EXTRACT:: waitforvisualfinish end -Move_TERA_BLAST:: Move_AXE_KICK:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 7 + createsprite gAxeKickSpriteTemplate, ANIM_TARGET, 3 + delay 2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 + createvisualtask AnimTask_SquishTargetShort, 2 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 + end + +Move_TERA_BLAST:: Move_ORDER_UP:: Move_SPIN_OUT:: Move_POPULATION_BOMB:: @@ -16974,7 +17042,6 @@ Move_MAGICAL_TORQUE:: Move_PSYBLADE:: Move_BLOOD_MOON:: Move_MATCHA_GOTCHA:: -Move_IVY_CUDGEL:: Move_TERA_STARSTORM:: Move_FICKLE_BEAM:: Move_THUNDERCLAP:: @@ -27347,6 +27414,12 @@ General_WishHeal: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK end +General_SimpleHeal: + loadspritegfx ANIM_TAG_BLUE_STAR + call HealingEffect + waitforvisualfinish + end + General_IllusionOff: monbg ANIM_TARGET createvisualtask AnimTask_TransformMon, 2, 1, 0 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 1775e3607f..3b38c00478 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -20,6 +20,16 @@ .section script_data, "aw", %progbits +BattleScript_DamageToQuarterTargetHP:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + damagetoquartertargethp + goto BattleScript_HitFromAtkAnimation + BattleScript_Terastallization:: @ TODO: no string prints in S/V, but right now this helps with clarity printstring STRINGID_PKMNSTORINGENERGY @@ -517,9 +527,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 @@ -843,13 +853,11 @@ BattleScript_OctolockEndTurn:: playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef -BattleScript_OctolockTryLowerDef: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_OctolockTryLowerSpDef: setstatchanger STAT_SPDEF, 1, TRUE statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd -BattleScript_OctolockTurnDmgPrintMsg: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_OctlockTurnDmgEnd: @@ -989,7 +997,6 @@ BattleScript_EffectStuffCheeks:: jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation -BattleScript_StuffCheeksEatBerry: setbyte sBERRY_OVERRIDE, 1 orword gHitMarker, HITMARKER_DISABLE_ANIMATION consumeberry BS_ATTACKER, TRUE @@ -1201,10 +1208,6 @@ BattleScript_StrengthSapLower: waitmessage B_WAIT_TIME_LONG goto BattleScript_StrengthSapHp @ Drain HP without lowering a stat -BattleScript_StrengthSapTryHp: - jumpiffullhp BS_ATTACKER, BattleScript_ButItFailed - attackanimation - waitanimation BattleScript_StrengthSapHp: jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd @@ -1335,8 +1338,6 @@ BattleScript_EffectPartingShotTrySpAtk: BattleScript_EffectPartingShotSwitch: moveendall goto BattleScript_MoveSwitch -BattleScript_PartingShotEnd: - end BattleScript_EffectPowder:: attackcanceler @@ -1539,7 +1540,6 @@ BattleScript_RototillerLoop: jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_RototillerCantRaiseMultipleStats BattleScript_RototillerCheckAffected: jumpifnotrototilleraffected BS_TARGET, BattleScript_RototillerNoEffect -BattleScript_RototillerAffected: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 setstatchanger STAT_ATK, 1, FALSE @@ -1604,6 +1604,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 @@ -1769,7 +1770,6 @@ BattleScript_EffectAutotomize:: BattleScript_AutotomizeAttackAnim:: attackanimation waitanimation -BattleScript_AutotomizeDoAnim:: setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 BattleScript_AutotomizePrintString:: @@ -2680,7 +2680,6 @@ BattleScript_TryTailwindAbilitiesLoop_Iter: BattleScript_TryTailwindAbilitiesLoop_Increment: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TryTailwindAbilitiesLoop_Iter -BattleScript_TryTailwindAbilitiesLoop_Ret: restoretarget return @@ -2781,7 +2780,6 @@ BattleScript_EffectPlaceholder:: goto BattleScript_MoveEnd BattleScript_EffectHit:: -BattleScript_HitFromAtkCanceler:: attackcanceler BattleScript_HitFromAccCheck:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -3274,14 +3272,6 @@ BattleScript_RoarBlockedByDynamax: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectMultiHit:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - setmultihitcounter 0 - initmultihitstring - sethword sMULTIHIT_EFFECT, 0 BattleScript_MultiHitLoop:: jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings @@ -3694,10 +3684,9 @@ BattleScript_EffectParalyze:: jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed typecalc -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 @@ -4621,7 +4610,6 @@ BattleScript_EffectTeleport:: .else jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FailedFromAtkCanceler .endif -BattleScript_EffectTeleportTryToRunAway: attackcanceler attackstring ppreduce @@ -5496,7 +5484,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 @@ -5577,13 +5565,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 @@ -5595,9 +5583,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:: @@ -5909,33 +5898,22 @@ BattleScript_DamagingWeatherContinues:: waitmessage B_WAIT_TIME_LONG playanimation_var BS_ATTACKER, sB_ANIM_ARG1 setbyte gBattleCommunication, 0 -BattleScript_DamagingWeatherLoop:: - copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 - weatherdamage - jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamagingWeatherLoopIncrement - jumpifword CMP_COMMON_BITS gBattleMoveDamage, 1 << 31, BattleScript_DamagingWeatherHeal + end2 + +BattleScript_DamagingWeather:: printfromtable gSandStormHailDmgStringIds waitmessage B_WAIT_TIME_LONG effectivenesssound - hitanimation BS_ATTACKER - goto BattleScript_DamagingWeatherHpChange -BattleScript_DamagingWeatherHeal: - call BattleScript_AbilityPopUp + hitanimation BS_SCRIPTING + goto BattleScript_DoTurnDmg + +BattleScript_IceBodyHeal:: + call BattleScript_AbilityPopUpScripting + playanimation BS_SCRIPTING, B_ANIM_SIMPLE_HEAL + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING printstring STRINGID_ICEBODYHPGAIN waitmessage B_WAIT_TIME_LONG -BattleScript_DamagingWeatherHpChange: - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER - checkteamslost BattleScript_DamagingWeatherLoopIncrement -BattleScript_DamagingWeatherLoopIncrement:: - jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd - addbyte gBattleCommunication, 1 - jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop -BattleScript_DamagingWeatherContinuesEnd:: - bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE - call BattleScript_ActivateWeatherAbilities end2 BattleScript_SandStormHailSnowEnds:: @@ -6036,6 +6014,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 @@ -6496,7 +6478,6 @@ BattleScript_WindPowerActivates:: setcharge BS_TARGET printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER waitmessage B_WAIT_TIME_LONG -BattleScript_WindPowerActivates_Ret: return BattleScript_ToxicDebrisActivates:: @@ -6528,6 +6509,9 @@ BattleScript_PerishSongCountGoesDown:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_AllStatsUpZMove:: + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUp:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk @@ -6986,13 +6970,13 @@ BattleScript_MegaEvolution:: BattleScript_MegaEvolutionAfterString: waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 - handlemegaevo BS_ATTACKER, 0 - playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION + handlemegaevo BS_SCRIPTING, 0 + playanimation BS_SCRIPTING, B_ANIM_MEGA_EVOLUTION waitanimation - handlemegaevo BS_ATTACKER, 1 + handlemegaevo BS_SCRIPTING, 1 printstring STRINGID_MEGAEVOEVOLVED waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER + switchinabilities BS_SCRIPTING end3 BattleScript_WishMegaEvolution:: @@ -7029,13 +7013,13 @@ BattleScript_UltraBurst:: printstring STRINGID_ULTRABURSTREACTING waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 - handleultraburst BS_ATTACKER, 0 - playanimation BS_ATTACKER, B_ANIM_ULTRA_BURST + handleultraburst BS_SCRIPTING, 0 + playanimation BS_SCRIPTING, B_ANIM_ULTRA_BURST waitanimation - handleultraburst BS_ATTACKER, 1 + handleultraburst BS_SCRIPTING, 1 printstring STRINGID_ULTRABURSTCOMPLETED waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER + switchinabilities BS_SCRIPTING end3 BattleScript_GulpMissileFormChange:: @@ -7195,7 +7179,6 @@ BattleScript_CottonDownTargetSpeedCantGoLower: BattleScript_CottonDownLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop -BattleScript_CottonDownReturn: swapattackerwithtarget copybyte gBattlerAttacker, sSAVED_BATTLER return @@ -7814,7 +7797,6 @@ BattleScript_ActivateWeatherAbilities: BattleScript_ActivateWeatherAbilities_Loop: copybyte sBATTLER, gBattlerTarget activateweatherchangeabilities BS_TARGET -BattleScript_ActivateWeatherAbilities_Increment: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop restoretarget @@ -7873,7 +7855,6 @@ BattleScript_IntimidateEffect_WaitString: BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop -BattleScript_IntimidateEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup restoretarget @@ -7939,7 +7920,6 @@ BattleScript_SupersweetSyrupEffect_WaitString: BattleScript_SupersweetSyrupLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop -BattleScript_SupersweetSyrupEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup restoretarget @@ -8098,7 +8078,6 @@ BattleScript_ActivateTerrainSeed: removeitem BS_TARGET BattleScript_ActivateTerrainAbility: activateterrainchangeabilities BS_TARGET -BattleScript_ActivateTerrainEffects_Increment: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed restoretarget @@ -8344,29 +8323,30 @@ 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 checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement printstring STRINGID_GRASSYTERRAINHEALS waitmessage B_WAIT_TIME_LONG -BattleScript_GrassyTerrainHpChange: orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER BattleScript_GrassyTerrainLoopIncrement:: addbyte gBattleCommunication, 1 jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop -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 call BattleScript_AbilityPopUp -BattleScript_AbilityNoSpecificStatLossPrint: printstring STRINGID_PKMNSXPREVENTSYLOSS waitmessage B_WAIT_TIME_LONG setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY @@ -8702,7 +8682,7 @@ BattleScript_SynchronizeActivates:: return BattleScript_NoItemSteal:: - pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNSXMADEYINEFFECTIVE waitmessage B_WAIT_TIME_LONG return @@ -9153,16 +9133,6 @@ BattleScript_ArenaTurnBeginning:: volumeup end2 -@ Unused -BattleScript_ArenaNothingDecided:: - playse SE_DING_DONG - arenadrawreftextbox - arenajudgmentstring B_MSG_REF_NOTHING_IS_DECIDED - arenawaitmessage B_MSG_REF_NOTHING_IS_DECIDED - pause B_WAIT_TIME_LONG - arenaerasereftextbox - end2 - BattleScript_ArenaDoJudgment:: makevisible BS_PLAYER1 waitstate @@ -9262,7 +9232,6 @@ BattleScript_TotemFlaredToLife:: call BattleScript_ApplyTotemVarBoost end2 -@ remove the mirror herb, do totem loop BattleScript_MirrorHerbCopyStatChangeEnd2:: call BattleScript_MirrorHerbCopyStatChange end2 @@ -9272,16 +9241,24 @@ BattleScript_MirrorHerbCopyStatChange:: printstring STRINGID_MIRRORHERBCOPIED waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - call BattleScript_TotemVar_Ret - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_MirrorHerbStartCopyStats: + copyfoesstatincrease BS_SCRIPTING, BattleScript_MirrorHerbStartReturn + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorHerbStartReturn + goto BattleScript_MirrorHerbStartCopyStats +BattleScript_MirrorHerbStartReturn: return BattleScript_OpportunistCopyStatChange:: - call BattleScript_AbilityPopUp - printstring STRINGID_OPPORTUNISTCOPIED + call BattleScript_AbilityPopUpScripting + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_OpportunistStartCopyStats: + copyfoesstatincrease BS_SCRIPTING, BattleScript_OpportunistCopyStatChangeEnd + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OpportunistCopyStatChangeEnd + printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - call BattleScript_TotemVar_Ret - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + goto BattleScript_OpportunistStartCopyStats +BattleScript_OpportunistCopyStatChangeEnd: end3 BattleScript_TotemVar:: @@ -9455,7 +9432,6 @@ BattleScript_EffectExtremeEvoboost:: BattleScript_ExtremeEvoboostAnim: attackanimation waitanimation -BattleScript_ExtremeEvoboostAtk:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0 setstatchanger STAT_ATK, 2, FALSE @@ -9811,27 +9787,11 @@ BattleScript_DamageNonTypesStarts:: goto BattleScript_MoveEnd BattleScript_DamageNonTypesContinues:: - setbyte gBattleCommunication, 0 -BattleScript_DamageNonTypesLoop:: - copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 - damagenontypes - jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamageNonTypesLoopIncrement printfromtable gDamageNonTypesDmgStringIds waitmessage B_WAIT_TIME_LONG effectivenesssound - hitanimation BS_ATTACKER - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER - checkteamslost BattleScript_DamageNonTypesLoopIncrement -BattleScript_DamageNonTypesLoopIncrement:: - jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamageNonTypesContinuesEnd - addbyte gBattleCommunication, 1 - jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamageNonTypesLoop -BattleScript_DamageNonTypesContinuesEnd:: - bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE - end2 + hitanimation BS_SCRIPTING + goto BattleScript_DoTurnDmg BattleScript_EffectTryReducePP:: tryspiteppreduce BattleScript_MoveEnd @@ -10029,7 +9989,6 @@ BattleScript_CouldntFullyProtect:: return BattleScript_BerserkGeneRet:: -BattleScript_BerserkGeneRet_Anim: savetarget copybyte gBattlerTarget, sBATTLER statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 3cee2d32ae..6238afb36c 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -159,7 +159,6 @@ BattleScript_SafariBallThrow:: BattleScript_SuccessBallThrow:: setbyte sMON_CAUGHT, TRUE incrementgamestat GAME_STAT_POKEMON_CAPTURES -BattleScript_PrintCaughtMonInfo:: printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo setbyte sGIVEEXP_STATE, 0 diff --git a/data/event_scripts.s b/data/event_scripts.s index 07eafe1c35..d4393ac9d4 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -587,6 +587,37 @@ EventScript_WhiteOut:: goto EventScript_ResetMrBriney end +EventScript_AfterWhiteOutHeal:: + lockall + msgbox gText_FirstShouldRestoreMonsHealth + call EventScript_PkmnCenterNurse_TakeAndHealPkmn + call_if_unset FLAG_DEFEATED_RUSTBORO_GYM, EventScript_AfterWhiteOutHealMsgPreRoxanne + call_if_set FLAG_DEFEATED_RUSTBORO_GYM, EventScript_AfterWhiteOutHealMsg + applymovement VAR_LAST_TALKED, Movement_PkmnCenterNurse_Bow + waitmovement 0 + fadedefaultbgm + releaseall + end + +EventScript_AfterWhiteOutHealMsgPreRoxanne:: + msgbox gText_MonsHealedShouldBuyPotions + return + +EventScript_AfterWhiteOutHealMsg:: + msgbox gText_MonsHealed + return + +EventScript_AfterWhiteOutMomHeal:: + lockall + applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox gText_HadQuiteAnExperienceTakeRest + call Common_EventScript_OutOfCenterPartyHeal + msgbox gText_MomExplainHPGetPotions + fadedefaultbgm + releaseall + end + EventScript_ResetMrBriney:: goto_if_eq VAR_BRINEY_LOCATION, 1, EventScript_MoveMrBrineyToHouse goto_if_eq VAR_BRINEY_LOCATION, 2, EventScript_MoveMrBrineyToDewford @@ -887,6 +918,48 @@ gText_PlayerWhitedOut:: .string "{PLAYER} is out of usable\n" .string "POKéMON!\p{PLAYER} whited out!$" +gText_FirstShouldRestoreMonsHealth:: + .string "First, you should restore your\n" + .string "POKéMON to full health.$" + +gText_MonsHealedShouldBuyPotions:: + .string "Your POKéMON have been healed\n" + .string "to perfect health.\p" + .string "If your POKéMON's energy, HP,\n" + .string "is down, please come see us.\p" + .string "If you're planning to go far in the\n" + .string "field, you should buy some POTIONS\l" + .string "at the POKéMON MART.\p" + .string "We hope you excel!$" + +gText_MonsHealed:: + .string "Your POKéMON have been healed\n" + .string "to perfect health.\p" + .string "We hope you excel!$" + +gText_HadQuiteAnExperienceTakeRest:: + .string "MOM: {PLAYER}!\n" + .string "Welcome home.\p" + .string "It sounds like you had quite\n" + .string "an experience.\p" + .string "Maybe you should take a quick\n" + .string "rest.$" + +gText_MomExplainHPGetPotions:: + .string "MOM: Oh, good! You and your\n" + .string "POKéMON are looking great.\p" + .string "I just heard from PROF. BIRCH.\p" + .string "He said that POKéMON's energy is\n" + .string "measured in HP.\p" + .string "If your POKéMON lose their HP,\n" + .string "you can restore them at any\l" + .string "POKéMON CENTER.\p" + .string "If you're going to travel far away,\n" + .string "the smart TRAINER stocks up on\l" + .string "POTIONS at the POKéMON MART.\p" + .string "Make me proud, honey!\p" + .string "Take care!$" + gText_RegisteredTrainerinPokeNav:: .string "Registered {STR_VAR_1} {STR_VAR_2}\n" .string "in the POKéNAV.$" diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 02a93a4d9c..12dc693fd0 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -439,4 +439,14 @@ Debug_EventScript_InflictStatus1_Text_Freeze: Debug_EventScript_InflictStatus1_Text_Frostbite: .string "Frostbite$" +Debug_EventScript_EWRAMCounters:: + callnative CheckEWRAMCounters + msgbox Debug_EventScript_EWRAMCounters_Text, MSGBOX_DEFAULT + release + end + +Debug_EventScript_EWRAMCounters_Text:: + .string "Follower Steps: {STR_VAR_1}.\n" + .string "Fishing Chain: {STR_VAR_2}.$" + .endif diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 8e19e46c60..3ff95a251c 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -3,8 +3,13 @@ - [README](./README.md) - [Installation](./INSTALL.md) - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) +- [AI Flags](./ai_flags.md) - [Changelog](./CHANGELOG.md) + - [1.9.x]() + - [Version 1.9.0](changelogs/1.9.x/1.9.0.md) - [1.8.x]() + - [Version 1.8.6](changelogs/1.8.x/1.8.6.md) + - [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) diff --git a/docs/ai_flags.md b/docs/ai_flags.md new file mode 100644 index 0000000000..cc5c1631ff --- /dev/null +++ b/docs/ai_flags.md @@ -0,0 +1,154 @@ +# What are AI Flags? +AI flags alter the behavior of AI controlled trainers. These flags affect what moves the AI chooses to use, what Pokémon the AI sends out and when they decide to switch, overarching strategic choices the AI prefers to make, and more. + +The AI flags can be found in [`include/constants/battle_ai.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/battle_ai.h). Some flags have their own dedicated functions that affect how the AI scores its options when choosing what to do in battle, and those functions can be found in [`src/battle_ai_main.c`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/battle_ai_main.c). Other flags are used in conditional checks to gate certain behaviour behind certain flags, which you can typically find by searching the codebase for the flag name and browsing from there. + +# What flags should you use? +When adding new AI flags it is recommended to use `AI_FLAG_CHECK_BAD_MOVE`, `AI_FLAG_CHECK_VIABILITY`, `AI_FLAG_TRY_TO_FAINT` to make sure the AI makes good decisions. It is especially important to use `AI_FLAG_CHECK_BAD_MOVE` in combination with any added flags otherwise the AI will use moves that can fail. + +Other flags should be used with consideration to the circumstances. + +# How do you use them? +Adding an AI flag to a trainer is straightforward, but the process is different depending on how trainers are being defined. + +## `COMPETITIVE_PARTY_SYNTAX == TRUE` +If you are using competitive syntax parties, navigate to the trainer data in [`src/data/trainers.party`](https://github.com/rh-hideout/pokeemerald-expansion/blob/upcoming/src/data/trainers.party), find the trainer you’d like to change, and add flags like so: +AI: Check Bad Move / Try to Faint / Check Viability. The name of each flag is just the constant, but without AI_FLAG at the beginning. For example, to add `AI_FLAG_SEQUENCE_SWITCHING`, any of the following will work: +* AI_FLAG_SEQUENCE_SWITCHING +* SEQUENCE_SWITCHING +* SEQUENCE SWITCHING +* Sequence_Switching +* Sequence Switching + +## `COMPETITIVE_PARTY_SYNTAX != TRUE` / Not Found +If you are not using competitive syntax parties, instead access the trainer data directly in [`src/data/trainers.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h), and add flags like so, typed exactly the same as the flag names themselves: +`.aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY` + +# What AI Flags does pokeemerald-expansion have? +This section lists all of expansion’s AI Flags and briefly describes the effect they have on the AI’s behaviour. In all cases, please check the corresponding function or surrounding code around their implementation for more details. Some of these functions are vanilla, some share a name with vanilla but have been modified to varying degrees, and some are completely new. + +## `AI_FLAG_CHECK_BAD_MOVE` +The AI will avoid using moves that are likely to fail in the current situation. This flag helps prevent the AI from making ineffective choices, such as using moves into immunities, into invulnerable states, or when the moves are otherwise hindered by abilities, terrain, or status conditions. + +## `AI_FLAG_TRY_TO_FAINT` +AI will prioritize KOing the player if able rather than using status moves. Will prioritize using a move that can OHKO the player. If the player can KO the AI’s mon and the AI’s mon is slower, prioritize priority moves (this does not prevent the AI from switching out instead). + +This flag handles scoring for OHKOs but does not handle 2HKOs at all, `AI_FLAG_STRONGEST_MOVE` should be used for 2HKO scoring. + +## `AI_FLAG_CHECK_VIABILITY` +This flag is divided into two components to calculate the best available move for the current context: +- **`AI_CompareDamagingMoves`**: This function compares damaging moves against each other and picks the best one. +- **`AI_CalcMoveEffectScore`**: This function checks every move effect (status or damaging move effect) and increases the score accordingly. + +This is different to `AI_FLAG_CHECK_BAD_MOVE` as it calculates how poor a move is and not whether it will fail or not. + +## `AI_FLAG_SETUP_FIRST_TURN` +AI will prioritize using setup moves on the first turn. These include stat buffs, field effects, status moves, etc. + +This is just a flat increase without any consideration of whether it makes sense to use the move or not. For better move choice quality for those moves, `AI_FLAG_CHECK_VIABILITY` should be used. + +## `AI_FLAG_RISKY` +AI will generally behave more recklessly. This AI enables the following behaviour: +* Always assume the highest damage roll when scoring moves +* Blindly Mirror Coat / Counter based on the player mon’s species higher attacking stat +* Moves with Recoil if they miss are not treated differently even if accuracy is lowered +* Prioritize maximizing damage from moves at the cost of accuracy +* Prioritize moves with low change strong effects (Ancient Power etc., check `AI_Risky` function for full list) +* Switch offensively mid battle rather than defensively (if using `AI_FLAG_SMART_MON_CHOICES`) +* Prioritize Explosion moves + +## `AI_FLAG_PREFER_STRONGEST_MOVE` +Adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. + +Keep in mind that this is a weaker form of `AI_FLAG_TRY_TO_FAINT` at scoring OHKOs as it does not take into account who is attacking first, it does however handle 2HKOs. + +## `AI_FLAG_PREFER_BATON_PASS` +AI prefers raising its own stats if it has >= 60% HP, as well as Ingrain, Aqua Ring, and Protect. Prioritizes Baton Bass if the mon is rooted (Ingrain) or has the Aqua Ring effect, and doesn’t if it has been Leech Seeded. + +## `AI_FLAG_DOUBLE_BATTLE` +This flag is automatically set in double battles, and controls much of the doubles-specific scoring. I’ll summarize some of its scoring as follows: +* Don’t use Helping Hand if partner is, don’t Perish Trap your partner, don’t change the weather if they are, don’t buff stats if partner will trigger Anger Point for us +* Collaborate with partner to Perish Trap opponent, Magnet Rise to protect partner, Dragon Cheer partner if applicable +* Prioritize using weather move if it benefits partner +* Prioritize triggering partner’s good abilities if possible (Motor Drive, Storm Drain, Beat Up -> Justified, etc.) +* Handle Skill Swap smartly, both with the partner and against the player + +## `AI_FLAG_HP_AWARE` +Lets the AI make decisions based on how much remaining HP its mon(s) and the player’s mon(s) have. + +With respect to the AI’s mons, in doubles: +* Allows the AI to attack its partner with a move it can absorb if its low on HP (ie. Electric move on partner with Volt Absorb) +* Prioritizes healing its partner if its HP is <= 50% if able + +In both singles and doubles: +* Prioritizes not using moves that require the user fainting (Destiny Bond, Explosion etc.) and healing moves while on >= 70% HP. +* Prioritize not using moves that require the user fainting or losing significant HP (Belly Drum etc) while between 30% and 70% HP +* Prioritize not using setup moves (Light Screen etc.) and Bide while on <= 30% HP + +With respect to the player’s mons: +* Prioritize not using many status moves (stat buffs, Poison, Pain Split) if the player has between 30% and 70% HP +* Prioritize not using any status moves if the player is has <= 30% HP + +## `AI_FLAG_POWERFUL_STATUS` +AI prioritizes setting up field effects (Trick Room, Rain Dance, etc.) and side statuses (Tailwind, Spikes, etc.), even if it could faint the target. + +## `AI_FLAG_NEGATE_UNAWARE` +AI does not understand ability suppression (Mold Breaker etc., weather suppression (Air Lock etc.), redirection abilities (Lightningrod etc.) being temporarily removed due to move effects (Sky Drop etc.), or item suppression (Magic Room etc.) and will ignore them. This is a handicap flag. + +## `AI_FLAG_WILL_SUICIDE` +AI prioritizes self destruction moves (Explosion, Memento). + +## `AI_FLAG_PREFER_STATUS_MOVES` +AI gets a score bonus for status moves. This should be combined with `AI_FLAG_CHECK_BAD_MOVE` to prevent using only status moves. + +## `AI_FLAG_STALL` +AI prefers simple classically "stalling" behaviour. It will prioritize: +* Mean Look, Fairy Lock, and Wrap for trapping +* Increasing its defense and special defense +* Moves that inflict Poison if it also has a Protect move +* Copying defense and special defense buffs + +## `AI_FLAG_SMART_SWITCHING` +Affects when the AI chooses to switch. AI will make smarter decisions about when to switch out mid-battle. Automatically enables `AI_FLAG_SMART_MON_CHOICES`, which is required as the vanilla mon selection AI is not smart enough to handle several switch-triggering situations appropriately, leading to bizarre behaviour. Many of these checks have intentional failure rates, so the AI won’t switch out 100% of the time in these cases to keep the player from being able to predict perfectly. Some of these also only apply to singles, and many of them are being simplified for the sake of brevity. This flag lets the AI trigger switches when: +* It can’t hit Wonder Guard and has another mon in the party that can (switch that mon in) +* It’s going to die to Perish Song, can’t KO the player and is affected by Yawn, is being severely affected by a status condition that switching helps (Curse, Toxic, Leech Seed) +* It has a mon that can trap the player’s mon and win the 1v1 (switch that mon in) +* It has a mon in the party that can absorb the player’s next expected attack (switch that mon in) +* It will not switch if the current mon will die to hazards on re-entry and it has no means of clearing them in its party +* All its moves are bad +* It can take advantage of Natural Cure or Regenerator +* Its Encore’d into something bad +* Its primary attacking stats are sufficiently lowered +* Its "odds are bad", which is a generic "try to make smart, player-like decisions generally speaking" check. Switches can be triggered if the player has a good switchin candidate (`AI_FLAG_SMART_MON_CHOICES`), and: +* The current mon has a bad type matchup and doesn’t have a super effective move and has at least ½ HP, or ¼ HP and Regenerator, or +* The current mon loses the 1v1 quickly and has at least ½ HP, or ¼ and Regenerator + +## `AI_FLAG_ACE_POKEMON` +Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.) + +## `AI_FLAG_OMNISCIENT` +AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. + +## `AI_FLAG_SMART_MON_CHOICES` +Affects what the AI chooses to send out after a switch. AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are handled separately. Automatically included when `AI_FLAG_SMART_SWITCHING` is enabled. + +With this flag enabled, the AI will prioritize choosing mons after a KO prioritizing the following criteria: +* Trapper (can trap the player’s mon and win the 1v1) +* Revenge killer (outspeeds an OHKOs / is outsped and OHKOs, is not OHKOd/ outspeeds and 2HKOs, is not OHKOd / is outsped and 2HKOs, is not 2HKOd) +* Has good type matchup and a super effective move +* Has good type matchup and does not have a super effective move +* Has Baton Pass +* If no mons meet any of the above criteria, choose the one that does the most damage + +And will choose mons after a mid-battle switch prioritizing the following criteria: +* Trapper (can trap the player’s mon and win the 1v1) +* Has good type matchup and a super effective move +* Has good type matchup and does not have a super effective move +* Is not 3HKO’d by the player +* Has Baton Pass + +## `AI_FLAG_CONSERVATIVE` +AI always assumes it will roll the lowest possible result when comparing damage in scoring. + +## `AI_FLAG_SEQUENCE_SWITCHING` +AI will always switch out after a KO in exactly party order as defined in the trainer data (ie. slot 1, then 2, then 3, etc.). The AI will never switch out mid-battle unless forced to (Roar etc.). If the AI uses a move that requires a switch where it makes a decision about what to send in (U-Turn etc.), it will always switch out into the lowest available party index. 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 0000000000..a1d0d3298e --- /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 @hedara90's Terapagos from https://github.com/rh-hideout/pokeemerald-expansion/pull/4691 +* 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/1.8.x/1.8.6.md b/docs/changelogs/1.8.x/1.8.6.md new file mode 100644 index 0000000000..3ede992a60 --- /dev/null +++ b/docs/changelogs/1.8.x/1.8.6.md @@ -0,0 +1,154 @@ +# Version 1.8.6 + +```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.6`. +``` + +## 🌋 *REFACTORS* 🌋 +* [Opportunist/Mirror Herb Refactor](#opportunistmirror-herb-refactor-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4928) +* [Removed unused Battle Script labels](#removed-unused-battle-script-labels-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4839) +* [Fixed Trace not respecting the speed order like other switch-in abilities](#fixed-trace-not-respecting-the-speed-order-like-other-switch-in-abilities-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4941) + +## 🧬 General 🧬 +### Fixed +* Fixed Battle Frontier ineligibility blocking the entire party if it encountered a disabled species by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4997 +* Fixed random IVs given when using `givemon` only giving values from 1-31 by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/5021 +* Fixed `givemon` not giving Cherish Ball by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5022 + +## 🐉 Pokémon 🐉 +### Added +* Added missing Terapagos Stellar sprite by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5008 +* Added missing Ogerpon Tera sprites by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4996 +### Changed +* Temporarely reverted regional form inheritance to fix issue with non-regional forms by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5004 +* Updated level up learnsets up to Indigo Disk by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5023 +### Fixed +* Fixed Basculegion learning Dire Claw in Gen9's level up learnset by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4948 +* Fixed Sandile's sprite by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5038 + +## ⚔️ Battle General ⚔️ ## +### Fixed +* Fixed Debug Menu not properly updating the corresponding flags + general cleanup by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4643 +* Fixed spread damage in double battles by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5064 + * In double battles when `B_POSITION_OPPONENT_LEFT` fainted from the first hit of a spread move, the second hit dealt 100% of damage to `B_POSITION_OPPONENT_RIGHT`. +* #### Removed unused Battle Script labels by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4839 + * `data/battle_scripts_1.s` + * `BattleScript_OctolockTryLowerDef` + * `BattleScript_OctolockTurnDmgPrintMsg` + * `BattleScript_StuffCheeksEatBerry` + * `BattleScript_StrengthSapTryHp` and its contents. + * `BattleScript_PartingShotEnd` and its contents. + * `BattleScript_RototillerAffected` + * `BattleScript_AutotomizeDoAnim` + * `BattleScript_TryTailwindAbilitiesLoop_Ret` + * `BattleScript_HitFromAtkCanceler` + * `BattleScript_EffectMultiHit` + * `BattleScript_BattleScript_EffectParalyzeNoTypeCalc` + * `BattleScript_EffectTeleportTryToRunAway` + * `BattleScript_WindPowerActivates_Ret` + * `BattleScript_CottonDownReturn` + * `BattleScript_ActivateWeatherAbilities_Increment` + * `BattleScript_IntimidateEnd` + * `BattleScript_SupersweetSyrupEnd` + * `BattleScript_ActivateTerrainEffects_Increment` + * `BattleScript_GrassyTerrainHpChange` + * `BattleScript_GrassyTerrainLoopEnd` + * `BattleScript_AbilityNoSpecificStatLossPrint` + * `BattleScript_ArenaNothingDecided` + * `BattleScript_ExtremeEvoboostAtk` + * `BattleScript_BerserkGeneRet_Anim` + * `data/battle_scripts_2.s` + * `BattleScript_PrintCaughtMonInfo` +* #### Opportunist/Mirror Herb Refactor by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4928 + * Multiple fixes: + * Opportunist stacking multiple boosts in one turn from opposing mons. + * Increasing the stat by the wrong amount when copying opposing boost (eg. +6 boosts). + * Opportunist no longer has a message. + * Opportunist only play animations once for every stat boost. + * Changes: + * `switchInBattlerCounter` replaces both `switchInAbilitiesCounter` and `switchInItemsCounter`. + * Removed `STRINGID_OPPORTUNISTCOPIED` and `sText_OpportunistCopied`. + * Altered `TryDoEventsBeforeFirstTurn` to use a state switch (`gBattleStruct->eventsBeforeFirstTurnState`) + * `FIRST_TURN_EVENTS_START`. + * `FIRST_TURN_EVENTS_OVERWORLD_WEATHER`. + * `FIRST_TURN_EVENTS_TERRAIN`. + * `FIRST_TURN_EVENTS_STARTING_STATUS`. + * `FIRST_TURN_EVENTS_TOTEM_BOOST`. + * `FIRST_TURN_EVENTS_NEUTRALIZING_GAS`. + * `FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES`. + * `FIRST_TURN_EVENTS_OPPORTUNIST_1`. + * `FIRST_TURN_EVENTS_ITEM_EFFECTS`. + * `FIRST_TURN_EVENTS_OPPORTUNIST_2`. + * `FIRST_TURN_EVENTS_END`. + +## 🤹 Moves 🤹 +### Added +* Added missing Ivy Cudgel animation by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5034 + * Cleanup by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5063 +* Added missing Axe Kick animation by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5039 +### Fixed +* Fixed Diamond Storm's Defense increase applying to the target instead of the user by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4947 +* Fixed Psycho Shift check for Frostbite using `CanBeFrozen` instead of `CanGetFrostbite` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4995 +* Fixed Sleep Talk failing on repeated attempts by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009 +* Fixed Fury Cutter considering Parental Bond's second hit for its damage multiplier by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030 +* Fixed Hidden Power damage category when `B_PHYSICAL_SPECIAL_SPLIT < GEN_4` by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5053 +* Fixed `MoveEffectRemoveStatus` (Sparkling Aria, Wake-Up Slap, ...) that cure Freeze/Frostbite using the other status' battlescript. by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061 + +## 🎭 Abilities 🎭 +### Fixed +* Fixed Toxic Debris incorrect side check by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009 +* Fixed Snow Warning's description not being updated based on `B_SNOW_WARNING` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5018 +* Fixed Mold Breaker abilities not properly checking battler actions in double battles causing them to not work by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030 +* Fixed `cantBeSurpressed` ability check for breakable abilities by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5043 +* Fixed Stalwart and Propeller Tail not ignoring redirection from Storm Drain/Lightning Rod + tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061 +* #### Fixed Trace not respecting the speed order like other switch-in abilities by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4941 + * Changes: + * Removed: `ABILITYEFFECT_TRACE1`, `ABILITYEFFECT_TRACE2` and moved their handling to `ABILITYEFFECT_ON_SWITCHIN`. + * Removed `gSpecialStatuses`'s `traced` field. + +## 🧶 Items 🧶 +### Fixed +* Jaboca/Rowap Berry recording the wrong item effects by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009 +* Fixed Life Orb damaging its holder if it hits itself in confusion. by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061 + +## 🤖 Battle AI 🤖 +### Documentation +* Added AI Flags documentation to directory for new documentation site by @anrichtait in https://github.com/rh-hideout/pokeemerald-expansion/pull/5057 +### Fixed +* Fixed typo that caused AI to use Upper Hand when it shouldn't by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4973 +* Fixed AI using U-Turn when only the Ace Pokémon is left in the party (#4748) by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4972 +* Fixed AI not being aware during calculations by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4992 +* Fixed `AI_SetMoveAccuracy` getting the wrong battler's ability by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030 + +## 🧹 Other Cleanup 🧹 +### Fixed +* Fixed version displayed in `README.md` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4966 +* Removes unnecessary checks for Shield Dust and Covert Cloak by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5073 + +## 🧪 Test Runner 🧪 +### Added +* Added AI Upper Hand test by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4973 +* Added test to make sure that Trainer Class balls apply to every member of the party by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4999 +* Added missing Sleep Talk tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009 +### Changed +* Improved Test Runner Summary by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4641 + * Totals are now separated from the erroring test list. + * Assumption Fails and Passing `KNOWN_FAILING`s now have their own lists. +### Fixed +* Fixed tests failing when `B_USE_FROSTBITE` is set to `TRUE` by @fakuzatsu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4986 +* Fixed tests not compiling outside of CI after incoming pret merge by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4998 +* Fixed Covert Cloak tests being in `item_effect` folder instead of `hold_effect` folder by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5073 + +## 📦 Pret merges 📦 +* Pret Merge (13th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4964 + * Adds the new C-style enums in preproc commit by @SBird1337 [(550e668)](https://github.com/pret/pokeemerald/commit/550e6688aa3b511a9aa9ea851c49ba4d90c7708a) +* Pret Merge (27th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/5045 + * Includes: + * [pret#2016](https://github.com/pret/pokeemerald/pull/2016) Fix WSL1 install instructions + * [pret#2017](https://github.com/pret/pokeemerald/pull/2017) Added constant for `NUM_SNOWFLAKE_SPRITES` + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.5...expansion/1.8.6 + + diff --git a/docs/changelogs/1.9.x/1.9.0.md b/docs/changelogs/1.9.x/1.9.0.md new file mode 100644 index 0000000000..0d39f109ed --- /dev/null +++ b/docs/changelogs/1.9.x/1.9.0.md @@ -0,0 +1,556 @@ +# Version 1.9.0 + +```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.9.0`. +``` + +## 🌋 *REFACTORS* 🌋 +📜 = Has a migration script. +* [agbcc has been deprecated](#agbcc-has-been-deprecated-by-mrgriffin-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4989) +* [Added migration script README](#added-migration-script-readme-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4719) +* [Removed Gen 9 settings for out-of-battle abilities](#removed-gen-9-settings-for-out-of-battle-abilities-by-asparaguseduardo-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4282) +* 📜[Customizable Frontier Pokémon sets](#customizable-frontier-pokémon-sets-by-ghoulslash-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4313) +* [Replaced VARARG_8 uses with recursive macros](#replaced-vararg_8-uses-with-recursive-macros-by-cfmnephrite-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4232) +* 📜[Competitive-formatted parties](#competitive-formatted-parties-by-mrgriffin-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull3545) +* [Terastallization](#terastallization-by-agustingdlv-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4110) +* [Combined weather set commands](#combined-weather-set-commands-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4434) +* [Full official GF names for species/items/moves/types](#full-official-gf-names-for-speciesitemsmovestypes-by-mrgriffin-znogyrop-and-cfmnephrite-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4241) +* [Automatically display TM/HM icons based on their move](#automatically-display-tmhm-icons-based-on-their-move-by-sneed69-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4452) +* [Set `GiveBoxMonIntialMoveset_Fast` as default](#set-giveboxmonintialmoveset_fast-as-default-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4470) +* [Changed Battle Frontier validation to species flag](#changed-battle-frontier-validation-to-species-flag-by-kittenchilly-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4341) +* [Replaced HP checks with `IsBattlerAlive`](#replaced-hp-checks-with-isbattleralive-by-ghoulslash-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4429) +* [Removed redundant `MOVE_EFFECT_SP_ATK_TWO_DOWN`](#removed-redundant-move_effect_sp_atk_two_down-by-sneed69-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4557) +* 📜[Removed `gItemIconTable`](#removed-gitemicontable-by-kittenchilly-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4579) +* 📜[Egg Move Refactor](#egg-move-refactor-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4534) +* [Adjusted Ate-Ability code a bit to make it more readable](#adjusted-ate-ability-code-a-bit-to-make-it-more-readable-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4640) +* [Type Info refactors](#type-info-refactors-by-asparaguseduardo-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4462) +* [merrp/aarant's Followers](#merrpaarants-followers) +* [Refactored residual damage to be more readable and less prone to bugs](#refactored-residual-damage-to-be-more-readable-and-less-prone-to-bugs-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4945) + +## 🧬 General 🧬 +### Added +* #### Added migration script README by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4719 +* #### Customizable Frontier Pokémon sets by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4313 + * `FacilityMon` has been removed in favor of using regular `TrainerMon`. + * Removed `BATTLE_FRONTIER_ITEM_x` item constants in favor of using regular `ITEM_x` constants. + * New `CreateFacilityMon` to handle duplicated code. + * Added `FLAG_FRONTIER_MON_FACTORY` that replaces Return for Frustration and sets frienship to 0. Used in the Battle Factory. + * Converted data in `src/data/battle_frontier/battle_frontier_mons.h` and `src/data/battle_frontier/battle_tent.h`, for example: + * `.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,` -> `.heldItem = ITEM_CHOICE_BAND,` + * `.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,` -> `.ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),` + * Migration script available in `migration_scripts/egg_move_refactor.py` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5040 +* Added documentation to `STATIC_ASSERTS` used by the `BoxPokemon` after 1.8.0 by @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4294 +* #### Competitive-formatted parties by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3545 + * Can be disabled by setting `COMPETITIVE_PARTY_SYNTAX` to `FALSE` in `include/config/general.h`. If migrating from 1.8, remove the first and last lines from `src/data/trainers.h` (`const struct Trainer gTrainers[] = {` and `};` respectively). + * Introduces `trainerproc`, a tool which converts Competitive-formatted parties into Trainer Control-formatted parties. + * If you made custom changes to the following files and want to use this new format, ***Do not accept the incoming changes for them.*** Instead, use the migration script present in `migration_scripts/convert_parties.py`: + - `src/data/trainers.h` + - `src/data/trainer_parties.h` + - `src/data/battle_partners.h` + - `src/data/partner_parties.h` + * Before: + ```c + static const struct TrainerMon sTestParty1[] = + { + { + .species = SPECIES_WOBBUFFET, + .ball = ITEM_MASTER_BALL, + .ability = ABILITY_TELEPATHY, + .friendship = 42, + .gender = TRAINER_MON_FEMALE, + .heldItem = ITEM_ASSAULT_VEST, + .isShiny = TRUE, + .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30), + .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0), + .lvl = 67, + .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION}, + .nature = NATURE_HASTY, + .nickname = COMPOUND_STRING("Bubbles") + }, + { + .species = SPECIES_WOBBUFFET, + .ability = ABILITY_SHADOW_TAG, + .lvl = 5, + }, + }; + + static const struct Trainer sTestTrainer1 = + { + .trainerName = _("Test1"), + .party = TRAINER_PARTY(sTestParty1), + }; + ``` + After: + ``` + === 0 === + Name: Test1 + + Bubbles (Wobbuffet) (F) @ Assault Vest + Hasty Nature + Level: 67 + Ability: Telepathy + IVs: 25 HP / 26 Atk / 27 Def / 29 SpA / 30 SpD / 28 Spe + EVs: 252 HP / 4 SpA / 252 Spe + Happiness: 42 + Shiny: Yes + Ball: Master Ball + - Air Slash + - Barrier + - Solar Beam + - Explosion + + Wobbuffet + Level: 5 + Ability: Shadow Tag + ``` + * You can add comments by using `//` or `/* ... */`, like in C. + * You're allowed to write `SPECIES_PIKACHU` instead of `Pikachu` (etc etc) if you want. + * In addition to the migration script described above, you can add the following to at the top of the `src/data/trainers.party` file to change how the tool interprets the file: + - `#pragma trainerproc ivs explicit` — requires an `IVs:` line for every Pokémon instead of defaulting to 31s. + - `#pragma trainerproc ivs ` — changes the default IVs. + - `#pragma trainerproc level explicit` — requires a `Level:` line for every Pokémon instead of defaulting to 100. + - `#pragma trainerproc level ` — changes the default level. + - During the merge you could choose to keep your original `src/data/trainers.h` and `src/data/trainer_parties.h` and then run the conversion script to update the `src/data/trainers.party`, `make`, then check in all three files. Alternatively don't run the conversion script and turn off `COMPETITIVE_PARTY_SYNTAX` in `include/config.h`. + * Added synonyms for competitive/CFRU species defines, eg: + * `SPECIES_PONYTA_GALAR` for `SPECIES_PONYTA_GALARIAN` + * `SPECIES_MAUSHOLD_FOUR` for `SPECIES_MAUSHOLD_FAMILY_OF_FOUR` + * `SPECIES_CHARIZARD_GMAX` for `SPECIES_CHARIZARD_GIGANTAMAX` + * And so. + * ***TODO***: + - Support `Hidden Power:` to set IVs appropriate for a particular Hidden Power type. + - Consider case-insensitivity in the parser. + * Cleanup and bugfixes: + * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4362 + * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4366 + * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4374 + * By @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/4397 + * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4421 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4431 + * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4442 + * By @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4830 + * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4969 + * By @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4734 + * By @innocenthedgehog in https://github.com/rh-hideout/pokeemerald-expansion/pull/4988 + * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4990 + * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/5035 +* Added `OW_PC_MOVE_ORDER` config to use future generation's menu order for the Pokémon Storage System by @pkmnsnfrn and @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4348 + * `GEN_1/2/3`: Widthraw -> Deposit -> Move. + * `GEN_4/5/6_XY`: Deposit -> Widthraw -> Move. + * `GEN_6_ORAS/7/8/9`: Move -> Deposit -> Widthraw. +* Added `OW_HIDE_REPEAT_MAP_POPUP` config that doesn't show the Map Popup when transitioning bewteen maps within the same Map Section by Anon822 from Pokécommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4370 +* Multiple Fishing Enhancements by @ghoulslash and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4343 + * Added `I_FISHING_CHAIN` config to enable XY's chain fishing. + * Added `I_FISHING_PROXIMITY` config to enable XY's proximity mechanic, where fishing away from NPCs increases the chance of a Pokémon being hooked. + * Added `I_FISHING_MINIGAME` config to change between minigame versions. + * `GEN_1/2` will not require a minigame, and instead automatically hook the Pokémon. + * All other settings use RSE's minigame. FRLG/Gen4+'s minigame will be implemented in the future. + * Cleanup and bugfixes: + * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4412 + * By @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4906 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4718 + * By @cawtds and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/5031 +* #### Full official GF names for species/items/moves/types by @mrgriffin, @ZnogyroP and @cfmnephrite in https://github.com/rh-hideout/pokeemerald-expansion/pull/4241 + * 8-character type names. + * 12-character Pokémon names (and nicknames) + * 16-character Move names. + * 20-character item names. + * This is done by introducing 3 new fonts that automatically change the size of the name in vanilla interfaces: + * `FONT_NARROWER`, `FONT_SMALL_NARROWER` and `FONT_SHORT_NARROW`. + * If the hack has changed fonts—e.g. to the FrLg ones—then they probably want to create their own versions of the new fonts. + * If the hack has introduced more UIs that render names they probably want to use `GetFontIdToFit`—see this PR's changes for examples of that. + * If the hack has introduced names in list menus they can use `.fontIdMayNarrow = TRUE` on the list template. + * Types, species, moves, and items all have individual commits which enable support in the UI and turn on longer names by default. These can be reverted by downstream projects if they really want to. + * Cleanup + * By @Nopinou in https://github.com/rh-hideout/pokeemerald-expansion/pull/4473 + * By @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4588 + * By @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4979 +* Added `OW_PC_RELEASE_ITEM` config that gives back items from released Pokémon by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4577 + * If the bag is full, the item is lost, however. + * Cleanup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4844 +* Added `P_EGG_CYCLE_LENGTH` config that updates the amount of steps required to complete an egg cycle by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4596 +* Added `trainerbattle_two_trainers` macro to trigger a 1 player vs 2 NPC battle by @aarant and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4741 +* Added `createmon` Script Command and macro by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4688 + * This allows to set up wild enemy parties with the same versatility as `givemon` (IVs, EVs, abilities, moves, etc). +* Added `setwilddoubleflag` macro to set `sIsScriptedWildDouble` and allow 2 player vs 1 enemy wild battles by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4688 +* Added support for multiple Roaming Pokémon at once by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4762 + * By default, `ROAMER_COUNT` is set to 1 to keep save compatibility. Increase it to add more roamers (though this breaks saves). +* Added `OW_IGNORE_EGGS_ON_HEAL`, which makes it such that eggs are not counted in the Pokémon Center's heal animation by @ghoulslash @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4888 +* Added support for fake RTC by Anon822 from PokéCommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4910 + * When `OW_USE_FAKE_RTC` is `TRUE`, time runs at a different rate from real time, like in Legends: Arceus or Scarlet and Violet. + * Use `OW_ALTERED_TIME_RATIO` to set the amount of "time" passing every 60 frames (1 real time second): + * `GEN_8_PLA`: 1 minute. + * `GEN_9`: 20 seconds. + * All other settings make the game synced with real life. + * You may also set a flag to pause the RTC (`OW_FLAG_PAUSE_TIME`), and the script commands `pausefakertc`, `resumefakertc` and `togglefakertc` by @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4954 + * Cleanup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4965 +* Added B2W2-style map pop-Ups by @ravepossum, @nielsmittertreiner and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4396 + * Change `OW_POPUP_GENERATION` to `GEN_5` to switch existing map popups. + * You may choose between Black or White themes via `OW_POPUP_BW_COLOR` (`OW_POPUP_BW_COLOR_BLACK` or `OW_POPUP_BW_COLOR_WHITE`). + * You may choose to display the current time in the pop-up using `OW_POPUP_BW_TIME_MODE`. + * `OW_POPUP_BW_TIME_NONE`: Disables time in pop-up. + * `OW_POPUP_BW_TIME_12_HR`: Shows 12-hour time in pop-up + * `OW_POPUP_BW_TIME_24_HR`: Shows 24-hour time in pop-up + * You may enable alpha blending via `OW_POPUP_BW_ALPHA_BLEND` (mainly designed around the Black theme). + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4752 +* Allowed flags to be used in trigger scripts instead of vars by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4900 +### Changed +* #### agbcc has been deprecated by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4989 + * You technically still use `make agbcc` by disabling the error thrown when using it, but it will be removed completely for version 1.10. +* #### Moved general config file to the config folder by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4805 + * `config.h` -> `config/general.h` + * Cleanup by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5026 +* #### Set `GiveBoxMonIntialMoveset_Fast` as default by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4470 +* #### Changed Battle Frontier validation to species flag by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4341 + * Added `isFrontierBanned` flag and removed `gFrontierBannedSpecies`. + * Renamed `isParadoxForm` -> `isParadox`. +* #### Unified Nature info by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4562 + * All data is now found on `gNaturesInfo` in `src/pokemon.c` + * Names, Stat Up/Down, Back Sprite animation, Pokéblock animation, Nature Girl message and Battle Palace data. + * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4598 +* #### Type Info refactors by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4462 + * Added `src/data/types_info.h` file for `gTypesInfo` instead of `src/battle_main.c`. + * Moved `sTypeEffectivenessTable` here file as well (and renamed it to `gTypeEffectivenessTable`) + * `TYPE_NONE` duplicates graphics from `TYPE_MYSTERY` due to limitations with `graphics_file_rules.mk`. + * Damage Categories for `B_PHYSICAL_SPECIAL_SPLIT`'s pre-Gen4 setting can now be specified in this `gTypesInfo`'s `damageCategory` field instead of depending on the type's order. +* Consolidated Lilycove Contest Lady's values into one struct (`sContestLadyValues`) by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4951 +* Applied the Pokémon Sprite Visualizer name officially by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4745 +* Don't specify `sDexSearchTypeOptions` array size by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4820 + * Prevents Type search in the dex from breaking when non-conventional types are added. +* Only call RNG once when generating IVs in some cases by @tertu-m in https://github.com/rh-hideout/pokeemerald-expansion/pull/4876 +### Fixed +* Fixed potential Wireless Adapter desynchronization by @AtariDreams in https://github.com/rh-hideout/pokeemerald-expansion/pull/3730 +* Fixed `ListItemTemplate` UB in the Pokémon Center by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4725 +* Fixed `src/data/map_group_count.h` not being ignored in `.gitignore` properly by @rayrobdod in https://github.com/rh-hideout/pokeemerald-expansion/pull/4727 +* Fixed double battles not occuring with only one Pokemon by talking to the trainers despite `OW_DOUBLE_APPROACH_WITH_ONE_MON` being set `TRUE` by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4848 +* Fixed unused `B_TRANSITION_SHRED_SPLIT` from softlocking the game by @Lunos, @griffinr and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4919 + +## ✨ Feature Branches ✨ +### ***merrp/aarant's Followers*** +* Integrated @aarant's followers branch by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4022 + * This includes Dynamic Overworld Palettes and Expanded Overworld IDs. + * This does ***not*** include the `lighting` branch yet, but will be included in a future version. + * Updated up to the latest version of the branch (11th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4944 + * Cleanup + * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4782 + * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4937 +#### Changes from the original branch +* Follower Pokémon can be enabled using the `OW_FOLLOWERS_ENABLED` config. +* Pokémon NPCs can be added to a map [independently](https://github.com/rh-hideout/pokeemerald-expansion/pull/4761) from the Followers config. Keep in mind, this requires `OW_POKEMON_OBJECT_EVENTS` to be enabled in order to add the graphics to the ROM. + * Eg: use `OBJ_EVENT_GFX_SPECIES(CHARIZARD)` where the graphic ID would go (`OBJ_EVENT_GFX_SPECIES_SHINY()` for shiny version). + * May also use `OBJ_EVENT_GFX_SPECIES_SHINY(CHARIZARD)` to make them shiny by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5049 +* Moved original configs from `include/constants/event_objects.h` to `include/config/overworld.h` and renamed them: + * `OW_MON_BOBBING` -> `OW_FOLLOWERS_BOBBING` + * `LARGE_OW_SUPPORT` -> `OW_LARGE_OW_SUPPORT` + * `OW_MON_POKEBALLS` -> `OW_FOLLOWERS_POKEBALLS` +* Added follower Pokémon sprites from Gen 4-8 + * Credits to @Eemeliri and Gerben BSc +* Moved `OW_GFX_COMPRESS` from `include/global.h` to `include/config/overworld.h`. +* Added `OW_SUBSTITUTE_PLACEHOLDER` config to hide followers if they don't have a follower sprite instead of using a placeholder Substitute sprite by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4765 +* Follower graphics are shown in the Pokémon Sprite Visualizer. +* Follower graphics have been moved to the respective species graphics folder instead of all being grouped in `graphics/object_events/pics/pokemon`. + * Eg: `graphics/object_events/pics/pokemon/abomasnow.png` was moved to `graphics/pokemon/abomasnow/follower.png`. +* Follower data has been moved to `gSpeciesInfo` + * Their palettes are separate from the battle sprite palettes + * Can be enabled using `OW_FOLLOWERS_SHARE_PALETTE`, but requires manual sprite adjustements. For now, it's recommended to keep this `FALSE`. (They don't use much space anyway) +* Updated `GetTypeEffectiveness` used by follower messages to account for new abilities with type immunities. +* Cleaned up code style to match pret/expansion's. +* Reverted Regi's sprite to vanilla's. +* Follower PicTables use `overworld_ascending_frames` macro. +* Removed unneeded calls to `bufferspeciesname`. +* Removed `MON_DATA_NATURE`. +* Removed debug functions like `IsAccurateGBA`. +* Removed `ScrCmd_callfunc` to use `callnative`s instead + +## 🐉 Pokémon 🐉 +### Added +* Added `EVO_ITEM_COUNT_999` evolution method (used by Gimmighoul) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4261 + * Requires level up while carrying 999 of the specified item in the bag, which will be consumed. + * Uses new `EVO_MODE_CANT_STOP` mode, which is a clone of `EVO_MODE_NORMAL` but prevents evolution from being canceled. +* Added `EVO_DEFEAT_THREE_WITH_ITEM` evolution method (used by Bisharp) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4768 + * Requires level up after defeating 3 Pokémon of the same species holding the specified item. + * Eg: Bisharp defeating 3 other Bisharp holding Leader Crests. + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5046 +* Added `EVO_OVERWORLD_STEPS` evolution method (used by Pawmo, Bramblin and Rellor) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4758 + * Requires level up after walking the specified amount of steps with that Pokémon as the first member in the party without switching. + * Switching the party leader resets the steps. + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5047 +* Added `FORM_CHANGE_DAYS_PASSED` form change (used by Furfrou and Hoopa) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4778 + * Adds `MON_DATA_DAYS_SINCE_FORM_CHANGE`, which is a timer to automatically changes forms at midnight once it runs out. It is set after a different form change has been made (currently only added to Form Change items, including Prison Bottle) +* Added unique icons for all of Arceus's forms via config (`P_ARCEUS_UNIQUE_FORM_ICONS`) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4329 +* Added `P_TWO_FRAME_FRONT_SPRITES` config to allow disabling 2-frame front animations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4750 +* Added `P_CRIES_ENABLED` config to disable species cries and stop them from being included in the ROM by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4791 +* Added configs to prevent unobtainable Pokemon from being shiny by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4735 + * `P_ONLY_OBTAINABLE_SHINIES`: Prevents shinies from generating in the Battle Pyramid. + * `P_NO_SHINIES_WITHOUT_POKEBALLS`: Prevents shinies from generating if the player has no Poké Balls. +* Added `P_CAN_FORGET_HIDDEN_MOVE` config allow Pokémon to forget HM moves by @pkmnsnfrn and @Lunos in https://github.com/rh-hideout/pokeemerald-expansion/pull/4968 +### Changed +* Renamed evolution methods the were labeled as evo level by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4607 + * `EVO_LEVEL_MOVE_TWENTY_TIMES` -> `EVO_MOVE_TWENTY_TIMES` + * `EVO_LEVEL_RECOIL_DAMAGE_MALE` -> `EVO_RECOIL_DAMAGE_MALE` + * `EVO_LEVEL_RECOIL_DAMAGE_FEMALE` -> `EVO_RECOIL_DAMAGE_FEMALE` + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4644 +* Evolution tracker is now by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4758 +* #### Replaced VARARG_8 uses with recursive macros by @cfmnephrite in https://github.com/rh-hideout/pokeemerald-expansion/pull/4232 +* #### Egg Move Refactor by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4534 + * Egg Moves are now formatted like Teachable learnsets and their pointers are stored in `gSpeciesInfo`, as opposed to having one big array. + * Only offspring require these tables. + * Migration script available in `migration_scripts/egg_move_refactor.py`. + +## ⚔️ Battle General ⚔️ ## +### Added +* Added option to increase Experience bar speed via `B_FAST_EXP_GROW` by @SonikkuA-DatH and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4335 +* Added Gen 4's Fog battle weather by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4359 + * Uses Haze's animation. + * Changes `B_FOG_TERRAIN` (TRUE/FALSE config) into `B_OVERWORLD_FOG` (Generational config). + * `GEN_4`: Uses this battle weather in maps with `WEATHER_FOG_DIAGONAL` and `WEATHER_FOG_HORIZONTAL`. + * `GEN_8` onwards: Sets permanent Misty Terrain. + * All others disable them. +* #### Terastallization by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4110 + * Tera Type automatically assigned to existing Pokémon based on their personality value. + * Can get and set Tera Types in scripts for party members using `checkteratype` and `setteratype` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4460 + * To activate, it requires: + * `ITEM_TERA_ORB` to be in the player's bag. + * `B_FLAG_TERA_ORB_CHARGED` to be set up to an unused flag. It¿s automatically set when `HealPlayerParty` is called. + * Added `ignoreTera` argument added to `GetBattlerType` + * Added Tera Blast's effect. + * Changes type shown in battle screen if the mon is Terastalized or about to by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4447 + * Added Stellar Type. + * Added `teraType` option for Trainers (also supported by Competitive Format Parties) + * Added Tera Starstorm's effect by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4447 + * Terastallization animation by @Pokabbie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4507 + * Added `forceTeraType` field for `gSpeciesInfo`, which forces the Pokémon to have a specific Tera Type (used by Terapagos and Ogerpon) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4438 + * Added `FORM_CHANGE_BATTLE_TERASTALLIZATION` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4438 + * It uses a Pokémon's Tera Type to choose which form to switch to upon Terastallizing. + * Bugfixes: + * By @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4435 + * By @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4440 + * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4513 + * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4515 + * By @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4529 + * By @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4975 +* Added Gen 1 type matchups by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4508 + * Renamed `B_STEEL_RESISTANCES` -> `B_UPDATED_TYPE_MATCHUPS` to reflect this change. + * Added defines to cleanup `sTypeEffectivenessTable`. +* Added Move Descriptions in battle by @Bassoonian, @TheXaman, @Pawkkie and @ravepossum in https://github.com/rh-hideout/pokeemerald-expansion/pull/4152 + * Press L before selecting a move to see their category, power, accuracy and description. + * This can be changed to R by using the `B_MOVE_DESCRIPTION_BUTTON` config by @fakuzatsu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4860 + * Cleanup + * By @AGSMGMaster64 and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4678 +* Added ball throwing configs by セケツ from PokéCommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4953 + * `B_ENEMY_THROW_BALLS`: When set to `GEN_6` or higher, it changes the opposing trainer's ball animation so they throw their Pokéballs instead of already starting on the floor. + * `B_PLAYER_THROW_BALLS_SOUND`: When set to `GEN_5` or higher, it plays `SE_BALL_THROW` as part of the player's ball throw animation. + * `B_ENEMY_THROW_BALLS_SOUND`: When set to `GEN_5` or higher, it plays `SE_BALL_THROW` as part of the enemy's ball throw animation. +* Added `RandomChance` macro for battle/test randomization by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829 +* #### Gimmick Refactor by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4449 + * Unifies generational mechanics into `gGimmicksInfo` struct (Mega, Z-Moves, Ultra Burst, Dynamax, Terastallization). + * Contains triggers, indicator, condition and function to execute when triggered. + * Around ~500-1000 lines of redundant / duplicate code removed! + * Cleanup + * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4927 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4962 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4863 + * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4960 +* Allow users to increase `MAX_MONEY` dynamically by @DizzyEggg and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4943 +* Added `AUTO_LOWERCASE_KEYBOARD` by @Jaizu and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4976 + * Automatically changes to to lowercase if the first character inputted is uppercase. +### Changed +* Improved HP drain when enabling `B_FAST_HP_DRAIN` by @pkmnsnfrn and @SonikkuA-DatH in https://github.com/rh-hideout/pokeemerald-expansion/pull/4335 +* #### Combined weather set commands by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4434 + * `setrain` -> `setfieldweather ENUM_WEATHER_RAIN`. + * `setsandstorm` -> `setfieldweather ENUM_WEATHER_SANDSTORM`. + * `setsunny` -> `setfieldweather ENUM_WEATHER_SUN`. + * `sethail` -> `setfieldweather ENUM_WEATHER_HAIL`. + * `setsnow` -> `setfieldweather ENUM_WEATHER_SNOW`. +* #### Replaced HP checks with `IsBattlerAlive` by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4429 +* #### Removed redundant `MOVE_EFFECT_SP_ATK_TWO_DOWN` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4557 +* Added stack for saved targets and attackers by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4061 + * This avoids the need to overwriting battler IDs during scripts and cause potential issues. + * Several scripts have been updated to use these. + * Cleanup and fixes + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4653 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4668 +* #### Adjusted Ate-Ability code a bit to make it more readable by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4640 +* Added global constants for damage rolls by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4663 + ```c + // Lowest and highest percentages used for damage roll calculations + #define DMG_ROLL_PERCENT_LO 85 + #define DMG_ROLL_PERCENT_HI 100 + ``` +* #### Refactored residual damage to be more readable and less prone to bugs by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4945 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4993 +* Clarified some cases of `ChangeStatBuffs` usage by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4826 +* Moved EWRAM variables from battle controller player file to gBattleStruct by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4840 + * `sDescriptionSubmenu`, `sAckBallUseBtn` and `sBallSwapped`. +### Fixed +* Fixed Dynamax data not clearing when a battler faints by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4672 +* Multiple Z-Move fixes by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4449 + * Fixed Z-Moves not working in Link Battles, recorded battles and tests. + * Fixed `Z_EFFECT_ALL_STATS_UP` functionality. + * Fixed Z-Nature Power, Z-Copycat, Z-Me First, and Z-Sleep Talk incorrectly using a normal move and not a Z-Move, ~~which had not been raised as an issue yet.~~ (some of these were caught recently!) + * Fixed Breakneck Blitz incorrectly being affected by -ate abilities, which had not been raised as an issue yet. + * Fixed Instruct incorrectly not failing if the target last used a Z-Move, which had not been raised as an issue yet. + * Fixed Guardian of Alola incorrectly doing 50% of the target's HP instead of 75%. +* Fixed Enemy Data not clearing at the end of battles by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4867 + +## 🤹 Moves 🤹 +### Added +* Expanded Freeze Dry's effect to use `argument` field and allow custom moves to use the effect to be super effective to any specific type by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4312 + * Renamed `EFFECT_FREEZE_DRY` to `EFFECT_SUPER_EFFECTIVE_ON_ARG`. +* Expanded `EFFECT_BODY_PRESS` to use category of defense stats for calculation based on the move's own damage category by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4312 + * Eg: In vanilla, Body Press uses the user's Defense and its stat changes instead of Attack. Now, if we were to change its `category` in `gMovesInfo`, it'll use Sp. Defense and its stat changes instead of Sp. Attack. +* Expanded Photon Geyser and Shell Side Arm (restored) effects so that they also work for physical moves by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4923 +* Added Knock Off's Gen 5+ effect with config (`B_KNOCK_OFF_REMOVAL`) by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4333 + * Items are removed outright instead of making them unusable. +* Added Heal Bell/Soundproof Gen 5-8+ interactions with `B_HEAL_BELL_SOUNDPROOF` config by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4732 + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5060 +* Added Spicy Extract's effect by @AlexOn1ine, @Skeli789, @kittenchilly and @ZnogyroP in https://github.com/rh-hideout/pokeemerald-expansion/pull/4211 +* Added `B_RETURN_STOLEN_NPC_ITEMS` config for Covet/Thief not being able to steal from NPCs by @moostoet and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4605 +* Added Dragon Darts effect (CFRU port) by @AlexOn1ine, @Skeli789 and @BuffelSaft in https://github.com/rh-hideout/pokeemerald-expansion/pull/4612 + * Animation by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4620 +### Changed +* `EFFECT_TRIPLE_KICK`'s base power uses the move's `strikeCount` instead of a constant by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4608 + * This allows users to create "Quadruple Kick" and similar moves. +* Migrated move animation pointers to `gMovesInfo` by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4683 + * This removes the need for `gBattleAnims_Moves` which had potential ordering issues if not kept in line with move IDs. + * If `battleAnimScript` is not defined for a move, it defaults to Tackle's animation. + * Migration script available in `migration_scripts/battle_anim_moves_refactor.py` +### Fixed +* Multiple Ally Switch fixes by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4451 + * Shadows no longer disappear + safety checks. + * Corrected animation for opponents. +* Fixed Avalanche's target by @TheLastMudkip in https://github.com/rh-hideout/pokeemerald-expansion/pull/4581 +* Fixed Feint and Feint Attack's descriptions by @lhearachel in https://github.com/rh-hideout/pokeemerald-expansion/pull/4617 +* Fixed Mud Sport/Water Sport reducing damage by 77% instead of 67% in Gen5+ by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4874 + +## 🎭 Abilities 🎭 +### Added +* Added Poison Puppeteer's effect by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4416 +* Added Tera Shift, Tera Shell, and Teraform Zero by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4418 + * `FORM_CHANGE_BATTLE_SWITCH` now has ability as optional parameter. + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4742 +* Added Toxic Chain's effect by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4823 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4843 +* Added `B_ABILITY_TRIGGER_CHANCE` config to update trigger chances of abilities to Gen4+ by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829 + * Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 30% chance to trigger in Gen4+ instead of 1/3 in Gen3. + * Effect Spore has an 11%, 10% and 9% chance of triggering Sleep, Paralysis and Poison in Gen4+ instead of equal 10% each in Gen3. +### Changed +* #### Removed Gen 9 settings for out-of-battle abilities by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4282 + * These configs no longer disable out-of-battle ability effects when set to `GEN_9`. + * `OW_SUPER_LUCK`. + * `OW_INFILTRATOR`. + * `OW_HARVEST`. + * `OW_LIGHTNING_ROD`. + * `OW_STORM_DRAIN`. + * `OW_FLASH_FIRE`. + * These configs have been removed + * `OW_COMPOUND_EYES`. + * `OW_CUTE_CHARM`. + * `OW_ILLUMINATE`. + * `OW_MAGNET_PULL`. + * `OW_STATIC`. +### Fixed +* Fixed Mirror Armor bouncing Sticky Web's stat reduction to the opponent by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4713 +* Effect Spore now uses `B_POWDER_GRASS` to toggle Grass-type Pokémon immunity to it by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829 + +## 🧶 Items 🧶 +### Added +* Added Booster Energy's effect by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4337 + * Cleanup + * By @PCG06 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4354 + * By @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4804 +### Changed +* #### Removed `gItemIconTable` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4579 + * Sprite and palette pointers have been moved to `gItemsInfo` as `iconPic` and `iconPalette` respectively. + * Migration script available in `migration_scripts/convert_item_icons.py` + * Cleanup + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4591 + * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4658 +* #### Automatically display TM/HM icons based on their move by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4452 + * TM palettes are now stored in `gTypesInfo` in the `paletteTMHM` field. + * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4487 + +## 🤖 Battle AI 🤖 +### Added +* Added `AI_GetBattlerAbility` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4555 +* Added `AI_FLAG_CONSERVATIVE` flag by @Pawkkie and @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4615 + * AI will assume low damage rolls for its `calculationsDamage` roll selection in `AI_CalcDamage` + * Cleanup + * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4663 +* Added `AI_FLAG_SEQUENCE_SWITCHING` flag by @Pawkkie, Kasen, @pkmnsnfrn and @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4878 + * AI will keep their party order consistently with switches. +* Added `setdynamicaifunc`, which allows to setup custom AI functions before a battle besides the predetermined ones used by AI Flags @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4908 + * Eg: + ``` + setdynamicaifunc AI_TagBattlePreferFoe + multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN + ``` + Where `AI_TagBattlePreferFoe` prioritizes attacking the opposite battler index. +### Changed +* AI now calculates and stores minimum possible move damage and uses it with `AI_FLAG_TRY_TO_FAINT` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4760 + * This allows AI to prefer guaranteed KO moves over highest expected damage move. + * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4808 +* AI Revenge Killer switching factors in Trick Room by @Shadowzlmao and @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4794 +* AI Smarter Choice AI for Status Moves by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4872 + * Better behavior for AI under Choice Item effects. + * Cleanup by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4911 +* AI Smarter Focus Punch and Substitute handling by @Pawkkie, @Kasenn and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4952 +* Moved `RestoreBattlerData` out of `Ai_CalcDmg` and added `SaveBattlerData` Protections by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4156 + * Cleanup + * By @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4586 +* Made AI see Loaded Dice hold effect for multi hit moves that strike 5 times by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4622 +* `AI_FLAG_RISKY` Improvements by @Pawkkie, @AlexOn1ine and @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4648 + * Check the PR for in depth details. + * Cleanup + * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4790 + * By @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/5032 +* Removed temporary scores in `AI_CalcMoveEffectScores` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4655 +* Changed `AI_IS_SLOWER` and `AI_IS_FASTER` comparisons into `AI_IsFaster` and `AI_IsSlower` functions by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4671 + * `AI_STRIKES_FIRST` is also replaced by `AI_IsFaster`. +* Switch AI uses trapping abilities aggressively by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4669 +* Use 9th roll instead of average in AI calcs by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4679 +* Use `AI_DATA->abilities` in more places by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4729 +* Minor switch AI cleanup by @Pawkkie, @DizzyEggg, @AlexOn1ine and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4849 +* Removed `SetBattlerData` from `AI_CalcDamage` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4881 +* Removed unused `AI_FLAG_HELP_PARTNER` by @pkmnsnfrn and @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4918 +* Added missing `ADJUST_SCORE`s by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4925 +* Reduced `AI_WhoStrikesFirst` to the most essential parts by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4978 +* Changed score adjustments to `tempScore` increases by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4987 +### Fixed +* Minor AI flag fixes/cleanup by @Pawkkie, @AlexOn1ine and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4924 + +## 🧹 Other Cleanup 🧹 +### Changed +* Corrected species info struct hex comments by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4798 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4800 + +## 🧪 Test Runner 🧪 +### Added +* Added missing weather tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4434 +* Added missing Gale Wings test by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4694 +* Added `SWITCH_OUT_MESSAGE` and `SEND_IN_MESSAGE` macros to avoid tests from failing based on changing switch out/in messages by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4717 + * Usage: `SEND_IN_MESSAGE("Wobbuffet");` + * Tests have been updated to use these new macros. +* Added missing Hidden Power test by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4462 +* Added some Terastallization tests by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5020 +### Changed +* Cleaned up Frisk test by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4441 +* Renamed `MgbaPrintf_` to `Test_MgbaPrintf` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4642 +* AI tests have been moved to their own folder by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4898 +* Species are now always included in tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4810 +* Added Battle Anim Debug Check to see if animations aren't cleared by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4930 +* Test battlers always have their forced abilities to prevent them from changing during a test by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4707 +### Fixed +* Test runner uses Set mode to avoid an issue where tests prompted switching and caused a timeout by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4661 + +## New Contributors +* @Pokabbie made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4507 +* @TheLastMudkip made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4581 +* @moostoet made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4605 +* @rayrobdod made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4727 +* @innocenthedgehog made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4988 + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.5...expansion/1.9.0 + + diff --git a/docs/changelogs/template.md b/docs/changelogs/template.md index b70a44ce54..6641d612f3 100644 --- a/docs/changelogs/template.md +++ b/docs/changelogs/template.md @@ -6,7 +6,8 @@ - Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`. ``` -## 🌋 *IMPORTANT CHANGES* 🌋 +## 🌋 *REFACTORS* 🌋 +📜 = Uses a migration script. * N/A ## 💥 *Softlock/Crash fixes* 💥 @@ -49,6 +50,13 @@ * N/A #### Fixed * N/A +### ***merrp/aarant's Followers*** +#### Added +* N/A +#### Changed +* N/A +#### Fixed +* N/A ## 🐉 Pokémon 🐉 ### Added diff --git a/gflib/malloc.c b/gflib/malloc.c index edf7be1305..95d41fbb97 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -99,7 +99,7 @@ void *AllocInternal(void *heapStart, u32 size, const char *location) block = block->next; } while (block != head); - Test_ExitWithResult(TEST_RESULT_ERROR, "%s: OOM allocating %d bytes", location, size); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":L%s:%d, %s: OOM allocating %d bytes", gTestRunnerState.test->filename, SourceLine(0), location, size); #endif return NULL; } diff --git a/gflib/sprite.c b/gflib/sprite.c index 248f80f5a4..7823888cb5 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1443,7 +1443,7 @@ void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotat CopyOamMatrix(matrixNum, &matrix); } -u16 LoadSpriteSheet(const struct SpriteSheet *sheet) +static u16 LoadSpriteSheetWithOffset(const struct SpriteSheet *sheet, u32 offset) { s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); @@ -1454,11 +1454,16 @@ u16 LoadSpriteSheet(const struct SpriteSheet *sheet) else { AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - CpuSmartCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + CpuSmartCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart + offset, sheet->size - offset); return (u16)tileStart; } } +u16 LoadSpriteSheet(const struct SpriteSheet *sheet) +{ + return LoadSpriteSheetWithOffset(sheet, 0); +} + // Like LoadSpriteSheet, but checks if already loaded, and uses template image frames u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u32 frame, s32 offset) { @@ -1469,10 +1474,10 @@ u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u32 frame, return TAG_NONE; if ((tileStart = GetSpriteTileStartByTag(template->tileTag)) != TAG_NONE) // return if already loaded return tileStart; - sheet.data = template->images[frame].data - offset; + sheet.data = template->images[frame].data; sheet.size = template->images[frame].size; sheet.tag = template->tileTag; - return LoadSpriteSheet(&sheet); + return LoadSpriteSheetWithOffset(&sheet, offset); } void LoadSpriteSheets(const struct SpriteSheet *sheets) diff --git a/gflib/text.c b/gflib/text.c index b763429e3e..59c6e3f4e8 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -2155,21 +2155,17 @@ u32 GetFontIdToFit(const u8 *string, u32 fontId, u32 letterSpacing, u32 widthPx) u8 *PrependFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width) { - u32 fitFontId = GetFontIdToFit(start, fontId, 0, width); - if (fitFontId != fontId) - { - memmove(&start[3], &start[0], end - start); - start[0] = EXT_CTRL_CODE_BEGIN; - start[1] = EXT_CTRL_CODE_FONT; - start[2] = fitFontId; - end[3] = EOS; - return end + 3; - } - else - { + + if (fitFontId == fontId) return end; - } + + memmove(&start[3], &start[0], end - start); + start[0] = EXT_CTRL_CODE_BEGIN; + start[1] = EXT_CTRL_CODE_FONT; + start[2] = fitFontId; + end[3] = EOS; + return end + 3; } u8 *WrapFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width) diff --git a/graphics/battle_anims/sprites/cudgel.png b/graphics/battle_anims/sprites/cudgel.png new file mode 100644 index 0000000000..a43b450adc Binary files /dev/null and b/graphics/battle_anims/sprites/cudgel.png differ diff --git a/graphics/battle_interface/burst_trigger.png b/graphics/battle_interface/burst_trigger.png index e3eb6384d4..bbd16ac555 100644 Binary files a/graphics/battle_interface/burst_trigger.png and b/graphics/battle_interface/burst_trigger.png differ diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png index d719494d9f..7d5fbaba0f 100644 Binary files a/graphics/battle_interface/z_move_trigger.png and b/graphics/battle_interface/z_move_trigger.png differ diff --git a/graphics/pokemon/bounsweet/front.png b/graphics/pokemon/bounsweet/front.png index a31220dcf9..9e09d6d728 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 6ba3b9fb34..029ef53c85 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 14fc1f5ab3..704d72a19a 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 32aeed0b52..7969fb7197 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 4447621e55..ce29eb8d5f 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 a609040e84..5deb432b19 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 163ab2ba2d..58d39c97d2 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 58974fb24f..a5ffc233bc 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 a080a77f09..d133d63f7a 100644 Binary files a/graphics/pokemon/lurantis/back.png and b/graphics/pokemon/lurantis/back.png differ diff --git a/graphics/pokemon/ogerpon/back.png b/graphics/pokemon/ogerpon/back.png index 8ec6f0fc0d..75f309fd67 100644 Binary files a/graphics/pokemon/ogerpon/back.png and b/graphics/pokemon/ogerpon/back.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/back.png b/graphics/pokemon/ogerpon/cornerstone/back.png index 1f37c9c1df..7e40fee557 100644 Binary files a/graphics/pokemon/ogerpon/cornerstone/back.png and b/graphics/pokemon/ogerpon/cornerstone/back.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/front.png b/graphics/pokemon/ogerpon/cornerstone/front.png index 6bca5e915c..8e96be70e7 100644 Binary files a/graphics/pokemon/ogerpon/cornerstone/front.png and b/graphics/pokemon/ogerpon/cornerstone/front.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/normal.pal b/graphics/pokemon/ogerpon/cornerstone/normal.pal index 057bd48dcc..852898a6b7 100644 --- a/graphics/pokemon/ogerpon/cornerstone/normal.pal +++ b/graphics/pokemon/ogerpon/cornerstone/normal.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 15 148 209 161 +0 0 0 42 44 41 21 158 7 -0 0 0 74 76 73 -25 27 24 61 113 53 +25 27 24 109 99 108 133 139 139 53 134 168 diff --git a/graphics/pokemon/ogerpon/cornerstone/shiny.pal b/graphics/pokemon/ogerpon/cornerstone/shiny.pal index b4d7d15195..c4956ce774 100644 --- a/graphics/pokemon/ogerpon/cornerstone/shiny.pal +++ b/graphics/pokemon/ogerpon/cornerstone/shiny.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 15 148 209 161 +0 0 0 42 44 41 21 158 7 -0 0 0 74 76 73 -25 27 24 61 113 53 +25 27 24 109 99 108 133 139 139 53 134 168 diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/back.png b/graphics/pokemon/ogerpon/cornerstone/tera/back.png new file mode 100644 index 0000000000..63c105ba0d Binary files /dev/null and b/graphics/pokemon/ogerpon/cornerstone/tera/back.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/front.png b/graphics/pokemon/ogerpon/cornerstone/tera/front.png new file mode 100644 index 0000000000..7b93d3210a Binary files /dev/null and b/graphics/pokemon/ogerpon/cornerstone/tera/front.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal b/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal new file mode 100644 index 0000000000..eb034d36e9 --- /dev/null +++ b/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +14 17 13 +27 29 27 +42 44 41 +46 48 45 +74 76 73 +90 96 103 +61 113 53 +139 99 57 +0 150 177 +90 171 46 +149 151 148 +0 212 248 +196 198 195 +253 218 63 +251 253 250 diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal b/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal new file mode 100644 index 0000000000..eb034d36e9 --- /dev/null +++ b/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +14 17 13 +27 29 27 +42 44 41 +46 48 45 +74 76 73 +90 96 103 +61 113 53 +139 99 57 +0 150 177 +90 171 46 +149 151 148 +0 212 248 +196 198 195 +253 218 63 +251 253 250 diff --git a/graphics/pokemon/ogerpon/front.png b/graphics/pokemon/ogerpon/front.png index 5fa971f873..dec38ef0b8 100644 Binary files a/graphics/pokemon/ogerpon/front.png and b/graphics/pokemon/ogerpon/front.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/back.png b/graphics/pokemon/ogerpon/hearthflame/back.png index d092ec3297..d6d927f19d 100644 Binary files a/graphics/pokemon/ogerpon/hearthflame/back.png and b/graphics/pokemon/ogerpon/hearthflame/back.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/front.png b/graphics/pokemon/ogerpon/hearthflame/front.png index 036ea37f32..d8b9cb7b23 100644 Binary files a/graphics/pokemon/ogerpon/hearthflame/front.png and b/graphics/pokemon/ogerpon/hearthflame/front.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/normal.pal b/graphics/pokemon/ogerpon/hearthflame/normal.pal index 637556660a..3f478af8aa 100644 --- a/graphics/pokemon/ogerpon/hearthflame/normal.pal +++ b/graphics/pokemon/ogerpon/hearthflame/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 148 210 164 -156 153 172 -131 28 24 -49 133 172 -213 230 246 +0 0 0 41 44 41 +16 157 0 +230 60 49 +57 113 49 +49 133 172 +131 28 24 +213 230 246 255 198 74 172 105 32 -16 157 0 -57 113 49 +156 153 172 49 190 230 -0 0 0 164 52 49 74 76 74 189 137 90 -230 60 49 diff --git a/graphics/pokemon/ogerpon/hearthflame/shiny.pal b/graphics/pokemon/ogerpon/hearthflame/shiny.pal index f874367b4b..fee0f8de7b 100644 --- a/graphics/pokemon/ogerpon/hearthflame/shiny.pal +++ b/graphics/pokemon/ogerpon/hearthflame/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 148 210 164 -156 153 172 -131 28 24 -49 133 172 -213 230 246 +0 0 0 41 44 41 +16 157 0 +230 60 49 +57 113 49 +49 133 172 +131 28 24 +213 230 246 255 198 74 124 162 56 -16 157 0 -57 113 49 +156 153 172 49 190 230 -0 0 0 164 52 49 74 76 74 189 137 90 -230 60 49 diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/back.png b/graphics/pokemon/ogerpon/hearthflame/tera/back.png new file mode 100644 index 0000000000..d98631e11e Binary files /dev/null and b/graphics/pokemon/ogerpon/hearthflame/tera/back.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/front.png b/graphics/pokemon/ogerpon/hearthflame/tera/front.png new file mode 100644 index 0000000000..8a9e9b6a0a Binary files /dev/null and b/graphics/pokemon/ogerpon/hearthflame/tera/front.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal b/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal new file mode 100644 index 0000000000..fbb3c82e19 --- /dev/null +++ b/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +222 57 229 +16 16 16 +87 15 15 +44 43 41 +153 23 23 +75 76 76 +64 112 54 +237 59 47 +141 98 59 +91 171 49 +209 154 24 +232 157 2 +0 211 249 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal b/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal new file mode 100644 index 0000000000..fbb3c82e19 --- /dev/null +++ b/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +222 57 229 +16 16 16 +87 15 15 +44 43 41 +153 23 23 +75 76 76 +64 112 54 +237 59 47 +141 98 59 +91 171 49 +209 154 24 +232 157 2 +0 211 249 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/normal.pal b/graphics/pokemon/ogerpon/normal.pal index 8f715fd815..a1ac4baf96 100644 --- a/graphics/pokemon/ogerpon/normal.pal +++ b/graphics/pokemon/ogerpon/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 15 148 209 161 -42 44 41 0 1 0 -27 70 15 -0 164 153 -17 106 68 +42 44 41 21 158 7 +27 70 15 +61 113 53 +17 106 68 +83 133 90 74 76 73 -61 97 53 175 216 159 251 253 250 139 99 57 +0 164 153 120 81 39 219 157 92 -83 133 90 diff --git a/graphics/pokemon/ogerpon/shiny.pal b/graphics/pokemon/ogerpon/shiny.pal index a96c55d35d..08c751ebda 100644 --- a/graphics/pokemon/ogerpon/shiny.pal +++ b/graphics/pokemon/ogerpon/shiny.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 15 148 209 161 -42 44 41 0 1 0 -27 70 15 -0 164 153 -17 106 68 +42 44 41 21 158 7 +27 70 15 +61 113 53 +17 106 68 +83 133 90 74 76 73 -61 97 53 175 216 159 251 253 250 139 99 57 +0 164 153 124 162 56 219 157 92 -83 133 90 diff --git a/graphics/pokemon/ogerpon/tera/back.png b/graphics/pokemon/ogerpon/tera/back.png new file mode 100644 index 0000000000..47e211e556 Binary files /dev/null and b/graphics/pokemon/ogerpon/tera/back.png differ diff --git a/graphics/pokemon/ogerpon/tera/front.png b/graphics/pokemon/ogerpon/tera/front.png new file mode 100644 index 0000000000..7131db78d5 Binary files /dev/null and b/graphics/pokemon/ogerpon/tera/front.png differ diff --git a/graphics/pokemon/ogerpon/tera/normal.pal b/graphics/pokemon/ogerpon/tera/normal.pal new file mode 100644 index 0000000000..2409682978 --- /dev/null +++ b/graphics/pokemon/ogerpon/tera/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 57 229 +16 16 16 +44 43 41 +75 76 76 +15 106 67 +64 112 54 +141 98 59 +9 164 156 +97 167 27 +91 171 49 +84 182 101 +232 157 2 +219 156 94 +151 216 120 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/tera/shiny.pal b/graphics/pokemon/ogerpon/tera/shiny.pal new file mode 100644 index 0000000000..2409682978 --- /dev/null +++ b/graphics/pokemon/ogerpon/tera/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 57 229 +16 16 16 +44 43 41 +75 76 76 +15 106 67 +64 112 54 +141 98 59 +9 164 156 +97 167 27 +91 171 49 +84 182 101 +232 157 2 +219 156 94 +151 216 120 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/wellspring/back.png b/graphics/pokemon/ogerpon/wellspring/back.png index ed74528e65..87d82032f4 100644 Binary files a/graphics/pokemon/ogerpon/wellspring/back.png and b/graphics/pokemon/ogerpon/wellspring/back.png differ diff --git a/graphics/pokemon/ogerpon/wellspring/front.png b/graphics/pokemon/ogerpon/wellspring/front.png index 5263ce2f1e..77ffb489a5 100644 Binary files a/graphics/pokemon/ogerpon/wellspring/front.png and b/graphics/pokemon/ogerpon/wellspring/front.png differ diff --git a/graphics/pokemon/ogerpon/wellspring/normal.pal b/graphics/pokemon/ogerpon/wellspring/normal.pal index 4b22619be4..db40508a52 100644 --- a/graphics/pokemon/ogerpon/wellspring/normal.pal +++ b/graphics/pokemon/ogerpon/wellspring/normal.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 16 148 209 161 +0 0 0 42 44 41 21 158 7 -74 76 73 -0 0 0 -61 113 53 11 64 121 +61 113 53 +74 76 73 15 90 170 0 126 229 53 134 168 diff --git a/graphics/pokemon/ogerpon/wellspring/shiny.pal b/graphics/pokemon/ogerpon/wellspring/shiny.pal index bca722c95d..7c44d3352d 100644 --- a/graphics/pokemon/ogerpon/wellspring/shiny.pal +++ b/graphics/pokemon/ogerpon/wellspring/shiny.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 16 148 209 161 +0 0 0 42 44 41 21 158 7 -74 76 73 -0 0 0 -61 113 53 11 64 121 +61 113 53 +74 76 73 15 90 170 0 126 229 53 134 168 diff --git a/graphics/pokemon/ogerpon/wellspring/tera/back.png b/graphics/pokemon/ogerpon/wellspring/tera/back.png new file mode 100644 index 0000000000..a0a9c9834a Binary files /dev/null and b/graphics/pokemon/ogerpon/wellspring/tera/back.png differ diff --git a/graphics/pokemon/ogerpon/wellspring/tera/front.png b/graphics/pokemon/ogerpon/wellspring/tera/front.png new file mode 100644 index 0000000000..714d271fb2 Binary files /dev/null and b/graphics/pokemon/ogerpon/wellspring/tera/front.png differ diff --git a/graphics/pokemon/ogerpon/wellspring/tera/normal.pal b/graphics/pokemon/ogerpon/wellspring/tera/normal.pal new file mode 100644 index 0000000000..c4f92593b6 --- /dev/null +++ b/graphics/pokemon/ogerpon/wellspring/tera/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +14 17 13 +42 44 41 +22 65 128 +74 76 73 +19 94 181 +61 113 53 +139 99 57 +0 130 229 +90 171 46 +42 214 251 +139 196 213 +204 222 254 +251 253 250 +253 218 63 +232 157 0 diff --git a/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal b/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal new file mode 100644 index 0000000000..c4f92593b6 --- /dev/null +++ b/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +14 17 13 +42 44 41 +22 65 128 +74 76 73 +19 94 181 +61 113 53 +139 99 57 +0 130 229 +90 171 46 +42 214 251 +139 196 213 +204 222 254 +251 253 250 +253 218 63 +232 157 0 diff --git a/graphics/pokemon/sandile/anim_front.png b/graphics/pokemon/sandile/anim_front.png index 24d3545a42..ccf8146b3b 100644 Binary files a/graphics/pokemon/sandile/anim_front.png and b/graphics/pokemon/sandile/anim_front.png differ diff --git a/graphics/pokemon/sandile/back.png b/graphics/pokemon/sandile/back.png index 1680947040..0bf5c9e3f4 100644 Binary files a/graphics/pokemon/sandile/back.png and b/graphics/pokemon/sandile/back.png differ diff --git a/graphics/pokemon/sandile/normal.pal b/graphics/pokemon/sandile/normal.pal index b079c8061a..f428787e3c 100644 --- a/graphics/pokemon/sandile/normal.pal +++ b/graphics/pokemon/sandile/normal.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -16 +13 152 208 160 139 115 49 32 32 32 @@ -12,8 +12,5 @@ JASC-PAL 180 180 189 82 82 98 205 115 123 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +205 115 123 +169 92 99 diff --git a/graphics/pokemon/sandile/shiny.pal b/graphics/pokemon/sandile/shiny.pal index f92d5f6bd0..b1a758254b 100644 --- a/graphics/pokemon/sandile/shiny.pal +++ b/graphics/pokemon/sandile/shiny.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -16 +13 152 208 160 120 136 56 32 32 32 @@ -12,8 +12,5 @@ JASC-PAL 176 168 168 80 80 96 64 144 160 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +205 115 123 +169 92 99 diff --git a/graphics/pokemon/terapagos/stellar/back.png b/graphics/pokemon/terapagos/stellar/back.png new file mode 100644 index 0000000000..bad6bc3916 Binary files /dev/null and b/graphics/pokemon/terapagos/stellar/back.png differ diff --git a/graphics/pokemon/terapagos/stellar/front.png b/graphics/pokemon/terapagos/stellar/front.png new file mode 100644 index 0000000000..62bac5c468 Binary files /dev/null and b/graphics/pokemon/terapagos/stellar/front.png differ diff --git a/graphics/pokemon/terapagos/stellar/normal.pal b/graphics/pokemon/terapagos/stellar/normal.pal new file mode 100644 index 0000000000..4cdc143ad6 --- /dev/null +++ b/graphics/pokemon/terapagos/stellar/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +26 26 26 +50 56 135 +56 56 177 +62 85 198 +169 58 211 +147 78 192 +247 69 26 +65 132 243 +43 149 206 +34 177 76 +44 211 177 +245 160 163 +165 230 153 +255 213 45 +212 245 255 diff --git a/graphics/pokemon/terapagos/stellar/shiny.pal b/graphics/pokemon/terapagos/stellar/shiny.pal new file mode 100644 index 0000000000..4cdc143ad6 --- /dev/null +++ b/graphics/pokemon/terapagos/stellar/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +224 54 230 +26 26 26 +50 56 135 +56 56 177 +62 85 198 +169 58 211 +147 78 192 +247 69 26 +65 132 243 +43 149 206 +34 177 76 +44 211 177 +245 160 163 +165 230 153 +255 213 45 +212 245 255 diff --git a/graphics/pokemon/urshifu/front.png b/graphics/pokemon/urshifu/front.png index cbb462be2e..468ba31f70 100644 Binary files a/graphics/pokemon/urshifu/front.png and b/graphics/pokemon/urshifu/front.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style/front.png b/graphics/pokemon/urshifu/rapid_strike_style/front.png index 09d7297142..d06637f4e1 100644 Binary files a/graphics/pokemon/urshifu/rapid_strike_style/front.png and b/graphics/pokemon/urshifu/rapid_strike_style/front.png differ diff --git a/include/battle.h b/include/battle.h index 6f105fa54c..1aa26a9470 100644 --- a/include/battle.h +++ b/include/battle.h @@ -16,6 +16,7 @@ #include "battle_debug.h" #include "battle_dynamax.h" #include "battle_terastal.h" +#include "battle_gimmick.h" #include "random.h" // for rng_value_t // Helper for accessing command arguments and advancing gBattlescriptCurrInstr. @@ -217,10 +218,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; @@ -370,8 +371,6 @@ struct AiLogicData bool8 weatherHasEffect; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. u8 mostSuitableMonId[MAX_BATTLERS_COUNT]; // Stores result of GetMostSuitableMonToSwitchInto, which decides which generic mon the AI would switch into if they decide to switch. This can be overruled by specific mons found in ShouldSwitch; the final resulting mon is stored in AI_monToSwitchIntoId. struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c - bool8 shouldTerastal[MAX_BATTLERS_COUNT]; - bool8 shouldDynamax[MAX_BATTLERS_COUNT]; }; struct AI_ThinkingStruct @@ -558,24 +557,6 @@ struct LinkBattlerHeader struct BattleEnigmaBerry battleEnigmaBerry; }; -struct MegaEvolutionData -{ - u8 toEvolve; // As flags using gBitTable. - bool8 alreadyEvolved[4]; // Array id is used for mon position. - u8 battlerId; - bool8 playerSelect; - u8 triggerSpriteId; -}; - -struct UltraBurstData -{ - u8 toBurst; // As flags using gBitTable. - bool8 alreadyBursted[4]; // Array id is used for mon position. - u8 battlerId; - bool8 playerSelect; - u8 triggerSpriteId; -}; - struct Illusion { u8 on; @@ -587,48 +568,30 @@ struct Illusion struct ZMoveData { - u8 viable:1; // current move can become a z move + u8 viable:1; // current move can become a z move u8 viewing:1; // if player is viewing the z move name instead of regular moves - u8 active:1; // is z move being used this turn - u8 zStatusActive:1; - u8 healReplacement:1; - u8 activeCategory:2; // active z move category - u8 zUnused:1; - u8 triggerSpriteId; + u8 healReplacement:6; u8 possibleZMoves[MAX_BATTLERS_COUNT]; - u16 chosenZMove; // z move of move cursor is on - u8 effect; - u8 used[MAX_BATTLERS_COUNT]; //one per bank for multi-battles - u16 toBeUsed[MAX_BATTLERS_COUNT]; // z moves per battler to be used u16 baseMoves[MAX_BATTLERS_COUNT]; - u8 categories[MAX_BATTLERS_COUNT]; }; struct DynamaxData { - bool8 playerSelect; - u8 triggerSpriteId; - u8 toDynamax; // flags using gBitTable - bool8 alreadyDynamaxed[NUM_BATTLE_SIDES]; - bool8 dynamaxed[MAX_BATTLERS_COUNT]; u8 dynamaxTurns[MAX_BATTLERS_COUNT]; - u8 usingMaxMove[MAX_BATTLERS_COUNT]; - u8 activeCategory; - u8 categories[MAX_BATTLERS_COUNT]; - u16 baseMove[MAX_BATTLERS_COUNT]; // base move of Max Move + u16 baseMoves[MAX_BATTLERS_COUNT]; // base move of Max Move u16 lastUsedBaseMove; u16 levelUpHP; }; -struct TeraData +struct BattleGimmickData { - bool8 toTera; // flags using gBitTable - bool8 isTerastallized[NUM_BATTLE_SIDES]; // stored as a bitfield for each side's party members - bool8 alreadyTerastallized[MAX_BATTLERS_COUNT]; - bool8 playerSelect; - u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side + u8 usableGimmick[MAX_BATTLERS_COUNT]; // first usable gimmick that can be selected for each battler + bool8 playerSelect; // used to toggle trigger and update battle UI u8 triggerSpriteId; u8 indicatorSpriteId[MAX_BATTLERS_COUNT]; + u8 toActivate; // stores whether a battler should transform at start of turn as bitfield + u8 activeGimmick[NUM_BATTLE_SIDES][PARTY_SIZE]; // stores the active gimmick for each party member + bool8 activated[MAX_BATTLERS_COUNT][GIMMICKS_COUNT]; // stores whether a trainer has used gimmick }; struct LostItem @@ -669,7 +632,7 @@ struct BattleStruct u8 moneyMultiplierItem:1; u8 moneyMultiplierMove:1; u8 savedTurnActionNumber; - u8 switchInAbilitiesCounter; + u8 eventsBeforeFirstTurnState; u8 faintedActionsState; u8 faintedActionsBattlerId; u8 scriptPartyIdx; // for printing the nickname @@ -703,13 +666,17 @@ 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]; u16 choicedMove[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT]; - u8 switchInItemsCounter; + u8 switchInBattlerCounter; u8 arenaTurnCounter; u8 turnSideTracker; u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker] @@ -753,11 +720,9 @@ struct BattleStruct u8 activeAbilityPopUps; // as bits for each battler u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler bool8 throwingPokeBall; - struct MegaEvolutionData mega; - struct UltraBurstData burst; struct ZMoveData zmove; struct DynamaxData dynamax; - struct TeraData tera; + struct BattleGimmickData gimmick; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; u8 introState; @@ -779,12 +744,15 @@ 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 u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky u8 bouncedMoveIsUsed:1; + u8 descriptionSubmenu:1; // For Move Description window in move selection screen + u8 ackBallUseBtn:1; // Used for the last used ball feature + u8 ballSwapped:1; // Used for the last used ball feature u8 ballSpriteIds[2]; // item gfx, window gfx u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle. @@ -827,8 +795,11 @@ struct BattleStruct u8 quickClawRandom[MAX_BATTLERS_COUNT]; u8 quickDrawRandom[MAX_BATTLERS_COUNT]; u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; + u8 speedTieBreaks; // MAX_BATTLERS_COUNT! values. u8 boosterEnergyActivates; u8 distortedTypeMatchups; + u8 categoryOverride; // for Z-Moves and Max Moves + u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, @@ -840,13 +811,12 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define GET_MOVE_TYPE(move, typeArg) \ -{ \ +#define GET_MOVE_TYPE(move, typeArg) do { \ if (gBattleStruct->dynamicMoveType) \ typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ else \ - typeArg = gMovesInfo[move].type; \ -} + typeArg = gMovesInfo[move].type; \ +} while(0) #define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) #define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index ce92296b67..431ed35698 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -1,6 +1,9 @@ #ifndef GUARD_BATTLE_AI_MAIN_H #define GUARD_BATTLE_AI_MAIN_H + +typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); + #define UNKNOWN_NO_OF_HITS UINT32_MAX // return vals for BattleAI_ChooseMoveOrAction @@ -29,10 +32,12 @@ #define STAT_CHANGE_ACC 10 #define STAT_CHANGE_EVASION 11 -#define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect -#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target +#define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect +#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target +#define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage // Scores given in AI_CalcMoveEffectScore +#define NO_INCREASE 0 #define WEAK_EFFECT 1 #define DECENT_EFFECT 2 #define GOOD_EFFECT 3 @@ -64,6 +69,14 @@ score += val; \ } while (0) \ +#define ADJUST_AND_RETURN_SCORE(val) \ + do \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + score += val; \ + return score; \ + } while (0) \ + #define ADJUST_SCORE_PTR(val) \ do \ { \ @@ -92,6 +105,7 @@ void Ai_InitPartyStruct(void); void Ai_UpdateSwitchInData(u32 battler); void Ai_UpdateFaintData(u32 battler); void SetAiLogicDataForTurn(struct AiLogicData *aiData); +void ResetDynamicAiFunc(void); extern u8 sBattler_AI; diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 16f6468757..b52e792612 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -3,7 +3,7 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); -u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); +u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); bool32 ShouldSwitch(u32 battler, bool32 emitResult); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index ed30d2ad4e..94d895e8fd 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -42,6 +42,7 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered); bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk); u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk); u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef); +u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget); bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits); bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod); s32 AI_DecideKnownAbilityForTurn(u32 battlerId); @@ -115,6 +116,7 @@ bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception); bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); +bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedMove(u32 move); bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect); bool32 IsStatLoweringMoveEffect(u32 moveEffect); @@ -146,10 +148,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); @@ -190,8 +190,8 @@ bool32 PartyHasMoveCategory(u32 battlerId, u32 category); bool32 SideHasMoveCategory(u32 battlerId, u32 category); // score increases -void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score); -void IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score); +u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId); +u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId); void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 5e157a2766..a670113bc7 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -98,10 +98,7 @@ enum { // Special return values in gBattleBufferB from Battle Controller functions. #define RET_VALUE_LEVELED_UP 11 -#define RET_MEGA_EVOLUTION (1 << 7) -#define RET_ULTRA_BURST (1 << 6) -#define RET_DYNAMAX (1 << 5) -#define RET_TERASTAL (1 << 4) +#define RET_GIMMICK (1 << 7) struct UnusedControllerStruct { @@ -131,8 +128,6 @@ struct ChooseMoveStruct u8 monType1; u8 monType2; u8 monType3; - struct MegaEvolutionData mega; - struct UltraBurstData burst; struct ZMoveData zmove; }; diff --git a/include/battle_dynamax.h b/include/battle_dynamax.h index 1e3f3265b7..20cd4d5e79 100644 --- a/include/battle_dynamax.h +++ b/include/battle_dynamax.h @@ -56,21 +56,19 @@ enum MaxMoveEffect MAX_EFFECT_BYPASS_PROTECT, }; -bool32 IsDynamaxed(u16 battlerId); -bool32 CanDynamax(u16 battlerId); -bool32 IsGigantamaxed(u16 battlerId); +bool32 CanDynamax(u32 battler); +bool32 IsGigantamaxed(u32 battler); void ApplyDynamaxHPMultiplier(u32 battler, struct Pokemon* mon); -void PrepareBattlerForDynamax(u16 battlerId); -u16 GetNonDynamaxHP(u16 battlerId); -u16 GetNonDynamaxMaxHP(u32 battlerId); -void UndoDynamax(u16 battlerId); -bool32 IsMoveBlockedByMaxGuard(u16 move); -bool32 IsMoveBlockedByDynamax(u16 move); +void ActivateDynamax(u32 battler); +u16 GetNonDynamaxHP(u32 battler); +u16 GetNonDynamaxMaxHP(u32 battler); +void UndoDynamax(u32 battler); +bool32 IsMoveBlockedByMaxGuard(u32 move); +bool32 IsMoveBlockedByDynamax(u32 move); -bool32 ShouldUseMaxMove(u16 battlerId, u16 baseMove); -u16 GetMaxMove(u16 battlerId, u16 baseMove); -u8 GetMaxMovePower(u16 move); -bool32 IsMaxMove(u16 move); +u16 GetMaxMove(u32 battler, u32 baseMove); +u8 GetMaxMovePower(u32 move); +bool32 IsMaxMove(u32 move); void ChooseDamageNonTypesString(u8 type); void BS_UpdateDynamax(void); @@ -78,15 +76,8 @@ void BS_SetMaxMoveEffect(void); void BS_SetSteelsurge(void); void BS_TrySetStatus1(void); void BS_TrySetStatus2(void); -void BS_DamageNonTypes(void); void BS_HealOneSixth(void); void BS_TryRecycleBerry(void); void BS_JumpIfDynamaxed(void); -void ChangeDynamaxTriggerSprite(u8 spriteId, u8 animId); -void CreateDynamaxTriggerSprite(u8, bool8); -void HideDynamaxTriggerSprite(void); -bool32 IsDynamaxTriggerSpriteActive(void); -void DestroyDynamaxTriggerSprite(void); - #endif diff --git a/include/battle_gimmick.h b/include/battle_gimmick.h new file mode 100644 index 0000000000..de1352a611 --- /dev/null +++ b/include/battle_gimmick.h @@ -0,0 +1,51 @@ +#ifndef GUARD_BATTLE_GIMMICK_H +#define GUARD_BATTLE_GIMMICK_H + +enum Gimmick +{ + GIMMICK_NONE, + GIMMICK_MEGA, + GIMMICK_ULTRA_BURST, + GIMMICK_Z_MOVE, + GIMMICK_DYNAMAX, + GIMMICK_TERA, + GIMMICKS_COUNT, +}; + +struct GimmickInfo +{ + const struct SpritePalette *triggerPal; // trigger gfx data + const struct SpriteSheet *triggerSheet; + const struct SpriteTemplate *triggerTemplate; + const struct SpritePalette *indicatorPal; // indicator gfx data + const struct SpriteSheet *indicatorSheet; + bool32 (*CanActivate)(u32 battler); + void (*ActivateGimmick)(u32 battler); +}; + +void AssignUsableGimmicks(void); +bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick); +bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick); +void SetActiveGimmick(u32 battler, enum Gimmick gimmick); +enum Gimmick GetActiveGimmick(u32 battler); +bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick); +bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick); +void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick); + +void ChangeGimmickTriggerSprite(u32 spriteId, u32 animId); +void CreateGimmickTriggerSprite(u32 battler); +bool32 IsGimmickTriggerSpriteActive(void); +void HideGimmickTriggerSprite(void); +void DestroyGimmickTriggerSprite(void); + +void LoadIndicatorSpritesGfx(void); +u32 GetIndicatorTileTag(u32 battler); +u32 GetIndicatorPalTag(u32 battler); +void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible); +void UpdateIndicatorOamPriority(u32 healthboxId, u32 oamPriority); +void UpdateIndicatorLevelData(u32 healthboxId, u32 level); +void CreateIndicatorSprite(u32 battler); + +extern const struct GimmickInfo gGimmicksInfo[]; + +#endif diff --git a/include/battle_interface.h b/include/battle_interface.h index 903483e1d5..6635298dc1 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -48,45 +48,38 @@ enum #define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE #define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE -#define TAG_MEGA_TRIGGER_TILE 0xD777 +#define TAG_GIMMICK_TRIGGER_TILE 0xD777 #define TAG_MEGA_INDICATOR_TILE 0xD778 #define TAG_ALPHA_INDICATOR_TILE 0xD779 #define TAG_OMEGA_INDICATOR_TILE 0xD77A -#define TAG_ZMOVE_TRIGGER_TILE 0xD77B -#define TAG_BURST_TRIGGER_TILE 0xD77C -#define TAG_DYNAMAX_TRIGGER_TILE 0xD77D -#define TAG_DYNAMAX_INDICATOR_TILE 0xD77E +#define TAG_DYNAMAX_INDICATOR_TILE 0xD77B -#define TAG_NORMAL_INDICATOR_TILE 0xD77F -#define TAG_FIGHTING_INDICATOR_TILE 0xD780 -#define TAG_FLYING_INDICATOR_TILE 0xD781 -#define TAG_POISON_INDICATOR_TILE 0xD782 -#define TAG_GROUND_INDICATOR_TILE 0xD783 -#define TAG_ROCK_INDICATOR_TILE 0xD784 -#define TAG_BUG_INDICATOR_TILE 0xD785 -#define TAG_GHOST_INDICATOR_TILE 0xD786 -#define TAG_STEEL_INDICATOR_TILE 0xD787 +#define TAG_NORMAL_INDICATOR_TILE 0xD77C +#define TAG_FIGHTING_INDICATOR_TILE 0xD77D +#define TAG_FLYING_INDICATOR_TILE 0xD77E +#define TAG_POISON_INDICATOR_TILE 0xD77F +#define TAG_GROUND_INDICATOR_TILE 0xD780 +#define TAG_ROCK_INDICATOR_TILE 0xD781 +#define TAG_BUG_INDICATOR_TILE 0xD782 +#define TAG_GHOST_INDICATOR_TILE 0xD783 +#define TAG_STEEL_INDICATOR_TILE 0xD784 // empty spot for TYPE_MYSTERY -#define TAG_FIRE_INDICATOR_TILE 0xD789 -#define TAG_WATER_INDICATOR_TILE 0xD78A -#define TAG_GRASS_INDICATOR_TILE 0xD78B -#define TAG_ELECTRIC_INDICATOR_TILE 0xD78C -#define TAG_PSYCHIC_INDICATOR_TILE 0xD78D -#define TAG_ICE_INDICATOR_TILE 0xD78E -#define TAG_DRAGON_INDICATOR_TILE 0xD78F -#define TAG_DARK_INDICATOR_TILE 0xD790 -#define TAG_FAIRY_INDICATOR_TILE 0xD791 -#define TAG_STELLAR_INDICATOR_TILE 0xD792 -#define TAG_TERA_TRIGGER_TILE 0xD793 +#define TAG_FIRE_INDICATOR_TILE 0xD786 +#define TAG_WATER_INDICATOR_TILE 0xD787 +#define TAG_GRASS_INDICATOR_TILE 0xD788 +#define TAG_ELECTRIC_INDICATOR_TILE 0xD789 +#define TAG_PSYCHIC_INDICATOR_TILE 0xD78A +#define TAG_ICE_INDICATOR_TILE 0xD78B +#define TAG_DRAGON_INDICATOR_TILE 0xD78C +#define TAG_DARK_INDICATOR_TILE 0xD78D +#define TAG_FAIRY_INDICATOR_TILE 0xD78E +#define TAG_STELLAR_INDICATOR_TILE 0xD78F +#define TAG_TERA_TRIGGER_TILE 0xD790 -#define TAG_MEGA_TRIGGER_PAL 0xD777 +#define TAG_GIMMICK_TRIGGER_PAL 0xD777 #define TAG_MEGA_INDICATOR_PAL 0xD778 #define TAG_MISC_INDICATOR_PAL 0xD779 // Alpha, Omega, and Dynamax indicators use the same palette as each of them only uses 4 different colors. -#define TAG_ZMOVE_TRIGGER_PAL 0xD77B -#define TAG_BURST_TRIGGER_PAL 0xD77C -#define TAG_DYNAMAX_TRIGGER_PAL 0xD77D -#define TAG_TERA_INDICATOR_PAL 0xD77E -#define TAG_TERA_TRIGGER_PAL 0xD77F +#define TAG_TERA_INDICATOR_PAL 0xD77A enum { @@ -116,18 +109,6 @@ void InitBattlerHealthboxCoords(u8 battler); void GetBattlerHealthboxCoords(u8 battler, s16 *x, s16 *y); void UpdateHpTextInHealthbox(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp); void SwapHpBarsWithHpText(void); -void ChangeMegaTriggerSprite(u8 spriteId, u8 animId); -void CreateMegaTriggerSprite(u8 battlerId, u8 palId); -bool32 IsMegaTriggerSpriteActive(void); -void HideMegaTriggerSprite(void); -void DestroyMegaTriggerSprite(void); -void ChangeBurstTriggerSprite(u8 spriteId, u8 animId); -void CreateBurstTriggerSprite(u8 battlerId, u8 palId); -bool32 IsBurstTriggerSpriteActive(void); -void HideBurstTriggerSprite(void); -void DestroyBurstTriggerSprite(void); -void MegaIndicator_LoadSpritesGfx(void); -void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart); void Task_HidePartyStatusSummary(u8 taskId); void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId); @@ -136,7 +117,6 @@ u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetHPBarLevel(s16 hp, s16 maxhp); void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle); void DestroyAbilityPopUp(u8 battlerId); -void HideTriggerSprites(void); bool32 CanThrowLastUsedBall(void); void TryHideLastUsedBall(void); void TryRestoreLastUsedBall(void); diff --git a/include/battle_main.h b/include/battle_main.h index da7fcaab84..eb0af5aa77 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -23,6 +23,20 @@ struct MultiPartnerMenuPokemon #define BOUNCE_MON 0x0 #define BOUNCE_HEALTHBOX 0x1 +enum { + FIRST_TURN_EVENTS_START, + FIRST_TURN_EVENTS_OVERWORLD_WEATHER, + FIRST_TURN_EVENTS_TERRAIN, + FIRST_TURN_EVENTS_STARTING_STATUS, + FIRST_TURN_EVENTS_TOTEM_BOOST, + FIRST_TURN_EVENTS_NEUTRALIZING_GAS, + FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES, + FIRST_TURN_EVENTS_OPPORTUNIST_1, + FIRST_TURN_EVENTS_ITEM_EFFECTS, + FIRST_TURN_EVENTS_OPPORTUNIST_2, + FIRST_TURN_EVENTS_END, +}; + void CB2_InitBattle(void); void BattleMainCB2(void); void CB2_QuitRecordedBattle(void); @@ -61,6 +75,7 @@ s8 GetChosenMovePriority(u32 battlerId); s8 GetMovePriority(u32 battlerId, u16 move); s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMoves, u32 ability1, u32 ability2, u32 holdEffectBattler1, u32 holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2); +s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index fe9c7f1e64..4f1593d4d8 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -47,7 +47,7 @@ bool32 IsShieldsDownProtected(u32 battler); u32 IsAbilityStatusProtected(u32 battler); bool32 TryResetBattlerStatChanges(u8 battler); bool32 CanCamouflage(u8 battlerId); -u16 GetNaturePowerMove(void); +u32 GetNaturePowerMove(u32 battler); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 071084fb5d..0c9f72c276 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -51,6 +51,8 @@ extern const u8 BattleScript_LevelUp[]; extern const u8 BattleScript_RainContinuesOrEnds[]; extern const u8 BattleScript_SnowContinuesOrEnds[]; extern const u8 BattleScript_DamagingWeatherContinues[]; +extern const u8 BattleScript_DamagingWeather[]; +extern const u8 BattleScript_IceBodyHeal[]; extern const u8 BattleScript_SandStormHailSnowEnds[]; extern const u8 BattleScript_SunlightContinues[]; extern const u8 BattleScript_SunlightFaded[]; @@ -84,6 +86,7 @@ extern const u8 BattleScript_DmgHazardsOnBattlerScripting[]; extern const u8 BattleScript_DmgHazardsOnFaintedBattler[]; extern const u8 BattleScript_PerishSongTakesLife[]; extern const u8 BattleScript_PerishSongCountGoesDown[]; +extern const u8 BattleScript_AllStatsUpZMove[]; extern const u8 BattleScript_AllStatsUp[]; extern const u8 BattleScript_RapidSpinAway[]; extern const u8 BattleScript_WrapFree[]; @@ -268,6 +271,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[]; @@ -838,5 +842,6 @@ extern const u8 BattleScript_EffectShedTail[]; extern const u8 BattleScript_EffectUpperHand[]; extern const u8 BattleScript_EffectTidyUp[]; extern const u8 BattleScript_EffectSpicyExtract[]; +extern const u8 BattleScript_DamageToQuarterTargetHP[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_terastal.h b/include/battle_terastal.h index c5428b6418..6b5c385463 100644 --- a/include/battle_terastal.h +++ b/include/battle_terastal.h @@ -1,31 +1,14 @@ #ifndef GUARD_BATTLE_TERASTAL_H #define GUARD_BATTLE_TERASTAL_H -void PrepareBattlerForTera(u32 battler); +void ActivateTera(u32 battler); void ApplyBattlerVisualsForTeraAnim(u32 battler); bool32 CanTerastallize(u32 battler); u32 GetBattlerTeraType(u32 battler); -bool32 IsTerastallized(u32 battler); void ExpendTypeStellarBoost(u32 battler, u32 type); bool32 IsTypeStellarBoosted(u32 battler, u32 type); uq4_12_t GetTeraMultiplier(u32 battler, u32 type); u16 GetTeraTypeRGB(u32 type); -void ChangeTeraTriggerSprite(u8 spriteId, u8 animId); -void CreateTeraTriggerSprite(u8 battler, u8 palId); -bool32 IsTeraTriggerSpriteActive(void); -void HideTeraTriggerSprite(void); -void DestroyTeraTriggerSprite(void); - -void TeraIndicator_LoadSpriteGfx(void); -bool32 TeraIndicator_ShouldBeInvisible(u32 battler); -u8 TeraIndicator_GetSpriteId(u32 healthboxSpriteId); -void TeraIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); -void TeraIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority); -void TeraIndicator_UpdateLevel(u32 healthboxId, u32 level); -void TeraIndicator_CreateSprite(u32 battler, u32 healthboxSpriteId); -void TeraIndicator_DestroySprite(u32 healthboxSpriteId); -void TeraIndicator_UpdateType(u32 battler, u32 healthboxSpriteId); - #endif diff --git a/include/battle_util.h b/include/battle_util.h index 9ab5275d88..8eadf47c98 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -32,8 +32,6 @@ enum { ABILITYEFFECT_IMMUNITY, ABILITYEFFECT_SYNCHRONIZE, ABILITYEFFECT_ATK_SYNCHRONIZE, - ABILITYEFFECT_TRACE1, - ABILITYEFFECT_TRACE2, ABILITYEFFECT_MOVE_END_OTHER, ABILITYEFFECT_NEUTRALIZINGGAS, ABILITYEFFECT_FIELD_SPORT, // Only used if B_SPORT_TURNS >= GEN_6 @@ -157,7 +155,7 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility) u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg); bool32 TryPrimalReversion(u32 battler); bool32 IsNeutralizingGasOnField(void); -bool32 IsMoldBreakerTypeAbility(u32 ability); +bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability); u32 GetBattlerAbility(u32 battler); u32 IsAbilityOnSide(u32 battler, u32 ability); u32 IsAbilityOnOpposingSide(u32 battler, u32 ability); @@ -196,11 +194,13 @@ s32 GetStealthHazardDamage(u8 hazardType, u32 battler); s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); bool32 CanMegaEvolve(u32 battler); bool32 CanUltraBurst(u32 battler); +void ActivateMegaEvolution(u32 battler); +void ActivateUltraBurst(u32 battler); 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); @@ -247,10 +247,10 @@ bool32 MoveHasChargeTurnAdditionalEffect(u32 move); bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef); bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef); -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); diff --git a/include/battle_z_move.h b/include/battle_z_move.h index 92fb685b2f..bfa4c8495a 100644 --- a/include/battle_z_move.h +++ b/include/battle_z_move.h @@ -13,19 +13,17 @@ struct SignatureZMove u16 zmove; }; -bool8 IsZMove(u16 move); -void QueueZMove(u8 battler, u16 baseMove); -bool32 IsViableZMove(u8 battler, u16 move); -bool32 TryChangeZIndicator(u8 battler, u8 moveIndex); -void CreateZMoveTriggerSprite(u8, bool8); -void HideZMoveTriggerSprite(void); -bool32 IsZMoveTriggerSpriteActive(void); -void DestroyZMoveTriggerSprite(void); -u16 GetTypeBasedZMove(u16 move, u8 battler); +bool32 IsZMove(u32 move); +bool32 CanUseZMove(u32 battler); +u32 GetUsableZMove(u32 battler, u32 move); +void ActivateZMove(u32 battler); +bool32 IsViableZMove(u32 battler, u32 move); +bool32 TryChangeZTrigger(u32 battler, u32 moveIndex); +u32 GetTypeBasedZMove(u32 move); +u32 GetSignatureZMove(u32 move, u32 species, u32 item); bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler); void SetZEffect(void); -bool32 IsZMoveUsable(u8 battler, u16 moveIndex); -void GetUsableZMoves(u8 battler, u16 *moves); -u16 GetZMovePower(u16 move); +void AssignUsableZMoves(u32 battler, u16 *moves); +u32 GetZMovePower(u32 move); #endif // GUARD_BATTLE_Z_MOVE_H diff --git a/include/config/battle.h b/include/config/battle.h index 113c1201b6..881e8a2715 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -138,6 +138,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. @@ -223,6 +224,7 @@ #define B_EXPANDED_MOVE_NAMES TRUE // If set to FALSE, move names are decreased from 16 characters to 12 characters. #define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option +#define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu // Catching settings #define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) @@ -266,4 +268,9 @@ #define B_NEW_IMPACT_PALETTE TRUE // If set to TRUE, it updates the basic 'hit' palette. #define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette. +// Poké Ball animation and sounds +#define B_ENEMY_THROW_BALLS GEN_LATEST // In GEN_6+, enemy Trainers throw Poké Balls into battle instead of them just appearing on the ground and opening. +#define B_ENEMY_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, enemy Trainer's Poké Balls make a sound when thrown to send out a Pokémon. This can only be used when B_ENEMY_THROW_BALLS is set to GEN_6 or later. +#define B_PLAYER_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, the player's Poké Balls make a sound when thrown to send out a Pokémon. + #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/general.h b/include/config/general.h index a374ee97a1..dc39f4919a 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -80,4 +80,7 @@ #define UNITS UNITS_IMPERIAL #define CHAR_DEC_SEPARATOR CHAR_PERIOD // CHAR_PERIOD is used as a decimal separator only in the UK and the US. The rest of the world uses CHAR_COMMA. +// Naming Screen +#define AUTO_LOWERCASE_KEYBOARD GEN_LATEST // Starting in GEN_6, after entering the first uppercase character, the keyboard switches to lowercase letters. + #endif // GUARD_CONFIG_GENERAL_H diff --git a/include/config/overworld.h b/include/config/overworld.h index 6fa0ec9c98..d978c1f48a 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -7,9 +7,9 @@ // Other settings #define OW_POISON_DAMAGE GEN_LATEST // In Gen4, Pokémon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all. -#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times. #define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible Pokémon in your party. #define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last. +#define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC. // These generational defines only make a distinction for Berries and the OW_PC_MOVE_ORDER #define GEN_6_XY GEN_6 @@ -45,7 +45,7 @@ // (You should not use 48x48 sprites/tables for compressed gfx) // 16x32, 32x32, 64x64 etc are fine // Follower Pokémon -#define OW_FOLLOWERS_ENABLED TRUE // Enables follower Pokémon, HGSS style. Requires OW_POKEMON_OBJECT_EVENTS. +#define OW_FOLLOWERS_ENABLED FALSE // Enables follower Pokémon, HGSS style. Requires OW_POKEMON_OBJECT_EVENTS. Note that additional scripting may be required for them to be fully supported! #define OW_FOLLOWERS_BOBBING TRUE // If true, follower pokemon will bob up and down during their idle & walking animations #define OW_FOLLOWERS_POKEBALLS TRUE // Followers will emerge from the pokeball they are stored in, instead of a normal pokeball @@ -60,9 +60,18 @@ #define OW_STORM_DRAIN GEN_LATEST // In Gen8+, if a Pokémon with Storm Drain is leading the party, there is a 50% chance to encounter a Water-type Pokémon. #define OW_FLASH_FIRE GEN_LATEST // In Gen8+, if a Pokémon with Flash Fire is leading the party, there is a 50% chance to encounter a Fire-type Pokémon. +// These generational defines only make a distinction for OW_ALTERED_TIME_RATIO +#define GEN_8_PLA GEN_LATEST + 2 + +//Time +#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times. +#define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames). +#define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE. + // Overworld flags // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +#define OW_FLAG_PAUSE_TIME 0 // If this flag is set and OW_USE_FAKE_RTC is enabled, seconds on the in-game clock will not advance. #define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled. #define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to. #define OW_FLAG_NO_COLLISION 0 // If this flag is set, the player will be able to walk over tiles with collision. Mainly intended for debugging purposes. @@ -83,8 +92,11 @@ #define OW_POPUP_BW_COLOR_WHITE 1 // White pop-up from W2 // Configuration -#define OW_POPUP_BW_COLOR OW_POPUP_BW_COLOR_BLACK // B2W2 use different colors for their map pop-ups. +#define OW_POPUP_BW_COLOR OW_POPUP_BW_COLOR_BLACK // B2W2 use different colors for their map pop-ups. #define OW_POPUP_BW_TIME_MODE OW_POPUP_BW_TIME_NONE // Determines what type of time is shown. #define OW_POPUP_BW_ALPHA_BLEND FALSE // Enables alpha blending/transparency for the pop-ups. Mainly intended to be used with the black color option. +// Pokémon Center +#define OW_IGNORE_EGGS_ON_HEAL GEN_LATEST // In Gen 4+, the nurse in the Pokémon Center does not heal Eggs on healing machine. + #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 2697c605c2..7bf9450cbb 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -39,15 +39,18 @@ #define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus additionally changes its icon to reflect its current form. // Other settings -#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon -#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space. -#define P_CRIES_ENABLED TRUE // If TRUE, Pokémon will have cries. Disabling this saves around a LOT of ROM space (over 25%!), but instead we recommend disabling individual unused Pokémon families in include/config/species_enabled.h. -#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. -#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255. -#define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen. -#define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets. -#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. -#define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. +#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon +#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space. +#define P_CRIES_ENABLED TRUE // If TRUE, Pokémon will have cries. Disabling this saves around a LOT of ROM space (over 25%!), but instead we recommend disabling individual unused Pokémon families in include/config/species_enabled.h. +#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. +#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255. +#define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen. +#define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets. +#define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, Pokémon can forget any move, even if it is a Hidden Move. +#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. +#define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. +#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. +#define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny // Learnset helper toggles #define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. diff --git a/include/config/test.h b/include/config/test.h index 4101f7a559..bd721beb9d 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -10,4 +10,1129 @@ #undef B_EXPANDED_TYPE_NAMES #define B_EXPANDED_TYPE_NAMES TRUE +#undef P_MEGA_EVOLUTIONS +#define P_MEGA_EVOLUTIONS TRUE +#undef P_PRIMAL_REVERSIONS +#define P_PRIMAL_REVERSIONS TRUE +#undef P_ULTRA_BURST_FORMS +#define P_ULTRA_BURST_FORMS TRUE +#undef P_GIGANTAMAX_FORMS +#define P_GIGANTAMAX_FORMS TRUE +#undef P_TERA_FORMS +#define P_TERA_FORMS TRUE +#undef P_FUSION_FORMS +#define P_FUSION_FORMS TRUE +#undef P_ALOLAN_FORMS +#define P_ALOLAN_FORMS TRUE +#undef P_GALARIAN_FORMS +#define P_GALARIAN_FORMS TRUE +#undef P_HISUIAN_FORMS +#define P_HISUIAN_FORMS TRUE +#undef P_PALDEAN_FORMS +#define P_PALDEAN_FORMS TRUE +#undef P_PIKACHU_EXTRA_FORMS +#define P_PIKACHU_EXTRA_FORMS TRUE +#undef P_COSPLAY_PIKACHU_FORMS +#define P_COSPLAY_PIKACHU_FORMS TRUE +#undef P_CAP_PIKACHU_FORMS +#define P_CAP_PIKACHU_FORMS TRUE +#undef P_GEN_2_CROSS_EVOS +#define P_GEN_2_CROSS_EVOS TRUE +#undef P_GEN_3_CROSS_EVOS +#define P_GEN_3_CROSS_EVOS TRUE +#undef P_GEN_4_CROSS_EVOS +#define P_GEN_4_CROSS_EVOS TRUE +#undef P_GEN_6_CROSS_EVOS +#define P_GEN_6_CROSS_EVOS TRUE +#undef P_GEN_8_CROSS_EVOS +#define P_GEN_8_CROSS_EVOS TRUE +#undef P_GEN_9_CROSS_EVOS +#define P_GEN_9_CROSS_EVOS TRUE + +#undef P_FAMILY_BULBASAUR +#define P_FAMILY_BULBASAUR TRUE +#undef P_FAMILY_CHARMANDER +#define P_FAMILY_CHARMANDER TRUE +#undef P_FAMILY_SQUIRTLE +#define P_FAMILY_SQUIRTLE TRUE +#undef P_FAMILY_CATERPIE +#define P_FAMILY_CATERPIE TRUE +#undef P_FAMILY_WEEDLE +#define P_FAMILY_WEEDLE TRUE +#undef P_FAMILY_PIDGEY +#define P_FAMILY_PIDGEY TRUE +#undef P_FAMILY_RATTATA +#define P_FAMILY_RATTATA TRUE +#undef P_FAMILY_SPEAROW +#define P_FAMILY_SPEAROW TRUE +#undef P_FAMILY_EKANS +#define P_FAMILY_EKANS TRUE +#undef P_FAMILY_PIKACHU +#define P_FAMILY_PIKACHU TRUE +#undef P_FAMILY_SANDSHREW +#define P_FAMILY_SANDSHREW TRUE +#undef P_FAMILY_NIDORAN +#define P_FAMILY_NIDORAN TRUE +#undef P_FAMILY_CLEFAIRY +#define P_FAMILY_CLEFAIRY TRUE +#undef P_FAMILY_VULPIX +#define P_FAMILY_VULPIX TRUE +#undef P_FAMILY_JIGGLYPUFF +#define P_FAMILY_JIGGLYPUFF TRUE +#undef P_FAMILY_ZUBAT +#define P_FAMILY_ZUBAT TRUE +#undef P_FAMILY_ODDISH +#define P_FAMILY_ODDISH TRUE +#undef P_FAMILY_PARAS +#define P_FAMILY_PARAS TRUE +#undef P_FAMILY_VENONAT +#define P_FAMILY_VENONAT TRUE +#undef P_FAMILY_DIGLETT +#define P_FAMILY_DIGLETT TRUE +#undef P_FAMILY_MEOWTH +#define P_FAMILY_MEOWTH TRUE +#undef P_FAMILY_PSYDUCK +#define P_FAMILY_PSYDUCK TRUE +#undef P_FAMILY_MANKEY +#define P_FAMILY_MANKEY TRUE +#undef P_FAMILY_GROWLITHE +#define P_FAMILY_GROWLITHE TRUE +#undef P_FAMILY_POLIWAG +#define P_FAMILY_POLIWAG TRUE +#undef P_FAMILY_ABRA +#define P_FAMILY_ABRA TRUE +#undef P_FAMILY_MACHOP +#define P_FAMILY_MACHOP TRUE +#undef P_FAMILY_BELLSPROUT +#define P_FAMILY_BELLSPROUT TRUE +#undef P_FAMILY_TENTACOOL +#define P_FAMILY_TENTACOOL TRUE +#undef P_FAMILY_GEODUDE +#define P_FAMILY_GEODUDE TRUE +#undef P_FAMILY_PONYTA +#define P_FAMILY_PONYTA TRUE +#undef P_FAMILY_SLOWPOKE +#define P_FAMILY_SLOWPOKE TRUE +#undef P_FAMILY_MAGNEMITE +#define P_FAMILY_MAGNEMITE TRUE +#undef P_FAMILY_FARFETCHD +#define P_FAMILY_FARFETCHD TRUE +#undef P_FAMILY_DODUO +#define P_FAMILY_DODUO TRUE +#undef P_FAMILY_SEEL +#define P_FAMILY_SEEL TRUE +#undef P_FAMILY_GRIMER +#define P_FAMILY_GRIMER TRUE +#undef P_FAMILY_SHELLDER +#define P_FAMILY_SHELLDER TRUE +#undef P_FAMILY_GASTLY +#define P_FAMILY_GASTLY TRUE +#undef P_FAMILY_ONIX +#define P_FAMILY_ONIX TRUE +#undef P_FAMILY_DROWZEE +#define P_FAMILY_DROWZEE TRUE +#undef P_FAMILY_KRABBY +#define P_FAMILY_KRABBY TRUE +#undef P_FAMILY_VOLTORB +#define P_FAMILY_VOLTORB TRUE +#undef P_FAMILY_EXEGGCUTE +#define P_FAMILY_EXEGGCUTE TRUE +#undef P_FAMILY_CUBONE +#define P_FAMILY_CUBONE TRUE +#undef P_FAMILY_HITMONS +#define P_FAMILY_HITMONS TRUE +#undef P_FAMILY_LICKITUNG +#define P_FAMILY_LICKITUNG TRUE +#undef P_FAMILY_KOFFING +#define P_FAMILY_KOFFING TRUE +#undef P_FAMILY_RHYHORN +#define P_FAMILY_RHYHORN TRUE +#undef P_FAMILY_CHANSEY +#define P_FAMILY_CHANSEY TRUE +#undef P_FAMILY_TANGELA +#define P_FAMILY_TANGELA TRUE +#undef P_FAMILY_KANGASKHAN +#define P_FAMILY_KANGASKHAN TRUE +#undef P_FAMILY_HORSEA +#define P_FAMILY_HORSEA TRUE +#undef P_FAMILY_GOLDEEN +#define P_FAMILY_GOLDEEN TRUE +#undef P_FAMILY_STARYU +#define P_FAMILY_STARYU TRUE +#undef P_FAMILY_MR_MIME +#define P_FAMILY_MR_MIME TRUE +#undef P_FAMILY_SCYTHER +#define P_FAMILY_SCYTHER TRUE +#undef P_FAMILY_JYNX +#define P_FAMILY_JYNX TRUE +#undef P_FAMILY_ELECTABUZZ +#define P_FAMILY_ELECTABUZZ TRUE +#undef P_FAMILY_MAGMAR +#define P_FAMILY_MAGMAR TRUE +#undef P_FAMILY_PINSIR +#define P_FAMILY_PINSIR TRUE +#undef P_FAMILY_TAUROS +#define P_FAMILY_TAUROS TRUE +#undef P_FAMILY_MAGIKARP +#define P_FAMILY_MAGIKARP TRUE +#undef P_FAMILY_LAPRAS +#define P_FAMILY_LAPRAS TRUE +#undef P_FAMILY_DITTO +#define P_FAMILY_DITTO TRUE +#undef P_FAMILY_EEVEE +#define P_FAMILY_EEVEE TRUE +#undef P_FAMILY_PORYGON +#define P_FAMILY_PORYGON TRUE +#undef P_FAMILY_OMANYTE +#define P_FAMILY_OMANYTE TRUE +#undef P_FAMILY_KABUTO +#define P_FAMILY_KABUTO TRUE +#undef P_FAMILY_AERODACTYL +#define P_FAMILY_AERODACTYL TRUE +#undef P_FAMILY_SNORLAX +#define P_FAMILY_SNORLAX TRUE +#undef P_FAMILY_ARTICUNO +#define P_FAMILY_ARTICUNO TRUE +#undef P_FAMILY_ZAPDOS +#define P_FAMILY_ZAPDOS TRUE +#undef P_FAMILY_MOLTRES +#define P_FAMILY_MOLTRES TRUE +#undef P_FAMILY_DRATINI +#define P_FAMILY_DRATINI TRUE +#undef P_FAMILY_MEWTWO +#define P_FAMILY_MEWTWO TRUE +#undef P_FAMILY_MEW +#define P_FAMILY_MEW TRUE + +#undef P_FAMILY_CHIKORITA +#define P_FAMILY_CHIKORITA TRUE +#undef P_FAMILY_CYNDAQUIL +#define P_FAMILY_CYNDAQUIL TRUE +#undef P_FAMILY_TOTODILE +#define P_FAMILY_TOTODILE TRUE +#undef P_FAMILY_SENTRET +#define P_FAMILY_SENTRET TRUE +#undef P_FAMILY_HOOTHOOT +#define P_FAMILY_HOOTHOOT TRUE +#undef P_FAMILY_LEDYBA +#define P_FAMILY_LEDYBA TRUE +#undef P_FAMILY_SPINARAK +#define P_FAMILY_SPINARAK TRUE +#undef P_FAMILY_CHINCHOU +#define P_FAMILY_CHINCHOU TRUE +#undef P_FAMILY_TOGEPI +#define P_FAMILY_TOGEPI TRUE +#undef P_FAMILY_NATU +#define P_FAMILY_NATU TRUE +#undef P_FAMILY_MAREEP +#define P_FAMILY_MAREEP TRUE +#undef P_FAMILY_MARILL +#define P_FAMILY_MARILL TRUE +#undef P_FAMILY_SUDOWOODO +#define P_FAMILY_SUDOWOODO TRUE +#undef P_FAMILY_HOPPIP +#define P_FAMILY_HOPPIP TRUE +#undef P_FAMILY_AIPOM +#define P_FAMILY_AIPOM TRUE +#undef P_FAMILY_SUNKERN +#define P_FAMILY_SUNKERN TRUE +#undef P_FAMILY_YANMA +#define P_FAMILY_YANMA TRUE +#undef P_FAMILY_WOOPER +#define P_FAMILY_WOOPER TRUE +#undef P_FAMILY_MURKROW +#define P_FAMILY_MURKROW TRUE +#undef P_FAMILY_MISDREAVUS +#define P_FAMILY_MISDREAVUS TRUE +#undef P_FAMILY_UNOWN +#define P_FAMILY_UNOWN TRUE +#undef P_FAMILY_WOBBUFFET +#define P_FAMILY_WOBBUFFET TRUE +#undef P_FAMILY_GIRAFARIG +#define P_FAMILY_GIRAFARIG TRUE +#undef P_FAMILY_PINECO +#define P_FAMILY_PINECO TRUE +#undef P_FAMILY_DUNSPARCE +#define P_FAMILY_DUNSPARCE TRUE +#undef P_FAMILY_GLIGAR +#define P_FAMILY_GLIGAR TRUE +#undef P_FAMILY_SNUBBULL +#define P_FAMILY_SNUBBULL TRUE +#undef P_FAMILY_QWILFISH +#define P_FAMILY_QWILFISH TRUE +#undef P_FAMILY_SHUCKLE +#define P_FAMILY_SHUCKLE TRUE +#undef P_FAMILY_HERACROSS +#define P_FAMILY_HERACROSS TRUE +#undef P_FAMILY_SNEASEL +#define P_FAMILY_SNEASEL TRUE +#undef P_FAMILY_TEDDIURSA +#define P_FAMILY_TEDDIURSA TRUE +#undef P_FAMILY_SLUGMA +#define P_FAMILY_SLUGMA TRUE +#undef P_FAMILY_SWINUB +#define P_FAMILY_SWINUB TRUE +#undef P_FAMILY_CORSOLA +#define P_FAMILY_CORSOLA TRUE +#undef P_FAMILY_REMORAID +#define P_FAMILY_REMORAID TRUE +#undef P_FAMILY_DELIBIRD +#define P_FAMILY_DELIBIRD TRUE +#undef P_FAMILY_MANTINE +#define P_FAMILY_MANTINE TRUE +#undef P_FAMILY_SKARMORY +#define P_FAMILY_SKARMORY TRUE +#undef P_FAMILY_HOUNDOUR +#define P_FAMILY_HOUNDOUR TRUE +#undef P_FAMILY_PHANPY +#define P_FAMILY_PHANPY TRUE +#undef P_FAMILY_STANTLER +#define P_FAMILY_STANTLER TRUE +#undef P_FAMILY_SMEARGLE +#define P_FAMILY_SMEARGLE TRUE +#undef P_FAMILY_MILTANK +#define P_FAMILY_MILTANK TRUE +#undef P_FAMILY_RAIKOU +#define P_FAMILY_RAIKOU TRUE +#undef P_FAMILY_ENTEI +#define P_FAMILY_ENTEI TRUE +#undef P_FAMILY_SUICUNE +#define P_FAMILY_SUICUNE TRUE +#undef P_FAMILY_LARVITAR +#define P_FAMILY_LARVITAR TRUE +#undef P_FAMILY_LUGIA +#define P_FAMILY_LUGIA TRUE +#undef P_FAMILY_HO_OH +#define P_FAMILY_HO_OH TRUE +#undef P_FAMILY_CELEBI +#define P_FAMILY_CELEBI TRUE + +#undef P_FAMILY_TREECKO +#define P_FAMILY_TREECKO TRUE +#undef P_FAMILY_TORCHIC +#define P_FAMILY_TORCHIC TRUE +#undef P_FAMILY_MUDKIP +#define P_FAMILY_MUDKIP TRUE +#undef P_FAMILY_POOCHYENA +#define P_FAMILY_POOCHYENA TRUE +#undef P_FAMILY_ZIGZAGOON +#define P_FAMILY_ZIGZAGOON TRUE +#undef P_FAMILY_WURMPLE +#define P_FAMILY_WURMPLE TRUE +#undef P_FAMILY_LOTAD +#define P_FAMILY_LOTAD TRUE +#undef P_FAMILY_SEEDOT +#define P_FAMILY_SEEDOT TRUE +#undef P_FAMILY_TAILLOW +#define P_FAMILY_TAILLOW TRUE +#undef P_FAMILY_WINGULL +#define P_FAMILY_WINGULL TRUE +#undef P_FAMILY_RALTS +#define P_FAMILY_RALTS TRUE +#undef P_FAMILY_SURSKIT +#define P_FAMILY_SURSKIT TRUE +#undef P_FAMILY_SHROOMISH +#define P_FAMILY_SHROOMISH TRUE +#undef P_FAMILY_SLAKOTH +#define P_FAMILY_SLAKOTH TRUE +#undef P_FAMILY_NINCADA +#define P_FAMILY_NINCADA TRUE +#undef P_FAMILY_WHISMUR +#define P_FAMILY_WHISMUR TRUE +#undef P_FAMILY_MAKUHITA +#define P_FAMILY_MAKUHITA TRUE +#undef P_FAMILY_NOSEPASS +#define P_FAMILY_NOSEPASS TRUE +#undef P_FAMILY_SKITTY +#define P_FAMILY_SKITTY TRUE +#undef P_FAMILY_SABLEYE +#define P_FAMILY_SABLEYE TRUE +#undef P_FAMILY_MAWILE +#define P_FAMILY_MAWILE TRUE +#undef P_FAMILY_ARON +#define P_FAMILY_ARON TRUE +#undef P_FAMILY_MEDITITE +#define P_FAMILY_MEDITITE TRUE +#undef P_FAMILY_ELECTRIKE +#define P_FAMILY_ELECTRIKE TRUE +#undef P_FAMILY_PLUSLE +#define P_FAMILY_PLUSLE TRUE +#undef P_FAMILY_MINUN +#define P_FAMILY_MINUN TRUE +#undef P_FAMILY_VOLBEAT_ILLUMISE +#define P_FAMILY_VOLBEAT_ILLUMISE TRUE +#undef P_FAMILY_ROSELIA +#define P_FAMILY_ROSELIA TRUE +#undef P_FAMILY_GULPIN +#define P_FAMILY_GULPIN TRUE +#undef P_FAMILY_CARVANHA +#define P_FAMILY_CARVANHA TRUE +#undef P_FAMILY_WAILMER +#define P_FAMILY_WAILMER TRUE +#undef P_FAMILY_NUMEL +#define P_FAMILY_NUMEL TRUE +#undef P_FAMILY_TORKOAL +#define P_FAMILY_TORKOAL TRUE +#undef P_FAMILY_SPOINK +#define P_FAMILY_SPOINK TRUE +#undef P_FAMILY_SPINDA +#define P_FAMILY_SPINDA TRUE +#undef P_FAMILY_TRAPINCH +#define P_FAMILY_TRAPINCH TRUE +#undef P_FAMILY_CACNEA +#define P_FAMILY_CACNEA TRUE +#undef P_FAMILY_SWABLU +#define P_FAMILY_SWABLU TRUE +#undef P_FAMILY_ZANGOOSE +#define P_FAMILY_ZANGOOSE TRUE +#undef P_FAMILY_SEVIPER +#define P_FAMILY_SEVIPER TRUE +#undef P_FAMILY_LUNATONE +#define P_FAMILY_LUNATONE TRUE +#undef P_FAMILY_SOLROCK +#define P_FAMILY_SOLROCK TRUE +#undef P_FAMILY_BARBOACH +#define P_FAMILY_BARBOACH TRUE +#undef P_FAMILY_CORPHISH +#define P_FAMILY_CORPHISH TRUE +#undef P_FAMILY_BALTOY +#define P_FAMILY_BALTOY TRUE +#undef P_FAMILY_LILEEP +#define P_FAMILY_LILEEP TRUE +#undef P_FAMILY_ANORITH +#define P_FAMILY_ANORITH TRUE +#undef P_FAMILY_FEEBAS +#define P_FAMILY_FEEBAS TRUE +#undef P_FAMILY_CASTFORM +#define P_FAMILY_CASTFORM TRUE +#undef P_FAMILY_KECLEON +#define P_FAMILY_KECLEON TRUE +#undef P_FAMILY_SHUPPET +#define P_FAMILY_SHUPPET TRUE +#undef P_FAMILY_DUSKULL +#define P_FAMILY_DUSKULL TRUE +#undef P_FAMILY_TROPIUS +#define P_FAMILY_TROPIUS TRUE +#undef P_FAMILY_CHIMECHO +#define P_FAMILY_CHIMECHO TRUE +#undef P_FAMILY_ABSOL +#define P_FAMILY_ABSOL TRUE +#undef P_FAMILY_SNORUNT +#define P_FAMILY_SNORUNT TRUE +#undef P_FAMILY_SPHEAL +#define P_FAMILY_SPHEAL TRUE +#undef P_FAMILY_CLAMPERL +#define P_FAMILY_CLAMPERL TRUE +#undef P_FAMILY_RELICANTH +#define P_FAMILY_RELICANTH TRUE +#undef P_FAMILY_LUVDISC +#define P_FAMILY_LUVDISC TRUE +#undef P_FAMILY_BAGON +#define P_FAMILY_BAGON TRUE +#undef P_FAMILY_BELDUM +#define P_FAMILY_BELDUM TRUE +#undef P_FAMILY_REGIROCK +#define P_FAMILY_REGIROCK TRUE +#undef P_FAMILY_REGICE +#define P_FAMILY_REGICE TRUE +#undef P_FAMILY_REGISTEEL +#define P_FAMILY_REGISTEEL TRUE +#undef P_FAMILY_LATIAS +#define P_FAMILY_LATIAS TRUE +#undef P_FAMILY_LATIOS +#define P_FAMILY_LATIOS TRUE +#undef P_FAMILY_KYOGRE +#define P_FAMILY_KYOGRE TRUE +#undef P_FAMILY_GROUDON +#define P_FAMILY_GROUDON TRUE +#undef P_FAMILY_RAYQUAZA +#define P_FAMILY_RAYQUAZA TRUE +#undef P_FAMILY_JIRACHI +#define P_FAMILY_JIRACHI TRUE +#undef P_FAMILY_DEOXYS +#define P_FAMILY_DEOXYS TRUE + +#undef P_FAMILY_TURTWIG +#define P_FAMILY_TURTWIG TRUE +#undef P_FAMILY_CHIMCHAR +#define P_FAMILY_CHIMCHAR TRUE +#undef P_FAMILY_PIPLUP +#define P_FAMILY_PIPLUP TRUE +#undef P_FAMILY_STARLY +#define P_FAMILY_STARLY TRUE +#undef P_FAMILY_BIDOOF +#define P_FAMILY_BIDOOF TRUE +#undef P_FAMILY_KRICKETOT +#define P_FAMILY_KRICKETOT TRUE +#undef P_FAMILY_SHINX +#define P_FAMILY_SHINX TRUE +#undef P_FAMILY_CRANIDOS +#define P_FAMILY_CRANIDOS TRUE +#undef P_FAMILY_SHIELDON +#define P_FAMILY_SHIELDON TRUE +#undef P_FAMILY_BURMY +#define P_FAMILY_BURMY TRUE +#undef P_FAMILY_COMBEE +#define P_FAMILY_COMBEE TRUE +#undef P_FAMILY_PACHIRISU +#define P_FAMILY_PACHIRISU TRUE +#undef P_FAMILY_BUIZEL +#define P_FAMILY_BUIZEL TRUE +#undef P_FAMILY_CHERUBI +#define P_FAMILY_CHERUBI TRUE +#undef P_FAMILY_SHELLOS +#define P_FAMILY_SHELLOS TRUE +#undef P_FAMILY_DRIFLOON +#define P_FAMILY_DRIFLOON TRUE +#undef P_FAMILY_BUNEARY +#define P_FAMILY_BUNEARY TRUE +#undef P_FAMILY_GLAMEOW +#define P_FAMILY_GLAMEOW TRUE +#undef P_FAMILY_STUNKY +#define P_FAMILY_STUNKY TRUE +#undef P_FAMILY_BRONZOR +#define P_FAMILY_BRONZOR TRUE +#undef P_FAMILY_CHATOT +#define P_FAMILY_CHATOT TRUE +#undef P_FAMILY_SPIRITOMB +#define P_FAMILY_SPIRITOMB TRUE +#undef P_FAMILY_GIBLE +#define P_FAMILY_GIBLE TRUE +#undef P_FAMILY_RIOLU +#define P_FAMILY_RIOLU TRUE +#undef P_FAMILY_HIPPOPOTAS +#define P_FAMILY_HIPPOPOTAS TRUE +#undef P_FAMILY_SKORUPI +#define P_FAMILY_SKORUPI TRUE +#undef P_FAMILY_CROAGUNK +#define P_FAMILY_CROAGUNK TRUE +#undef P_FAMILY_CARNIVINE +#define P_FAMILY_CARNIVINE TRUE +#undef P_FAMILY_FINNEON +#define P_FAMILY_FINNEON TRUE +#undef P_FAMILY_SNOVER +#define P_FAMILY_SNOVER TRUE +#undef P_FAMILY_ROTOM +#define P_FAMILY_ROTOM TRUE +#undef P_FAMILY_UXIE +#define P_FAMILY_UXIE TRUE +#undef P_FAMILY_MESPRIT +#define P_FAMILY_MESPRIT TRUE +#undef P_FAMILY_AZELF +#define P_FAMILY_AZELF TRUE +#undef P_FAMILY_DIALGA +#define P_FAMILY_DIALGA TRUE +#undef P_FAMILY_PALKIA +#define P_FAMILY_PALKIA TRUE +#undef P_FAMILY_HEATRAN +#define P_FAMILY_HEATRAN TRUE +#undef P_FAMILY_REGIGIGAS +#define P_FAMILY_REGIGIGAS TRUE +#undef P_FAMILY_GIRATINA +#define P_FAMILY_GIRATINA TRUE +#undef P_FAMILY_CRESSELIA +#define P_FAMILY_CRESSELIA TRUE +#undef P_FAMILY_MANAPHY +#define P_FAMILY_MANAPHY TRUE +#undef P_FAMILY_DARKRAI +#define P_FAMILY_DARKRAI TRUE +#undef P_FAMILY_SHAYMIN +#define P_FAMILY_SHAYMIN TRUE +#undef P_FAMILY_ARCEUS +#define P_FAMILY_ARCEUS TRUE +#undef P_FAMILY_VICTINI +#define P_FAMILY_VICTINI TRUE +#undef P_FAMILY_SNIVY +#define P_FAMILY_SNIVY TRUE +#undef P_FAMILY_TEPIG +#define P_FAMILY_TEPIG TRUE +#undef P_FAMILY_OSHAWOTT +#define P_FAMILY_OSHAWOTT TRUE +#undef P_FAMILY_PATRAT +#define P_FAMILY_PATRAT TRUE +#undef P_FAMILY_LILLIPUP +#define P_FAMILY_LILLIPUP TRUE +#undef P_FAMILY_PURRLOIN +#define P_FAMILY_PURRLOIN TRUE +#undef P_FAMILY_PANSAGE +#define P_FAMILY_PANSAGE TRUE +#undef P_FAMILY_PANSEAR +#define P_FAMILY_PANSEAR TRUE +#undef P_FAMILY_PANPOUR +#define P_FAMILY_PANPOUR TRUE +#undef P_FAMILY_MUNNA +#define P_FAMILY_MUNNA TRUE +#undef P_FAMILY_PIDOVE +#define P_FAMILY_PIDOVE TRUE +#undef P_FAMILY_BLITZLE +#define P_FAMILY_BLITZLE TRUE +#undef P_FAMILY_ROGGENROLA +#define P_FAMILY_ROGGENROLA TRUE +#undef P_FAMILY_WOOBAT +#define P_FAMILY_WOOBAT TRUE +#undef P_FAMILY_DRILBUR +#define P_FAMILY_DRILBUR TRUE +#undef P_FAMILY_AUDINO +#define P_FAMILY_AUDINO TRUE +#undef P_FAMILY_TIMBURR +#define P_FAMILY_TIMBURR TRUE +#undef P_FAMILY_TYMPOLE +#define P_FAMILY_TYMPOLE TRUE +#undef P_FAMILY_THROH +#define P_FAMILY_THROH TRUE +#undef P_FAMILY_SAWK +#define P_FAMILY_SAWK TRUE +#undef P_FAMILY_SEWADDLE +#define P_FAMILY_SEWADDLE TRUE +#undef P_FAMILY_VENIPEDE +#define P_FAMILY_VENIPEDE TRUE +#undef P_FAMILY_COTTONEE +#define P_FAMILY_COTTONEE TRUE +#undef P_FAMILY_PETILIL +#define P_FAMILY_PETILIL TRUE +#undef P_FAMILY_BASCULIN +#define P_FAMILY_BASCULIN TRUE +#undef P_FAMILY_SANDILE +#define P_FAMILY_SANDILE TRUE +#undef P_FAMILY_DARUMAKA +#define P_FAMILY_DARUMAKA TRUE +#undef P_FAMILY_MARACTUS +#define P_FAMILY_MARACTUS TRUE +#undef P_FAMILY_DWEBBLE +#define P_FAMILY_DWEBBLE TRUE +#undef P_FAMILY_SCRAGGY +#define P_FAMILY_SCRAGGY TRUE +#undef P_FAMILY_SIGILYPH +#define P_FAMILY_SIGILYPH TRUE +#undef P_FAMILY_YAMASK +#define P_FAMILY_YAMASK TRUE +#undef P_FAMILY_TIRTOUGA +#define P_FAMILY_TIRTOUGA TRUE +#undef P_FAMILY_ARCHEN +#define P_FAMILY_ARCHEN TRUE +#undef P_FAMILY_TRUBBISH +#define P_FAMILY_TRUBBISH TRUE +#undef P_FAMILY_ZORUA +#define P_FAMILY_ZORUA TRUE +#undef P_FAMILY_MINCCINO +#define P_FAMILY_MINCCINO TRUE +#undef P_FAMILY_GOTHITA +#define P_FAMILY_GOTHITA TRUE +#undef P_FAMILY_SOLOSIS +#define P_FAMILY_SOLOSIS TRUE +#undef P_FAMILY_DUCKLETT +#define P_FAMILY_DUCKLETT TRUE +#undef P_FAMILY_VANILLITE +#define P_FAMILY_VANILLITE TRUE +#undef P_FAMILY_DEERLING +#define P_FAMILY_DEERLING TRUE +#undef P_FAMILY_EMOLGA +#define P_FAMILY_EMOLGA TRUE +#undef P_FAMILY_KARRABLAST +#define P_FAMILY_KARRABLAST TRUE +#undef P_FAMILY_FOONGUS +#define P_FAMILY_FOONGUS TRUE +#undef P_FAMILY_FRILLISH +#define P_FAMILY_FRILLISH TRUE +#undef P_FAMILY_ALOMOMOLA +#define P_FAMILY_ALOMOMOLA TRUE +#undef P_FAMILY_JOLTIK +#define P_FAMILY_JOLTIK TRUE +#undef P_FAMILY_FERROSEED +#define P_FAMILY_FERROSEED TRUE +#undef P_FAMILY_KLINK +#define P_FAMILY_KLINK TRUE +#undef P_FAMILY_TYNAMO +#define P_FAMILY_TYNAMO TRUE +#undef P_FAMILY_ELGYEM +#define P_FAMILY_ELGYEM TRUE +#undef P_FAMILY_LITWICK +#define P_FAMILY_LITWICK TRUE +#undef P_FAMILY_AXEW +#define P_FAMILY_AXEW TRUE +#undef P_FAMILY_CUBCHOO +#define P_FAMILY_CUBCHOO TRUE +#undef P_FAMILY_CRYOGONAL +#define P_FAMILY_CRYOGONAL TRUE +#undef P_FAMILY_SHELMET +#define P_FAMILY_SHELMET TRUE +#undef P_FAMILY_STUNFISK +#define P_FAMILY_STUNFISK TRUE +#undef P_FAMILY_MIENFOO +#define P_FAMILY_MIENFOO TRUE +#undef P_FAMILY_DRUDDIGON +#define P_FAMILY_DRUDDIGON TRUE +#undef P_FAMILY_GOLETT +#define P_FAMILY_GOLETT TRUE +#undef P_FAMILY_PAWNIARD +#define P_FAMILY_PAWNIARD TRUE +#undef P_FAMILY_BOUFFALANT +#define P_FAMILY_BOUFFALANT TRUE +#undef P_FAMILY_RUFFLET +#define P_FAMILY_RUFFLET TRUE +#undef P_FAMILY_VULLABY +#define P_FAMILY_VULLABY TRUE +#undef P_FAMILY_HEATMOR +#define P_FAMILY_HEATMOR TRUE +#undef P_FAMILY_DURANT +#define P_FAMILY_DURANT TRUE +#undef P_FAMILY_DEINO +#define P_FAMILY_DEINO TRUE +#undef P_FAMILY_LARVESTA +#define P_FAMILY_LARVESTA TRUE +#undef P_FAMILY_COBALION +#define P_FAMILY_COBALION TRUE +#undef P_FAMILY_TERRAKION +#define P_FAMILY_TERRAKION TRUE +#undef P_FAMILY_VIRIZION +#define P_FAMILY_VIRIZION TRUE +#undef P_FAMILY_TORNADUS +#define P_FAMILY_TORNADUS TRUE +#undef P_FAMILY_THUNDURUS +#define P_FAMILY_THUNDURUS TRUE +#undef P_FAMILY_RESHIRAM +#define P_FAMILY_RESHIRAM TRUE +#undef P_FAMILY_ZEKROM +#define P_FAMILY_ZEKROM TRUE +#undef P_FAMILY_LANDORUS +#define P_FAMILY_LANDORUS TRUE +#undef P_FAMILY_KYUREM +#define P_FAMILY_KYUREM TRUE +#undef P_FAMILY_KELDEO +#define P_FAMILY_KELDEO TRUE +#undef P_FAMILY_MELOETTA +#define P_FAMILY_MELOETTA TRUE +#undef P_FAMILY_GENESECT +#define P_FAMILY_GENESECT TRUE + +#undef P_FAMILY_CHESPIN +#define P_FAMILY_CHESPIN TRUE +#undef P_FAMILY_FENNEKIN +#define P_FAMILY_FENNEKIN TRUE +#undef P_FAMILY_FROAKIE +#define P_FAMILY_FROAKIE TRUE +#undef P_FAMILY_BUNNELBY +#define P_FAMILY_BUNNELBY TRUE +#undef P_FAMILY_FLETCHLING +#define P_FAMILY_FLETCHLING TRUE +#undef P_FAMILY_SCATTERBUG +#define P_FAMILY_SCATTERBUG TRUE +#undef P_FAMILY_LITLEO +#define P_FAMILY_LITLEO TRUE +#undef P_FAMILY_FLABEBE +#define P_FAMILY_FLABEBE TRUE +#undef P_FAMILY_SKIDDO +#define P_FAMILY_SKIDDO TRUE +#undef P_FAMILY_PANCHAM +#define P_FAMILY_PANCHAM TRUE +#undef P_FAMILY_FURFROU +#define P_FAMILY_FURFROU TRUE +#undef P_FAMILY_ESPURR +#define P_FAMILY_ESPURR TRUE +#undef P_FAMILY_HONEDGE +#define P_FAMILY_HONEDGE TRUE +#undef P_FAMILY_SPRITZEE +#define P_FAMILY_SPRITZEE TRUE +#undef P_FAMILY_SWIRLIX +#define P_FAMILY_SWIRLIX TRUE +#undef P_FAMILY_INKAY +#define P_FAMILY_INKAY TRUE +#undef P_FAMILY_BINACLE +#define P_FAMILY_BINACLE TRUE +#undef P_FAMILY_SKRELP +#define P_FAMILY_SKRELP TRUE +#undef P_FAMILY_CLAUNCHER +#define P_FAMILY_CLAUNCHER TRUE +#undef P_FAMILY_HELIOPTILE +#define P_FAMILY_HELIOPTILE TRUE +#undef P_FAMILY_TYRUNT +#define P_FAMILY_TYRUNT TRUE +#undef P_FAMILY_AMAURA +#define P_FAMILY_AMAURA TRUE +#undef P_FAMILY_HAWLUCHA +#define P_FAMILY_HAWLUCHA TRUE +#undef P_FAMILY_DEDENNE +#define P_FAMILY_DEDENNE TRUE +#undef P_FAMILY_CARBINK +#define P_FAMILY_CARBINK TRUE +#undef P_FAMILY_GOOMY +#define P_FAMILY_GOOMY TRUE +#undef P_FAMILY_KLEFKI +#define P_FAMILY_KLEFKI TRUE +#undef P_FAMILY_PHANTUMP +#define P_FAMILY_PHANTUMP TRUE +#undef P_FAMILY_PUMPKABOO +#define P_FAMILY_PUMPKABOO TRUE +#undef P_FAMILY_BERGMITE +#define P_FAMILY_BERGMITE TRUE +#undef P_FAMILY_NOIBAT +#define P_FAMILY_NOIBAT TRUE +#undef P_FAMILY_XERNEAS +#define P_FAMILY_XERNEAS TRUE +#undef P_FAMILY_YVELTAL +#define P_FAMILY_YVELTAL TRUE +#undef P_FAMILY_ZYGARDE +#define P_FAMILY_ZYGARDE TRUE +#undef P_FAMILY_DIANCIE +#define P_FAMILY_DIANCIE TRUE +#undef P_FAMILY_HOOPA +#define P_FAMILY_HOOPA TRUE +#undef P_FAMILY_VOLCANION +#define P_FAMILY_VOLCANION TRUE + +#undef P_FAMILY_ROWLET +#define P_FAMILY_ROWLET TRUE +#undef P_FAMILY_LITTEN +#define P_FAMILY_LITTEN TRUE +#undef P_FAMILY_POPPLIO +#define P_FAMILY_POPPLIO TRUE +#undef P_FAMILY_PIKIPEK +#define P_FAMILY_PIKIPEK TRUE +#undef P_FAMILY_YUNGOOS +#define P_FAMILY_YUNGOOS TRUE +#undef P_FAMILY_GRUBBIN +#define P_FAMILY_GRUBBIN TRUE +#undef P_FAMILY_CRABRAWLER +#define P_FAMILY_CRABRAWLER TRUE +#undef P_FAMILY_ORICORIO +#define P_FAMILY_ORICORIO TRUE +#undef P_FAMILY_CUTIEFLY +#define P_FAMILY_CUTIEFLY TRUE +#undef P_FAMILY_ROCKRUFF +#define P_FAMILY_ROCKRUFF TRUE +#undef P_FAMILY_WISHIWASHI +#define P_FAMILY_WISHIWASHI TRUE +#undef P_FAMILY_MAREANIE +#define P_FAMILY_MAREANIE TRUE +#undef P_FAMILY_MUDBRAY +#define P_FAMILY_MUDBRAY TRUE +#undef P_FAMILY_DEWPIDER +#define P_FAMILY_DEWPIDER TRUE +#undef P_FAMILY_FOMANTIS +#define P_FAMILY_FOMANTIS TRUE +#undef P_FAMILY_MORELULL +#define P_FAMILY_MORELULL TRUE +#undef P_FAMILY_SALANDIT +#define P_FAMILY_SALANDIT TRUE +#undef P_FAMILY_STUFFUL +#define P_FAMILY_STUFFUL TRUE +#undef P_FAMILY_BOUNSWEET +#define P_FAMILY_BOUNSWEET TRUE +#undef P_FAMILY_COMFEY +#define P_FAMILY_COMFEY TRUE +#undef P_FAMILY_ORANGURU +#define P_FAMILY_ORANGURU TRUE +#undef P_FAMILY_PASSIMIAN +#define P_FAMILY_PASSIMIAN TRUE +#undef P_FAMILY_WIMPOD +#define P_FAMILY_WIMPOD TRUE +#undef P_FAMILY_SANDYGAST +#define P_FAMILY_SANDYGAST TRUE +#undef P_FAMILY_PYUKUMUKU +#define P_FAMILY_PYUKUMUKU TRUE +#undef P_FAMILY_TYPE_NULL +#define P_FAMILY_TYPE_NULL TRUE +#undef P_FAMILY_MINIOR +#define P_FAMILY_MINIOR TRUE +#undef P_FAMILY_KOMALA +#define P_FAMILY_KOMALA TRUE +#undef P_FAMILY_TURTONATOR +#define P_FAMILY_TURTONATOR TRUE +#undef P_FAMILY_TOGEDEMARU +#define P_FAMILY_TOGEDEMARU TRUE +#undef P_FAMILY_MIMIKYU +#define P_FAMILY_MIMIKYU TRUE +#undef P_FAMILY_BRUXISH +#define P_FAMILY_BRUXISH TRUE +#undef P_FAMILY_DRAMPA +#define P_FAMILY_DRAMPA TRUE +#undef P_FAMILY_DHELMISE +#define P_FAMILY_DHELMISE TRUE +#undef P_FAMILY_JANGMO_O +#define P_FAMILY_JANGMO_O TRUE +#undef P_FAMILY_TAPU_KOKO +#define P_FAMILY_TAPU_KOKO TRUE +#undef P_FAMILY_TAPU_LELE +#define P_FAMILY_TAPU_LELE TRUE +#undef P_FAMILY_TAPU_BULU +#define P_FAMILY_TAPU_BULU TRUE +#undef P_FAMILY_TAPU_FINI +#define P_FAMILY_TAPU_FINI TRUE +#undef P_FAMILY_COSMOG +#define P_FAMILY_COSMOG TRUE +#undef P_FAMILY_NIHILEGO +#define P_FAMILY_NIHILEGO TRUE +#undef P_FAMILY_BUZZWOLE +#define P_FAMILY_BUZZWOLE TRUE +#undef P_FAMILY_PHEROMOSA +#define P_FAMILY_PHEROMOSA TRUE +#undef P_FAMILY_XURKITREE +#define P_FAMILY_XURKITREE TRUE +#undef P_FAMILY_CELESTEELA +#define P_FAMILY_CELESTEELA TRUE +#undef P_FAMILY_KARTANA +#define P_FAMILY_KARTANA TRUE +#undef P_FAMILY_GUZZLORD +#define P_FAMILY_GUZZLORD TRUE +#undef P_FAMILY_NECROZMA +#define P_FAMILY_NECROZMA TRUE +#undef P_FAMILY_MAGEARNA +#define P_FAMILY_MAGEARNA TRUE +#undef P_FAMILY_MARSHADOW +#define P_FAMILY_MARSHADOW TRUE +#undef P_FAMILY_POIPOLE +#define P_FAMILY_POIPOLE TRUE +#undef P_FAMILY_STAKATAKA +#define P_FAMILY_STAKATAKA TRUE +#undef P_FAMILY_BLACEPHALON +#define P_FAMILY_BLACEPHALON TRUE +#undef P_FAMILY_ZERAORA +#define P_FAMILY_ZERAORA TRUE +#undef P_FAMILY_MELTAN +#define P_FAMILY_MELTAN TRUE + +#undef P_FAMILY_GROOKEY +#define P_FAMILY_GROOKEY TRUE +#undef P_FAMILY_SCORBUNNY +#define P_FAMILY_SCORBUNNY TRUE +#undef P_FAMILY_SOBBLE +#define P_FAMILY_SOBBLE TRUE +#undef P_FAMILY_SKWOVET +#define P_FAMILY_SKWOVET TRUE +#undef P_FAMILY_ROOKIDEE +#define P_FAMILY_ROOKIDEE TRUE +#undef P_FAMILY_BLIPBUG +#define P_FAMILY_BLIPBUG TRUE +#undef P_FAMILY_NICKIT +#define P_FAMILY_NICKIT TRUE +#undef P_FAMILY_GOSSIFLEUR +#define P_FAMILY_GOSSIFLEUR TRUE +#undef P_FAMILY_WOOLOO +#define P_FAMILY_WOOLOO TRUE +#undef P_FAMILY_CHEWTLE +#define P_FAMILY_CHEWTLE TRUE +#undef P_FAMILY_YAMPER +#define P_FAMILY_YAMPER TRUE +#undef P_FAMILY_ROLYCOLY +#define P_FAMILY_ROLYCOLY TRUE +#undef P_FAMILY_APPLIN +#define P_FAMILY_APPLIN TRUE +#undef P_FAMILY_SILICOBRA +#define P_FAMILY_SILICOBRA TRUE +#undef P_FAMILY_CRAMORANT +#define P_FAMILY_CRAMORANT TRUE +#undef P_FAMILY_ARROKUDA +#define P_FAMILY_ARROKUDA TRUE +#undef P_FAMILY_TOXEL +#define P_FAMILY_TOXEL TRUE +#undef P_FAMILY_SIZZLIPEDE +#define P_FAMILY_SIZZLIPEDE TRUE +#undef P_FAMILY_CLOBBOPUS +#define P_FAMILY_CLOBBOPUS TRUE +#undef P_FAMILY_SINISTEA +#define P_FAMILY_SINISTEA TRUE +#undef P_FAMILY_HATENNA +#define P_FAMILY_HATENNA TRUE +#undef P_FAMILY_IMPIDIMP +#define P_FAMILY_IMPIDIMP TRUE +#undef P_FAMILY_MILCERY +#define P_FAMILY_MILCERY TRUE +#undef P_FAMILY_FALINKS +#define P_FAMILY_FALINKS TRUE +#undef P_FAMILY_PINCURCHIN +#define P_FAMILY_PINCURCHIN TRUE +#undef P_FAMILY_SNOM +#define P_FAMILY_SNOM TRUE +#undef P_FAMILY_STONJOURNER +#define P_FAMILY_STONJOURNER TRUE +#undef P_FAMILY_EISCUE +#define P_FAMILY_EISCUE TRUE +#undef P_FAMILY_INDEEDEE +#define P_FAMILY_INDEEDEE TRUE +#undef P_FAMILY_MORPEKO +#define P_FAMILY_MORPEKO TRUE +#undef P_FAMILY_CUFANT +#define P_FAMILY_CUFANT TRUE +#undef P_FAMILY_DRACOZOLT +#define P_FAMILY_DRACOZOLT TRUE +#undef P_FAMILY_ARCTOZOLT +#define P_FAMILY_ARCTOZOLT TRUE +#undef P_FAMILY_DRACOVISH +#define P_FAMILY_DRACOVISH TRUE +#undef P_FAMILY_ARCTOVISH +#define P_FAMILY_ARCTOVISH TRUE +#undef P_FAMILY_DURALUDON +#define P_FAMILY_DURALUDON TRUE +#undef P_FAMILY_DREEPY +#define P_FAMILY_DREEPY TRUE +#undef P_FAMILY_ZACIAN +#define P_FAMILY_ZACIAN TRUE +#undef P_FAMILY_ZAMAZENTA +#define P_FAMILY_ZAMAZENTA TRUE +#undef P_FAMILY_ETERNATUS +#define P_FAMILY_ETERNATUS TRUE +#undef P_FAMILY_KUBFU +#define P_FAMILY_KUBFU TRUE +#undef P_FAMILY_ZARUDE +#define P_FAMILY_ZARUDE TRUE +#undef P_FAMILY_REGIELEKI +#define P_FAMILY_REGIELEKI TRUE +#undef P_FAMILY_REGIDRAGO +#define P_FAMILY_REGIDRAGO TRUE +#undef P_FAMILY_GLASTRIER +#define P_FAMILY_GLASTRIER TRUE +#undef P_FAMILY_SPECTRIER +#define P_FAMILY_SPECTRIER TRUE +#undef P_FAMILY_CALYREX +#define P_FAMILY_CALYREX TRUE +#undef P_FAMILY_ENAMORUS +#define P_FAMILY_ENAMORUS TRUE + +#undef P_FAMILY_SPRIGATITO +#define P_FAMILY_SPRIGATITO TRUE +#undef P_FAMILY_FUECOCO +#define P_FAMILY_FUECOCO TRUE +#undef P_FAMILY_QUAXLY +#define P_FAMILY_QUAXLY TRUE +#undef P_FAMILY_LECHONK +#define P_FAMILY_LECHONK TRUE +#undef P_FAMILY_TAROUNTULA +#define P_FAMILY_TAROUNTULA TRUE +#undef P_FAMILY_NYMBLE +#define P_FAMILY_NYMBLE TRUE +#undef P_FAMILY_PAWMI +#define P_FAMILY_PAWMI TRUE +#undef P_FAMILY_TANDEMAUS +#define P_FAMILY_TANDEMAUS TRUE +#undef P_FAMILY_FIDOUGH +#define P_FAMILY_FIDOUGH TRUE +#undef P_FAMILY_SMOLIV +#define P_FAMILY_SMOLIV TRUE +#undef P_FAMILY_SQUAWKABILLY +#define P_FAMILY_SQUAWKABILLY TRUE +#undef P_FAMILY_NACLI +#define P_FAMILY_NACLI TRUE +#undef P_FAMILY_CHARCADET +#define P_FAMILY_CHARCADET TRUE +#undef P_FAMILY_TADBULB +#define P_FAMILY_TADBULB TRUE +#undef P_FAMILY_WATTREL +#define P_FAMILY_WATTREL TRUE +#undef P_FAMILY_MASCHIFF +#define P_FAMILY_MASCHIFF TRUE +#undef P_FAMILY_SHROODLE +#define P_FAMILY_SHROODLE TRUE +#undef P_FAMILY_BRAMBLIN +#define P_FAMILY_BRAMBLIN TRUE +#undef P_FAMILY_TOEDSCOOL +#define P_FAMILY_TOEDSCOOL TRUE +#undef P_FAMILY_KLAWF +#define P_FAMILY_KLAWF TRUE +#undef P_FAMILY_CAPSAKID +#define P_FAMILY_CAPSAKID TRUE +#undef P_FAMILY_RELLOR +#define P_FAMILY_RELLOR TRUE +#undef P_FAMILY_FLITTLE +#define P_FAMILY_FLITTLE TRUE +#undef P_FAMILY_TINKATINK +#define P_FAMILY_TINKATINK TRUE +#undef P_FAMILY_WIGLETT +#define P_FAMILY_WIGLETT TRUE +#undef P_FAMILY_BOMBIRDIER +#define P_FAMILY_BOMBIRDIER TRUE +#undef P_FAMILY_FINIZEN +#define P_FAMILY_FINIZEN TRUE +#undef P_FAMILY_VAROOM +#define P_FAMILY_VAROOM TRUE +#undef P_FAMILY_CYCLIZAR +#define P_FAMILY_CYCLIZAR TRUE +#undef P_FAMILY_ORTHWORM +#define P_FAMILY_ORTHWORM TRUE +#undef P_FAMILY_GLIMMET +#define P_FAMILY_GLIMMET TRUE +#undef P_FAMILY_GREAVARD +#define P_FAMILY_GREAVARD TRUE +#undef P_FAMILY_FLAMIGO +#define P_FAMILY_FLAMIGO TRUE +#undef P_FAMILY_CETODDLE +#define P_FAMILY_CETODDLE TRUE +#undef P_FAMILY_VELUZA +#define P_FAMILY_VELUZA TRUE +#undef P_FAMILY_DONDOZO +#define P_FAMILY_DONDOZO TRUE +#undef P_FAMILY_TATSUGIRI +#define P_FAMILY_TATSUGIRI TRUE +#undef P_FAMILY_GREAT_TUSK +#define P_FAMILY_GREAT_TUSK TRUE +#undef P_FAMILY_SCREAM_TAIL +#define P_FAMILY_SCREAM_TAIL TRUE +#undef P_FAMILY_BRUTE_BONNET +#define P_FAMILY_BRUTE_BONNET TRUE +#undef P_FAMILY_FLUTTER_MANE +#define P_FAMILY_FLUTTER_MANE TRUE +#undef P_FAMILY_SLITHER_WING +#define P_FAMILY_SLITHER_WING TRUE +#undef P_FAMILY_SANDY_SHOCKS +#define P_FAMILY_SANDY_SHOCKS TRUE +#undef P_FAMILY_IRON_TREADS +#define P_FAMILY_IRON_TREADS TRUE +#undef P_FAMILY_IRON_BUNDLE +#define P_FAMILY_IRON_BUNDLE TRUE +#undef P_FAMILY_IRON_HANDS +#define P_FAMILY_IRON_HANDS TRUE +#undef P_FAMILY_IRON_JUGULIS +#define P_FAMILY_IRON_JUGULIS TRUE +#undef P_FAMILY_IRON_MOTH +#define P_FAMILY_IRON_MOTH TRUE +#undef P_FAMILY_IRON_THORNS +#define P_FAMILY_IRON_THORNS TRUE +#undef P_FAMILY_FRIGIBAX +#define P_FAMILY_FRIGIBAX TRUE +#undef P_FAMILY_GIMMIGHOUL +#define P_FAMILY_GIMMIGHOUL TRUE +#undef P_FAMILY_WO_CHIEN +#define P_FAMILY_WO_CHIEN TRUE +#undef P_FAMILY_CHIEN_PAO +#define P_FAMILY_CHIEN_PAO TRUE +#undef P_FAMILY_TING_LU +#define P_FAMILY_TING_LU TRUE +#undef P_FAMILY_CHI_YU +#define P_FAMILY_CHI_YU TRUE +#undef P_FAMILY_ROARING_MOON +#define P_FAMILY_ROARING_MOON TRUE +#undef P_FAMILY_IRON_VALIANT +#define P_FAMILY_IRON_VALIANT TRUE +#undef P_FAMILY_KORAIDON +#define P_FAMILY_KORAIDON TRUE +#undef P_FAMILY_MIRAIDON +#define P_FAMILY_MIRAIDON TRUE +#undef P_FAMILY_WALKING_WAKE +#define P_FAMILY_WALKING_WAKE TRUE +#undef P_FAMILY_IRON_LEAVES +#define P_FAMILY_IRON_LEAVES TRUE +#undef P_FAMILY_POLTCHAGEIST +#define P_FAMILY_POLTCHAGEIST TRUE +#undef P_FAMILY_SINISTCHA +#define P_FAMILY_SINISTCHA TRUE +#undef P_FAMILY_OKIDOGI +#define P_FAMILY_OKIDOGI TRUE +#undef P_FAMILY_MUNKIDORI +#define P_FAMILY_MUNKIDORI TRUE +#undef P_FAMILY_FEZANDIPITI +#define P_FAMILY_FEZANDIPITI TRUE +#undef P_FAMILY_OGERPON +#define P_FAMILY_OGERPON TRUE +#undef P_FAMILY_GOUGING_FIRE +#define P_FAMILY_GOUGING_FIRE TRUE +#undef P_FAMILY_RAGING_BOLT +#define P_FAMILY_RAGING_BOLT TRUE +#undef P_FAMILY_IRON_BOULDER +#define P_FAMILY_IRON_BOULDER TRUE +#undef P_FAMILY_IRON_CROWN +#define P_FAMILY_IRON_CROWN TRUE +#undef P_FAMILY_TERAPAGOS +#define P_FAMILY_TERAPAGOS TRUE +#undef P_FAMILY_PECHARUNT +#define P_FAMILY_PECHARUNT TRUE + #endif // GUARD_CONFIG_TEST_H diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index db3051b257..38d058a8cb 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -32,25 +32,26 @@ #define AI_FLAG_RISKY (1 << 4) #define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) #define AI_FLAG_PREFER_BATON_PASS (1 << 6) -#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE +#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner #define AI_FLAG_HP_AWARE (1 << 8) #define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target // New, Trainer Handicap Flags #define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc #define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc // New, Trainer Strategy Flags -#define AI_FLAG_HELP_PARTNER (1 << 12) // AI can try to help partner. If not set, will tend not to target partner -#define AI_FLAG_PREFER_STATUS_MOVES (1 << 13) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves -#define AI_FLAG_STALL (1 << 14) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished -#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. -#define AI_FLAG_ACE_POKEMON (1 << 16) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. -#define AI_FLAG_OMNISCIENT (1 << 17) // AI has full knowledge of player moves, abilities, hold items -#define AI_FLAG_SMART_MON_CHOICES (1 << 18) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. -#define AI_FLAG_CONSERVATIVE (1 << 19) // AI assumes all moves will low roll damage +#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves +#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished +#define AI_FLAG_SMART_SWITCHING (1 << 14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. +#define AI_FLAG_ACE_POKEMON (1 << 15) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. +#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items +#define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. +#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage +#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle #define AI_FLAG_COUNT 20 // 'other' ai logic flags +#define AI_FLAG_DYNAMIC_FUNC (1 << 28) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd #define AI_FLAG_ROAMING (1 << 29) #define AI_FLAG_SAFARI (1 << 30) #define AI_FLAG_FIRST_BATTLE (1 << 31) diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 613f39098f..389cd7e127 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -405,9 +405,13 @@ #define ANIM_TAG_SYRUP_SHELL_YELLOW (ANIM_SPRITES_START + 391) #define ANIM_TAG_SYRUP_SPLAT_RED (ANIM_SPRITES_START + 392) #define ANIM_TAG_SYRUP_SPLAT_YELLOW (ANIM_SPRITES_START + 393) -#define ANIM_TAG_TERA_CRYSTAL (ANIM_SPRITES_START + 394) -#define ANIM_TAG_TERA_SHATTER (ANIM_SPRITES_START + 395) -#define ANIM_TAG_DREEPY_SHINY (ANIM_SPRITES_START + 396) +#define ANIM_TAG_IVY_CUDGEL_GRASS (ANIM_SPRITES_START + 394) +#define ANIM_TAG_IVY_CUDGEL_FIRE (ANIM_SPRITES_START + 395) +#define ANIM_TAG_IVY_CUDGEL_ROCK (ANIM_SPRITES_START + 396) +#define ANIM_TAG_IVY_CUDGEL_WATER (ANIM_SPRITES_START + 397) +#define ANIM_TAG_TERA_CRYSTAL (ANIM_SPRITES_START + 398) +#define ANIM_TAG_TERA_SHATTER (ANIM_SPRITES_START + 399) +#define ANIM_TAG_DREEPY_SHINY (ANIM_SPRITES_START + 400) // battlers #define ANIM_ATTACKER 0 @@ -573,6 +577,7 @@ #define B_ANIM_FOG_CONTINUES 49 #define B_ANIM_TERA_CHARGE 50 #define B_ANIM_TERA_ACTIVATE 51 +#define B_ANIM_SIMPLE_HEAL 52 // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index e69987b442..5da278110f 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -352,6 +352,8 @@ enum { EFFECT_TERA_BLAST, EFFECT_TERA_STARSTORM, EFFECT_DRAGON_DARTS, + EFFECT_GUARDIAN_OF_ALOLA, + EFFECT_SHELL_SIDE_ARM, NUM_BATTLE_MOVE_EFFECTS, }; diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 18d1108431..03173c43cf 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 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b337d5f92a..1e6e2d86d7 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -670,51 +670,50 @@ #define STRINGID_CURRENTMOVECANTSELECT 668 #define STRINGID_TARGETISBEINGSALTCURED 669 #define STRINGID_TARGETISHURTBYSALTCURE 670 -#define STRINGID_OPPORTUNISTCOPIED 671 -#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 672 -#define STRINGID_SHARPSTEELFLOATS 673 -#define STRINGID_SHARPSTEELDMG 674 -#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 675 -#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 676 -#define STRINGID_TEAMTRAPPEDWITHVINES 677 -#define STRINGID_PKMNHURTBYVINES 678 -#define STRINGID_TEAMCAUGHTINVORTEX 679 -#define STRINGID_PKMNHURTBYVORTEX 680 -#define STRINGID_TEAMSURROUNDEDBYFIRE 681 -#define STRINGID_PKMNBURNINGUP 682 -#define STRINGID_TEAMSURROUNDEDBYROCKS 683 -#define STRINGID_PKMNHURTBYROCKSTHROWN 684 -#define STRINGID_MOVEBLOCKEDBYDYNAMAX 685 -#define STRINGID_ZEROTOHEROTRANSFORMATION 686 -#define STRINGID_THETWOMOVESBECOMEONE 687 -#define STRINGID_ARAINBOWAPPEAREDONSIDE 688 -#define STRINGID_THERAINBOWDISAPPEARED 689 -#define STRINGID_WAITINGFORPARTNERSMOVE 690 -#define STRINGID_SEAOFFIREENVELOPEDSIDE 691 -#define STRINGID_HURTBYTHESEAOFFIRE 692 -#define STRINGID_THESEAOFFIREDISAPPEARED 693 -#define STRINGID_SWAMPENVELOPEDSIDE 694 -#define STRINGID_THESWAMPDISAPPEARED 695 -#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 696 -#define STRINGID_HOSPITALITYRESTORATION 697 -#define STRINGID_ELECTROSHOTCHARGING 698 -#define STRINGID_ITEMWASUSEDUP 699 -#define STRINGID_ATTACKERLOSTITSTYPE 700 -#define STRINGID_SHEDITSTAIL 701 -#define STRINGID_CLOAKEDINAHARSHLIGHT 702 -#define STRINGID_SUPERSWEETAROMAWAFTS 703 -#define STRINGID_DIMENSIONSWERETWISTED 704 -#define STRINGID_BIZARREARENACREATED 705 -#define STRINGID_BIZARREAREACREATED 706 -#define STRINGID_TIDYINGUPCOMPLETE 707 -#define STRINGID_PKMNTERASTALLIZEDINTO 708 -#define STRINGID_BOOSTERENERGYACTIVATES 709 -#define STRINGID_FOGCREPTUP 710 -#define STRINGID_FOGISDEEP 711 -#define STRINGID_FOGLIFTED 712 -#define STRINGID_PKMNMADESHELLGLEAM 713 +#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 671 +#define STRINGID_SHARPSTEELFLOATS 672 +#define STRINGID_SHARPSTEELDMG 673 +#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 674 +#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 675 +#define STRINGID_TEAMTRAPPEDWITHVINES 676 +#define STRINGID_PKMNHURTBYVINES 677 +#define STRINGID_TEAMCAUGHTINVORTEX 678 +#define STRINGID_PKMNHURTBYVORTEX 679 +#define STRINGID_TEAMSURROUNDEDBYFIRE 680 +#define STRINGID_PKMNBURNINGUP 681 +#define STRINGID_TEAMSURROUNDEDBYROCKS 682 +#define STRINGID_PKMNHURTBYROCKSTHROWN 683 +#define STRINGID_MOVEBLOCKEDBYDYNAMAX 684 +#define STRINGID_ZEROTOHEROTRANSFORMATION 685 +#define STRINGID_THETWOMOVESBECOMEONE 686 +#define STRINGID_ARAINBOWAPPEAREDONSIDE 687 +#define STRINGID_THERAINBOWDISAPPEARED 688 +#define STRINGID_WAITINGFORPARTNERSMOVE 689 +#define STRINGID_SEAOFFIREENVELOPEDSIDE 690 +#define STRINGID_HURTBYTHESEAOFFIRE 691 +#define STRINGID_THESEAOFFIREDISAPPEARED 692 +#define STRINGID_SWAMPENVELOPEDSIDE 693 +#define STRINGID_THESWAMPDISAPPEARED 694 +#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 695 +#define STRINGID_HOSPITALITYRESTORATION 696 +#define STRINGID_ELECTROSHOTCHARGING 697 +#define STRINGID_ITEMWASUSEDUP 698 +#define STRINGID_ATTACKERLOSTITSTYPE 699 +#define STRINGID_SHEDITSTAIL 700 +#define STRINGID_CLOAKEDINAHARSHLIGHT 701 +#define STRINGID_SUPERSWEETAROMAWAFTS 702 +#define STRINGID_DIMENSIONSWERETWISTED 703 +#define STRINGID_BIZARREARENACREATED 704 +#define STRINGID_BIZARREAREACREATED 705 +#define STRINGID_TIDYINGUPCOMPLETE 706 +#define STRINGID_PKMNTERASTALLIZEDINTO 707 +#define STRINGID_BOOSTERENERGYACTIVATES 708 +#define STRINGID_FOGCREPTUP 709 +#define STRINGID_FOGISDEEP 710 +#define STRINGID_FOGLIFTED 711 +#define STRINGID_PKMNMADESHELLGLEAM 712 -#define BATTLESTRINGS_COUNT 714 +#define BATTLESTRINGS_COUNT 713 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index f4268d9f02..e2ac7f7920 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -275,7 +275,8 @@ #define OBJ_EVENT_GFX_SPECIES_MASK ((1 << OBJ_EVENT_GFX_SPECIES_BITS) - 1) // Used to call a specific species' follower graphics. Useful for static encounters. -#define OBJ_EVENT_GFX_SPECIES(name) (OBJ_EVENT_GFX_MON_BASE + SPECIES_##name) +#define OBJ_EVENT_GFX_SPECIES(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE) +#define OBJ_EVENT_GFX_SPECIES_SHINY(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) #define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE) #define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 43afdbe212..72a4865242 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.10.0 #define EXPANSION_VERSION_MAJOR 1 -#define EXPANSION_VERSION_MINOR 8 -#define EXPANSION_VERSION_PATCH 4 +#define EXPANSION_VERSION_MINOR 10 +#define EXPANSION_VERSION_PATCH 0 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/include/constants/field_weather.h b/include/constants/field_weather.h index e84dbc48c4..fe7eb6a1ae 100644 --- a/include/constants/field_weather.h +++ b/include/constants/field_weather.h @@ -8,6 +8,7 @@ #define NUM_FOG_DIAGONAL_SPRITES 20 #define NUM_SANDSTORM_SPRITES 20 #define NUM_SWIRL_SANDSTORM_SPRITES 5 +#define NUM_SNOWFLAKE_SPRITES 16 // Controls how the weather should be changing the screen palettes. #define WEATHER_PAL_STATE_CHANGING_WEATHER 0 diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index ac1f53bb51..74bc16cf2f 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -129,4 +129,9 @@ // param1: tera type #define FORM_CHANGE_BATTLE_TERASTALLIZATION 22 +// Form change that activates at midnight after a certain amount of days has passed. +// Adding this form change will automatically make the countdown start as soon the Pokémon changes into a species other than the one specified for this form change. +// param1: amount of days +#define FORM_CHANGE_DAYS_PASSED 23 + #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/include/constants/heal_locations.h b/include/constants/heal_locations.h index d3dd8f1f17..217594d0b7 100644 --- a/include/constants/heal_locations.h +++ b/include/constants/heal_locations.h @@ -24,5 +24,6 @@ #define HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE 20 #define HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR 21 #define HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST 22 +#define HEAL_LOCATION_COUNT 23 #endif // GUARD_CONSTANTS_HEAL_LOCATIONS_H diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index bebda44834..8095367c97 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -296,8 +296,8 @@ #define EVO_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male #define EVO_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female #define EVO_ITEM_COUNT_999 50 // Pokémon levels up after trainer has collected 999 of a specific item -#define EVO_DEFEAT_WITH_ITEM 51 // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item -#define EVO_OVERWORLD_STEPS 52 // Pokémon levels up after having taken a specific amount of steps in the overworld +#define EVO_DEFEAT_THREE_WITH_ITEM 51 // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item +#define EVO_OVERWORLD_STEPS 52 // Pokémon levels up after having taken a specific amount of steps in the overworld (or as the party lead if OW_FOLLOWERS_ENABLED is FALSE) without switching // Evolution 'modes,' for GetEvolutionTargetSpecies #define EVO_MODE_NORMAL 0 diff --git a/include/constants/species.h b/include/constants/species.h index 9009119332..895e444d51 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1629,10 +1629,12 @@ #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 +#define SPECIES_SHINY_TAG 5000 + // Competitive format aliases #define SPECIES_ALCREMIE_GMAX SPECIES_ALCREMIE_GIGANTAMAX #define SPECIES_APPLETUN_GMAX SPECIES_APPLETUN_GIGANTAMAX @@ -1704,6 +1706,10 @@ #define SPECIES_MR_MIME_GALAR SPECIES_MR_MIME_GALARIAN #define SPECIES_MUK_ALOLA SPECIES_MUK_ALOLAN #define SPECIES_NINETALES_ALOLA SPECIES_NINETALES_ALOLAN +#define SPECIES_OGERPON_TEAL SPECIES_OGERPON_TEAL_MASK +#define SPECIES_OGERPON_WELLSPRING SPECIES_OGERPON_WELLSPRING_MASK +#define SPECIES_OGERPON_HEARTHFLAME SPECIES_OGERPON_HEARTHFLAME_MASK +#define SPECIES_OGERPON_CORNERSTONE SPECIES_OGERPON_CORNERSTONE_MASK #define SPECIES_ORBEETLE_GMAX SPECIES_ORBEETLE_GIGANTAMAX #define SPECIES_PERSIAN_ALOLA SPECIES_PERSIAN_ALOLAN #define SPECIES_PIKACHU_ALOLA SPECIES_PIKACHU_ALOLA_CAP diff --git a/include/constants/wild_encounter.h b/include/constants/wild_encounter.h index 8902f2ef43..ae669a2c35 100644 --- a/include/constants/wild_encounter.h +++ b/include/constants/wild_encounter.h @@ -8,6 +8,7 @@ #define NUM_ALTERING_CAVE_TABLES 9 -#define FISHING_CHAIN_LENGTH_MAX 20 +#define FISHING_CHAIN_LENGTH_MAX 200 +#define FISHING_CHAIN_SHINY_STREAK_MAX 20 #endif // GUARD_CONSTANTS_WILD_ENCOUNTER_H diff --git a/include/data.h b/include/data.h index ef803aa1bb..69c1a19a3c 100644 --- a/include/data.h +++ b/include/data.h @@ -4,8 +4,6 @@ #include "constants/moves.h" #include "constants/trainers.h" -#define SPECIES_SHINY_TAG 5000 - #define MAX_TRAINER_ITEMS 4 #define TRAINER_PIC_WIDTH 64 @@ -70,11 +68,12 @@ struct TrainerMon u8 nature:5; bool8 gender:2; bool8 isShiny:1; - u8 dynamaxLevel:4; u8 teraType:5; bool8 gigantamaxFactor:1; - bool8 shouldDynamax:1; - bool8 shouldTerastal:1; + u8 shouldUseDynamax:1; + u8 padding1:1; + u8 dynamaxLevel:4; + u8 padding2:4; }; #define TRAINER_PARTY(partyArray) partyArray, .partySize = ARRAY_COUNT(partyArray) diff --git a/include/event_scripts.h b/include/event_scripts.h index fa0bfe5c6e..7c35e991c2 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -620,6 +620,8 @@ extern const u8 EventScript_SelectWithoutRegisteredItem[]; // overworld extern const u8 EventScript_WhiteOut[]; +extern const u8 EventScript_AfterWhiteOutMomHeal[]; +extern const u8 EventScript_AfterWhiteOutHeal[]; extern const u8 EventScript_ResetMrBriney[]; extern const u8 EventScript_DoLinkRoomExit[]; extern const u8 CableClub_EventScript_TooBusyToNotice[]; diff --git a/include/fake_rtc.h b/include/fake_rtc.h new file mode 100644 index 0000000000..d74849614e --- /dev/null +++ b/include/fake_rtc.h @@ -0,0 +1,13 @@ +#ifndef GUARD_FAKE_RTC_UTIL_H +#define GUARD_FAKE_RTC_UTIL_H + +#include "siirtc.h" + +struct Time* FakeRtc_GetCurrentTime(void); +void FakeRtc_GetRawInfo(struct SiiRtcInfo *rtc); +void FakeRtc_AdvanceTimeBy(u32 hours, u32 minutes, u32 seconds); +void FakeRtc_ManuallySetTime(u32 hour, u32 minute, u32 second); +void FakeRtc_TickTimeForward(void); +u32 FakeRtc_GetSecondsRatio(void); + +#endif // GUARD_FAKE_RTC_UTIL_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 6dc9b077d2..9b3aa6229e 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -16,6 +16,7 @@ void FieldCB_ReturnToFieldWirelessLink(void); void FieldCB_DefaultWarpExit(void); void FieldCB_WarpExitFadeFromBlack(void); void FieldCB_WarpExitFadeFromWhite(void); +void FieldCB_RushInjuredPokemonToCenter(void); bool8 FieldCB_ReturnToFieldOpenStartMenu(void); void ReturnToFieldOpenStartMenu(void); void FieldCB_ReturnToFieldNoScript(void); diff --git a/include/global.h b/include/global.h index a378f15a1d..f5ada78360 100644 --- a/include/global.h +++ b/include/global.h @@ -167,12 +167,6 @@ struct UCoords32 u32 y; }; -struct SaveBlock3 -{ -}; - -extern struct SaveBlock3 *gSaveBlock3Ptr; - struct Time { /*0x00*/ s16 days; @@ -181,6 +175,16 @@ struct Time /*0x04*/ s8 seconds; }; + +struct SaveBlock3 +{ +#if OW_USE_FAKE_RTC + struct Time fakeRTC; +#endif +}; + +extern struct SaveBlock3 *gSaveBlock3Ptr; + struct Pokedex { /*0x00*/ u8 order; diff --git a/include/graphics.h b/include/graphics.h index fc60c29ebf..01de060b79 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2873,6 +2873,11 @@ extern const u32 gBattleAnimSpriteGfx_SyrupShell[]; extern const u32 gBattleAnimSpriteGfx_SyrupSplat[]; extern const u32 gBattleAnimSpritePal_SyrupRed[]; extern const u32 gBattleAnimSpritePal_SyrupYellow[]; +extern const u32 gBattleAnimSpriteGfx_IvyCudgel[]; +extern const u32 gBattleAnimSpritePal_IvyCudgelGrass[]; +extern const u32 gBattleAnimSpritePal_IvyCudgelFire[]; +extern const u32 gBattleAnimSpritePal_IvyCudgelRock[]; +extern const u32 gBattleAnimSpritePal_IvyCudgelWater[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; diff --git a/include/heal_location.h b/include/heal_location.h index 46f0d785ab..8c4ebae965 100644 --- a/include/heal_location.h +++ b/include/heal_location.h @@ -10,7 +10,11 @@ struct HealLocation }; u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum); +u32 GetHealLocationIndexByWarpData(struct WarpData *warp); const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum); const struct HealLocation *GetHealLocation(u32 index); +bool32 IsLastHealLocationPlayerHouse(); +void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData * warp); +u32 GetHealNpcLocalId(u32 healLocationId); #endif // GUARD_HEAL_LOCATION_H diff --git a/include/item.h b/include/item.h index 0e2c7f8abe..dc1efc68a5 100644 --- a/include/item.h +++ b/include/item.h @@ -44,6 +44,7 @@ u8 *CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity); bool8 IsBagPocketNonEmpty(u8 pocket); bool8 CheckBagHasItem(u16 itemId, u16 count); bool8 HasAtLeastOneBerry(void); +bool8 HasAtLeastOnePokeBall(void); bool8 CheckBagHasSpace(u16 itemId, u16 count); u32 GetFreeSpaceForItemInBag(u16 itemId); bool8 AddBagItem(u16 itemId, u16 count); diff --git a/include/money.h b/include/money.h index 211f9caa2e..5cffb94242 100644 --- a/include/money.h +++ b/include/money.h @@ -1,7 +1,17 @@ #ifndef GUARD_MONEY_H #define GUARD_MONEY_H -#define MAX_MONEY 999999 +#define MAX_MONEY 999999 // Can be increased to INT_MAX + +#define MAX_MONEY_DIGITS ((MAX_MONEY > 999999999) ? 10 : \ + (MAX_MONEY > 99999999) ? 9 : \ + (MAX_MONEY > 9999999) ? 8 : \ + (MAX_MONEY > 999999) ? 7 : \ + (MAX_MONEY > 99999) ? 6 : \ + (MAX_MONEY > 9999) ? 5 : \ + (MAX_MONEY > 999) ? 4 : \ + (MAX_MONEY > 99) ? 3 : \ + (MAX_MONEY > 9) ? 2 : 1) u32 GetMoney(u32 *moneyPtr); void SetMoney(u32 *moneyPtr, u32 newValue); @@ -18,5 +28,6 @@ void DrawMoneyBox(int amount, u8 x, u8 y); void HideMoneyBox(void); void AddMoneyLabelObject(u16 x, u16 y); void RemoveMoneyLabelObject(void); +u32 CalculateMoneyTextHorizontalPosition(u32 amount); #endif // GUARD_MONEY_H diff --git a/include/pokemon.h b/include/pokemon.h index 63a125f536..b299ab7d61 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -26,6 +26,7 @@ enum { MON_DATA_IS_SHINY, MON_DATA_HIDDEN_NATURE, MON_DATA_HP_LOST, + MON_DATA_DAYS_SINCE_FORM_CHANGE, MON_DATA_ENCRYPT_SEPARATOR, MON_DATA_NICKNAME, MON_DATA_NICKNAME10, @@ -246,7 +247,8 @@ struct BoxPokemon u8 hasSpecies:1; u8 isEgg:1; u8 blockBoxRS:1; // Unused, but Pokémon Box Ruby & Sapphire will refuse to deposit a Pokémon with this flag set. - u8 unused_13:4; + u8 daysSinceFormChange:3; // 7 days. + u8 unused_13:1; u8 otName[PLAYER_NAME_LENGTH]; u8 markings:4; u8 compressedStatus:4; @@ -682,6 +684,7 @@ extern struct Pokemon gPlayerParty[PARTY_SIZE]; extern u8 gEnemyPartyCount; extern struct Pokemon gEnemyParty[PARTY_SIZE]; extern struct SpriteTemplate gMultiuseSpriteTemplate; +extern u16 gFollowerSteps; extern const struct MoveInfo gMovesInfo[]; extern const u8 gFacilityClassToPicIndex[]; @@ -877,5 +880,7 @@ void HealPokemon(struct Pokemon *mon); void HealBoxPokemon(struct BoxPokemon *boxMon); const u8 *GetMoveName(u16 moveId); const u8 *GetMoveAnimationScript(u16 moveId); +void UpdateDaysPassedSinceFormChange(u16 days); +void TrySetDayLimitToFormChange(struct Pokemon *mon); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 5ab1b4cb8f..c2825bf779 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -75,5 +75,6 @@ void SetWaldaPhrase(const u8 *src); bool32 IsWaldaPhraseEmpty(void); void EnterPokeStorage(u8 boxOption); +u32 CountPartyNonEggMons(void); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/include/random.h b/include/random.h index 3aeb1879d8..cb4e636e14 100644 --- a/include/random.h +++ b/include/random.h @@ -161,6 +161,7 @@ enum RandomTag RNG_ACCURACY, RNG_CONFUSION, RNG_CRITICAL_HIT, + RNG_CURSED_BODY, RNG_CUTE_CHARM, RNG_DAMAGE_MODIFIER, RNG_DIRE_CLAW, @@ -179,6 +180,7 @@ enum RandomTag RNG_METRONOME, RNG_PARALYSIS, RNG_POISON_POINT, + RNG_POISON_TOUCH, RNG_RAMPAGE_TURNS, RNG_SECONDARY_EFFECT, RNG_SECONDARY_EFFECT_2, diff --git a/include/strings.h b/include/strings.h index 359184cbf4..ec175ab251 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2950,25 +2950,6 @@ extern const u8 gText_NeatnessRankings[]; extern const u8 gText_CoopRankings[]; extern const u8 gText_PressingPowerRankings[]; -// Lilycove Lady -extern const u8 gText_ContestLady_Handsome[]; -extern const u8 gText_ContestLady_Vinny[]; -extern const u8 gText_ContestLady_Moreme[]; -extern const u8 gText_ContestLady_Ironhard[]; -extern const u8 gText_ContestLady_Muscle[]; -extern const u8 gText_ContestLady_Coolness[]; -extern const u8 gText_ContestLady_Beauty[]; -extern const u8 gText_ContestLady_Cuteness[]; -extern const u8 gText_ContestLady_Smartness[]; -extern const u8 gText_ContestLady_Toughness[]; -extern const u8 gText_QuizLady_Lady[]; -extern const u8 gText_FavorLady_Slippery[]; -extern const u8 gText_FavorLady_Roundish[]; -extern const u8 gText_FavorLady_Whamish[]; -extern const u8 gText_FavorLady_Shiny[]; -extern const u8 gText_FavorLady_Sticky[]; -extern const u8 gText_FavorLady_Pointy[]; - extern const u8 gText_CoolnessContest[]; extern const u8 gText_BeautyContest[]; extern const u8 gText_CutenessContest[]; @@ -3065,4 +3046,8 @@ extern const u8 gText_PlantBerry[]; extern const u8 gText_AM[]; extern const u8 gText_PM[]; +// FRLG whiteout +extern const u8 gText_PlayerScurriedToCenter[]; +extern const u8 gText_PlayerScurriedBackHome[]; + #endif // GUARD_STRINGS_H diff --git a/include/test/battle.h b/include/test/battle.h index 75f32bdfeb..a44e813f82 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -326,14 +326,14 @@ * The inference process is naive, if your test contains anything that * modifies the speed of a battler you should specify them explicitly. * - * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) + * MOVE(battler, move | moveSlot:, [gimmick:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) * Used when the battler chooses Fight. Either the move ID or move slot - * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve - * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes - * the move to land a critical hit, target: is used in double battles to - * choose the target (when necessary), and allowed: FALSE is used to - * reject an illegal move e.g. a Disabled one. WITH_RNG allows the move - * to specify an explicit outcome for an RNG tag. + * must be specified. gimmick: GIMMICK_MEGA causes the battler to Mega + * Evolve if able, hit: FALSE causes the move to miss, criticalHit: TRUE + * causes the move to land a critical hit, target: is used in double + * battles to choose the target (when necessary), and allowed: FALSE is + * used to reject an illegal move e.g. a Disabled one. WITH_RNG allows + * the move to specify an explicit outcome for an RNG tag. * MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); * If the battler does not have an explicit Moves specified the moveset * will be populated based on the MOVEs it uses. @@ -507,7 +507,7 @@ // or loop. #define BATTLE_TEST_STACK_SIZE 1024 #define MAX_TURNS 16 -#define MAX_QUEUED_EVENTS 25 +#define MAX_QUEUED_EVENTS 30 #define MAX_EXPECTED_ACTIONS 10 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES, BATTLE_TEST_WILD, BATTLE_TEST_AI_SINGLES, BATTLE_TEST_AI_DOUBLES }; @@ -518,7 +518,6 @@ typedef void (*DoubleBattleTestFunction)(void *, const u32, struct BattlePokemon struct BattleTest { u8 type; - u16 sourceLine; union { SingleBattleTestFunction singles; @@ -662,6 +661,7 @@ struct BattleTestData u8 gender; u8 nature; u16 forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE]; + u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE]; u8 currentMonIndexes[MAX_BATTLERS_COUNT]; u8 turnState; @@ -743,10 +743,10 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; .name = _name, \ .filename = __FILE__, \ .runner = &gBattleTestRunner, \ + .sourceLine = __LINE__, \ .data = (void *)&(const struct BattleTest) \ { \ .type = _type, \ - .sourceLine = __LINE__, \ .function = { .singles = (SingleBattleTestFunction)CAT(Test, __LINE__) }, \ .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ }, \ @@ -761,10 +761,10 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; .name = _name, \ .filename = __FILE__, \ .runner = &gBattleTestRunner, \ + .sourceLine = __LINE__, \ .data = (void *)&(const struct BattleTest) \ { \ .type = _type, \ - .sourceLine = __LINE__, \ .function = { .doubles = (DoubleBattleTestFunction)CAT(Test, __LINE__) }, \ .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ }, \ @@ -941,15 +941,8 @@ struct MoveContext u16 explicitCriticalHit:1; u16 secondaryEffect:1; u16 explicitSecondaryEffect:1; - u16 megaEvolve:1; - u16 explicitMegaEvolve:1; - u16 ultraBurst:1; - u16 explicitUltraBurst:1; - // TODO: u8 zMove:1; - u16 dynamax:1; - u16 explicitDynamax:1; - u16 tera:1; - u16 explicitTera:1; + u16 gimmick:4; + u16 explicitGimmick:1; u16 allowed:1; u16 explicitAllowed:1; u16 notExpected:1; // Has effect only with EXPECT_MOVE @@ -1001,6 +994,8 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); // Static const is needed to make the modern compiler put the pattern variable in the .rodata section, instead of putting it on stack(which can break the game). #define MESSAGE(pattern) do {static const u8 msg[] = _(pattern); QueueMessage(__LINE__, msg);} while (0) #define STATUS_ICON(battler, status) QueueStatus(__LINE__, battler, (struct StatusEventContext) { status }) +#define FREEZE_OR_FROSTBURN_STATUS(battler, isFrostbite) \ + (B_USE_FROSTBITE ? STATUS_ICON(battler, frostbite: isFrostbite) : STATUS_ICON(battler, freeze: isFrostbite)) #define SWITCH_OUT_MESSAGE(name) ONE_OF { \ MESSAGE(name ", that's enough! Come back!"); \ @@ -1098,7 +1093,7 @@ void ValidateFinally(u32 sourceLine); s32 _am = Q_4_12_TO_INT(_a * _m); \ s32 _t = max(Q_4_12_TO_INT(abs(_m) + Q_4_12_ROUND), 1); \ if (abs(_am-_b) > _t) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_MUL_EQ(%d, %q, %d) failed: %d not in [%d..%d]", gTestRunnerState.test->filename, __LINE__, _a, _m, _b, _am, _b-_t, _b+_t); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_MUL_EQ(%d, %q, %d) failed: %d not in [%d..%d]", gTestRunnerState.test->filename, __LINE__, _a, _m, _b, _am, _b-_t, _b+_t); \ } while (0) #endif diff --git a/include/test/test.h b/include/test/test.h index 5a543a52b9..401c65ce9e 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -33,6 +33,7 @@ struct Test const char *filename; const struct TestRunner *runner; void *data; + u16 sourceLine; }; struct TestRunnerState @@ -40,6 +41,7 @@ struct TestRunnerState u8 state; u8 exitCode; const char *skipFilename; + u32 failedAssumptionsBlockLine; const struct Test *test; u32 processCosts[MAX_PROCESSES]; @@ -73,7 +75,9 @@ void CB2_TestRunner(void); void Test_ExpectedResult(enum TestResult); void Test_ExpectLeaks(bool32); -void Test_ExitWithResult(enum TestResult, const char *fmt, ...); +void Test_ExitWithResult(enum TestResult, u32 stopLine, const char *fmt, ...); +u32 SourceLine(u32 sourceLineOffset); +u32 SourceLineOffset(u32 sourceLine); s32 Test_MgbaPrintf(const char *fmt, ...); @@ -84,6 +88,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); .name = _name, \ .filename = __FILE__, \ .runner = &gFunctionTestRunner, \ + .sourceLine = __LINE__, \ .data = (void *)CAT(Test, __LINE__), \ }; \ static void CAT(Test, __LINE__)(void) @@ -95,6 +100,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); .name = "ASSUMPTIONS: " __FILE__, \ .filename = __FILE__, \ .runner = &gAssumptionsRunner, \ + .sourceLine = __LINE__, \ .data = Assumptions, \ }; \ static void Assumptions(void) @@ -103,14 +109,14 @@ s32 Test_MgbaPrintf(const char *fmt, ...); do \ { \ if (!(c)) \ - Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, __LINE__, ":L%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define EXPECT(c) \ do \ { \ if (!(c)) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define EXPECT_EQ(a, b) \ @@ -118,7 +124,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a != _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) #define EXPECT_NE(a, b) \ @@ -126,7 +132,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a == _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) #define EXPECT_LT(a, b) \ @@ -134,7 +140,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a >= _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) #define EXPECT_LE(a, b) \ @@ -142,7 +148,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a > _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) #define EXPECT_GT(a, b) \ @@ -150,7 +156,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a <= _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) #define EXPECT_GE(a, b) \ @@ -158,7 +164,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a < _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ } while (0) struct Benchmark { s32 ticks; }; @@ -195,7 +201,7 @@ static inline struct Benchmark BenchmarkStop(void) u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if (((a_ - BENCHMARK_ABS) * BENCHMARK_REL) >= (b_ * 100)) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define EXPECT_SLOWER(a, b) \ @@ -204,7 +210,7 @@ static inline struct Benchmark BenchmarkStop(void) u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if ((a_ * 100) <= ((b_ - BENCHMARK_ABS) * BENCHMARK_REL)) \ - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define KNOWN_FAILING \ @@ -220,7 +226,7 @@ static inline struct Benchmark BenchmarkStop(void) #define TO_DO \ do { \ Test_ExpectedResult(TEST_RESULT_TODO); \ - Test_ExitWithResult(TEST_RESULT_TODO, "%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_TODO, __LINE__, ":L%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__); \ } while (0) #endif diff --git a/include/test_runner.h b/include/test_runner.h index 248a0463e5..f61f26b66e 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -24,6 +24,7 @@ void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex); void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex); +u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex); #else @@ -45,6 +46,8 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex); #define TestRunner_Battle_GetForcedAbility(...) (u32)0 +#define TestRunner_Battle_GetChosenGimmick(...) (u32)0 + #endif #endif diff --git a/include/vs_seeker.h b/include/vs_seeker.h index 723e73bf37..d6795432b0 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 100 diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 6a7c7a2cba..63289f081c 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -42,8 +42,6 @@ u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); bool8 TryDoDoubleWildBattle(void); bool8 StandardWildEncounter_Debug(void); -void ResetChainFishingDexNavStreak(void); -bool32 IsCurrentEncounterFishing(void); u32 CalculateChainFishingShinyRolls(void); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/migration_scripts/1.9/battle_frontier_convert_parties.py b/migration_scripts/1.9/battle_frontier_convert_parties.py new file mode 100644 index 0000000000..83982bbe46 --- /dev/null +++ b/migration_scripts/1.9/battle_frontier_convert_parties.py @@ -0,0 +1,62 @@ +import re + +def battle_frontier_mons(data): + data = re.sub(re.escape(".itemTableId = BATTLE_FRONTIER_"), ".heldItem = ", data) + data = re.sub(re.escape("FacilityMon"), "TrainerMon", data) + data = re.sub(re.escape(".evSpread = 0,"), ".ev = NULL,", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 170, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(102, 102, 102, 102, 0, 102),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 128, 128, 0, 128, 128),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(84, 84, 84, 84, 84, 84),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 128, 128, 128, 0, 128),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(102, 0, 102, 102, 102, 102),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 0, 170, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 0, 128, 0, 128, 128),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 128, 128, 0, 0, 128),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 0, 128, 128, 0, 128),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 170, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),", data) + data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),", data) + + return data + +with open('src/data/battle_frontier/battle_frontier_mons.h', 'r') as file: + data = file.read() +with open('src/data/battle_frontier/battle_frontier_mons.h', 'w') as file: + file.write(battle_frontier_mons(data)) + +with open('src/data/battle_frontier/battle_tent.h', 'r') as file: + data = file.read() +with open('src/data/battle_frontier/battle_tent.h', 'w') as file: + file.write(battle_frontier_mons(data)) diff --git a/migration_scripts/README.md b/migration_scripts/README.md index cfa1d23638..5ae26c1c0a 100644 --- a/migration_scripts/README.md +++ b/migration_scripts/README.md @@ -336,3 +336,24 @@ Modifies all item ball scripts defined using to original Game Freak method to th "flag": "FLAG_ITEM_ROUTE_102_POTION" }, ``` + +### Facility Mons + +* Filepath [`migration_scripts/1.9/battle_frontier_convert_parties.py`](1.8/battle_frontier_convert_parties.py) +* Introduced in [Adds battle frontier conversion script #5040](https://github.com/rh-hideout/pokeemerald-expansion/pull/5040) +* Original refactor in [Customizable FrontierMon Sets #4313](https://github.com/rh-hideout/pokeemerald-expansion/pull/4313) + +Replaces itemTableId with heldItem and evSpread with ev. + +#### [src/data/battle_frontier/battle_frontier_mons.h](../src/data/battle_frontier/battle_frontier_mons.h) +```diff + [FRONTIER_MON_SUNKERN] = { + .species = SPECIES_SUNKERN, + .moves = {MOVE_MEGA_DRAIN, MOVE_HELPING_HAND, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN}, +- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE, ++ .heldItem = ITEM_LAX_INCENSE, +- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, ++ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0), + .nature = NATURE_RELAXED + }, +``` \ No newline at end of file diff --git a/sound/direct_sound_samples/cries/abomasnow.aif b/sound/direct_sound_samples/cries/abomasnow.aif index dce7941617..83ef6b33ac 100644 Binary files a/sound/direct_sound_samples/cries/abomasnow.aif and b/sound/direct_sound_samples/cries/abomasnow.aif differ diff --git a/sound/direct_sound_samples/cries/abomasnow_mega.aif b/sound/direct_sound_samples/cries/abomasnow_mega.aif index 11a0aec059..1b6b0684cf 100644 Binary files a/sound/direct_sound_samples/cries/abomasnow_mega.aif and b/sound/direct_sound_samples/cries/abomasnow_mega.aif differ diff --git a/sound/direct_sound_samples/cries/abra.aif b/sound/direct_sound_samples/cries/abra.aif index 153f4982e5..5c96619143 100644 Binary files a/sound/direct_sound_samples/cries/abra.aif and b/sound/direct_sound_samples/cries/abra.aif differ diff --git a/sound/direct_sound_samples/cries/absol.aif b/sound/direct_sound_samples/cries/absol.aif index f21d3138c0..81e81350d5 100644 Binary files a/sound/direct_sound_samples/cries/absol.aif and b/sound/direct_sound_samples/cries/absol.aif differ diff --git a/sound/direct_sound_samples/cries/accelgor.aif b/sound/direct_sound_samples/cries/accelgor.aif index 39efe9c55e..209c309c1e 100644 Binary files a/sound/direct_sound_samples/cries/accelgor.aif and b/sound/direct_sound_samples/cries/accelgor.aif differ diff --git a/sound/direct_sound_samples/cries/aegislash.aif b/sound/direct_sound_samples/cries/aegislash.aif index a101378573..d2c48b5d62 100644 Binary files a/sound/direct_sound_samples/cries/aegislash.aif and b/sound/direct_sound_samples/cries/aegislash.aif differ diff --git a/sound/direct_sound_samples/cries/aerodactyl.aif b/sound/direct_sound_samples/cries/aerodactyl.aif index bbf19e00b3..d4bf14946d 100644 Binary files a/sound/direct_sound_samples/cries/aerodactyl.aif and b/sound/direct_sound_samples/cries/aerodactyl.aif differ diff --git a/sound/direct_sound_samples/cries/aerodactyl_mega.aif b/sound/direct_sound_samples/cries/aerodactyl_mega.aif index 9aa15062ce..d323b09c59 100644 Binary files a/sound/direct_sound_samples/cries/aerodactyl_mega.aif and b/sound/direct_sound_samples/cries/aerodactyl_mega.aif differ diff --git a/sound/direct_sound_samples/cries/aggron.aif b/sound/direct_sound_samples/cries/aggron.aif index ed0afaa997..a87adf8f84 100644 Binary files a/sound/direct_sound_samples/cries/aggron.aif and b/sound/direct_sound_samples/cries/aggron.aif differ diff --git a/sound/direct_sound_samples/cries/aggron_mega.aif b/sound/direct_sound_samples/cries/aggron_mega.aif index 0e1778509f..6772bdd5ee 100644 Binary files a/sound/direct_sound_samples/cries/aggron_mega.aif and b/sound/direct_sound_samples/cries/aggron_mega.aif differ diff --git a/sound/direct_sound_samples/cries/aipom.aif b/sound/direct_sound_samples/cries/aipom.aif index c1e643890b..e40107f787 100644 Binary files a/sound/direct_sound_samples/cries/aipom.aif and b/sound/direct_sound_samples/cries/aipom.aif differ diff --git a/sound/direct_sound_samples/cries/alakazam.aif b/sound/direct_sound_samples/cries/alakazam.aif index 4ecfcf5fc7..d6b0126112 100644 Binary files a/sound/direct_sound_samples/cries/alakazam.aif and b/sound/direct_sound_samples/cries/alakazam.aif differ diff --git a/sound/direct_sound_samples/cries/alomomola.aif b/sound/direct_sound_samples/cries/alomomola.aif index 8f9ee13a3b..2e47a4083a 100644 Binary files a/sound/direct_sound_samples/cries/alomomola.aif and b/sound/direct_sound_samples/cries/alomomola.aif differ diff --git a/sound/direct_sound_samples/cries/altaria.aif b/sound/direct_sound_samples/cries/altaria.aif index f59364a9cd..0aa89c8fcb 100644 Binary files a/sound/direct_sound_samples/cries/altaria.aif and b/sound/direct_sound_samples/cries/altaria.aif differ diff --git a/sound/direct_sound_samples/cries/amaura.aif b/sound/direct_sound_samples/cries/amaura.aif index 291567cb89..813fcaddde 100644 Binary files a/sound/direct_sound_samples/cries/amaura.aif and b/sound/direct_sound_samples/cries/amaura.aif differ diff --git a/sound/direct_sound_samples/cries/ambipom.aif b/sound/direct_sound_samples/cries/ambipom.aif index 77f2e45e8c..a767329e07 100644 Binary files a/sound/direct_sound_samples/cries/ambipom.aif and b/sound/direct_sound_samples/cries/ambipom.aif differ diff --git a/sound/direct_sound_samples/cries/amoonguss.aif b/sound/direct_sound_samples/cries/amoonguss.aif index ddc8c6114b..d476e670bd 100644 Binary files a/sound/direct_sound_samples/cries/amoonguss.aif and b/sound/direct_sound_samples/cries/amoonguss.aif differ diff --git a/sound/direct_sound_samples/cries/ampharos.aif b/sound/direct_sound_samples/cries/ampharos.aif index 3c41f7634d..7eed0aa9f6 100644 Binary files a/sound/direct_sound_samples/cries/ampharos.aif and b/sound/direct_sound_samples/cries/ampharos.aif differ diff --git a/sound/direct_sound_samples/cries/anorith.aif b/sound/direct_sound_samples/cries/anorith.aif index cb0d37b581..ac6c774e5d 100644 Binary files a/sound/direct_sound_samples/cries/anorith.aif and b/sound/direct_sound_samples/cries/anorith.aif differ diff --git a/sound/direct_sound_samples/cries/applin.aif b/sound/direct_sound_samples/cries/applin.aif index 828eeaeafa..9e9a1de275 100644 Binary files a/sound/direct_sound_samples/cries/applin.aif and b/sound/direct_sound_samples/cries/applin.aif differ diff --git a/sound/direct_sound_samples/cries/araquanid.aif b/sound/direct_sound_samples/cries/araquanid.aif index 0efccf6a4e..86aac62b80 100644 Binary files a/sound/direct_sound_samples/cries/araquanid.aif and b/sound/direct_sound_samples/cries/araquanid.aif differ diff --git a/sound/direct_sound_samples/cries/arbok.aif b/sound/direct_sound_samples/cries/arbok.aif index 0e7b0b9644..0be4b7e624 100644 Binary files a/sound/direct_sound_samples/cries/arbok.aif and b/sound/direct_sound_samples/cries/arbok.aif differ diff --git a/sound/direct_sound_samples/cries/arboliva.aif b/sound/direct_sound_samples/cries/arboliva.aif index 1b73da2ec9..641491ff0e 100644 Binary files a/sound/direct_sound_samples/cries/arboliva.aif and b/sound/direct_sound_samples/cries/arboliva.aif differ diff --git a/sound/direct_sound_samples/cries/arcanine.aif b/sound/direct_sound_samples/cries/arcanine.aif index 17a7b3c6bb..cdc942c49a 100644 Binary files a/sound/direct_sound_samples/cries/arcanine.aif and b/sound/direct_sound_samples/cries/arcanine.aif differ diff --git a/sound/direct_sound_samples/cries/arceus.aif b/sound/direct_sound_samples/cries/arceus.aif index 5db8a3c27a..8496de2a17 100644 Binary files a/sound/direct_sound_samples/cries/arceus.aif and b/sound/direct_sound_samples/cries/arceus.aif differ diff --git a/sound/direct_sound_samples/cries/archaludon.aif b/sound/direct_sound_samples/cries/archaludon.aif index 8fbf45fdec..470afe8348 100644 Binary files a/sound/direct_sound_samples/cries/archaludon.aif and b/sound/direct_sound_samples/cries/archaludon.aif differ diff --git a/sound/direct_sound_samples/cries/archen.aif b/sound/direct_sound_samples/cries/archen.aif index fd5b7729b2..b1b2be3ead 100644 Binary files a/sound/direct_sound_samples/cries/archen.aif and b/sound/direct_sound_samples/cries/archen.aif differ diff --git a/sound/direct_sound_samples/cries/archeops.aif b/sound/direct_sound_samples/cries/archeops.aif index 7b65583da9..6555f0ce3a 100644 Binary files a/sound/direct_sound_samples/cries/archeops.aif and b/sound/direct_sound_samples/cries/archeops.aif differ diff --git a/sound/direct_sound_samples/cries/arctibax.aif b/sound/direct_sound_samples/cries/arctibax.aif index e0b31b19ab..a18bc78081 100644 Binary files a/sound/direct_sound_samples/cries/arctibax.aif and b/sound/direct_sound_samples/cries/arctibax.aif differ diff --git a/sound/direct_sound_samples/cries/arctovish.aif b/sound/direct_sound_samples/cries/arctovish.aif index 02d83dbb55..281c88f8d3 100644 Binary files a/sound/direct_sound_samples/cries/arctovish.aif and b/sound/direct_sound_samples/cries/arctovish.aif differ diff --git a/sound/direct_sound_samples/cries/ariados.aif b/sound/direct_sound_samples/cries/ariados.aif index de9057b45b..343879d70a 100644 Binary files a/sound/direct_sound_samples/cries/ariados.aif and b/sound/direct_sound_samples/cries/ariados.aif differ diff --git a/sound/direct_sound_samples/cries/armaldo.aif b/sound/direct_sound_samples/cries/armaldo.aif index 574a3d7539..23add2fec8 100644 Binary files a/sound/direct_sound_samples/cries/armaldo.aif and b/sound/direct_sound_samples/cries/armaldo.aif differ diff --git a/sound/direct_sound_samples/cries/aromatisse.aif b/sound/direct_sound_samples/cries/aromatisse.aif index 3e8da86c5b..4880d14946 100644 Binary files a/sound/direct_sound_samples/cries/aromatisse.aif and b/sound/direct_sound_samples/cries/aromatisse.aif differ diff --git a/sound/direct_sound_samples/cries/aron.aif b/sound/direct_sound_samples/cries/aron.aif index da82823e24..d246b4c22b 100644 Binary files a/sound/direct_sound_samples/cries/aron.aif and b/sound/direct_sound_samples/cries/aron.aif differ diff --git a/sound/direct_sound_samples/cries/articuno.aif b/sound/direct_sound_samples/cries/articuno.aif index e3975a17ca..212114537f 100644 Binary files a/sound/direct_sound_samples/cries/articuno.aif and b/sound/direct_sound_samples/cries/articuno.aif differ diff --git a/sound/direct_sound_samples/cries/audino.aif b/sound/direct_sound_samples/cries/audino.aif index 7430d0b680..873d4c947b 100644 Binary files a/sound/direct_sound_samples/cries/audino.aif and b/sound/direct_sound_samples/cries/audino.aif differ diff --git a/sound/direct_sound_samples/cries/aurorus.aif b/sound/direct_sound_samples/cries/aurorus.aif index f396174ad2..9483e1b637 100644 Binary files a/sound/direct_sound_samples/cries/aurorus.aif and b/sound/direct_sound_samples/cries/aurorus.aif differ diff --git a/sound/direct_sound_samples/cries/avalugg.aif b/sound/direct_sound_samples/cries/avalugg.aif index 7fa8af72cf..95c9d7a174 100644 Binary files a/sound/direct_sound_samples/cries/avalugg.aif and b/sound/direct_sound_samples/cries/avalugg.aif differ diff --git a/sound/direct_sound_samples/cries/axew.aif b/sound/direct_sound_samples/cries/axew.aif index 1dbe950c38..f642085f67 100644 Binary files a/sound/direct_sound_samples/cries/axew.aif and b/sound/direct_sound_samples/cries/axew.aif differ diff --git a/sound/direct_sound_samples/cries/azelf.aif b/sound/direct_sound_samples/cries/azelf.aif index 79761d6102..ad2e96c8f9 100644 Binary files a/sound/direct_sound_samples/cries/azelf.aif and b/sound/direct_sound_samples/cries/azelf.aif differ diff --git a/sound/direct_sound_samples/cries/azumarill.aif b/sound/direct_sound_samples/cries/azumarill.aif index 5d4d994f76..99a497e205 100644 Binary files a/sound/direct_sound_samples/cries/azumarill.aif and b/sound/direct_sound_samples/cries/azumarill.aif differ diff --git a/sound/direct_sound_samples/cries/azurill.aif b/sound/direct_sound_samples/cries/azurill.aif index 538001ec41..401385cafb 100644 Binary files a/sound/direct_sound_samples/cries/azurill.aif and b/sound/direct_sound_samples/cries/azurill.aif differ diff --git a/sound/direct_sound_samples/cries/bagon.aif b/sound/direct_sound_samples/cries/bagon.aif index 76ec8243ad..f7c5c3b59e 100644 Binary files a/sound/direct_sound_samples/cries/bagon.aif and b/sound/direct_sound_samples/cries/bagon.aif differ diff --git a/sound/direct_sound_samples/cries/baltoy.aif b/sound/direct_sound_samples/cries/baltoy.aif index 9c9771924d..7900eb1d64 100644 Binary files a/sound/direct_sound_samples/cries/baltoy.aif and b/sound/direct_sound_samples/cries/baltoy.aif differ diff --git a/sound/direct_sound_samples/cries/banette.aif b/sound/direct_sound_samples/cries/banette.aif index e00d6a0ac6..587b307e27 100644 Binary files a/sound/direct_sound_samples/cries/banette.aif and b/sound/direct_sound_samples/cries/banette.aif differ diff --git a/sound/direct_sound_samples/cries/barbaracle.aif b/sound/direct_sound_samples/cries/barbaracle.aif index 9effada123..3f724127bd 100644 Binary files a/sound/direct_sound_samples/cries/barbaracle.aif and b/sound/direct_sound_samples/cries/barbaracle.aif differ diff --git a/sound/direct_sound_samples/cries/barboach.aif b/sound/direct_sound_samples/cries/barboach.aif index 0f1a355bef..926e7fc050 100644 Binary files a/sound/direct_sound_samples/cries/barboach.aif and b/sound/direct_sound_samples/cries/barboach.aif differ diff --git a/sound/direct_sound_samples/cries/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif index 80551d7904..28a8349a51 100644 Binary files a/sound/direct_sound_samples/cries/basculegion.aif and b/sound/direct_sound_samples/cries/basculegion.aif differ diff --git a/sound/direct_sound_samples/cries/basculin.aif b/sound/direct_sound_samples/cries/basculin.aif index cb2184d82d..dfa6db25f1 100644 Binary files a/sound/direct_sound_samples/cries/basculin.aif and b/sound/direct_sound_samples/cries/basculin.aif differ diff --git a/sound/direct_sound_samples/cries/bastiodon.aif b/sound/direct_sound_samples/cries/bastiodon.aif index 9c87d2e589..5f5646f787 100644 Binary files a/sound/direct_sound_samples/cries/bastiodon.aif and b/sound/direct_sound_samples/cries/bastiodon.aif differ diff --git a/sound/direct_sound_samples/cries/bayleef.aif b/sound/direct_sound_samples/cries/bayleef.aif index b1ff0088de..1b38f322a9 100644 Binary files a/sound/direct_sound_samples/cries/bayleef.aif and b/sound/direct_sound_samples/cries/bayleef.aif differ diff --git a/sound/direct_sound_samples/cries/beartic.aif b/sound/direct_sound_samples/cries/beartic.aif index 45d1e8bc5e..1c7635357a 100644 Binary files a/sound/direct_sound_samples/cries/beartic.aif and b/sound/direct_sound_samples/cries/beartic.aif differ diff --git a/sound/direct_sound_samples/cries/beautifly.aif b/sound/direct_sound_samples/cries/beautifly.aif index be81439f16..5b31f73c31 100644 Binary files a/sound/direct_sound_samples/cries/beautifly.aif and b/sound/direct_sound_samples/cries/beautifly.aif differ diff --git a/sound/direct_sound_samples/cries/beedrill.aif b/sound/direct_sound_samples/cries/beedrill.aif index 0a31a19743..888e1e637d 100644 Binary files a/sound/direct_sound_samples/cries/beedrill.aif and b/sound/direct_sound_samples/cries/beedrill.aif differ diff --git a/sound/direct_sound_samples/cries/beedrill_mega.aif b/sound/direct_sound_samples/cries/beedrill_mega.aif index 8072fef185..cea7ca52d5 100644 Binary files a/sound/direct_sound_samples/cries/beedrill_mega.aif and b/sound/direct_sound_samples/cries/beedrill_mega.aif differ diff --git a/sound/direct_sound_samples/cries/beheeyem.aif b/sound/direct_sound_samples/cries/beheeyem.aif index 3ddec74ab6..fb7ce70677 100644 Binary files a/sound/direct_sound_samples/cries/beheeyem.aif and b/sound/direct_sound_samples/cries/beheeyem.aif differ diff --git a/sound/direct_sound_samples/cries/beldum.aif b/sound/direct_sound_samples/cries/beldum.aif index 7b7b10c2e0..626f94fc1c 100644 Binary files a/sound/direct_sound_samples/cries/beldum.aif and b/sound/direct_sound_samples/cries/beldum.aif differ diff --git a/sound/direct_sound_samples/cries/bellossom.aif b/sound/direct_sound_samples/cries/bellossom.aif index 06ba873742..ffe452fc5a 100644 Binary files a/sound/direct_sound_samples/cries/bellossom.aif and b/sound/direct_sound_samples/cries/bellossom.aif differ diff --git a/sound/direct_sound_samples/cries/bellsprout.aif b/sound/direct_sound_samples/cries/bellsprout.aif index b47ef6023f..40e12f8e8b 100644 Binary files a/sound/direct_sound_samples/cries/bellsprout.aif and b/sound/direct_sound_samples/cries/bellsprout.aif differ diff --git a/sound/direct_sound_samples/cries/bergmite.aif b/sound/direct_sound_samples/cries/bergmite.aif index 199ccc2fa0..9dbcb7dd08 100644 Binary files a/sound/direct_sound_samples/cries/bergmite.aif and b/sound/direct_sound_samples/cries/bergmite.aif differ diff --git a/sound/direct_sound_samples/cries/bewear.aif b/sound/direct_sound_samples/cries/bewear.aif index baada6e00d..00979e4542 100644 Binary files a/sound/direct_sound_samples/cries/bewear.aif and b/sound/direct_sound_samples/cries/bewear.aif differ diff --git a/sound/direct_sound_samples/cries/bibarel.aif b/sound/direct_sound_samples/cries/bibarel.aif index 2c7ea81bbb..64b3f5e0ec 100644 Binary files a/sound/direct_sound_samples/cries/bibarel.aif and b/sound/direct_sound_samples/cries/bibarel.aif differ diff --git a/sound/direct_sound_samples/cries/bidoof.aif b/sound/direct_sound_samples/cries/bidoof.aif index d61765511f..4da8f32ade 100644 Binary files a/sound/direct_sound_samples/cries/bidoof.aif and b/sound/direct_sound_samples/cries/bidoof.aif differ diff --git a/sound/direct_sound_samples/cries/binacle.aif b/sound/direct_sound_samples/cries/binacle.aif index 3694f34dde..168952c84b 100644 Binary files a/sound/direct_sound_samples/cries/binacle.aif and b/sound/direct_sound_samples/cries/binacle.aif differ diff --git a/sound/direct_sound_samples/cries/bisharp.aif b/sound/direct_sound_samples/cries/bisharp.aif index edbcc7b296..dd1d4c4229 100644 Binary files a/sound/direct_sound_samples/cries/bisharp.aif and b/sound/direct_sound_samples/cries/bisharp.aif differ diff --git a/sound/direct_sound_samples/cries/blacephalon.aif b/sound/direct_sound_samples/cries/blacephalon.aif index 9cacb4f71e..f1308e1344 100644 Binary files a/sound/direct_sound_samples/cries/blacephalon.aif and b/sound/direct_sound_samples/cries/blacephalon.aif differ diff --git a/sound/direct_sound_samples/cries/blastoise.aif b/sound/direct_sound_samples/cries/blastoise.aif index ed03bd447c..c3ae9294f2 100644 Binary files a/sound/direct_sound_samples/cries/blastoise.aif and b/sound/direct_sound_samples/cries/blastoise.aif differ diff --git a/sound/direct_sound_samples/cries/blaziken.aif b/sound/direct_sound_samples/cries/blaziken.aif index b316a85658..fa8a46ba9c 100644 Binary files a/sound/direct_sound_samples/cries/blaziken.aif and b/sound/direct_sound_samples/cries/blaziken.aif differ diff --git a/sound/direct_sound_samples/cries/blissey.aif b/sound/direct_sound_samples/cries/blissey.aif index 58d3b926c9..6cb483ae72 100644 Binary files a/sound/direct_sound_samples/cries/blissey.aif and b/sound/direct_sound_samples/cries/blissey.aif differ diff --git a/sound/direct_sound_samples/cries/blitzle.aif b/sound/direct_sound_samples/cries/blitzle.aif index 40e4672af7..d730da670f 100644 Binary files a/sound/direct_sound_samples/cries/blitzle.aif and b/sound/direct_sound_samples/cries/blitzle.aif differ diff --git a/sound/direct_sound_samples/cries/boldore.aif b/sound/direct_sound_samples/cries/boldore.aif index 436cb1219f..9dbee00115 100644 Binary files a/sound/direct_sound_samples/cries/boldore.aif and b/sound/direct_sound_samples/cries/boldore.aif differ diff --git a/sound/direct_sound_samples/cries/bonsly.aif b/sound/direct_sound_samples/cries/bonsly.aif index 251865909c..15bd56f232 100644 Binary files a/sound/direct_sound_samples/cries/bonsly.aif and b/sound/direct_sound_samples/cries/bonsly.aif differ diff --git a/sound/direct_sound_samples/cries/bouffalant.aif b/sound/direct_sound_samples/cries/bouffalant.aif index fbca85e639..e9502a94b6 100644 Binary files a/sound/direct_sound_samples/cries/bouffalant.aif and b/sound/direct_sound_samples/cries/bouffalant.aif differ diff --git a/sound/direct_sound_samples/cries/bounsweet.aif b/sound/direct_sound_samples/cries/bounsweet.aif index 3054997d7f..b1d21fb390 100644 Binary files a/sound/direct_sound_samples/cries/bounsweet.aif and b/sound/direct_sound_samples/cries/bounsweet.aif differ diff --git a/sound/direct_sound_samples/cries/braixen.aif b/sound/direct_sound_samples/cries/braixen.aif index bf1cae32f1..d5d9e800b0 100644 Binary files a/sound/direct_sound_samples/cries/braixen.aif and b/sound/direct_sound_samples/cries/braixen.aif differ diff --git a/sound/direct_sound_samples/cries/bramblin.aif b/sound/direct_sound_samples/cries/bramblin.aif index 0c8a4a5dab..b55e43fe77 100644 Binary files a/sound/direct_sound_samples/cries/bramblin.aif and b/sound/direct_sound_samples/cries/bramblin.aif differ diff --git a/sound/direct_sound_samples/cries/braviary.aif b/sound/direct_sound_samples/cries/braviary.aif index 8c20dd2b73..0cf3fc403e 100644 Binary files a/sound/direct_sound_samples/cries/braviary.aif and b/sound/direct_sound_samples/cries/braviary.aif differ diff --git a/sound/direct_sound_samples/cries/breloom.aif b/sound/direct_sound_samples/cries/breloom.aif index 2f549c4e6c..aa6e22f1b9 100644 Binary files a/sound/direct_sound_samples/cries/breloom.aif and b/sound/direct_sound_samples/cries/breloom.aif differ diff --git a/sound/direct_sound_samples/cries/brionne.aif b/sound/direct_sound_samples/cries/brionne.aif index 76e37dddfc..ac026ada88 100644 Binary files a/sound/direct_sound_samples/cries/brionne.aif and b/sound/direct_sound_samples/cries/brionne.aif differ diff --git a/sound/direct_sound_samples/cries/bronzong.aif b/sound/direct_sound_samples/cries/bronzong.aif index 16e171e4f8..628ec30895 100644 Binary files a/sound/direct_sound_samples/cries/bronzong.aif and b/sound/direct_sound_samples/cries/bronzong.aif differ diff --git a/sound/direct_sound_samples/cries/bronzor.aif b/sound/direct_sound_samples/cries/bronzor.aif index f9007186b0..857bef1056 100644 Binary files a/sound/direct_sound_samples/cries/bronzor.aif and b/sound/direct_sound_samples/cries/bronzor.aif differ diff --git a/sound/direct_sound_samples/cries/bruxish.aif b/sound/direct_sound_samples/cries/bruxish.aif index 30a281d4cc..f725043bc7 100644 Binary files a/sound/direct_sound_samples/cries/bruxish.aif and b/sound/direct_sound_samples/cries/bruxish.aif differ diff --git a/sound/direct_sound_samples/cries/budew.aif b/sound/direct_sound_samples/cries/budew.aif index 82e036502d..bebc52a8df 100644 Binary files a/sound/direct_sound_samples/cries/budew.aif and b/sound/direct_sound_samples/cries/budew.aif differ diff --git a/sound/direct_sound_samples/cries/buizel.aif b/sound/direct_sound_samples/cries/buizel.aif index 910a6b1455..b138be7a4f 100644 Binary files a/sound/direct_sound_samples/cries/buizel.aif and b/sound/direct_sound_samples/cries/buizel.aif differ diff --git a/sound/direct_sound_samples/cries/bulbasaur.aif b/sound/direct_sound_samples/cries/bulbasaur.aif index bc49f1617d..cff5d718b3 100644 Binary files a/sound/direct_sound_samples/cries/bulbasaur.aif and b/sound/direct_sound_samples/cries/bulbasaur.aif differ diff --git a/sound/direct_sound_samples/cries/buneary.aif b/sound/direct_sound_samples/cries/buneary.aif index 5ce2929676..f02bf1b465 100644 Binary files a/sound/direct_sound_samples/cries/buneary.aif and b/sound/direct_sound_samples/cries/buneary.aif differ diff --git a/sound/direct_sound_samples/cries/bunnelby.aif b/sound/direct_sound_samples/cries/bunnelby.aif index 22001a64e7..7588776e93 100644 Binary files a/sound/direct_sound_samples/cries/bunnelby.aif and b/sound/direct_sound_samples/cries/bunnelby.aif differ diff --git a/sound/direct_sound_samples/cries/burmy.aif b/sound/direct_sound_samples/cries/burmy.aif index ea15d0c71a..80478166f5 100644 Binary files a/sound/direct_sound_samples/cries/burmy.aif and b/sound/direct_sound_samples/cries/burmy.aif differ diff --git a/sound/direct_sound_samples/cries/butterfree.aif b/sound/direct_sound_samples/cries/butterfree.aif index 1ce2383467..e59865ae5a 100644 Binary files a/sound/direct_sound_samples/cries/butterfree.aif and b/sound/direct_sound_samples/cries/butterfree.aif differ diff --git a/sound/direct_sound_samples/cries/buzzwole.aif b/sound/direct_sound_samples/cries/buzzwole.aif index 239b8fa0f2..242edabdce 100644 Binary files a/sound/direct_sound_samples/cries/buzzwole.aif and b/sound/direct_sound_samples/cries/buzzwole.aif differ diff --git a/sound/direct_sound_samples/cries/cacnea.aif b/sound/direct_sound_samples/cries/cacnea.aif index ece82d34c0..4d1771b18d 100644 Binary files a/sound/direct_sound_samples/cries/cacnea.aif and b/sound/direct_sound_samples/cries/cacnea.aif differ diff --git a/sound/direct_sound_samples/cries/cacturne.aif b/sound/direct_sound_samples/cries/cacturne.aif index 76e8f3aa96..d81f86d9fc 100644 Binary files a/sound/direct_sound_samples/cries/cacturne.aif and b/sound/direct_sound_samples/cries/cacturne.aif differ diff --git a/sound/direct_sound_samples/cries/calyrex.aif b/sound/direct_sound_samples/cries/calyrex.aif index 895f37d41e..59c41a4fdb 100644 Binary files a/sound/direct_sound_samples/cries/calyrex.aif and b/sound/direct_sound_samples/cries/calyrex.aif differ diff --git a/sound/direct_sound_samples/cries/calyrex_ice_rider.aif b/sound/direct_sound_samples/cries/calyrex_ice_rider.aif index 2a27827908..a6be291e1d 100644 Binary files a/sound/direct_sound_samples/cries/calyrex_ice_rider.aif and b/sound/direct_sound_samples/cries/calyrex_ice_rider.aif differ diff --git a/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif b/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif index 07cc384332..2d3c43d978 100644 Binary files a/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif and b/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif differ diff --git a/sound/direct_sound_samples/cries/camerupt.aif b/sound/direct_sound_samples/cries/camerupt.aif index f47ce498e5..82a7f237cf 100644 Binary files a/sound/direct_sound_samples/cries/camerupt.aif and b/sound/direct_sound_samples/cries/camerupt.aif differ diff --git a/sound/direct_sound_samples/cries/capsakid.aif b/sound/direct_sound_samples/cries/capsakid.aif index 7a906ead56..a93a531cdb 100644 Binary files a/sound/direct_sound_samples/cries/capsakid.aif and b/sound/direct_sound_samples/cries/capsakid.aif differ diff --git a/sound/direct_sound_samples/cries/carbink.aif b/sound/direct_sound_samples/cries/carbink.aif index 79a934fcdc..dfdc907bd7 100644 Binary files a/sound/direct_sound_samples/cries/carbink.aif and b/sound/direct_sound_samples/cries/carbink.aif differ diff --git a/sound/direct_sound_samples/cries/carnivine.aif b/sound/direct_sound_samples/cries/carnivine.aif index edc8bb049f..491e846a1a 100644 Binary files a/sound/direct_sound_samples/cries/carnivine.aif and b/sound/direct_sound_samples/cries/carnivine.aif differ diff --git a/sound/direct_sound_samples/cries/carracosta.aif b/sound/direct_sound_samples/cries/carracosta.aif index dc379b5fab..f75692c3a1 100644 Binary files a/sound/direct_sound_samples/cries/carracosta.aif and b/sound/direct_sound_samples/cries/carracosta.aif differ diff --git a/sound/direct_sound_samples/cries/carvanha.aif b/sound/direct_sound_samples/cries/carvanha.aif index 8ae11271db..2c0a6a5d8c 100644 Binary files a/sound/direct_sound_samples/cries/carvanha.aif and b/sound/direct_sound_samples/cries/carvanha.aif differ diff --git a/sound/direct_sound_samples/cries/cascoon.aif b/sound/direct_sound_samples/cries/cascoon.aif index 3390ff0dbf..a256131caf 100644 Binary files a/sound/direct_sound_samples/cries/cascoon.aif and b/sound/direct_sound_samples/cries/cascoon.aif differ diff --git a/sound/direct_sound_samples/cries/castform.aif b/sound/direct_sound_samples/cries/castform.aif index 23c0c39b5d..4fce6e5075 100644 Binary files a/sound/direct_sound_samples/cries/castform.aif and b/sound/direct_sound_samples/cries/castform.aif differ diff --git a/sound/direct_sound_samples/cries/caterpie.aif b/sound/direct_sound_samples/cries/caterpie.aif index c3b599d7d4..4ce12c5fb7 100644 Binary files a/sound/direct_sound_samples/cries/caterpie.aif and b/sound/direct_sound_samples/cries/caterpie.aif differ diff --git a/sound/direct_sound_samples/cries/celebi.aif b/sound/direct_sound_samples/cries/celebi.aif index 068046dbe1..df1c4cd195 100644 Binary files a/sound/direct_sound_samples/cries/celebi.aif and b/sound/direct_sound_samples/cries/celebi.aif differ diff --git a/sound/direct_sound_samples/cries/celesteela.aif b/sound/direct_sound_samples/cries/celesteela.aif index f09fe03c30..acab333235 100644 Binary files a/sound/direct_sound_samples/cries/celesteela.aif and b/sound/direct_sound_samples/cries/celesteela.aif differ diff --git a/sound/direct_sound_samples/cries/ceruledge.aif b/sound/direct_sound_samples/cries/ceruledge.aif index 86048249dd..de4b1bb7c8 100644 Binary files a/sound/direct_sound_samples/cries/ceruledge.aif and b/sound/direct_sound_samples/cries/ceruledge.aif differ diff --git a/sound/direct_sound_samples/cries/chandelure.aif b/sound/direct_sound_samples/cries/chandelure.aif index de25ee852e..29cd52e1c1 100644 Binary files a/sound/direct_sound_samples/cries/chandelure.aif and b/sound/direct_sound_samples/cries/chandelure.aif differ diff --git a/sound/direct_sound_samples/cries/chansey.aif b/sound/direct_sound_samples/cries/chansey.aif index b641fd3a94..b6a8a29020 100644 Binary files a/sound/direct_sound_samples/cries/chansey.aif and b/sound/direct_sound_samples/cries/chansey.aif differ diff --git a/sound/direct_sound_samples/cries/charizard.aif b/sound/direct_sound_samples/cries/charizard.aif index 36e10511a2..cc5f2bdd33 100644 Binary files a/sound/direct_sound_samples/cries/charizard.aif and b/sound/direct_sound_samples/cries/charizard.aif differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_x.aif b/sound/direct_sound_samples/cries/charizard_mega_x.aif index 5f88d12355..f9c0f76597 100644 Binary files a/sound/direct_sound_samples/cries/charizard_mega_x.aif and b/sound/direct_sound_samples/cries/charizard_mega_x.aif differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_y.aif b/sound/direct_sound_samples/cries/charizard_mega_y.aif index e04d518ee1..2cf5b3ea7f 100644 Binary files a/sound/direct_sound_samples/cries/charizard_mega_y.aif and b/sound/direct_sound_samples/cries/charizard_mega_y.aif differ diff --git a/sound/direct_sound_samples/cries/charjabug.aif b/sound/direct_sound_samples/cries/charjabug.aif index 6bf60778c4..ed5bd7d88b 100644 Binary files a/sound/direct_sound_samples/cries/charjabug.aif and b/sound/direct_sound_samples/cries/charjabug.aif differ diff --git a/sound/direct_sound_samples/cries/charmander.aif b/sound/direct_sound_samples/cries/charmander.aif index 3c96777b6a..dda65af549 100644 Binary files a/sound/direct_sound_samples/cries/charmander.aif and b/sound/direct_sound_samples/cries/charmander.aif differ diff --git a/sound/direct_sound_samples/cries/charmeleon.aif b/sound/direct_sound_samples/cries/charmeleon.aif index 0cf2f47a1b..9a9a14e3bb 100644 Binary files a/sound/direct_sound_samples/cries/charmeleon.aif and b/sound/direct_sound_samples/cries/charmeleon.aif differ diff --git a/sound/direct_sound_samples/cries/chatot.aif b/sound/direct_sound_samples/cries/chatot.aif index 6dc58e519c..62a961a82f 100644 Binary files a/sound/direct_sound_samples/cries/chatot.aif and b/sound/direct_sound_samples/cries/chatot.aif differ diff --git a/sound/direct_sound_samples/cries/cherrim.aif b/sound/direct_sound_samples/cries/cherrim.aif index fee1212784..d70cf77b02 100644 Binary files a/sound/direct_sound_samples/cries/cherrim.aif and b/sound/direct_sound_samples/cries/cherrim.aif differ diff --git a/sound/direct_sound_samples/cries/cherubi.aif b/sound/direct_sound_samples/cries/cherubi.aif index 02fd6d6dd0..703c1d5f8b 100644 Binary files a/sound/direct_sound_samples/cries/cherubi.aif and b/sound/direct_sound_samples/cries/cherubi.aif differ diff --git a/sound/direct_sound_samples/cries/chesnaught.aif b/sound/direct_sound_samples/cries/chesnaught.aif index aea55fe692..80cff83698 100644 Binary files a/sound/direct_sound_samples/cries/chesnaught.aif and b/sound/direct_sound_samples/cries/chesnaught.aif differ diff --git a/sound/direct_sound_samples/cries/chespin.aif b/sound/direct_sound_samples/cries/chespin.aif index 2ee520a0e7..48136a98a0 100644 Binary files a/sound/direct_sound_samples/cries/chespin.aif and b/sound/direct_sound_samples/cries/chespin.aif differ diff --git a/sound/direct_sound_samples/cries/chi_yu.aif b/sound/direct_sound_samples/cries/chi_yu.aif index 55ca0598b7..60131a9e46 100644 Binary files a/sound/direct_sound_samples/cries/chi_yu.aif and b/sound/direct_sound_samples/cries/chi_yu.aif differ diff --git a/sound/direct_sound_samples/cries/chien_pao.aif b/sound/direct_sound_samples/cries/chien_pao.aif index 1e3d573881..c598dac8d2 100644 Binary files a/sound/direct_sound_samples/cries/chien_pao.aif and b/sound/direct_sound_samples/cries/chien_pao.aif differ diff --git a/sound/direct_sound_samples/cries/chikorita.aif b/sound/direct_sound_samples/cries/chikorita.aif index b5ccaf7cbf..63d5c95033 100644 Binary files a/sound/direct_sound_samples/cries/chikorita.aif and b/sound/direct_sound_samples/cries/chikorita.aif differ diff --git a/sound/direct_sound_samples/cries/chimchar.aif b/sound/direct_sound_samples/cries/chimchar.aif index 95c90b6331..06514a4d90 100644 Binary files a/sound/direct_sound_samples/cries/chimchar.aif and b/sound/direct_sound_samples/cries/chimchar.aif differ diff --git a/sound/direct_sound_samples/cries/chimecho.aif b/sound/direct_sound_samples/cries/chimecho.aif index b7aacc8bf3..7b2b45fac2 100644 Binary files a/sound/direct_sound_samples/cries/chimecho.aif and b/sound/direct_sound_samples/cries/chimecho.aif differ diff --git a/sound/direct_sound_samples/cries/chinchou.aif b/sound/direct_sound_samples/cries/chinchou.aif index 889cea6c22..846df5079c 100644 Binary files a/sound/direct_sound_samples/cries/chinchou.aif and b/sound/direct_sound_samples/cries/chinchou.aif differ diff --git a/sound/direct_sound_samples/cries/chingling.aif b/sound/direct_sound_samples/cries/chingling.aif index 8154abc5ca..dd3b00915b 100644 Binary files a/sound/direct_sound_samples/cries/chingling.aif and b/sound/direct_sound_samples/cries/chingling.aif differ diff --git a/sound/direct_sound_samples/cries/cinccino.aif b/sound/direct_sound_samples/cries/cinccino.aif index b4df2ea076..6205aaf2b0 100644 Binary files a/sound/direct_sound_samples/cries/cinccino.aif and b/sound/direct_sound_samples/cries/cinccino.aif differ diff --git a/sound/direct_sound_samples/cries/clamperl.aif b/sound/direct_sound_samples/cries/clamperl.aif index 9046fa0c2c..186a1f9b40 100644 Binary files a/sound/direct_sound_samples/cries/clamperl.aif and b/sound/direct_sound_samples/cries/clamperl.aif differ diff --git a/sound/direct_sound_samples/cries/clauncher.aif b/sound/direct_sound_samples/cries/clauncher.aif index b05ec5db78..ab9cbf9ce1 100644 Binary files a/sound/direct_sound_samples/cries/clauncher.aif and b/sound/direct_sound_samples/cries/clauncher.aif differ diff --git a/sound/direct_sound_samples/cries/clawitzer.aif b/sound/direct_sound_samples/cries/clawitzer.aif index f6c209edd1..bd14270c38 100644 Binary files a/sound/direct_sound_samples/cries/clawitzer.aif and b/sound/direct_sound_samples/cries/clawitzer.aif differ diff --git a/sound/direct_sound_samples/cries/claydol.aif b/sound/direct_sound_samples/cries/claydol.aif index 07cac57a76..9da5f5bbb7 100644 Binary files a/sound/direct_sound_samples/cries/claydol.aif and b/sound/direct_sound_samples/cries/claydol.aif differ diff --git a/sound/direct_sound_samples/cries/clefable.aif b/sound/direct_sound_samples/cries/clefable.aif index 8ebb7f3400..e04bf536ad 100644 Binary files a/sound/direct_sound_samples/cries/clefable.aif and b/sound/direct_sound_samples/cries/clefable.aif differ diff --git a/sound/direct_sound_samples/cries/clefairy.aif b/sound/direct_sound_samples/cries/clefairy.aif index eff944e76b..b38fa6e9d7 100644 Binary files a/sound/direct_sound_samples/cries/clefairy.aif and b/sound/direct_sound_samples/cries/clefairy.aif differ diff --git a/sound/direct_sound_samples/cries/cleffa.aif b/sound/direct_sound_samples/cries/cleffa.aif index c060d6bc16..e3243d0998 100644 Binary files a/sound/direct_sound_samples/cries/cleffa.aif and b/sound/direct_sound_samples/cries/cleffa.aif differ diff --git a/sound/direct_sound_samples/cries/clobbopus.aif b/sound/direct_sound_samples/cries/clobbopus.aif index 886a5208be..ebce642966 100644 Binary files a/sound/direct_sound_samples/cries/clobbopus.aif and b/sound/direct_sound_samples/cries/clobbopus.aif differ diff --git a/sound/direct_sound_samples/cries/clodsire.aif b/sound/direct_sound_samples/cries/clodsire.aif index bdbadd64fb..17aea97e46 100644 Binary files a/sound/direct_sound_samples/cries/clodsire.aif and b/sound/direct_sound_samples/cries/clodsire.aif differ diff --git a/sound/direct_sound_samples/cries/cloyster.aif b/sound/direct_sound_samples/cries/cloyster.aif index d93f93d8be..b69d0478bf 100644 Binary files a/sound/direct_sound_samples/cries/cloyster.aif and b/sound/direct_sound_samples/cries/cloyster.aif differ diff --git a/sound/direct_sound_samples/cries/cobalion.aif b/sound/direct_sound_samples/cries/cobalion.aif index e53ea9b030..4a21505b5b 100644 Binary files a/sound/direct_sound_samples/cries/cobalion.aif and b/sound/direct_sound_samples/cries/cobalion.aif differ diff --git a/sound/direct_sound_samples/cries/cofagrigus.aif b/sound/direct_sound_samples/cries/cofagrigus.aif index 5c5c426e37..6fbf1c16f8 100644 Binary files a/sound/direct_sound_samples/cries/cofagrigus.aif and b/sound/direct_sound_samples/cries/cofagrigus.aif differ diff --git a/sound/direct_sound_samples/cries/combee.aif b/sound/direct_sound_samples/cries/combee.aif index d07abbb15c..6aaedb642d 100644 Binary files a/sound/direct_sound_samples/cries/combee.aif and b/sound/direct_sound_samples/cries/combee.aif differ diff --git a/sound/direct_sound_samples/cries/combusken.aif b/sound/direct_sound_samples/cries/combusken.aif index 2f53b8f838..58707c30b8 100644 Binary files a/sound/direct_sound_samples/cries/combusken.aif and b/sound/direct_sound_samples/cries/combusken.aif differ diff --git a/sound/direct_sound_samples/cries/comfey.aif b/sound/direct_sound_samples/cries/comfey.aif index 8b07ec9891..cb91d0cbd7 100644 Binary files a/sound/direct_sound_samples/cries/comfey.aif and b/sound/direct_sound_samples/cries/comfey.aif differ diff --git a/sound/direct_sound_samples/cries/conkeldurr.aif b/sound/direct_sound_samples/cries/conkeldurr.aif index 96e991d493..09885ab2ef 100644 Binary files a/sound/direct_sound_samples/cries/conkeldurr.aif and b/sound/direct_sound_samples/cries/conkeldurr.aif differ diff --git a/sound/direct_sound_samples/cries/corphish.aif b/sound/direct_sound_samples/cries/corphish.aif index 2605e1fd26..9bc708e2fb 100644 Binary files a/sound/direct_sound_samples/cries/corphish.aif and b/sound/direct_sound_samples/cries/corphish.aif differ diff --git a/sound/direct_sound_samples/cries/corsola.aif b/sound/direct_sound_samples/cries/corsola.aif index 6eae55ea72..087308d8fd 100644 Binary files a/sound/direct_sound_samples/cries/corsola.aif and b/sound/direct_sound_samples/cries/corsola.aif differ diff --git a/sound/direct_sound_samples/cries/corvisquire.aif b/sound/direct_sound_samples/cries/corvisquire.aif index 3c786aca4c..a18e64c9c0 100644 Binary files a/sound/direct_sound_samples/cries/corvisquire.aif and b/sound/direct_sound_samples/cries/corvisquire.aif differ diff --git a/sound/direct_sound_samples/cries/cosmoem.aif b/sound/direct_sound_samples/cries/cosmoem.aif index bd081f7c34..f2c8c0e2b4 100644 Binary files a/sound/direct_sound_samples/cries/cosmoem.aif and b/sound/direct_sound_samples/cries/cosmoem.aif differ diff --git a/sound/direct_sound_samples/cries/cosmog.aif b/sound/direct_sound_samples/cries/cosmog.aif index 729d5e790a..deeb60b94d 100644 Binary files a/sound/direct_sound_samples/cries/cosmog.aif and b/sound/direct_sound_samples/cries/cosmog.aif differ diff --git a/sound/direct_sound_samples/cries/cottonee.aif b/sound/direct_sound_samples/cries/cottonee.aif index a459a62f72..207ac9d12d 100644 Binary files a/sound/direct_sound_samples/cries/cottonee.aif and b/sound/direct_sound_samples/cries/cottonee.aif differ diff --git a/sound/direct_sound_samples/cries/crabominable.aif b/sound/direct_sound_samples/cries/crabominable.aif index e83c4e1d5f..1d6b3d4caf 100644 Binary files a/sound/direct_sound_samples/cries/crabominable.aif and b/sound/direct_sound_samples/cries/crabominable.aif differ diff --git a/sound/direct_sound_samples/cries/crabrawler.aif b/sound/direct_sound_samples/cries/crabrawler.aif index c5014e239d..8c42fb18e5 100644 Binary files a/sound/direct_sound_samples/cries/crabrawler.aif and b/sound/direct_sound_samples/cries/crabrawler.aif differ diff --git a/sound/direct_sound_samples/cries/cradily.aif b/sound/direct_sound_samples/cries/cradily.aif index 695f4c36fe..3fa5e006f9 100644 Binary files a/sound/direct_sound_samples/cries/cradily.aif and b/sound/direct_sound_samples/cries/cradily.aif differ diff --git a/sound/direct_sound_samples/cries/cranidos.aif b/sound/direct_sound_samples/cries/cranidos.aif index 4e0c32b7ad..dc67035a76 100644 Binary files a/sound/direct_sound_samples/cries/cranidos.aif and b/sound/direct_sound_samples/cries/cranidos.aif differ diff --git a/sound/direct_sound_samples/cries/crawdaunt.aif b/sound/direct_sound_samples/cries/crawdaunt.aif index 091e34fbd5..7f8ee48beb 100644 Binary files a/sound/direct_sound_samples/cries/crawdaunt.aif and b/sound/direct_sound_samples/cries/crawdaunt.aif differ diff --git a/sound/direct_sound_samples/cries/cresselia.aif b/sound/direct_sound_samples/cries/cresselia.aif index e7f25b717d..5edd1b0194 100644 Binary files a/sound/direct_sound_samples/cries/cresselia.aif and b/sound/direct_sound_samples/cries/cresselia.aif differ diff --git a/sound/direct_sound_samples/cries/croagunk.aif b/sound/direct_sound_samples/cries/croagunk.aif index 6ebc6cc8b1..c5d42a42bf 100644 Binary files a/sound/direct_sound_samples/cries/croagunk.aif and b/sound/direct_sound_samples/cries/croagunk.aif differ diff --git a/sound/direct_sound_samples/cries/crobat.aif b/sound/direct_sound_samples/cries/crobat.aif index f3f458171c..956be378c7 100644 Binary files a/sound/direct_sound_samples/cries/crobat.aif and b/sound/direct_sound_samples/cries/crobat.aif differ diff --git a/sound/direct_sound_samples/cries/crocalor.aif b/sound/direct_sound_samples/cries/crocalor.aif index 897aaa860d..9a622026df 100644 Binary files a/sound/direct_sound_samples/cries/crocalor.aif and b/sound/direct_sound_samples/cries/crocalor.aif differ diff --git a/sound/direct_sound_samples/cries/croconaw.aif b/sound/direct_sound_samples/cries/croconaw.aif index 791eb366de..b72db75f3f 100644 Binary files a/sound/direct_sound_samples/cries/croconaw.aif and b/sound/direct_sound_samples/cries/croconaw.aif differ diff --git a/sound/direct_sound_samples/cries/crustle.aif b/sound/direct_sound_samples/cries/crustle.aif index 92cc8ec07b..62014a79c8 100644 Binary files a/sound/direct_sound_samples/cries/crustle.aif and b/sound/direct_sound_samples/cries/crustle.aif differ diff --git a/sound/direct_sound_samples/cries/cryogonal.aif b/sound/direct_sound_samples/cries/cryogonal.aif index 1f8255f7a0..b2f551274e 100644 Binary files a/sound/direct_sound_samples/cries/cryogonal.aif and b/sound/direct_sound_samples/cries/cryogonal.aif differ diff --git a/sound/direct_sound_samples/cries/cubchoo.aif b/sound/direct_sound_samples/cries/cubchoo.aif index a4c7f2cf8e..e10ca5a0cc 100644 Binary files a/sound/direct_sound_samples/cries/cubchoo.aif and b/sound/direct_sound_samples/cries/cubchoo.aif differ diff --git a/sound/direct_sound_samples/cries/cubone.aif b/sound/direct_sound_samples/cries/cubone.aif index 2c00dd2ea5..1ebc283ef8 100644 Binary files a/sound/direct_sound_samples/cries/cubone.aif and b/sound/direct_sound_samples/cries/cubone.aif differ diff --git a/sound/direct_sound_samples/cries/cutiefly.aif b/sound/direct_sound_samples/cries/cutiefly.aif index f113d98a19..61535bbdd8 100644 Binary files a/sound/direct_sound_samples/cries/cutiefly.aif and b/sound/direct_sound_samples/cries/cutiefly.aif differ diff --git a/sound/direct_sound_samples/cries/cyclizar.aif b/sound/direct_sound_samples/cries/cyclizar.aif index 1d145154ec..eb32c91d59 100644 Binary files a/sound/direct_sound_samples/cries/cyclizar.aif and b/sound/direct_sound_samples/cries/cyclizar.aif differ diff --git a/sound/direct_sound_samples/cries/cyndaquil.aif b/sound/direct_sound_samples/cries/cyndaquil.aif index 4f0b5481f1..287c6496ad 100644 Binary files a/sound/direct_sound_samples/cries/cyndaquil.aif and b/sound/direct_sound_samples/cries/cyndaquil.aif differ diff --git a/sound/direct_sound_samples/cries/dachsbun.aif b/sound/direct_sound_samples/cries/dachsbun.aif index 492020a716..8e3ddbd781 100644 Binary files a/sound/direct_sound_samples/cries/dachsbun.aif and b/sound/direct_sound_samples/cries/dachsbun.aif differ diff --git a/sound/direct_sound_samples/cries/darkrai.aif b/sound/direct_sound_samples/cries/darkrai.aif index db14a0ad75..bfb37fca5b 100644 Binary files a/sound/direct_sound_samples/cries/darkrai.aif and b/sound/direct_sound_samples/cries/darkrai.aif differ diff --git a/sound/direct_sound_samples/cries/darmanitan.aif b/sound/direct_sound_samples/cries/darmanitan.aif index 9ea80bd5df..902fdb69b4 100644 Binary files a/sound/direct_sound_samples/cries/darmanitan.aif and b/sound/direct_sound_samples/cries/darmanitan.aif differ diff --git a/sound/direct_sound_samples/cries/dartrix.aif b/sound/direct_sound_samples/cries/dartrix.aif index 2a8e24d878..894fefb331 100644 Binary files a/sound/direct_sound_samples/cries/dartrix.aif and b/sound/direct_sound_samples/cries/dartrix.aif differ diff --git a/sound/direct_sound_samples/cries/darumaka.aif b/sound/direct_sound_samples/cries/darumaka.aif index 9c58dda411..849f0f1dab 100644 Binary files a/sound/direct_sound_samples/cries/darumaka.aif and b/sound/direct_sound_samples/cries/darumaka.aif differ diff --git a/sound/direct_sound_samples/cries/decidueye.aif b/sound/direct_sound_samples/cries/decidueye.aif index 13af14497e..dde3a574a9 100644 Binary files a/sound/direct_sound_samples/cries/decidueye.aif and b/sound/direct_sound_samples/cries/decidueye.aif differ diff --git a/sound/direct_sound_samples/cries/dedenne.aif b/sound/direct_sound_samples/cries/dedenne.aif index 8e5ec29bec..843f5cf38f 100644 Binary files a/sound/direct_sound_samples/cries/dedenne.aif and b/sound/direct_sound_samples/cries/dedenne.aif differ diff --git a/sound/direct_sound_samples/cries/deerling.aif b/sound/direct_sound_samples/cries/deerling.aif index 50cf0bfc50..9a4e8809b9 100644 Binary files a/sound/direct_sound_samples/cries/deerling.aif and b/sound/direct_sound_samples/cries/deerling.aif differ diff --git a/sound/direct_sound_samples/cries/deino.aif b/sound/direct_sound_samples/cries/deino.aif index 583747a615..e5074d0821 100644 Binary files a/sound/direct_sound_samples/cries/deino.aif and b/sound/direct_sound_samples/cries/deino.aif differ diff --git a/sound/direct_sound_samples/cries/delcatty.aif b/sound/direct_sound_samples/cries/delcatty.aif index a30321a9fc..d4fe6c5c59 100644 Binary files a/sound/direct_sound_samples/cries/delcatty.aif and b/sound/direct_sound_samples/cries/delcatty.aif differ diff --git a/sound/direct_sound_samples/cries/delibird.aif b/sound/direct_sound_samples/cries/delibird.aif index 618bca94b0..f2e0d44642 100644 Binary files a/sound/direct_sound_samples/cries/delibird.aif and b/sound/direct_sound_samples/cries/delibird.aif differ diff --git a/sound/direct_sound_samples/cries/delphox.aif b/sound/direct_sound_samples/cries/delphox.aif index 95fcf18110..857af9f0ad 100644 Binary files a/sound/direct_sound_samples/cries/delphox.aif and b/sound/direct_sound_samples/cries/delphox.aif differ diff --git a/sound/direct_sound_samples/cries/deoxys.aif b/sound/direct_sound_samples/cries/deoxys.aif index d39b565a0e..d9e3976e3c 100644 Binary files a/sound/direct_sound_samples/cries/deoxys.aif and b/sound/direct_sound_samples/cries/deoxys.aif differ diff --git a/sound/direct_sound_samples/cries/dewgong.aif b/sound/direct_sound_samples/cries/dewgong.aif index 52c8b6f9b3..daa3e5fd5c 100644 Binary files a/sound/direct_sound_samples/cries/dewgong.aif and b/sound/direct_sound_samples/cries/dewgong.aif differ diff --git a/sound/direct_sound_samples/cries/dewott.aif b/sound/direct_sound_samples/cries/dewott.aif index 3f7724df60..e654be2372 100644 Binary files a/sound/direct_sound_samples/cries/dewott.aif and b/sound/direct_sound_samples/cries/dewott.aif differ diff --git a/sound/direct_sound_samples/cries/dewpider.aif b/sound/direct_sound_samples/cries/dewpider.aif index ec3266ceba..0d8ade106b 100644 Binary files a/sound/direct_sound_samples/cries/dewpider.aif and b/sound/direct_sound_samples/cries/dewpider.aif differ diff --git a/sound/direct_sound_samples/cries/dhelmise.aif b/sound/direct_sound_samples/cries/dhelmise.aif index 09e0b93a66..892faf1909 100644 Binary files a/sound/direct_sound_samples/cries/dhelmise.aif and b/sound/direct_sound_samples/cries/dhelmise.aif differ diff --git a/sound/direct_sound_samples/cries/dialga.aif b/sound/direct_sound_samples/cries/dialga.aif index 3bc128ec2d..ead8acb9a1 100644 Binary files a/sound/direct_sound_samples/cries/dialga.aif and b/sound/direct_sound_samples/cries/dialga.aif differ diff --git a/sound/direct_sound_samples/cries/diancie.aif b/sound/direct_sound_samples/cries/diancie.aif index 4969546ae8..a32ad4ff93 100644 Binary files a/sound/direct_sound_samples/cries/diancie.aif and b/sound/direct_sound_samples/cries/diancie.aif differ diff --git a/sound/direct_sound_samples/cries/diggersby.aif b/sound/direct_sound_samples/cries/diggersby.aif index 411040e593..10dffad8ee 100644 Binary files a/sound/direct_sound_samples/cries/diggersby.aif and b/sound/direct_sound_samples/cries/diggersby.aif differ diff --git a/sound/direct_sound_samples/cries/diglett.aif b/sound/direct_sound_samples/cries/diglett.aif index dac924fb81..cd212878fd 100644 Binary files a/sound/direct_sound_samples/cries/diglett.aif and b/sound/direct_sound_samples/cries/diglett.aif differ diff --git a/sound/direct_sound_samples/cries/dipplin.aif b/sound/direct_sound_samples/cries/dipplin.aif index 61df2de523..5591528f9b 100644 Binary files a/sound/direct_sound_samples/cries/dipplin.aif and b/sound/direct_sound_samples/cries/dipplin.aif differ diff --git a/sound/direct_sound_samples/cries/ditto.aif b/sound/direct_sound_samples/cries/ditto.aif index b73fcb7643..8a1de24b25 100644 Binary files a/sound/direct_sound_samples/cries/ditto.aif and b/sound/direct_sound_samples/cries/ditto.aif differ diff --git a/sound/direct_sound_samples/cries/dodrio.aif b/sound/direct_sound_samples/cries/dodrio.aif index 222eb72521..507e4ef876 100644 Binary files a/sound/direct_sound_samples/cries/dodrio.aif and b/sound/direct_sound_samples/cries/dodrio.aif differ diff --git a/sound/direct_sound_samples/cries/doduo.aif b/sound/direct_sound_samples/cries/doduo.aif index 5a3a825279..02c736d5a0 100644 Binary files a/sound/direct_sound_samples/cries/doduo.aif and b/sound/direct_sound_samples/cries/doduo.aif differ diff --git a/sound/direct_sound_samples/cries/donphan.aif b/sound/direct_sound_samples/cries/donphan.aif index 76f1dfaca8..795cdaef45 100644 Binary files a/sound/direct_sound_samples/cries/donphan.aif and b/sound/direct_sound_samples/cries/donphan.aif differ diff --git a/sound/direct_sound_samples/cries/doublade.aif b/sound/direct_sound_samples/cries/doublade.aif index 70a0499e53..d931b3de0a 100644 Binary files a/sound/direct_sound_samples/cries/doublade.aif and b/sound/direct_sound_samples/cries/doublade.aif differ diff --git a/sound/direct_sound_samples/cries/dragalge.aif b/sound/direct_sound_samples/cries/dragalge.aif index be411ddb8e..a9d11e9b65 100644 Binary files a/sound/direct_sound_samples/cries/dragalge.aif and b/sound/direct_sound_samples/cries/dragalge.aif differ diff --git a/sound/direct_sound_samples/cries/dragonair.aif b/sound/direct_sound_samples/cries/dragonair.aif index 3e0f81d146..6cdc594f63 100644 Binary files a/sound/direct_sound_samples/cries/dragonair.aif and b/sound/direct_sound_samples/cries/dragonair.aif differ diff --git a/sound/direct_sound_samples/cries/dragonite.aif b/sound/direct_sound_samples/cries/dragonite.aif index 3719c99327..ab1a7af1c1 100644 Binary files a/sound/direct_sound_samples/cries/dragonite.aif and b/sound/direct_sound_samples/cries/dragonite.aif differ diff --git a/sound/direct_sound_samples/cries/drakloak.aif b/sound/direct_sound_samples/cries/drakloak.aif index 3b19d47687..7b9beaad89 100644 Binary files a/sound/direct_sound_samples/cries/drakloak.aif and b/sound/direct_sound_samples/cries/drakloak.aif differ diff --git a/sound/direct_sound_samples/cries/drampa.aif b/sound/direct_sound_samples/cries/drampa.aif index e8c6dfbdda..81e185711e 100644 Binary files a/sound/direct_sound_samples/cries/drampa.aif and b/sound/direct_sound_samples/cries/drampa.aif differ diff --git a/sound/direct_sound_samples/cries/drapion.aif b/sound/direct_sound_samples/cries/drapion.aif index a5418de2bd..4ce0382fdc 100644 Binary files a/sound/direct_sound_samples/cries/drapion.aif and b/sound/direct_sound_samples/cries/drapion.aif differ diff --git a/sound/direct_sound_samples/cries/dratini.aif b/sound/direct_sound_samples/cries/dratini.aif index 8de5583f0e..d79420d9c6 100644 Binary files a/sound/direct_sound_samples/cries/dratini.aif and b/sound/direct_sound_samples/cries/dratini.aif differ diff --git a/sound/direct_sound_samples/cries/dreepy.aif b/sound/direct_sound_samples/cries/dreepy.aif index b79126b119..12217a7f49 100644 Binary files a/sound/direct_sound_samples/cries/dreepy.aif and b/sound/direct_sound_samples/cries/dreepy.aif differ diff --git a/sound/direct_sound_samples/cries/drifblim.aif b/sound/direct_sound_samples/cries/drifblim.aif index a1afbdc71b..891c49f205 100644 Binary files a/sound/direct_sound_samples/cries/drifblim.aif and b/sound/direct_sound_samples/cries/drifblim.aif differ diff --git a/sound/direct_sound_samples/cries/drifloon.aif b/sound/direct_sound_samples/cries/drifloon.aif index bf5b8b20ef..ba4c94e979 100644 Binary files a/sound/direct_sound_samples/cries/drifloon.aif and b/sound/direct_sound_samples/cries/drifloon.aif differ diff --git a/sound/direct_sound_samples/cries/drilbur.aif b/sound/direct_sound_samples/cries/drilbur.aif index 25314b0aec..105867ee08 100644 Binary files a/sound/direct_sound_samples/cries/drilbur.aif and b/sound/direct_sound_samples/cries/drilbur.aif differ diff --git a/sound/direct_sound_samples/cries/drowzee.aif b/sound/direct_sound_samples/cries/drowzee.aif index 8b50dbd4a9..d25203e123 100644 Binary files a/sound/direct_sound_samples/cries/drowzee.aif and b/sound/direct_sound_samples/cries/drowzee.aif differ diff --git a/sound/direct_sound_samples/cries/druddigon.aif b/sound/direct_sound_samples/cries/druddigon.aif index 7467ee40b0..01bed53f92 100644 Binary files a/sound/direct_sound_samples/cries/druddigon.aif and b/sound/direct_sound_samples/cries/druddigon.aif differ diff --git a/sound/direct_sound_samples/cries/ducklett.aif b/sound/direct_sound_samples/cries/ducklett.aif index 837566a018..a95520506b 100644 Binary files a/sound/direct_sound_samples/cries/ducklett.aif and b/sound/direct_sound_samples/cries/ducklett.aif differ diff --git a/sound/direct_sound_samples/cries/dudunsparce.aif b/sound/direct_sound_samples/cries/dudunsparce.aif index 1adc2bb7c9..faec8aae53 100644 Binary files a/sound/direct_sound_samples/cries/dudunsparce.aif and b/sound/direct_sound_samples/cries/dudunsparce.aif differ diff --git a/sound/direct_sound_samples/cries/dugtrio.aif b/sound/direct_sound_samples/cries/dugtrio.aif index 875e4638e2..1a0a05ecd0 100644 Binary files a/sound/direct_sound_samples/cries/dugtrio.aif and b/sound/direct_sound_samples/cries/dugtrio.aif differ diff --git a/sound/direct_sound_samples/cries/dunsparce.aif b/sound/direct_sound_samples/cries/dunsparce.aif index b2e246eeef..da70bedf08 100644 Binary files a/sound/direct_sound_samples/cries/dunsparce.aif and b/sound/direct_sound_samples/cries/dunsparce.aif differ diff --git a/sound/direct_sound_samples/cries/duosion.aif b/sound/direct_sound_samples/cries/duosion.aif index 7f931b961c..4022984f1a 100644 Binary files a/sound/direct_sound_samples/cries/duosion.aif and b/sound/direct_sound_samples/cries/duosion.aif differ diff --git a/sound/direct_sound_samples/cries/durant.aif b/sound/direct_sound_samples/cries/durant.aif index c60490fd6b..c0b19642c1 100644 Binary files a/sound/direct_sound_samples/cries/durant.aif and b/sound/direct_sound_samples/cries/durant.aif differ diff --git a/sound/direct_sound_samples/cries/dusclops.aif b/sound/direct_sound_samples/cries/dusclops.aif index d25405b2bc..084c74ee87 100644 Binary files a/sound/direct_sound_samples/cries/dusclops.aif and b/sound/direct_sound_samples/cries/dusclops.aif differ diff --git a/sound/direct_sound_samples/cries/dusknoir.aif b/sound/direct_sound_samples/cries/dusknoir.aif index 7bbc50d162..bb1d605671 100644 Binary files a/sound/direct_sound_samples/cries/dusknoir.aif and b/sound/direct_sound_samples/cries/dusknoir.aif differ diff --git a/sound/direct_sound_samples/cries/duskull.aif b/sound/direct_sound_samples/cries/duskull.aif index 71535909c8..523997cbf0 100644 Binary files a/sound/direct_sound_samples/cries/duskull.aif and b/sound/direct_sound_samples/cries/duskull.aif differ diff --git a/sound/direct_sound_samples/cries/dustox.aif b/sound/direct_sound_samples/cries/dustox.aif index 94f22ae632..5ab919b520 100644 Binary files a/sound/direct_sound_samples/cries/dustox.aif and b/sound/direct_sound_samples/cries/dustox.aif differ diff --git a/sound/direct_sound_samples/cries/dwebble.aif b/sound/direct_sound_samples/cries/dwebble.aif index 687cf87450..1aff103323 100644 Binary files a/sound/direct_sound_samples/cries/dwebble.aif and b/sound/direct_sound_samples/cries/dwebble.aif differ diff --git a/sound/direct_sound_samples/cries/eelektrik.aif b/sound/direct_sound_samples/cries/eelektrik.aif index 4739bd80db..d39453bc0d 100644 Binary files a/sound/direct_sound_samples/cries/eelektrik.aif and b/sound/direct_sound_samples/cries/eelektrik.aif differ diff --git a/sound/direct_sound_samples/cries/eelektross.aif b/sound/direct_sound_samples/cries/eelektross.aif index b8e362b754..b618fa5e97 100644 Binary files a/sound/direct_sound_samples/cries/eelektross.aif and b/sound/direct_sound_samples/cries/eelektross.aif differ diff --git a/sound/direct_sound_samples/cries/eevee.aif b/sound/direct_sound_samples/cries/eevee.aif index ce8bf61af7..0706209843 100644 Binary files a/sound/direct_sound_samples/cries/eevee.aif and b/sound/direct_sound_samples/cries/eevee.aif differ diff --git a/sound/direct_sound_samples/cries/ekans.aif b/sound/direct_sound_samples/cries/ekans.aif index 6d933819d8..80bc2fdfec 100644 Binary files a/sound/direct_sound_samples/cries/ekans.aif and b/sound/direct_sound_samples/cries/ekans.aif differ diff --git a/sound/direct_sound_samples/cries/eldegoss.aif b/sound/direct_sound_samples/cries/eldegoss.aif index 6c7bbe5129..56f9419b36 100644 Binary files a/sound/direct_sound_samples/cries/eldegoss.aif and b/sound/direct_sound_samples/cries/eldegoss.aif differ diff --git a/sound/direct_sound_samples/cries/electabuzz.aif b/sound/direct_sound_samples/cries/electabuzz.aif index a57bdf37eb..6071f1d4a9 100644 Binary files a/sound/direct_sound_samples/cries/electabuzz.aif and b/sound/direct_sound_samples/cries/electabuzz.aif differ diff --git a/sound/direct_sound_samples/cries/electivire.aif b/sound/direct_sound_samples/cries/electivire.aif index 1cabc64357..9b9c17907d 100644 Binary files a/sound/direct_sound_samples/cries/electivire.aif and b/sound/direct_sound_samples/cries/electivire.aif differ diff --git a/sound/direct_sound_samples/cries/electrike.aif b/sound/direct_sound_samples/cries/electrike.aif index d446cd634b..e7dcc64248 100644 Binary files a/sound/direct_sound_samples/cries/electrike.aif and b/sound/direct_sound_samples/cries/electrike.aif differ diff --git a/sound/direct_sound_samples/cries/electrode.aif b/sound/direct_sound_samples/cries/electrode.aif index 19a982d1ec..96e627bba5 100644 Binary files a/sound/direct_sound_samples/cries/electrode.aif and b/sound/direct_sound_samples/cries/electrode.aif differ diff --git a/sound/direct_sound_samples/cries/elekid.aif b/sound/direct_sound_samples/cries/elekid.aif index 4afbde5cc1..99b3f959d5 100644 Binary files a/sound/direct_sound_samples/cries/elekid.aif and b/sound/direct_sound_samples/cries/elekid.aif differ diff --git a/sound/direct_sound_samples/cries/elgyem.aif b/sound/direct_sound_samples/cries/elgyem.aif index f1e94c1364..04e9ec7ab6 100644 Binary files a/sound/direct_sound_samples/cries/elgyem.aif and b/sound/direct_sound_samples/cries/elgyem.aif differ diff --git a/sound/direct_sound_samples/cries/emboar.aif b/sound/direct_sound_samples/cries/emboar.aif index 4cdd5e0afc..7bf61d285e 100644 Binary files a/sound/direct_sound_samples/cries/emboar.aif and b/sound/direct_sound_samples/cries/emboar.aif differ diff --git a/sound/direct_sound_samples/cries/emolga.aif b/sound/direct_sound_samples/cries/emolga.aif index c32a727451..20172f1446 100644 Binary files a/sound/direct_sound_samples/cries/emolga.aif and b/sound/direct_sound_samples/cries/emolga.aif differ diff --git a/sound/direct_sound_samples/cries/empoleon.aif b/sound/direct_sound_samples/cries/empoleon.aif index 26648ca34c..742bdf8124 100644 Binary files a/sound/direct_sound_samples/cries/empoleon.aif and b/sound/direct_sound_samples/cries/empoleon.aif differ diff --git a/sound/direct_sound_samples/cries/entei.aif b/sound/direct_sound_samples/cries/entei.aif index 63fdcc7838..1e5eff6876 100644 Binary files a/sound/direct_sound_samples/cries/entei.aif and b/sound/direct_sound_samples/cries/entei.aif differ diff --git a/sound/direct_sound_samples/cries/escavalier.aif b/sound/direct_sound_samples/cries/escavalier.aif index 513f53d415..7ef48d2293 100644 Binary files a/sound/direct_sound_samples/cries/escavalier.aif and b/sound/direct_sound_samples/cries/escavalier.aif differ diff --git a/sound/direct_sound_samples/cries/espeon.aif b/sound/direct_sound_samples/cries/espeon.aif index 51f96c911b..bf1f52c94d 100644 Binary files a/sound/direct_sound_samples/cries/espeon.aif and b/sound/direct_sound_samples/cries/espeon.aif differ diff --git a/sound/direct_sound_samples/cries/espurr.aif b/sound/direct_sound_samples/cries/espurr.aif index d395bea397..6d82769b36 100644 Binary files a/sound/direct_sound_samples/cries/espurr.aif and b/sound/direct_sound_samples/cries/espurr.aif differ diff --git a/sound/direct_sound_samples/cries/eternatus.aif b/sound/direct_sound_samples/cries/eternatus.aif index 1dede8fdc4..235bba61f9 100644 Binary files a/sound/direct_sound_samples/cries/eternatus.aif and b/sound/direct_sound_samples/cries/eternatus.aif differ diff --git a/sound/direct_sound_samples/cries/excadrill.aif b/sound/direct_sound_samples/cries/excadrill.aif index 8b2ef0869e..cd372dffdb 100644 Binary files a/sound/direct_sound_samples/cries/excadrill.aif and b/sound/direct_sound_samples/cries/excadrill.aif differ diff --git a/sound/direct_sound_samples/cries/exeggcute.aif b/sound/direct_sound_samples/cries/exeggcute.aif index 384b999094..bd634c7570 100644 Binary files a/sound/direct_sound_samples/cries/exeggcute.aif and b/sound/direct_sound_samples/cries/exeggcute.aif differ diff --git a/sound/direct_sound_samples/cries/exeggutor.aif b/sound/direct_sound_samples/cries/exeggutor.aif index 15ddbbdfaa..094b27bc6f 100644 Binary files a/sound/direct_sound_samples/cries/exeggutor.aif and b/sound/direct_sound_samples/cries/exeggutor.aif differ diff --git a/sound/direct_sound_samples/cries/exploud.aif b/sound/direct_sound_samples/cries/exploud.aif index 7b97db232d..98dafb1ee1 100644 Binary files a/sound/direct_sound_samples/cries/exploud.aif and b/sound/direct_sound_samples/cries/exploud.aif differ diff --git a/sound/direct_sound_samples/cries/farfetchd.aif b/sound/direct_sound_samples/cries/farfetchd.aif index d3838c6762..5a710ed7de 100644 Binary files a/sound/direct_sound_samples/cries/farfetchd.aif and b/sound/direct_sound_samples/cries/farfetchd.aif differ diff --git a/sound/direct_sound_samples/cries/farigiraf.aif b/sound/direct_sound_samples/cries/farigiraf.aif index 573520315d..d862b0d30e 100644 Binary files a/sound/direct_sound_samples/cries/farigiraf.aif and b/sound/direct_sound_samples/cries/farigiraf.aif differ diff --git a/sound/direct_sound_samples/cries/fearow.aif b/sound/direct_sound_samples/cries/fearow.aif index f111ca15a6..7922698482 100644 Binary files a/sound/direct_sound_samples/cries/fearow.aif and b/sound/direct_sound_samples/cries/fearow.aif differ diff --git a/sound/direct_sound_samples/cries/feebas.aif b/sound/direct_sound_samples/cries/feebas.aif index 7cc5452a4e..fc6e757134 100644 Binary files a/sound/direct_sound_samples/cries/feebas.aif and b/sound/direct_sound_samples/cries/feebas.aif differ diff --git a/sound/direct_sound_samples/cries/fennekin.aif b/sound/direct_sound_samples/cries/fennekin.aif index a559267a27..3feb83cdf8 100644 Binary files a/sound/direct_sound_samples/cries/fennekin.aif and b/sound/direct_sound_samples/cries/fennekin.aif differ diff --git a/sound/direct_sound_samples/cries/feraligatr.aif b/sound/direct_sound_samples/cries/feraligatr.aif index 070e204c35..c71d66722b 100644 Binary files a/sound/direct_sound_samples/cries/feraligatr.aif and b/sound/direct_sound_samples/cries/feraligatr.aif differ diff --git a/sound/direct_sound_samples/cries/ferroseed.aif b/sound/direct_sound_samples/cries/ferroseed.aif index 24856cdd24..1acd8342d0 100644 Binary files a/sound/direct_sound_samples/cries/ferroseed.aif and b/sound/direct_sound_samples/cries/ferroseed.aif differ diff --git a/sound/direct_sound_samples/cries/ferrothorn.aif b/sound/direct_sound_samples/cries/ferrothorn.aif index 5e2d7a2579..7e7f1ad3ad 100644 Binary files a/sound/direct_sound_samples/cries/ferrothorn.aif and b/sound/direct_sound_samples/cries/ferrothorn.aif differ diff --git a/sound/direct_sound_samples/cries/fidough.aif b/sound/direct_sound_samples/cries/fidough.aif index 44609a2dd7..f2063bc79b 100644 Binary files a/sound/direct_sound_samples/cries/fidough.aif and b/sound/direct_sound_samples/cries/fidough.aif differ diff --git a/sound/direct_sound_samples/cries/finneon.aif b/sound/direct_sound_samples/cries/finneon.aif index d6eb52466d..c2fe2f38ba 100644 Binary files a/sound/direct_sound_samples/cries/finneon.aif and b/sound/direct_sound_samples/cries/finneon.aif differ diff --git a/sound/direct_sound_samples/cries/flaaffy.aif b/sound/direct_sound_samples/cries/flaaffy.aif index a9f809d533..068e82e76c 100644 Binary files a/sound/direct_sound_samples/cries/flaaffy.aif and b/sound/direct_sound_samples/cries/flaaffy.aif differ diff --git a/sound/direct_sound_samples/cries/flabebe.aif b/sound/direct_sound_samples/cries/flabebe.aif index e309ae8c62..a6dbe0321c 100644 Binary files a/sound/direct_sound_samples/cries/flabebe.aif and b/sound/direct_sound_samples/cries/flabebe.aif differ diff --git a/sound/direct_sound_samples/cries/flamigo.aif b/sound/direct_sound_samples/cries/flamigo.aif index bed56a7f31..2b022da5b0 100644 Binary files a/sound/direct_sound_samples/cries/flamigo.aif and b/sound/direct_sound_samples/cries/flamigo.aif differ diff --git a/sound/direct_sound_samples/cries/flareon.aif b/sound/direct_sound_samples/cries/flareon.aif index d8e70213df..b8d33df49e 100644 Binary files a/sound/direct_sound_samples/cries/flareon.aif and b/sound/direct_sound_samples/cries/flareon.aif differ diff --git a/sound/direct_sound_samples/cries/fletchinder.aif b/sound/direct_sound_samples/cries/fletchinder.aif index 40623fbf32..2267e3fdfc 100644 Binary files a/sound/direct_sound_samples/cries/fletchinder.aif and b/sound/direct_sound_samples/cries/fletchinder.aif differ diff --git a/sound/direct_sound_samples/cries/fletchling.aif b/sound/direct_sound_samples/cries/fletchling.aif index 6ee80237df..ce9085845f 100644 Binary files a/sound/direct_sound_samples/cries/fletchling.aif and b/sound/direct_sound_samples/cries/fletchling.aif differ diff --git a/sound/direct_sound_samples/cries/floatzel.aif b/sound/direct_sound_samples/cries/floatzel.aif index 60424b3679..36f34f5e90 100644 Binary files a/sound/direct_sound_samples/cries/floatzel.aif and b/sound/direct_sound_samples/cries/floatzel.aif differ diff --git a/sound/direct_sound_samples/cries/floette.aif b/sound/direct_sound_samples/cries/floette.aif index c55d10fb75..4244ce8eda 100644 Binary files a/sound/direct_sound_samples/cries/floette.aif and b/sound/direct_sound_samples/cries/floette.aif differ diff --git a/sound/direct_sound_samples/cries/floette_eternal_flower.aif b/sound/direct_sound_samples/cries/floette_eternal_flower.aif index d6b9452b45..386815f082 100644 Binary files a/sound/direct_sound_samples/cries/floette_eternal_flower.aif and b/sound/direct_sound_samples/cries/floette_eternal_flower.aif differ diff --git a/sound/direct_sound_samples/cries/florges.aif b/sound/direct_sound_samples/cries/florges.aif index 36b504932f..e652e68fa9 100644 Binary files a/sound/direct_sound_samples/cries/florges.aif and b/sound/direct_sound_samples/cries/florges.aif differ diff --git a/sound/direct_sound_samples/cries/flygon.aif b/sound/direct_sound_samples/cries/flygon.aif index 06abfcf268..c8b793f4f9 100644 Binary files a/sound/direct_sound_samples/cries/flygon.aif and b/sound/direct_sound_samples/cries/flygon.aif differ diff --git a/sound/direct_sound_samples/cries/fomantis.aif b/sound/direct_sound_samples/cries/fomantis.aif index 9690a53ee1..a82e4d4524 100644 Binary files a/sound/direct_sound_samples/cries/fomantis.aif and b/sound/direct_sound_samples/cries/fomantis.aif differ diff --git a/sound/direct_sound_samples/cries/foongus.aif b/sound/direct_sound_samples/cries/foongus.aif index dbd6f9c5cd..ca83e1b475 100644 Binary files a/sound/direct_sound_samples/cries/foongus.aif and b/sound/direct_sound_samples/cries/foongus.aif differ diff --git a/sound/direct_sound_samples/cries/forretress.aif b/sound/direct_sound_samples/cries/forretress.aif index 4fae6d0378..9b8af8baa4 100644 Binary files a/sound/direct_sound_samples/cries/forretress.aif and b/sound/direct_sound_samples/cries/forretress.aif differ diff --git a/sound/direct_sound_samples/cries/fraxure.aif b/sound/direct_sound_samples/cries/fraxure.aif index 25464a1ff7..4586702b00 100644 Binary files a/sound/direct_sound_samples/cries/fraxure.aif and b/sound/direct_sound_samples/cries/fraxure.aif differ diff --git a/sound/direct_sound_samples/cries/frigibax.aif b/sound/direct_sound_samples/cries/frigibax.aif index 10c5b819aa..e8318a0cf1 100644 Binary files a/sound/direct_sound_samples/cries/frigibax.aif and b/sound/direct_sound_samples/cries/frigibax.aif differ diff --git a/sound/direct_sound_samples/cries/frillish.aif b/sound/direct_sound_samples/cries/frillish.aif index c59a0a542f..71511b8bcf 100644 Binary files a/sound/direct_sound_samples/cries/frillish.aif and b/sound/direct_sound_samples/cries/frillish.aif differ diff --git a/sound/direct_sound_samples/cries/froakie.aif b/sound/direct_sound_samples/cries/froakie.aif index 240992ff35..d6955de8bc 100644 Binary files a/sound/direct_sound_samples/cries/froakie.aif and b/sound/direct_sound_samples/cries/froakie.aif differ diff --git a/sound/direct_sound_samples/cries/frogadier.aif b/sound/direct_sound_samples/cries/frogadier.aif index fa0c54c3f3..918abc5d84 100644 Binary files a/sound/direct_sound_samples/cries/frogadier.aif and b/sound/direct_sound_samples/cries/frogadier.aif differ diff --git a/sound/direct_sound_samples/cries/froslass.aif b/sound/direct_sound_samples/cries/froslass.aif index 2c6a0be001..75febf4311 100644 Binary files a/sound/direct_sound_samples/cries/froslass.aif and b/sound/direct_sound_samples/cries/froslass.aif differ diff --git a/sound/direct_sound_samples/cries/fuecoco.aif b/sound/direct_sound_samples/cries/fuecoco.aif index 4c0d7eb07a..ee40234e0b 100644 Binary files a/sound/direct_sound_samples/cries/fuecoco.aif and b/sound/direct_sound_samples/cries/fuecoco.aif differ diff --git a/sound/direct_sound_samples/cries/furfrou.aif b/sound/direct_sound_samples/cries/furfrou.aif index bbddc63c06..d989bde3d3 100644 Binary files a/sound/direct_sound_samples/cries/furfrou.aif and b/sound/direct_sound_samples/cries/furfrou.aif differ diff --git a/sound/direct_sound_samples/cries/furret.aif b/sound/direct_sound_samples/cries/furret.aif index 6ce107b10f..cdf9447d73 100644 Binary files a/sound/direct_sound_samples/cries/furret.aif and b/sound/direct_sound_samples/cries/furret.aif differ diff --git a/sound/direct_sound_samples/cries/gabite.aif b/sound/direct_sound_samples/cries/gabite.aif index 17226eb283..5ca21cec7a 100644 Binary files a/sound/direct_sound_samples/cries/gabite.aif and b/sound/direct_sound_samples/cries/gabite.aif differ diff --git a/sound/direct_sound_samples/cries/gallade.aif b/sound/direct_sound_samples/cries/gallade.aif index 7de776bd19..1eb55aeed9 100644 Binary files a/sound/direct_sound_samples/cries/gallade.aif and b/sound/direct_sound_samples/cries/gallade.aif differ diff --git a/sound/direct_sound_samples/cries/gallade_mega.aif b/sound/direct_sound_samples/cries/gallade_mega.aif index 0af522f68f..5b0d5eb5cc 100644 Binary files a/sound/direct_sound_samples/cries/gallade_mega.aif and b/sound/direct_sound_samples/cries/gallade_mega.aif differ diff --git a/sound/direct_sound_samples/cries/galvantula.aif b/sound/direct_sound_samples/cries/galvantula.aif index d682377565..8d890a2463 100644 Binary files a/sound/direct_sound_samples/cries/galvantula.aif and b/sound/direct_sound_samples/cries/galvantula.aif differ diff --git a/sound/direct_sound_samples/cries/garbodor.aif b/sound/direct_sound_samples/cries/garbodor.aif index ed906101f3..09cad5cd7f 100644 Binary files a/sound/direct_sound_samples/cries/garbodor.aif and b/sound/direct_sound_samples/cries/garbodor.aif differ diff --git a/sound/direct_sound_samples/cries/garchomp.aif b/sound/direct_sound_samples/cries/garchomp.aif index a5165a7338..f96c62f93b 100644 Binary files a/sound/direct_sound_samples/cries/garchomp.aif and b/sound/direct_sound_samples/cries/garchomp.aif differ diff --git a/sound/direct_sound_samples/cries/gardevoir.aif b/sound/direct_sound_samples/cries/gardevoir.aif index f7cd7d5239..9285affb9d 100644 Binary files a/sound/direct_sound_samples/cries/gardevoir.aif and b/sound/direct_sound_samples/cries/gardevoir.aif differ diff --git a/sound/direct_sound_samples/cries/gastly.aif b/sound/direct_sound_samples/cries/gastly.aif index 8dd90bff4d..5174cabffd 100644 Binary files a/sound/direct_sound_samples/cries/gastly.aif and b/sound/direct_sound_samples/cries/gastly.aif differ diff --git a/sound/direct_sound_samples/cries/gastrodon.aif b/sound/direct_sound_samples/cries/gastrodon.aif index 7c33ebd99b..d564820e83 100644 Binary files a/sound/direct_sound_samples/cries/gastrodon.aif and b/sound/direct_sound_samples/cries/gastrodon.aif differ diff --git a/sound/direct_sound_samples/cries/genesect.aif b/sound/direct_sound_samples/cries/genesect.aif index e088634591..49e430ee9a 100644 Binary files a/sound/direct_sound_samples/cries/genesect.aif and b/sound/direct_sound_samples/cries/genesect.aif differ diff --git a/sound/direct_sound_samples/cries/gengar.aif b/sound/direct_sound_samples/cries/gengar.aif index 0f7a59c33c..3c5e291ba3 100644 Binary files a/sound/direct_sound_samples/cries/gengar.aif and b/sound/direct_sound_samples/cries/gengar.aif differ diff --git a/sound/direct_sound_samples/cries/geodude.aif b/sound/direct_sound_samples/cries/geodude.aif index 6c8e1779f2..a09b2ca345 100644 Binary files a/sound/direct_sound_samples/cries/geodude.aif and b/sound/direct_sound_samples/cries/geodude.aif differ diff --git a/sound/direct_sound_samples/cries/gible.aif b/sound/direct_sound_samples/cries/gible.aif index 47b8635e96..f3d4b4882f 100644 Binary files a/sound/direct_sound_samples/cries/gible.aif and b/sound/direct_sound_samples/cries/gible.aif differ diff --git a/sound/direct_sound_samples/cries/gigalith.aif b/sound/direct_sound_samples/cries/gigalith.aif index e5c2f6419e..00ad607cc6 100644 Binary files a/sound/direct_sound_samples/cries/gigalith.aif and b/sound/direct_sound_samples/cries/gigalith.aif differ diff --git a/sound/direct_sound_samples/cries/gimmighoul.aif b/sound/direct_sound_samples/cries/gimmighoul.aif index dac736784e..fe8db162c9 100644 Binary files a/sound/direct_sound_samples/cries/gimmighoul.aif and b/sound/direct_sound_samples/cries/gimmighoul.aif differ diff --git a/sound/direct_sound_samples/cries/girafarig.aif b/sound/direct_sound_samples/cries/girafarig.aif index ff56ab97cd..af5af89268 100644 Binary files a/sound/direct_sound_samples/cries/girafarig.aif and b/sound/direct_sound_samples/cries/girafarig.aif differ diff --git a/sound/direct_sound_samples/cries/giratina.aif b/sound/direct_sound_samples/cries/giratina.aif index 105a24de0f..319e2c1323 100644 Binary files a/sound/direct_sound_samples/cries/giratina.aif and b/sound/direct_sound_samples/cries/giratina.aif differ diff --git a/sound/direct_sound_samples/cries/glaceon.aif b/sound/direct_sound_samples/cries/glaceon.aif index fc7cc9f895..e38ebdef91 100644 Binary files a/sound/direct_sound_samples/cries/glaceon.aif and b/sound/direct_sound_samples/cries/glaceon.aif differ diff --git a/sound/direct_sound_samples/cries/glalie.aif b/sound/direct_sound_samples/cries/glalie.aif index 233515b6aa..38291bef49 100644 Binary files a/sound/direct_sound_samples/cries/glalie.aif and b/sound/direct_sound_samples/cries/glalie.aif differ diff --git a/sound/direct_sound_samples/cries/glalie_mega.aif b/sound/direct_sound_samples/cries/glalie_mega.aif index 44261f5271..cae5ba57f1 100644 Binary files a/sound/direct_sound_samples/cries/glalie_mega.aif and b/sound/direct_sound_samples/cries/glalie_mega.aif differ diff --git a/sound/direct_sound_samples/cries/glameow.aif b/sound/direct_sound_samples/cries/glameow.aif index ad1d87353c..a2d7ab1fa3 100644 Binary files a/sound/direct_sound_samples/cries/glameow.aif and b/sound/direct_sound_samples/cries/glameow.aif differ diff --git a/sound/direct_sound_samples/cries/glastrier.aif b/sound/direct_sound_samples/cries/glastrier.aif index 6109f1ca0b..80c44e0b76 100644 Binary files a/sound/direct_sound_samples/cries/glastrier.aif and b/sound/direct_sound_samples/cries/glastrier.aif differ diff --git a/sound/direct_sound_samples/cries/gligar.aif b/sound/direct_sound_samples/cries/gligar.aif index 4908fb6b09..e2103c2ff8 100644 Binary files a/sound/direct_sound_samples/cries/gligar.aif and b/sound/direct_sound_samples/cries/gligar.aif differ diff --git a/sound/direct_sound_samples/cries/glimmet.aif b/sound/direct_sound_samples/cries/glimmet.aif index 38fc118b26..e89ac2ea59 100644 Binary files a/sound/direct_sound_samples/cries/glimmet.aif and b/sound/direct_sound_samples/cries/glimmet.aif differ diff --git a/sound/direct_sound_samples/cries/gliscor.aif b/sound/direct_sound_samples/cries/gliscor.aif index ccd116c291..1df92dc9a9 100644 Binary files a/sound/direct_sound_samples/cries/gliscor.aif and b/sound/direct_sound_samples/cries/gliscor.aif differ diff --git a/sound/direct_sound_samples/cries/gloom.aif b/sound/direct_sound_samples/cries/gloom.aif index d15e3cca75..bcedd48d5e 100644 Binary files a/sound/direct_sound_samples/cries/gloom.aif and b/sound/direct_sound_samples/cries/gloom.aif differ diff --git a/sound/direct_sound_samples/cries/gogoat.aif b/sound/direct_sound_samples/cries/gogoat.aif index ee505f6756..6717a2ff26 100644 Binary files a/sound/direct_sound_samples/cries/gogoat.aif and b/sound/direct_sound_samples/cries/gogoat.aif differ diff --git a/sound/direct_sound_samples/cries/golbat.aif b/sound/direct_sound_samples/cries/golbat.aif index b08da62f56..2e91f76966 100644 Binary files a/sound/direct_sound_samples/cries/golbat.aif and b/sound/direct_sound_samples/cries/golbat.aif differ diff --git a/sound/direct_sound_samples/cries/goldeen.aif b/sound/direct_sound_samples/cries/goldeen.aif index 2c93ba759e..687f8d3920 100644 Binary files a/sound/direct_sound_samples/cries/goldeen.aif and b/sound/direct_sound_samples/cries/goldeen.aif differ diff --git a/sound/direct_sound_samples/cries/golduck.aif b/sound/direct_sound_samples/cries/golduck.aif index 68645c9df7..bc6c5f5b16 100644 Binary files a/sound/direct_sound_samples/cries/golduck.aif and b/sound/direct_sound_samples/cries/golduck.aif differ diff --git a/sound/direct_sound_samples/cries/golem.aif b/sound/direct_sound_samples/cries/golem.aif index 06451cdf1b..95fbef9c47 100644 Binary files a/sound/direct_sound_samples/cries/golem.aif and b/sound/direct_sound_samples/cries/golem.aif differ diff --git a/sound/direct_sound_samples/cries/golett.aif b/sound/direct_sound_samples/cries/golett.aif index f0f31bda7e..58c6f09cd8 100644 Binary files a/sound/direct_sound_samples/cries/golett.aif and b/sound/direct_sound_samples/cries/golett.aif differ diff --git a/sound/direct_sound_samples/cries/golisopod.aif b/sound/direct_sound_samples/cries/golisopod.aif index 7b3f85220d..429f445ede 100644 Binary files a/sound/direct_sound_samples/cries/golisopod.aif and b/sound/direct_sound_samples/cries/golisopod.aif differ diff --git a/sound/direct_sound_samples/cries/golurk.aif b/sound/direct_sound_samples/cries/golurk.aif index 1795ca8f4a..abc95bd808 100644 Binary files a/sound/direct_sound_samples/cries/golurk.aif and b/sound/direct_sound_samples/cries/golurk.aif differ diff --git a/sound/direct_sound_samples/cries/goodra.aif b/sound/direct_sound_samples/cries/goodra.aif index 0ec7cb4da9..b2f407cc94 100644 Binary files a/sound/direct_sound_samples/cries/goodra.aif and b/sound/direct_sound_samples/cries/goodra.aif differ diff --git a/sound/direct_sound_samples/cries/goomy.aif b/sound/direct_sound_samples/cries/goomy.aif index a35a42f53f..bd2524ebe1 100644 Binary files a/sound/direct_sound_samples/cries/goomy.aif and b/sound/direct_sound_samples/cries/goomy.aif differ diff --git a/sound/direct_sound_samples/cries/gorebyss.aif b/sound/direct_sound_samples/cries/gorebyss.aif index 48277537ac..a93b1aa6fc 100644 Binary files a/sound/direct_sound_samples/cries/gorebyss.aif and b/sound/direct_sound_samples/cries/gorebyss.aif differ diff --git a/sound/direct_sound_samples/cries/gothita.aif b/sound/direct_sound_samples/cries/gothita.aif index 93089d6200..00476d94bd 100644 Binary files a/sound/direct_sound_samples/cries/gothita.aif and b/sound/direct_sound_samples/cries/gothita.aif differ diff --git a/sound/direct_sound_samples/cries/gothitelle.aif b/sound/direct_sound_samples/cries/gothitelle.aif index f7f1202070..d8f334784a 100644 Binary files a/sound/direct_sound_samples/cries/gothitelle.aif and b/sound/direct_sound_samples/cries/gothitelle.aif differ diff --git a/sound/direct_sound_samples/cries/gothorita.aif b/sound/direct_sound_samples/cries/gothorita.aif index d0b1217c18..d5491f83b5 100644 Binary files a/sound/direct_sound_samples/cries/gothorita.aif and b/sound/direct_sound_samples/cries/gothorita.aif differ diff --git a/sound/direct_sound_samples/cries/gourgeist.aif b/sound/direct_sound_samples/cries/gourgeist.aif index 7a88b5f06b..b1790cdd3c 100644 Binary files a/sound/direct_sound_samples/cries/gourgeist.aif and b/sound/direct_sound_samples/cries/gourgeist.aif differ diff --git a/sound/direct_sound_samples/cries/gourgeist_super.aif b/sound/direct_sound_samples/cries/gourgeist_super.aif index 5f30006054..cdf93aca58 100644 Binary files a/sound/direct_sound_samples/cries/gourgeist_super.aif and b/sound/direct_sound_samples/cries/gourgeist_super.aif differ diff --git a/sound/direct_sound_samples/cries/granbull.aif b/sound/direct_sound_samples/cries/granbull.aif index 6c4563fb38..87ed96a842 100644 Binary files a/sound/direct_sound_samples/cries/granbull.aif and b/sound/direct_sound_samples/cries/granbull.aif differ diff --git a/sound/direct_sound_samples/cries/graveler.aif b/sound/direct_sound_samples/cries/graveler.aif index 84828f10f8..fbf463c4fd 100644 Binary files a/sound/direct_sound_samples/cries/graveler.aif and b/sound/direct_sound_samples/cries/graveler.aif differ diff --git a/sound/direct_sound_samples/cries/greninja.aif b/sound/direct_sound_samples/cries/greninja.aif index 3050e4c5d9..988d66b062 100644 Binary files a/sound/direct_sound_samples/cries/greninja.aif and b/sound/direct_sound_samples/cries/greninja.aif differ diff --git a/sound/direct_sound_samples/cries/grimer.aif b/sound/direct_sound_samples/cries/grimer.aif index 160cfe766c..050fb9620c 100644 Binary files a/sound/direct_sound_samples/cries/grimer.aif and b/sound/direct_sound_samples/cries/grimer.aif differ diff --git a/sound/direct_sound_samples/cries/grotle.aif b/sound/direct_sound_samples/cries/grotle.aif index 71a2d7d1a8..2b08bca67e 100644 Binary files a/sound/direct_sound_samples/cries/grotle.aif and b/sound/direct_sound_samples/cries/grotle.aif differ diff --git a/sound/direct_sound_samples/cries/groudon.aif b/sound/direct_sound_samples/cries/groudon.aif index f8056c54b3..9fe253745a 100644 Binary files a/sound/direct_sound_samples/cries/groudon.aif and b/sound/direct_sound_samples/cries/groudon.aif differ diff --git a/sound/direct_sound_samples/cries/groudon_primal.aif b/sound/direct_sound_samples/cries/groudon_primal.aif index c883269470..a93d06a3fe 100644 Binary files a/sound/direct_sound_samples/cries/groudon_primal.aif and b/sound/direct_sound_samples/cries/groudon_primal.aif differ diff --git a/sound/direct_sound_samples/cries/grovyle.aif b/sound/direct_sound_samples/cries/grovyle.aif index 7015e64309..c21c58ad09 100644 Binary files a/sound/direct_sound_samples/cries/grovyle.aif and b/sound/direct_sound_samples/cries/grovyle.aif differ diff --git a/sound/direct_sound_samples/cries/growlithe.aif b/sound/direct_sound_samples/cries/growlithe.aif index 1f98002d9b..37b7233c29 100644 Binary files a/sound/direct_sound_samples/cries/growlithe.aif and b/sound/direct_sound_samples/cries/growlithe.aif differ diff --git a/sound/direct_sound_samples/cries/grubbin.aif b/sound/direct_sound_samples/cries/grubbin.aif index f94371c468..8e071f7815 100644 Binary files a/sound/direct_sound_samples/cries/grubbin.aif and b/sound/direct_sound_samples/cries/grubbin.aif differ diff --git a/sound/direct_sound_samples/cries/grumpig.aif b/sound/direct_sound_samples/cries/grumpig.aif index 009cf05257..d5b766f43e 100644 Binary files a/sound/direct_sound_samples/cries/grumpig.aif and b/sound/direct_sound_samples/cries/grumpig.aif differ diff --git a/sound/direct_sound_samples/cries/gulpin.aif b/sound/direct_sound_samples/cries/gulpin.aif index 47a26e9b4f..4b0bc89b96 100644 Binary files a/sound/direct_sound_samples/cries/gulpin.aif and b/sound/direct_sound_samples/cries/gulpin.aif differ diff --git a/sound/direct_sound_samples/cries/gumshoos.aif b/sound/direct_sound_samples/cries/gumshoos.aif index 82cbbfb72a..9f078f85db 100644 Binary files a/sound/direct_sound_samples/cries/gumshoos.aif and b/sound/direct_sound_samples/cries/gumshoos.aif differ diff --git a/sound/direct_sound_samples/cries/gurdurr.aif b/sound/direct_sound_samples/cries/gurdurr.aif index 8cb56e5a70..055d366a91 100644 Binary files a/sound/direct_sound_samples/cries/gurdurr.aif and b/sound/direct_sound_samples/cries/gurdurr.aif differ diff --git a/sound/direct_sound_samples/cries/guzzlord.aif b/sound/direct_sound_samples/cries/guzzlord.aif index ed99b29018..958e0b7ed3 100644 Binary files a/sound/direct_sound_samples/cries/guzzlord.aif and b/sound/direct_sound_samples/cries/guzzlord.aif differ diff --git a/sound/direct_sound_samples/cries/gyarados.aif b/sound/direct_sound_samples/cries/gyarados.aif index 8747ee1f2d..f4b5dbf945 100644 Binary files a/sound/direct_sound_samples/cries/gyarados.aif and b/sound/direct_sound_samples/cries/gyarados.aif differ diff --git a/sound/direct_sound_samples/cries/gyarados_mega.aif b/sound/direct_sound_samples/cries/gyarados_mega.aif index 5e310a4638..33f9eadc3b 100644 Binary files a/sound/direct_sound_samples/cries/gyarados_mega.aif and b/sound/direct_sound_samples/cries/gyarados_mega.aif differ diff --git a/sound/direct_sound_samples/cries/hakamo_o.aif b/sound/direct_sound_samples/cries/hakamo_o.aif index 59ad764972..03d2ff241a 100644 Binary files a/sound/direct_sound_samples/cries/hakamo_o.aif and b/sound/direct_sound_samples/cries/hakamo_o.aif differ diff --git a/sound/direct_sound_samples/cries/happiny.aif b/sound/direct_sound_samples/cries/happiny.aif index 90d8ccb015..bee72680ac 100644 Binary files a/sound/direct_sound_samples/cries/happiny.aif and b/sound/direct_sound_samples/cries/happiny.aif differ diff --git a/sound/direct_sound_samples/cries/hariyama.aif b/sound/direct_sound_samples/cries/hariyama.aif index 3455304fb1..0a61e0d8ae 100644 Binary files a/sound/direct_sound_samples/cries/hariyama.aif and b/sound/direct_sound_samples/cries/hariyama.aif differ diff --git a/sound/direct_sound_samples/cries/hattrem.aif b/sound/direct_sound_samples/cries/hattrem.aif index 57f46a4979..444c770283 100644 Binary files a/sound/direct_sound_samples/cries/hattrem.aif and b/sound/direct_sound_samples/cries/hattrem.aif differ diff --git a/sound/direct_sound_samples/cries/haunter.aif b/sound/direct_sound_samples/cries/haunter.aif index 83dd20697f..c9192cf9bc 100644 Binary files a/sound/direct_sound_samples/cries/haunter.aif and b/sound/direct_sound_samples/cries/haunter.aif differ diff --git a/sound/direct_sound_samples/cries/hawlucha.aif b/sound/direct_sound_samples/cries/hawlucha.aif index 5729c1d86b..0e4d9c78d1 100644 Binary files a/sound/direct_sound_samples/cries/hawlucha.aif and b/sound/direct_sound_samples/cries/hawlucha.aif differ diff --git a/sound/direct_sound_samples/cries/haxorus.aif b/sound/direct_sound_samples/cries/haxorus.aif index 7fc4043d36..8414951d49 100644 Binary files a/sound/direct_sound_samples/cries/haxorus.aif and b/sound/direct_sound_samples/cries/haxorus.aif differ diff --git a/sound/direct_sound_samples/cries/heatmor.aif b/sound/direct_sound_samples/cries/heatmor.aif index a73dd97e4a..2a254ef0d9 100644 Binary files a/sound/direct_sound_samples/cries/heatmor.aif and b/sound/direct_sound_samples/cries/heatmor.aif differ diff --git a/sound/direct_sound_samples/cries/heatran.aif b/sound/direct_sound_samples/cries/heatran.aif index d6bab9fbb9..56c373d8d8 100644 Binary files a/sound/direct_sound_samples/cries/heatran.aif and b/sound/direct_sound_samples/cries/heatran.aif differ diff --git a/sound/direct_sound_samples/cries/heliolisk.aif b/sound/direct_sound_samples/cries/heliolisk.aif index 4116c27df5..d87e7bfd2a 100644 Binary files a/sound/direct_sound_samples/cries/heliolisk.aif and b/sound/direct_sound_samples/cries/heliolisk.aif differ diff --git a/sound/direct_sound_samples/cries/helioptile.aif b/sound/direct_sound_samples/cries/helioptile.aif index cb935b70ae..aa1a9fb3a6 100644 Binary files a/sound/direct_sound_samples/cries/helioptile.aif and b/sound/direct_sound_samples/cries/helioptile.aif differ diff --git a/sound/direct_sound_samples/cries/heracross.aif b/sound/direct_sound_samples/cries/heracross.aif index e5347faf24..1fe12ed524 100644 Binary files a/sound/direct_sound_samples/cries/heracross.aif and b/sound/direct_sound_samples/cries/heracross.aif differ diff --git a/sound/direct_sound_samples/cries/heracross_mega.aif b/sound/direct_sound_samples/cries/heracross_mega.aif index 67faa6f196..e1993473c2 100644 Binary files a/sound/direct_sound_samples/cries/heracross_mega.aif and b/sound/direct_sound_samples/cries/heracross_mega.aif differ diff --git a/sound/direct_sound_samples/cries/herdier.aif b/sound/direct_sound_samples/cries/herdier.aif index e57234c8b0..bc798f60b5 100644 Binary files a/sound/direct_sound_samples/cries/herdier.aif and b/sound/direct_sound_samples/cries/herdier.aif differ diff --git a/sound/direct_sound_samples/cries/hippopotas.aif b/sound/direct_sound_samples/cries/hippopotas.aif index 83deb1c618..a8828805fe 100644 Binary files a/sound/direct_sound_samples/cries/hippopotas.aif and b/sound/direct_sound_samples/cries/hippopotas.aif differ diff --git a/sound/direct_sound_samples/cries/hippowdon.aif b/sound/direct_sound_samples/cries/hippowdon.aif index 42f2860c81..94649f3f25 100644 Binary files a/sound/direct_sound_samples/cries/hippowdon.aif and b/sound/direct_sound_samples/cries/hippowdon.aif differ diff --git a/sound/direct_sound_samples/cries/hitmonchan.aif b/sound/direct_sound_samples/cries/hitmonchan.aif index a0b974db92..279370fc9c 100644 Binary files a/sound/direct_sound_samples/cries/hitmonchan.aif and b/sound/direct_sound_samples/cries/hitmonchan.aif differ diff --git a/sound/direct_sound_samples/cries/hitmonlee.aif b/sound/direct_sound_samples/cries/hitmonlee.aif index 5fda33b99d..d388565df8 100644 Binary files a/sound/direct_sound_samples/cries/hitmonlee.aif and b/sound/direct_sound_samples/cries/hitmonlee.aif differ diff --git a/sound/direct_sound_samples/cries/hitmontop.aif b/sound/direct_sound_samples/cries/hitmontop.aif index 57f6101c91..237e0a6b0f 100644 Binary files a/sound/direct_sound_samples/cries/hitmontop.aif and b/sound/direct_sound_samples/cries/hitmontop.aif differ diff --git a/sound/direct_sound_samples/cries/ho_oh.aif b/sound/direct_sound_samples/cries/ho_oh.aif index 0c561242a7..886d66813a 100644 Binary files a/sound/direct_sound_samples/cries/ho_oh.aif and b/sound/direct_sound_samples/cries/ho_oh.aif differ diff --git a/sound/direct_sound_samples/cries/honchkrow.aif b/sound/direct_sound_samples/cries/honchkrow.aif index 424689f0dd..ae3ceda671 100644 Binary files a/sound/direct_sound_samples/cries/honchkrow.aif and b/sound/direct_sound_samples/cries/honchkrow.aif differ diff --git a/sound/direct_sound_samples/cries/honedge.aif b/sound/direct_sound_samples/cries/honedge.aif index 75e95b0738..e1204fddfe 100644 Binary files a/sound/direct_sound_samples/cries/honedge.aif and b/sound/direct_sound_samples/cries/honedge.aif differ diff --git a/sound/direct_sound_samples/cries/hoopa_confined.aif b/sound/direct_sound_samples/cries/hoopa_confined.aif index 39a8d02565..2d91b4982a 100644 Binary files a/sound/direct_sound_samples/cries/hoopa_confined.aif and b/sound/direct_sound_samples/cries/hoopa_confined.aif differ diff --git a/sound/direct_sound_samples/cries/hoopa_unbound.aif b/sound/direct_sound_samples/cries/hoopa_unbound.aif index 8867fe42a3..2b4d84015b 100644 Binary files a/sound/direct_sound_samples/cries/hoopa_unbound.aif and b/sound/direct_sound_samples/cries/hoopa_unbound.aif differ diff --git a/sound/direct_sound_samples/cries/hoothoot.aif b/sound/direct_sound_samples/cries/hoothoot.aif index 46dcbdddfd..52bccc8e91 100644 Binary files a/sound/direct_sound_samples/cries/hoothoot.aif and b/sound/direct_sound_samples/cries/hoothoot.aif differ diff --git a/sound/direct_sound_samples/cries/hoppip.aif b/sound/direct_sound_samples/cries/hoppip.aif index 9eba0a7495..e715705f08 100644 Binary files a/sound/direct_sound_samples/cries/hoppip.aif and b/sound/direct_sound_samples/cries/hoppip.aif differ diff --git a/sound/direct_sound_samples/cries/horsea.aif b/sound/direct_sound_samples/cries/horsea.aif index 7382a8a69f..12801a2076 100644 Binary files a/sound/direct_sound_samples/cries/horsea.aif and b/sound/direct_sound_samples/cries/horsea.aif differ diff --git a/sound/direct_sound_samples/cries/houndoom.aif b/sound/direct_sound_samples/cries/houndoom.aif index a9c4d2d122..09c6e4957f 100644 Binary files a/sound/direct_sound_samples/cries/houndoom.aif and b/sound/direct_sound_samples/cries/houndoom.aif differ diff --git a/sound/direct_sound_samples/cries/houndoom_mega.aif b/sound/direct_sound_samples/cries/houndoom_mega.aif index 7bf51ba800..102f822cc6 100644 Binary files a/sound/direct_sound_samples/cries/houndoom_mega.aif and b/sound/direct_sound_samples/cries/houndoom_mega.aif differ diff --git a/sound/direct_sound_samples/cries/houndour.aif b/sound/direct_sound_samples/cries/houndour.aif index b366e0d068..352d8fd897 100644 Binary files a/sound/direct_sound_samples/cries/houndour.aif and b/sound/direct_sound_samples/cries/houndour.aif differ diff --git a/sound/direct_sound_samples/cries/houndstone.aif b/sound/direct_sound_samples/cries/houndstone.aif index 145cc79682..99e699b7ba 100644 Binary files a/sound/direct_sound_samples/cries/houndstone.aif and b/sound/direct_sound_samples/cries/houndstone.aif differ diff --git a/sound/direct_sound_samples/cries/huntail.aif b/sound/direct_sound_samples/cries/huntail.aif index 2b930a3eb0..b520d2b7a8 100644 Binary files a/sound/direct_sound_samples/cries/huntail.aif and b/sound/direct_sound_samples/cries/huntail.aif differ diff --git a/sound/direct_sound_samples/cries/hydrapple.aif b/sound/direct_sound_samples/cries/hydrapple.aif index a9d306e93c..45f5fd9ca0 100644 Binary files a/sound/direct_sound_samples/cries/hydrapple.aif and b/sound/direct_sound_samples/cries/hydrapple.aif differ diff --git a/sound/direct_sound_samples/cries/hydreigon.aif b/sound/direct_sound_samples/cries/hydreigon.aif index 66342c066d..8227c6d21f 100644 Binary files a/sound/direct_sound_samples/cries/hydreigon.aif and b/sound/direct_sound_samples/cries/hydreigon.aif differ diff --git a/sound/direct_sound_samples/cries/hypno.aif b/sound/direct_sound_samples/cries/hypno.aif index 8569a4f981..7c4bde1936 100644 Binary files a/sound/direct_sound_samples/cries/hypno.aif and b/sound/direct_sound_samples/cries/hypno.aif differ diff --git a/sound/direct_sound_samples/cries/igglybuff.aif b/sound/direct_sound_samples/cries/igglybuff.aif index 3a8d6e81ef..0f2db1e52c 100644 Binary files a/sound/direct_sound_samples/cries/igglybuff.aif and b/sound/direct_sound_samples/cries/igglybuff.aif differ diff --git a/sound/direct_sound_samples/cries/illumise.aif b/sound/direct_sound_samples/cries/illumise.aif index 350288991d..26807295bd 100644 Binary files a/sound/direct_sound_samples/cries/illumise.aif and b/sound/direct_sound_samples/cries/illumise.aif differ diff --git a/sound/direct_sound_samples/cries/incineroar.aif b/sound/direct_sound_samples/cries/incineroar.aif index 6689c10173..b7f3e2201e 100644 Binary files a/sound/direct_sound_samples/cries/incineroar.aif and b/sound/direct_sound_samples/cries/incineroar.aif differ diff --git a/sound/direct_sound_samples/cries/indeedee_female.aif b/sound/direct_sound_samples/cries/indeedee_female.aif index 3edae13bad..b5e5fe4547 100644 Binary files a/sound/direct_sound_samples/cries/indeedee_female.aif and b/sound/direct_sound_samples/cries/indeedee_female.aif differ diff --git a/sound/direct_sound_samples/cries/infernape.aif b/sound/direct_sound_samples/cries/infernape.aif index b36008eeea..d4570a8f3a 100644 Binary files a/sound/direct_sound_samples/cries/infernape.aif and b/sound/direct_sound_samples/cries/infernape.aif differ diff --git a/sound/direct_sound_samples/cries/inkay.aif b/sound/direct_sound_samples/cries/inkay.aif index a28ee83866..04753026e0 100644 Binary files a/sound/direct_sound_samples/cries/inkay.aif and b/sound/direct_sound_samples/cries/inkay.aif differ diff --git a/sound/direct_sound_samples/cries/inteleon.aif b/sound/direct_sound_samples/cries/inteleon.aif index d5c6d367f7..8153b02889 100644 Binary files a/sound/direct_sound_samples/cries/inteleon.aif and b/sound/direct_sound_samples/cries/inteleon.aif differ diff --git a/sound/direct_sound_samples/cries/iron_boulder.aif b/sound/direct_sound_samples/cries/iron_boulder.aif index 15c1b632b5..0ffdefdffb 100644 Binary files a/sound/direct_sound_samples/cries/iron_boulder.aif and b/sound/direct_sound_samples/cries/iron_boulder.aif differ diff --git a/sound/direct_sound_samples/cries/iron_bundle.aif b/sound/direct_sound_samples/cries/iron_bundle.aif index 59af7aa504..51c9e0b60c 100644 Binary files a/sound/direct_sound_samples/cries/iron_bundle.aif and b/sound/direct_sound_samples/cries/iron_bundle.aif differ diff --git a/sound/direct_sound_samples/cries/iron_crown.aif b/sound/direct_sound_samples/cries/iron_crown.aif index b67a9c7089..8c310455dc 100644 Binary files a/sound/direct_sound_samples/cries/iron_crown.aif and b/sound/direct_sound_samples/cries/iron_crown.aif differ diff --git a/sound/direct_sound_samples/cries/iron_hands.aif b/sound/direct_sound_samples/cries/iron_hands.aif index d9e5b995f0..621e4fdc19 100644 Binary files a/sound/direct_sound_samples/cries/iron_hands.aif and b/sound/direct_sound_samples/cries/iron_hands.aif differ diff --git a/sound/direct_sound_samples/cries/iron_thorns.aif b/sound/direct_sound_samples/cries/iron_thorns.aif index e73b9d553e..ac88055c6d 100644 Binary files a/sound/direct_sound_samples/cries/iron_thorns.aif and b/sound/direct_sound_samples/cries/iron_thorns.aif differ diff --git a/sound/direct_sound_samples/cries/ivysaur.aif b/sound/direct_sound_samples/cries/ivysaur.aif index 3d998bf671..40ee462805 100644 Binary files a/sound/direct_sound_samples/cries/ivysaur.aif and b/sound/direct_sound_samples/cries/ivysaur.aif differ diff --git a/sound/direct_sound_samples/cries/jangmo_o.aif b/sound/direct_sound_samples/cries/jangmo_o.aif index 083522cf85..29f8f86b51 100644 Binary files a/sound/direct_sound_samples/cries/jangmo_o.aif and b/sound/direct_sound_samples/cries/jangmo_o.aif differ diff --git a/sound/direct_sound_samples/cries/jellicent.aif b/sound/direct_sound_samples/cries/jellicent.aif index 4c75c484f2..33f6cf5aea 100644 Binary files a/sound/direct_sound_samples/cries/jellicent.aif and b/sound/direct_sound_samples/cries/jellicent.aif differ diff --git a/sound/direct_sound_samples/cries/jigglypuff.aif b/sound/direct_sound_samples/cries/jigglypuff.aif index d42f2dbdb4..09249f6dd6 100644 Binary files a/sound/direct_sound_samples/cries/jigglypuff.aif and b/sound/direct_sound_samples/cries/jigglypuff.aif differ diff --git a/sound/direct_sound_samples/cries/jirachi.aif b/sound/direct_sound_samples/cries/jirachi.aif index 40f3a76c1c..0da759794c 100644 Binary files a/sound/direct_sound_samples/cries/jirachi.aif and b/sound/direct_sound_samples/cries/jirachi.aif differ diff --git a/sound/direct_sound_samples/cries/jolteon.aif b/sound/direct_sound_samples/cries/jolteon.aif index be9c81d62e..acd96714ae 100644 Binary files a/sound/direct_sound_samples/cries/jolteon.aif and b/sound/direct_sound_samples/cries/jolteon.aif differ diff --git a/sound/direct_sound_samples/cries/joltik.aif b/sound/direct_sound_samples/cries/joltik.aif index cd1fa592c9..a67354d74c 100644 Binary files a/sound/direct_sound_samples/cries/joltik.aif and b/sound/direct_sound_samples/cries/joltik.aif differ diff --git a/sound/direct_sound_samples/cries/jumpluff.aif b/sound/direct_sound_samples/cries/jumpluff.aif index 69b4a72074..2b93dad558 100644 Binary files a/sound/direct_sound_samples/cries/jumpluff.aif and b/sound/direct_sound_samples/cries/jumpluff.aif differ diff --git a/sound/direct_sound_samples/cries/jynx.aif b/sound/direct_sound_samples/cries/jynx.aif index 41630677b7..cbcd7ee99d 100644 Binary files a/sound/direct_sound_samples/cries/jynx.aif and b/sound/direct_sound_samples/cries/jynx.aif differ diff --git a/sound/direct_sound_samples/cries/kabuto.aif b/sound/direct_sound_samples/cries/kabuto.aif index aad4f3266c..2ed73716cb 100644 Binary files a/sound/direct_sound_samples/cries/kabuto.aif and b/sound/direct_sound_samples/cries/kabuto.aif differ diff --git a/sound/direct_sound_samples/cries/kabutops.aif b/sound/direct_sound_samples/cries/kabutops.aif index 015bacaca9..79a4b304a8 100644 Binary files a/sound/direct_sound_samples/cries/kabutops.aif and b/sound/direct_sound_samples/cries/kabutops.aif differ diff --git a/sound/direct_sound_samples/cries/kadabra.aif b/sound/direct_sound_samples/cries/kadabra.aif index 4c847cb4e8..3f03ee03f0 100644 Binary files a/sound/direct_sound_samples/cries/kadabra.aif and b/sound/direct_sound_samples/cries/kadabra.aif differ diff --git a/sound/direct_sound_samples/cries/kakuna.aif b/sound/direct_sound_samples/cries/kakuna.aif index 088b51965c..8331b0b0e5 100644 Binary files a/sound/direct_sound_samples/cries/kakuna.aif and b/sound/direct_sound_samples/cries/kakuna.aif differ diff --git a/sound/direct_sound_samples/cries/kangaskhan.aif b/sound/direct_sound_samples/cries/kangaskhan.aif index 1e57639531..26a8ac43a4 100644 Binary files a/sound/direct_sound_samples/cries/kangaskhan.aif and b/sound/direct_sound_samples/cries/kangaskhan.aif differ diff --git a/sound/direct_sound_samples/cries/kangaskhan_mega.aif b/sound/direct_sound_samples/cries/kangaskhan_mega.aif index cd95a87d39..417cb04f49 100644 Binary files a/sound/direct_sound_samples/cries/kangaskhan_mega.aif and b/sound/direct_sound_samples/cries/kangaskhan_mega.aif differ diff --git a/sound/direct_sound_samples/cries/karrablast.aif b/sound/direct_sound_samples/cries/karrablast.aif index cf06ec45a8..7b5a2c3948 100644 Binary files a/sound/direct_sound_samples/cries/karrablast.aif and b/sound/direct_sound_samples/cries/karrablast.aif differ diff --git a/sound/direct_sound_samples/cries/kartana.aif b/sound/direct_sound_samples/cries/kartana.aif index f17c69912d..b43fa40d78 100644 Binary files a/sound/direct_sound_samples/cries/kartana.aif and b/sound/direct_sound_samples/cries/kartana.aif differ diff --git a/sound/direct_sound_samples/cries/kecleon.aif b/sound/direct_sound_samples/cries/kecleon.aif index b6dd7e91f3..51dae29350 100644 Binary files a/sound/direct_sound_samples/cries/kecleon.aif and b/sound/direct_sound_samples/cries/kecleon.aif differ diff --git a/sound/direct_sound_samples/cries/keldeo.aif b/sound/direct_sound_samples/cries/keldeo.aif index 4f73fc22da..6f23ad0885 100644 Binary files a/sound/direct_sound_samples/cries/keldeo.aif and b/sound/direct_sound_samples/cries/keldeo.aif differ diff --git a/sound/direct_sound_samples/cries/kingdra.aif b/sound/direct_sound_samples/cries/kingdra.aif index 2d68f6a6f1..a9cc1d9fe4 100644 Binary files a/sound/direct_sound_samples/cries/kingdra.aif and b/sound/direct_sound_samples/cries/kingdra.aif differ diff --git a/sound/direct_sound_samples/cries/kingler.aif b/sound/direct_sound_samples/cries/kingler.aif index 752b660659..b836829731 100644 Binary files a/sound/direct_sound_samples/cries/kingler.aif and b/sound/direct_sound_samples/cries/kingler.aif differ diff --git a/sound/direct_sound_samples/cries/kirlia.aif b/sound/direct_sound_samples/cries/kirlia.aif index 0ef9230203..0beaebf16f 100644 Binary files a/sound/direct_sound_samples/cries/kirlia.aif and b/sound/direct_sound_samples/cries/kirlia.aif differ diff --git a/sound/direct_sound_samples/cries/klang.aif b/sound/direct_sound_samples/cries/klang.aif index bb17984d2c..13b28861f4 100644 Binary files a/sound/direct_sound_samples/cries/klang.aif and b/sound/direct_sound_samples/cries/klang.aif differ diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif index cf23d5b623..c84a31cf2f 100644 Binary files a/sound/direct_sound_samples/cries/kleavor.aif and b/sound/direct_sound_samples/cries/kleavor.aif differ diff --git a/sound/direct_sound_samples/cries/klink.aif b/sound/direct_sound_samples/cries/klink.aif index 21076028de..0bd6b65f74 100644 Binary files a/sound/direct_sound_samples/cries/klink.aif and b/sound/direct_sound_samples/cries/klink.aif differ diff --git a/sound/direct_sound_samples/cries/klinklang.aif b/sound/direct_sound_samples/cries/klinklang.aif index 2f2edf0f55..35117bf30a 100644 Binary files a/sound/direct_sound_samples/cries/klinklang.aif and b/sound/direct_sound_samples/cries/klinklang.aif differ diff --git a/sound/direct_sound_samples/cries/koffing.aif b/sound/direct_sound_samples/cries/koffing.aif index 6def9ad0c1..50d5bc978b 100644 Binary files a/sound/direct_sound_samples/cries/koffing.aif and b/sound/direct_sound_samples/cries/koffing.aif differ diff --git a/sound/direct_sound_samples/cries/komala.aif b/sound/direct_sound_samples/cries/komala.aif index 414d0c053b..e084c9a7c4 100644 Binary files a/sound/direct_sound_samples/cries/komala.aif and b/sound/direct_sound_samples/cries/komala.aif differ diff --git a/sound/direct_sound_samples/cries/kommo_o.aif b/sound/direct_sound_samples/cries/kommo_o.aif index d9a12af241..057153e907 100644 Binary files a/sound/direct_sound_samples/cries/kommo_o.aif and b/sound/direct_sound_samples/cries/kommo_o.aif differ diff --git a/sound/direct_sound_samples/cries/krabby.aif b/sound/direct_sound_samples/cries/krabby.aif index 033e148f38..33b8ea294b 100644 Binary files a/sound/direct_sound_samples/cries/krabby.aif and b/sound/direct_sound_samples/cries/krabby.aif differ diff --git a/sound/direct_sound_samples/cries/kricketot.aif b/sound/direct_sound_samples/cries/kricketot.aif index c441b00cd9..7b301cc485 100644 Binary files a/sound/direct_sound_samples/cries/kricketot.aif and b/sound/direct_sound_samples/cries/kricketot.aif differ diff --git a/sound/direct_sound_samples/cries/kricketune.aif b/sound/direct_sound_samples/cries/kricketune.aif index a11390f3f7..b3ebcbf8ae 100644 Binary files a/sound/direct_sound_samples/cries/kricketune.aif and b/sound/direct_sound_samples/cries/kricketune.aif differ diff --git a/sound/direct_sound_samples/cries/krokorok.aif b/sound/direct_sound_samples/cries/krokorok.aif index 2cf4ceff1f..39765627ec 100644 Binary files a/sound/direct_sound_samples/cries/krokorok.aif and b/sound/direct_sound_samples/cries/krokorok.aif differ diff --git a/sound/direct_sound_samples/cries/krookodile.aif b/sound/direct_sound_samples/cries/krookodile.aif index 4aa7ea4aed..4b532b3bd1 100644 Binary files a/sound/direct_sound_samples/cries/krookodile.aif and b/sound/direct_sound_samples/cries/krookodile.aif differ diff --git a/sound/direct_sound_samples/cries/kyogre.aif b/sound/direct_sound_samples/cries/kyogre.aif index 57790d75fa..c20d2cf324 100644 Binary files a/sound/direct_sound_samples/cries/kyogre.aif and b/sound/direct_sound_samples/cries/kyogre.aif differ diff --git a/sound/direct_sound_samples/cries/kyogre_primal.aif b/sound/direct_sound_samples/cries/kyogre_primal.aif index 605b8944ce..b7999915b3 100644 Binary files a/sound/direct_sound_samples/cries/kyogre_primal.aif and b/sound/direct_sound_samples/cries/kyogre_primal.aif differ diff --git a/sound/direct_sound_samples/cries/kyurem.aif b/sound/direct_sound_samples/cries/kyurem.aif index 036d6cf689..0345a0c175 100644 Binary files a/sound/direct_sound_samples/cries/kyurem.aif and b/sound/direct_sound_samples/cries/kyurem.aif differ diff --git a/sound/direct_sound_samples/cries/kyurem_black.aif b/sound/direct_sound_samples/cries/kyurem_black.aif index f5bd0cb4e7..9b5320bd63 100644 Binary files a/sound/direct_sound_samples/cries/kyurem_black.aif and b/sound/direct_sound_samples/cries/kyurem_black.aif differ diff --git a/sound/direct_sound_samples/cries/kyurem_white.aif b/sound/direct_sound_samples/cries/kyurem_white.aif index a9d7a5e58d..1e6f0283ec 100644 Binary files a/sound/direct_sound_samples/cries/kyurem_white.aif and b/sound/direct_sound_samples/cries/kyurem_white.aif differ diff --git a/sound/direct_sound_samples/cries/lairon.aif b/sound/direct_sound_samples/cries/lairon.aif index b1cf60b8af..44bc57df17 100644 Binary files a/sound/direct_sound_samples/cries/lairon.aif and b/sound/direct_sound_samples/cries/lairon.aif differ diff --git a/sound/direct_sound_samples/cries/lampent.aif b/sound/direct_sound_samples/cries/lampent.aif index 2f11c2ecfb..9d5a8a3c01 100644 Binary files a/sound/direct_sound_samples/cries/lampent.aif and b/sound/direct_sound_samples/cries/lampent.aif differ diff --git a/sound/direct_sound_samples/cries/landorus_incarnate.aif b/sound/direct_sound_samples/cries/landorus_incarnate.aif index 189c776668..03111963d7 100644 Binary files a/sound/direct_sound_samples/cries/landorus_incarnate.aif and b/sound/direct_sound_samples/cries/landorus_incarnate.aif differ diff --git a/sound/direct_sound_samples/cries/landorus_therian.aif b/sound/direct_sound_samples/cries/landorus_therian.aif index edd6fa349b..6a641cf6f4 100644 Binary files a/sound/direct_sound_samples/cries/landorus_therian.aif and b/sound/direct_sound_samples/cries/landorus_therian.aif differ diff --git a/sound/direct_sound_samples/cries/lanturn.aif b/sound/direct_sound_samples/cries/lanturn.aif index 11405a96db..e88570f68d 100644 Binary files a/sound/direct_sound_samples/cries/lanturn.aif and b/sound/direct_sound_samples/cries/lanturn.aif differ diff --git a/sound/direct_sound_samples/cries/lapras.aif b/sound/direct_sound_samples/cries/lapras.aif index 0725bcecb6..9bc9023730 100644 Binary files a/sound/direct_sound_samples/cries/lapras.aif and b/sound/direct_sound_samples/cries/lapras.aif differ diff --git a/sound/direct_sound_samples/cries/larvesta.aif b/sound/direct_sound_samples/cries/larvesta.aif index 4f3e484c8e..a025df32bf 100644 Binary files a/sound/direct_sound_samples/cries/larvesta.aif and b/sound/direct_sound_samples/cries/larvesta.aif differ diff --git a/sound/direct_sound_samples/cries/larvitar.aif b/sound/direct_sound_samples/cries/larvitar.aif index 45ad2c0488..fd91d5bc7d 100644 Binary files a/sound/direct_sound_samples/cries/larvitar.aif and b/sound/direct_sound_samples/cries/larvitar.aif differ diff --git a/sound/direct_sound_samples/cries/latias.aif b/sound/direct_sound_samples/cries/latias.aif index 546fe15971..90f558abc8 100644 Binary files a/sound/direct_sound_samples/cries/latias.aif and b/sound/direct_sound_samples/cries/latias.aif differ diff --git a/sound/direct_sound_samples/cries/latios.aif b/sound/direct_sound_samples/cries/latios.aif index f86a56fd88..f42446256c 100644 Binary files a/sound/direct_sound_samples/cries/latios.aif and b/sound/direct_sound_samples/cries/latios.aif differ diff --git a/sound/direct_sound_samples/cries/leafeon.aif b/sound/direct_sound_samples/cries/leafeon.aif index 048bfc8173..b3e7494b69 100644 Binary files a/sound/direct_sound_samples/cries/leafeon.aif and b/sound/direct_sound_samples/cries/leafeon.aif differ diff --git a/sound/direct_sound_samples/cries/leavanny.aif b/sound/direct_sound_samples/cries/leavanny.aif index 8399bb1cf3..503a08ffe8 100644 Binary files a/sound/direct_sound_samples/cries/leavanny.aif and b/sound/direct_sound_samples/cries/leavanny.aif differ diff --git a/sound/direct_sound_samples/cries/ledian.aif b/sound/direct_sound_samples/cries/ledian.aif index d659df6132..cbc86ba6ac 100644 Binary files a/sound/direct_sound_samples/cries/ledian.aif and b/sound/direct_sound_samples/cries/ledian.aif differ diff --git a/sound/direct_sound_samples/cries/ledyba.aif b/sound/direct_sound_samples/cries/ledyba.aif index 44e882cbdc..d90f684401 100644 Binary files a/sound/direct_sound_samples/cries/ledyba.aif and b/sound/direct_sound_samples/cries/ledyba.aif differ diff --git a/sound/direct_sound_samples/cries/lickilicky.aif b/sound/direct_sound_samples/cries/lickilicky.aif index 61b2c0f382..542bbcaf8b 100644 Binary files a/sound/direct_sound_samples/cries/lickilicky.aif and b/sound/direct_sound_samples/cries/lickilicky.aif differ diff --git a/sound/direct_sound_samples/cries/lickitung.aif b/sound/direct_sound_samples/cries/lickitung.aif index 0f4e697e5b..c21d1b0365 100644 Binary files a/sound/direct_sound_samples/cries/lickitung.aif and b/sound/direct_sound_samples/cries/lickitung.aif differ diff --git a/sound/direct_sound_samples/cries/liepard.aif b/sound/direct_sound_samples/cries/liepard.aif index 7432857bc1..eec210c0e7 100644 Binary files a/sound/direct_sound_samples/cries/liepard.aif and b/sound/direct_sound_samples/cries/liepard.aif differ diff --git a/sound/direct_sound_samples/cries/lileep.aif b/sound/direct_sound_samples/cries/lileep.aif index a178e72bf5..e1b750ba94 100644 Binary files a/sound/direct_sound_samples/cries/lileep.aif and b/sound/direct_sound_samples/cries/lileep.aif differ diff --git a/sound/direct_sound_samples/cries/lilligant.aif b/sound/direct_sound_samples/cries/lilligant.aif index 311c5affa8..e00b1aafc4 100644 Binary files a/sound/direct_sound_samples/cries/lilligant.aif and b/sound/direct_sound_samples/cries/lilligant.aif differ diff --git a/sound/direct_sound_samples/cries/lillipup.aif b/sound/direct_sound_samples/cries/lillipup.aif index 9a77e2596d..825f5054cf 100644 Binary files a/sound/direct_sound_samples/cries/lillipup.aif and b/sound/direct_sound_samples/cries/lillipup.aif differ diff --git a/sound/direct_sound_samples/cries/linoone.aif b/sound/direct_sound_samples/cries/linoone.aif index 326eca324c..1db1958d4c 100644 Binary files a/sound/direct_sound_samples/cries/linoone.aif and b/sound/direct_sound_samples/cries/linoone.aif differ diff --git a/sound/direct_sound_samples/cries/litleo.aif b/sound/direct_sound_samples/cries/litleo.aif index bb203758d6..417d3d4708 100644 Binary files a/sound/direct_sound_samples/cries/litleo.aif and b/sound/direct_sound_samples/cries/litleo.aif differ diff --git a/sound/direct_sound_samples/cries/litten.aif b/sound/direct_sound_samples/cries/litten.aif index 613be44f76..c2c486dd98 100644 Binary files a/sound/direct_sound_samples/cries/litten.aif and b/sound/direct_sound_samples/cries/litten.aif differ diff --git a/sound/direct_sound_samples/cries/litwick.aif b/sound/direct_sound_samples/cries/litwick.aif index 6759c29beb..c13b749200 100644 Binary files a/sound/direct_sound_samples/cries/litwick.aif and b/sound/direct_sound_samples/cries/litwick.aif differ diff --git a/sound/direct_sound_samples/cries/lokix.aif b/sound/direct_sound_samples/cries/lokix.aif index c323e2658c..739ae1ad56 100644 Binary files a/sound/direct_sound_samples/cries/lokix.aif and b/sound/direct_sound_samples/cries/lokix.aif differ diff --git a/sound/direct_sound_samples/cries/lombre.aif b/sound/direct_sound_samples/cries/lombre.aif index 04f7b6e77f..3839f7a327 100644 Binary files a/sound/direct_sound_samples/cries/lombre.aif and b/sound/direct_sound_samples/cries/lombre.aif differ diff --git a/sound/direct_sound_samples/cries/lopunny.aif b/sound/direct_sound_samples/cries/lopunny.aif index 1db6d7641c..f793790785 100644 Binary files a/sound/direct_sound_samples/cries/lopunny.aif and b/sound/direct_sound_samples/cries/lopunny.aif differ diff --git a/sound/direct_sound_samples/cries/lopunny_mega.aif b/sound/direct_sound_samples/cries/lopunny_mega.aif index 1331ca106b..212df776de 100644 Binary files a/sound/direct_sound_samples/cries/lopunny_mega.aif and b/sound/direct_sound_samples/cries/lopunny_mega.aif differ diff --git a/sound/direct_sound_samples/cries/lotad.aif b/sound/direct_sound_samples/cries/lotad.aif index a8071ef96f..290ec54859 100644 Binary files a/sound/direct_sound_samples/cries/lotad.aif and b/sound/direct_sound_samples/cries/lotad.aif differ diff --git a/sound/direct_sound_samples/cries/loudred.aif b/sound/direct_sound_samples/cries/loudred.aif index 2ac4687cf0..d9c7465573 100644 Binary files a/sound/direct_sound_samples/cries/loudred.aif and b/sound/direct_sound_samples/cries/loudred.aif differ diff --git a/sound/direct_sound_samples/cries/lucario.aif b/sound/direct_sound_samples/cries/lucario.aif index fece384219..80064d64fb 100644 Binary files a/sound/direct_sound_samples/cries/lucario.aif and b/sound/direct_sound_samples/cries/lucario.aif differ diff --git a/sound/direct_sound_samples/cries/ludicolo.aif b/sound/direct_sound_samples/cries/ludicolo.aif index a4e773e901..690cf75fe4 100644 Binary files a/sound/direct_sound_samples/cries/ludicolo.aif and b/sound/direct_sound_samples/cries/ludicolo.aif differ diff --git a/sound/direct_sound_samples/cries/lugia.aif b/sound/direct_sound_samples/cries/lugia.aif index 6c96ba141e..884b48591e 100644 Binary files a/sound/direct_sound_samples/cries/lugia.aif and b/sound/direct_sound_samples/cries/lugia.aif differ diff --git a/sound/direct_sound_samples/cries/lumineon.aif b/sound/direct_sound_samples/cries/lumineon.aif index a6a2cca2c2..0577fb5575 100644 Binary files a/sound/direct_sound_samples/cries/lumineon.aif and b/sound/direct_sound_samples/cries/lumineon.aif differ diff --git a/sound/direct_sound_samples/cries/lunala.aif b/sound/direct_sound_samples/cries/lunala.aif index 5786ac42c0..d95185de79 100644 Binary files a/sound/direct_sound_samples/cries/lunala.aif and b/sound/direct_sound_samples/cries/lunala.aif differ diff --git a/sound/direct_sound_samples/cries/lunatone.aif b/sound/direct_sound_samples/cries/lunatone.aif index 468e60bc96..e27d7f2f60 100644 Binary files a/sound/direct_sound_samples/cries/lunatone.aif and b/sound/direct_sound_samples/cries/lunatone.aif differ diff --git a/sound/direct_sound_samples/cries/lurantis.aif b/sound/direct_sound_samples/cries/lurantis.aif index f6a8019b68..36ab7d71e2 100644 Binary files a/sound/direct_sound_samples/cries/lurantis.aif and b/sound/direct_sound_samples/cries/lurantis.aif differ diff --git a/sound/direct_sound_samples/cries/luvdisc.aif b/sound/direct_sound_samples/cries/luvdisc.aif index 72aa538f18..396aceff5e 100644 Binary files a/sound/direct_sound_samples/cries/luvdisc.aif and b/sound/direct_sound_samples/cries/luvdisc.aif differ diff --git a/sound/direct_sound_samples/cries/luxio.aif b/sound/direct_sound_samples/cries/luxio.aif index 50019c217e..f56ffe1ea0 100644 Binary files a/sound/direct_sound_samples/cries/luxio.aif and b/sound/direct_sound_samples/cries/luxio.aif differ diff --git a/sound/direct_sound_samples/cries/luxray.aif b/sound/direct_sound_samples/cries/luxray.aif index 2401fe11e2..76bf5cb5d1 100644 Binary files a/sound/direct_sound_samples/cries/luxray.aif and b/sound/direct_sound_samples/cries/luxray.aif differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midday.aif b/sound/direct_sound_samples/cries/lycanroc_midday.aif index 0f117bc947..380d192c22 100644 Binary files a/sound/direct_sound_samples/cries/lycanroc_midday.aif and b/sound/direct_sound_samples/cries/lycanroc_midday.aif differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midnight.aif b/sound/direct_sound_samples/cries/lycanroc_midnight.aif index f470d006b5..e81dac8c3e 100644 Binary files a/sound/direct_sound_samples/cries/lycanroc_midnight.aif and b/sound/direct_sound_samples/cries/lycanroc_midnight.aif differ diff --git a/sound/direct_sound_samples/cries/mabosstiff.aif b/sound/direct_sound_samples/cries/mabosstiff.aif index ccf661e6ca..b66bbf731f 100644 Binary files a/sound/direct_sound_samples/cries/mabosstiff.aif and b/sound/direct_sound_samples/cries/mabosstiff.aif differ diff --git a/sound/direct_sound_samples/cries/machamp.aif b/sound/direct_sound_samples/cries/machamp.aif index 7337dc341d..99bcfea898 100644 Binary files a/sound/direct_sound_samples/cries/machamp.aif and b/sound/direct_sound_samples/cries/machamp.aif differ diff --git a/sound/direct_sound_samples/cries/machoke.aif b/sound/direct_sound_samples/cries/machoke.aif index 6b590cdd0b..241731b6fe 100644 Binary files a/sound/direct_sound_samples/cries/machoke.aif and b/sound/direct_sound_samples/cries/machoke.aif differ diff --git a/sound/direct_sound_samples/cries/machop.aif b/sound/direct_sound_samples/cries/machop.aif index 28e749a3a7..c878dfe99f 100644 Binary files a/sound/direct_sound_samples/cries/machop.aif and b/sound/direct_sound_samples/cries/machop.aif differ diff --git a/sound/direct_sound_samples/cries/magby.aif b/sound/direct_sound_samples/cries/magby.aif index 0b6a5c8cf0..69f77a3b35 100644 Binary files a/sound/direct_sound_samples/cries/magby.aif and b/sound/direct_sound_samples/cries/magby.aif differ diff --git a/sound/direct_sound_samples/cries/magcargo.aif b/sound/direct_sound_samples/cries/magcargo.aif index 10c2a34515..f1127dabc4 100644 Binary files a/sound/direct_sound_samples/cries/magcargo.aif and b/sound/direct_sound_samples/cries/magcargo.aif differ diff --git a/sound/direct_sound_samples/cries/magearna.aif b/sound/direct_sound_samples/cries/magearna.aif index f07533638a..2e01fe5aa3 100644 Binary files a/sound/direct_sound_samples/cries/magearna.aif and b/sound/direct_sound_samples/cries/magearna.aif differ diff --git a/sound/direct_sound_samples/cries/magikarp.aif b/sound/direct_sound_samples/cries/magikarp.aif index f5f9ce213c..71bdbf3939 100644 Binary files a/sound/direct_sound_samples/cries/magikarp.aif and b/sound/direct_sound_samples/cries/magikarp.aif differ diff --git a/sound/direct_sound_samples/cries/magmar.aif b/sound/direct_sound_samples/cries/magmar.aif index 1dfa93acda..c2a6a171ae 100644 Binary files a/sound/direct_sound_samples/cries/magmar.aif and b/sound/direct_sound_samples/cries/magmar.aif differ diff --git a/sound/direct_sound_samples/cries/magmortar.aif b/sound/direct_sound_samples/cries/magmortar.aif index 3c1916ab30..ae7f0ea502 100644 Binary files a/sound/direct_sound_samples/cries/magmortar.aif and b/sound/direct_sound_samples/cries/magmortar.aif differ diff --git a/sound/direct_sound_samples/cries/magnemite.aif b/sound/direct_sound_samples/cries/magnemite.aif index 52de6ab69c..d468102ac9 100644 Binary files a/sound/direct_sound_samples/cries/magnemite.aif and b/sound/direct_sound_samples/cries/magnemite.aif differ diff --git a/sound/direct_sound_samples/cries/magneton.aif b/sound/direct_sound_samples/cries/magneton.aif index e9ab131cf9..30327cdbc3 100644 Binary files a/sound/direct_sound_samples/cries/magneton.aif and b/sound/direct_sound_samples/cries/magneton.aif differ diff --git a/sound/direct_sound_samples/cries/magnezone.aif b/sound/direct_sound_samples/cries/magnezone.aif index db1a6b5f05..750cbd3ac4 100644 Binary files a/sound/direct_sound_samples/cries/magnezone.aif and b/sound/direct_sound_samples/cries/magnezone.aif differ diff --git a/sound/direct_sound_samples/cries/makuhita.aif b/sound/direct_sound_samples/cries/makuhita.aif index 8445adf5df..2dffab4bcc 100644 Binary files a/sound/direct_sound_samples/cries/makuhita.aif and b/sound/direct_sound_samples/cries/makuhita.aif differ diff --git a/sound/direct_sound_samples/cries/malamar.aif b/sound/direct_sound_samples/cries/malamar.aif index f5b63bc52d..80428bfb16 100644 Binary files a/sound/direct_sound_samples/cries/malamar.aif and b/sound/direct_sound_samples/cries/malamar.aif differ diff --git a/sound/direct_sound_samples/cries/mamoswine.aif b/sound/direct_sound_samples/cries/mamoswine.aif index 034df6a61b..48625c1a6f 100644 Binary files a/sound/direct_sound_samples/cries/mamoswine.aif and b/sound/direct_sound_samples/cries/mamoswine.aif differ diff --git a/sound/direct_sound_samples/cries/manaphy.aif b/sound/direct_sound_samples/cries/manaphy.aif index d7f80902b5..7df4dc8338 100644 Binary files a/sound/direct_sound_samples/cries/manaphy.aif and b/sound/direct_sound_samples/cries/manaphy.aif differ diff --git a/sound/direct_sound_samples/cries/mandibuzz.aif b/sound/direct_sound_samples/cries/mandibuzz.aif index 3f12088d0a..1a3a3afec3 100644 Binary files a/sound/direct_sound_samples/cries/mandibuzz.aif and b/sound/direct_sound_samples/cries/mandibuzz.aif differ diff --git a/sound/direct_sound_samples/cries/manectric.aif b/sound/direct_sound_samples/cries/manectric.aif index a96712010a..cb0783a0c9 100644 Binary files a/sound/direct_sound_samples/cries/manectric.aif and b/sound/direct_sound_samples/cries/manectric.aif differ diff --git a/sound/direct_sound_samples/cries/manectric_mega.aif b/sound/direct_sound_samples/cries/manectric_mega.aif index ad38ec0ffc..6e9717fe89 100644 Binary files a/sound/direct_sound_samples/cries/manectric_mega.aif and b/sound/direct_sound_samples/cries/manectric_mega.aif differ diff --git a/sound/direct_sound_samples/cries/mankey.aif b/sound/direct_sound_samples/cries/mankey.aif index 3a94289acb..b2634d3f7b 100644 Binary files a/sound/direct_sound_samples/cries/mankey.aif and b/sound/direct_sound_samples/cries/mankey.aif differ diff --git a/sound/direct_sound_samples/cries/mantine.aif b/sound/direct_sound_samples/cries/mantine.aif index 62c3b4096d..f3f6af3213 100644 Binary files a/sound/direct_sound_samples/cries/mantine.aif and b/sound/direct_sound_samples/cries/mantine.aif differ diff --git a/sound/direct_sound_samples/cries/mantyke.aif b/sound/direct_sound_samples/cries/mantyke.aif index bbb805e7eb..edf6a76ef1 100644 Binary files a/sound/direct_sound_samples/cries/mantyke.aif and b/sound/direct_sound_samples/cries/mantyke.aif differ diff --git a/sound/direct_sound_samples/cries/maractus.aif b/sound/direct_sound_samples/cries/maractus.aif index 16058d97cc..ad2488ec86 100644 Binary files a/sound/direct_sound_samples/cries/maractus.aif and b/sound/direct_sound_samples/cries/maractus.aif differ diff --git a/sound/direct_sound_samples/cries/mareanie.aif b/sound/direct_sound_samples/cries/mareanie.aif index de6c86b213..75a73d5edb 100644 Binary files a/sound/direct_sound_samples/cries/mareanie.aif and b/sound/direct_sound_samples/cries/mareanie.aif differ diff --git a/sound/direct_sound_samples/cries/mareep.aif b/sound/direct_sound_samples/cries/mareep.aif index f47b417018..2dfc9e88bc 100644 Binary files a/sound/direct_sound_samples/cries/mareep.aif and b/sound/direct_sound_samples/cries/mareep.aif differ diff --git a/sound/direct_sound_samples/cries/marill.aif b/sound/direct_sound_samples/cries/marill.aif index 2483f62db3..1c3b6bc41f 100644 Binary files a/sound/direct_sound_samples/cries/marill.aif and b/sound/direct_sound_samples/cries/marill.aif differ diff --git a/sound/direct_sound_samples/cries/marowak.aif b/sound/direct_sound_samples/cries/marowak.aif index a8567b32d0..c081ba9f9d 100644 Binary files a/sound/direct_sound_samples/cries/marowak.aif and b/sound/direct_sound_samples/cries/marowak.aif differ diff --git a/sound/direct_sound_samples/cries/marshadow.aif b/sound/direct_sound_samples/cries/marshadow.aif index a763d4abb8..3092b639f2 100644 Binary files a/sound/direct_sound_samples/cries/marshadow.aif and b/sound/direct_sound_samples/cries/marshadow.aif differ diff --git a/sound/direct_sound_samples/cries/marshtomp.aif b/sound/direct_sound_samples/cries/marshtomp.aif index 11ea04d0cd..79728eb087 100644 Binary files a/sound/direct_sound_samples/cries/marshtomp.aif and b/sound/direct_sound_samples/cries/marshtomp.aif differ diff --git a/sound/direct_sound_samples/cries/masquerain.aif b/sound/direct_sound_samples/cries/masquerain.aif index 34f079f152..e3ef3b9d81 100644 Binary files a/sound/direct_sound_samples/cries/masquerain.aif and b/sound/direct_sound_samples/cries/masquerain.aif differ diff --git a/sound/direct_sound_samples/cries/maushold_family_of_three.aif b/sound/direct_sound_samples/cries/maushold_family_of_three.aif index 7412a1af6a..0e771535ea 100644 Binary files a/sound/direct_sound_samples/cries/maushold_family_of_three.aif and b/sound/direct_sound_samples/cries/maushold_family_of_three.aif differ diff --git a/sound/direct_sound_samples/cries/mawile.aif b/sound/direct_sound_samples/cries/mawile.aif index e14dd5a4e4..8374bf4797 100644 Binary files a/sound/direct_sound_samples/cries/mawile.aif and b/sound/direct_sound_samples/cries/mawile.aif differ diff --git a/sound/direct_sound_samples/cries/medicham.aif b/sound/direct_sound_samples/cries/medicham.aif index d081dc9002..02818ba0dd 100644 Binary files a/sound/direct_sound_samples/cries/medicham.aif and b/sound/direct_sound_samples/cries/medicham.aif differ diff --git a/sound/direct_sound_samples/cries/medicham_mega.aif b/sound/direct_sound_samples/cries/medicham_mega.aif index f00672f3cb..36db11b2f7 100644 Binary files a/sound/direct_sound_samples/cries/medicham_mega.aif and b/sound/direct_sound_samples/cries/medicham_mega.aif differ diff --git a/sound/direct_sound_samples/cries/meditite.aif b/sound/direct_sound_samples/cries/meditite.aif index a82eb84220..e3dc9dd802 100644 Binary files a/sound/direct_sound_samples/cries/meditite.aif and b/sound/direct_sound_samples/cries/meditite.aif differ diff --git a/sound/direct_sound_samples/cries/meganium.aif b/sound/direct_sound_samples/cries/meganium.aif index b06ad52c22..abada35482 100644 Binary files a/sound/direct_sound_samples/cries/meganium.aif and b/sound/direct_sound_samples/cries/meganium.aif differ diff --git a/sound/direct_sound_samples/cries/melmetal.aif b/sound/direct_sound_samples/cries/melmetal.aif index d9a2e0928b..5590164d1e 100644 Binary files a/sound/direct_sound_samples/cries/melmetal.aif and b/sound/direct_sound_samples/cries/melmetal.aif differ diff --git a/sound/direct_sound_samples/cries/meloetta.aif b/sound/direct_sound_samples/cries/meloetta.aif index d2be5ac97f..298a5214be 100644 Binary files a/sound/direct_sound_samples/cries/meloetta.aif and b/sound/direct_sound_samples/cries/meloetta.aif differ diff --git a/sound/direct_sound_samples/cries/meltan.aif b/sound/direct_sound_samples/cries/meltan.aif index c3bd648e3a..42b258f517 100644 Binary files a/sound/direct_sound_samples/cries/meltan.aif and b/sound/direct_sound_samples/cries/meltan.aif differ diff --git a/sound/direct_sound_samples/cries/meowstic.aif b/sound/direct_sound_samples/cries/meowstic.aif index 0d356edeb1..a8536832b2 100644 Binary files a/sound/direct_sound_samples/cries/meowstic.aif and b/sound/direct_sound_samples/cries/meowstic.aif differ diff --git a/sound/direct_sound_samples/cries/meowth.aif b/sound/direct_sound_samples/cries/meowth.aif index 9ba028cfb7..d919e99e63 100644 Binary files a/sound/direct_sound_samples/cries/meowth.aif and b/sound/direct_sound_samples/cries/meowth.aif differ diff --git a/sound/direct_sound_samples/cries/mesprit.aif b/sound/direct_sound_samples/cries/mesprit.aif index 4996d3f4b7..0c76a7f0f4 100644 Binary files a/sound/direct_sound_samples/cries/mesprit.aif and b/sound/direct_sound_samples/cries/mesprit.aif differ diff --git a/sound/direct_sound_samples/cries/metagross.aif b/sound/direct_sound_samples/cries/metagross.aif index f4a0f99acd..bb3bc21c67 100644 Binary files a/sound/direct_sound_samples/cries/metagross.aif and b/sound/direct_sound_samples/cries/metagross.aif differ diff --git a/sound/direct_sound_samples/cries/metagross_mega.aif b/sound/direct_sound_samples/cries/metagross_mega.aif index 3f9ca589cf..e1125b659f 100644 Binary files a/sound/direct_sound_samples/cries/metagross_mega.aif and b/sound/direct_sound_samples/cries/metagross_mega.aif differ diff --git a/sound/direct_sound_samples/cries/metang.aif b/sound/direct_sound_samples/cries/metang.aif index df249ec540..225cdfbfe1 100644 Binary files a/sound/direct_sound_samples/cries/metang.aif and b/sound/direct_sound_samples/cries/metang.aif differ diff --git a/sound/direct_sound_samples/cries/metapod.aif b/sound/direct_sound_samples/cries/metapod.aif index de04d69de6..e875755db0 100644 Binary files a/sound/direct_sound_samples/cries/metapod.aif and b/sound/direct_sound_samples/cries/metapod.aif differ diff --git a/sound/direct_sound_samples/cries/mew.aif b/sound/direct_sound_samples/cries/mew.aif index 166a0a8e95..f0649ee6f8 100644 Binary files a/sound/direct_sound_samples/cries/mew.aif and b/sound/direct_sound_samples/cries/mew.aif differ diff --git a/sound/direct_sound_samples/cries/mewtwo.aif b/sound/direct_sound_samples/cries/mewtwo.aif index c5a5309ba6..2bafa47083 100644 Binary files a/sound/direct_sound_samples/cries/mewtwo.aif and b/sound/direct_sound_samples/cries/mewtwo.aif differ diff --git a/sound/direct_sound_samples/cries/mienfoo.aif b/sound/direct_sound_samples/cries/mienfoo.aif index f948e6f3d9..5f9525d87e 100644 Binary files a/sound/direct_sound_samples/cries/mienfoo.aif and b/sound/direct_sound_samples/cries/mienfoo.aif differ diff --git a/sound/direct_sound_samples/cries/mienshao.aif b/sound/direct_sound_samples/cries/mienshao.aif index 652be57339..da04c18fc9 100644 Binary files a/sound/direct_sound_samples/cries/mienshao.aif and b/sound/direct_sound_samples/cries/mienshao.aif differ diff --git a/sound/direct_sound_samples/cries/mightyena.aif b/sound/direct_sound_samples/cries/mightyena.aif index 7c7f74d1f1..099c8b9c7b 100644 Binary files a/sound/direct_sound_samples/cries/mightyena.aif and b/sound/direct_sound_samples/cries/mightyena.aif differ diff --git a/sound/direct_sound_samples/cries/milotic.aif b/sound/direct_sound_samples/cries/milotic.aif index be1e64eacb..796a87f358 100644 Binary files a/sound/direct_sound_samples/cries/milotic.aif and b/sound/direct_sound_samples/cries/milotic.aif differ diff --git a/sound/direct_sound_samples/cries/miltank.aif b/sound/direct_sound_samples/cries/miltank.aif index db64e8867d..cb8ad93ce9 100644 Binary files a/sound/direct_sound_samples/cries/miltank.aif and b/sound/direct_sound_samples/cries/miltank.aif differ diff --git a/sound/direct_sound_samples/cries/mime_jr.aif b/sound/direct_sound_samples/cries/mime_jr.aif index 1b12debbc3..604c678fae 100644 Binary files a/sound/direct_sound_samples/cries/mime_jr.aif and b/sound/direct_sound_samples/cries/mime_jr.aif differ diff --git a/sound/direct_sound_samples/cries/mimikyu.aif b/sound/direct_sound_samples/cries/mimikyu.aif index b86eaedaa5..15f3720dc7 100644 Binary files a/sound/direct_sound_samples/cries/mimikyu.aif and b/sound/direct_sound_samples/cries/mimikyu.aif differ diff --git a/sound/direct_sound_samples/cries/minccino.aif b/sound/direct_sound_samples/cries/minccino.aif index c10f3f7c9f..d49eb07414 100644 Binary files a/sound/direct_sound_samples/cries/minccino.aif and b/sound/direct_sound_samples/cries/minccino.aif differ diff --git a/sound/direct_sound_samples/cries/minior.aif b/sound/direct_sound_samples/cries/minior.aif index 0fa7d903c9..d739824e04 100644 Binary files a/sound/direct_sound_samples/cries/minior.aif and b/sound/direct_sound_samples/cries/minior.aif differ diff --git a/sound/direct_sound_samples/cries/minun.aif b/sound/direct_sound_samples/cries/minun.aif index fe1a72aacf..1b0d3405b9 100644 Binary files a/sound/direct_sound_samples/cries/minun.aif and b/sound/direct_sound_samples/cries/minun.aif differ diff --git a/sound/direct_sound_samples/cries/misdreavus.aif b/sound/direct_sound_samples/cries/misdreavus.aif index a501b547b6..774a832ea1 100644 Binary files a/sound/direct_sound_samples/cries/misdreavus.aif and b/sound/direct_sound_samples/cries/misdreavus.aif differ diff --git a/sound/direct_sound_samples/cries/mismagius.aif b/sound/direct_sound_samples/cries/mismagius.aif index f010b49316..a9146205ba 100644 Binary files a/sound/direct_sound_samples/cries/mismagius.aif and b/sound/direct_sound_samples/cries/mismagius.aif differ diff --git a/sound/direct_sound_samples/cries/moltres.aif b/sound/direct_sound_samples/cries/moltres.aif index 5549bf5cb7..39570a316c 100644 Binary files a/sound/direct_sound_samples/cries/moltres.aif and b/sound/direct_sound_samples/cries/moltres.aif differ diff --git a/sound/direct_sound_samples/cries/monferno.aif b/sound/direct_sound_samples/cries/monferno.aif index 8b8d670505..4f34c1de91 100644 Binary files a/sound/direct_sound_samples/cries/monferno.aif and b/sound/direct_sound_samples/cries/monferno.aif differ diff --git a/sound/direct_sound_samples/cries/morelull.aif b/sound/direct_sound_samples/cries/morelull.aif index 78ee2ffc63..0b38baf6a4 100644 Binary files a/sound/direct_sound_samples/cries/morelull.aif and b/sound/direct_sound_samples/cries/morelull.aif differ diff --git a/sound/direct_sound_samples/cries/mothim.aif b/sound/direct_sound_samples/cries/mothim.aif index 82a42bce34..d2a2c7b8c3 100644 Binary files a/sound/direct_sound_samples/cries/mothim.aif and b/sound/direct_sound_samples/cries/mothim.aif differ diff --git a/sound/direct_sound_samples/cries/mr_mime.aif b/sound/direct_sound_samples/cries/mr_mime.aif index ca89f4bc2e..991eeb9d1c 100644 Binary files a/sound/direct_sound_samples/cries/mr_mime.aif and b/sound/direct_sound_samples/cries/mr_mime.aif differ diff --git a/sound/direct_sound_samples/cries/mudbray.aif b/sound/direct_sound_samples/cries/mudbray.aif index 3874a9c2a8..f7d0c8b287 100644 Binary files a/sound/direct_sound_samples/cries/mudbray.aif and b/sound/direct_sound_samples/cries/mudbray.aif differ diff --git a/sound/direct_sound_samples/cries/mudkip.aif b/sound/direct_sound_samples/cries/mudkip.aif index adbdda2906..0162f94001 100644 Binary files a/sound/direct_sound_samples/cries/mudkip.aif and b/sound/direct_sound_samples/cries/mudkip.aif differ diff --git a/sound/direct_sound_samples/cries/mudsdale.aif b/sound/direct_sound_samples/cries/mudsdale.aif index 564019f27e..2776ec02da 100644 Binary files a/sound/direct_sound_samples/cries/mudsdale.aif and b/sound/direct_sound_samples/cries/mudsdale.aif differ diff --git a/sound/direct_sound_samples/cries/muk.aif b/sound/direct_sound_samples/cries/muk.aif index 557bb84ec7..2abfd59591 100644 Binary files a/sound/direct_sound_samples/cries/muk.aif and b/sound/direct_sound_samples/cries/muk.aif differ diff --git a/sound/direct_sound_samples/cries/munchlax.aif b/sound/direct_sound_samples/cries/munchlax.aif index befbcdb589..ce347a32f4 100644 Binary files a/sound/direct_sound_samples/cries/munchlax.aif and b/sound/direct_sound_samples/cries/munchlax.aif differ diff --git a/sound/direct_sound_samples/cries/munna.aif b/sound/direct_sound_samples/cries/munna.aif index 35167be4a2..443bb80899 100644 Binary files a/sound/direct_sound_samples/cries/munna.aif and b/sound/direct_sound_samples/cries/munna.aif differ diff --git a/sound/direct_sound_samples/cries/murkrow.aif b/sound/direct_sound_samples/cries/murkrow.aif index ab42b84a95..1e7c6dd792 100644 Binary files a/sound/direct_sound_samples/cries/murkrow.aif and b/sound/direct_sound_samples/cries/murkrow.aif differ diff --git a/sound/direct_sound_samples/cries/musharna.aif b/sound/direct_sound_samples/cries/musharna.aif index 406f56576f..69dd2800cf 100644 Binary files a/sound/direct_sound_samples/cries/musharna.aif and b/sound/direct_sound_samples/cries/musharna.aif differ diff --git a/sound/direct_sound_samples/cries/naclstack.aif b/sound/direct_sound_samples/cries/naclstack.aif index 973fb82281..31eca0bd49 100644 Binary files a/sound/direct_sound_samples/cries/naclstack.aif and b/sound/direct_sound_samples/cries/naclstack.aif differ diff --git a/sound/direct_sound_samples/cries/naganadel.aif b/sound/direct_sound_samples/cries/naganadel.aif index b8c34ce627..4cd829612b 100644 Binary files a/sound/direct_sound_samples/cries/naganadel.aif and b/sound/direct_sound_samples/cries/naganadel.aif differ diff --git a/sound/direct_sound_samples/cries/natu.aif b/sound/direct_sound_samples/cries/natu.aif index a492cc5d39..7609439888 100644 Binary files a/sound/direct_sound_samples/cries/natu.aif and b/sound/direct_sound_samples/cries/natu.aif differ diff --git a/sound/direct_sound_samples/cries/necrozma.aif b/sound/direct_sound_samples/cries/necrozma.aif index ecd5cb79c0..db81bc135a 100644 Binary files a/sound/direct_sound_samples/cries/necrozma.aif and b/sound/direct_sound_samples/cries/necrozma.aif differ diff --git a/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif b/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif index c5cc9c4fb0..f33539121e 100644 Binary files a/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif and b/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif differ diff --git a/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif b/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif index 3a31dc8e59..fce3fb2f61 100644 Binary files a/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif and b/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif differ diff --git a/sound/direct_sound_samples/cries/necrozma_ultra.aif b/sound/direct_sound_samples/cries/necrozma_ultra.aif index e9fb9a5647..cfc9c5f27b 100644 Binary files a/sound/direct_sound_samples/cries/necrozma_ultra.aif and b/sound/direct_sound_samples/cries/necrozma_ultra.aif differ diff --git a/sound/direct_sound_samples/cries/nidoking.aif b/sound/direct_sound_samples/cries/nidoking.aif index 43fadf9897..5a645ca83a 100644 Binary files a/sound/direct_sound_samples/cries/nidoking.aif and b/sound/direct_sound_samples/cries/nidoking.aif differ diff --git a/sound/direct_sound_samples/cries/nidoqueen.aif b/sound/direct_sound_samples/cries/nidoqueen.aif index 6f1c4ef167..878570d3f6 100644 Binary files a/sound/direct_sound_samples/cries/nidoqueen.aif and b/sound/direct_sound_samples/cries/nidoqueen.aif differ diff --git a/sound/direct_sound_samples/cries/nidoran_f.aif b/sound/direct_sound_samples/cries/nidoran_f.aif index a8ecf4b4a0..cf02133949 100644 Binary files a/sound/direct_sound_samples/cries/nidoran_f.aif and b/sound/direct_sound_samples/cries/nidoran_f.aif differ diff --git a/sound/direct_sound_samples/cries/nidoran_m.aif b/sound/direct_sound_samples/cries/nidoran_m.aif index bb2de057e4..2e691595bf 100644 Binary files a/sound/direct_sound_samples/cries/nidoran_m.aif and b/sound/direct_sound_samples/cries/nidoran_m.aif differ diff --git a/sound/direct_sound_samples/cries/nidorina.aif b/sound/direct_sound_samples/cries/nidorina.aif index ce56909917..3f73fd947f 100644 Binary files a/sound/direct_sound_samples/cries/nidorina.aif and b/sound/direct_sound_samples/cries/nidorina.aif differ diff --git a/sound/direct_sound_samples/cries/nidorino.aif b/sound/direct_sound_samples/cries/nidorino.aif index dcc1629e4b..75e48cc721 100644 Binary files a/sound/direct_sound_samples/cries/nidorino.aif and b/sound/direct_sound_samples/cries/nidorino.aif differ diff --git a/sound/direct_sound_samples/cries/nihilego.aif b/sound/direct_sound_samples/cries/nihilego.aif index 1e428ec28a..17c56e8cbf 100644 Binary files a/sound/direct_sound_samples/cries/nihilego.aif and b/sound/direct_sound_samples/cries/nihilego.aif differ diff --git a/sound/direct_sound_samples/cries/nincada.aif b/sound/direct_sound_samples/cries/nincada.aif index 0897f56df4..d4695111cd 100644 Binary files a/sound/direct_sound_samples/cries/nincada.aif and b/sound/direct_sound_samples/cries/nincada.aif differ diff --git a/sound/direct_sound_samples/cries/ninetales.aif b/sound/direct_sound_samples/cries/ninetales.aif index aa31af7a8c..51a260f9e9 100644 Binary files a/sound/direct_sound_samples/cries/ninetales.aif and b/sound/direct_sound_samples/cries/ninetales.aif differ diff --git a/sound/direct_sound_samples/cries/ninjask.aif b/sound/direct_sound_samples/cries/ninjask.aif index f5b32b13ed..06693156a7 100644 Binary files a/sound/direct_sound_samples/cries/ninjask.aif and b/sound/direct_sound_samples/cries/ninjask.aif differ diff --git a/sound/direct_sound_samples/cries/noctowl.aif b/sound/direct_sound_samples/cries/noctowl.aif index 9cb1b31653..2a96488f28 100644 Binary files a/sound/direct_sound_samples/cries/noctowl.aif and b/sound/direct_sound_samples/cries/noctowl.aif differ diff --git a/sound/direct_sound_samples/cries/noibat.aif b/sound/direct_sound_samples/cries/noibat.aif index a00200aab0..6f3c18f40d 100644 Binary files a/sound/direct_sound_samples/cries/noibat.aif and b/sound/direct_sound_samples/cries/noibat.aif differ diff --git a/sound/direct_sound_samples/cries/noivern.aif b/sound/direct_sound_samples/cries/noivern.aif index aaf03806d7..5806e69713 100644 Binary files a/sound/direct_sound_samples/cries/noivern.aif and b/sound/direct_sound_samples/cries/noivern.aif differ diff --git a/sound/direct_sound_samples/cries/nosepass.aif b/sound/direct_sound_samples/cries/nosepass.aif index f45dc7578f..04c28caa6b 100644 Binary files a/sound/direct_sound_samples/cries/nosepass.aif and b/sound/direct_sound_samples/cries/nosepass.aif differ diff --git a/sound/direct_sound_samples/cries/numel.aif b/sound/direct_sound_samples/cries/numel.aif index e81623531e..9d6c2e0517 100644 Binary files a/sound/direct_sound_samples/cries/numel.aif and b/sound/direct_sound_samples/cries/numel.aif differ diff --git a/sound/direct_sound_samples/cries/nuzleaf.aif b/sound/direct_sound_samples/cries/nuzleaf.aif index 275b4d1782..2d836705be 100644 Binary files a/sound/direct_sound_samples/cries/nuzleaf.aif and b/sound/direct_sound_samples/cries/nuzleaf.aif differ diff --git a/sound/direct_sound_samples/cries/nymble.aif b/sound/direct_sound_samples/cries/nymble.aif index b74a198b2b..bc41462fb6 100644 Binary files a/sound/direct_sound_samples/cries/nymble.aif and b/sound/direct_sound_samples/cries/nymble.aif differ diff --git a/sound/direct_sound_samples/cries/octillery.aif b/sound/direct_sound_samples/cries/octillery.aif index f52b7978e5..1964004551 100644 Binary files a/sound/direct_sound_samples/cries/octillery.aif and b/sound/direct_sound_samples/cries/octillery.aif differ diff --git a/sound/direct_sound_samples/cries/oddish.aif b/sound/direct_sound_samples/cries/oddish.aif index 2c9902bb20..4f30f7ddb4 100644 Binary files a/sound/direct_sound_samples/cries/oddish.aif and b/sound/direct_sound_samples/cries/oddish.aif differ diff --git a/sound/direct_sound_samples/cries/ogerpon.aif b/sound/direct_sound_samples/cries/ogerpon.aif index e5cb2f7bad..17b9d94d62 100644 Binary files a/sound/direct_sound_samples/cries/ogerpon.aif and b/sound/direct_sound_samples/cries/ogerpon.aif differ diff --git a/sound/direct_sound_samples/cries/okidogi.aif b/sound/direct_sound_samples/cries/okidogi.aif index afa9cfbddd..f22f3ba335 100644 Binary files a/sound/direct_sound_samples/cries/okidogi.aif and b/sound/direct_sound_samples/cries/okidogi.aif differ diff --git a/sound/direct_sound_samples/cries/omanyte.aif b/sound/direct_sound_samples/cries/omanyte.aif index 7ee0a8e3fe..eeedac34db 100644 Binary files a/sound/direct_sound_samples/cries/omanyte.aif and b/sound/direct_sound_samples/cries/omanyte.aif differ diff --git a/sound/direct_sound_samples/cries/omastar.aif b/sound/direct_sound_samples/cries/omastar.aif index 4c110a3fad..9d4f738efd 100644 Binary files a/sound/direct_sound_samples/cries/omastar.aif and b/sound/direct_sound_samples/cries/omastar.aif differ diff --git a/sound/direct_sound_samples/cries/onix.aif b/sound/direct_sound_samples/cries/onix.aif index 2f7c050e83..6203ce5689 100644 Binary files a/sound/direct_sound_samples/cries/onix.aif and b/sound/direct_sound_samples/cries/onix.aif differ diff --git a/sound/direct_sound_samples/cries/oranguru.aif b/sound/direct_sound_samples/cries/oranguru.aif index feee530798..ec919ba93c 100644 Binary files a/sound/direct_sound_samples/cries/oranguru.aif and b/sound/direct_sound_samples/cries/oranguru.aif differ diff --git a/sound/direct_sound_samples/cries/orbeetle.aif b/sound/direct_sound_samples/cries/orbeetle.aif index e1ede8361a..4b99afad15 100644 Binary files a/sound/direct_sound_samples/cries/orbeetle.aif and b/sound/direct_sound_samples/cries/orbeetle.aif differ diff --git a/sound/direct_sound_samples/cries/oricorio_baile.aif b/sound/direct_sound_samples/cries/oricorio_baile.aif index 9a95eacd46..c5ec5af19b 100644 Binary files a/sound/direct_sound_samples/cries/oricorio_baile.aif and b/sound/direct_sound_samples/cries/oricorio_baile.aif differ diff --git a/sound/direct_sound_samples/cries/oricorio_pau.aif b/sound/direct_sound_samples/cries/oricorio_pau.aif index 69933407e0..4faa6cc083 100644 Binary files a/sound/direct_sound_samples/cries/oricorio_pau.aif and b/sound/direct_sound_samples/cries/oricorio_pau.aif differ diff --git a/sound/direct_sound_samples/cries/oricorio_sensu.aif b/sound/direct_sound_samples/cries/oricorio_sensu.aif index f9208250b4..bdc25a7749 100644 Binary files a/sound/direct_sound_samples/cries/oricorio_sensu.aif and b/sound/direct_sound_samples/cries/oricorio_sensu.aif differ diff --git a/sound/direct_sound_samples/cries/orthworm.aif b/sound/direct_sound_samples/cries/orthworm.aif index a3be4aecc0..f88eec62f0 100644 Binary files a/sound/direct_sound_samples/cries/orthworm.aif and b/sound/direct_sound_samples/cries/orthworm.aif differ diff --git a/sound/direct_sound_samples/cries/oshawott.aif b/sound/direct_sound_samples/cries/oshawott.aif index 87b28da484..81bf2917ed 100644 Binary files a/sound/direct_sound_samples/cries/oshawott.aif and b/sound/direct_sound_samples/cries/oshawott.aif differ diff --git a/sound/direct_sound_samples/cries/overqwil.aif b/sound/direct_sound_samples/cries/overqwil.aif index b5428ce944..8b9a8a2dff 100644 Binary files a/sound/direct_sound_samples/cries/overqwil.aif and b/sound/direct_sound_samples/cries/overqwil.aif differ diff --git a/sound/direct_sound_samples/cries/pachirisu.aif b/sound/direct_sound_samples/cries/pachirisu.aif index 7f540482d9..6471363ee6 100644 Binary files a/sound/direct_sound_samples/cries/pachirisu.aif and b/sound/direct_sound_samples/cries/pachirisu.aif differ diff --git a/sound/direct_sound_samples/cries/palafin_hero.aif b/sound/direct_sound_samples/cries/palafin_hero.aif index ff02e6a0e0..5ef87ddeb8 100644 Binary files a/sound/direct_sound_samples/cries/palafin_hero.aif and b/sound/direct_sound_samples/cries/palafin_hero.aif differ diff --git a/sound/direct_sound_samples/cries/palafin_zero.aif b/sound/direct_sound_samples/cries/palafin_zero.aif index 3ee6bdb321..16051848be 100644 Binary files a/sound/direct_sound_samples/cries/palafin_zero.aif and b/sound/direct_sound_samples/cries/palafin_zero.aif differ diff --git a/sound/direct_sound_samples/cries/palkia.aif b/sound/direct_sound_samples/cries/palkia.aif index e755ceace0..dee52b9a59 100644 Binary files a/sound/direct_sound_samples/cries/palkia.aif and b/sound/direct_sound_samples/cries/palkia.aif differ diff --git a/sound/direct_sound_samples/cries/palossand.aif b/sound/direct_sound_samples/cries/palossand.aif index 028df4fad7..a4a1da4fee 100644 Binary files a/sound/direct_sound_samples/cries/palossand.aif and b/sound/direct_sound_samples/cries/palossand.aif differ diff --git a/sound/direct_sound_samples/cries/palpitoad.aif b/sound/direct_sound_samples/cries/palpitoad.aif index a22b007bf0..054d2dba0b 100644 Binary files a/sound/direct_sound_samples/cries/palpitoad.aif and b/sound/direct_sound_samples/cries/palpitoad.aif differ diff --git a/sound/direct_sound_samples/cries/pancham.aif b/sound/direct_sound_samples/cries/pancham.aif index 581e0a3400..5a986eddf4 100644 Binary files a/sound/direct_sound_samples/cries/pancham.aif and b/sound/direct_sound_samples/cries/pancham.aif differ diff --git a/sound/direct_sound_samples/cries/pangoro.aif b/sound/direct_sound_samples/cries/pangoro.aif index cdbb8d2111..47f7bcf2d0 100644 Binary files a/sound/direct_sound_samples/cries/pangoro.aif and b/sound/direct_sound_samples/cries/pangoro.aif differ diff --git a/sound/direct_sound_samples/cries/panpour.aif b/sound/direct_sound_samples/cries/panpour.aif index 080e974b09..18b65158eb 100644 Binary files a/sound/direct_sound_samples/cries/panpour.aif and b/sound/direct_sound_samples/cries/panpour.aif differ diff --git a/sound/direct_sound_samples/cries/pansage.aif b/sound/direct_sound_samples/cries/pansage.aif index f5cd1a8b6c..a4d277230f 100644 Binary files a/sound/direct_sound_samples/cries/pansage.aif and b/sound/direct_sound_samples/cries/pansage.aif differ diff --git a/sound/direct_sound_samples/cries/pansear.aif b/sound/direct_sound_samples/cries/pansear.aif index 204046866e..4d76d6089c 100644 Binary files a/sound/direct_sound_samples/cries/pansear.aif and b/sound/direct_sound_samples/cries/pansear.aif differ diff --git a/sound/direct_sound_samples/cries/paras.aif b/sound/direct_sound_samples/cries/paras.aif index a865d25b68..fbfbfaf07b 100644 Binary files a/sound/direct_sound_samples/cries/paras.aif and b/sound/direct_sound_samples/cries/paras.aif differ diff --git a/sound/direct_sound_samples/cries/parasect.aif b/sound/direct_sound_samples/cries/parasect.aif index 0e3338a603..1251cbabef 100644 Binary files a/sound/direct_sound_samples/cries/parasect.aif and b/sound/direct_sound_samples/cries/parasect.aif differ diff --git a/sound/direct_sound_samples/cries/passimian.aif b/sound/direct_sound_samples/cries/passimian.aif index 0aab355729..ac824012e5 100644 Binary files a/sound/direct_sound_samples/cries/passimian.aif and b/sound/direct_sound_samples/cries/passimian.aif differ diff --git a/sound/direct_sound_samples/cries/patrat.aif b/sound/direct_sound_samples/cries/patrat.aif index 1bfddd3f9f..f1e17939ab 100644 Binary files a/sound/direct_sound_samples/cries/patrat.aif and b/sound/direct_sound_samples/cries/patrat.aif differ diff --git a/sound/direct_sound_samples/cries/pawmot.aif b/sound/direct_sound_samples/cries/pawmot.aif index 6175b50542..40ad2d5bf2 100644 Binary files a/sound/direct_sound_samples/cries/pawmot.aif and b/sound/direct_sound_samples/cries/pawmot.aif differ diff --git a/sound/direct_sound_samples/cries/pawniard.aif b/sound/direct_sound_samples/cries/pawniard.aif index db95da2044..6196892837 100644 Binary files a/sound/direct_sound_samples/cries/pawniard.aif and b/sound/direct_sound_samples/cries/pawniard.aif differ diff --git a/sound/direct_sound_samples/cries/pelipper.aif b/sound/direct_sound_samples/cries/pelipper.aif index efe9f28ec2..64a0080360 100644 Binary files a/sound/direct_sound_samples/cries/pelipper.aif and b/sound/direct_sound_samples/cries/pelipper.aif differ diff --git a/sound/direct_sound_samples/cries/persian.aif b/sound/direct_sound_samples/cries/persian.aif index 2b46dffd21..d87fe2cbe1 100644 Binary files a/sound/direct_sound_samples/cries/persian.aif and b/sound/direct_sound_samples/cries/persian.aif differ diff --git a/sound/direct_sound_samples/cries/petilil.aif b/sound/direct_sound_samples/cries/petilil.aif index ce243e499e..6252c76247 100644 Binary files a/sound/direct_sound_samples/cries/petilil.aif and b/sound/direct_sound_samples/cries/petilil.aif differ diff --git a/sound/direct_sound_samples/cries/phanpy.aif b/sound/direct_sound_samples/cries/phanpy.aif index 6f95e29078..0c541c3bf1 100644 Binary files a/sound/direct_sound_samples/cries/phanpy.aif and b/sound/direct_sound_samples/cries/phanpy.aif differ diff --git a/sound/direct_sound_samples/cries/phantump.aif b/sound/direct_sound_samples/cries/phantump.aif index 14951a8acf..1afccc074c 100644 Binary files a/sound/direct_sound_samples/cries/phantump.aif and b/sound/direct_sound_samples/cries/phantump.aif differ diff --git a/sound/direct_sound_samples/cries/pheromosa.aif b/sound/direct_sound_samples/cries/pheromosa.aif index b4093eb594..bcf57050d3 100644 Binary files a/sound/direct_sound_samples/cries/pheromosa.aif and b/sound/direct_sound_samples/cries/pheromosa.aif differ diff --git a/sound/direct_sound_samples/cries/phione.aif b/sound/direct_sound_samples/cries/phione.aif index ee295292d9..ba31bd9a5d 100644 Binary files a/sound/direct_sound_samples/cries/phione.aif and b/sound/direct_sound_samples/cries/phione.aif differ diff --git a/sound/direct_sound_samples/cries/pichu.aif b/sound/direct_sound_samples/cries/pichu.aif index 6ef7547f9f..a0cff3f6f3 100644 Binary files a/sound/direct_sound_samples/cries/pichu.aif and b/sound/direct_sound_samples/cries/pichu.aif differ diff --git a/sound/direct_sound_samples/cries/pidgeot.aif b/sound/direct_sound_samples/cries/pidgeot.aif index 2e29607ad0..67f49406a9 100644 Binary files a/sound/direct_sound_samples/cries/pidgeot.aif and b/sound/direct_sound_samples/cries/pidgeot.aif differ diff --git a/sound/direct_sound_samples/cries/pidgeot_mega.aif b/sound/direct_sound_samples/cries/pidgeot_mega.aif index 89b846a1cc..a1639ba4e9 100644 Binary files a/sound/direct_sound_samples/cries/pidgeot_mega.aif and b/sound/direct_sound_samples/cries/pidgeot_mega.aif differ diff --git a/sound/direct_sound_samples/cries/pidgeotto.aif b/sound/direct_sound_samples/cries/pidgeotto.aif index 102e3afb5c..f31d3df8cf 100644 Binary files a/sound/direct_sound_samples/cries/pidgeotto.aif and b/sound/direct_sound_samples/cries/pidgeotto.aif differ diff --git a/sound/direct_sound_samples/cries/pidgey.aif b/sound/direct_sound_samples/cries/pidgey.aif index 14d8284b97..3b4b6ece27 100644 Binary files a/sound/direct_sound_samples/cries/pidgey.aif and b/sound/direct_sound_samples/cries/pidgey.aif differ diff --git a/sound/direct_sound_samples/cries/pidove.aif b/sound/direct_sound_samples/cries/pidove.aif index faec9a046c..b2bd5590bc 100644 Binary files a/sound/direct_sound_samples/cries/pidove.aif and b/sound/direct_sound_samples/cries/pidove.aif differ diff --git a/sound/direct_sound_samples/cries/pignite.aif b/sound/direct_sound_samples/cries/pignite.aif index 3cb8d0a850..8e1f78ae2f 100644 Binary files a/sound/direct_sound_samples/cries/pignite.aif and b/sound/direct_sound_samples/cries/pignite.aif differ diff --git a/sound/direct_sound_samples/cries/pikachu.aif b/sound/direct_sound_samples/cries/pikachu.aif index 30c7701659..4a7b270245 100644 Binary files a/sound/direct_sound_samples/cries/pikachu.aif and b/sound/direct_sound_samples/cries/pikachu.aif differ diff --git a/sound/direct_sound_samples/cries/pikipek.aif b/sound/direct_sound_samples/cries/pikipek.aif index ee55aca4ce..04efe56a4c 100644 Binary files a/sound/direct_sound_samples/cries/pikipek.aif and b/sound/direct_sound_samples/cries/pikipek.aif differ diff --git a/sound/direct_sound_samples/cries/piloswine.aif b/sound/direct_sound_samples/cries/piloswine.aif index 6b6fd0a2d4..2511d3fd70 100644 Binary files a/sound/direct_sound_samples/cries/piloswine.aif and b/sound/direct_sound_samples/cries/piloswine.aif differ diff --git a/sound/direct_sound_samples/cries/pineco.aif b/sound/direct_sound_samples/cries/pineco.aif index 6f02c13690..acb6de8a0c 100644 Binary files a/sound/direct_sound_samples/cries/pineco.aif and b/sound/direct_sound_samples/cries/pineco.aif differ diff --git a/sound/direct_sound_samples/cries/pinsir.aif b/sound/direct_sound_samples/cries/pinsir.aif index 995999b684..bfbb268d68 100644 Binary files a/sound/direct_sound_samples/cries/pinsir.aif and b/sound/direct_sound_samples/cries/pinsir.aif differ diff --git a/sound/direct_sound_samples/cries/pinsir_mega.aif b/sound/direct_sound_samples/cries/pinsir_mega.aif index f6f2b6649f..c2e57d2a39 100644 Binary files a/sound/direct_sound_samples/cries/pinsir_mega.aif and b/sound/direct_sound_samples/cries/pinsir_mega.aif differ diff --git a/sound/direct_sound_samples/cries/piplup.aif b/sound/direct_sound_samples/cries/piplup.aif index 1f7da9b208..e8c161eb35 100644 Binary files a/sound/direct_sound_samples/cries/piplup.aif and b/sound/direct_sound_samples/cries/piplup.aif differ diff --git a/sound/direct_sound_samples/cries/plusle.aif b/sound/direct_sound_samples/cries/plusle.aif index 2c023697f6..e584201a8f 100644 Binary files a/sound/direct_sound_samples/cries/plusle.aif and b/sound/direct_sound_samples/cries/plusle.aif differ diff --git a/sound/direct_sound_samples/cries/poipole.aif b/sound/direct_sound_samples/cries/poipole.aif index b9f9fce1d0..c2a141ac85 100644 Binary files a/sound/direct_sound_samples/cries/poipole.aif and b/sound/direct_sound_samples/cries/poipole.aif differ diff --git a/sound/direct_sound_samples/cries/politoed.aif b/sound/direct_sound_samples/cries/politoed.aif index 75e7f20efe..2739c2a428 100644 Binary files a/sound/direct_sound_samples/cries/politoed.aif and b/sound/direct_sound_samples/cries/politoed.aif differ diff --git a/sound/direct_sound_samples/cries/poliwag.aif b/sound/direct_sound_samples/cries/poliwag.aif index f4ee161745..d76e209495 100644 Binary files a/sound/direct_sound_samples/cries/poliwag.aif and b/sound/direct_sound_samples/cries/poliwag.aif differ diff --git a/sound/direct_sound_samples/cries/poliwhirl.aif b/sound/direct_sound_samples/cries/poliwhirl.aif index 31ffeb044d..4aee053d7f 100644 Binary files a/sound/direct_sound_samples/cries/poliwhirl.aif and b/sound/direct_sound_samples/cries/poliwhirl.aif differ diff --git a/sound/direct_sound_samples/cries/poliwrath.aif b/sound/direct_sound_samples/cries/poliwrath.aif index ba1aac528d..bb9d78f3c3 100644 Binary files a/sound/direct_sound_samples/cries/poliwrath.aif and b/sound/direct_sound_samples/cries/poliwrath.aif differ diff --git a/sound/direct_sound_samples/cries/poltchageist.aif b/sound/direct_sound_samples/cries/poltchageist.aif index d861a0022b..855eb010ce 100644 Binary files a/sound/direct_sound_samples/cries/poltchageist.aif and b/sound/direct_sound_samples/cries/poltchageist.aif differ diff --git a/sound/direct_sound_samples/cries/ponyta.aif b/sound/direct_sound_samples/cries/ponyta.aif index 121dbb3948..ec66a33faf 100644 Binary files a/sound/direct_sound_samples/cries/ponyta.aif and b/sound/direct_sound_samples/cries/ponyta.aif differ diff --git a/sound/direct_sound_samples/cries/poochyena.aif b/sound/direct_sound_samples/cries/poochyena.aif index d7bad7c909..bfa6a00ae2 100644 Binary files a/sound/direct_sound_samples/cries/poochyena.aif and b/sound/direct_sound_samples/cries/poochyena.aif differ diff --git a/sound/direct_sound_samples/cries/popplio.aif b/sound/direct_sound_samples/cries/popplio.aif index 4b5571a17c..cbb3a0ff30 100644 Binary files a/sound/direct_sound_samples/cries/popplio.aif and b/sound/direct_sound_samples/cries/popplio.aif differ diff --git a/sound/direct_sound_samples/cries/porygon.aif b/sound/direct_sound_samples/cries/porygon.aif index 9179a9d754..79160cdbbb 100644 Binary files a/sound/direct_sound_samples/cries/porygon.aif and b/sound/direct_sound_samples/cries/porygon.aif differ diff --git a/sound/direct_sound_samples/cries/porygon2.aif b/sound/direct_sound_samples/cries/porygon2.aif index 2e6ae0b1f2..94237057b1 100644 Binary files a/sound/direct_sound_samples/cries/porygon2.aif and b/sound/direct_sound_samples/cries/porygon2.aif differ diff --git a/sound/direct_sound_samples/cries/porygon_z.aif b/sound/direct_sound_samples/cries/porygon_z.aif index d969b5f1d4..55448d13c0 100644 Binary files a/sound/direct_sound_samples/cries/porygon_z.aif and b/sound/direct_sound_samples/cries/porygon_z.aif differ diff --git a/sound/direct_sound_samples/cries/primarina.aif b/sound/direct_sound_samples/cries/primarina.aif index c5161df5f1..7952fda82e 100644 Binary files a/sound/direct_sound_samples/cries/primarina.aif and b/sound/direct_sound_samples/cries/primarina.aif differ diff --git a/sound/direct_sound_samples/cries/primeape.aif b/sound/direct_sound_samples/cries/primeape.aif index ef53c21461..35898bf2e6 100644 Binary files a/sound/direct_sound_samples/cries/primeape.aif and b/sound/direct_sound_samples/cries/primeape.aif differ diff --git a/sound/direct_sound_samples/cries/prinplup.aif b/sound/direct_sound_samples/cries/prinplup.aif index 2550fd01c6..62311c1cbf 100644 Binary files a/sound/direct_sound_samples/cries/prinplup.aif and b/sound/direct_sound_samples/cries/prinplup.aif differ diff --git a/sound/direct_sound_samples/cries/probopass.aif b/sound/direct_sound_samples/cries/probopass.aif index a8307da81a..ac831dbf20 100644 Binary files a/sound/direct_sound_samples/cries/probopass.aif and b/sound/direct_sound_samples/cries/probopass.aif differ diff --git a/sound/direct_sound_samples/cries/psyduck.aif b/sound/direct_sound_samples/cries/psyduck.aif index 881b55b60b..e99270f05f 100644 Binary files a/sound/direct_sound_samples/cries/psyduck.aif and b/sound/direct_sound_samples/cries/psyduck.aif differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo.aif b/sound/direct_sound_samples/cries/pumpkaboo.aif index 5f7d92b4bd..6960875e58 100644 Binary files a/sound/direct_sound_samples/cries/pumpkaboo.aif and b/sound/direct_sound_samples/cries/pumpkaboo.aif differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo_super.aif b/sound/direct_sound_samples/cries/pumpkaboo_super.aif index 11d1ebf223..f6c7500f68 100644 Binary files a/sound/direct_sound_samples/cries/pumpkaboo_super.aif and b/sound/direct_sound_samples/cries/pumpkaboo_super.aif differ diff --git a/sound/direct_sound_samples/cries/pupitar.aif b/sound/direct_sound_samples/cries/pupitar.aif index dbbe3bbaf0..eb4674d521 100644 Binary files a/sound/direct_sound_samples/cries/pupitar.aif and b/sound/direct_sound_samples/cries/pupitar.aif differ diff --git a/sound/direct_sound_samples/cries/purrloin.aif b/sound/direct_sound_samples/cries/purrloin.aif index 23791edb2b..ceb00874c5 100644 Binary files a/sound/direct_sound_samples/cries/purrloin.aif and b/sound/direct_sound_samples/cries/purrloin.aif differ diff --git a/sound/direct_sound_samples/cries/purugly.aif b/sound/direct_sound_samples/cries/purugly.aif index d06f74fa5a..9f6460a630 100644 Binary files a/sound/direct_sound_samples/cries/purugly.aif and b/sound/direct_sound_samples/cries/purugly.aif differ diff --git a/sound/direct_sound_samples/cries/pyroar.aif b/sound/direct_sound_samples/cries/pyroar.aif index d54a45de0b..7bf77d50cb 100644 Binary files a/sound/direct_sound_samples/cries/pyroar.aif and b/sound/direct_sound_samples/cries/pyroar.aif differ diff --git a/sound/direct_sound_samples/cries/pyukumuku.aif b/sound/direct_sound_samples/cries/pyukumuku.aif index 1a8f25b111..ad1d740c31 100644 Binary files a/sound/direct_sound_samples/cries/pyukumuku.aif and b/sound/direct_sound_samples/cries/pyukumuku.aif differ diff --git a/sound/direct_sound_samples/cries/quagsire.aif b/sound/direct_sound_samples/cries/quagsire.aif index 84330f4de5..7373b6bb0c 100644 Binary files a/sound/direct_sound_samples/cries/quagsire.aif and b/sound/direct_sound_samples/cries/quagsire.aif differ diff --git a/sound/direct_sound_samples/cries/quilava.aif b/sound/direct_sound_samples/cries/quilava.aif index 7b3e35ffb5..40d3db5594 100644 Binary files a/sound/direct_sound_samples/cries/quilava.aif and b/sound/direct_sound_samples/cries/quilava.aif differ diff --git a/sound/direct_sound_samples/cries/quilladin.aif b/sound/direct_sound_samples/cries/quilladin.aif index 9a4ca6e1f7..9b6dfabdc6 100644 Binary files a/sound/direct_sound_samples/cries/quilladin.aif and b/sound/direct_sound_samples/cries/quilladin.aif differ diff --git a/sound/direct_sound_samples/cries/qwilfish.aif b/sound/direct_sound_samples/cries/qwilfish.aif index 59d4c6db44..a5a56480f1 100644 Binary files a/sound/direct_sound_samples/cries/qwilfish.aif and b/sound/direct_sound_samples/cries/qwilfish.aif differ diff --git a/sound/direct_sound_samples/cries/rabsca.aif b/sound/direct_sound_samples/cries/rabsca.aif index 9d36d01cdc..5665f79865 100644 Binary files a/sound/direct_sound_samples/cries/rabsca.aif and b/sound/direct_sound_samples/cries/rabsca.aif differ diff --git a/sound/direct_sound_samples/cries/raichu.aif b/sound/direct_sound_samples/cries/raichu.aif index b8ed0d4b37..001dcba627 100644 Binary files a/sound/direct_sound_samples/cries/raichu.aif and b/sound/direct_sound_samples/cries/raichu.aif differ diff --git a/sound/direct_sound_samples/cries/raikou.aif b/sound/direct_sound_samples/cries/raikou.aif index 941cfca0f1..ac1e846691 100644 Binary files a/sound/direct_sound_samples/cries/raikou.aif and b/sound/direct_sound_samples/cries/raikou.aif differ diff --git a/sound/direct_sound_samples/cries/ralts.aif b/sound/direct_sound_samples/cries/ralts.aif index de75400e15..660438548c 100644 Binary files a/sound/direct_sound_samples/cries/ralts.aif and b/sound/direct_sound_samples/cries/ralts.aif differ diff --git a/sound/direct_sound_samples/cries/rampardos.aif b/sound/direct_sound_samples/cries/rampardos.aif index 7134c57dd6..edec1aac4f 100644 Binary files a/sound/direct_sound_samples/cries/rampardos.aif and b/sound/direct_sound_samples/cries/rampardos.aif differ diff --git a/sound/direct_sound_samples/cries/rapidash.aif b/sound/direct_sound_samples/cries/rapidash.aif index 2dd536735b..c070475d18 100644 Binary files a/sound/direct_sound_samples/cries/rapidash.aif and b/sound/direct_sound_samples/cries/rapidash.aif differ diff --git a/sound/direct_sound_samples/cries/raticate.aif b/sound/direct_sound_samples/cries/raticate.aif index f7d6055026..fd726b655f 100644 Binary files a/sound/direct_sound_samples/cries/raticate.aif and b/sound/direct_sound_samples/cries/raticate.aif differ diff --git a/sound/direct_sound_samples/cries/rattata.aif b/sound/direct_sound_samples/cries/rattata.aif index 73d2a718bc..af6a4f2468 100644 Binary files a/sound/direct_sound_samples/cries/rattata.aif and b/sound/direct_sound_samples/cries/rattata.aif differ diff --git a/sound/direct_sound_samples/cries/rayquaza.aif b/sound/direct_sound_samples/cries/rayquaza.aif index 41fb48561d..ba7a73c7ee 100644 Binary files a/sound/direct_sound_samples/cries/rayquaza.aif and b/sound/direct_sound_samples/cries/rayquaza.aif differ diff --git a/sound/direct_sound_samples/cries/regice.aif b/sound/direct_sound_samples/cries/regice.aif index 488f06aa6c..812737a805 100644 Binary files a/sound/direct_sound_samples/cries/regice.aif and b/sound/direct_sound_samples/cries/regice.aif differ diff --git a/sound/direct_sound_samples/cries/regidrago.aif b/sound/direct_sound_samples/cries/regidrago.aif index ea725dfab5..d67dbe0ce3 100644 Binary files a/sound/direct_sound_samples/cries/regidrago.aif and b/sound/direct_sound_samples/cries/regidrago.aif differ diff --git a/sound/direct_sound_samples/cries/regigigas.aif b/sound/direct_sound_samples/cries/regigigas.aif index 87ba6eda57..9de9e451d8 100644 Binary files a/sound/direct_sound_samples/cries/regigigas.aif and b/sound/direct_sound_samples/cries/regigigas.aif differ diff --git a/sound/direct_sound_samples/cries/regirock.aif b/sound/direct_sound_samples/cries/regirock.aif index 7540aa5860..b9c2948095 100644 Binary files a/sound/direct_sound_samples/cries/regirock.aif and b/sound/direct_sound_samples/cries/regirock.aif differ diff --git a/sound/direct_sound_samples/cries/registeel.aif b/sound/direct_sound_samples/cries/registeel.aif index 95e783ff4b..5afe87279e 100644 Binary files a/sound/direct_sound_samples/cries/registeel.aif and b/sound/direct_sound_samples/cries/registeel.aif differ diff --git a/sound/direct_sound_samples/cries/relicanth.aif b/sound/direct_sound_samples/cries/relicanth.aif index 6af29ea3d1..a9c2b69e60 100644 Binary files a/sound/direct_sound_samples/cries/relicanth.aif and b/sound/direct_sound_samples/cries/relicanth.aif differ diff --git a/sound/direct_sound_samples/cries/remoraid.aif b/sound/direct_sound_samples/cries/remoraid.aif index 5016ec7813..f879cf2835 100644 Binary files a/sound/direct_sound_samples/cries/remoraid.aif and b/sound/direct_sound_samples/cries/remoraid.aif differ diff --git a/sound/direct_sound_samples/cries/reshiram.aif b/sound/direct_sound_samples/cries/reshiram.aif index e8e187d65c..870d3cf515 100644 Binary files a/sound/direct_sound_samples/cries/reshiram.aif and b/sound/direct_sound_samples/cries/reshiram.aif differ diff --git a/sound/direct_sound_samples/cries/reuniclus.aif b/sound/direct_sound_samples/cries/reuniclus.aif index 75d92858c4..ab22f0f97e 100644 Binary files a/sound/direct_sound_samples/cries/reuniclus.aif and b/sound/direct_sound_samples/cries/reuniclus.aif differ diff --git a/sound/direct_sound_samples/cries/revavroom.aif b/sound/direct_sound_samples/cries/revavroom.aif index 731e2496c7..e52bf1c6fe 100644 Binary files a/sound/direct_sound_samples/cries/revavroom.aif and b/sound/direct_sound_samples/cries/revavroom.aif differ diff --git a/sound/direct_sound_samples/cries/rhydon.aif b/sound/direct_sound_samples/cries/rhydon.aif index 7e862c560c..c02623703d 100644 Binary files a/sound/direct_sound_samples/cries/rhydon.aif and b/sound/direct_sound_samples/cries/rhydon.aif differ diff --git a/sound/direct_sound_samples/cries/rhyhorn.aif b/sound/direct_sound_samples/cries/rhyhorn.aif index f1eac45f08..9a80e08f01 100644 Binary files a/sound/direct_sound_samples/cries/rhyhorn.aif and b/sound/direct_sound_samples/cries/rhyhorn.aif differ diff --git a/sound/direct_sound_samples/cries/rhyperior.aif b/sound/direct_sound_samples/cries/rhyperior.aif index 1cc41c14c2..210a7c8fd3 100644 Binary files a/sound/direct_sound_samples/cries/rhyperior.aif and b/sound/direct_sound_samples/cries/rhyperior.aif differ diff --git a/sound/direct_sound_samples/cries/ribombee.aif b/sound/direct_sound_samples/cries/ribombee.aif index e5110c80b8..fb7dcd1f87 100644 Binary files a/sound/direct_sound_samples/cries/ribombee.aif and b/sound/direct_sound_samples/cries/ribombee.aif differ diff --git a/sound/direct_sound_samples/cries/rillaboom.aif b/sound/direct_sound_samples/cries/rillaboom.aif index c6a8b8932d..f7e4624e88 100644 Binary files a/sound/direct_sound_samples/cries/rillaboom.aif and b/sound/direct_sound_samples/cries/rillaboom.aif differ diff --git a/sound/direct_sound_samples/cries/riolu.aif b/sound/direct_sound_samples/cries/riolu.aif index c8fcaf0345..cd25b09faf 100644 Binary files a/sound/direct_sound_samples/cries/riolu.aif and b/sound/direct_sound_samples/cries/riolu.aif differ diff --git a/sound/direct_sound_samples/cries/rockruff.aif b/sound/direct_sound_samples/cries/rockruff.aif index e0a5ffa7c0..90f6bed36b 100644 Binary files a/sound/direct_sound_samples/cries/rockruff.aif and b/sound/direct_sound_samples/cries/rockruff.aif differ diff --git a/sound/direct_sound_samples/cries/roggenrola.aif b/sound/direct_sound_samples/cries/roggenrola.aif index c4764dc82b..8f2f7c8fa0 100644 Binary files a/sound/direct_sound_samples/cries/roggenrola.aif and b/sound/direct_sound_samples/cries/roggenrola.aif differ diff --git a/sound/direct_sound_samples/cries/rookidee.aif b/sound/direct_sound_samples/cries/rookidee.aif index 036d3e2f17..6fba48730a 100644 Binary files a/sound/direct_sound_samples/cries/rookidee.aif and b/sound/direct_sound_samples/cries/rookidee.aif differ diff --git a/sound/direct_sound_samples/cries/roselia.aif b/sound/direct_sound_samples/cries/roselia.aif index 146771f8ce..c6c53f3c1f 100644 Binary files a/sound/direct_sound_samples/cries/roselia.aif and b/sound/direct_sound_samples/cries/roselia.aif differ diff --git a/sound/direct_sound_samples/cries/roserade.aif b/sound/direct_sound_samples/cries/roserade.aif index 00a9430f2d..7c9de96a0e 100644 Binary files a/sound/direct_sound_samples/cries/roserade.aif and b/sound/direct_sound_samples/cries/roserade.aif differ diff --git a/sound/direct_sound_samples/cries/rotom.aif b/sound/direct_sound_samples/cries/rotom.aif index 41468228d1..81080115c2 100644 Binary files a/sound/direct_sound_samples/cries/rotom.aif and b/sound/direct_sound_samples/cries/rotom.aif differ diff --git a/sound/direct_sound_samples/cries/rowlet.aif b/sound/direct_sound_samples/cries/rowlet.aif index e14b229c21..c201336015 100644 Binary files a/sound/direct_sound_samples/cries/rowlet.aif and b/sound/direct_sound_samples/cries/rowlet.aif differ diff --git a/sound/direct_sound_samples/cries/rufflet.aif b/sound/direct_sound_samples/cries/rufflet.aif index 2aff67b5cf..b7cc6cab12 100644 Binary files a/sound/direct_sound_samples/cries/rufflet.aif and b/sound/direct_sound_samples/cries/rufflet.aif differ diff --git a/sound/direct_sound_samples/cries/sableye.aif b/sound/direct_sound_samples/cries/sableye.aif index fb31e329d1..885a3b0b35 100644 Binary files a/sound/direct_sound_samples/cries/sableye.aif and b/sound/direct_sound_samples/cries/sableye.aif differ diff --git a/sound/direct_sound_samples/cries/sableye_mega.aif b/sound/direct_sound_samples/cries/sableye_mega.aif index 47d4a869ec..7f869cd7b8 100644 Binary files a/sound/direct_sound_samples/cries/sableye_mega.aif and b/sound/direct_sound_samples/cries/sableye_mega.aif differ diff --git a/sound/direct_sound_samples/cries/salamence.aif b/sound/direct_sound_samples/cries/salamence.aif index 6a2d63ca5b..f733e098dd 100644 Binary files a/sound/direct_sound_samples/cries/salamence.aif and b/sound/direct_sound_samples/cries/salamence.aif differ diff --git a/sound/direct_sound_samples/cries/salandit.aif b/sound/direct_sound_samples/cries/salandit.aif index 23872d7c0e..90de8f0573 100644 Binary files a/sound/direct_sound_samples/cries/salandit.aif and b/sound/direct_sound_samples/cries/salandit.aif differ diff --git a/sound/direct_sound_samples/cries/salazzle.aif b/sound/direct_sound_samples/cries/salazzle.aif index 427bf8905a..7447bfc0bf 100644 Binary files a/sound/direct_sound_samples/cries/salazzle.aif and b/sound/direct_sound_samples/cries/salazzle.aif differ diff --git a/sound/direct_sound_samples/cries/samurott.aif b/sound/direct_sound_samples/cries/samurott.aif index 96691f6459..fc8aa1c7c8 100644 Binary files a/sound/direct_sound_samples/cries/samurott.aif and b/sound/direct_sound_samples/cries/samurott.aif differ diff --git a/sound/direct_sound_samples/cries/sandaconda.aif b/sound/direct_sound_samples/cries/sandaconda.aif index 13dd2b5ec2..3fd1b08d96 100644 Binary files a/sound/direct_sound_samples/cries/sandaconda.aif and b/sound/direct_sound_samples/cries/sandaconda.aif differ diff --git a/sound/direct_sound_samples/cries/sandile.aif b/sound/direct_sound_samples/cries/sandile.aif index 9e52575b7c..316b66aec9 100644 Binary files a/sound/direct_sound_samples/cries/sandile.aif and b/sound/direct_sound_samples/cries/sandile.aif differ diff --git a/sound/direct_sound_samples/cries/sandshrew.aif b/sound/direct_sound_samples/cries/sandshrew.aif index b9a73351b6..02dd3c1182 100644 Binary files a/sound/direct_sound_samples/cries/sandshrew.aif and b/sound/direct_sound_samples/cries/sandshrew.aif differ diff --git a/sound/direct_sound_samples/cries/sandslash.aif b/sound/direct_sound_samples/cries/sandslash.aif index 29950ff0ca..59304e2dfe 100644 Binary files a/sound/direct_sound_samples/cries/sandslash.aif and b/sound/direct_sound_samples/cries/sandslash.aif differ diff --git a/sound/direct_sound_samples/cries/sandygast.aif b/sound/direct_sound_samples/cries/sandygast.aif index 330cf75551..b99472bbaf 100644 Binary files a/sound/direct_sound_samples/cries/sandygast.aif and b/sound/direct_sound_samples/cries/sandygast.aif differ diff --git a/sound/direct_sound_samples/cries/sawk.aif b/sound/direct_sound_samples/cries/sawk.aif index ebfe11e4a8..c040994edc 100644 Binary files a/sound/direct_sound_samples/cries/sawk.aif and b/sound/direct_sound_samples/cries/sawk.aif differ diff --git a/sound/direct_sound_samples/cries/sawsbuck.aif b/sound/direct_sound_samples/cries/sawsbuck.aif index 745d3761d3..9dcc4f927c 100644 Binary files a/sound/direct_sound_samples/cries/sawsbuck.aif and b/sound/direct_sound_samples/cries/sawsbuck.aif differ diff --git a/sound/direct_sound_samples/cries/scatterbug.aif b/sound/direct_sound_samples/cries/scatterbug.aif index 9fba052198..c553fb4771 100644 Binary files a/sound/direct_sound_samples/cries/scatterbug.aif and b/sound/direct_sound_samples/cries/scatterbug.aif differ diff --git a/sound/direct_sound_samples/cries/sceptile.aif b/sound/direct_sound_samples/cries/sceptile.aif index 6c8820d17e..c460e445d5 100644 Binary files a/sound/direct_sound_samples/cries/sceptile.aif and b/sound/direct_sound_samples/cries/sceptile.aif differ diff --git a/sound/direct_sound_samples/cries/scizor.aif b/sound/direct_sound_samples/cries/scizor.aif index 87305f608d..eb423f61dd 100644 Binary files a/sound/direct_sound_samples/cries/scizor.aif and b/sound/direct_sound_samples/cries/scizor.aif differ diff --git a/sound/direct_sound_samples/cries/scolipede.aif b/sound/direct_sound_samples/cries/scolipede.aif index 687402d8ca..0372641b70 100644 Binary files a/sound/direct_sound_samples/cries/scolipede.aif and b/sound/direct_sound_samples/cries/scolipede.aif differ diff --git a/sound/direct_sound_samples/cries/scorbunny.aif b/sound/direct_sound_samples/cries/scorbunny.aif index 120dd0f888..c0963bbc1c 100644 Binary files a/sound/direct_sound_samples/cries/scorbunny.aif and b/sound/direct_sound_samples/cries/scorbunny.aif differ diff --git a/sound/direct_sound_samples/cries/scrafty.aif b/sound/direct_sound_samples/cries/scrafty.aif index 218c897f4a..bc351aa3de 100644 Binary files a/sound/direct_sound_samples/cries/scrafty.aif and b/sound/direct_sound_samples/cries/scrafty.aif differ diff --git a/sound/direct_sound_samples/cries/scraggy.aif b/sound/direct_sound_samples/cries/scraggy.aif index 5b6958fcaf..bd836ebc46 100644 Binary files a/sound/direct_sound_samples/cries/scraggy.aif and b/sound/direct_sound_samples/cries/scraggy.aif differ diff --git a/sound/direct_sound_samples/cries/scyther.aif b/sound/direct_sound_samples/cries/scyther.aif index 441612854d..88bc85cdbb 100644 Binary files a/sound/direct_sound_samples/cries/scyther.aif and b/sound/direct_sound_samples/cries/scyther.aif differ diff --git a/sound/direct_sound_samples/cries/seadra.aif b/sound/direct_sound_samples/cries/seadra.aif index 68bbc8745c..19852ad231 100644 Binary files a/sound/direct_sound_samples/cries/seadra.aif and b/sound/direct_sound_samples/cries/seadra.aif differ diff --git a/sound/direct_sound_samples/cries/seaking.aif b/sound/direct_sound_samples/cries/seaking.aif index e4d56b9b06..f572ce5dd4 100644 Binary files a/sound/direct_sound_samples/cries/seaking.aif and b/sound/direct_sound_samples/cries/seaking.aif differ diff --git a/sound/direct_sound_samples/cries/sealeo.aif b/sound/direct_sound_samples/cries/sealeo.aif index 9cb4058c8b..9a0aedda62 100644 Binary files a/sound/direct_sound_samples/cries/sealeo.aif and b/sound/direct_sound_samples/cries/sealeo.aif differ diff --git a/sound/direct_sound_samples/cries/seedot.aif b/sound/direct_sound_samples/cries/seedot.aif index 410e983280..eac082184f 100644 Binary files a/sound/direct_sound_samples/cries/seedot.aif and b/sound/direct_sound_samples/cries/seedot.aif differ diff --git a/sound/direct_sound_samples/cries/seel.aif b/sound/direct_sound_samples/cries/seel.aif index 927a8fd6c9..1cc31998f2 100644 Binary files a/sound/direct_sound_samples/cries/seel.aif and b/sound/direct_sound_samples/cries/seel.aif differ diff --git a/sound/direct_sound_samples/cries/seismitoad.aif b/sound/direct_sound_samples/cries/seismitoad.aif index 267979cc0b..521f9b741b 100644 Binary files a/sound/direct_sound_samples/cries/seismitoad.aif and b/sound/direct_sound_samples/cries/seismitoad.aif differ diff --git a/sound/direct_sound_samples/cries/sentret.aif b/sound/direct_sound_samples/cries/sentret.aif index 91b5fc4561..ffbce9c7c5 100644 Binary files a/sound/direct_sound_samples/cries/sentret.aif and b/sound/direct_sound_samples/cries/sentret.aif differ diff --git a/sound/direct_sound_samples/cries/serperior.aif b/sound/direct_sound_samples/cries/serperior.aif index 73ea832cd4..9a2eb0baad 100644 Binary files a/sound/direct_sound_samples/cries/serperior.aif and b/sound/direct_sound_samples/cries/serperior.aif differ diff --git a/sound/direct_sound_samples/cries/servine.aif b/sound/direct_sound_samples/cries/servine.aif index aa687c02d6..7098f526d9 100644 Binary files a/sound/direct_sound_samples/cries/servine.aif and b/sound/direct_sound_samples/cries/servine.aif differ diff --git a/sound/direct_sound_samples/cries/seviper.aif b/sound/direct_sound_samples/cries/seviper.aif index 32b069f068..5e3968db6d 100644 Binary files a/sound/direct_sound_samples/cries/seviper.aif and b/sound/direct_sound_samples/cries/seviper.aif differ diff --git a/sound/direct_sound_samples/cries/sewaddle.aif b/sound/direct_sound_samples/cries/sewaddle.aif index 9918b44645..9a3ac12721 100644 Binary files a/sound/direct_sound_samples/cries/sewaddle.aif and b/sound/direct_sound_samples/cries/sewaddle.aif differ diff --git a/sound/direct_sound_samples/cries/sharpedo.aif b/sound/direct_sound_samples/cries/sharpedo.aif index 2f01fa0585..b68c24bb81 100644 Binary files a/sound/direct_sound_samples/cries/sharpedo.aif and b/sound/direct_sound_samples/cries/sharpedo.aif differ diff --git a/sound/direct_sound_samples/cries/sharpedo_mega.aif b/sound/direct_sound_samples/cries/sharpedo_mega.aif index 454ec15892..3fa5b49e92 100644 Binary files a/sound/direct_sound_samples/cries/sharpedo_mega.aif and b/sound/direct_sound_samples/cries/sharpedo_mega.aif differ diff --git a/sound/direct_sound_samples/cries/shaymin_land.aif b/sound/direct_sound_samples/cries/shaymin_land.aif index f26ff71788..ab0c40f156 100644 Binary files a/sound/direct_sound_samples/cries/shaymin_land.aif and b/sound/direct_sound_samples/cries/shaymin_land.aif differ diff --git a/sound/direct_sound_samples/cries/shaymin_sky.aif b/sound/direct_sound_samples/cries/shaymin_sky.aif index 3a340b56ec..ee3dfa8457 100644 Binary files a/sound/direct_sound_samples/cries/shaymin_sky.aif and b/sound/direct_sound_samples/cries/shaymin_sky.aif differ diff --git a/sound/direct_sound_samples/cries/shedinja.aif b/sound/direct_sound_samples/cries/shedinja.aif index ad19071a65..d891bd382c 100644 Binary files a/sound/direct_sound_samples/cries/shedinja.aif and b/sound/direct_sound_samples/cries/shedinja.aif differ diff --git a/sound/direct_sound_samples/cries/shelgon.aif b/sound/direct_sound_samples/cries/shelgon.aif index 8df317b3a6..b202dc0376 100644 Binary files a/sound/direct_sound_samples/cries/shelgon.aif and b/sound/direct_sound_samples/cries/shelgon.aif differ diff --git a/sound/direct_sound_samples/cries/shellder.aif b/sound/direct_sound_samples/cries/shellder.aif index 51513ae6a3..3f2df4a82c 100644 Binary files a/sound/direct_sound_samples/cries/shellder.aif and b/sound/direct_sound_samples/cries/shellder.aif differ diff --git a/sound/direct_sound_samples/cries/shellos.aif b/sound/direct_sound_samples/cries/shellos.aif index 2f6f095d05..f590731202 100644 Binary files a/sound/direct_sound_samples/cries/shellos.aif and b/sound/direct_sound_samples/cries/shellos.aif differ diff --git a/sound/direct_sound_samples/cries/shelmet.aif b/sound/direct_sound_samples/cries/shelmet.aif index b65d435f53..472b6658c0 100644 Binary files a/sound/direct_sound_samples/cries/shelmet.aif and b/sound/direct_sound_samples/cries/shelmet.aif differ diff --git a/sound/direct_sound_samples/cries/shieldon.aif b/sound/direct_sound_samples/cries/shieldon.aif index 44b564ccf0..5ea98bf174 100644 Binary files a/sound/direct_sound_samples/cries/shieldon.aif and b/sound/direct_sound_samples/cries/shieldon.aif differ diff --git a/sound/direct_sound_samples/cries/shiftry.aif b/sound/direct_sound_samples/cries/shiftry.aif index 970d5ef116..dbc65b749e 100644 Binary files a/sound/direct_sound_samples/cries/shiftry.aif and b/sound/direct_sound_samples/cries/shiftry.aif differ diff --git a/sound/direct_sound_samples/cries/shiinotic.aif b/sound/direct_sound_samples/cries/shiinotic.aif index 6d275d9376..972aef0769 100644 Binary files a/sound/direct_sound_samples/cries/shiinotic.aif and b/sound/direct_sound_samples/cries/shiinotic.aif differ diff --git a/sound/direct_sound_samples/cries/shinx.aif b/sound/direct_sound_samples/cries/shinx.aif index fcdae1cb70..08f7ad8a4c 100644 Binary files a/sound/direct_sound_samples/cries/shinx.aif and b/sound/direct_sound_samples/cries/shinx.aif differ diff --git a/sound/direct_sound_samples/cries/shroomish.aif b/sound/direct_sound_samples/cries/shroomish.aif index 587cf61882..9c092ae072 100644 Binary files a/sound/direct_sound_samples/cries/shroomish.aif and b/sound/direct_sound_samples/cries/shroomish.aif differ diff --git a/sound/direct_sound_samples/cries/shuckle.aif b/sound/direct_sound_samples/cries/shuckle.aif index 0844390f9d..a5523506b5 100644 Binary files a/sound/direct_sound_samples/cries/shuckle.aif and b/sound/direct_sound_samples/cries/shuckle.aif differ diff --git a/sound/direct_sound_samples/cries/shuppet.aif b/sound/direct_sound_samples/cries/shuppet.aif index 642123c46d..8f48e8b5fd 100644 Binary files a/sound/direct_sound_samples/cries/shuppet.aif and b/sound/direct_sound_samples/cries/shuppet.aif differ diff --git a/sound/direct_sound_samples/cries/sigilyph.aif b/sound/direct_sound_samples/cries/sigilyph.aif index cce44936cf..cf84e7dcf9 100644 Binary files a/sound/direct_sound_samples/cries/sigilyph.aif and b/sound/direct_sound_samples/cries/sigilyph.aif differ diff --git a/sound/direct_sound_samples/cries/silcoon.aif b/sound/direct_sound_samples/cries/silcoon.aif index b006978302..89cd186676 100644 Binary files a/sound/direct_sound_samples/cries/silcoon.aif and b/sound/direct_sound_samples/cries/silcoon.aif differ diff --git a/sound/direct_sound_samples/cries/silvally.aif b/sound/direct_sound_samples/cries/silvally.aif index eb2e2e225d..48856c7d16 100644 Binary files a/sound/direct_sound_samples/cries/silvally.aif and b/sound/direct_sound_samples/cries/silvally.aif differ diff --git a/sound/direct_sound_samples/cries/simipour.aif b/sound/direct_sound_samples/cries/simipour.aif index 47ac114690..91e891b63f 100644 Binary files a/sound/direct_sound_samples/cries/simipour.aif and b/sound/direct_sound_samples/cries/simipour.aif differ diff --git a/sound/direct_sound_samples/cries/simisage.aif b/sound/direct_sound_samples/cries/simisage.aif index 0117cf73fc..944f5ff831 100644 Binary files a/sound/direct_sound_samples/cries/simisage.aif and b/sound/direct_sound_samples/cries/simisage.aif differ diff --git a/sound/direct_sound_samples/cries/simisear.aif b/sound/direct_sound_samples/cries/simisear.aif index c6f9ec2297..e3e8eb860a 100644 Binary files a/sound/direct_sound_samples/cries/simisear.aif and b/sound/direct_sound_samples/cries/simisear.aif differ diff --git a/sound/direct_sound_samples/cries/skarmory.aif b/sound/direct_sound_samples/cries/skarmory.aif index 10d3650376..5641486234 100644 Binary files a/sound/direct_sound_samples/cries/skarmory.aif and b/sound/direct_sound_samples/cries/skarmory.aif differ diff --git a/sound/direct_sound_samples/cries/skiddo.aif b/sound/direct_sound_samples/cries/skiddo.aif index 2e655c7971..5b2dc104f7 100644 Binary files a/sound/direct_sound_samples/cries/skiddo.aif and b/sound/direct_sound_samples/cries/skiddo.aif differ diff --git a/sound/direct_sound_samples/cries/skiploom.aif b/sound/direct_sound_samples/cries/skiploom.aif index 04c3a438e9..4517e39c7a 100644 Binary files a/sound/direct_sound_samples/cries/skiploom.aif and b/sound/direct_sound_samples/cries/skiploom.aif differ diff --git a/sound/direct_sound_samples/cries/skitty.aif b/sound/direct_sound_samples/cries/skitty.aif index f200d7fae4..0f903b5377 100644 Binary files a/sound/direct_sound_samples/cries/skitty.aif and b/sound/direct_sound_samples/cries/skitty.aif differ diff --git a/sound/direct_sound_samples/cries/skorupi.aif b/sound/direct_sound_samples/cries/skorupi.aif index 22e22b6d42..a638cb4645 100644 Binary files a/sound/direct_sound_samples/cries/skorupi.aif and b/sound/direct_sound_samples/cries/skorupi.aif differ diff --git a/sound/direct_sound_samples/cries/skrelp.aif b/sound/direct_sound_samples/cries/skrelp.aif index 4fd1178d9a..12bb27c043 100644 Binary files a/sound/direct_sound_samples/cries/skrelp.aif and b/sound/direct_sound_samples/cries/skrelp.aif differ diff --git a/sound/direct_sound_samples/cries/skuntank.aif b/sound/direct_sound_samples/cries/skuntank.aif index 90a00511e2..354f2af92c 100644 Binary files a/sound/direct_sound_samples/cries/skuntank.aif and b/sound/direct_sound_samples/cries/skuntank.aif differ diff --git a/sound/direct_sound_samples/cries/slaking.aif b/sound/direct_sound_samples/cries/slaking.aif index 287b5a3b6b..d023af7681 100644 Binary files a/sound/direct_sound_samples/cries/slaking.aif and b/sound/direct_sound_samples/cries/slaking.aif differ diff --git a/sound/direct_sound_samples/cries/slakoth.aif b/sound/direct_sound_samples/cries/slakoth.aif index 67bc284596..54248b2d85 100644 Binary files a/sound/direct_sound_samples/cries/slakoth.aif and b/sound/direct_sound_samples/cries/slakoth.aif differ diff --git a/sound/direct_sound_samples/cries/sliggoo.aif b/sound/direct_sound_samples/cries/sliggoo.aif index f4351dd999..ed141e69c5 100644 Binary files a/sound/direct_sound_samples/cries/sliggoo.aif and b/sound/direct_sound_samples/cries/sliggoo.aif differ diff --git a/sound/direct_sound_samples/cries/slither_wing.aif b/sound/direct_sound_samples/cries/slither_wing.aif index d61cadb5eb..699f74f2f9 100644 Binary files a/sound/direct_sound_samples/cries/slither_wing.aif and b/sound/direct_sound_samples/cries/slither_wing.aif differ diff --git a/sound/direct_sound_samples/cries/slowbro.aif b/sound/direct_sound_samples/cries/slowbro.aif index b7d3821897..c3778734e3 100644 Binary files a/sound/direct_sound_samples/cries/slowbro.aif and b/sound/direct_sound_samples/cries/slowbro.aif differ diff --git a/sound/direct_sound_samples/cries/slowking.aif b/sound/direct_sound_samples/cries/slowking.aif index 20008c6270..e135c9e0db 100644 Binary files a/sound/direct_sound_samples/cries/slowking.aif and b/sound/direct_sound_samples/cries/slowking.aif differ diff --git a/sound/direct_sound_samples/cries/slowpoke.aif b/sound/direct_sound_samples/cries/slowpoke.aif index ab7f5d6bc9..e92ed0c208 100644 Binary files a/sound/direct_sound_samples/cries/slowpoke.aif and b/sound/direct_sound_samples/cries/slowpoke.aif differ diff --git a/sound/direct_sound_samples/cries/slowpoke_galarian.aif b/sound/direct_sound_samples/cries/slowpoke_galarian.aif index 2cb7b8a5f3..30251a2e8c 100644 Binary files a/sound/direct_sound_samples/cries/slowpoke_galarian.aif and b/sound/direct_sound_samples/cries/slowpoke_galarian.aif differ diff --git a/sound/direct_sound_samples/cries/slugma.aif b/sound/direct_sound_samples/cries/slugma.aif index d89032e4dc..3526b7f6e7 100644 Binary files a/sound/direct_sound_samples/cries/slugma.aif and b/sound/direct_sound_samples/cries/slugma.aif differ diff --git a/sound/direct_sound_samples/cries/slurpuff.aif b/sound/direct_sound_samples/cries/slurpuff.aif index c741a553de..93b59e8e35 100644 Binary files a/sound/direct_sound_samples/cries/slurpuff.aif and b/sound/direct_sound_samples/cries/slurpuff.aif differ diff --git a/sound/direct_sound_samples/cries/smeargle.aif b/sound/direct_sound_samples/cries/smeargle.aif index f59d7bb8a2..76cc479ccc 100644 Binary files a/sound/direct_sound_samples/cries/smeargle.aif and b/sound/direct_sound_samples/cries/smeargle.aif differ diff --git a/sound/direct_sound_samples/cries/smoliv.aif b/sound/direct_sound_samples/cries/smoliv.aif index f30f88a1c3..44b688aff9 100644 Binary files a/sound/direct_sound_samples/cries/smoliv.aif and b/sound/direct_sound_samples/cries/smoliv.aif differ diff --git a/sound/direct_sound_samples/cries/smoochum.aif b/sound/direct_sound_samples/cries/smoochum.aif index 90253fcc3a..812586940c 100644 Binary files a/sound/direct_sound_samples/cries/smoochum.aif and b/sound/direct_sound_samples/cries/smoochum.aif differ diff --git a/sound/direct_sound_samples/cries/sneasel.aif b/sound/direct_sound_samples/cries/sneasel.aif index ba0e84c044..e4bf7129c4 100644 Binary files a/sound/direct_sound_samples/cries/sneasel.aif and b/sound/direct_sound_samples/cries/sneasel.aif differ diff --git a/sound/direct_sound_samples/cries/sneasler.aif b/sound/direct_sound_samples/cries/sneasler.aif index 77b4f99a21..b8537fef07 100644 Binary files a/sound/direct_sound_samples/cries/sneasler.aif and b/sound/direct_sound_samples/cries/sneasler.aif differ diff --git a/sound/direct_sound_samples/cries/snivy.aif b/sound/direct_sound_samples/cries/snivy.aif index f7f9790a16..cd0335decb 100644 Binary files a/sound/direct_sound_samples/cries/snivy.aif and b/sound/direct_sound_samples/cries/snivy.aif differ diff --git a/sound/direct_sound_samples/cries/snom.aif b/sound/direct_sound_samples/cries/snom.aif index 5166e1a384..9591fa1d7d 100644 Binary files a/sound/direct_sound_samples/cries/snom.aif and b/sound/direct_sound_samples/cries/snom.aif differ diff --git a/sound/direct_sound_samples/cries/snorlax.aif b/sound/direct_sound_samples/cries/snorlax.aif index d099fbf709..d65557c798 100644 Binary files a/sound/direct_sound_samples/cries/snorlax.aif and b/sound/direct_sound_samples/cries/snorlax.aif differ diff --git a/sound/direct_sound_samples/cries/snorunt.aif b/sound/direct_sound_samples/cries/snorunt.aif index 1c29a200d7..21bae9fc67 100644 Binary files a/sound/direct_sound_samples/cries/snorunt.aif and b/sound/direct_sound_samples/cries/snorunt.aif differ diff --git a/sound/direct_sound_samples/cries/snover.aif b/sound/direct_sound_samples/cries/snover.aif index bd4f1a415d..d02aceda4c 100644 Binary files a/sound/direct_sound_samples/cries/snover.aif and b/sound/direct_sound_samples/cries/snover.aif differ diff --git a/sound/direct_sound_samples/cries/snubbull.aif b/sound/direct_sound_samples/cries/snubbull.aif index ff2e104b98..5e2ca9adb0 100644 Binary files a/sound/direct_sound_samples/cries/snubbull.aif and b/sound/direct_sound_samples/cries/snubbull.aif differ diff --git a/sound/direct_sound_samples/cries/solgaleo.aif b/sound/direct_sound_samples/cries/solgaleo.aif index 9f176d6f43..8cb9ad0cb5 100644 Binary files a/sound/direct_sound_samples/cries/solgaleo.aif and b/sound/direct_sound_samples/cries/solgaleo.aif differ diff --git a/sound/direct_sound_samples/cries/solosis.aif b/sound/direct_sound_samples/cries/solosis.aif index 875f608407..701424bbd6 100644 Binary files a/sound/direct_sound_samples/cries/solosis.aif and b/sound/direct_sound_samples/cries/solosis.aif differ diff --git a/sound/direct_sound_samples/cries/solrock.aif b/sound/direct_sound_samples/cries/solrock.aif index 2dc614c92a..ed58aeecae 100644 Binary files a/sound/direct_sound_samples/cries/solrock.aif and b/sound/direct_sound_samples/cries/solrock.aif differ diff --git a/sound/direct_sound_samples/cries/spearow.aif b/sound/direct_sound_samples/cries/spearow.aif index beb87568ef..9fb8d0cc8f 100644 Binary files a/sound/direct_sound_samples/cries/spearow.aif and b/sound/direct_sound_samples/cries/spearow.aif differ diff --git a/sound/direct_sound_samples/cries/spectrier.aif b/sound/direct_sound_samples/cries/spectrier.aif index 058cc9f8c5..a43dc77a6c 100644 Binary files a/sound/direct_sound_samples/cries/spectrier.aif and b/sound/direct_sound_samples/cries/spectrier.aif differ diff --git a/sound/direct_sound_samples/cries/spewpa.aif b/sound/direct_sound_samples/cries/spewpa.aif index 1a9fce2781..34cd82b989 100644 Binary files a/sound/direct_sound_samples/cries/spewpa.aif and b/sound/direct_sound_samples/cries/spewpa.aif differ diff --git a/sound/direct_sound_samples/cries/spheal.aif b/sound/direct_sound_samples/cries/spheal.aif index eee9b636c3..44d21a9739 100644 Binary files a/sound/direct_sound_samples/cries/spheal.aif and b/sound/direct_sound_samples/cries/spheal.aif differ diff --git a/sound/direct_sound_samples/cries/spidops.aif b/sound/direct_sound_samples/cries/spidops.aif index e1f2c32715..626aa0c3f5 100644 Binary files a/sound/direct_sound_samples/cries/spidops.aif and b/sound/direct_sound_samples/cries/spidops.aif differ diff --git a/sound/direct_sound_samples/cries/spinarak.aif b/sound/direct_sound_samples/cries/spinarak.aif index 880e81df6f..f49c856aca 100644 Binary files a/sound/direct_sound_samples/cries/spinarak.aif and b/sound/direct_sound_samples/cries/spinarak.aif differ diff --git a/sound/direct_sound_samples/cries/spinda.aif b/sound/direct_sound_samples/cries/spinda.aif index e5984de5bb..01914a5d09 100644 Binary files a/sound/direct_sound_samples/cries/spinda.aif and b/sound/direct_sound_samples/cries/spinda.aif differ diff --git a/sound/direct_sound_samples/cries/spiritomb.aif b/sound/direct_sound_samples/cries/spiritomb.aif index 2f5621b7c2..7a504adfb0 100644 Binary files a/sound/direct_sound_samples/cries/spiritomb.aif and b/sound/direct_sound_samples/cries/spiritomb.aif differ diff --git a/sound/direct_sound_samples/cries/spoink.aif b/sound/direct_sound_samples/cries/spoink.aif index af9e1a1ebc..102f53d8f1 100644 Binary files a/sound/direct_sound_samples/cries/spoink.aif and b/sound/direct_sound_samples/cries/spoink.aif differ diff --git a/sound/direct_sound_samples/cries/sprigatito.aif b/sound/direct_sound_samples/cries/sprigatito.aif index 5d6b5c966d..13616f9686 100644 Binary files a/sound/direct_sound_samples/cries/sprigatito.aif and b/sound/direct_sound_samples/cries/sprigatito.aif differ diff --git a/sound/direct_sound_samples/cries/spritzee.aif b/sound/direct_sound_samples/cries/spritzee.aif index 9c451c63ff..3bf2499d72 100644 Binary files a/sound/direct_sound_samples/cries/spritzee.aif and b/sound/direct_sound_samples/cries/spritzee.aif differ diff --git a/sound/direct_sound_samples/cries/squawkabilly.aif b/sound/direct_sound_samples/cries/squawkabilly.aif index 140243d802..0c88f36f74 100644 Binary files a/sound/direct_sound_samples/cries/squawkabilly.aif and b/sound/direct_sound_samples/cries/squawkabilly.aif differ diff --git a/sound/direct_sound_samples/cries/squirtle.aif b/sound/direct_sound_samples/cries/squirtle.aif index e570bc1834..8e6cf8644d 100644 Binary files a/sound/direct_sound_samples/cries/squirtle.aif and b/sound/direct_sound_samples/cries/squirtle.aif differ diff --git a/sound/direct_sound_samples/cries/stakataka.aif b/sound/direct_sound_samples/cries/stakataka.aif index 41f9336a74..cabe903b43 100644 Binary files a/sound/direct_sound_samples/cries/stakataka.aif and b/sound/direct_sound_samples/cries/stakataka.aif differ diff --git a/sound/direct_sound_samples/cries/stantler.aif b/sound/direct_sound_samples/cries/stantler.aif index 502840a83c..231466ebea 100644 Binary files a/sound/direct_sound_samples/cries/stantler.aif and b/sound/direct_sound_samples/cries/stantler.aif differ diff --git a/sound/direct_sound_samples/cries/staraptor.aif b/sound/direct_sound_samples/cries/staraptor.aif index 764a9d6639..05ccd1f024 100644 Binary files a/sound/direct_sound_samples/cries/staraptor.aif and b/sound/direct_sound_samples/cries/staraptor.aif differ diff --git a/sound/direct_sound_samples/cries/staravia.aif b/sound/direct_sound_samples/cries/staravia.aif index 3326b33006..235d14eaf8 100644 Binary files a/sound/direct_sound_samples/cries/staravia.aif and b/sound/direct_sound_samples/cries/staravia.aif differ diff --git a/sound/direct_sound_samples/cries/starly.aif b/sound/direct_sound_samples/cries/starly.aif index 00457fe6a4..2b0dd3960a 100644 Binary files a/sound/direct_sound_samples/cries/starly.aif and b/sound/direct_sound_samples/cries/starly.aif differ diff --git a/sound/direct_sound_samples/cries/starmie.aif b/sound/direct_sound_samples/cries/starmie.aif index 3dea58cecb..a2daf86800 100644 Binary files a/sound/direct_sound_samples/cries/starmie.aif and b/sound/direct_sound_samples/cries/starmie.aif differ diff --git a/sound/direct_sound_samples/cries/staryu.aif b/sound/direct_sound_samples/cries/staryu.aif index 60b416a1cc..cd0cbc6b2b 100644 Binary files a/sound/direct_sound_samples/cries/staryu.aif and b/sound/direct_sound_samples/cries/staryu.aif differ diff --git a/sound/direct_sound_samples/cries/steelix.aif b/sound/direct_sound_samples/cries/steelix.aif index 75836d1433..060cd00be4 100644 Binary files a/sound/direct_sound_samples/cries/steelix.aif and b/sound/direct_sound_samples/cries/steelix.aif differ diff --git a/sound/direct_sound_samples/cries/steenee.aif b/sound/direct_sound_samples/cries/steenee.aif index 27233d2c26..54b9df83b7 100644 Binary files a/sound/direct_sound_samples/cries/steenee.aif and b/sound/direct_sound_samples/cries/steenee.aif differ diff --git a/sound/direct_sound_samples/cries/stoutland.aif b/sound/direct_sound_samples/cries/stoutland.aif index 3175b64767..5479323d49 100644 Binary files a/sound/direct_sound_samples/cries/stoutland.aif and b/sound/direct_sound_samples/cries/stoutland.aif differ diff --git a/sound/direct_sound_samples/cries/stufful.aif b/sound/direct_sound_samples/cries/stufful.aif index f471a443b3..abd70624f0 100644 Binary files a/sound/direct_sound_samples/cries/stufful.aif and b/sound/direct_sound_samples/cries/stufful.aif differ diff --git a/sound/direct_sound_samples/cries/stunfisk.aif b/sound/direct_sound_samples/cries/stunfisk.aif index 5dbdb6dc9c..3d7f116cfd 100644 Binary files a/sound/direct_sound_samples/cries/stunfisk.aif and b/sound/direct_sound_samples/cries/stunfisk.aif differ diff --git a/sound/direct_sound_samples/cries/stunky.aif b/sound/direct_sound_samples/cries/stunky.aif index 41923bd96e..bb9a34bc62 100644 Binary files a/sound/direct_sound_samples/cries/stunky.aif and b/sound/direct_sound_samples/cries/stunky.aif differ diff --git a/sound/direct_sound_samples/cries/sudowoodo.aif b/sound/direct_sound_samples/cries/sudowoodo.aif index c81a09531b..64ef66ef0c 100644 Binary files a/sound/direct_sound_samples/cries/sudowoodo.aif and b/sound/direct_sound_samples/cries/sudowoodo.aif differ diff --git a/sound/direct_sound_samples/cries/suicune.aif b/sound/direct_sound_samples/cries/suicune.aif index 863d4adedc..10840f92c1 100644 Binary files a/sound/direct_sound_samples/cries/suicune.aif and b/sound/direct_sound_samples/cries/suicune.aif differ diff --git a/sound/direct_sound_samples/cries/sunflora.aif b/sound/direct_sound_samples/cries/sunflora.aif index c144580825..e64c7ab4e4 100644 Binary files a/sound/direct_sound_samples/cries/sunflora.aif and b/sound/direct_sound_samples/cries/sunflora.aif differ diff --git a/sound/direct_sound_samples/cries/sunkern.aif b/sound/direct_sound_samples/cries/sunkern.aif index 54ab4fba5d..ecead99e99 100644 Binary files a/sound/direct_sound_samples/cries/sunkern.aif and b/sound/direct_sound_samples/cries/sunkern.aif differ diff --git a/sound/direct_sound_samples/cries/surskit.aif b/sound/direct_sound_samples/cries/surskit.aif index 9898e58f1e..445daa6129 100644 Binary files a/sound/direct_sound_samples/cries/surskit.aif and b/sound/direct_sound_samples/cries/surskit.aif differ diff --git a/sound/direct_sound_samples/cries/swablu.aif b/sound/direct_sound_samples/cries/swablu.aif index 75e1555b74..0940910ce3 100644 Binary files a/sound/direct_sound_samples/cries/swablu.aif and b/sound/direct_sound_samples/cries/swablu.aif differ diff --git a/sound/direct_sound_samples/cries/swadloon.aif b/sound/direct_sound_samples/cries/swadloon.aif index 5de0315920..d2606953b2 100644 Binary files a/sound/direct_sound_samples/cries/swadloon.aif and b/sound/direct_sound_samples/cries/swadloon.aif differ diff --git a/sound/direct_sound_samples/cries/swalot.aif b/sound/direct_sound_samples/cries/swalot.aif index 45c0b0b85d..87e57c9b70 100644 Binary files a/sound/direct_sound_samples/cries/swalot.aif and b/sound/direct_sound_samples/cries/swalot.aif differ diff --git a/sound/direct_sound_samples/cries/swampert.aif b/sound/direct_sound_samples/cries/swampert.aif index 613e75261c..132844c705 100644 Binary files a/sound/direct_sound_samples/cries/swampert.aif and b/sound/direct_sound_samples/cries/swampert.aif differ diff --git a/sound/direct_sound_samples/cries/swanna.aif b/sound/direct_sound_samples/cries/swanna.aif index d7b01aed3b..9b2ef724f6 100644 Binary files a/sound/direct_sound_samples/cries/swanna.aif and b/sound/direct_sound_samples/cries/swanna.aif differ diff --git a/sound/direct_sound_samples/cries/swellow.aif b/sound/direct_sound_samples/cries/swellow.aif index 9ddeec7057..a5bf66627d 100644 Binary files a/sound/direct_sound_samples/cries/swellow.aif and b/sound/direct_sound_samples/cries/swellow.aif differ diff --git a/sound/direct_sound_samples/cries/swinub.aif b/sound/direct_sound_samples/cries/swinub.aif index 375f1b60a0..7b2a08bf6f 100644 Binary files a/sound/direct_sound_samples/cries/swinub.aif and b/sound/direct_sound_samples/cries/swinub.aif differ diff --git a/sound/direct_sound_samples/cries/swirlix.aif b/sound/direct_sound_samples/cries/swirlix.aif index b08e684fa7..89fa6ecd16 100644 Binary files a/sound/direct_sound_samples/cries/swirlix.aif and b/sound/direct_sound_samples/cries/swirlix.aif differ diff --git a/sound/direct_sound_samples/cries/swoobat.aif b/sound/direct_sound_samples/cries/swoobat.aif index c5b530b714..32f8d406c5 100644 Binary files a/sound/direct_sound_samples/cries/swoobat.aif and b/sound/direct_sound_samples/cries/swoobat.aif differ diff --git a/sound/direct_sound_samples/cries/sylveon.aif b/sound/direct_sound_samples/cries/sylveon.aif index 8d21184dc5..0ded5d19d1 100644 Binary files a/sound/direct_sound_samples/cries/sylveon.aif and b/sound/direct_sound_samples/cries/sylveon.aif differ diff --git a/sound/direct_sound_samples/cries/tadbulb.aif b/sound/direct_sound_samples/cries/tadbulb.aif index 6944fa31dc..4680059cde 100644 Binary files a/sound/direct_sound_samples/cries/tadbulb.aif and b/sound/direct_sound_samples/cries/tadbulb.aif differ diff --git a/sound/direct_sound_samples/cries/taillow.aif b/sound/direct_sound_samples/cries/taillow.aif index 9cbf5bcd6a..c30cdb275b 100644 Binary files a/sound/direct_sound_samples/cries/taillow.aif and b/sound/direct_sound_samples/cries/taillow.aif differ diff --git a/sound/direct_sound_samples/cries/talonflame.aif b/sound/direct_sound_samples/cries/talonflame.aif index ac86007040..d16a4a2128 100644 Binary files a/sound/direct_sound_samples/cries/talonflame.aif and b/sound/direct_sound_samples/cries/talonflame.aif differ diff --git a/sound/direct_sound_samples/cries/tangela.aif b/sound/direct_sound_samples/cries/tangela.aif index a3962027c2..e463f2b7e6 100644 Binary files a/sound/direct_sound_samples/cries/tangela.aif and b/sound/direct_sound_samples/cries/tangela.aif differ diff --git a/sound/direct_sound_samples/cries/tangrowth.aif b/sound/direct_sound_samples/cries/tangrowth.aif index 0f3ca54902..23e3d995b7 100644 Binary files a/sound/direct_sound_samples/cries/tangrowth.aif and b/sound/direct_sound_samples/cries/tangrowth.aif differ diff --git a/sound/direct_sound_samples/cries/tapu_bulu.aif b/sound/direct_sound_samples/cries/tapu_bulu.aif index 36d31a68d7..ab84791fa7 100644 Binary files a/sound/direct_sound_samples/cries/tapu_bulu.aif and b/sound/direct_sound_samples/cries/tapu_bulu.aif differ diff --git a/sound/direct_sound_samples/cries/tapu_fini.aif b/sound/direct_sound_samples/cries/tapu_fini.aif index 203ca8d9c8..301b0a70b8 100644 Binary files a/sound/direct_sound_samples/cries/tapu_fini.aif and b/sound/direct_sound_samples/cries/tapu_fini.aif differ diff --git a/sound/direct_sound_samples/cries/tapu_koko.aif b/sound/direct_sound_samples/cries/tapu_koko.aif index b8b71fcf09..2fae1a3b0b 100644 Binary files a/sound/direct_sound_samples/cries/tapu_koko.aif and b/sound/direct_sound_samples/cries/tapu_koko.aif differ diff --git a/sound/direct_sound_samples/cries/tapu_lele.aif b/sound/direct_sound_samples/cries/tapu_lele.aif index 8b13f0ddf0..c15bb31862 100644 Binary files a/sound/direct_sound_samples/cries/tapu_lele.aif and b/sound/direct_sound_samples/cries/tapu_lele.aif differ diff --git a/sound/direct_sound_samples/cries/tarountula.aif b/sound/direct_sound_samples/cries/tarountula.aif index a08f51ee20..d8d2438565 100644 Binary files a/sound/direct_sound_samples/cries/tarountula.aif and b/sound/direct_sound_samples/cries/tarountula.aif differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_curly.aif b/sound/direct_sound_samples/cries/tatsugiri_curly.aif index ad84b37285..16c03553ab 100644 Binary files a/sound/direct_sound_samples/cries/tatsugiri_curly.aif and b/sound/direct_sound_samples/cries/tatsugiri_curly.aif differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_droopy.aif b/sound/direct_sound_samples/cries/tatsugiri_droopy.aif index 38b0a7949a..20131039e5 100644 Binary files a/sound/direct_sound_samples/cries/tatsugiri_droopy.aif and b/sound/direct_sound_samples/cries/tatsugiri_droopy.aif differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif b/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif index ad1fbe930b..08e5680433 100644 Binary files a/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif and b/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif differ diff --git a/sound/direct_sound_samples/cries/tauros.aif b/sound/direct_sound_samples/cries/tauros.aif index fb79a648ae..1b4bdfa5c4 100644 Binary files a/sound/direct_sound_samples/cries/tauros.aif and b/sound/direct_sound_samples/cries/tauros.aif differ diff --git a/sound/direct_sound_samples/cries/teddiursa.aif b/sound/direct_sound_samples/cries/teddiursa.aif index dc99db734b..19ba558c3b 100644 Binary files a/sound/direct_sound_samples/cries/teddiursa.aif and b/sound/direct_sound_samples/cries/teddiursa.aif differ diff --git a/sound/direct_sound_samples/cries/tentacool.aif b/sound/direct_sound_samples/cries/tentacool.aif index f3b32c741e..8918f25627 100644 Binary files a/sound/direct_sound_samples/cries/tentacool.aif and b/sound/direct_sound_samples/cries/tentacool.aif differ diff --git a/sound/direct_sound_samples/cries/tentacruel.aif b/sound/direct_sound_samples/cries/tentacruel.aif index 13b91bbd3e..2497d178df 100644 Binary files a/sound/direct_sound_samples/cries/tentacruel.aif and b/sound/direct_sound_samples/cries/tentacruel.aif differ diff --git a/sound/direct_sound_samples/cries/tepig.aif b/sound/direct_sound_samples/cries/tepig.aif index fa226ef1f1..45b7b4ecda 100644 Binary files a/sound/direct_sound_samples/cries/tepig.aif and b/sound/direct_sound_samples/cries/tepig.aif differ diff --git a/sound/direct_sound_samples/cries/terrakion.aif b/sound/direct_sound_samples/cries/terrakion.aif index 77e5c71ca2..e567be0f1e 100644 Binary files a/sound/direct_sound_samples/cries/terrakion.aif and b/sound/direct_sound_samples/cries/terrakion.aif differ diff --git a/sound/direct_sound_samples/cries/throh.aif b/sound/direct_sound_samples/cries/throh.aif index 176d1065d6..eeeba64e4b 100644 Binary files a/sound/direct_sound_samples/cries/throh.aif and b/sound/direct_sound_samples/cries/throh.aif differ diff --git a/sound/direct_sound_samples/cries/thundurus_incarnate.aif b/sound/direct_sound_samples/cries/thundurus_incarnate.aif index 75a1af958a..8b1c81b9f9 100644 Binary files a/sound/direct_sound_samples/cries/thundurus_incarnate.aif and b/sound/direct_sound_samples/cries/thundurus_incarnate.aif differ diff --git a/sound/direct_sound_samples/cries/thundurus_therian.aif b/sound/direct_sound_samples/cries/thundurus_therian.aif index 318201f1b8..f5ac69f177 100644 Binary files a/sound/direct_sound_samples/cries/thundurus_therian.aif and b/sound/direct_sound_samples/cries/thundurus_therian.aif differ diff --git a/sound/direct_sound_samples/cries/thwackey.aif b/sound/direct_sound_samples/cries/thwackey.aif index dff37f5c80..579df5c965 100644 Binary files a/sound/direct_sound_samples/cries/thwackey.aif and b/sound/direct_sound_samples/cries/thwackey.aif differ diff --git a/sound/direct_sound_samples/cries/timburr.aif b/sound/direct_sound_samples/cries/timburr.aif index 839bfb59b7..49edb74efb 100644 Binary files a/sound/direct_sound_samples/cries/timburr.aif and b/sound/direct_sound_samples/cries/timburr.aif differ diff --git a/sound/direct_sound_samples/cries/ting_lu.aif b/sound/direct_sound_samples/cries/ting_lu.aif index 82cbff16f3..a4a5ed2118 100644 Binary files a/sound/direct_sound_samples/cries/ting_lu.aif and b/sound/direct_sound_samples/cries/ting_lu.aif differ diff --git a/sound/direct_sound_samples/cries/tinkatink.aif b/sound/direct_sound_samples/cries/tinkatink.aif index 24b50dbbf0..a6229c1338 100644 Binary files a/sound/direct_sound_samples/cries/tinkatink.aif and b/sound/direct_sound_samples/cries/tinkatink.aif differ diff --git a/sound/direct_sound_samples/cries/tinkaton.aif b/sound/direct_sound_samples/cries/tinkaton.aif index c48068f692..fd88cb8459 100644 Binary files a/sound/direct_sound_samples/cries/tinkaton.aif and b/sound/direct_sound_samples/cries/tinkaton.aif differ diff --git a/sound/direct_sound_samples/cries/tirtouga.aif b/sound/direct_sound_samples/cries/tirtouga.aif index d32ec5ef3c..2233557d22 100644 Binary files a/sound/direct_sound_samples/cries/tirtouga.aif and b/sound/direct_sound_samples/cries/tirtouga.aif differ diff --git a/sound/direct_sound_samples/cries/toedscruel.aif b/sound/direct_sound_samples/cries/toedscruel.aif index 87fc37decd..1f2fade60c 100644 Binary files a/sound/direct_sound_samples/cries/toedscruel.aif and b/sound/direct_sound_samples/cries/toedscruel.aif differ diff --git a/sound/direct_sound_samples/cries/togedemaru.aif b/sound/direct_sound_samples/cries/togedemaru.aif index 1ac46d6f97..366ce2be96 100644 Binary files a/sound/direct_sound_samples/cries/togedemaru.aif and b/sound/direct_sound_samples/cries/togedemaru.aif differ diff --git a/sound/direct_sound_samples/cries/togekiss.aif b/sound/direct_sound_samples/cries/togekiss.aif index a365ddd94d..c66baeaf55 100644 Binary files a/sound/direct_sound_samples/cries/togekiss.aif and b/sound/direct_sound_samples/cries/togekiss.aif differ diff --git a/sound/direct_sound_samples/cries/togepi.aif b/sound/direct_sound_samples/cries/togepi.aif index 351fea00fc..0785a662ab 100644 Binary files a/sound/direct_sound_samples/cries/togepi.aif and b/sound/direct_sound_samples/cries/togepi.aif differ diff --git a/sound/direct_sound_samples/cries/togetic.aif b/sound/direct_sound_samples/cries/togetic.aif index 6fd29b73d5..f577120c6d 100644 Binary files a/sound/direct_sound_samples/cries/togetic.aif and b/sound/direct_sound_samples/cries/togetic.aif differ diff --git a/sound/direct_sound_samples/cries/torchic.aif b/sound/direct_sound_samples/cries/torchic.aif index 0f39232bff..3accc1b3c8 100644 Binary files a/sound/direct_sound_samples/cries/torchic.aif and b/sound/direct_sound_samples/cries/torchic.aif differ diff --git a/sound/direct_sound_samples/cries/torkoal.aif b/sound/direct_sound_samples/cries/torkoal.aif index cfdcd3971e..b73d06ef5e 100644 Binary files a/sound/direct_sound_samples/cries/torkoal.aif and b/sound/direct_sound_samples/cries/torkoal.aif differ diff --git a/sound/direct_sound_samples/cries/tornadus_incarnate.aif b/sound/direct_sound_samples/cries/tornadus_incarnate.aif index 30f96ec8fe..b980ce2bb5 100644 Binary files a/sound/direct_sound_samples/cries/tornadus_incarnate.aif and b/sound/direct_sound_samples/cries/tornadus_incarnate.aif differ diff --git a/sound/direct_sound_samples/cries/tornadus_therian.aif b/sound/direct_sound_samples/cries/tornadus_therian.aif index ff5993e962..a1d98062b6 100644 Binary files a/sound/direct_sound_samples/cries/tornadus_therian.aif and b/sound/direct_sound_samples/cries/tornadus_therian.aif differ diff --git a/sound/direct_sound_samples/cries/torracat.aif b/sound/direct_sound_samples/cries/torracat.aif index 7b9d9bd574..44bb001375 100644 Binary files a/sound/direct_sound_samples/cries/torracat.aif and b/sound/direct_sound_samples/cries/torracat.aif differ diff --git a/sound/direct_sound_samples/cries/torterra.aif b/sound/direct_sound_samples/cries/torterra.aif index 3f0960d9a2..e659181e23 100644 Binary files a/sound/direct_sound_samples/cries/torterra.aif and b/sound/direct_sound_samples/cries/torterra.aif differ diff --git a/sound/direct_sound_samples/cries/totodile.aif b/sound/direct_sound_samples/cries/totodile.aif index d87de7d522..98fbb528be 100644 Binary files a/sound/direct_sound_samples/cries/totodile.aif and b/sound/direct_sound_samples/cries/totodile.aif differ diff --git a/sound/direct_sound_samples/cries/toucannon.aif b/sound/direct_sound_samples/cries/toucannon.aif index e83fe24fe8..83a90bab9c 100644 Binary files a/sound/direct_sound_samples/cries/toucannon.aif and b/sound/direct_sound_samples/cries/toucannon.aif differ diff --git a/sound/direct_sound_samples/cries/toxapex.aif b/sound/direct_sound_samples/cries/toxapex.aif index 226a666b71..3369da2f70 100644 Binary files a/sound/direct_sound_samples/cries/toxapex.aif and b/sound/direct_sound_samples/cries/toxapex.aif differ diff --git a/sound/direct_sound_samples/cries/toxel.aif b/sound/direct_sound_samples/cries/toxel.aif index 2f1304295b..0f917edddb 100644 Binary files a/sound/direct_sound_samples/cries/toxel.aif and b/sound/direct_sound_samples/cries/toxel.aif differ diff --git a/sound/direct_sound_samples/cries/toxicroak.aif b/sound/direct_sound_samples/cries/toxicroak.aif index 676e53276c..ada83b0a2b 100644 Binary files a/sound/direct_sound_samples/cries/toxicroak.aif and b/sound/direct_sound_samples/cries/toxicroak.aif differ diff --git a/sound/direct_sound_samples/cries/tranquill.aif b/sound/direct_sound_samples/cries/tranquill.aif index e11795686b..6a4e8a7661 100644 Binary files a/sound/direct_sound_samples/cries/tranquill.aif and b/sound/direct_sound_samples/cries/tranquill.aif differ diff --git a/sound/direct_sound_samples/cries/trapinch.aif b/sound/direct_sound_samples/cries/trapinch.aif index 03e1b1a946..cc27653fd4 100644 Binary files a/sound/direct_sound_samples/cries/trapinch.aif and b/sound/direct_sound_samples/cries/trapinch.aif differ diff --git a/sound/direct_sound_samples/cries/treecko.aif b/sound/direct_sound_samples/cries/treecko.aif index 5ee12d7b92..e9a47979e0 100644 Binary files a/sound/direct_sound_samples/cries/treecko.aif and b/sound/direct_sound_samples/cries/treecko.aif differ diff --git a/sound/direct_sound_samples/cries/trevenant.aif b/sound/direct_sound_samples/cries/trevenant.aif index 164253fd16..018a80e8c2 100644 Binary files a/sound/direct_sound_samples/cries/trevenant.aif and b/sound/direct_sound_samples/cries/trevenant.aif differ diff --git a/sound/direct_sound_samples/cries/tropius.aif b/sound/direct_sound_samples/cries/tropius.aif index 17359795ea..81046fe1cf 100644 Binary files a/sound/direct_sound_samples/cries/tropius.aif and b/sound/direct_sound_samples/cries/tropius.aif differ diff --git a/sound/direct_sound_samples/cries/trubbish.aif b/sound/direct_sound_samples/cries/trubbish.aif index 7bde68d8ca..09c1aac572 100644 Binary files a/sound/direct_sound_samples/cries/trubbish.aif and b/sound/direct_sound_samples/cries/trubbish.aif differ diff --git a/sound/direct_sound_samples/cries/trumbeak.aif b/sound/direct_sound_samples/cries/trumbeak.aif index 73fdb3f838..c6e477c401 100644 Binary files a/sound/direct_sound_samples/cries/trumbeak.aif and b/sound/direct_sound_samples/cries/trumbeak.aif differ diff --git a/sound/direct_sound_samples/cries/tsareena.aif b/sound/direct_sound_samples/cries/tsareena.aif index 92d7ad1b93..bff64b0f3f 100644 Binary files a/sound/direct_sound_samples/cries/tsareena.aif and b/sound/direct_sound_samples/cries/tsareena.aif differ diff --git a/sound/direct_sound_samples/cries/turtonator.aif b/sound/direct_sound_samples/cries/turtonator.aif index a15a2bb130..b5d27b630f 100644 Binary files a/sound/direct_sound_samples/cries/turtonator.aif and b/sound/direct_sound_samples/cries/turtonator.aif differ diff --git a/sound/direct_sound_samples/cries/turtwig.aif b/sound/direct_sound_samples/cries/turtwig.aif index 3de56621bb..a2e4ad60b3 100644 Binary files a/sound/direct_sound_samples/cries/turtwig.aif and b/sound/direct_sound_samples/cries/turtwig.aif differ diff --git a/sound/direct_sound_samples/cries/tympole.aif b/sound/direct_sound_samples/cries/tympole.aif index 172aab0560..d643216736 100644 Binary files a/sound/direct_sound_samples/cries/tympole.aif and b/sound/direct_sound_samples/cries/tympole.aif differ diff --git a/sound/direct_sound_samples/cries/tynamo.aif b/sound/direct_sound_samples/cries/tynamo.aif index 647040c17a..ca9e2962fc 100644 Binary files a/sound/direct_sound_samples/cries/tynamo.aif and b/sound/direct_sound_samples/cries/tynamo.aif differ diff --git a/sound/direct_sound_samples/cries/type_null.aif b/sound/direct_sound_samples/cries/type_null.aif index e1d46c83e4..6b6be2dcfb 100644 Binary files a/sound/direct_sound_samples/cries/type_null.aif and b/sound/direct_sound_samples/cries/type_null.aif differ diff --git a/sound/direct_sound_samples/cries/typhlosion.aif b/sound/direct_sound_samples/cries/typhlosion.aif index c0f4f7de3c..cc993c8052 100644 Binary files a/sound/direct_sound_samples/cries/typhlosion.aif and b/sound/direct_sound_samples/cries/typhlosion.aif differ diff --git a/sound/direct_sound_samples/cries/tyranitar.aif b/sound/direct_sound_samples/cries/tyranitar.aif index 54fcd87963..3572da7667 100644 Binary files a/sound/direct_sound_samples/cries/tyranitar.aif and b/sound/direct_sound_samples/cries/tyranitar.aif differ diff --git a/sound/direct_sound_samples/cries/tyrantrum.aif b/sound/direct_sound_samples/cries/tyrantrum.aif index 7bb4825a0f..88e9506129 100644 Binary files a/sound/direct_sound_samples/cries/tyrantrum.aif and b/sound/direct_sound_samples/cries/tyrantrum.aif differ diff --git a/sound/direct_sound_samples/cries/tyrogue.aif b/sound/direct_sound_samples/cries/tyrogue.aif index 5cbb4792f0..7caea851b3 100644 Binary files a/sound/direct_sound_samples/cries/tyrogue.aif and b/sound/direct_sound_samples/cries/tyrogue.aif differ diff --git a/sound/direct_sound_samples/cries/tyrunt.aif b/sound/direct_sound_samples/cries/tyrunt.aif index 5f8599dbfb..e693736005 100644 Binary files a/sound/direct_sound_samples/cries/tyrunt.aif and b/sound/direct_sound_samples/cries/tyrunt.aif differ diff --git a/sound/direct_sound_samples/cries/umbreon.aif b/sound/direct_sound_samples/cries/umbreon.aif index b28a8602a8..93c739dd74 100644 Binary files a/sound/direct_sound_samples/cries/umbreon.aif and b/sound/direct_sound_samples/cries/umbreon.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_klefki.aif b/sound/direct_sound_samples/cries/uncomp_klefki.aif index 4af6a9d6d1..c059b56628 100644 Binary files a/sound/direct_sound_samples/cries/uncomp_klefki.aif and b/sound/direct_sound_samples/cries/uncomp_klefki.aif differ diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif index a37b0537ec..aa5fce23b6 100644 Binary files a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif and b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif differ diff --git a/sound/direct_sound_samples/cries/unfezant.aif b/sound/direct_sound_samples/cries/unfezant.aif index 4a3a8a9b07..1fde88bf0e 100644 Binary files a/sound/direct_sound_samples/cries/unfezant.aif and b/sound/direct_sound_samples/cries/unfezant.aif differ diff --git a/sound/direct_sound_samples/cries/unown.aif b/sound/direct_sound_samples/cries/unown.aif index 86a836135d..0b3edf577f 100644 Binary files a/sound/direct_sound_samples/cries/unown.aif and b/sound/direct_sound_samples/cries/unown.aif differ diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif index f2e96997f1..7ce14c630e 100644 Binary files a/sound/direct_sound_samples/cries/ursaluna.aif and b/sound/direct_sound_samples/cries/ursaluna.aif differ diff --git a/sound/direct_sound_samples/cries/ursaring.aif b/sound/direct_sound_samples/cries/ursaring.aif index 643738f839..7837ba6597 100644 Binary files a/sound/direct_sound_samples/cries/ursaring.aif and b/sound/direct_sound_samples/cries/ursaring.aif differ diff --git a/sound/direct_sound_samples/cries/uxie.aif b/sound/direct_sound_samples/cries/uxie.aif index 34745ddd9b..da67cfc996 100644 Binary files a/sound/direct_sound_samples/cries/uxie.aif and b/sound/direct_sound_samples/cries/uxie.aif differ diff --git a/sound/direct_sound_samples/cries/vanillish.aif b/sound/direct_sound_samples/cries/vanillish.aif index 07fe3555e4..625921a24b 100644 Binary files a/sound/direct_sound_samples/cries/vanillish.aif and b/sound/direct_sound_samples/cries/vanillish.aif differ diff --git a/sound/direct_sound_samples/cries/vanillite.aif b/sound/direct_sound_samples/cries/vanillite.aif index e982d31bee..03d25f9615 100644 Binary files a/sound/direct_sound_samples/cries/vanillite.aif and b/sound/direct_sound_samples/cries/vanillite.aif differ diff --git a/sound/direct_sound_samples/cries/vanilluxe.aif b/sound/direct_sound_samples/cries/vanilluxe.aif index 94b6f03492..e515359ee0 100644 Binary files a/sound/direct_sound_samples/cries/vanilluxe.aif and b/sound/direct_sound_samples/cries/vanilluxe.aif differ diff --git a/sound/direct_sound_samples/cries/vaporeon.aif b/sound/direct_sound_samples/cries/vaporeon.aif index 937ad74ce1..3c9bf7ee8b 100644 Binary files a/sound/direct_sound_samples/cries/vaporeon.aif and b/sound/direct_sound_samples/cries/vaporeon.aif differ diff --git a/sound/direct_sound_samples/cries/veluza.aif b/sound/direct_sound_samples/cries/veluza.aif index 9bcf8974ff..d76ed74b66 100644 Binary files a/sound/direct_sound_samples/cries/veluza.aif and b/sound/direct_sound_samples/cries/veluza.aif differ diff --git a/sound/direct_sound_samples/cries/venipede.aif b/sound/direct_sound_samples/cries/venipede.aif index 4ccde9b768..d1c1e04e7b 100644 Binary files a/sound/direct_sound_samples/cries/venipede.aif and b/sound/direct_sound_samples/cries/venipede.aif differ diff --git a/sound/direct_sound_samples/cries/venomoth.aif b/sound/direct_sound_samples/cries/venomoth.aif index 0ae031bb93..eb4ad02af7 100644 Binary files a/sound/direct_sound_samples/cries/venomoth.aif and b/sound/direct_sound_samples/cries/venomoth.aif differ diff --git a/sound/direct_sound_samples/cries/venonat.aif b/sound/direct_sound_samples/cries/venonat.aif index f490a4445b..5bf36808c4 100644 Binary files a/sound/direct_sound_samples/cries/venonat.aif and b/sound/direct_sound_samples/cries/venonat.aif differ diff --git a/sound/direct_sound_samples/cries/venusaur.aif b/sound/direct_sound_samples/cries/venusaur.aif index 6e890f73b7..91386c177d 100644 Binary files a/sound/direct_sound_samples/cries/venusaur.aif and b/sound/direct_sound_samples/cries/venusaur.aif differ diff --git a/sound/direct_sound_samples/cries/vespiquen.aif b/sound/direct_sound_samples/cries/vespiquen.aif index 5fdbd5e2f1..c86e9a403b 100644 Binary files a/sound/direct_sound_samples/cries/vespiquen.aif and b/sound/direct_sound_samples/cries/vespiquen.aif differ diff --git a/sound/direct_sound_samples/cries/vibrava.aif b/sound/direct_sound_samples/cries/vibrava.aif index 7470142647..7e0a13c6df 100644 Binary files a/sound/direct_sound_samples/cries/vibrava.aif and b/sound/direct_sound_samples/cries/vibrava.aif differ diff --git a/sound/direct_sound_samples/cries/victini.aif b/sound/direct_sound_samples/cries/victini.aif index 4bd7d7c1ca..cada6fbf07 100644 Binary files a/sound/direct_sound_samples/cries/victini.aif and b/sound/direct_sound_samples/cries/victini.aif differ diff --git a/sound/direct_sound_samples/cries/victreebel.aif b/sound/direct_sound_samples/cries/victreebel.aif index d16996bb86..62bb048d4c 100644 Binary files a/sound/direct_sound_samples/cries/victreebel.aif and b/sound/direct_sound_samples/cries/victreebel.aif differ diff --git a/sound/direct_sound_samples/cries/vigoroth.aif b/sound/direct_sound_samples/cries/vigoroth.aif index 4f6e00a137..8e3560ab1d 100644 Binary files a/sound/direct_sound_samples/cries/vigoroth.aif and b/sound/direct_sound_samples/cries/vigoroth.aif differ diff --git a/sound/direct_sound_samples/cries/vikavolt.aif b/sound/direct_sound_samples/cries/vikavolt.aif index e92d6fdd41..badd95c3c5 100644 Binary files a/sound/direct_sound_samples/cries/vikavolt.aif and b/sound/direct_sound_samples/cries/vikavolt.aif differ diff --git a/sound/direct_sound_samples/cries/vileplume.aif b/sound/direct_sound_samples/cries/vileplume.aif index f182cf99da..e190e21511 100644 Binary files a/sound/direct_sound_samples/cries/vileplume.aif and b/sound/direct_sound_samples/cries/vileplume.aif differ diff --git a/sound/direct_sound_samples/cries/virizion.aif b/sound/direct_sound_samples/cries/virizion.aif index 06cf7a86f3..7f1d8292b0 100644 Binary files a/sound/direct_sound_samples/cries/virizion.aif and b/sound/direct_sound_samples/cries/virizion.aif differ diff --git a/sound/direct_sound_samples/cries/vivillon.aif b/sound/direct_sound_samples/cries/vivillon.aif index 303834d8a1..bf7474dd95 100644 Binary files a/sound/direct_sound_samples/cries/vivillon.aif and b/sound/direct_sound_samples/cries/vivillon.aif differ diff --git a/sound/direct_sound_samples/cries/volbeat.aif b/sound/direct_sound_samples/cries/volbeat.aif index 90e5e66ca0..8d73e2c21d 100644 Binary files a/sound/direct_sound_samples/cries/volbeat.aif and b/sound/direct_sound_samples/cries/volbeat.aif differ diff --git a/sound/direct_sound_samples/cries/volcanion.aif b/sound/direct_sound_samples/cries/volcanion.aif index 3d4ecd09a8..72c78807a6 100644 Binary files a/sound/direct_sound_samples/cries/volcanion.aif and b/sound/direct_sound_samples/cries/volcanion.aif differ diff --git a/sound/direct_sound_samples/cries/volcarona.aif b/sound/direct_sound_samples/cries/volcarona.aif index 8d34404dc0..f62e6e9e38 100644 Binary files a/sound/direct_sound_samples/cries/volcarona.aif and b/sound/direct_sound_samples/cries/volcarona.aif differ diff --git a/sound/direct_sound_samples/cries/voltorb.aif b/sound/direct_sound_samples/cries/voltorb.aif index 54a3597708..832429cbf2 100644 Binary files a/sound/direct_sound_samples/cries/voltorb.aif and b/sound/direct_sound_samples/cries/voltorb.aif differ diff --git a/sound/direct_sound_samples/cries/vullaby.aif b/sound/direct_sound_samples/cries/vullaby.aif index 97df0d14f9..49d0648e9f 100644 Binary files a/sound/direct_sound_samples/cries/vullaby.aif and b/sound/direct_sound_samples/cries/vullaby.aif differ diff --git a/sound/direct_sound_samples/cries/vulpix.aif b/sound/direct_sound_samples/cries/vulpix.aif index 04a60e27ea..32b149999e 100644 Binary files a/sound/direct_sound_samples/cries/vulpix.aif and b/sound/direct_sound_samples/cries/vulpix.aif differ diff --git a/sound/direct_sound_samples/cries/wailmer.aif b/sound/direct_sound_samples/cries/wailmer.aif index e21c05c4b2..8bada495e4 100644 Binary files a/sound/direct_sound_samples/cries/wailmer.aif and b/sound/direct_sound_samples/cries/wailmer.aif differ diff --git a/sound/direct_sound_samples/cries/wailord.aif b/sound/direct_sound_samples/cries/wailord.aif index 40c331d40d..ea0f553cf8 100644 Binary files a/sound/direct_sound_samples/cries/wailord.aif and b/sound/direct_sound_samples/cries/wailord.aif differ diff --git a/sound/direct_sound_samples/cries/walrein.aif b/sound/direct_sound_samples/cries/walrein.aif index 475a874ef9..2843617fbf 100644 Binary files a/sound/direct_sound_samples/cries/walrein.aif and b/sound/direct_sound_samples/cries/walrein.aif differ diff --git a/sound/direct_sound_samples/cries/wartortle.aif b/sound/direct_sound_samples/cries/wartortle.aif index aa664369d7..de2aa25480 100644 Binary files a/sound/direct_sound_samples/cries/wartortle.aif and b/sound/direct_sound_samples/cries/wartortle.aif differ diff --git a/sound/direct_sound_samples/cries/watchog.aif b/sound/direct_sound_samples/cries/watchog.aif index a3bd8a0f7e..df08e7a296 100644 Binary files a/sound/direct_sound_samples/cries/watchog.aif and b/sound/direct_sound_samples/cries/watchog.aif differ diff --git a/sound/direct_sound_samples/cries/wattrel.aif b/sound/direct_sound_samples/cries/wattrel.aif index 7390eea50a..361ead8356 100644 Binary files a/sound/direct_sound_samples/cries/wattrel.aif and b/sound/direct_sound_samples/cries/wattrel.aif differ diff --git a/sound/direct_sound_samples/cries/weavile.aif b/sound/direct_sound_samples/cries/weavile.aif index 2a1ff90b56..5bfb5019df 100644 Binary files a/sound/direct_sound_samples/cries/weavile.aif and b/sound/direct_sound_samples/cries/weavile.aif differ diff --git a/sound/direct_sound_samples/cries/weedle.aif b/sound/direct_sound_samples/cries/weedle.aif index 06a26f3d76..ac5b0eb765 100644 Binary files a/sound/direct_sound_samples/cries/weedle.aif and b/sound/direct_sound_samples/cries/weedle.aif differ diff --git a/sound/direct_sound_samples/cries/weepinbell.aif b/sound/direct_sound_samples/cries/weepinbell.aif index b5df3f6002..0b20df8089 100644 Binary files a/sound/direct_sound_samples/cries/weepinbell.aif and b/sound/direct_sound_samples/cries/weepinbell.aif differ diff --git a/sound/direct_sound_samples/cries/weezing.aif b/sound/direct_sound_samples/cries/weezing.aif index 42c3d4a5bb..b7b8d93da5 100644 Binary files a/sound/direct_sound_samples/cries/weezing.aif and b/sound/direct_sound_samples/cries/weezing.aif differ diff --git a/sound/direct_sound_samples/cries/whimsicott.aif b/sound/direct_sound_samples/cries/whimsicott.aif index 806904d0d8..873d8a1b41 100644 Binary files a/sound/direct_sound_samples/cries/whimsicott.aif and b/sound/direct_sound_samples/cries/whimsicott.aif differ diff --git a/sound/direct_sound_samples/cries/whirlipede.aif b/sound/direct_sound_samples/cries/whirlipede.aif index f2b6c5fa69..c9b64404b8 100644 Binary files a/sound/direct_sound_samples/cries/whirlipede.aif and b/sound/direct_sound_samples/cries/whirlipede.aif differ diff --git a/sound/direct_sound_samples/cries/whiscash.aif b/sound/direct_sound_samples/cries/whiscash.aif index 9d3a28786f..71cd9fd00a 100644 Binary files a/sound/direct_sound_samples/cries/whiscash.aif and b/sound/direct_sound_samples/cries/whiscash.aif differ diff --git a/sound/direct_sound_samples/cries/whismur.aif b/sound/direct_sound_samples/cries/whismur.aif index 272a9f8654..c5a2369ba9 100644 Binary files a/sound/direct_sound_samples/cries/whismur.aif and b/sound/direct_sound_samples/cries/whismur.aif differ diff --git a/sound/direct_sound_samples/cries/wigglytuff.aif b/sound/direct_sound_samples/cries/wigglytuff.aif index 468dcc2066..07fcc8ebd3 100644 Binary files a/sound/direct_sound_samples/cries/wigglytuff.aif and b/sound/direct_sound_samples/cries/wigglytuff.aif differ diff --git a/sound/direct_sound_samples/cries/wimpod.aif b/sound/direct_sound_samples/cries/wimpod.aif index 07242eeebb..5b75964096 100644 Binary files a/sound/direct_sound_samples/cries/wimpod.aif and b/sound/direct_sound_samples/cries/wimpod.aif differ diff --git a/sound/direct_sound_samples/cries/wingull.aif b/sound/direct_sound_samples/cries/wingull.aif index f1965f6635..49b04d9d96 100644 Binary files a/sound/direct_sound_samples/cries/wingull.aif and b/sound/direct_sound_samples/cries/wingull.aif differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_school.aif b/sound/direct_sound_samples/cries/wishiwashi_school.aif index ab0ac98535..e63ce913a2 100644 Binary files a/sound/direct_sound_samples/cries/wishiwashi_school.aif and b/sound/direct_sound_samples/cries/wishiwashi_school.aif differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_solo.aif b/sound/direct_sound_samples/cries/wishiwashi_solo.aif index 9a9d1aae71..e6e26b75c6 100644 Binary files a/sound/direct_sound_samples/cries/wishiwashi_solo.aif and b/sound/direct_sound_samples/cries/wishiwashi_solo.aif differ diff --git a/sound/direct_sound_samples/cries/wo_chien.aif b/sound/direct_sound_samples/cries/wo_chien.aif index fa201694eb..f50bd73e8d 100644 Binary files a/sound/direct_sound_samples/cries/wo_chien.aif and b/sound/direct_sound_samples/cries/wo_chien.aif differ diff --git a/sound/direct_sound_samples/cries/wobbuffet.aif b/sound/direct_sound_samples/cries/wobbuffet.aif index 2c8193908a..8e50da47bb 100644 Binary files a/sound/direct_sound_samples/cries/wobbuffet.aif and b/sound/direct_sound_samples/cries/wobbuffet.aif differ diff --git a/sound/direct_sound_samples/cries/woobat.aif b/sound/direct_sound_samples/cries/woobat.aif index d66f5bd157..db8ae140e2 100644 Binary files a/sound/direct_sound_samples/cries/woobat.aif and b/sound/direct_sound_samples/cries/woobat.aif differ diff --git a/sound/direct_sound_samples/cries/wooper.aif b/sound/direct_sound_samples/cries/wooper.aif index c2d80b32c4..d4b9ea1b4a 100644 Binary files a/sound/direct_sound_samples/cries/wooper.aif and b/sound/direct_sound_samples/cries/wooper.aif differ diff --git a/sound/direct_sound_samples/cries/wormadam.aif b/sound/direct_sound_samples/cries/wormadam.aif index 633aeeafc3..3645108206 100644 Binary files a/sound/direct_sound_samples/cries/wormadam.aif and b/sound/direct_sound_samples/cries/wormadam.aif differ diff --git a/sound/direct_sound_samples/cries/wurmple.aif b/sound/direct_sound_samples/cries/wurmple.aif index e75a6e237f..1754d7e2b7 100644 Binary files a/sound/direct_sound_samples/cries/wurmple.aif and b/sound/direct_sound_samples/cries/wurmple.aif differ diff --git a/sound/direct_sound_samples/cries/wynaut.aif b/sound/direct_sound_samples/cries/wynaut.aif index f7563a8ebb..ddd289f9a4 100644 Binary files a/sound/direct_sound_samples/cries/wynaut.aif and b/sound/direct_sound_samples/cries/wynaut.aif differ diff --git a/sound/direct_sound_samples/cries/wyrdeer.aif b/sound/direct_sound_samples/cries/wyrdeer.aif index 4d0c83dc51..597df62ab8 100644 Binary files a/sound/direct_sound_samples/cries/wyrdeer.aif and b/sound/direct_sound_samples/cries/wyrdeer.aif differ diff --git a/sound/direct_sound_samples/cries/xatu.aif b/sound/direct_sound_samples/cries/xatu.aif index 8a4f2369d8..da4afe62ca 100644 Binary files a/sound/direct_sound_samples/cries/xatu.aif and b/sound/direct_sound_samples/cries/xatu.aif differ diff --git a/sound/direct_sound_samples/cries/xerneas.aif b/sound/direct_sound_samples/cries/xerneas.aif index 88cace168b..4745e8e685 100644 Binary files a/sound/direct_sound_samples/cries/xerneas.aif and b/sound/direct_sound_samples/cries/xerneas.aif differ diff --git a/sound/direct_sound_samples/cries/xurkitree.aif b/sound/direct_sound_samples/cries/xurkitree.aif index 917348ac0b..3b0f5f3812 100644 Binary files a/sound/direct_sound_samples/cries/xurkitree.aif and b/sound/direct_sound_samples/cries/xurkitree.aif differ diff --git a/sound/direct_sound_samples/cries/yamask.aif b/sound/direct_sound_samples/cries/yamask.aif index 8d44817f7b..51f07034b8 100644 Binary files a/sound/direct_sound_samples/cries/yamask.aif and b/sound/direct_sound_samples/cries/yamask.aif differ diff --git a/sound/direct_sound_samples/cries/yanma.aif b/sound/direct_sound_samples/cries/yanma.aif index 5f373734a4..3d8354bb59 100644 Binary files a/sound/direct_sound_samples/cries/yanma.aif and b/sound/direct_sound_samples/cries/yanma.aif differ diff --git a/sound/direct_sound_samples/cries/yanmega.aif b/sound/direct_sound_samples/cries/yanmega.aif index daf0c0d9f0..6f3a3eb2dd 100644 Binary files a/sound/direct_sound_samples/cries/yanmega.aif and b/sound/direct_sound_samples/cries/yanmega.aif differ diff --git a/sound/direct_sound_samples/cries/yungoos.aif b/sound/direct_sound_samples/cries/yungoos.aif index 7fe144860b..13b633a98a 100644 Binary files a/sound/direct_sound_samples/cries/yungoos.aif and b/sound/direct_sound_samples/cries/yungoos.aif differ diff --git a/sound/direct_sound_samples/cries/yveltal.aif b/sound/direct_sound_samples/cries/yveltal.aif index 4112426bd9..3c2bbcb021 100644 Binary files a/sound/direct_sound_samples/cries/yveltal.aif and b/sound/direct_sound_samples/cries/yveltal.aif differ diff --git a/sound/direct_sound_samples/cries/zacian_crowned_sword.aif b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif index 5e47f9275b..597c5ddd26 100644 Binary files a/sound/direct_sound_samples/cries/zacian_crowned_sword.aif and b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif differ diff --git a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif index 1e7eae771b..05d170baba 100644 Binary files a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif and b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif differ diff --git a/sound/direct_sound_samples/cries/zangoose.aif b/sound/direct_sound_samples/cries/zangoose.aif index f82cd235d0..dc6182b784 100644 Binary files a/sound/direct_sound_samples/cries/zangoose.aif and b/sound/direct_sound_samples/cries/zangoose.aif differ diff --git a/sound/direct_sound_samples/cries/zapdos.aif b/sound/direct_sound_samples/cries/zapdos.aif index 88dcb48cc8..83bbd043e4 100644 Binary files a/sound/direct_sound_samples/cries/zapdos.aif and b/sound/direct_sound_samples/cries/zapdos.aif differ diff --git a/sound/direct_sound_samples/cries/zebstrika.aif b/sound/direct_sound_samples/cries/zebstrika.aif index 74ef8d943a..0609b145b2 100644 Binary files a/sound/direct_sound_samples/cries/zebstrika.aif and b/sound/direct_sound_samples/cries/zebstrika.aif differ diff --git a/sound/direct_sound_samples/cries/zekrom.aif b/sound/direct_sound_samples/cries/zekrom.aif index e3fc0cc74b..dd74f80911 100644 Binary files a/sound/direct_sound_samples/cries/zekrom.aif and b/sound/direct_sound_samples/cries/zekrom.aif differ diff --git a/sound/direct_sound_samples/cries/zeraora.aif b/sound/direct_sound_samples/cries/zeraora.aif index 880fc72033..b1455a0100 100644 Binary files a/sound/direct_sound_samples/cries/zeraora.aif and b/sound/direct_sound_samples/cries/zeraora.aif differ diff --git a/sound/direct_sound_samples/cries/zigzagoon.aif b/sound/direct_sound_samples/cries/zigzagoon.aif index c477208d13..8f7b32f818 100644 Binary files a/sound/direct_sound_samples/cries/zigzagoon.aif and b/sound/direct_sound_samples/cries/zigzagoon.aif differ diff --git a/sound/direct_sound_samples/cries/zoroark.aif b/sound/direct_sound_samples/cries/zoroark.aif index 7cd45de062..91e7ab0ce9 100644 Binary files a/sound/direct_sound_samples/cries/zoroark.aif and b/sound/direct_sound_samples/cries/zoroark.aif differ diff --git a/sound/direct_sound_samples/cries/zorua.aif b/sound/direct_sound_samples/cries/zorua.aif index 039955ac19..674681f5bc 100644 Binary files a/sound/direct_sound_samples/cries/zorua.aif and b/sound/direct_sound_samples/cries/zorua.aif differ diff --git a/sound/direct_sound_samples/cries/zubat.aif b/sound/direct_sound_samples/cries/zubat.aif index 4b2d1a1cc9..9ba4d36489 100644 Binary files a/sound/direct_sound_samples/cries/zubat.aif and b/sound/direct_sound_samples/cries/zubat.aif differ diff --git a/sound/direct_sound_samples/cries/zweilous.aif b/sound/direct_sound_samples/cries/zweilous.aif index 987f436d9a..fc9a366ce9 100644 Binary files a/sound/direct_sound_samples/cries/zweilous.aif and b/sound/direct_sound_samples/cries/zweilous.aif differ diff --git a/sound/direct_sound_samples/cries/zygarde_10.aif b/sound/direct_sound_samples/cries/zygarde_10.aif index 45b0cd0c8d..a8301cdc16 100644 Binary files a/sound/direct_sound_samples/cries/zygarde_10.aif and b/sound/direct_sound_samples/cries/zygarde_10.aif differ diff --git a/sound/direct_sound_samples/cries/zygarde_50.aif b/sound/direct_sound_samples/cries/zygarde_50.aif index 1b403fcfe3..92daba8bcb 100644 Binary files a/sound/direct_sound_samples/cries/zygarde_50.aif and b/sound/direct_sound_samples/cries/zygarde_50.aif differ diff --git a/sound/direct_sound_samples/cries/zygarde_complete.aif b/sound/direct_sound_samples/cries/zygarde_complete.aif index 0d0797ebbb..2eae63203b 100644 Binary files a/sound/direct_sound_samples/cries/zygarde_complete.aif and b/sound/direct_sound_samples/cries/zygarde_complete.aif differ diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19d081c848..63bab46ec9 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -18,6 +18,7 @@ #include "random.h" #include "recorded_battle.h" #include "util.h" +#include "script.h" #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" @@ -39,6 +40,7 @@ static bool32 IsPinchBerryItemEffect(u32 holdEffect); // ewram EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests EWRAM_DATA u8 sBattler_AI = 0; +EWRAM_DATA AiScoreFunc sDynamicAiFunc = NULL; // const rom data static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); @@ -54,6 +56,7 @@ static s32 AI_Safari(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_FirstBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); +static s32 AI_DynamicFunc(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = @@ -70,7 +73,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = [9] = AI_PowerfulStatus, // AI_FLAG_POWERFUL_STATUS [10] = NULL, // AI_FLAG_NEGATE_UNAWARE [11] = NULL, // AI_FLAG_WILL_SUICIDE - [12] = NULL, // AI_FLAG_HELP_PARTNER + [12] = NULL, // Unused [13] = NULL, // Unused [14] = NULL, // Unused [15] = NULL, // Unused @@ -86,7 +89,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = [25] = NULL, // Unused [26] = NULL, // Unused [27] = NULL, // Unused - [28] = NULL, // Unused + [28] = AI_DynamicFunc, // AI_FLAG_DYNAMIC_FUNC [29] = AI_Roaming, // AI_FLAG_ROAMING [30] = AI_Safari, // AI_FLAG_SAFARI [31] = AI_FirstBattle, // AI_FLAG_FIRST_BATTLE @@ -180,6 +183,9 @@ static u32 GetAiFlags(u16 trainerId) if (flags & AI_FLAG_SMART_SWITCHING) flags |= AI_FLAG_SMART_MON_CHOICES; + if (sDynamicAiFunc != NULL) + flags |= AI_FLAG_DYNAMIC_FUNC; + return flags; } @@ -399,28 +405,11 @@ static void SetBattlerAiData(u32 battler, struct AiLogicData *aiData) aiData->speedStats[battler] = GetBattlerTotalSpeedStatArgs(battler, ability, holdEffect); } -static void SetBattlerAiGimmickData(u32 battler, struct AiLogicData *aiData) -{ - bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT; - u16 trainerId = isSecondTrainer ? gTrainerBattleOpponent_B : gTrainerBattleOpponent_A; - const struct TrainerMon *party = GetTrainerPartyFromId(trainerId); - if (party != NULL) - { - aiData->shouldDynamax[battler] = CanDynamax(battler) && (party[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]].shouldDynamax); - aiData->shouldTerastal[battler] = CanTerastallize(battler) && (party[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]].shouldTerastal); - } - else - { - aiData->shouldDynamax[battler] = FALSE; - aiData->shouldTerastal[battler] = FALSE; - } -} - static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef, u32 move) { u32 accuracy; u32 abilityAtk = aiData->abilities[battlerAtk]; - u32 abilityDef = aiData->abilities[battlerAtk]; + u32 abilityDef = aiData->abilities[battlerDef]; if (abilityAtk == ABILITY_NO_GUARD || abilityDef == ABILITY_NO_GUARD || gMovesInfo[move].accuracy == 0) // Moves with accuracy 0 or no guard ability always hit. accuracy = 100; else @@ -489,13 +478,20 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) aiData->weatherHasEffect = WEATHER_HAS_EFFECT; // get/assume all battler data and simulate AI damage battlersCount = gBattlersCount; + for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++) { if (!IsBattlerAlive(battlerAtk)) continue; SetBattlerAiData(battlerAtk, aiData); - SetBattlerAiGimmickData(battlerAtk, aiData); + } + + for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++) + { + if (!IsBattlerAlive(battlerAtk)) + continue; + SetBattlerAiMovesData(aiData, battlerAtk, battlersCount); } } @@ -529,7 +525,8 @@ static bool32 AI_ShouldSwitchIfBadMoves(u32 battler, bool32 doubleBattle) if (CountUsablePartyMons(battler) > 0 && !IsBattlerTrapped(battler, TRUE) && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE)) - && AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS)) + && AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS) + && !(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING)) { // Consider switching if all moves are worthless to use. if (GetTotalBaseStat(gBattleMons[battler].species) >= 310 // Mon is not weak. @@ -972,12 +969,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; - case ABILITY_VOLT_ABSORB: 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; @@ -985,6 +991,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) 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 @@ -1458,7 +1468,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) ADJUST_SCORE(-10); - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_TOXIC_THREAD: @@ -1491,7 +1501,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return 0; if (!ShouldTryOHKO(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move)) ADJUST_SCORE(-10); - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_MIST: @@ -1530,7 +1540,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-3); break; case EFFECT_DISABLE: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); else if (gDisableStructs[battlerDef].disableTimer == 0 && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) @@ -1552,7 +1562,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_ENCORE: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); else if (gDisableStructs[battlerDef].encoreTimer == 0 && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) @@ -1768,7 +1778,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_TORMENT: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) @@ -1893,7 +1903,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: @@ -1974,7 +1984,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_DESTINY_BOND: if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND) ADJUST_SCORE(-10); - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_HEAL_BELL: @@ -2128,7 +2138,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_NATURE_POWER: - return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(), score); + return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(battlerAtk), score); case EFFECT_TAUNT: if (gDisableStructs[battlerDef].tauntTimer > 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) @@ -2172,7 +2182,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeSwapped || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) ADJUST_SCORE(-10); - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_WORRY_SEED: @@ -2192,7 +2202,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeOverwritten || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) ADJUST_SCORE(-10); - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_SIMPLE_BEAM: @@ -2448,11 +2458,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (move) { case MOVE_TRICK_OR_TREAT: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || IsTerastallized(battlerDef)) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || GetActiveGimmick(battlerDef) == GIMMICK_TERA) ADJUST_SCORE(-10); break; case MOVE_FORESTS_CURSE: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || IsTerastallized(battlerDef)) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || GetActiveGimmick(battlerDef) == GIMMICK_TERA) ADJUST_SCORE(-10); break; } @@ -2520,7 +2530,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { ADJUST_SCORE(-10); } - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); else if (isDoubleBattle) { @@ -2665,13 +2675,29 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_UPPER_HAND: - if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move) || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move + if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move) || GetMovePriority(battlerDef, predictedMove) < 1 || GetMovePriority(battlerDef, predictedMove) > 3) // Opponent going first or not using priority move ADJUST_SCORE(-10); break; case EFFECT_PLACEHOLDER: return 0; // cannot even select } // move effect checks + // Choice items + if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && gBattleMons[battlerAtk].ability != ABILITY_KLUTZ) + { + // Don't use user-target moves ie. Swords Dance, with exceptions + if ((moveTarget & MOVE_TARGET_USER) + && moveEffect != EFFECT_DESTINY_BOND && moveEffect != EFFECT_WISH && moveEffect != EFFECT_HEALING_WISH + && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather(aiData) & (B_WEATHER_SNOW | B_WEATHER_HAIL)))) + ADJUST_SCORE(-30); + // Don't use a status move if the mon is the last one in the party, has no good switchin, or is trapped + else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS + && (CountUsablePartyMons(battlerAtk) < 1 + || AI_DATA->mostSuitableMonId[battlerAtk] == PARTY_SIZE + || IsBattlerTrapped(battlerAtk, TRUE))) + ADJUST_SCORE(-30); + } + if (score < 0) score = 0; @@ -2696,7 +2722,7 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(SLOW_KILL); } else if (CanTargetFaintAi(battlerDef, battlerAtk) - && GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER + && GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER && GetMovePriority(battlerAtk, move) > 0) { ADJUST_SCORE(LAST_CHANCE); @@ -2855,7 +2881,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)) { @@ -2871,7 +2898,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)) { @@ -3013,8 +3041,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SOAK: if (atkPartnerAbility == ABILITY_WONDER_GUARD - && IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_WATER) - && !IsTerastallized(battlerAtkPartner)) + && !IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_WATER) + && GetActiveGimmick(battlerAtkPartner) != GIMMICK_TERA) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3236,7 +3264,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) u32 i; // The AI should understand that while Dynamaxed, status moves function like Protect. - if (IsDynamaxed(battlerAtk) && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) + if (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) moveEffect = EFFECT_PROTECT; // check status move preference @@ -3273,50 +3301,54 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); } break; + case EFFECT_FINAL_GAMBIT: + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE) + ADJUST_SCORE(DECENT_EFFECT); + break; case EFFECT_MIRROR_MOVE: if (predictedMove != MOVE_NONE) return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); break; case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_USER_ALLY: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); break; case EFFECT_ATTACK_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2)); break; case EFFECT_DEFENSE_UP: case EFFECT_DEFENSE_UP_3: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case EFFECT_DEFENSE_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2)); break; case EFFECT_SPEED_UP: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); break; case EFFECT_SPEED_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2)); break; case EFFECT_SPECIAL_ATTACK_UP: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); break; case EFFECT_SPECIAL_ATTACK_UP_2: case EFFECT_SPECIAL_ATTACK_UP_3: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2)); break; case EFFECT_SPECIAL_DEFENSE_UP: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_SPECIAL_DEFENSE_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF_2, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF_2)); break; case EFFECT_ACCURACY_UP: case EFFECT_ACCURACY_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC)); break; case EFFECT_EVASION_UP: case EFFECT_EVASION_UP_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION)); break; case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: @@ -3413,13 +3445,13 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_ACUPRESSURE: break; case EFFECT_ATTACK_ACCURACY_UP: // hone claws - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC)); break; case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); break; case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) @@ -3431,7 +3463,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF) || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) break; - else if (IsDynamaxed(battlerDef)) + else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle); break; @@ -3499,7 +3531,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; } @@ -3516,7 +3548,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_OHKO: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS) ADJUST_SCORE(BEST_EFFECT); @@ -3540,11 +3572,17 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_SUBSTITUTE: - ADJUST_SCORE(GOOD_EFFECT); + if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) + ADJUST_SCORE(GOOD_EFFECT); if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) ADJUST_SCORE(GOOD_EFFECT); - if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) + if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) + ADJUST_SCORE(GOOD_EFFECT); + else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) ADJUST_SCORE(DECENT_EFFECT); + // TODO: + // if (IsPredictedToSwitch(battlerDef, battlerAtk) + // ADJUST_SCORE(DECENT_EFFECT); if (HasMoveEffect(battlerDef, EFFECT_SLEEP) || HasMoveEffect(battlerDef, EFFECT_TOXIC) || HasMoveEffect(battlerDef, EFFECT_POISON) @@ -3613,7 +3651,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_DISABLE: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (gDisableStructs[battlerDef].disableTimer == 0 && (gLastMoves[battlerDef] != MOVE_NONE) @@ -3626,7 +3664,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_ENCORE: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (gDisableStructs[battlerDef].encoreTimer == 0 && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) @@ -3645,7 +3683,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_DESTINY_BOND: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (AI_IsFaster(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(GOOD_EFFECT); @@ -3668,8 +3706,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } else { - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); } break; case EFFECT_PROTECT: @@ -3857,7 +3895,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_DEFENSE_CURL: if (HasMoveEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)) ADJUST_SCORE(DECENT_EFFECT); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case EFFECT_FIRST_TURN_ONLY: if (ShouldFakeOut(battlerAtk, battlerDef, move) && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100)) @@ -3870,8 +3908,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; if (HasMoveEffect(battlerAtk, EFFECT_SWALLOW) || HasMoveEffect(battlerAtk, EFFECT_SPIT_UP)) ADJUST_SCORE(DECENT_EFFECT); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_SWAGGER: case EFFECT_FLATTER: @@ -3951,7 +3989,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (HasDamagingMoveOfType(battlerAtk, TYPE_ELECTRIC)) ADJUST_SCORE(DECENT_EFFECT); if (B_CHARGE_SPDEF_RAISE >= GEN_5) - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_TAUNT: if (IS_MOVE_STATUS(predictedMove)) @@ -3979,7 +4017,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: @@ -4012,7 +4050,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case HOLD_EFFECT_EJECT_BUTTON: - //if (!IsRaidBattle() && IsDynamaxed(battlerDef) && gNewBS->dynamaxData.timer[battlerDef] > 1 && + //if (!IsRaidBattle() && GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX && gNewBS->dynamaxData.timer[battlerDef] > 1 && if (HasDamagingMove(battlerAtk) || (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk)))) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn @@ -4079,7 +4117,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (IsStatBoostingBerry(item) && aiData->hpPercents[battlerAtk] > 60) ADJUST_SCORE(WEAK_EFFECT); else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0) - && ((GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) + && ((GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) || !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0))) ADJUST_SCORE(WEAK_EFFECT); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry } @@ -4094,7 +4132,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_SKILL_SWAP: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (gAbilitiesInfo[aiData->abilities[battlerDef]].aiRating > gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating) ADJUST_SCORE(DECENT_EFFECT); @@ -4106,7 +4144,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_ENTRAINMENT: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if ((IsAbilityOfRating(aiData->abilities[battlerDef], 5) || gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating <= 0) && (aiData->abilities[battlerDef] != aiData->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID))) @@ -4162,44 +4200,44 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_COSMIC_POWER: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_BULK_UP: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case EFFECT_CALM_MIND: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_GEOMANCY: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) ADJUST_SCORE(GOOD_EFFECT); case EFFECT_QUIVER_DANCE: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_VICTORY_DANCE: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case EFFECT_SHELL_SMASH: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS) ADJUST_SCORE(WEAK_EFFECT); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); break; case EFFECT_TIDY_UP: IncreaseTidyUpScore(battlerAtk, battlerDef, move, &score); case EFFECT_DRAGON_DANCE: case EFFECT_SHIFT_GEAR: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); break; case EFFECT_GUARD_SWAP: if (gBattleMons[battlerDef].statStages[STAT_DEF] > gBattleMons[battlerAtk].statStages[STAT_DEF] @@ -4309,7 +4347,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; @@ -4368,7 +4406,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); } @@ -4418,7 +4456,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_TOXIC_THREAD: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); break; case EFFECT_COUNTER: if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE) @@ -4438,15 +4476,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) ADJUST_SCORE(DECENT_EFFECT); break; - case EFFECT_FOCUS_PUNCH: - if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5) - { - if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(DECENT_EFFECT); - if (gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) - ADJUST_SCORE(DECENT_EFFECT); - } - break; case EFFECT_ENDEAVOR: if (AI_IsSlower(battlerAtk, battlerDef, move) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); @@ -4498,7 +4527,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_SP_ATK_PLUS_1: case MOVE_EFFECT_SP_DEF_PLUS_1: StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_PLUS_1; - IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId)); break; case MOVE_EFFECT_ATK_PLUS_2: case MOVE_EFFECT_DEF_PLUS_2: @@ -4506,15 +4535,15 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_SP_ATK_PLUS_2: case MOVE_EFFECT_SP_DEF_PLUS_2: StageStatId = STAT_CHANGE_ATK_2 + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_PLUS_1; - IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId)); break; case MOVE_EFFECT_ACC_PLUS_1: case MOVE_EFFECT_ACC_PLUS_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC)); break; case MOVE_EFFECT_EVS_PLUS_1: case MOVE_EFFECT_EVS_PLUS_2: - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION)); break; case MOVE_EFFECT_RAPID_SPIN: if ((gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) @@ -4533,7 +4562,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_SP_ATK_MINUS_1: case MOVE_EFFECT_SP_DEF_MINUS_1: StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1; - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId)); break; case MOVE_EFFECT_ATK_MINUS_2: case MOVE_EFFECT_DEF_MINUS_2: @@ -4541,28 +4570,28 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_SP_ATK_MINUS_2: case MOVE_EFFECT_SP_DEF_MINUS_2: StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2; - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId)); break; case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_ACC_MINUS_2: - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ACC)); break; case MOVE_EFFECT_EVS_MINUS_1: case MOVE_EFFECT_EVS_MINUS_2: - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_EVASION)); break; case MOVE_EFFECT_DEF_SPDEF_DOWN: - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case MOVE_EFFECT_ATK_DEF_DOWN: - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score); - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case MOVE_EFFECT_V_CREATE: - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score); - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score); - IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; } } @@ -4735,17 +4764,17 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (gMovesInfo[move].power) { if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0) - ADJUST_SCORE(-20); + ADJUST_AND_RETURN_SCORE(NO_DAMAGE_OR_FAILS); // No point in checking the move further so return early else { if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move) - ADJUST_SCORE(1); + ADJUST_SCORE(BEST_DAMAGE_MOVE); else - score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + ADJUST_SCORE(AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex)); } } - score += AI_CalcMoveEffectScore(battlerAtk, battlerDef, move); + ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move)); return score; } @@ -4882,6 +4911,8 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u8 i; + struct AiLogicData *aiData = AI_DATA; + if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; @@ -4904,12 +4935,16 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; // +2 Score + case EFFECT_MEMENTO: + if (aiData->hpPercents[battlerAtk] < 50 && AI_RandLessThan(128)) + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); + break; case EFFECT_REVENGE: if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpeed >= gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed + 10) ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_BELLY_DRUM: - if (gBattleMons[battlerAtk].hp >= gBattleMons[battlerAtk].maxHP * 90 / 100) + if (aiData->hpPercents[battlerAtk] >= 90) ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_MAX_HP_50_RECOIL: @@ -4996,11 +5031,11 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_BATON_PASS: - // TODO: Increase Score based on current stats. if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING)) ADJUST_SCORE(DECENT_EFFECT); if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) ADJUST_SCORE(-3); + ADJUST_SCORE(CountPositiveStatStages(battlerAtk) - CountNegativeStatStages(battlerAtk)); break; default: break; @@ -5075,6 +5110,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_BIDE: case EFFECT_CONVERSION: case EFFECT_LIGHT_SCREEN: + case EFFECT_REFLECT: case EFFECT_MIST: case EFFECT_FOCUS_ENERGY: case EFFECT_CONVERSION_2: @@ -5100,7 +5136,6 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_CONVERSION: case EFFECT_REFLECT: case EFFECT_LIGHT_SCREEN: - case EFFECT_AURORA_VEIL: case EFFECT_MIST: case EFFECT_FOCUS_ENERGY: case EFFECT_RAGE: @@ -5332,3 +5367,47 @@ static s32 AI_FirstBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; } + + +// Dynamic AI Functions +// For specific battle scenarios + +// Example - prefer attacking opposite foe in a tag battle +s32 AI_TagBattlePreferFoe(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)) + { + /* not a partner battle */ + return score; + } + else if (!IsBattlerAlive(BATTLE_OPPOSITE(battlerAtk)) || !IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerAtk)))) + { + /* partner is defeated so attack normally */ + return score; + } + else if (battlerDef == BATTLE_OPPOSITE(battlerAtk)) + { + /* attacking along the diagonal */ + ADJUST_SCORE(-20); + } + + return score; +} + +static s32 AI_DynamicFunc(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) +{ + if (sDynamicAiFunc != NULL) + score = sDynamicAiFunc(battlerAtk, battlerDef, move, score); + return score; +} + +void ScriptSetDynamicAiFunc(struct ScriptContext *ctx) +{ + AiScoreFunc func = (AiScoreFunc)ScriptReadWord(ctx); + sDynamicAiFunc = func; +} + +void ResetDynamicAiFunc(void) +{ + sDynamicAiFunc = NULL; +} diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 154c251118..a0a44cb98d 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -335,32 +335,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[0] = ABILITY_EARTH_EATER; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_EARTH_EATER; } else { @@ -485,7 +482,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; @@ -919,6 +916,24 @@ static bool32 ShouldSwitchIfEncored(u32 battler, bool32 emitResult) return FALSE; } +static bool32 ShouldSwitchIfBadChoiceLock(u32 battler, bool32 emitResult) +{ + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + + if (HOLD_EFFECT_CHOICE(holdEffect) && gBattleMons[battler].ability != ABILITY_KLUTZ) + { + if (gMovesInfo[gLastUsedMove].category == DAMAGE_CATEGORY_STATUS) + { + gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } + + return FALSE; +} + // AI should switch if it's become setup fodder and has something better to switch to static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) { @@ -941,7 +956,8 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1)) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); return TRUE; } } @@ -949,7 +965,8 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) else if (attackingStage < DEFAULT_STAT_STAGE - 2) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); return TRUE; } } @@ -1000,6 +1017,10 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) return FALSE; + // Sequence Switching AI never switches mid-battle + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) + return FALSE; + availableToSwitch = 0; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -1076,6 +1097,8 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) return TRUE; if (ShouldSwitchIfEncored(battler, emitResult)) return TRUE; + if (ShouldSwitchIfBadChoiceLock(battler, emitResult)) + return TRUE; if (AreAttackingStatsLowered(battler, emitResult)) return TRUE; @@ -1279,7 +1302,10 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE) + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); + else + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); if (bestDmg < dmg) { bestDmg = dmg; @@ -1312,7 +1338,7 @@ static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon) { u8 defType1 = battleMon->type1, defType2 = battleMon->type2, tSpikesLayers; - u16 heldItemEffect = gItemsInfo[battleMon->item].holdEffect; + u16 heldItemEffect = ItemId_GetHoldEffect(battleMon->item); u32 maxHP = battleMon->maxHP, ability = battleMon->ability, status = battleMon->status1; u32 spikesDamage = 0, tSpikesDamage = 0, hazardDamage = 0; u32 hazardFlags = gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_SAFEGUARD); @@ -1336,8 +1362,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 @@ -1372,7 +1396,7 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon static s32 GetSwitchinWeatherImpact(void) { s32 weatherImpact = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; - u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); if (WEATHER_HAS_EFFECT) { @@ -1436,7 +1460,7 @@ static s32 GetSwitchinWeatherImpact(void) static u32 GetSwitchinRecurringHealing(void) { u32 recurringHealing = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; - u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); // Items if (ability != ABILITY_KLUTZ) @@ -1470,7 +1494,7 @@ static u32 GetSwitchinRecurringHealing(void) static u32 GetSwitchinRecurringDamage(void) { u32 passiveDamage = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; - u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); // Items if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ) @@ -1502,7 +1526,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) { u8 defType1 = AI_DATA->switchinCandidate.battleMon.type1, defType2 = AI_DATA->switchinCandidate.battleMon.type2; u8 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount; - u16 heldItemEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u16 heldItemEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); u32 status = AI_DATA->switchinCandidate.battleMon.status1, ability = AI_DATA->switchinCandidate.battleMon.ability, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP; u32 statusDamage = 0; @@ -1580,8 +1604,8 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u32 recurringHealing = GetSwitchinRecurringHealing(); u32 statusDamage = GetSwitchinStatusDamage(battler); u32 hitsToKO = 0, singleUseItemHeal = 0; - u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = gItemsInfo[item].holdEffect; - u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = gItemsInfo[item].holdEffectParam; + u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = ItemId_GetHoldEffect(item); + u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item); u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); u32 opposingAbility = gBattleMons[opposingBattler].ability; bool32 usedSingleUseHealingItem = FALSE; @@ -1765,7 +1789,7 @@ static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) // the Most Damage code will prioritize switching into whatever mon deals the most damage, which is generally not as good as having a good Type Matchup // Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you! -static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u8 battlerIn1, u8 battlerIn2, bool32 isSwitchAfterKO) +static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, bool32 isSwitchAfterKO) { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; @@ -1803,7 +1827,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, InitializeSwitchinCandidate(&party[i]); - // While not really invalid per say, not really wise to switch into this mon + // While not really invalid per se, not really wise to switch into this mon if (AI_DATA->switchinCandidate.battleMon.ability == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler)) continue; @@ -1840,7 +1864,12 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); + { + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE) + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); + else + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); + } // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) @@ -1883,7 +1912,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // If AI mon outspeeds and doesn't die to hazards if ((((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room || ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room - && (aiMonSpeed < playerMonSpeed || (gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2 / 3 < playerMonSpeed)))) // Trick Room speeds + && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2 / 3 < playerMonSpeed)))) // Trick Room speeds && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) // Hazards { // We have a revenge killer @@ -1908,7 +1937,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // If AI mon outspeeds if (((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room || (((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && gFieldTimers.trickRoomTimer > 1) // Trick Room has at least 2 turns left - && (aiMonSpeed < playerMonSpeed || (gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2/ 3 < playerMonSpeed)))) // Trick Room speeds + && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2/ 3 < playerMonSpeed)))) // Trick Room speeds { // If AI mon can't be OHKO'd if (hitsToKOAI > hitsToKOAIThreshold) @@ -1949,53 +1978,59 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Different switching priorities depending on switching mid battle vs switching after a KO if (isSwitchAfterKO) { - // Return Trapper > GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg - if (trapperId != PARTY_SIZE) - return trapperId; - else if (revengeKillerId != PARTY_SIZE) - return revengeKillerId; - else if (slowRevengeKillerId != PARTY_SIZE) - return slowRevengeKillerId; - else if (fastThreatenId != PARTY_SIZE) - return fastThreatenId; - else if (slowThreatenId != PARTY_SIZE) - return slowThreatenId; - else if (typeMatchupEffectiveId != PARTY_SIZE) - return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) - return typeMatchupId; - else if (batonPassId != PARTY_SIZE) - return batonPassId; - else if (damageMonId != PARTY_SIZE) - return damageMonId; + // Return Trapper > Revenge Killer > Type Matchup > Baton Pass > Best Damage + if (trapperId != PARTY_SIZE) return trapperId; + else if (revengeKillerId != PARTY_SIZE) return revengeKillerId; + else if (slowRevengeKillerId != PARTY_SIZE) return slowRevengeKillerId; + else if (fastThreatenId != PARTY_SIZE) return fastThreatenId; + else if (slowThreatenId != PARTY_SIZE) return slowThreatenId; + else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; + else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; + else if (batonPassId != PARTY_SIZE) return batonPassId; + else if (damageMonId != PARTY_SIZE) return damageMonId; } else { - // Return Trapper > GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass - if (trapperId != PARTY_SIZE) - return trapperId; - else if (typeMatchupEffectiveId != PARTY_SIZE) - return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) - return typeMatchupId; - else if (defensiveMonId != PARTY_SIZE) - return defensiveMonId; - else if (batonPassId != PARTY_SIZE) - return batonPassId; + // Return Trapper > Type Matchup > Best Defensive > Baton Pass + if (trapperId != PARTY_SIZE) return trapperId; + else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; + else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; + else if (defensiveMonId != PARTY_SIZE) return defensiveMonId; + else if (batonPassId != PARTY_SIZE) return batonPassId; + } + // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. + if (aceMonId != PARTY_SIZE + && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS)) + return aceMonId; + + return PARTY_SIZE; +} - // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. - else if (aceMonId != PARTY_SIZE - && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT)) - return aceMonId; +static u32 GetNextMonInParty(struct Pokemon *party, int firstId, int lastId, u32 battlerIn1, u32 battlerIn2) +{ + u32 i; + // Iterate through mons + for (i = firstId; i < lastId; i++) + { + // Check mon validity + if (!IsValidForBattle(&party[i]) + || gBattlerPartyIndexes[battlerIn1] == i + || gBattlerPartyIndexes[battlerIn2] == i + || i == gBattleStruct->monToSwitchIntoId[battlerIn1] + || i == gBattleStruct->monToSwitchIntoId[battlerIn2]) + { + continue; + } + return i; } return PARTY_SIZE; } -u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) +u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) { u32 opposingBattler = 0; u32 bestMonId = PARTY_SIZE; - u8 battlerIn1 = 0, battlerIn2 = 0; + u32 battlerIn1 = 0, battlerIn2 = 0; s32 firstId = 0; s32 lastId = 0; // + 1 struct Pokemon *party; @@ -2031,6 +2066,12 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) else party = gEnemyParty; + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) + { + bestMonId = GetNextMonInParty(party, firstId, lastId, battlerIn1, battlerIn2); + return bestMonId; + } + // Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both. // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic @@ -2052,7 +2093,7 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) || gBattlerPartyIndexes[battlerIn2] == i || i == gBattleStruct->monToSwitchIntoId[battlerIn1] || i == gBattleStruct->monToSwitchIntoId[battlerIn2] - || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon.) + || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon.) { invalidMons |= gBitTable[i]; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 9743db9960..5505bbed18 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -33,7 +33,6 @@ return FALSE static u32 AI_GetEffectiveness(uq4_12_t multiplier); -u32 AI_GetBattlerAbility(u32); // Functions bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) @@ -411,22 +410,26 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) else battlerDefAbility = aiData->abilities[battlerDef]; - // Battler doesn't see partners Ability for some reason. - // This is a small hack to avoid the issue but should be investigated if (battlerDef == BATTLE_PARTNER(battlerAtk)) - battlerDefAbility = AI_GetBattlerAbility(battlerDef); + battlerDefAbility = aiData->abilities[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; @@ -468,7 +471,7 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) break; case EFFECT_LOW_KICK: case EFFECT_HEAT_CRASH: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) return TRUE; break; case EFFECT_FAIL_IF_NOT_ARG_TYPE: @@ -487,6 +490,16 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) if (!gDisableStructs[battlerAtk].isFirstTurn) return TRUE; break; + case EFFECT_FOCUS_PUNCH: + if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) + || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) + || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) + // TODO: || IsPredictedToSwitch(battlerDef, battlerAtk) + return TRUE; + // If AI could Sub and doesn't have a Sub, don't Punch yet + if (HasMoveEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)) + return TRUE; + break; } return FALSE; @@ -508,36 +521,29 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u s32 moveType; uq4_12_t effectivenessMultiplier; bool32 isDamageMoveUnusable = FALSE; - bool32 toggledDynamax = FALSE; - bool32 toggledTera = FALSE; + bool32 toggledGimmick = FALSE; struct AiLogicData *aiData = AI_DATA; gBattleStruct->aiCalcInProgress = TRUE; - // Temporarily enable Z-Moves for damage calcs - if (considerZPower && IsViableZMove(battlerAtk, move)) + // Temporarily enable gimmicks for damage calcs if planned + if (gBattleStruct->gimmick.usableGimmick[battlerAtk] && GetActiveGimmick(battlerAtk) == GIMMICK_NONE + && !(gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !considerZPower)) { - gBattleStruct->zmove.baseMoves[battlerAtk] = move; - gBattleStruct->zmove.active = TRUE; - } - else if (gMovesInfo[move].effect == EFFECT_PHOTON_GEYSER) - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL); - 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(); + // Set Z-Move variables if needed + if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && IsViableZMove(battlerAtk, move)) + gBattleStruct->zmove.baseMoves[battlerAtk] = move; - // Temporarily enable other gimmicks for damage calcs if planned - if (AI_DATA->shouldDynamax[battlerAtk]) - { - toggledDynamax = TRUE; - gBattleStruct->dynamax.dynamaxed[battlerAtk] = TRUE; - } - if (AI_DATA->shouldTerastal[battlerAtk]) - { - toggledTera = TRUE; - gBattleStruct->tera.isTerastallized[GetBattlerSide(battlerAtk)] |= gBitTable[gBattlerPartyIndexes[battlerAtk]]; + toggledGimmick = TRUE; + SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } + if (gMovesInfo[move].effect == EFFECT_PHOTON_GEYSER) + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != gMovesInfo[gCurrentMove].category); + else if (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM) + gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] != gMovesInfo[gCurrentMove].category); + else if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) + move = GetNaturePowerMove(battlerAtk); + gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); @@ -608,7 +614,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u simDamage.minimum = LowestRollDmg(nonCritDmg); } - if (!gBattleStruct->zmove.active) + if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { // Handle dynamic move damage switch (gMovesInfo[move].effect) @@ -697,14 +703,12 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u // convert multiper to AI_EFFECTIVENESS_xX *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); + // Undo temporary settings gBattleStruct->aiCalcInProgress = FALSE; gBattleStruct->swapDamageCategory = FALSE; - gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; - if (toggledDynamax) - gBattleStruct->dynamax.dynamaxed[battlerAtk] = FALSE; - if (toggledTera) - gBattleStruct->tera.isTerastallized[GetBattlerSide(battlerAtk)] &= ~(gBitTable[gBattlerPartyIndexes[battlerAtk]]); + if (toggledGimmick) + SetActiveGimmick(battlerAtk, GIMMICK_NONE); return simDamage; } @@ -853,6 +857,8 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s { case EFFECT_MAX_HP_50_RECOIL: case EFFECT_MIND_BLOWN: + case EFFECT_EXPLOSION: + case EFFECT_FINAL_GAMBIT: return TRUE; case EFFECT_RECOIL_IF_MISS: if (AI_IsDamagedByRecoil(battlerAtk)) @@ -1027,27 +1033,55 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier) } /* Checks to see if AI will move ahead of another battler + * The function uses a stripped down version of the checks from GetWhichBattlerFasterArgs * Output: * AI_IS_FASTER: is user(ai) faster * AI_IS_SLOWER: is target faster */ -s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered) +s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) { - s8 prioAI = 0; - s8 prioBattler2 = 0; - prioAI = GetMovePriority(battlerAI, moveConsidered); + u32 speedBattlerAI, speedBattler; + u32 holdEffectAI = AI_DATA->holdEffects[battlerAI]; + u32 holdEffectPlayer = AI_DATA->holdEffects[battler]; + u32 abilityAI = AI_DATA->abilities[battlerAI]; + u32 abilityPlayer = AI_DATA->abilities[battler]; - if (prioAI > prioBattler2) + if (GetMovePriority(battlerAI, moveConsidered) > 0) return AI_IS_FASTER; - if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE, - AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2], - AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2], - AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2], - prioAI, prioBattler2) == 1) - return AI_IS_FASTER; - else + speedBattlerAI = GetBattlerTotalSpeedStatArgs(battlerAI, abilityAI, holdEffectAI); + speedBattler = GetBattlerTotalSpeedStatArgs(battler, abilityPlayer, holdEffectPlayer); + + if (holdEffectAI == HOLD_EFFECT_LAGGING_TAIL && holdEffectPlayer != HOLD_EFFECT_LAGGING_TAIL) return AI_IS_SLOWER; + else if (holdEffectAI != HOLD_EFFECT_LAGGING_TAIL && holdEffectPlayer == HOLD_EFFECT_LAGGING_TAIL) + return AI_IS_FASTER; + + if (abilityAI == ABILITY_STALL && abilityPlayer != ABILITY_STALL) + return AI_IS_SLOWER; + else if (abilityAI != ABILITY_STALL && abilityPlayer == ABILITY_STALL) + return AI_IS_FASTER; + + if (speedBattlerAI > speedBattler) + { + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) + return AI_IS_SLOWER; + else + return AI_IS_FASTER; + } + else if (speedBattlerAI == speedBattler) + { + return AI_IS_FASTER; + } + else + { + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) + return AI_IS_FASTER; + else + return AI_IS_SLOWER; + } + + return AI_IS_SLOWER; } // Check if target has means to faint ai mon. @@ -1107,6 +1141,27 @@ u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef) return move; } +u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget) +{ + u32 i; + u32 bestDmg = 0; + u32 unusable = AI_DATA->moveLimitations[battler]; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE + && moves[i] != MOVE_UNAVAILABLE + && !(unusable & gBitTable[i]) + && bestDmg < AI_DATA->simulatedDmg[battler][battlerTarget][i].expected) + { + bestDmg = AI_DATA->simulatedDmg[battler][battlerTarget][i].expected; + } + } + + return bestDmg; +} + // Check if AI mon has the means to faint the target with any of its moves. // If numHits > 1, check if the target will be KO'ed by that number of hits (ignoring healing effects) bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) @@ -1298,7 +1353,7 @@ bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move) if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE) return FALSE; // AI handicap flag: doesn't understand ability suppression concept - if (IsMoldBreakerTypeAbility(atkAbility) || gMovesInfo[move].ignoresTargetAbility) + if (IsMoldBreakerTypeAbility(sBattler_AI, atkAbility) || gMovesInfo[move].ignoresTargetAbility) return TRUE; return FALSE; @@ -1999,6 +2054,20 @@ bool32 HasMove(u32 battlerId, u32 move) return FALSE; } +bool32 HasAnyKnownMove(u32 battlerId) +{ + s32 i; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE) + return TRUE; + } + + return FALSE; +} + bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) { s32 i; @@ -2740,48 +2809,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 @@ -2796,7 +2835,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)) @@ -2809,20 +2848,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) @@ -2856,19 +2884,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 @@ -2883,7 +2898,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 @@ -2897,7 +2912,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)) @@ -2932,7 +2947,7 @@ bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility) u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move) { - if (((!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) + if (((!IsMoldBreakerTypeAbility(battlerAtk, AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || AI_IsSlower(battlerAtk, battlerDef, move))) // Opponent goes first @@ -2975,7 +2990,7 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move) || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || (!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk]) + || (!IsMoldBreakerTypeAbility(battlerAtk, AI_DATA->abilities[battlerAtk]) && (AI_DATA->abilities[battlerDef] == ABILITY_SHIELD_DUST || AI_DATA->abilities[battlerDef] == ABILITY_INNER_FOCUS))) return FALSE; @@ -3028,7 +3043,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) } // Check attacker's status - if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_9 + if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8 || AI_DATA->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof) && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE) return TRUE; @@ -3563,114 +3578,117 @@ bool32 IsRecycleEncouragedItem(u32 item) return FALSE; } -static void IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score, bool32 considerContrary) +static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, bool32 considerContrary) { + u32 tempScore = NO_INCREASE; u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk); u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE); u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) - return; + return NO_INCREASE; // Don't increase stat if AI is at +4 if (gBattleMons[battlerAtk].statStages[statId] >= MAX_STAT_STAGE - 2) - return; + return NO_INCREASE; // Don't increase stat if AI has less then 70% HP and number of hits isn't known if (AI_DATA->hpPercents[battlerAtk] < 70 && noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - return; + return NO_INCREASE; // Don't set up if AI is dead to residual damage from weather if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp) - return; + return NO_INCREASE; // Don't increase stats if opposing battler has Opportunist if (AI_DATA->abilities[battlerDef] == ABILITY_OPPORTUNIST) - return; + return NO_INCREASE; switch (statId) { case STAT_CHANGE_ATK: if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp) - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; break; case STAT_CHANGE_DEF: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL) - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; else - ADJUST_SCORE_PTR(WEAK_EFFECT); + tempScore += WEAK_EFFECT; } break; case STAT_CHANGE_SPEED: if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; break; case STAT_CHANGE_SPATK: if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp) - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; break; case STAT_CHANGE_SPDEF: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL) - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; else - ADJUST_SCORE_PTR(WEAK_EFFECT); + tempScore += WEAK_EFFECT; } break; case STAT_CHANGE_ATK_2: if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; break; case STAT_CHANGE_DEF_2: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; else - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; } break; case STAT_CHANGE_SPEED_2: if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; break; case STAT_CHANGE_SPATK_2: if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; break; case STAT_CHANGE_SPDEF_2: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; else - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; } break; case STAT_CHANGE_ACC: if (gBattleMons[battlerAtk].statStages[STAT_ACC] <= 3) // Increase only if necessary - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; break; case STAT_CHANGE_EVASION: if (noOfHitsToFaint > 3 || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - ADJUST_SCORE_PTR(GOOD_EFFECT); + tempScore += GOOD_EFFECT; else - ADJUST_SCORE_PTR(DECENT_EFFECT); + tempScore += DECENT_EFFECT; break; } + + return tempScore; } -void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score) +u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId) { - IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, score, TRUE); + return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, TRUE); } -void IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score) +u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId) { - IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, score, FALSE); + return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, FALSE); } void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) @@ -3812,24 +3830,28 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk)) - return FALSE; //don't use z move on partner - if (gBattleStruct->zmove.used[battlerAtk]) - return FALSE; //cant use z move twice + return FALSE; // don't use z move on partner + if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE)) + return FALSE; // can't use z move twice if (IsViableZMove(battlerAtk, chosenMove)) { u8 effectiveness; + u32 zMove = GetUsableZMove(battlerAtk, chosenMove); struct SimulatedDamage dmg; if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE + && !gMovesInfo[zMove].ignoresTargetAbility && (gBattleMons[battlerDef].species == SPECIES_MIMIKYU_DISGUISED || gBattleMons[battlerDef].species == SPECIES_MIMIKYU_TOTEM_DISGUISED)) return FALSE; // Don't waste a Z-Move busting disguise - if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE_FACE && IS_MOVE_PHYSICAL(chosenMove)) + if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE + && !gMovesInfo[zMove].ignoresTargetAbility + && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE_FACE && IS_MOVE_PHYSICAL(chosenMove)) return FALSE; // Don't waste a Z-Move busting Ice Face - if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(zMove)) return FALSE; - else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(zMove)) return FALSE; dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT); diff --git a/src/battle_anim.c b/src/battle_anim.c index f53e424a4d..71813ddf46 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -85,6 +85,7 @@ static void Cmd_stopsound(void); static void Cmd_createvisualtaskontargets(void); static void Cmd_createspriteontargets(void); static void Cmd_createspriteontargets_onpos(void); +static void Cmd_jumpifmovetypeequal(void); static void Cmd_createdragondartsprite(void); static void RunAnimScriptCommand(void); static void Task_UpdateMonBg(u8 taskId); @@ -177,7 +178,8 @@ static void (* const sScriptCmdTable[])(void) = Cmd_createvisualtaskontargets, // 0x30 Cmd_createspriteontargets, // 0x31 Cmd_createspriteontargets_onpos, // 0x32 - Cmd_createdragondartsprite, // 0x33 + Cmd_jumpifmovetypeequal, // 0x33 + Cmd_createdragondartsprite, // 0x34 }; void ClearBattleAnimationVars(void) @@ -793,6 +795,10 @@ static void Cmd_end(void) if (!continuousAnim) // May have been used for debug? { + // Debugging - ensure no hanging mon bg tasks + if (FuncIsActiveTask(Task_UpdateMonBg)) + DebugPrintf("Move %d animation still has Task_UpdateMonBg active at the end!", gAnimMoveIndex); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); if (!IsContest()) { @@ -2137,6 +2143,19 @@ static void Cmd_stopsound(void) sBattleAnimScriptPtr++; } +static void Cmd_jumpifmovetypeequal(void) +{ + u8 moveType; + const u8 *type = sBattleAnimScriptPtr + 1; + sBattleAnimScriptPtr += 2; + GET_MOVE_TYPE(gCurrentMove, moveType); + + if (*type != moveType) + sBattleAnimScriptPtr += 4; + else + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); +} + static void Cmd_createdragondartsprite(void) { s32 i; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 7ce0e0c36c..b917cdc9a5 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2958,6 +2958,50 @@ const struct SpriteTemplate gWoodHammerHammerSpriteTemplate = .callback = AnimWoodHammerHammer, }; +const struct SpriteTemplate gIvyCudgelSpriteTemplate = +{ + .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS, + .paletteTag = ANIM_TAG_IVY_CUDGEL_GRASS, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gWoodHammerHammerAffineAnims, + .callback = AnimWoodHammerHammer, +}; + +const struct SpriteTemplate gIvyCudgelFireSpriteTemplate = +{ + .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS, + .paletteTag = ANIM_TAG_IVY_CUDGEL_FIRE, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gWoodHammerHammerAffineAnims, + .callback = AnimWoodHammerHammer, +}; + +const struct SpriteTemplate gIvyCudgelRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS, + .paletteTag = ANIM_TAG_IVY_CUDGEL_ROCK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gWoodHammerHammerAffineAnims, + .callback = AnimWoodHammerHammer, +}; + +const struct SpriteTemplate gIvyCudgelWaterSpriteTemplate = +{ + .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS, + .paletteTag = ANIM_TAG_IVY_CUDGEL_WATER, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gWoodHammerHammerAffineAnims, + .callback = AnimWoodHammerHammer, +}; + const struct SpriteTemplate gJudgmentGrayOutwardSpikesTemplate = { .tileTag = ANIM_TAG_GREEN_SPIKE, @@ -6557,8 +6601,8 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) BattleLoadMonSpriteGfx(mon, battler); CreateBattlerSprite(battler); UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); - // If battler is mega evolved / primal reversed, hide the sprite until the move animation finishes. - MegaIndicator_SetVisibilities(gHealthboxSpriteIds[battler], TRUE); + // If battler has an indicator for a gimmick, hide the sprite until the move animation finishes. + UpdateIndicatorVisibilityAndType(gHealthboxSpriteIds[battler], TRUE); // Try to recreate shadow sprite if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 98af6c22ba..f023859b59 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -110,6 +110,14 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] = AFFINEANIMCMD_END, }; +static const union AffineAnimCmd sSquishTargetShortAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0, 64, 0, 4), //Flatten + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -64, 0, 4), + AFFINEANIMCMD_END, +}; + // GEN 4 // shadow sneak const struct SpriteTemplate gShadowSneakImpactSpriteTemplate = @@ -4801,6 +4809,17 @@ const struct SpriteTemplate gUltraBurstSymbolSpriteTemplate = .callback = AnimSpriteOnMonPos }; +const struct SpriteTemplate gAxeKickSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = &gAnims_HandsAndFeet[2], + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBounceBallLand, +}; + // Z MOVES //activate const struct SpriteTemplate gZMoveSymbolSpriteTemplate = @@ -8544,6 +8563,15 @@ void AnimTask_SquishTarget(u8 taskId) task->func = AnimTask_WaitAffineAnim; } +void AnimTask_SquishTargetShort(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + + PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetShortAffineAnimCmds); + task->func = AnimTask_WaitAffineAnim; +} + void CoreEnforcerLoadBeamTarget(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[2]; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 1622b94e9d..a5dc6f3af1 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -552,22 +552,17 @@ static void OpponentHandleChooseMove(u32 battler) if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } - if (ShouldUseZMove(battler, gBattlerTarget, chosenMove)) - QueueZMove(battler, chosenMove); - // If opponent can Mega Evolve, do it. - if (CanMegaEvolve(battler)) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); - // If opponent can Ultra Burst, do it. - else if (CanUltraBurst(battler)) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8)); - // If opponent can Dynamax and is allowed in the partydata, do it. - else if (CanDynamax(battler) && AI_DATA->shouldDynamax[battler]) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_DYNAMAX) | (gBattlerTarget << 8)); - // If opponent can Terastal and is allowed in the partydata, do it. - else if (CanTerastallize(battler) && AI_DATA->shouldTerastal[battler]) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_TERASTAL) | (gBattlerTarget << 8)); + // If opponent can and should use a gimmick (considering trainer data), do it + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE + && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE + && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId]))) + { + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8)); + } else + { BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); + } } break; } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 5bf12e2cc7..6dcea9eb98 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -9,6 +9,7 @@ #include "battle_setup.h" #include "battle_tv.h" #include "battle_z_move.h" +#include "battle_gimmick.h" #include "bg.h" #include "data.h" #include "item.h" @@ -162,11 +163,6 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; -static EWRAM_DATA bool8 sDescriptionSubmenu = 0; - -static EWRAM_DATA bool8 sAckBallUseBtn = FALSE; -static EWRAM_DATA bool8 sBallSwapped = FALSE; - void SetControllerToPlayer(u32 battler) { gBattlerControllerEndFuncs[battler] = PlayerBufferExecCompleted; @@ -264,61 +260,63 @@ static void HandleInputChooseAction(u32 battler) else gPlayerDpadHoldFrames = 0; -#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE - if (!gLastUsedBallMenuPresent) + if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE) { - sAckBallUseBtn = FALSE; + if (!gLastUsedBallMenuPresent) + { + gBattleStruct->ackBallUseBtn = FALSE; + } + else if (JOY_NEW(B_LAST_USED_BALL_BUTTON)) + { + gBattleStruct->ackBallUseBtn = TRUE; + gBattleStruct->ballSwapped = FALSE; + ArrowsChangeColorLastBallCycle(TRUE); + } + + if (gBattleStruct->ackBallUseBtn) + { + if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_DOWN) || JOY_NEW(DPAD_RIGHT))) + { + bool32 sameBall = FALSE; + u32 nextBall = GetNextBall(gBallToDisplay); + gBattleStruct->ballSwapped = TRUE; + if (gBallToDisplay == nextBall) + sameBall = TRUE; + else + gBallToDisplay = nextBall; + SwapBallToDisplay(sameBall); + PlaySE(SE_SELECT); + } + else if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_UP) || JOY_NEW(DPAD_LEFT))) + { + bool32 sameBall = FALSE; + u32 prevBall = GetPrevBall(gBallToDisplay); + gBattleStruct->ballSwapped = TRUE; + if (gBallToDisplay == prevBall) + sameBall = TRUE; + else + gBallToDisplay = prevBall; + SwapBallToDisplay(sameBall); + PlaySE(SE_SELECT); + } + else if (JOY_NEW(B_BUTTON) || (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && gBattleStruct->ballSwapped)) + { + gBattleStruct->ackBallUseBtn = FALSE; + gBattleStruct->ballSwapped = FALSE; + ArrowsChangeColorLastBallCycle(FALSE); + } + else if (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) + { + gBattleStruct->ackBallUseBtn = FALSE; + PlaySE(SE_SELECT); + ArrowsChangeColorLastBallCycle(FALSE); + TryHideLastUsedBall(); + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0); + PlayerBufferExecCompleted(battler); + } + return; + } } - else if (JOY_NEW(B_LAST_USED_BALL_BUTTON)) - { - sAckBallUseBtn = TRUE; - sBallSwapped = FALSE; - ArrowsChangeColorLastBallCycle(TRUE); - } - if (sAckBallUseBtn) - { - if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_DOWN) || JOY_NEW(DPAD_RIGHT))) - { - bool8 sameBall = FALSE; - u16 nextBall = GetNextBall(gBallToDisplay); - sBallSwapped = TRUE; - if (gBallToDisplay == nextBall) - sameBall = TRUE; - else - gBallToDisplay = nextBall; - SwapBallToDisplay(sameBall); - PlaySE(SE_SELECT); - } - else if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_UP) || JOY_NEW(DPAD_LEFT))) - { - bool8 sameBall = FALSE; - u16 prevBall = GetPrevBall(gBallToDisplay); - sBallSwapped = TRUE; - if (gBallToDisplay == prevBall) - sameBall = TRUE; - else - gBallToDisplay = prevBall; - SwapBallToDisplay(sameBall); - PlaySE(SE_SELECT); - } - else if (JOY_NEW(B_BUTTON) || (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && sBallSwapped)) - { - sAckBallUseBtn = FALSE; - sBallSwapped = FALSE; - ArrowsChangeColorLastBallCycle(FALSE); - } - else if (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) - { - sAckBallUseBtn = FALSE; - PlaySE(SE_SELECT); - ArrowsChangeColorLastBallCycle(FALSE); - TryHideLastUsedBall(); - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0); - PlayerBufferExecCompleted(battler); - } - return; - } -#endif if (JOY_NEW(A_BUTTON)) { @@ -413,22 +411,19 @@ static void HandleInputChooseAction(u32 battler) { SwapHpBarsWithHpText(); } -#if DEBUG_BATTLE_MENU == TRUE - else if (JOY_NEW(SELECT_BUTTON)) + else if (DEBUG_BATTLE_MENU == TRUE && JOY_NEW(SELECT_BUTTON)) { BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_DEBUG, 0); PlayerBufferExecCompleted(battler); } -#endif -#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE - else if (JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) + else if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE + && JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) { PlaySE(SE_SELECT); TryHideLastUsedBall(); BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0); PlayerBufferExecCompleted(battler); } -#endif } static void HandleInputChooseTarget(u32 battler) @@ -454,19 +449,13 @@ static void HandleInputChooseTarget(u32 battler) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; - if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->burst.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->dynamax.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->tera.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_TERASTAL | (gMultiUsePlayerCursor << 8)); + if (gBattleStruct->gimmick.playerSelect) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); TryHideLastUsedBall(); - HideTriggerSprites(); + HideGimmickTriggerSprite(); PlayerBufferExecCompleted(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) @@ -618,17 +607,11 @@ static void HandleInputShowEntireFieldTargets(u32 battler) { PlaySE(SE_SELECT); HideAllTargets(); - if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->burst.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->dynamax.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->tera.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_TERASTAL | (gMultiUsePlayerCursor << 8)); + if (gBattleStruct->gimmick.playerSelect) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); - HideTriggerSprites(); + HideGimmickTriggerSprite(); PlayerBufferExecCompleted(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) @@ -652,17 +635,11 @@ static void HandleInputShowTargets(u32 battler) { PlaySE(SE_SELECT); HideShownTargets(battler); - if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->burst.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->dynamax.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->tera.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_TERASTAL | (gMultiUsePlayerCursor << 8)); + if (gBattleStruct->gimmick.playerSelect) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); - HideTriggerSprites(); + HideGimmickTriggerSprite(); TryHideLastUsedBall(); PlayerBufferExecCompleted(battler); } @@ -696,7 +673,7 @@ static void HandleInputChooseMove(u32 battler) else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON) && !sDescriptionSubmenu) + if (JOY_NEW(A_BUTTON) && !gBattleStruct->descriptionSubmenu) { PlaySE(SE_SELECT); @@ -704,16 +681,13 @@ static void HandleInputChooseMove(u32 battler) if (gBattleStruct->zmove.viewing) { - u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[battler]]; - - QueueZMove(battler, chosenMove); gBattleStruct->zmove.viewing = FALSE; if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category != DAMAGE_CATEGORY_STATUS) moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target } // Status moves turn into Max Guard when Dynamaxed, targets user. - if ((IsDynamaxed(battler) || gBattleStruct->dynamax.playerSelect)) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) moveTarget = gMovesInfo[GetMaxMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]])].target; if (moveTarget & MOVE_TARGET_USER) @@ -769,17 +743,11 @@ static void HandleInputChooseMove(u32 battler) { case 0: default: - if (gBattleStruct->mega.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->burst.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->dynamax.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8)); - else if (gBattleStruct->tera.playerSelect) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_TERASTAL | (gMultiUsePlayerCursor << 8)); + if (gBattleStruct->gimmick.playerSelect) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); - HideTriggerSprites(); + HideGimmickTriggerSprite(); TryHideLastUsedBall(); PlayerBufferExecCompleted(battler); break; @@ -803,22 +771,18 @@ static void HandleInputChooseMove(u32 battler) break; } } - else if ((JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) && !sDescriptionSubmenu) + else if ((JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) && !gBattleStruct->descriptionSubmenu) { PlaySE(SE_SELECT); + gBattleStruct->gimmick.playerSelect = FALSE; if (gBattleStruct->zmove.viewing) { ReloadMoveNames(battler); } else { - gBattleStruct->mega.playerSelect = FALSE; - gBattleStruct->burst.playerSelect = FALSE; - gBattleStruct->dynamax.playerSelect = FALSE; - gBattleStruct->tera.playerSelect = FALSE; - gBattleStruct->zmove.viable = FALSE; BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF); - HideTriggerSprites(); + HideGimmickTriggerSprite(); PlayerBufferExecCompleted(battler); } } @@ -832,9 +796,9 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (sDescriptionSubmenu) + if (gBattleStruct->descriptionSubmenu) MoveSelectionDisplayMoveDescription(battler); - TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); + TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing) @@ -848,9 +812,9 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (sDescriptionSubmenu) + if (gBattleStruct->descriptionSubmenu) MoveSelectionDisplayMoveDescription(battler); - TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); + TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing) @@ -863,9 +827,9 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (sDescriptionSubmenu) + if (gBattleStruct->descriptionSubmenu) MoveSelectionDisplayMoveDescription(battler); - TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); + TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing) @@ -879,12 +843,12 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (sDescriptionSubmenu) + if (gBattleStruct->descriptionSubmenu) MoveSelectionDisplayMoveDescription(battler); - TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); + TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } - else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing && !sDescriptionSubmenu) + else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing && !gBattleStruct->descriptionSubmenu) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -900,11 +864,11 @@ static void HandleInputChooseMove(u32 battler) gBattlerControllerFuncs[battler] = HandleMoveSwitching; } } - else if (sDescriptionSubmenu) + else if (gBattleStruct->descriptionSubmenu) { - if (JOY_NEW(L_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { - sDescriptionSubmenu = FALSE; + gBattleStruct->descriptionSubmenu = FALSE; if (gCategoryIconSpriteId != 0xFF) { DestroySprite(&gSprites[gCategoryIconSpriteId]); @@ -919,48 +883,18 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionDisplayMoveType(battler); } } - else if (JOY_NEW(L_BUTTON)) + else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) && B_MOVE_DESCRIPTION_BUTTON != B_LAST_USED_BALL_BUTTON) { - sDescriptionSubmenu = TRUE; + gBattleStruct->descriptionSubmenu = TRUE; MoveSelectionDisplayMoveDescription(battler); } else if (JOY_NEW(START_BUTTON)) { - if (CanMegaEvolve(battler)) + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE) { - gBattleStruct->mega.playerSelect ^= 1; - ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect); - PlaySE(SE_SELECT); - } - else if (CanUltraBurst(battler)) - { - gBattleStruct->burst.playerSelect ^= 1; - ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, gBattleStruct->burst.playerSelect); - PlaySE(SE_SELECT); - } - else if (gBattleStruct->zmove.viable) - { - // show z move name / info - //TODO: brighten z move symbol - PlaySE(SE_SELECT); - if (!gBattleStruct->zmove.viewing) - MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove, battler); - else - ReloadMoveNames(battler); - } - else if (CanDynamax(battler)) - { - gBattleStruct->dynamax.playerSelect ^= 1; - MoveSelectionDisplayMoveNames(battler); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); - ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, gBattleStruct->dynamax.playerSelect); - PlaySE(SE_SELECT); - } - else if (CanTerastallize(battler)) - { - gBattleStruct->tera.playerSelect ^= 1; - ChangeTeraTriggerSprite(gBattleStruct->tera.triggerSpriteId, gBattleStruct->tera.playerSelect); - MoveSelectionDisplayMoveType(battler); // For Tera Blast / Tera Starstorm + gBattleStruct->gimmick.playerSelect ^= 1; + ReloadMoveNames(battler); + ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, gBattleStruct->gimmick.playerSelect); PlaySE(SE_SELECT); } } @@ -968,16 +902,20 @@ static void HandleInputChooseMove(u32 battler) static void ReloadMoveNames(u32 battler) { - gBattleStruct->mega.playerSelect = FALSE; - gBattleStruct->burst.playerSelect = FALSE; - gBattleStruct->dynamax.playerSelect = FALSE; - gBattleStruct->tera.playerSelect = FALSE; - gBattleStruct->zmove.viewing = FALSE; - MoveSelectionDestroyCursorAt(battler); - MoveSelectionDisplayMoveNames(battler); - MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); - MoveSelectionDisplayPpNumber(battler); - MoveSelectionDisplayMoveType(battler); + if (gBattleStruct->zmove.viable && !gBattleStruct->zmove.viewing) + { + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); + MoveSelectionDisplayZMove(GetUsableZMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]]), battler); + } + else + { + gBattleStruct->zmove.viewing = FALSE; + MoveSelectionDestroyCursorAt(battler); + MoveSelectionDisplayMoveNames(battler); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + } } static u32 UNUSED HandleMoveInputUnused(u32 battler) @@ -1130,7 +1068,7 @@ static void HandleMoveSwitching(u32 battler) MoveSelectionDisplayPpString(battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - GetUsableZMoves(battler, moveInfo->moves); + AssignUsableZMoves(battler, moveInfo->moves); } else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { @@ -1501,7 +1439,7 @@ static void Task_GiveExpToMon(u8 taskId) CalculateMonStats(mon); // Reapply Dynamax HP multiplier after stats are recalculated. - if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler]) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && monId == gBattlerPartyIndexes[battler]) { ApplyDynamaxHPMultiplier(battler, mon); gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP; @@ -1585,7 +1523,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) CalculateMonStats(&gPlayerParty[monId]); // Reapply Dynamax HP multiplier after stats are recalculated. - if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler]) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && monId == gBattlerPartyIndexes[battler]) { ApplyDynamaxHPMultiplier(battler, &gPlayerParty[monId]); gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP; @@ -1738,8 +1676,7 @@ static void MoveSelectionDisplayMoveNames(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { MoveSelectionDestroyCursorAt(i); - if ((gBattleStruct->dynamax.playerSelect && CanDynamax(battler)) - || IsDynamaxed(battler)) + if (IsGimmickSelected(battler, GIMMICK_DYNAMAX) || GetActiveGimmick(battler) == GIMMICK_DYNAMAX) StringCopy(gDisplayedStringBattle, GetMoveName(GetMaxMove(battler, moveInfo->moves[i]))); else StringCopy(gDisplayedStringBattle, GetMoveName(moveInfo->moves[i])); @@ -1786,7 +1723,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_BLAST) { - if (gBattleStruct->tera.playerSelect || IsTerastallized(battler)) + if (IsGimmickSelected(battler, GIMMICK_TERA) || GetActiveGimmick(battler) == GIMMICK_TERA) type = GetBattlerTeraType(battler); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL) @@ -1798,10 +1735,16 @@ static void MoveSelectionDisplayMoveType(u32 battler) || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) type = gBattleMons[battler].type2; } + // Max Guard is a Normal-type move + else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS + && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) + { + type = TYPE_NORMAL; + } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM) { if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR - || (gBattleStruct->tera.playerSelect && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) + || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; } @@ -1817,7 +1760,7 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) u16 pwr = gMovesInfo[move].power; u16 acc = gMovesInfo[move].accuracy; u8 cat = gMovesInfo[move].category; - + u8 pwr_num[3], acc_num[3]; u8 cat_desc[7] = _("CAT: "); u8 pwr_desc[7] = _("PWR: "); @@ -2155,32 +2098,16 @@ static void PlayerHandleChooseMove(u32 battler) struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); InitMoveSelectionsVarsAndStrings(battler); - gBattleStruct->mega.playerSelect = FALSE; - gBattleStruct->burst.playerSelect = FALSE; - gBattleStruct->dynamax.playerSelect = FALSE; - gBattleStruct->tera.playerSelect = FALSE; - if (!IsMegaTriggerSpriteActive()) - gBattleStruct->mega.triggerSpriteId = 0xFF; - if (CanMegaEvolve(battler)) - CreateMegaTriggerSprite(battler, 0); - if (!IsBurstTriggerSpriteActive()) - gBattleStruct->burst.triggerSpriteId = 0xFF; - if (CanUltraBurst(battler)) - CreateBurstTriggerSprite(battler, 0); - if (!IsDynamaxTriggerSpriteActive()) - gBattleStruct->dynamax.triggerSpriteId = 0xFF; - if (CanDynamax(battler)) - CreateDynamaxTriggerSprite(battler, 0); - if (!IsZMoveTriggerSpriteActive()) - gBattleStruct->zmove.triggerSpriteId = 0xFF; - if (!IsTeraTriggerSpriteActive()) - gBattleStruct->tera.triggerSpriteId = 0xFF; - if (CanTerastallize(battler)) - CreateTeraTriggerSprite(battler, 0); + gBattleStruct->gimmick.playerSelect = FALSE; + + AssignUsableZMoves(battler, moveInfo->moves); + gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[gMoveSelectionCursor[battler]]) != 0; + + if (!IsGimmickTriggerSpriteActive()) + gBattleStruct->gimmick.triggerSpriteId = 0xFF; + if (!(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE && !gBattleStruct->zmove.viable)) + CreateGimmickTriggerSprite(battler); - GetUsableZMoves(battler, moveInfo->moves); - gBattleStruct->zmove.viable = IsZMoveUsable(battler, gMoveSelectionCursor[battler]); - CreateZMoveTriggerSprite(battler, gBattleStruct->zmove.viable); gBattlerControllerFuncs[battler] = HandleChooseMoveAfterDma3; } } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index b817adf097..2dffd4f702 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -368,17 +368,17 @@ static void PlayerPartnerHandleChooseMove(u32 battler) if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } - - if (ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId])) - QueueZMove(battler, moveInfo->moves[chosenMoveId]); - - // If partner can mega evolve, do it. - if (CanMegaEvolve(battler)) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); - else if (CanUltraBurst(battler)) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8)); + // If partner can and should use a gimmick (considering trainer data), do it + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE + && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE + && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId]))) + { + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8)); + } else + { BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); + } } PlayerPartnerBufferExecCompleted(battler); diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 53860990c4..3a9ca1ec00 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 1f9cf0d7f6..230c3464dd 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1609,6 +1609,15 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 * src = (u8 *)&battleMon; for (size = 0; size < sizeof(battleMon); size++) dst[size] = src[size]; + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(battler); + u32 partyIndex = gBattlerPartyIndexes[battler]; + if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) + gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex); + } + #endif break; case REQUEST_SPECIES_BATTLE: data16 = GetMonData(&party[monId], MON_DATA_SPECIES); diff --git a/src/battle_debug.c b/src/battle_debug.c index 63627104be..4aefb2b1ff 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -116,6 +116,136 @@ enum LIST_ITEM_COUNT }; +enum +{ + LIST_STAT_HP_CURRENT, + LIST_STAT_HP_MAX, + LIST_STAT_ATTACK, + LIST_STAT_DEFENSE, + LIST_STAT_SPEED, + LIST_STAT_SP_ATK, + LIST_STAT_SP_DEF, +}; + +enum +{ + LIST_STATUS1_SLEEP, + LIST_STATUS1_POISON, + LIST_STATUS1_BURN, + LIST_STATUS1_FREEZE, + LIST_STATUS1_PARALYSIS, + LIST_STATUS1_TOXIC_POISON, + LIST_STATUS1_TOXIC_COUNTER, + LIST_STATUS1_FROSTBITE, +}; + +enum +{ + LIST_STATUS2_CONFUSION, + LIST_STATUS2_FLINCHED, + LIST_STATUS2_TORMENT, + LIST_STATUS2_POWDER, + LIST_STATUS2_DEFENSE_CURL, + LIST_STATUS2_RECHARGE, + LIST_STATUS2_RAGE, + LIST_STATUS2_DESTINY_BOND, + LIST_STATUS2_ESCAPE_PREVENTION, + LIST_STATUS2_CURSED, + LIST_STATUS2_FORESIGHT, + LIST_STATUS2_DRAGON_CHEER, + LIST_STATUS2_FOCUS_ENERGY +}; + +enum +{ + LIST_STATUS3_LEECH_SEED_HEALER, + LIST_STATUS3_LEECH_SEEDED, + LIST_STATUS3_ALWAYS_HITS, + LIST_STATUS3_PERISH_SONG, + LIST_STATUS3_ON_AIR, + LIST_STATUS3_UNDERGROUND, + LIST_STATUS3_MINIMIZED, + LIST_STATUS3_CHARGED_UP, + LIST_STATUS3_ROOTED, + LIST_STATUS3_YAWN, + LIST_STATUS3_IMPRISONED_OTHERS, + LIST_STATUS3_GRUDGE, + LIST_STATUS3_GASTRO_ACID, + LIST_STATUS3_EMBARGO, + LIST_STATUS3_UNDERWATER, + LIST_STATUS3_SMACKED_DOWN, + LIST_STATUS3_TELEKINESIS, + LIST_STATUS3_MIRACLE_EYED, + LIST_STATUS3_MAGNET_RISE, + LIST_STATUS3_HEAL_BLOCK, + LIST_STATUS3_AQUA_RING, + LIST_STATUS3_LASER_FOCUS, + LIST_STATUS3_POWER_TRICK, +}; + +enum +{ + LIST_STATUS4_ELECTRIFIED, + LIST_STATUS4_MUD_SPORT, + LIST_STATUS4_WATER_SPORT, + LIST_STATUS4_SALT_CURE, + LIST_STATUS4_SYRUP_BOMB, + LIST_STATUS4_GLAIVE_RUSH, +}; + +enum +{ + LIST_SIDE_REFLECT, + LIST_SIDE_LIGHTSCREEN, + LIST_SIDE_STICKY_WEB, + LIST_SIDE_SPIKES, + LIST_SIDE_SAFEGUARD, + LIST_SIDE_MIST, + LIST_SIDE_TAILWIND, + LIST_SIDE_AURORA_VEIL, + LIST_SIDE_LUCKY_CHANT, + LIST_SIDE_TOXIC_SPIKES, + LIST_SIDE_STEALTH_ROCK, + LIST_SIDE_STEELSURGE, + LIST_SIDE_DAMAGE_NON_TYPES, + LIST_SIDE_RAINBOW, + LIST_SIDE_SEA_OF_FIRE, + LIST_SIDE_SWAMP, +}; + +enum +{ + LIST_AI_CHECK_BAD_MOVE, + LIST_AI_TRY_TO_FAINT, + LIST_AI_CHECK_VIABILITY, + LIST_AI_SETUP_FIRST_TURN, + LIST_AI_RISKY, + LIST_AI_PREFER_STRONGEST_MOVE, + LIST_AI_PREFER_BATON_PASS, + LIST_AI_DOUBLE_BATTLE, + LIST_AI_HP_AWARE, + LIST_AI_POWERFUL_STATUS, + LIST_AI_NEGATE_UNAWARE, + LIST_AI_WILL_SUICIDE, + LIST_AI_HELP_PARTNER, + LIST_AI_PREFER_STATUS_MOVES, + LIST_AI_STALL, + LIST_AI_SMART_SWITCHING, + LIST_AI_ACE_POKEMON, + LIST_AI_OMNISCIENT, + LIST_AI_SMART_MON_CHOICES, + LIST_AI_ROAMING, + LIST_AI_SAFARI, + LIST_AI_FIRST_BATTLE, +}; + +enum +{ + VARIOUS_SHOW_HP, + VARIOUS_SUBSTITUTE_HP, + VARIOUS_IN_LOVE, +}; + enum { ACTIVE_WIN_MAIN, @@ -140,114 +270,142 @@ enum VAL_ALL_STAT_STAGES, }; -enum -{ - LIST_SIDE_REFLECT, - LIST_SIDE_LIGHTSCREEN, - LIST_SIDE_SPIKES, - LIST_SIDE_SAFEGUARD, - LIST_SIDE_MIST, - LIST_SIDE_AURORA_VEIL, - LIST_SIDE_LUCKY_CHANT, - LIST_SIDE_TAILWIND, - LIST_SIDE_STEALTH_ROCK, - LIST_SIDE_TOXIC_SPIKES, - LIST_SIDE_STICKY_WEB, - LIST_SIDE_STEELSURGE, -}; - -enum -{ - VARIOUS_SHOW_HP, - VARIOUS_SUBSTITUTE_HP, - VARIOUS_IN_LOVE, -}; - // Static Declarations static const u8 *GetHoldEffectName(u16 holdEffect); // const rom data -static const u8 sText_HoldEffect[] = _("Hold Effect"); -static const u8 sText_Ability[] = _("Ability"); static const u8 sText_Moves[] = _("Moves"); +static const u8 sText_Ability[] = _("Ability"); +static const u8 sText_HeldItem[] = _("Held Item"); +static const u8 sText_HoldEffect[] = _("Hold Effect"); +static const u8 sText_PP[] = _("PP"); +static const u8 sText_Types[] = _("Types"); static const u8 sText_Stats[] = _("Stats"); static const u8 sText_StatStages[] = _("Stat Stages"); static const u8 sText_Status1[] = _("Status1"); static const u8 sText_Status2[] = _("Status2"); static const u8 sText_Status3[] = _("Status3"); static const u8 sText_Status4[] = _("Status4"); -static const u8 sText_HeldItem[] = _("Held Item"); static const u8 sText_SideStatus[] = _("Side Status"); -static const u8 sText_MaxHp[] = _("HP Max"); +static const u8 sText_AI[] = _("AI"); +static const u8 sText_AIMovePts[] = _("AI Pts/Dmg"); +static const u8 sText_AiKnowledge[] = _("AI Info"); +static const u8 sText_AiParty[] = _("AI Party"); +static const u8 sText_Various[] = _("Various"); static const u8 sText_CurrHp[] = _("HP Current"); +static const u8 sText_MaxHp[] = _("HP Max"); +static const u8 sText_Attack[] = _("Attack"); +static const u8 sText_Defense[] = _("Defense"); +static const u8 sText_Speed[] = _("Speed"); +static const u8 sText_SpAtk[] = _("Sp. Atk"); +static const u8 sText_SpDef[] = _("Sp. Def"); +static const u8 sText_Sleep[] = _("Sleep"); +static const u8 sText_Poison[] = _("Poison"); +static const u8 sText_Burn[] = _("Burn"); static const u8 sText_Freeze[] = _("Freeze"); -static const u8 sText_Frostbite[] = _("Frostbite"); +static const u8 sText_Paralysis[] = _("Paralysis"); static const u8 sText_ToxicPoison[] = _("Toxic Poison"); static const u8 sText_ToxicCounter[] = _("Toxic Counter"); -static const u8 sText_Flinch[] = _("Flinch"); +static const u8 sText_Frostbite[] = _("Frostbite"); +static const u8 sText_Confusion[] = _("Confusion"); +static const u8 sText_Flinched[] = _("Flinched"); static const u8 sText_Uproar[] = _("Uproar"); +static const u8 sText_Torment[] = _("Torment"); static const u8 sText_Bide[] = _("Bide"); static const u8 sText_LockConfuse[] = _("Lock Confuse"); -static const u8 sText_MultipleTurns[] = _("MultipleTurns"); -static const u8 sText_FocusEnergy[] = _("Focus Energy"); +static const u8 sText_MultipleTurns[] = _("Multiple Turns"); +static const u8 sText_Wrapped[] = _("Wrapped"); +static const u8 sText_Powder[] = _("Powder"); +static const u8 sText_Infatuation[] = _("Infatuation"); +static const u8 sText_DefenseCurl[] = _("Defense Curl"); static const u8 sText_Transformed[] = _("Transformed"); static const u8 sText_Recharge[] = _("Recharge"); static const u8 sText_Rage[] = _("Rage"); static const u8 sText_Substitute[] = _("Substitute"); -static const u8 sText_SubstituteHp[] = _("Substitute HP"); static const u8 sText_DestinyBond[] = _("Destiny Bond"); -static const u8 sText_CantEscape[] = _("Cant Escape"); +static const u8 sText_EscapePrevention[] = _("Escape Prevention"); static const u8 sText_Nightmare[] = _("Nightmare"); static const u8 sText_Cursed[] = _("Cursed"); -static const u8 sText_Foresight[] = _("Foresighted"); -static const u8 sText_DefenseCurl[] = _("Def Curled"); -static const u8 sText_Tormented[] = _("Tormented"); -static const u8 sText_AlwaysHits[] = _("Sure Hit"); +static const u8 sText_Foresight[] = _("Foresight"); +static const u8 sText_DragonCheer[] = _("Dragon Cheer"); +static const u8 sText_FocusEnergy[] = _("Focus Energy"); +static const u8 sText_LeechSeedHealer[] = _("Leech Seed Healer"); +static const u8 sText_LeechSeeded[] = _("Leech Seeded"); +static const u8 sText_AlwaysHits[] = _("Always Hits"); +static const u8 sText_PerishSong[] = _("Perish Song"); +static const u8 sText_OnAir[] = _("On Air"); +static const u8 sText_Underground[] = _("Underground"); +static const u8 sText_Minimized[] = _("Minimized"); static const u8 sText_ChargedUp[] = _("Charged Up"); static const u8 sText_Rooted[] = _("Rooted"); -static const u8 sText_Yawned[] = _("Yawned"); -static const u8 sText_Minimized[] = _("Minimized"); -static const u8 sText_NoCrit[] = _("No Crit"); -static const u8 sText_Imprisoned[] = _("Imprison"); +static const u8 sText_Yawn[] = _("Yawn"); +static const u8 sText_ImprisonedOthers[] = _("Imprisoned Others"); +static const u8 sText_Grudge[] = _("Grudge"); +static const u8 sText_GastroAcid[] = _("Gastro Acid"); +static const u8 sText_Embargo[] = _("Embargo"); +static const u8 sText_Underwater[] = _("Underwater"); +static const u8 sText_Trace[] = _("Trace"); +static const u8 sText_SmackedDown[] = _("Smacked Down"); +static const u8 sText_MeFirst[] = _("Me First"); +static const u8 sText_Telekinesis[] = _("Telekinesis"); +static const u8 sText_PhantomForce[] = _("Phantom Force"); +static const u8 sText_MiracleEyed[] = _("Miracle Eyed"); +static const u8 sText_MagnetRise[] = _("Magnet Rise"); +static const u8 sText_HealBlock[] = _("Heal Block"); +static const u8 sText_AquaRing[] = _("Aqua Ring"); +static const u8 sText_LaserFocus[] = _("Laser Focus"); +static const u8 sText_PowerTrick[] = _("Power Trick"); +static const u8 sText_SkyDropped[] = _("Sky Dropped"); +static const u8 sText_Electrified[] = _("Electrified"); +static const u8 sText_MudSport[] = _("Mud Sport"); +static const u8 sText_WaterSport[] = _("Water Sport"); +static const u8 sText_InfiniteConfusion[] = _("Infinite Confusion"); +static const u8 sText_SaltCure[] = _("Salt Cure"); +static const u8 sText_SyrupBomb[] = _("Syrup Bomb"); +static const u8 sText_GlaiveRush[] = _("Glaive Rush"); static const u8 sText_Reflect[] = _("Reflect"); static const u8 sText_LightScreen[] = _("Light Screen"); +static const u8 sText_StickyWeb[] = _("Sticky Web"); static const u8 sText_Spikes[] = _("Spikes"); static const u8 sText_Safeguard[] = _("Safeguard"); +static const u8 sText_FutureAttack[] = _("Future Attack"); static const u8 sText_Mist[] = _("Mist"); -static const u8 sText_ShowOpponentHP[] = _("Opponent Hp"); -static const u8 sText_Types[] = _("Types"); -static const u8 sText_GastroAcid[] = _("Gastro Acid"); -static const u8 sText_SmackDown[] = _("Smacked Down"); -static const u8 sText_MiracleEye[] = _("Miracle Eye"); -static const u8 sText_AquaRing[] = _("Aqua Ring"); -static const u8 sText_LaserFocus[] = _("Laser Focused"); -static const u8 sText_Electrified[] = _("Electrified"); +static const u8 sText_Tailwind[] = _("Tailwind"); static const u8 sText_AuroraVeil[] = _("Aurora Veil"); static const u8 sText_LuckyChant[] = _("Lucky Chant"); -static const u8 sText_Tailwind[] = _("Tailwind"); -static const u8 sText_PP[] = _("PP"); -static const u8 sText_StealthRock[] = _("Stealth Rock"); static const u8 sText_ToxicSpikes[] = _("Toxic Spikes"); -static const u8 sText_StickyWeb[] = _("Sticky Web"); +static const u8 sText_StealthRock[] = _("Stealth Rock"); static const u8 sText_Steelsurge[] = _("Steelsurge"); -static const u8 sText_AI[] = _("AI"); -static const u8 sText_NoBadMoves[] = _("No Bad Moves"); -static const u8 sText_Viability[] = _("Viability"); -static const u8 sText_TryFaint[] = _("Try Faint"); -static const u8 sText_SetUpFirstTurn[] = _("Setup 1 turn"); +static const u8 sText_DamageNonTypes[] = _("Damage Non-Types"); +static const u8 sText_Rainbow[] = _("Rainbow"); +static const u8 sText_SeaOfFire[] = _("Sea of Fire"); +static const u8 sText_Swamp[] = _("Swamp"); +static const u8 sText_CheckBadMove[] = _("Check Bad Move"); +static const u8 sText_TryToFaint[] = _("Try to Faint"); +static const u8 sText_CheckViability[] = _("Check Viability"); +static const u8 sText_SetUpFirstTurn[] = _("Setup First Turn"); static const u8 sText_Risky[] = _("Risky"); -static const u8 sText_StrongestMove[] = _("Most dmg move"); -static const u8 sText_Various[] = _("Various"); +static const u8 sText_PreferStrongestMove[] = _("Prefer Strongest Move"); +static const u8 sText_PreferBatonPass[] = _("Prefer Baton Pass"); +static const u8 sText_DoubleBattle[] = _("Double Battle"); +static const u8 sText_HpAware[] = _("HP Aware"); +static const u8 sText_PowerfulStatus[] = _("Powerful Status"); +static const u8 sText_NegateUnaware[] = _("Negate Unaware"); +static const u8 sText_WillSuicide[] = _("Will Suicide"); +static const u8 sText_HelpPartner[] = _("Help Partner"); +static const u8 sText_PreferStatusMoves[] = _("Prefer Status Moves"); +static const u8 sText_Stall[] = _("Stall"); +static const u8 sText_SmartSwitching[] = _("Smart Switching"); +static const u8 sText_AcePokemon[] = _("Ace Pokemon"); +static const u8 sText_Omniscient[] = _("Omniscient"); +static const u8 sText_SmartMonChoices[] = _("Smart Mon Choices"); +static const u8 sText_Roaming[] = _("Roaming"); +static const u8 sText_Safari[] = _("Safari"); +static const u8 sText_FirstBattle[] = _("First Battle"); static const u8 sText_ShowHP[] = _("Show HP"); -static const u8 sText_PreferBatonPass[] = _("Baton Pass"); -static const u8 sText_InDoubles[] = _("In Doubles"); -static const u8 sText_HpAware[] = _("HP aware"); -static const u8 sText_Unknown[] = _("Unknown"); +static const u8 sText_SubstituteHp[] = _("Substitute HP"); static const u8 sText_InLove[] = _("In Love"); -static const u8 sText_AIMovePts[] = _("AI Pts/Dmg"); -static const u8 sText_AiKnowledge[] = _("AI Info"); -static const u8 sText_AiParty[] = _("AI Party"); - +static const u8 sText_Unknown[] = _("Unknown"); static const u8 sText_EmptyString[] = _(""); static const struct BitfieldInfo sStatus1Bitfield[] = @@ -265,78 +423,86 @@ static const struct BitfieldInfo sStatus1Bitfield[] = static const struct BitfieldInfo sStatus2Bitfield[] = { {/*Confusion*/ 3, 0}, - {/*Flinch*/ 1, 3}, - {/*Uproar*/ 3, 4}, - // Bit 7 is unused. - {/*Bide*/ 2, 8}, - {/*Lock Confuse*/ 2, 10}, - {/*Multiple Turns*/ 1, 12}, - // Wrap bits are omitted. Done in various. - // In Love bits are omitted. Done in various. - {/*(Focus Energy*/ 1, 20}, - {/*Transformed*/ 1, 21}, + {/*Flinched*/ 1, 3}, + {/*Torment*/ 1, 7}, + {/*Powder*/ 1, 14}, + {/*Defense Curl*/ 1, 20}, {/*Recharge*/ 1, 22}, {/*Rage*/ 1, 23}, - {/*Substitute*/ 1, 24}, - {/*Destiny bond*/ 1, 25}, - {/*Can't escape*/ 1, 26}, - {/*Nightmares*/ 1, 27}, + {/*Destiny Bond*/ 1, 25}, + {/*Escape Prevention*/ 1, 26}, {/*Cursed*/ 1, 28}, - {/*Foresighted*/ 1, 29}, - {/*Defense Curled*/ 1, 30}, - {/*Tormented*/ 1, 31}, + {/*Foresight*/ 1, 29}, + {/*Dragon Cheer*/ 1, 30}, + {/*Focus Energy*/ 1, 31}, }; static const struct BitfieldInfo sStatus3Bitfield[] = { - {/*Always hits*/ 2, 4}, - //*Perish Song*/ 1, 5}, - // On Air 1, 6, - // Underground 1, 7, + {/*Leech Seed Battler*/ 2, 0}, + {/*Leech Seed*/ 1, 2}, + {/*Always Hits*/ 2, 3}, + {/*Perish Song*/ 1, 5}, + {/*On Air*/ 1, 6}, + {/*Underground*/ 1, 7}, {/*Minimized*/ 1, 8}, {/*Charged Up*/ 1, 9}, {/*Rooted*/ 1, 10}, {/*Yawn*/ 2, 11}, - {/*Imprison*/ 1, 13}, - // Grudge 1, 14, - {/*No Crit*/ 1, 15}, + {/*Imprisoned Others*/ 1, 13}, + {/*Grudge*/ 1, 14}, {/*Gastro Acid*/ 1, 16}, - // Embargo 1, 17, - // Underwater 1, 18, - // Intimidated Mons 1, 19, - // Traced 1, 20, + {/*Embargo*/ 1, 17}, + {/*Underwater*/ 1, 18}, {/*Smacked Down*/ 1, 21}, - // Me First 1, 22, - // Telekinesis 1, 23, - // Phantom Force 1, 24}, + {/*Telekinesis*/ 1, 23}, {/*Miracle Eyed*/ 1, 25}, - // Magnet Rise 1, 26, - // Heal Block 1, 27, + {/*Magnet Rise*/ 1, 26}, + {/*Heal Blocked*/ 1, 27}, {/*Aqua Ring*/ 1, 28}, {/*Laser Focus*/ 1, 29}, - // Power Trick 1, 30, + {/*Power Trick*/ 1, 30}, }; static const struct BitfieldInfo sStatus4Bitfield[] = { - {/*Electrified*/ 1, 0,} + {/*Electrified*/ 1, 0}, + {/*Mud Sport*/ 1, 1}, + {/*Water Sport*/ 1, 2}, + {/*Salt Cure*/ 1, 4}, + {/*Syrup Bomb*/ 1, 5}, + {/*Glaive Rush*/ 1, 6}, }; static const struct BitfieldInfo sAIBitfield[] = { - {/*Check bad move*/ 1, 0}, - {/*Try To Faint*/ 1, 1}, - {/*Viability*/ 1, 2}, - {/*Set up first turn*/ 1, 3}, + {/*Check Bad Move*/ 1, 0}, + {/*Try to Faint*/ 1, 1}, + {/*Check Viability*/ 1, 2}, + {/*Setup First Turn*/ 1, 3}, {/*Risky*/ 1, 4}, {/*Prefer Strongest Move*/ 1, 5}, {/*Prefer Baton Pass*/ 1, 6}, - {/*In Doubles*/ 1, 7}, - {/*Hp aware*/ 1, 8}, - {/*Unknown*/ 1, 9}, + {/*Double Battle*/ 1, 7}, + {/*HP Aware*/ 1, 8}, + {/*Powerful Status*/ 1, 9}, + {/*Negate Unaware*/ 1, 10}, + {/*Will Suicide*/ 1, 11}, + {/*Help Partner*/ 1, 12}, + {/*Prefer Status Moves*/ 1, 13}, + {/*Stall*/ 1, 14}, + {/*Smart Switching*/ 1, 15}, + {/*Ace Pokemon*/ 1, 16}, + {/*Omniscient*/ 1, 17}, + {/*Smart Mon Choices*/ 1, 18}, + {/*Ace Pokemon*/ 1, 16}, + {/*Omniscient*/ 1, 17}, + {/*Smart Mon Choices*/ 1, 18}, + {/*Roaming*/ 1, 29}, + {/*Safari*/ 1, 30}, + {/*First Battle*/ 1, 31}, }; - static const struct ListMenuItem sMainListItems[] = { {sText_Moves, LIST_ITEM_MOVES}, @@ -358,106 +524,134 @@ static const struct ListMenuItem sMainListItems[] = {sText_Various, LIST_ITEM_VARIOUS}, }; -static const struct ListMenuItem sVariousListItems[] = -{ - {sText_ShowHP, VARIOUS_SHOW_HP}, - {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP}, - {sText_InLove, VARIOUS_IN_LOVE}, -}; - -static const struct ListMenuItem sAIListItems[] = -{ - {sText_NoBadMoves, 0}, - {sText_TryFaint, 1}, - {sText_Viability, 2}, - {sText_SetUpFirstTurn, 3}, - {sText_Risky, 4}, - {sText_StrongestMove, 5}, - {sText_PreferBatonPass, 6}, - {sText_InDoubles, 7}, - {sText_HpAware, 8}, - // {sText_Unknown, 9}, -}; - static const struct ListMenuItem sStatsListItems[] = { - {sText_CurrHp, 0}, - {sText_MaxHp, 1}, - {gText_Attack, 2}, - {gText_Defense, 3}, - {gText_Speed, 4}, - {gText_SpAtk, 5}, - {gText_SpDef, 6}, + {sText_CurrHp, LIST_STAT_HP_CURRENT}, + {sText_MaxHp, LIST_STAT_HP_MAX}, + {sText_Attack, LIST_STAT_ATTACK}, + {sText_Defense, LIST_STAT_DEFENSE}, + {sText_Speed, LIST_STAT_SPEED}, + {sText_SpAtk, LIST_STAT_SP_ATK}, + {sText_SpDef, LIST_STAT_SP_DEF}, }; static const struct ListMenuItem sStatus1ListItems[] = { - {gText_Sleep, 0}, - {gText_Poison, 1}, - {gText_Burn, 2}, - {sText_Freeze, 3}, - {gText_Paralysis, 4}, - {sText_ToxicPoison, 5}, - {sText_ToxicCounter, 6}, - {sText_Frostbite, 7}, + {sText_Sleep, LIST_STATUS1_SLEEP}, + {sText_Poison, LIST_STATUS1_POISON}, + {sText_Burn, LIST_STATUS1_BURN}, + {sText_Freeze, LIST_STATUS1_FREEZE}, + {sText_Paralysis, LIST_STATUS1_PARALYSIS}, + {sText_ToxicPoison, LIST_STATUS1_TOXIC_POISON}, + {sText_ToxicCounter, LIST_STATUS1_TOXIC_COUNTER}, + {sText_Frostbite, LIST_STATUS1_FROSTBITE}, }; static const struct ListMenuItem sStatus2ListItems[] = { - {gText_Confusion, 0}, - {sText_Flinch, 1}, - {sText_Uproar, 2}, - {sText_Bide, 3}, - {sText_LockConfuse, 4}, - {sText_MultipleTurns, 5}, - {sText_FocusEnergy, 6}, - {sText_Recharge, 7}, - {sText_Rage, 8}, - {sText_Substitute, 9}, - {sText_DestinyBond, 10}, - {sText_CantEscape, 11}, - {sText_Nightmare, 12}, - {sText_Cursed, 13}, - {sText_Foresight, 14}, - {sText_DefenseCurl, 15}, - {sText_Tormented, 16}, + {sText_Confusion, LIST_STATUS2_CONFUSION}, + {sText_Flinched, LIST_STATUS2_FLINCHED}, + {sText_Torment, LIST_STATUS2_TORMENT}, + {sText_Powder, LIST_STATUS2_POWDER}, + {sText_DefenseCurl, LIST_STATUS2_DEFENSE_CURL}, + {sText_Recharge, LIST_STATUS2_RECHARGE}, + {sText_Rage, LIST_STATUS2_RAGE}, + {sText_DestinyBond, LIST_STATUS2_DESTINY_BOND}, + {sText_EscapePrevention, LIST_STATUS2_ESCAPE_PREVENTION}, + {sText_Cursed, LIST_STATUS2_CURSED}, + {sText_Foresight, LIST_STATUS2_FORESIGHT}, + {sText_DragonCheer, LIST_STATUS2_DRAGON_CHEER}, + {sText_FocusEnergy, LIST_STATUS2_FOCUS_ENERGY}, }; static const struct ListMenuItem sStatus3ListItems[] = { - {sText_AlwaysHits, 0}, - {sText_Minimized, 1}, - {sText_ChargedUp, 2}, - {sText_Rooted, 3}, - {sText_Yawned, 4}, - {sText_Imprisoned, 5}, - {sText_NoCrit, 6}, - {sText_GastroAcid, 7}, - {sText_SmackDown, 8}, - {sText_MiracleEye, 9}, - {sText_AquaRing, 10}, - {sText_LaserFocus, 11}, + {sText_LeechSeedHealer, LIST_STATUS3_LEECH_SEED_HEALER}, + {sText_LeechSeeded, LIST_STATUS3_LEECH_SEEDED}, + {sText_AlwaysHits, LIST_STATUS3_ALWAYS_HITS}, + {sText_PerishSong, LIST_STATUS3_PERISH_SONG}, + {sText_OnAir, LIST_STATUS3_ON_AIR}, + {sText_Underground, LIST_STATUS3_UNDERGROUND}, + {sText_Minimized, LIST_STATUS3_MINIMIZED}, + {sText_ChargedUp, LIST_STATUS3_CHARGED_UP}, + {sText_Rooted, LIST_STATUS3_ROOTED}, + {sText_Yawn, LIST_STATUS3_YAWN}, + {sText_ImprisonedOthers, LIST_STATUS3_IMPRISONED_OTHERS}, + {sText_Grudge, LIST_STATUS3_GRUDGE}, + {sText_GastroAcid, LIST_STATUS3_GASTRO_ACID}, + {sText_Embargo, LIST_STATUS3_EMBARGO}, + {sText_Underwater, LIST_STATUS3_UNDERWATER}, + {sText_SmackedDown, LIST_STATUS3_SMACKED_DOWN}, + {sText_Telekinesis, LIST_STATUS3_TELEKINESIS}, + {sText_MiracleEyed, LIST_STATUS3_MIRACLE_EYED}, + {sText_MagnetRise, LIST_STATUS3_MAGNET_RISE}, + {sText_HealBlock, LIST_STATUS3_HEAL_BLOCK}, + {sText_AquaRing, LIST_STATUS3_AQUA_RING}, + {sText_LaserFocus, LIST_STATUS3_LASER_FOCUS}, + {sText_PowerTrick, LIST_STATUS3_POWER_TRICK}, }; static const struct ListMenuItem sStatus4ListItems[] = { - {sText_Electrified, 0}, + {sText_Electrified, LIST_STATUS4_ELECTRIFIED}, + {sText_MudSport, LIST_STATUS4_MUD_SPORT}, + {sText_WaterSport, LIST_STATUS4_WATER_SPORT}, + {sText_SaltCure, LIST_STATUS4_SALT_CURE}, + {sText_SyrupBomb, LIST_STATUS4_SYRUP_BOMB}, + {sText_GlaiveRush, LIST_STATUS4_GLAIVE_RUSH}, }; static const struct ListMenuItem sSideStatusListItems[] = { {sText_Reflect, LIST_SIDE_REFLECT}, {sText_LightScreen, LIST_SIDE_LIGHTSCREEN}, + {sText_StickyWeb, LIST_SIDE_STICKY_WEB}, {sText_Spikes, LIST_SIDE_SPIKES}, {sText_Safeguard, LIST_SIDE_SAFEGUARD}, {sText_Mist, LIST_SIDE_MIST}, + {sText_Tailwind, LIST_SIDE_TAILWIND}, {sText_AuroraVeil, LIST_SIDE_AURORA_VEIL}, {sText_LuckyChant, LIST_SIDE_LUCKY_CHANT}, - {sText_Tailwind, LIST_SIDE_TAILWIND}, - {sText_StealthRock, LIST_SIDE_STEALTH_ROCK}, {sText_ToxicSpikes, LIST_SIDE_TOXIC_SPIKES}, - {sText_StickyWeb, LIST_SIDE_STICKY_WEB}, + {sText_StealthRock, LIST_SIDE_STEALTH_ROCK}, {sText_Steelsurge, LIST_SIDE_STEELSURGE}, + {sText_DamageNonTypes, LIST_SIDE_DAMAGE_NON_TYPES}, + {sText_Rainbow, LIST_SIDE_RAINBOW}, + {sText_SeaOfFire, LIST_SIDE_SEA_OF_FIRE}, + {sText_Swamp, LIST_SIDE_SWAMP}, +}; + +static const struct ListMenuItem sAIListItems[] = +{ + {sText_CheckBadMove, LIST_AI_CHECK_BAD_MOVE}, + {sText_TryToFaint, LIST_AI_TRY_TO_FAINT}, + {sText_CheckViability, LIST_AI_CHECK_VIABILITY}, + {sText_SetUpFirstTurn, LIST_AI_SETUP_FIRST_TURN}, + {sText_Risky, LIST_AI_RISKY}, + {sText_PreferStrongestMove, LIST_AI_PREFER_STRONGEST_MOVE}, + {sText_PreferBatonPass, LIST_AI_PREFER_BATON_PASS}, + {sText_DoubleBattle, LIST_AI_DOUBLE_BATTLE}, + {sText_HpAware, LIST_AI_HP_AWARE}, + {sText_PowerfulStatus, LIST_AI_POWERFUL_STATUS}, + {sText_NegateUnaware, LIST_AI_NEGATE_UNAWARE}, + {sText_WillSuicide, LIST_AI_WILL_SUICIDE}, + {sText_HelpPartner, LIST_AI_HELP_PARTNER}, + {sText_PreferStatusMoves, LIST_AI_PREFER_STATUS_MOVES}, + {sText_Stall, LIST_AI_STALL}, + {sText_SmartSwitching, LIST_AI_SMART_SWITCHING}, + {sText_AcePokemon, LIST_AI_ACE_POKEMON}, + {sText_Omniscient, LIST_AI_OMNISCIENT}, + {sText_SmartMonChoices, LIST_AI_SMART_MON_CHOICES}, + {sText_Roaming, LIST_AI_ROAMING}, + {sText_Safari, LIST_AI_SAFARI}, + {sText_FirstBattle, LIST_AI_FIRST_BATTLE}, +}; + +static const struct ListMenuItem sVariousListItems[] = +{ + {sText_ShowHP, VARIOUS_SHOW_HP}, + {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP}, + {sText_InLove, VARIOUS_IN_LOVE}, }; static const struct ListMenuItem sSecondaryListItems[] = @@ -527,7 +721,7 @@ static const struct WindowTemplate sMainListWindowTemplate = .width = 9, .height = 12, .paletteNum = 0xF, - .baseBlock = 0x2 + .baseBlock = 0x1 }; static const struct WindowTemplate sSecondaryListWindowTemplate = @@ -535,10 +729,10 @@ static const struct WindowTemplate sSecondaryListWindowTemplate = .bg = 0, .tilemapLeft = 12, .tilemapTop = 3, - .width = 10, - .height = 2, + .width = 20, + .height = 16, .paletteNum = 0xF, - .baseBlock = 0xA0 + .baseBlock = 0x6D }; static const struct WindowTemplate sModifyWindowTemplate = @@ -549,7 +743,7 @@ static const struct WindowTemplate sModifyWindowTemplate = .width = 4, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x200 + .baseBlock = 0x1AD }; static const struct WindowTemplate sBattlerWindowTemplate = @@ -560,7 +754,7 @@ static const struct WindowTemplate sBattlerWindowTemplate = .width = 14, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x300 + .baseBlock = 0x1B5 }; static const struct BgTemplate sBgTemplates[] = @@ -1363,7 +1557,6 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) listTemplate.items = sStatus2ListItems; itemsCount = ARRAY_COUNT(sStatus2ListItems); data->bitfield = sStatus2Bitfield; - winTemplate.height = 1; break; case LIST_ITEM_STATUS3: listTemplate.items = sStatus3ListItems; @@ -1394,7 +1587,6 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) } data->secondaryListItemCount = itemsCount; - winTemplate.height *= itemsCount; data->secondaryListWindowId = AddWindow(&winTemplate); listTemplate.totalItems = itemsCount; @@ -1411,10 +1603,10 @@ static void PadString(const u8 *src, u8 *dst) { u32 i; - for (i = 0; i < 17 && src[i] != EOS; i++) + for (i = 0; i < 19 && src[i] != EOS; i++) dst[i] = src[i]; - for (; i < 17; i++) + for (; i < 19; i++) dst[i] = CHAR_SPACE; dst[i] = EOS; @@ -1516,11 +1708,10 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data) static void DestroyModifyArrows(struct BattleDebugMenu *data) { - FreeSpritePaletteByTag(gSpritePalette_Arrow.tag); if (data->modifyArrows.arrowSpriteId[0] != 0xFF) - DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[0]]); + DestroySpriteAndFreeResources(&gSprites[data->modifyArrows.arrowSpriteId[0]]); if (data->modifyArrows.arrowSpriteId[1] != 0xFF) - DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[1]]); + DestroySpriteAndFreeResources(&gSprites[data->modifyArrows.arrowSpriteId[1]]); } static void PrintDigitChars(struct BattleDebugMenu *data) @@ -1533,6 +1724,7 @@ static void PrintDigitChars(struct BattleDebugMenu *data) text[i] = EOS; + FillWindowPixelBuffer(data->modifyWindowId, 0x11); AddTextPrinterParameterized(data->modifyWindowId, FONT_NORMAL, text, 3, 0, 0, NULL); } @@ -1686,6 +1878,17 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, sideTimer->lightscreenBattlerId = data->battlerId; } return &sideTimer->lightscreenTimer; + case LIST_SIDE_STICKY_WEB: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB; + sideTimer->stickyWebBattlerId = data->battlerId; + sideTimer->stickyWebBattlerSide = GetBattlerSide(data->battlerId); + } + return &sideTimer->stickyWebAmount; case LIST_SIDE_SPIKES: if (changeStatus) { @@ -1715,6 +1918,16 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, sideTimer->mistBattlerId = data->battlerId; } return &sideTimer->mistTimer; + case LIST_SIDE_TAILWIND: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND; + sideTimer->tailwindBattlerId = data->battlerId; + } + return &sideTimer->tailwindTimer; case LIST_SIDE_AURORA_VEIL: if (changeStatus) { @@ -1735,25 +1948,6 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, sideTimer->luckyChantBattlerId = data->battlerId; } return &sideTimer->luckyChantTimer; - case LIST_SIDE_TAILWIND: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND; - sideTimer->tailwindBattlerId = data->battlerId; - } - return &sideTimer->tailwindTimer; - case LIST_SIDE_STEALTH_ROCK: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEALTH_ROCK; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK; - } - return &sideTimer->stealthRockAmount; case LIST_SIDE_TOXIC_SPIKES: if (changeStatus) { @@ -1763,15 +1957,15 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES; } return &sideTimer->toxicSpikesAmount; - case LIST_SIDE_STICKY_WEB: + case LIST_SIDE_STEALTH_ROCK: if (changeStatus) { if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB; + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEALTH_ROCK; else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB; + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK; } - return &sideTimer->stickyWebAmount; + return &sideTimer->stealthRockAmount; case LIST_SIDE_STEELSURGE: if (changeStatus) { @@ -1781,6 +1975,43 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEELSURGE; } return &sideTimer->steelsurgeAmount; + case LIST_SIDE_DAMAGE_NON_TYPES: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_DAMAGE_NON_TYPES; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_DAMAGE_NON_TYPES; + sideTimer->damageNonTypesType = gMovesInfo[gCurrentMove].type; + } + return &sideTimer->damageNonTypesTimer; + case LIST_SIDE_RAINBOW: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_RAINBOW; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_RAINBOW; + } + return &sideTimer->rainbowTimer; + case LIST_SIDE_SEA_OF_FIRE: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SEA_OF_FIRE; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SEA_OF_FIRE; + } + return &sideTimer->seaOfFireTimer; + case LIST_SIDE_SWAMP: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SWAMP; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SWAMP; + } + return &sideTimer->swampTimer; default: return NULL; } @@ -1847,14 +2078,15 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.minValue = 0; data->modifyArrows.maxValue = 9999; data->modifyArrows.maxDigits = 4; - if (data->currentSecondaryListItemId == 0) + data->modifyArrows.typeOfVal = VAL_U16; + if (data->currentSecondaryListItemId == LIST_STAT_HP_CURRENT) { data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].hp; data->modifyArrows.currValue = gBattleMons[data->battlerId].hp; data->modifyArrows.minValue = 1; data->modifyArrows.maxValue = gBattleMons[data->battlerId].maxHP; } - else if (data->currentSecondaryListItemId == 1) + else if (data->currentSecondaryListItemId == LIST_STAT_HP_MAX) { data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].maxHP; data->modifyArrows.minValue = gBattleMons[data->battlerId].hp; @@ -1865,7 +2097,6 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.modifiedValPtr = (u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2)); data->modifyArrows.currValue = *(u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2)); } - data->modifyArrows.typeOfVal = VAL_U16; break; case LIST_ITEM_STAT_STAGES: data->modifyArrows.minValue = 0; @@ -2196,6 +2427,14 @@ static const u8 sText_HoldEffectRoomService[] = _("Room Service"); static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy"); static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots"); static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray"); +static const u8 sText_HoldEffectAbilityShield[] = _("Ability Shield"); +static const u8 sText_HoldEffectClearAmulet[] = _("Clear Amulet"); +static const u8 sText_HoldEffectMirrorHerb[] = _("Mirror Herb"); +static const u8 sText_HoldEffectPunchingGlove[] = _("Punching Glove"); +static const u8 sText_HoldEffectCovertCloak[] = _("Covert Cloak"); +static const u8 sText_HoldEffectLoadedDice[] = _("Loaded Dice"); +static const u8 sText_HoldEffectBoosterEnergy[] = _("Booster Energy"); +static const u8 sText_HoldEffectBerserkGene[] = _("Berserk Gene"); static const u8 *const sHoldEffectNames[] = { [HOLD_EFFECT_NONE] = sText_HoldEffectNone, @@ -2338,6 +2577,14 @@ static const u8 *const sHoldEffectNames[] = [HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy, [HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots, [HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray, + [HOLD_EFFECT_ABILITY_SHIELD] = sText_HoldEffectAbilityShield, + [HOLD_EFFECT_CLEAR_AMULET] = sText_HoldEffectClearAmulet, + [HOLD_EFFECT_MIRROR_HERB] = sText_HoldEffectMirrorHerb, + [HOLD_EFFECT_PUNCHING_GLOVE] = sText_HoldEffectPunchingGlove, + [HOLD_EFFECT_COVERT_CLOAK] = sText_HoldEffectCovertCloak, + [HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice, + [HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy, + [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene, }; static const u8 *GetHoldEffectName(u16 holdEffect) { diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 19b9d8a51d..06a26718a9 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -5,6 +5,7 @@ #include "battle_interface.h" #include "battle_scripts.h" #include "battle_script_commands.h" +#include "battle_gimmick.h" #include "data.h" #include "event_data.h" #include "graphics.h" @@ -22,7 +23,7 @@ #include "constants/items.h" #include "constants/moves.h" -static u8 GetMaxPowerTier(u16 move); +static u8 GetMaxPowerTier(u32 move); struct GMaxMove { @@ -69,35 +70,21 @@ static const struct GMaxMove sGMaxMoveTable[] = {SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW}, }; -// forward declarations -static void SpriteCb_DynamaxTrigger(struct Sprite *); - -// Returns whether a battler is Dynamaxed. -bool32 IsDynamaxed(u16 battlerId) -{ - if (gBattleStruct->dynamax.dynamaxed[battlerId] - /*|| IsRaidBoss(battlerId)*/) - return TRUE; - return FALSE; -} - // Returns whether a battler can Dynamax. -bool32 CanDynamax(u16 battlerId) +bool32 CanDynamax(u32 battler) { - u16 species = gBattleMons[battlerId].species; - u16 holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item); - - // Check if Dynamax battle flag is set. This needs to be defined in include/config/battle.h - #if B_FLAG_DYNAMAX_BATTLE != 0 - if (!FlagGet(B_FLAG_DYNAMAX_BATTLE)) - #endif - return FALSE; - + u16 species = gBattleMons[battler].species; + u16 holdEffect = GetBattlerHoldEffect(battler, FALSE); // Check if Player has a Dynamax Band. - if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) - && !CheckBagHasItem(ITEM_DYNAMAX_BAND, 1)) - return FALSE; + if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT + || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))) + { + if (!CheckBagHasItem(ITEM_DYNAMAX_BAND, 1)) + return FALSE; + if (B_FLAG_DYNAMAX_BATTLE == 0 || (B_FLAG_DYNAMAX_BATTLE != 0 && !FlagGet(B_FLAG_DYNAMAX_BATTLE))) + return FALSE; + } // Check if species isn't allowed to Dynamax. if (GET_BASE_SPECIES_ID(species) == SPECIES_ZACIAN @@ -105,18 +92,24 @@ bool32 CanDynamax(u16 battlerId) || GET_BASE_SPECIES_ID(species) == SPECIES_ETERNATUS) return FALSE; - // Cannot Dynamax if you can Mega Evolve or use a Z-Move - if (holdEffect == HOLD_EFFECT_MEGA_STONE || holdEffect == HOLD_EFFECT_Z_CRYSTAL) + // Check if Trainer has already Dynamaxed. + if (HasTrainerUsedGimmick(battler, GIMMICK_DYNAMAX)) return FALSE; - // Cannot Dynamax if your side has already or will Dynamax. - if (gBattleStruct->dynamax.alreadyDynamaxed[GetBattlerSide(battlerId)] - || gBattleStruct->dynamax.dynamaxed[BATTLE_PARTNER(battlerId)] - || gBattleStruct->dynamax.toDynamax & gBitTable[BATTLE_PARTNER(battlerId)]) + // Check if AI battler is intended to Dynamaxed. + if (!ShouldTrainerBattlerUseGimmick(battler, GIMMICK_DYNAMAX)) + return FALSE; + + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) + return FALSE; + + // Check if battler is holding a Z-Crystal or Mega Stone. + if (!TESTING && (holdEffect == HOLD_EFFECT_Z_CRYSTAL || holdEffect == HOLD_EFFECT_MEGA_STONE)) // tests make this check already return FALSE; // TODO: Cannot Dynamax in a Max Raid if you don't have Dynamax Energy. - // if (gBattleTypeFlags & BATTLE_TYPE_RAID && gBattleStruct->raid.dynamaxEnergy != battlerId) + // if (gBattleTypeFlags & BATTLE_TYPE_RAID && gBattleStruct->raid.dynamaxEnergy != battler) // return FALSE; // No checks failed, all set! @@ -124,10 +117,10 @@ bool32 CanDynamax(u16 battlerId) } // Returns whether a battler is transformed into a Gigantamax form. -bool32 IsGigantamaxed(u16 battlerId) +bool32 IsGigantamaxed(u32 battler) { - struct Pokemon *mon = &GetSideParty(GetBattlerSide(battlerId))[gBattlerPartyIndexes[battlerId]]; - if ((gSpeciesInfo[gBattleMons[battlerId].species].isGigantamax) && GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR)) + struct Pokemon *mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]]; + if ((gSpeciesInfo[gBattleMons[battler].species].isGigantamax) && GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR)) return TRUE; return FALSE; } @@ -148,79 +141,80 @@ void ApplyDynamaxHPMultiplier(u32 battler, struct Pokemon* mon) } // Returns the non-Dynamax HP of a Pokemon. -u16 GetNonDynamaxHP(u16 battlerId) +u16 GetNonDynamaxHP(u32 battler) { - if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA) - return gBattleMons[battlerId].hp; + if (GetActiveGimmick(battler) != GIMMICK_DYNAMAX || gBattleMons[battler].species == SPECIES_SHEDINJA) + return gBattleMons[battler].hp; else { u16 mult = UQ_4_12(1.0/1.5); // placeholder - u16 hp = UQ_4_12_TO_INT((gBattleMons[battlerId].hp * mult) + UQ_4_12_ROUND); + u16 hp = UQ_4_12_TO_INT((gBattleMons[battler].hp * mult) + UQ_4_12_ROUND); return hp; } } // Returns the non-Dynamax Max HP of a Pokemon. -u16 GetNonDynamaxMaxHP(u32 battlerId) +u16 GetNonDynamaxMaxHP(u32 battler) { - if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA) - return gBattleMons[battlerId].maxHP; + if (GetActiveGimmick(battler) != GIMMICK_DYNAMAX || gBattleMons[battler].species == SPECIES_SHEDINJA) + return gBattleMons[battler].maxHP; else { u16 mult = UQ_4_12(1.0/1.5); // placeholder - u16 maxHP = UQ_4_12_TO_INT((gBattleMons[battlerId].maxHP * mult) + UQ_4_12_ROUND); + u16 maxHP = UQ_4_12_TO_INT((gBattleMons[battler].maxHP * mult) + UQ_4_12_ROUND); return maxHP; } } // Sets flags used for Dynamaxing and checks Gigantamax forms. -void PrepareBattlerForDynamax(u16 battlerId) +void ActivateDynamax(u32 battler) { - u8 side = GetBattlerSide(battlerId); - - gBattleStruct->dynamax.alreadyDynamaxed[side] = TRUE; - gBattleStruct->dynamax.dynamaxed[battlerId] = TRUE; - gBattleStruct->dynamax.dynamaxTurns[battlerId] = DYNAMAX_TURNS_COUNT; + // Set appropriate use flags. + SetActiveGimmick(battler, GIMMICK_DYNAMAX); + SetGimmickAsActivated(battler, GIMMICK_DYNAMAX); + gBattleStruct->dynamax.dynamaxTurns[battler] = DYNAMAX_TURNS_COUNT; // Substitute is removed upon Dynamaxing. - gBattleMons[battlerId].status2 &= ~STATUS2_SUBSTITUTE; - ClearBehindSubstituteBit(battlerId); + gBattleMons[battler].status2 &= ~STATUS2_SUBSTITUTE; + ClearBehindSubstituteBit(battler); // Choiced Moves are reset upon Dynamaxing. - gBattleStruct->choicedMove[battlerId] = MOVE_NONE; + gBattleStruct->choicedMove[battler] = MOVE_NONE; // Try Gigantamax form change. - if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax. - TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX); + if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax. + TryBattleFormChange(battler, FORM_CHANGE_BATTLE_GIGANTAMAX); + + BattleScriptExecute(BattleScript_DynamaxBegins); } // Unsets the flags used for Dynamaxing and reverts max HP if needed. -void UndoDynamax(u16 battlerId) +void UndoDynamax(u32 battler) { - u8 side = GetBattlerSide(battlerId); - u8 monId = gBattlerPartyIndexes[battlerId]; + u8 side = GetBattlerSide(battler); + u8 monId = gBattlerPartyIndexes[battler]; // Revert HP if battler is still Dynamaxed. - if (IsDynamaxed(battlerId)) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { struct Pokemon *mon = (side == B_SIDE_PLAYER) ? &gPlayerParty[monId] : &gEnemyParty[monId]; u16 mult = UQ_4_12(1.0/1.5); // placeholder - gBattleMons[battlerId].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up - SetMonData(mon, MON_DATA_HP, &gBattleMons[battlerId].hp); + gBattleMons[battler].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up + SetMonData(mon, MON_DATA_HP, &gBattleMons[battler].hp); CalculateMonStats(mon); } // Makes sure there are no Dynamax flags set, including on switch / faint. - gBattleStruct->dynamax.dynamaxed[battlerId] = FALSE; - gBattleStruct->dynamax.dynamaxTurns[battlerId] = 0; + SetActiveGimmick(battler, GIMMICK_NONE); + gBattleStruct->dynamax.dynamaxTurns[battler] = 0; // Undo form change if needed. - if (IsGigantamaxed(battlerId)) - TryBattleFormChange(battlerId, FORM_CHANGE_END_BATTLE); + if (IsGigantamaxed(battler)) + TryBattleFormChange(battler, FORM_CHANGE_END_BATTLE); } // Certain moves are blocked by Max Guard that normally ignore protection. -bool32 IsMoveBlockedByMaxGuard(u16 move) +bool32 IsMoveBlockedByMaxGuard(u32 move) { switch (move) { @@ -239,7 +233,7 @@ bool32 IsMoveBlockedByMaxGuard(u16 move) } // Weight-based moves (and some other moves in Raids) are blocked by Dynamax. -bool32 IsMoveBlockedByDynamax(u16 move) +bool32 IsMoveBlockedByDynamax(u32 move) { // TODO: Certain moves are banned in raids. switch (gMovesInfo[move].effect) @@ -251,24 +245,15 @@ bool32 IsMoveBlockedByDynamax(u16 move) return FALSE; } -// Returns whether a move should be converted into a Max Move. -bool32 ShouldUseMaxMove(u16 battlerId, u16 baseMove) -{ - // TODO: Raid bosses do not always use Max Moves. - // if (IsRaidBoss(battlerId)) - // return !IsRaidBossUsingRegularMove(battlerId, baseMove); - return IsDynamaxed(battlerId) || gBattleStruct->dynamax.toDynamax & gBitTable[battlerId]; -} - -static u16 GetTypeBasedMaxMove(u16 battlerId, u16 type) +static u16 GetTypeBasedMaxMove(u32 battler, u32 type) { // Gigantamax check u32 i; - u16 species = gBattleMons[battlerId].species; - u16 targetSpecies = SPECIES_NONE; + u32 species = gBattleMons[battler].species; + u32 targetSpecies = SPECIES_NONE; if (!gSpeciesInfo[species].isGigantamax) - targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX); + targetSpecies = GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_GIGANTAMAX); if (targetSpecies != SPECIES_NONE) species = targetSpecies; @@ -289,9 +274,9 @@ static u16 GetTypeBasedMaxMove(u16 battlerId, u16 type) } // Returns the appropriate Max Move or G-Max Move for a battler to use. -u16 GetMaxMove(u16 battlerId, u16 baseMove) +u16 GetMaxMove(u32 battler, u32 baseMove) { - u16 move = baseMove; + u32 move = baseMove; if (baseMove == MOVE_NONE) // for move display { return MOVE_NONE; @@ -306,13 +291,11 @@ u16 GetMaxMove(u16 battlerId, u16 baseMove) } else if (gBattleStruct->dynamicMoveType) { - move = GetTypeBasedMaxMove(battlerId, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK); - gBattleStruct->dynamax.categories[battlerId] = gMovesInfo[baseMove].category; + move = GetTypeBasedMaxMove(battler, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK); } else { - move = GetTypeBasedMaxMove(battlerId, gMovesInfo[baseMove].type); - gBattleStruct->dynamax.categories[battlerId] = gMovesInfo[baseMove].category; + move = GetTypeBasedMaxMove(battler, gMovesInfo[baseMove].type); } return move; @@ -332,7 +315,7 @@ enum }; // Gets the base power of a Max Move. -u8 GetMaxMovePower(u16 move) +u8 GetMaxMovePower(u32 move) { u8 tier; // G-Max Drum Solo, G-Max Hydrosnipe, and G-Max Fireball always have 160 base power. @@ -383,7 +366,7 @@ u8 GetMaxMovePower(u16 move) } } -static u8 GetMaxPowerTier(u16 move) +static u8 GetMaxPowerTier(u32 move) { if (gMovesInfo[move].strikeCount >= 2 && gMovesInfo[move].strikeCount <= 5) { @@ -459,7 +442,7 @@ static u8 GetMaxPowerTier(u16 move) } // Returns whether a move is a Max Move or not. -bool32 IsMaxMove(u16 move) +bool32 IsMaxMove(u32 move) { return move >= FIRST_MAX_MOVE && move <= LAST_MAX_MOVE; } @@ -485,7 +468,7 @@ void ChooseDamageNonTypesString(u8 type) } // Returns the status effect that should be applied by a G-Max Move. -static u32 GetMaxMoveStatusEffect(u16 move) +static u32 GetMaxMoveStatusEffect(u32 move) { u8 maxEffect = gMovesInfo[move].argument; switch (maxEffect) @@ -524,7 +507,7 @@ static u32 GetMaxMoveStatusEffect(u16 move) void BS_UpdateDynamax(void) { NATIVE_ARGS(); - u16 battler = gBattleScripting.battler; + u32 battler = gBattleScripting.battler; struct Pokemon *mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]]; if (!IsGigantamaxed(battler)) // RecalcBattlerStats will get called on form change. @@ -776,7 +759,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); @@ -882,7 +865,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; @@ -890,7 +873,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; @@ -898,7 +881,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); @@ -988,24 +971,6 @@ void BS_TrySetStatus2(void) } } -// Applies the endturn damage effect associated with the "Damage Non-" G-Max moves. -void BS_DamageNonTypes(void) -{ - NATIVE_ARGS(); - u8 side = GetBattlerSide(gBattlerAttacker); - gBattleMoveDamage = 0; - if (gSideTimers[side].damageNonTypesTimer - && !IS_BATTLER_OF_TYPE(gBattlerAttacker, gSideTimers[side].damageNonTypesType) - && IsBattlerAlive(gBattlerAttacker) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 6; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - gBattlescriptCurrInstr = cmd->nextInstr; -} - // Heals one-sixth of the target's HP, including for Dynamaxed targets. void BS_HealOneSixth(void) { @@ -1049,201 +1014,8 @@ void BS_TryRecycleBerry(void) void BS_JumpIfDynamaxed(void) { NATIVE_ARGS(const u8 *jumpInstr); - if (IsDynamaxed(gBattlerTarget)) + if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } - -// DYNAMAX TRIGGER: -static const u8 ALIGNED(4) sDynamaxTriggerGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_trigger.4bpp"); -static const u16 sDynamaxTriggerPal[] = INCBIN_U16("graphics/battle_interface/dynamax_trigger.gbapal"); - -static const struct SpriteSheet sSpriteSheet_DynamaxTrigger = -{ - sDynamaxTriggerGfx, sizeof(sDynamaxTriggerGfx), TAG_DYNAMAX_TRIGGER_TILE -}; -static const struct SpritePalette sSpritePalette_DynamaxTrigger = -{ - sDynamaxTriggerPal, TAG_DYNAMAX_TRIGGER_PAL -}; - -static const struct OamData sOamData_DynamaxTrigger = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_DynamaxTriggerOff[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_DynamaxTriggerOn[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_DynamaxTrigger[] = -{ - sSpriteAnim_DynamaxTriggerOff, - sSpriteAnim_DynamaxTriggerOn, -}; - -static const struct SpriteTemplate sSpriteTemplate_DynamaxTrigger = -{ - .tileTag = TAG_DYNAMAX_TRIGGER_TILE, - .paletteTag = TAG_DYNAMAX_TRIGGER_PAL, - .oam = &sOamData_DynamaxTrigger, - .anims = sSpriteAnimTable_DynamaxTrigger, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_DynamaxTrigger -}; - -// Dynamax Evolution Trigger icon functions. -void ChangeDynamaxTriggerSprite(u8 spriteId, u8 animId) -{ - StartSpriteAnim(&gSprites[spriteId], animId); -} - -#define SINGLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL (30) -#define SINGLES_DYNAMAX_TRIGGER_POS_X_PRIORITY (31) -#define SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE (15) -#define SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF (-11) - -#define DOUBLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL (30) -#define DOUBLES_DYNAMAX_TRIGGER_POS_X_PRIORITY (31) -#define DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE (15) -#define DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF (-4) - -#define tBattler data[0] -#define tHide data[1] - -void CreateDynamaxTriggerSprite(u8 battlerId, u8 palId) -{ - LoadSpritePalette(&sSpritePalette_DynamaxTrigger); - if (GetSpriteTileStartByTag(TAG_DYNAMAX_TRIGGER_TILE) == 0xFFFF) - LoadSpriteSheet(&sSpriteSheet_DynamaxTrigger); - if (gBattleStruct->dynamax.triggerSpriteId == 0xFF) - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleStruct->dynamax.triggerSpriteId = CreateSprite(&sSpriteTemplate_DynamaxTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF, 0); - else - gBattleStruct->dynamax.triggerSpriteId = CreateSprite(&sSpriteTemplate_DynamaxTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF, 0); - } - gSprites[gBattleStruct->dynamax.triggerSpriteId].tBattler = battlerId; - gSprites[gBattleStruct->dynamax.triggerSpriteId].tHide = FALSE; - - ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, palId); -} - -static void SpriteCb_DynamaxTrigger(struct Sprite *sprite) -{ - s32 xSlide, xPriority, xOptimal; - s32 yDiff; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - xSlide = DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE; - xPriority = DOUBLES_DYNAMAX_TRIGGER_POS_X_PRIORITY; - xOptimal = DOUBLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL; - yDiff = DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF; - } - else - { - xSlide = SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE; - xPriority = SINGLES_DYNAMAX_TRIGGER_POS_X_PRIORITY; - xOptimal = SINGLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL; - yDiff = SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF; - } - - if (sprite->tHide) - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - sprite->x++; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - DestroyDynamaxTriggerSprite(); - } - else - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) - sprite->x--; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - } -} - -bool32 IsDynamaxTriggerSpriteActive(void) -{ - if (GetSpriteTileStartByTag(TAG_DYNAMAX_TRIGGER_TILE) == 0xFFFF) - return FALSE; - else if (IndexOfSpritePaletteTag(TAG_DYNAMAX_TRIGGER_PAL) != 0xFF) - return TRUE; - else - return FALSE; -} - -void HideDynamaxTriggerSprite(void) -{ - if (gBattleStruct->dynamax.triggerSpriteId >= MAX_SPRITES) - return; - ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, 0); - gSprites[gBattleStruct->dynamax.triggerSpriteId].tHide = TRUE; -} - -void DestroyDynamaxTriggerSprite(void) -{ - FreeSpritePaletteByTag(TAG_DYNAMAX_TRIGGER_PAL); - FreeSpriteTilesByTag(TAG_DYNAMAX_TRIGGER_TILE); - if (gBattleStruct->dynamax.triggerSpriteId != 0xFF) - DestroySprite(&gSprites[gBattleStruct->dynamax.triggerSpriteId]); - gBattleStruct->dynamax.triggerSpriteId = 0xFF; -} - -#undef tBattler -#undef tHide - -// data fields for healthboxMain -// oam.affineParam holds healthboxRight spriteId -#define hMain_DynamaxIndicatorId data[3] -#define hMain_HealthBarSpriteId data[5] -#define hMain_Battler data[6] -#define hMain_Data7 data[7] - -// data fields for healthboxRight -#define hOther_HealthBoxSpriteId data[5] - -// data fields for healthbar -#define hBar_HealthBoxSpriteId data[5] diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 586473781f..728db40af2 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -626,7 +626,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) } // dynamax tint - if (IsDynamaxed(battler)) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { // Calyrex and its forms have a blue dynamax aura instead of red. if (GET_BASE_SPECIES_ID(species) == SPECIES_CALYREX) @@ -637,7 +637,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) } // Terastallization's tint - if (IsTerastallized(battler)) + if (GetActiveGimmick(battler) == GIMMICK_TERA) { BlendPalette(paletteOffset, 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battler))); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); @@ -706,8 +706,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) { LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); - MegaIndicator_LoadSpritesGfx(); - TeraIndicator_LoadSpriteGfx(); + LoadIndicatorSpritesGfx(); CategoryIcons_LoadSpritesGfx(); } else if (!IsDoubleBattle()) @@ -912,7 +911,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->spritesGfx[position], targetSpecies, - gTransformedPersonalities[battlerAtk]); + personalityValue); } else { @@ -930,7 +929,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->spritesGfx[position], targetSpecies, - gTransformedPersonalities[battlerAtk]); + personalityValue); } } src = gMonSpritesGfxPtr->spritesGfx[position]; diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c new file mode 100644 index 0000000000..c8ee932218 --- /dev/null +++ b/src/battle_gimmick.c @@ -0,0 +1,401 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_gimmick.h" +#include "battle_z_move.h" +#include "battle_setup.h" +#include "battle_util.h" +#include "item.h" +#include "palette.h" +#include "pokemon.h" +#include "sprite.h" +#include "util.h" +#include "test_runner.h" + +#include "data/gimmicks.h" + +// Populates gBattleStruct->gimmick.usableGimmick for each battler. +void AssignUsableGimmicks(void) +{ + u32 battler, gimmick; + for (battler = 0; battler < gBattlersCount; ++battler) + { + gBattleStruct->gimmick.usableGimmick[battler] = GIMMICK_NONE; + for (gimmick = 0; gimmick < GIMMICKS_COUNT; ++gimmick) + { + if (CanActivateGimmick(battler, gimmick)) + { + gBattleStruct->gimmick.usableGimmick[battler] = gimmick; + break; + } + } + } +} + +// Returns whether a battler is able to use a gimmick. Checks consumption and gimmick specific functions. +bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick) +{ + return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler); +} + +// Returns whether the player has a gimmick selected while in the move selection menu. +bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick) +{ + // There's no player select in tests, but some gimmicks need to test choice before they are fully activated. + if (TESTING) + return (gBattleStruct->gimmick.toActivate & gBitTable[battler]) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick; + else + return gBattleStruct->gimmick.usableGimmick[battler] == gimmick && gBattleStruct->gimmick.playerSelect; +} + +// Sets a battler as having a gimmick active using their party index. +void SetActiveGimmick(u32 battler, enum Gimmick gimmick) +{ + gBattleStruct->gimmick.activeGimmick[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]] = gimmick; +} + +// Returns a battler's active gimmick, if any. +enum Gimmick GetActiveGimmick(u32 battler) +{ + return gBattleStruct->gimmick.activeGimmick[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]]; +} + +// Returns whether a trainer mon is intended to use an unrestrictive gimmick via .useGimmick (i.e Tera). +bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) +{ + // There are no trainer party settings in battles, but the AI needs to know which gimmick to use. + if (TESTING) + { + return gimmick == TestRunner_Battle_GetChosenGimmick(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); + } + // The player can bypass these checks because they can choose through the controller. + else if (GetBattlerSide(battler) == B_SIDE_PLAYER + && !((gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT)) + { + return TRUE; + } + // Check the trainer party data to see if a gimmick is intended. + else + { + bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT; + u16 trainerId = isSecondTrainer ? gTrainerBattleOpponent_B : gTrainerBattleOpponent_A; + const struct TrainerMon *mon = &GetTrainerPartyFromId(trainerId)[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]]; + + if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE) + return TRUE; + if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax) + return TRUE; + } + + return FALSE; +} + +// Returns whether a trainer has used a gimmick during a battle. +bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) +{ + // Check whether partner battler has used gimmick or plans to during turn. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsPartnerMonFromSameTrainer(battler) + && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] + || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)] + && gBattleStruct->gimmick.usableGimmick[BATTLE_PARTNER(battler)] == gimmick)))) + { + return TRUE; + } + // Otherwise, return whether current battler has used gimmick. + else + { + return gBattleStruct->gimmick.activated[battler][gimmick]; + } +} + +// Sets a gimmick as used by a trainer with checks for Multi Battles. +void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick) +{ + gBattleStruct->gimmick.activated[battler][gimmick] = TRUE; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battler)) + gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] = TRUE; +} + +#define SINGLES_GIMMICK_TRIGGER_POS_X_OPTIMAL (30) +#define SINGLES_GIMMICK_TRIGGER_POS_X_PRIORITY (31) +#define SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE (15) +#define SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF (-11) + +#define DOUBLES_GIMMICK_TRIGGER_POS_X_OPTIMAL (30) +#define DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY (31) +#define DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE (15) +#define DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF (-4) + +#define tBattler data[0] +#define tHide data[1] + +void ChangeGimmickTriggerSprite(u32 spriteId, u32 animId) +{ + StartSpriteAnim(&gSprites[spriteId], animId); +} + +void CreateGimmickTriggerSprite(u32 battler) +{ + const struct GimmickInfo * gimmick = &gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]]; + + // Exit if there shouldn't be a sprite produced. + if (GetBattlerSide(battler) == B_SIDE_OPPONENT + || gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_NONE + || gimmick->triggerSheet == NULL) + { + return; + } + + LoadSpritePalette(gimmick->triggerPal); + if (GetSpriteTileStartByTag(TAG_GIMMICK_TRIGGER_TILE) == 0xFFFF) + LoadSpriteSheet(gimmick->triggerSheet); + + if (gBattleStruct->gimmick.triggerSpriteId == 0xFF) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, + gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE, + gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); + else + gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, + gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE, + gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); + } + + gSprites[gBattleStruct->gimmick.triggerSpriteId].tBattler = battler; + gSprites[gBattleStruct->gimmick.triggerSpriteId].tHide = FALSE; + + ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, 0); +} + +bool32 IsGimmickTriggerSpriteActive(void) +{ + if (GetSpriteTileStartByTag(TAG_GIMMICK_TRIGGER_TILE) == 0xFFFF) + return FALSE; + else if (IndexOfSpritePaletteTag(TAG_GIMMICK_TRIGGER_PAL) != 0xFF) + return TRUE; + else + return FALSE; +} + +void HideGimmickTriggerSprite(void) +{ + if (gBattleStruct->gimmick.triggerSpriteId != 0xFF) + { + ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, 0); + gSprites[gBattleStruct->gimmick.triggerSpriteId].tHide = TRUE; + } +} + +void DestroyGimmickTriggerSprite(void) +{ + FreeSpritePaletteByTag(TAG_GIMMICK_TRIGGER_PAL); + FreeSpriteTilesByTag(TAG_GIMMICK_TRIGGER_TILE); + if (gBattleStruct->gimmick.triggerSpriteId != 0xFF) + DestroySprite(&gSprites[gBattleStruct->gimmick.triggerSpriteId]); + gBattleStruct->gimmick.triggerSpriteId = 0xFF; +} + +static void SpriteCb_GimmickTrigger(struct Sprite *sprite) +{ + s32 xSlide, xPriority, xOptimal; + s32 yDiff; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE; + xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY; + xOptimal = DOUBLES_GIMMICK_TRIGGER_POS_X_OPTIMAL; + yDiff = DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF; + } + else + { + xSlide = SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE; + xPriority = SINGLES_GIMMICK_TRIGGER_POS_X_PRIORITY; + xOptimal = SINGLES_GIMMICK_TRIGGER_POS_X_OPTIMAL; + yDiff = SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF; + } + + if (sprite->tHide) + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + sprite->x++; + + if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + DestroyGimmickTriggerSprite(); + } + else + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) + sprite->x--; + + if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + } +} + +#undef tBattler +#undef tHide + +// for sprite data fields +#define tBattler data[0] +#define tPosX data[2] +#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit + +// data fields for healthboxMain +// oam.affineParam holds healthboxRight spriteId +#define hMain_Battler data[6] + +void LoadIndicatorSpritesGfx(void) +{ + u32 gimmick; + for (gimmick = 0; gimmick < GIMMICKS_COUNT; ++gimmick) + { + if (gimmick == GIMMICK_TERA) // special case + LoadSpriteSheets(sTeraIndicatorSpriteSheets); + else if (gGimmicksInfo[gimmick].indicatorSheet != NULL) + LoadSpriteSheet(gGimmicksInfo[gimmick].indicatorSheet); + + if (gGimmicksInfo[gimmick].indicatorPal != NULL) + LoadSpritePalette(gGimmicksInfo[gimmick].indicatorPal); + } + // Primal reversion graphics aren't loaded as part of gimmick data + LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); + LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); +} + +static void SpriteCb_GimmickIndicator(struct Sprite *sprite) +{ + u32 battler = sprite->tBattler; + + sprite->x = gSprites[gHealthboxSpriteIds[battler]].x + sprite->tPosX + sprite->tLevelXDelta; + sprite->x2 = gSprites[gHealthboxSpriteIds[battler]].x2; + sprite->y2 = gSprites[gHealthboxSpriteIds[battler]].y2; +} + +static inline u32 GetIndicatorSpriteId(u32 healthboxId) +{ + return gBattleStruct->gimmick.indicatorSpriteId[gSprites[healthboxId].hMain_Battler]; +} + +u32 GetIndicatorTileTag(u32 battler) +{ + u32 gimmick = GetActiveGimmick(battler); + + if (IsBattlerPrimalReverted(battler)) + { + if (gBattleMons[battler].species == SPECIES_GROUDON_PRIMAL) + return TAG_OMEGA_INDICATOR_TILE; + else + return TAG_ALPHA_INDICATOR_TILE; + } + else if (gimmick == GIMMICK_TERA) // special case + { + return sTeraIndicatorSpriteSheets[GetBattlerTeraType(battler)].tag; + } + else if (gGimmicksInfo[gimmick].indicatorSheet != NULL) + { + return gGimmicksInfo[gimmick].indicatorSheet->tag; + } + else + { + return TAG_NONE; + } +} + +u32 GetIndicatorPalTag(u32 battler) +{ + u32 gimmick = GetActiveGimmick(battler); + if (IsBattlerPrimalReverted(battler)) + return TAG_MISC_INDICATOR_PAL; + else if (gGimmicksInfo[gimmick].indicatorPal != NULL) + return gGimmicksInfo[gimmick].indicatorPal->tag; + else + return TAG_NONE; +} + +void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible) +{ + u32 battler = gSprites[healthboxId].hMain_Battler; + u32 tileTag = GetIndicatorTileTag(battler); + u32 palTag = GetIndicatorPalTag(battler); + struct Sprite *sprite = &gSprites[GetIndicatorSpriteId(healthboxId)]; + + if (GetIndicatorSpriteId(healthboxId) == 0) // safari zone means the player doesn't have an indicator sprite id + return; + + if (tileTag != TAG_NONE && palTag != TAG_NONE) + { + sprite->oam.tileNum = GetSpriteTileStartByTag(tileTag); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(palTag); + sprite->invisible = invisible; + } + else // in case of error + { + sprite->invisible = TRUE; + } +} + +void UpdateIndicatorOamPriority(u32 healthboxId, u32 oamPriority) +{ + gSprites[GetIndicatorSpriteId(healthboxId)].oam.priority = oamPriority; +} + +void UpdateIndicatorLevelData(u32 healthboxId, u32 level) +{ + s32 xDelta = 0; + + if (level >= 100) + xDelta -= 4; + else if (level < 10) + xDelta += 5; + + gSprites[GetIndicatorSpriteId(healthboxId)].tLevelXDelta = xDelta; +} + +static const s8 sIndicatorPositions[][2] = +{ + [B_POSITION_PLAYER_LEFT] = {53, -9}, + [B_POSITION_OPPONENT_LEFT] = {44, -9}, + [B_POSITION_PLAYER_RIGHT] = {52, -9}, + [B_POSITION_OPPONENT_RIGHT] = {44, -9}, +}; + +void CreateIndicatorSprite(u32 battler) +{ + u32 position, spriteId; + s16 xHealthbox = 0, x = 0, y = 0; + + position = GetBattlerPosition(battler); + GetBattlerHealthboxCoords(battler, &xHealthbox, &y); + + x = sIndicatorPositions[position][0]; + y += sIndicatorPositions[position][1]; + + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_GimmickIndicator, 0, y, 0); + gBattleStruct->gimmick.indicatorSpriteId[battler] = spriteId; + gSprites[spriteId].tBattler = battler; + gSprites[spriteId].tPosX = x; + gSprites[spriteId].invisible = FALSE; +} + +#undef tBattler +#undef tPosX +#undef tLevelXDelta + +#undef hMain_Battler diff --git a/src/battle_interface.c b/src/battle_interface.c index 0dd61d5597..8d50bf95c3 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -195,13 +195,6 @@ static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *); static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); -static void SpriteCb_MegaTrigger(struct Sprite *); -static void SpriteCb_BurstTrigger(struct Sprite *); -static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); -static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId); -static void MegaIndicator_UpdateOamPriority(u32 healthboxId, u32 oamPriority); -static void SpriteCb_MegaIndicator(struct Sprite *); - static u8 GetStatusIconForBattlerId(u8, u8); static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16); static u8 GetScaledExpFraction(s32, s32, s32, u8); @@ -620,122 +613,6 @@ static const struct WindowTemplate sHealthboxWindowTemplate = { .baseBlock = 0 }; -static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); -static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); - -static const struct SpriteSheet sSpriteSheet_MegaTrigger = -{ - sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_MEGA_TRIGGER_TILE -}; -static const struct SpritePalette sSpritePalette_MegaTrigger = -{ - sMegaTriggerPal, TAG_MEGA_TRIGGER_PAL -}; - -static const struct OamData sOamData_MegaTrigger = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_MegaTriggerOff[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_MegaTriggerOn[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_MegaTrigger[] = -{ - sSpriteAnim_MegaTriggerOff, - sSpriteAnim_MegaTriggerOn, -}; - -static const struct SpriteTemplate sSpriteTemplate_MegaTrigger = -{ - .tileTag = TAG_MEGA_TRIGGER_TILE, - .paletteTag = TAG_MEGA_TRIGGER_PAL, - .oam = &sOamData_MegaTrigger, - .anims = sSpriteAnimTable_MegaTrigger, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaTrigger -}; - -static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp"); -static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal"); - -static const struct SpriteSheet sSpriteSheet_BurstTrigger = -{ - sBurstTriggerGfx, sizeof(sBurstTriggerGfx), TAG_BURST_TRIGGER_TILE -}; -static const struct SpritePalette sSpritePalette_BurstTrigger = -{ - sBurstTriggerPal, TAG_BURST_TRIGGER_PAL -}; - -static const struct OamData sOamData_BurstTrigger = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_BurstTriggerOff[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_BurstTriggerOn[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_BurstTrigger[] = -{ - sSpriteAnim_BurstTriggerOff, - sSpriteAnim_BurstTriggerOn, -}; - -static const struct SpriteTemplate sSpriteTemplate_BurstTrigger = -{ - .tileTag = TAG_BURST_TRIGGER_TILE, - .paletteTag = TAG_BURST_TRIGGER_PAL, - .oam = &sOamData_BurstTrigger, - .anims = sSpriteAnimTable_BurstTrigger, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_BurstTrigger -}; - // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. // healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. // healthboxRight or healthboxOther is the right part of the healthbox. @@ -743,7 +620,6 @@ static const struct SpriteTemplate sSpriteTemplate_BurstTrigger = // data fields for healthboxMain // oam.affineParam holds healthboxRight spriteId -#define hMain_MegaIndicatorId data[3] #define hMain_HealthBarSpriteId data[5] #define hMain_Battler data[6] #define hMain_Data7 data[7] @@ -852,11 +728,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) healthBarSpritePtr->hBar_Data6 = data6; healthBarSpritePtr->invisible = TRUE; - // Create mega indicator sprite. - MegaIndicator_CreateSprite(battlerId, healthboxLeftSpriteId); - - // Create tera indicator sprites. - TeraIndicator_CreateSprite(battlerId, healthboxLeftSpriteId); + CreateIndicatorSprite(battlerId); gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; @@ -940,8 +812,7 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) gSprites[healthboxSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; - MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE); - TeraIndicator_SetVisibilities(healthboxSpriteId, TRUE); + UpdateIndicatorVisibilityAndType(healthboxSpriteId, TRUE); } void SetHealthboxSpriteVisible(u8 healthboxSpriteId) @@ -949,8 +820,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId) gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; - MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); - TeraIndicator_SetVisibilities(healthboxSpriteId, FALSE); + UpdateIndicatorVisibilityAndType(healthboxSpriteId, FALSE); } static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) @@ -976,8 +846,8 @@ static void TryToggleHealboxVisibility(u32 priority, u32 healthboxLeftSpriteId, gSprites[healthboxLeftSpriteId].invisible = invisible; gSprites[healthboxRightSpriteId].invisible = invisible; gSprites[healthbarSpriteId].invisible = invisible; - MegaIndicator_SetVisibilities(healthboxLeftSpriteId, invisible); - TeraIndicator_SetVisibilities(healthboxLeftSpriteId, invisible); + + UpdateIndicatorVisibilityAndType(healthboxLeftSpriteId, invisible); } void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) @@ -994,8 +864,7 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) gSprites[healthboxRightSpriteId].oam.priority = priority; gSprites[healthbarSpriteId].oam.priority = priority; - MegaIndicator_UpdateOamPriority(healthboxLeftSpriteId, priority); - TeraIndicator_UpdateOamPriorities(healthboxLeftSpriteId, priority); + UpdateIndicatorOamPriority(healthboxLeftSpriteId, priority); if (B_HIDE_HEALTHBOX_IN_ANIMS == TRUE && hideHPBoxes && IsBattlerAlive(i)) TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId); @@ -1050,20 +919,13 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 *objVram; u8 battler = gSprites[healthboxSpriteId].hMain_Battler; - // Don't print Lv char if mon is mega evolved or primal reverted or Dynamaxed. - if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler) || IsDynamaxed(battler)) + // Don't print Lv char if mon has a gimmick with an indicator active. + if (GetIndicatorTileTag(battler) != TAG_NONE) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; - MegaIndicator_UpdateLevel(healthboxSpriteId, lvl); - MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); - } - else if (IsTerastallized(battler)) - { - objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); - xPos = 5 * (3 - (objVram - (text + 2))) - 1; - TeraIndicator_UpdateLevel(healthboxSpriteId, lvl); - TeraIndicator_SetVisibilities(healthboxSpriteId, FALSE); + UpdateIndicatorLevelData(healthboxSpriteId, lvl); + UpdateIndicatorVisibilityAndType(healthboxSpriteId, FALSE); } else { @@ -1072,7 +934,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))); - MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE); + UpdateIndicatorVisibilityAndType(healthboxSpriteId, TRUE); } windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); @@ -1373,435 +1235,6 @@ void SwapHpBarsWithHpText(void) } } -// Mega Evolution Trigger icon functions. -void ChangeMegaTriggerSprite(u8 spriteId, u8 animId) -{ - StartSpriteAnim(&gSprites[spriteId], animId); -} - -#define SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL (30) -#define SINGLES_MEGA_TRIGGER_POS_X_PRIORITY (31) -#define SINGLES_MEGA_TRIGGER_POS_X_SLIDE (15) -#define SINGLES_MEGA_TRIGGER_POS_Y_DIFF (-11) - -#define DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL (30) -#define DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY (31) -#define DOUBLES_MEGA_TRIGGER_POS_X_SLIDE (15) -#define DOUBLES_MEGA_TRIGGER_POS_Y_DIFF (-4) - -#define tBattler data[0] -#define tHide data[1] - -void CreateMegaTriggerSprite(u8 battlerId, u8 palId) -{ - LoadSpritePalette(&sSpritePalette_MegaTrigger); - if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF) - LoadSpriteSheet(&sSpriteSheet_MegaTrigger); - if (gBattleStruct->mega.triggerSpriteId == 0xFF) - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_MEGA_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_MEGA_TRIGGER_POS_Y_DIFF, 0); - else - gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_MEGA_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_MEGA_TRIGGER_POS_Y_DIFF, 0); - } - gSprites[gBattleStruct->mega.triggerSpriteId].tBattler = battlerId; - gSprites[gBattleStruct->mega.triggerSpriteId].tHide = FALSE; - - ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, palId); -} - -static void SpriteCb_MegaTrigger(struct Sprite *sprite) -{ - s32 xSlide, xPriority, xOptimal; - s32 yDiff; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - xSlide = DOUBLES_MEGA_TRIGGER_POS_X_SLIDE; - xPriority = DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY; - xOptimal = DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL; - yDiff = DOUBLES_MEGA_TRIGGER_POS_Y_DIFF; - } - else - { - xSlide = SINGLES_MEGA_TRIGGER_POS_X_SLIDE; - xPriority = SINGLES_MEGA_TRIGGER_POS_X_PRIORITY; - xOptimal = SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL; - yDiff = SINGLES_MEGA_TRIGGER_POS_Y_DIFF; - } - - if (sprite->tHide) - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - sprite->x++; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - DestroyMegaTriggerSprite(); - } - else - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) - sprite->x--; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - } -} - -bool32 IsMegaTriggerSpriteActive(void) -{ - if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF) - return FALSE; - else if (IndexOfSpritePaletteTag(TAG_MEGA_TRIGGER_PAL) != 0xFF) - return TRUE; - else - return FALSE; -} - -void HideMegaTriggerSprite(void) -{ - if (gBattleStruct->mega.triggerSpriteId >= MAX_SPRITES) - return; - ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0); - gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE; -} - -void HideTriggerSprites(void) -{ - HideMegaTriggerSprite(); - HideBurstTriggerSprite(); - HideZMoveTriggerSprite(); - HideDynamaxTriggerSprite(); - HideTeraTriggerSprite(); -} - -void DestroyMegaTriggerSprite(void) -{ - FreeSpritePaletteByTag(TAG_MEGA_TRIGGER_PAL); - FreeSpriteTilesByTag(TAG_MEGA_TRIGGER_TILE); - if (gBattleStruct->mega.triggerSpriteId != 0xFF) - DestroySprite(&gSprites[gBattleStruct->mega.triggerSpriteId]); - gBattleStruct->mega.triggerSpriteId = 0xFF; -} - -#undef tBattler -#undef tHide - -// Ultra Burst Trigger icon functions. -void ChangeBurstTriggerSprite(u8 spriteId, u8 animId) -{ - StartSpriteAnim(&gSprites[spriteId], animId); -} - -#define SINGLES_BURST_TRIGGER_POS_X_OPTIMAL (30) -#define SINGLES_BURST_TRIGGER_POS_X_PRIORITY (31) -#define SINGLES_BURST_TRIGGER_POS_X_SLIDE (15) -#define SINGLES_BURST_TRIGGER_POS_Y_DIFF (-11) - -#define DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL (30) -#define DOUBLES_BURST_TRIGGER_POS_X_PRIORITY (31) -#define DOUBLES_BURST_TRIGGER_POS_X_SLIDE (15) -#define DOUBLES_BURST_TRIGGER_POS_Y_DIFF (-4) - -#define tBattler data[0] -#define tHide data[1] - -void CreateBurstTriggerSprite(u8 battlerId, u8 palId) -{ - LoadSpritePalette(&sSpritePalette_BurstTrigger); - if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF) - LoadSpriteSheet(&sSpriteSheet_BurstTrigger); - if (gBattleStruct->burst.triggerSpriteId == 0xFF) - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_BURST_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_BURST_TRIGGER_POS_Y_DIFF, 0); - else - gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger, - gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_BURST_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_BURST_TRIGGER_POS_Y_DIFF, 0); - } - gSprites[gBattleStruct->burst.triggerSpriteId].tBattler = battlerId; - gSprites[gBattleStruct->burst.triggerSpriteId].tHide = FALSE; - - ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, palId); -} - -static void SpriteCb_BurstTrigger(struct Sprite *sprite) -{ - s32 xSlide, xPriority, xOptimal; - s32 yDiff; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - xSlide = DOUBLES_BURST_TRIGGER_POS_X_SLIDE; - xPriority = DOUBLES_BURST_TRIGGER_POS_X_PRIORITY; - xOptimal = DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL; - yDiff = DOUBLES_BURST_TRIGGER_POS_Y_DIFF; - } - else - { - xSlide = SINGLES_BURST_TRIGGER_POS_X_SLIDE; - xPriority = SINGLES_BURST_TRIGGER_POS_X_PRIORITY; - xOptimal = SINGLES_BURST_TRIGGER_POS_X_OPTIMAL; - yDiff = SINGLES_BURST_TRIGGER_POS_Y_DIFF; - } - - if (sprite->tHide) - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - sprite->x++; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - DestroyBurstTriggerSprite(); - } - else - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) - sprite->x--; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - } -} - -bool32 IsBurstTriggerSpriteActive(void) -{ - if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF) - return FALSE; - else if (IndexOfSpritePaletteTag(TAG_BURST_TRIGGER_PAL) != 0xFF) - return TRUE; - else - return FALSE; -} - -void HideBurstTriggerSprite(void) -{ - if (gBattleStruct->burst.triggerSpriteId >= MAX_SPRITES) - return; - ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, 0); - gSprites[gBattleStruct->burst.triggerSpriteId].tHide = TRUE; -} - -void DestroyBurstTriggerSprite(void) -{ - FreeSpritePaletteByTag(TAG_BURST_TRIGGER_PAL); - FreeSpriteTilesByTag(TAG_BURST_TRIGGER_TILE); - if (gBattleStruct->burst.triggerSpriteId != 0xFF) - DestroySprite(&gSprites[gBattleStruct->burst.triggerSpriteId]); - gBattleStruct->burst.triggerSpriteId = 0xFF; -} - -#undef tBattler -#undef tHide - - -// Code for Mega Evolution (And Alpha/Omega) Trigger icon visible on the battler's healthbox. -enum -{ - INDICATOR_MEGA, - INDICATOR_ALPHA, - INDICATOR_OMEGA, - INDICATOR_DYNAMAX, - INDICATOR_COUNT, -}; - -static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); -static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); -static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); -static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); -static const u16 sAlphaOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal"); -static const u8 ALIGNED(4) sDynamaxIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_indicator.4bpp"); -static const u16 sDynamaxIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal"); - -static const struct SpriteSheet sMegaIndicator_SpriteSheets[] = -{ - [INDICATOR_MEGA] = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE}, - [INDICATOR_ALPHA] = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE}, - [INDICATOR_OMEGA] = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE}, - [INDICATOR_DYNAMAX] = {sDynamaxIndicatorGfx, sizeof(sDynamaxIndicatorGfx), TAG_DYNAMAX_INDICATOR_TILE}, - [INDICATOR_COUNT] = {0} -}; -static const struct SpritePalette sMegaIndicator_SpritePalettes[] = -{ - [INDICATOR_MEGA] = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL}, - [INDICATOR_ALPHA] = {sAlphaOmegaIndicatorPal, TAG_MISC_INDICATOR_PAL}, - [INDICATOR_OMEGA] = {sAlphaOmegaIndicatorPal, TAG_MISC_INDICATOR_PAL}, - [INDICATOR_DYNAMAX] = {sDynamaxIndicatorPal, TAG_MISC_INDICATOR_PAL}, - [INDICATOR_COUNT] = {0} -}; - -static const struct OamData sOamData_MegaIndicator = -{ - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .priority = 1, -}; - -static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = -{ - .tileTag = TAG_MEGA_INDICATOR_TILE, - .paletteTag = TAG_MEGA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - -static const u16 sMegaIndicatorTags[][2] = -{ - [INDICATOR_MEGA] = {TAG_MEGA_INDICATOR_TILE, TAG_MEGA_INDICATOR_PAL}, - [INDICATOR_ALPHA] = {TAG_ALPHA_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL}, - [INDICATOR_OMEGA] = {TAG_OMEGA_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL}, - [INDICATOR_DYNAMAX] = {TAG_DYNAMAX_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL}, -}; - -static const s8 sIndicatorPositions[][2] = -{ - [B_POSITION_PLAYER_LEFT] = {52, -9}, - [B_POSITION_OPPONENT_LEFT] = {44, -9}, - [B_POSITION_PLAYER_RIGHT] = {52, -9}, - [B_POSITION_OPPONENT_RIGHT] = {44, -9}, -}; - -// for sprite data fields -#define tBattler data[0] -#define tType data[1] // Indicator type: mega, alpha, omega -#define tPosX data[2] -#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit - -void MegaIndicator_LoadSpritesGfx(void) -{ - LoadSpriteSheets(sMegaIndicator_SpriteSheets); - LoadSpritePalettes(sMegaIndicator_SpritePalettes); -} - -static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, struct Sprite *sprite) -{ - bool32 megaEvolved = IsBattlerMegaEvolved(battlerId); - bool32 primalReverted = IsBattlerPrimalReverted(battlerId); - bool32 dynamaxed = IsDynamaxed(battlerId); - - if (!megaEvolved && !primalReverted && !dynamaxed) - return TRUE; - - if (megaEvolved) - sprite->tType = INDICATOR_MEGA; - else if (primalReverted && gBattleMons[battlerId].species == SPECIES_KYOGRE_PRIMAL) - sprite->tType = INDICATOR_ALPHA; - else if (primalReverted && gBattleMons[battlerId].species == SPECIES_GROUDON_PRIMAL) - sprite->tType = INDICATOR_OMEGA; - else if (dynamaxed) - sprite->tType = INDICATOR_DYNAMAX; - - sprite->oam.tileNum = GetSpriteTileStartByTag(sMegaIndicatorTags[sprite->tType][0]); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(sMegaIndicatorTags[sprite->tType][1]); - return FALSE; -} - -static u8 *MegaIndicator_GetSpriteId(u32 healthboxSpriteId) -{ - u8 *spriteId = (u8 *)(&gSprites[healthboxSpriteId].hMain_MegaIndicatorId); - return spriteId; -} - -void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) -{ - u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId); - u32 battlerId = gSprites[healthboxId].hMain_Battler; - - if (GetSafariZoneFlag()) - return; - - if (invisible == TRUE) - gSprites[*spriteId].invisible = TRUE; - else // Try visible. - gSprites[*spriteId].invisible = MegaIndicator_ShouldBeInvisible(battlerId, &gSprites[*spriteId]); -} - -static void MegaIndicator_UpdateOamPriority(u32 healthboxId, u32 oamPriority) -{ - u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId); - gSprites[*spriteId].oam.priority = oamPriority; -} - -static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level) -{ - s16 xDelta = 0; - u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId); - - if (level >= 100) - xDelta -= 4; - else if (level < 10) - xDelta += 5; - - gSprites[*spriteId].tLevelXDelta = xDelta; -} - -static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId) -{ - struct SpriteTemplate sprTemplate; - u32 position; - u8 *spriteId; - s16 xHealthbox = 0, y = 0; - s32 x = 0; - - position = GetBattlerPosition(battlerId); - GetBattlerHealthboxCoords(battlerId, &xHealthbox, &y); - - x = sIndicatorPositions[position][0]; - y += sIndicatorPositions[position][1]; - - spriteId = MegaIndicator_GetSpriteId(healthboxSpriteId); - sprTemplate = sSpriteTemplate_MegaIndicator; - sprTemplate.tileTag = sMegaIndicatorTags[INDICATOR_MEGA][0]; - sprTemplate.paletteTag = sMegaIndicatorTags[INDICATOR_MEGA][1]; - *spriteId = CreateSpriteAtEnd(&sprTemplate, 0, y, 0); - gSprites[*spriteId].tType = INDICATOR_MEGA; - gSprites[*spriteId].tBattler = battlerId; - gSprites[*spriteId].tPosX = x; - gSprites[*spriteId].invisible = TRUE; -} - -static void SpriteCb_MegaIndicator(struct Sprite *sprite) -{ - u32 battlerId = sprite->tBattler; - - sprite->x = gSprites[gHealthboxSpriteIds[battlerId]].x + sprite->tPosX + sprite->tLevelXDelta; - sprite->x2 = gSprites[gHealthboxSpriteIds[battlerId]].x2; - sprite->y2 = gSprites[gHealthboxSpriteIds[battlerId]].y2; -} - #undef tBattler #undef tType #undef tPosX @@ -2310,7 +1743,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) break; } - windowTileData = AddTextPrinterAndCreateWindowOnHealthboxToFit(gDisplayedStringBattle, 0, 3, 2, &windowId, 54); + windowTileData = AddTextPrinterAndCreateWindowOnHealthboxToFit(gDisplayedStringBattle, 0, 3, 2, &windowId, 55); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; @@ -2545,10 +1978,6 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem u32 battlerId = gSprites[healthboxSpriteId].hMain_Battler; s32 maxHp = GetMonData(mon, MON_DATA_MAX_HP); s32 currHp = GetMonData(mon, MON_DATA_HP); - - // This fixes a bug that should likely never happen involving switching between two Teras. - if (elementId == HEALTHBOX_ALL) - TeraIndicator_UpdateType(battlerId, healthboxSpriteId); if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { diff --git a/src/battle_main.c b/src/battle_main.c index a3fe55fae9..9df19b9566 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -13,6 +13,8 @@ #include "battle_setup.h" #include "battle_tower.h" #include "battle_util.h" +#include "battle_z_move.h" +#include "battle_gimmick.h" #include "berry.h" #include "bg.h" #include "data.h" @@ -118,6 +120,7 @@ static void SpriteCB_UnusedBattleInit(struct Sprite *sprite); static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static u32 Crc32B (const u8 *data, u32 size); static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); +static s32 Factorial(s32); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1764,6 +1767,7 @@ static void FreeRestoreBattleData(void) FreeMonSpritesGfx(); FreeBattleSpritesData(); FreeBattleResources(); + ResetDynamicAiFunc(); } void CB2_QuitRecordedBattle(void) @@ -3096,9 +3100,6 @@ static void BattleStartClearSetData(void) gBattleStruct->arenaLostPlayerMons = 0; gBattleStruct->arenaLostOpponentMons = 0; - gBattleStruct->mega.triggerSpriteId = 0xFF; - gBattleStruct->burst.triggerSpriteId = 0xFF; - for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { gSideTimers[i].stickyWebBattlerId = 0xFF; @@ -3110,13 +3111,16 @@ 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; } gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + gBattleStruct->categoryOverride = FALSE; // used for Z-Moves and Max Moves + gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing gCategoryIconSpriteId = 0xFF; } @@ -3246,9 +3250,6 @@ void SwitchInClearSetData(u32 battler) // Reset G-Max Chi Strike boosts. gBattleStruct->bonusCritStages[battler] = 0; - // Reset Dynamax flags. - UndoDynamax(battler); - gBattleStruct->overwrittenAbilities[battler] = ABILITY_NONE; // Clear selected party ID so Revival Blessing doesn't get confused. @@ -3415,10 +3416,6 @@ const u8* FaintClearSetData(u32 battler) } } - // Clear Z-Move data - gBattleStruct->zmove.active = FALSE; - gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; - gBattleStruct->zmove.effect = EFFECT_HIT; // Clear Dynamax data UndoDynamax(battler); @@ -3481,6 +3478,15 @@ static void DoBattleIntro(void) gBattleMons[battler].status2 = 0; for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(battler); + u32 partyIndex = gBattlerPartyIndexes[battler]; + if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) + gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex); + } + #endif } // Draw sprite. @@ -3737,8 +3743,8 @@ static void DoBattleIntro(void) } } - gBattleStruct->switchInAbilitiesCounter = 0; - gBattleStruct->switchInItemsCounter = 0; + gBattleStruct->eventsBeforeFirstTurnState = 0; + gBattleStruct->switchInBattlerCounter = 0; gBattleStruct->overworldWeatherDone = FALSE; SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield. @@ -3773,34 +3779,37 @@ static void TryDoEventsBeforeFirstTurn(void) if (gBattleControllerExecFlags) return; - // Set invalid mons as absent(for example when starting a double battle with only one pokemon). - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + switch (gBattleStruct->eventsBeforeFirstTurnState) { - for (i = 0; i < gBattlersCount; i++) + case FIRST_TURN_EVENTS_START: + // Set invalid mons as absent(for example when starting a double battle with only one pokemon). + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) { - struct Pokemon *party = GetBattlerParty(i); - struct Pokemon *mon = &party[gBattlerPartyIndexes[i]]; - if (!IsBattlerAlive(i) || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG)) - gAbsentBattlerFlags |= gBitTable[i]; + for (i = 0; i < gBattlersCount; i++) + { + struct Pokemon *party = GetBattlerParty(i); + struct Pokemon *mon = &party[gBattlerPartyIndexes[i]]; + if (!IsBattlerAlive(i) || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG)) + gAbsentBattlerFlags |= gBitTable[i]; + } } - } - // Allow for illegal abilities within tests. - #if TESTING - if (gTestRunnerEnabled && gBattleStruct->switchInAbilitiesCounter == 0) - { - for (i = 0; i < gBattlersCount; ++i) + // Allow for illegal abilities within tests. + #if TESTING + if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(i); - u32 partyIndex = gBattlerPartyIndexes[i]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex); + for (i = 0; i < gBattlersCount; ++i) + { + u32 side = GetBattlerSide(i); + u32 partyIndex = gBattlerPartyIndexes[i]; + if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) + gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex); + } } - } - #endif // TESTING + #endif // TESTING + + gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1); - if (gBattleStruct->switchInAbilitiesCounter == 0) - { for (i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; for (i = 0; i < gBattlersCount - 1; i++) @@ -3811,111 +3820,136 @@ static void TryDoEventsBeforeFirstTurn(void) SwapTurnOrder(i, j); } } - } - if (!gBattleStruct->overworldWeatherDone - && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_WEATHER, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0) - { - gBattleStruct->overworldWeatherDone = TRUE; - return; - } - - if (!gBattleStruct->terrainDone && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_TERRAIN, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0) - { - gBattleStruct->terrainDone = TRUE; - return; - } - - if (!gBattleStruct->startingStatusDone - && gBattleStruct->startingStatus - && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_STATUSES, 0, 0, ABILITYEFFECT_SWITCH_IN_STATUSES, 0) != 0) - { - gBattleStruct->startingStatusDone = TRUE; - return; - } - - // Totem boosts - for (i = 0; i < gBattlersCount; i++) - { - if (gQueuedStatBoosts[i].stats != 0 && !gProtectStructs[i].eatMirrorHerb && gProtectStructs[i].activateOpportunist == 0) + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_OVERWORLD_WEATHER: + if (!gBattleStruct->overworldWeatherDone + && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_WEATHER, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0) { - gBattlerAttacker = i; - BattleScriptExecute(BattleScript_TotemVar); + gBattleStruct->overworldWeatherDone = TRUE; return; } - } - - // Check neutralizing gas - if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0) - return; - - // Check all switch in abilities happening from the fastest mon to slowest. - while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount) - { - gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++]; - - if (TryPrimalReversion(gBattlerAttacker)) + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_TERRAIN: + if (!gBattleStruct->terrainDone + && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_TERRAIN, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0) + { + gBattleStruct->terrainDone = TRUE; return; - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) + } + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_STARTING_STATUS: + if (!gBattleStruct->startingStatusDone + && gBattleStruct->startingStatus + && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_STATUSES, 0, 0, ABILITYEFFECT_SWITCH_IN_STATUSES, 0) != 0) + { + gBattleStruct->startingStatusDone = TRUE; 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) - { - if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter++], FALSE)) + } + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_TOTEM_BOOST: + for (i = 0; i < gBattlersCount; i++) + { + if (gQueuedStatBoosts[i].stats != 0 && !gProtectStructs[i].eatMirrorHerb && gProtectStructs[i].activateOpportunist == 0) + { + gBattlerAttacker = i; + BattleScriptExecute(BattleScript_TotemVar); + return; + } + } + memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts for Mirror Herb and Opportunist + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_NEUTRALIZING_GAS: + if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0) return; + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES: + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + + if (TryPrimalReversion(gBattlerAttacker)) + return; + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_OPPORTUNIST_1: + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) + return; + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_ITEM_EFFECTS: + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++], FALSE)) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_OPPORTUNIST_2: + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) + return; + gBattleStruct->eventsBeforeFirstTurnState++; + break; + case FIRST_TURN_EVENTS_END: + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; + gChosenActionByBattler[i] = B_ACTION_NONE; + gChosenMoveByBattler[i] = MOVE_NONE; + } + TurnValuesCleanUp(FALSE); + SpecialStatusesClear(); + *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; + BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); + AssignUsableGimmicks(); + gBattleMainFunc = HandleTurnActionSelectionState; + ResetSentPokesToOpponentValue(); + + for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; i++) + gBattleCommunication[i] = 0; + + for (i = 0; i < gBattlersCount; i++) + { + gBattleMons[i].status2 &= ~STATUS2_FLINCHED; + // Record party slots of player's mons that appeared in battle + if (!BattlerHasAi(i)) + gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; + } + + *(&gBattleStruct->turnEffectsTracker) = 0; + *(&gBattleStruct->turnEffectsBattlerId) = 0; + *(&gBattleStruct->wishPerishSongState) = 0; + *(&gBattleStruct->wishPerishSongBattlerId) = 0; + gBattleScripting.moveendState = 0; + gBattleStruct->faintedActionsState = 0; + gBattleStruct->turnCountersTracker = 0; + gMoveResultFlags = 0; + + memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); + SetShellSideArmCategory(); + SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers + + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + { + StopCryAndClearCrySongs(); + BattleScriptExecute(BattleScript_ArenaTurnBeginning); + } + + if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN))) + BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); + gBattleStruct->eventsBeforeFirstTurnState = 0; + break; } - - if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) - return; - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; - gChosenActionByBattler[i] = B_ACTION_NONE; - gChosenMoveByBattler[i] = MOVE_NONE; - } - TurnValuesCleanUp(FALSE); - SpecialStatusesClear(); - *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; - BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); - gBattleMainFunc = HandleTurnActionSelectionState; - ResetSentPokesToOpponentValue(); - - for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; i++) - gBattleCommunication[i] = 0; - - for (i = 0; i < gBattlersCount; i++) - { - gBattleMons[i].status2 &= ~STATUS2_FLINCHED; - // Record party slots of player's mons that appeared in battle - if (!BattlerHasAi(i)) - gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; - } - - *(&gBattleStruct->turnEffectsTracker) = 0; - *(&gBattleStruct->turnEffectsBattlerId) = 0; - *(&gBattleStruct->wishPerishSongState) = 0; - *(&gBattleStruct->wishPerishSongBattlerId) = 0; - gBattleScripting.moveendState = 0; - gBattleStruct->faintedActionsState = 0; - gBattleStruct->turnCountersTracker = 0; - gMoveResultFlags = 0; - - 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) - { - StopCryAndClearCrySongs(); - BattleScriptExecute(BattleScript_ArenaTurnBeginning); - } - - if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN))) - BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); } static void HandleEndTurn_ContinueBattle(void) @@ -3946,6 +3980,8 @@ void BattleTurnPassed(void) { s32 i; + gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1); + TurnValuesCleanUp(TRUE); if (gBattleOutcome == 0) { @@ -3998,6 +4034,7 @@ void BattleTurnPassed(void) *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); + AssignUsableGimmicks(); SetShellSideArmCategory(); SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers gBattleMainFunc = HandleTurnActionSelectionState; @@ -4225,7 +4262,6 @@ static void HandleTurnActionSelectionState(void) struct ChooseMoveStruct moveInfo; moveInfo.zmove = gBattleStruct->zmove; - moveInfo.mega = gBattleStruct->mega; moveInfo.species = gBattleMons[battler].species; moveInfo.monType1 = gBattleMons[battler].type1; moveInfo.monType2 = gBattleMons[battler].type2; @@ -4350,12 +4386,7 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 3); } - gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); - gBattleStruct->burst.toBurst &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); - gBattleStruct->dynamax.toDynamax &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); - gBattleStruct->tera.toTera &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); - gBattleStruct->dynamax.usingMaxMove[BATTLE_PARTNER(GetBattlerPosition(battler))] = FALSE; - gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(battler))] = MOVE_NONE; + gBattleStruct->gimmick.toActivate &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); BtlController_EmitEndBounceEffect(battler, BUFFER_A); MarkBattlerForControllerExec(battler); return; @@ -4443,25 +4474,18 @@ static void HandleTurnActionSelectionState(void) } // Get the chosen move position (and thus the chosen move) and target from the returned buffer. - gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST | RET_DYNAMAX | RET_TERASTAL); + gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK; gChosenMoveByBattler[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3]; // Check to see if any gimmicks need to be prepared. - if (gBattleResources->bufferB[battler][2] & RET_MEGA_EVOLUTION) - gBattleStruct->mega.toEvolve |= gBitTable[battler]; - else if (gBattleResources->bufferB[battler][2] & RET_ULTRA_BURST) - gBattleStruct->burst.toBurst |= gBitTable[battler]; - else if (gBattleResources->bufferB[battler][2] & RET_DYNAMAX) - gBattleStruct->dynamax.toDynamax |= gBitTable[battler]; - else if (gBattleResources->bufferB[battler][2] & RET_TERASTAL) - gBattleStruct->tera.toTera |= gBitTable[battler]; + if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) + gBattleStruct->gimmick.toActivate |= gBitTable[battler]; // Max Move check - if (ShouldUseMaxMove(battler, gChosenMoveByBattler[battler])) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) { - gBattleStruct->dynamax.baseMove[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; - gBattleStruct->dynamax.usingMaxMove[battler] = TRUE; + gBattleStruct->dynamax.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; } gBattleCommunication[battler]++; @@ -4737,7 +4761,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) speed /= 2; else if (holdEffect == HOLD_EFFECT_IRON_BALL) speed /= 2; - else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && !IsDynamaxed(battler)) + else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) speed = (speed * 150) / 100; else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battler].species == SPECIES_DITTO && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) speed *= 2; @@ -4783,13 +4807,13 @@ s8 GetMovePriority(u32 battler, u16 move) s8 priority; u16 ability = GetBattlerAbility(battler); - if (gBattleStruct->zmove.toBeUsed[battler] && gMovesInfo[move].power != 0) - move = gBattleStruct->zmove.toBeUsed[battler]; + if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE && gMovesInfo[move].power != 0) + move = GetUsableZMove(battler, move); priority = gMovesInfo[move].priority; // Max Guard check - if (gBattleStruct->dynamax.usingMaxMove[battler] && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) return gMovesInfo[MOVE_MAX_GUARD].priority; if (ability == ABILITY_GALE_WINGS @@ -4803,7 +4827,7 @@ s8 GetMovePriority(u32 battler, u16 move) gProtectStructs[battler].pranksterElevated = 1; priority++; } - else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && !IsDynamaxed(battler) && !(gBattleStruct->dynamax.toDynamax & gBitTable[battler])) + else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX)) { priority++; } @@ -4846,9 +4870,10 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov strikesFirst = 1; else { - if (speedBattler1 == speedBattler2 && Random() & 1) + if (speedBattler1 == speedBattler2) { - strikesFirst = 0; // same speeds, same priorities + // same speeds, same priorities + strikesFirst = 0; } else if (speedBattler1 < speedBattler2) { @@ -4879,7 +4904,7 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov return strikesFirst; } -s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) +s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) { s32 priority1 = 0, priority2 = 0; u32 ability1 = GetBattlerAbility(battler1); @@ -4897,8 +4922,60 @@ s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) priority2 = GetChosenMovePriority(battler2); } - return GetWhichBattlerFasterArgs(battler1, battler2, ignoreChosenMoves, ability1, ability2, - holdEffectBattler1, holdEffectBattler2, speedBattler1, speedBattler2, priority1, priority2); + return GetWhichBattlerFasterArgs( + battler1, battler2, + ignoreChosenMoves, + ability1, ability2, + holdEffectBattler1, holdEffectBattler2, + speedBattler1, speedBattler2, + priority1, priority2 + ); +} + +// 24 == MAX_BATTLERS_COUNT!. +// These are the possible orders if all the battlers speed tie. An order +// is chosen at the start of the turn. +static const u8 sBattlerOrders[24][4] = +{ + { 0, 1, 2, 3 }, + { 0, 1, 3, 2 }, + { 0, 2, 1, 3 }, + { 0, 2, 3, 1 }, + { 0, 3, 1, 2 }, + { 0, 3, 2, 1 }, + { 1, 0, 2, 3 }, + { 1, 0, 3, 2 }, + { 1, 2, 0, 3 }, + { 1, 2, 3, 0 }, + { 1, 3, 0, 2 }, + { 1, 3, 2, 0 }, + { 2, 0, 1, 3 }, + { 2, 0, 3, 1 }, + { 2, 1, 0, 3 }, + { 2, 1, 3, 0 }, + { 2, 3, 0, 1 }, + { 2, 3, 1, 0 }, + { 3, 0, 1, 2 }, + { 3, 0, 2, 1 }, + { 3, 1, 0, 2 }, + { 3, 1, 2, 0 }, + { 3, 2, 0, 1 }, + { 3, 2, 1, 0 }, +}; + +s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) +{ + s32 strikesFirst = GetWhichBattlerFasterOrTies(battler1, battler2, ignoreChosenMoves); + if (strikesFirst == 0) + { + s32 order1 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler1]; + s32 order2 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler2]; + if (order1 < order2) + strikesFirst = 1; + else + strikesFirst = -1; + } + return strikesFirst; } static void SetActionsAndBattlersTurnOrder(void) @@ -5068,9 +5145,7 @@ static void PopulateArrayWithBattlers(u8 *battlers) static bool32 TryDoGimmicksBeforeMoves(void) { - if (!(gHitMarker & HITMARKER_RUN) - && (gBattleStruct->mega.toEvolve || gBattleStruct->burst.toBurst - || gBattleStruct->dynamax.toDynamax || gBattleStruct->tera.toTera)) + if (!(gHitMarker & HITMARKER_RUN) && gBattleStruct->gimmick.toActivate) { u32 i, battler; u8 order[MAX_BATTLERS_COUNT]; @@ -5079,52 +5154,16 @@ static bool32 TryDoGimmicksBeforeMoves(void) SortBattlersBySpeed(order, FALSE); for (i = 0; i < gBattlersCount; i++) { - // Tera Check - if (gBattleStruct->tera.toTera & gBitTable[order[i]]) + // Search through each battler and activate their gimmick if they have one prepared. + if ((gBattleStruct->gimmick.toActivate & gBitTable[order[i]]) && !(gProtectStructs[order[i]].noValidMoves)) { - gBattlerAttacker = order[i]; - gBattleScripting.battler = gBattlerAttacker; - gBattleStruct->tera.toTera &= ~(gBitTable[gBattlerAttacker]); - PrepareBattlerForTera(gBattlerAttacker); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, GetBattlerTeraType(gBattlerAttacker)); - if (TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_TERASTALLIZATION)) - BattleScriptExecute(BattleScript_TeraFormChange); - else - BattleScriptExecute(BattleScript_Terastallization); - return TRUE; - } - // Dynamax Check - if (gBattleStruct->dynamax.toDynamax & gBitTable[order[i]]) - { - gBattlerAttacker = order[i]; - gBattleScripting.battler = gBattlerAttacker; - gBattleStruct->dynamax.toDynamax &= ~(gBitTable[gBattlerAttacker]); - PrepareBattlerForDynamax(gBattlerAttacker); - BattleScriptExecute(BattleScript_DynamaxBegins); - return TRUE; - } - // Mega Evo Check - if (gBattleStruct->mega.toEvolve & gBitTable[order[i]] - && !(gProtectStructs[order[i]].noValidMoves)) - { - gBattlerAttacker = order[i]; - gBattleStruct->mega.toEvolve &= ~(gBitTable[gBattlerAttacker]); - gLastUsedItem = gBattleMons[gBattlerAttacker].item; - if (GetBattleFormChangeTargetSpecies(gBattlerAttacker, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) - BattleScriptExecute(BattleScript_WishMegaEvolution); - else - BattleScriptExecute(BattleScript_MegaEvolution); - return TRUE; - } - // Ultra Burst Check - if (gBattleStruct->burst.toBurst & gBitTable[order[i]] - && !(gProtectStructs[order[i]].noValidMoves)) - { - battler = gBattlerAttacker = order[i]; - gBattleStruct->burst.toBurst &= ~(gBitTable[battler]); - gLastUsedItem = gBattleMons[battler].item; - BattleScriptExecute(BattleScript_UltraBurst); - return TRUE; + battler = gBattlerAttacker = gBattleScripting.battler = order[i]; + gBattleStruct->gimmick.toActivate &= ~(gBitTable[battler]); + if (gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick != NULL) + { + gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick(battler); + return TRUE; + } } } } @@ -5511,10 +5550,10 @@ static void HandleEndTurn_FinishBattle(void) TryRestoreHeldItems(); // Undo Dynamax HP multiplier before recalculating stats. - for (i = 0; i < gBattlersCount; ++i) + for (battler = 0; battler < gBattlersCount; ++battler) { - if (IsDynamaxed(i)) - UndoDynamax(i); + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) + UndoDynamax(battler); } for (i = 0; i < PARTY_SIZE; i++) @@ -5581,8 +5620,10 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) } FreeAllWindowBuffers(); - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + if (gBattleStruct != NULL && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { + ZeroEnemyPartyMons(); + ResetDynamicAiFunc(); FreeMonSpritesGfx(); FreeBattleResources(); FreeBattleSpritesData(); @@ -5692,7 +5733,7 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) switch (gMovesInfo[move].effect) { case EFFECT_TERA_BLAST: - if (IsTerastallized(battlerAtk)) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) return FALSE; break; case EFFECT_TERA_STARSTORM: @@ -5726,7 +5767,7 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) break; } - if (ateType != TYPE_NONE) + if (ateType != TYPE_NONE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET; return TRUE; @@ -5785,7 +5826,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE) { - if (IsTerastallized(battlerAtk) && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR) gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk); else if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY) gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type1 | F_DYNAMIC_TYPE_SET; @@ -5829,7 +5870,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; } } - else if (gMovesInfo[move].effect == EFFECT_TERA_BLAST && IsTerastallized(battlerAtk)) + else if (gMovesInfo[move].effect == EFFECT_TERA_BLAST && GetActiveGimmick(battlerAtk) == GIMMICK_TERA) { gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk) | F_DYNAMIC_TYPE_SET; } @@ -5839,18 +5880,20 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } attackerAbility = GetBattlerAbility(battlerAtk); - if (gMovesInfo[move].type == TYPE_NORMAL && TrySetAteType(move, battlerAtk, attackerAbility)) + if (gMovesInfo[move].type == TYPE_NORMAL + && TrySetAteType(move, battlerAtk, attackerAbility) + && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) { - if (!IsDynamaxed(battlerAtk)) gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gMovesInfo[move].type != TYPE_NORMAL && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && attackerAbility == ABILITY_NORMALIZE) + && attackerAbility == ABILITY_NORMALIZE + && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; - if (!IsDynamaxed(battlerAtk)) + if (GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gMovesInfo[move].soundMove && attackerAbility == ABILITY_LIQUID_VOICE) @@ -5905,3 +5948,11 @@ bool32 IsWildMonSmart(void) return FALSE; #endif } + +static s32 Factorial(s32 n) +{ + s32 f = 1, i; + for (i = 2; i <= n; i++) + f *= i; + return f; +} diff --git a/src/battle_message.c b/src/battle_message.c index 5d416ed4bf..87ac5326fb 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -829,7 +829,6 @@ static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained EXP.\nPo static const u8 sText_CurrentMoveCantSelect[] = _("{B_BUFF1} cannot be used!\p"); static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is being salt cured!"); static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); -static const u8 sText_OpportunistCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} copied its\nopponent's stat changes!"); static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky syrup!"); static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a\nchillingly bad joke!"); static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); @@ -871,7 +870,6 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ZEROTOHEROTRANSFORMATION - BATTLESTRINGS_TABLE_START] = sText_ZeroToHeroTransformation, [STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnTellChillingReceptionJoke, [STRINGID_MOVEBLOCKEDBYDYNAMAX - BATTLESTRINGS_TABLE_START] = sText_MoveBlockedByDynamax, - [STRINGID_OPPORTUNISTCOPIED - BATTLESTRINGS_TABLE_START] = sText_OpportunistCopied, [STRINGID_TARGETISHURTBYSALTCURE - BATTLESTRINGS_TABLE_START] = sText_TargetIsHurtBySaltCure, [STRINGID_TARGETISBEINGSALTCURED - BATTLESTRINGS_TABLE_START] = sText_TargetIsBeingSaltCured, [STRINGID_CURRENTMOVECANTSELECT - BATTLESTRINGS_TABLE_START] = sText_CurrentMoveCantSelect, @@ -3967,7 +3965,10 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) // We cannot check the actual width of the window because // B_WIN_MOVE_NAME_1 and B_WIN_MOVE_NAME_3 are 16 wide for // Z-move details. - printerTemplate.fontId = GetFontIdToFit(text, printerTemplate.fontId, printerTemplate.letterSpacing, 8 * TILE_WIDTH); + if (gBattleStruct->zmove.viewing && windowId == B_WIN_MOVE_NAME_1) + printerTemplate.fontId = GetFontIdToFit(text, printerTemplate.fontId, printerTemplate.letterSpacing, 16 * TILE_WIDTH); + else + printerTemplate.fontId = GetFontIdToFit(text, printerTemplate.fontId, printerTemplate.letterSpacing, 8 * TILE_WIDTH); } if (printerTemplate.x == 0xFF) @@ -4023,7 +4024,7 @@ void SetPpNumbersPaletteInMoveSelection(u32 battler) var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[battler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[battler]]); else - var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[battler]], gMovesInfo[gMoveSelectionCursor[battler]].pp); + var = 3; gPlttBufferUnfaded[BG_PLTT_ID(5) + 12] = palPtr[(var * 2) + 0]; gPlttBufferUnfaded[BG_PLTT_ID(5) + 11] = palPtr[(var * 2) + 1]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 189e3c3314..f25cef9cf5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -326,7 +326,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); @@ -490,7 +490,7 @@ static void Cmd_setlightscreen(void); static void Cmd_tryKO(void); static void Cmd_damagetohalftargethp(void); static void Cmd_unused_95(void); -static void Cmd_weatherdamage(void); +static void Cmd_unused_96(void); static void Cmd_tryinfatuating(void); static void Cmd_updatestatusicon(void); static void Cmd_setmist(void); @@ -749,7 +749,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_tryKO, //0x93 Cmd_damagetohalftargethp, //0x94 Cmd_unused_95, //0x95 - Cmd_weatherdamage, //0x96 + Cmd_unused_96, //0x96 Cmd_tryinfatuating, //0x97 Cmd_updatestatusicon, //0x98 Cmd_setmist, //0x99 @@ -1163,7 +1163,7 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) && (gBattleMons[battler].type1 != moveType || gBattleMons[battler].type2 != moveType || (gBattleMons[battler].type3 != moveType && gBattleMons[battler].type3 != TYPE_MYSTERY)) && move != MOVE_STRUGGLE - && !IsTerastallized(battler)) + && GetActiveGimmick(battler) != GIMMICK_TERA) { SET_BATTLER_TYPE(battler, moveType); return TRUE; @@ -1198,7 +1198,7 @@ static void Cmd_attackcanceler(void) GET_MOVE_TYPE(gCurrentMove, moveType); // Weight-based moves are blocked by Dynamax. - if (IsDynamaxed(gBattlerTarget) && IsMoveBlockedByDynamax(gCurrentMove)) + if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax; @@ -1243,7 +1243,7 @@ static void Cmd_attackcanceler(void) && GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND && IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE) + && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE) { gSpecialStatuses[gBattlerAttacker].parentalBondState = PARENTAL_BOND_1ST_HIT; gMultiHitCounter = 2; @@ -1364,7 +1364,8 @@ static void Cmd_attackcanceler(void) } // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) - if ((gBattleStruct->zmove.active || IsMaxMove(gCurrentMove)) + if ((IsZMove(gCurrentMove) + || IsMaxMove(gCurrentMove)) && IS_BATTLER_PROTECTED(gBattlerTarget)) { BattleScriptPush(cmd->nextInstr); @@ -1513,7 +1514,7 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } - if (gBattleStruct->zmove.active && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) { JumpIfMoveFailed(7, move); return TRUE; @@ -1961,8 +1962,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; + if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM) + gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -2859,7 +2860,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (i != gBattlersCount) break; - if (!CanSleep(gEffectBattler)) + if (!CanBeSlept(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; cancelMultiTurnMovesResult = CancelMultiTurnMoves(gEffectBattler); @@ -2898,7 +2899,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; @@ -2942,7 +2943,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) break; } - if (!CanBeBurned(gEffectBattler)) + if (!CanBeBurned(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; statusChanged = TRUE; @@ -3007,7 +3008,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler)) break; - if (!CanBeParalyzed(gEffectBattler)) + if (!CanBeParalyzed(gEffectBattler, GetBattlerAbility(gEffectBattler))) break; statusChanged = TRUE; @@ -3045,7 +3046,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; @@ -3178,7 +3179,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } } else if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber - && !IsDynamaxed(gEffectBattler)) + && !(GetActiveGimmick(gEffectBattler) == GIMMICK_DYNAMAX)) { gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; gBattlescriptCurrInstr++; @@ -3409,7 +3410,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; @@ -3532,6 +3533,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++) @@ -3553,16 +3555,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); } } } @@ -3800,7 +3802,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } break; case MOVE_EFFECT_TERA_BLAST: - if (IsTerastallized(gEffectBattler) + if (GetActiveGimmick(gEffectBattler) == GIMMICK_TERA && GetBattlerTeraType(gEffectBattler) == TYPE_STELLAR && !NoAliveMonsForEitherParty()) { @@ -3977,7 +3979,7 @@ static void Cmd_tryfaintmon(void) gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } if ((gHitMarker & HITMARKER_DESTINYBOND) && IsBattlerAlive(gBattlerAttacker) - && !IsDynamaxed(gBattlerAttacker)) + && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) { gHitMarker &= ~HITMARKER_DESTINYBOND; BattleScriptPush(gBattlescriptCurrInstr); @@ -4589,7 +4591,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) @@ -4605,10 +4607,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; @@ -5481,7 +5485,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; @@ -5708,10 +5712,10 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_TargetBurnHeal; break; case STATUS1_FREEZE: - gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; + gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; break; case STATUS1_FROSTBITE: - gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; + gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; break; case STATUS1_POISON: case STATUS1_TOXIC_POISON: @@ -5857,7 +5861,7 @@ static void Cmd_moveend(void) gLastPrintedMoves[gBattlerAttacker] = gChosenMove; gLastUsedMove = gCurrentMove; if (IsMaxMove(gCurrentMove)) - gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMove[gBattlerAttacker]; + gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; } } if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) @@ -6390,18 +6394,18 @@ static void Cmd_moveend(void) gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = 0; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; gBattleScripting.moveEffect = 0; - // clear attacker z move data - gBattleStruct->zmove.active = FALSE; - gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE; - gBattleStruct->zmove.effect = EFFECT_HIT; gBattleStruct->hitSwitchTargetFailed = FALSE; gBattleStruct->isAtkCancelerForCalledMove = FALSE; gBattleStruct->swapDamageCategory = FALSE; + gBattleStruct->categoryOverride = FALSE; gBattleStruct->bouncedMoveIsUsed = FALSE; gBattleStruct->enduredDamage = 0; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) + SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); gBattleStruct->distortedTypeMatchups = 0; + memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); gBattleScripting.moveendState++; break; case MOVEEND_COUNT: @@ -6514,6 +6518,15 @@ static void Cmd_switchindataupdate(void) gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; gBattleMons[battler].type3 = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(battler); + u32 partyIndex = gBattlerPartyIndexes[battler]; + if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) + gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex); + } + #endif // check knocked off item i = GetBattlerSide(battler); @@ -6761,7 +6774,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)) { @@ -6916,7 +6929,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)) { @@ -7130,17 +7143,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); @@ -7148,7 +7155,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) { @@ -7266,7 +7277,7 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; gBattlescriptCurrInstr = BattleScript_HealReplacementZMove; - return; + return TRUE; } else { @@ -7280,10 +7291,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; @@ -7299,22 +7318,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; - - gBattlerFainted++; - while (1) - { - if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) - break; - if (gBattlerFainted >= gBattlersCount) - break; - gBattlerFainted++; - } - } 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++; + 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++) + { + 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; + } + break; + default: + UpdateSentMonFlags(battler); + if (!DoSwitchInEffectsForBattler(battler)) + gBattlescriptCurrInstr = cmd->nextInstr; + break; } } @@ -7961,7 +8026,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 @@ -8675,7 +8740,7 @@ static bool32 IsRototillerAffected(u32 battler) return TRUE; } -static bool32 IsElectricAbilityAffected(u32 ability) +static bool32 IsElectricAbilityAffected(u32 battler, u32 ability) { u32 moveType; @@ -8686,7 +8751,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; @@ -8770,7 +8837,6 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type) { struct Pokemon *party = GetBattlerParty(battler); struct Pokemon *mon = &party[gBattlerPartyIndexes[battler]]; - u32 position = GetBattlerPosition(battler); u32 side = GetBattlerSide(battler); // Change species. @@ -8798,9 +8864,9 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type) if (side == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(battler, gBattleMons[battler].species); if (type == HANDLE_TYPE_MEGA_EVOLUTION) - gBattleStruct->mega.alreadyEvolved[position] = TRUE; + SetGimmickAsActivated(battler, GIMMICK_MEGA); if (type == HANDLE_TYPE_ULTRA_BURST) - gBattleStruct->burst.alreadyBursted[position] = TRUE; + SetGimmickAsActivated(battler, GIMMICK_ULTRA_BURST); } } @@ -9200,7 +9266,6 @@ static void Cmd_various(void) case VARIOUS_RESET_SWITCH_IN_ABILITY_BITS: { VARIOUS_ARGS(); - gSpecialStatuses[battler].traced = FALSE; gSpecialStatuses[battler].switchInAbilityDone = FALSE; break; } @@ -9433,7 +9498,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; } @@ -9663,7 +9727,7 @@ static void Cmd_various(void) else { if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability - || IsDynamaxed(gBattlerTarget)) + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9702,7 +9766,15 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->failInstr; else { - gCalledMove = move; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(move)) + { + gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; + gCalledMove = GetTypeBasedZMove(move); + } + else + { + gCalledMove = move; + } gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST; @@ -9738,7 +9810,7 @@ static void Cmd_various(void) VARIOUS_ARGS(const u8 *failInstr); if ((GetBattlerType(gBattlerTarget, 0, FALSE) == gMovesInfo[gCurrentMove].type && GetBattlerType(gBattlerTarget, 1, FALSE) == gMovesInfo[gCurrentMove].type) - || IsTerastallized(gBattlerTarget)) + || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9835,7 +9907,9 @@ static void Cmd_various(void) if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || MoveHasAdditionalEffectSelf(move, MOVE_EFFECT_RECHARGE) || gMovesInfo[move].instructBanned || gBattleMoveEffects[gMovesInfo[move].effect].twoTurnEffect - || IsDynamaxed(gBattlerTarget)) + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) + || IsZMove(move) + || IsMaxMove(move)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9905,18 +9979,19 @@ 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)) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanGetFrostbite(gBattlerTarget)) gBattleCommunication[MULTISTRING_CHOOSER] = 5; else { @@ -10071,7 +10146,7 @@ static void Cmd_various(void) case VARIOUS_TRY_THIRD_TYPE: { VARIOUS_ARGS(const u8 *failInstr); - if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument) || IsTerastallized(battler)) + if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument) || GetActiveGimmick(battler) == GIMMICK_TERA) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -11064,10 +11139,10 @@ static void SetMoveForMirrorMove(u32 move) { gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; // Edge case, we used Z Mirror Move, got the stat boost and now need to use the Z-move - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] && !IS_MOVE_STATUS(move)) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(move)) { - gCurrentMove = gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, gBattlerAttacker); - QueueZMove(gBattlerAttacker, move); + gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; + gCurrentMove = GetTypeBasedZMove(move); } else { @@ -11681,16 +11756,6 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } return STAT_CHANGE_DIDNT_WORK; } - else if (battlerAbility == ABILITY_SHIELD_DUST && flags == 0) - { - RecordAbilityBattle(battler, ABILITY_SHIELD_DUST); - return STAT_CHANGE_DIDNT_WORK; - } - else if (flags == 0 && battlerHoldEffect == HOLD_EFFECT_COVERT_CLOAK) - { - RecordItemEffectBattle(battler, HOLD_EFFECT_COVERT_CLOAK); - return STAT_CHANGE_DIDNT_WORK; - } else // try to decrease { statValue = -GET_STAT_BUFF_VALUE(statValue); @@ -11764,27 +11829,35 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } else { + u32 statIncrease; + if ((statValue + gBattleMons[battler].statStages[statId]) > MAX_STAT_STAGE) + statIncrease = MAX_STAT_STAGE - gBattleMons[battler].statStages[statId]; + else + statIncrease = statValue; + gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler); gProtectStructs[battler].statRaised = TRUE; - // check mirror herb + // Check Mirror Herb / Opportunist for (index = 0; index < gBattlersCount; index++) { if (GetBattlerSide(index) == GetBattlerSide(battler)) continue; // Only triggers on opposing side + if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST - && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises + && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises { gProtectStructs[index].activateOpportunist = 2; // set stats to copy - gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk - gQueuedStatBoosts[index].statChanges[statId - 1] += statValue; // cumulative in case of multiple opponent boosts } - else if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB - && gBattleMons[index].statStages[statId] < MAX_STAT_STAGE) + if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB) { gProtectStructs[index].eatMirrorHerb = 1; + } + + if (gProtectStructs[index].activateOpportunist == 2 || gProtectStructs[index].eatMirrorHerb == 1) + { gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk - gQueuedStatBoosts[index].statChanges[statId - 1] = statValue; + gQueuedStatBoosts[index].statChanges[statId - 1] += statIncrease; } } } @@ -12107,7 +12180,7 @@ static void Cmd_tryconversiontypechange(void) u8 moveChecked = 0; u8 moveType = 0; - if (IsTerastallized(gBattlerAttacker)) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) { gBattlescriptCurrInstr = cmd->failInstr; return; @@ -12251,7 +12324,7 @@ static void Cmd_tryKO(void) u16 targetAbility = GetBattlerAbility(gBattlerTarget); // Dynamaxed Pokemon cannot be hit by OHKO moves. - if (IsDynamaxed(gBattlerTarget)) + if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; @@ -12351,74 +12424,8 @@ static void Cmd_unused_95(void) { } -static void Cmd_weatherdamage(void) +static void Cmd_unused_96(void) { - CMD_ARGS(); - - u32 ability = GetBattlerAbility(gBattlerAttacker); - - gBattleMoveDamage = 0; - if (IsBattlerAlive(gBattlerAttacker) && WEATHER_HAS_EFFECT && ability != ABILITY_MAGIC_GUARD) - { - if (gBattleWeather & B_WEATHER_SANDSTORM) - { - if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ROCK) - && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GROUND) - && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_STEEL) - && ability != ABILITY_SAND_VEIL - && ability != ABILITY_SAND_FORCE - && ability != ABILITY_SAND_RUSH - && ability != ABILITY_OVERCOAT - && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) - { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - } - if (gBattleWeather & B_WEATHER_HAIL) - { - if (ability == ABILITY_ICE_BODY - && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && !BATTLER_MAX_HP(gBattlerAttacker) - && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK)) - { - gBattlerAbility = gBattlerAttacker; - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - } - else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE) - && ability != ABILITY_SNOW_CLOAK - && ability != ABILITY_OVERCOAT - && ability != ABILITY_ICE_BODY - && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) - { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - } - if (gBattleWeather & B_WEATHER_SNOW) - { - if (ability == ABILITY_ICE_BODY - && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && !BATTLER_MAX_HP(gBattlerAttacker) - && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK)) - { - gBattlerAbility = gBattlerAttacker; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - } - } - } - - gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryinfatuating(void) @@ -12587,9 +12594,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 (GetNonDynamaxMaxHP(gBattlerAttacker) / factor == 0) + 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 (hp == 0) hp = 1; if (gBattleMons[gBattlerAttacker].hp <= hp) @@ -12599,7 +12611,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; @@ -12799,11 +12811,11 @@ static void Cmd_trysetencore(void) s32 i; - if (IsMaxMove(gLastMoves[gBattlerTarget]) && !IsDynamaxed(gBattlerTarget)) + if (IsMaxMove(gLastMoves[gBattlerTarget]) && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMove[gBattlerTarget]) + if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMoves[gBattlerTarget]) break; } } @@ -12882,7 +12894,7 @@ static void Cmd_settypetorandomresistance(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (IsTerastallized(gBattlerAttacker)) + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -13007,7 +13019,7 @@ static void Cmd_trychoosesleeptalkmove(void) } } - unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); + unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM)); if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen { gBattlescriptCurrInstr = cmd->nextInstr; @@ -13021,7 +13033,15 @@ static void Cmd_trychoosesleeptalkmove(void) movePosition = MOD(Random(), MAX_MON_MOVES); } while ((gBitTable[movePosition] & unusableMovesBits)); - gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gBattleMons[gBattlerAttacker].moves[movePosition])) + { + gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gBattleMons[gBattlerAttacker].moves[movePosition]; + gCalledMove = GetTypeBasedZMove(gBattleMons[gBattlerAttacker].moves[movePosition]); + } + else + { + gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; + } gCurrMovePos = movePosition; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); @@ -13090,7 +13110,7 @@ static void Cmd_tryspiteppreduce(void) { for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleStruct->dynamax.baseMove[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + if (gBattleStruct->dynamax.baseMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) break; } } @@ -13162,7 +13182,7 @@ static void Cmd_healpartystatus(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF - || B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_9) + || B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8) { gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; @@ -13202,7 +13222,7 @@ static void Cmd_healpartystatus(void) bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i; bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner); - if (B_HEAL_BELL_SOUNDPROOF == GEN_5 || (isAttacker && B_HEAL_BELL_SOUNDPROOF >= GEN_9)) + if (B_HEAL_BELL_SOUNDPROOF == GEN_5 || (isAttacker && B_HEAL_BELL_SOUNDPROOF >= GEN_8)) ability = ABILITY_NONE; else if (B_HEAL_BELL_SOUNDPROOF > GEN_5 && !isAttacker && !isDoublesPartner) ability = ABILITY_NONE; @@ -13211,7 +13231,17 @@ static void Cmd_healpartystatus(void) else if (isDoublesPartner) ability = GetBattlerAbility(partner); else + { ability = GetAbilityBySpecies(species, abilityNum); + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(gBattlerAttacker); + if (TestRunner_Battle_GetForcedAbility(side, i)) + ability = TestRunner_Battle_GetForcedAbility(side, i); + } + #endif + } if (ability != ABILITY_SOUNDPROOF) toHeal |= (1 << i); @@ -13366,8 +13396,17 @@ static void Cmd_handlefurycutter(void) } else { - if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5 - && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) // Don't increment counter on first hit + 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_2ND_HIT) // Don't increment counter on second hit gDisableStructs[gBattlerAttacker].furyCutterCounter++; gBattlescriptCurrInstr = cmd->nextInstr; @@ -13943,25 +13982,33 @@ static void Cmd_callterrainattack(void) CMD_ARGS(); gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCurrentMove = GetNaturePowerMove(); + gCurrentMove = GetNaturePowerMove(gBattlerAttacker); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); BattleScriptPush(GET_MOVE_BATTLESCRIPT(gCurrentMove)); gBattlescriptCurrInstr = cmd->nextInstr; } -u16 GetNaturePowerMove(void) +u32 GetNaturePowerMove(u32 battler) { + u32 move = sNaturePowerMoves[gBattleTerrain]; if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - return MOVE_MOONBLAST; + move = MOVE_MOONBLAST; else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - return MOVE_THUNDERBOLT; + move = MOVE_THUNDERBOLT; else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - return MOVE_ENERGY_BALL; + move = MOVE_ENERGY_BALL; else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - return MOVE_PSYCHIC; + move = MOVE_PSYCHIC; else if (sNaturePowerMoves[gBattleTerrain] == MOVE_NONE) - return MOVE_TRI_ATTACK; - return sNaturePowerMoves[gBattleTerrain]; + move = MOVE_TRI_ATTACK; + + if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE) + { + gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; + move = GetTypeBasedZMove(move); + } + + return move; } // Refresh @@ -13987,7 +14034,7 @@ static void Cmd_settorment(void) CMD_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT - || IsDynamaxed(gBattlerTarget)) + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -14376,7 +14423,7 @@ static void Cmd_tryswapabilities(void) } else { - if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || IsDynamaxed(gBattlerTarget)) + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -14854,7 +14901,7 @@ static void Cmd_settypetoterrain(void) break; } - if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType) && !IsTerastallized(gBattlerAttacker)) + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA) { SET_BATTLER_TYPE(gBattlerAttacker, terrainType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType); @@ -15272,6 +15319,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()) @@ -15888,10 +15942,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++) { @@ -16342,28 +16395,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; -} + NATIVE_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); -void BS_JumpIfAbsorb(void) -{ - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_VOLT_ABSORB)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} - -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; @@ -16476,7 +16513,7 @@ void BS_TryReflectType(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (IsTerastallized(gBattlerAttacker)) + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -16707,9 +16744,8 @@ void BS_TryTrainerSlideDynamaxMsg(void) NATIVE_ARGS(); s32 shouldSlide; - if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_DYNAMAX))) + if ((shouldSlide = ShouldDoTrainerSlide(gBattleScripting.battler, TRAINER_SLIDE_DYNAMAX))) { - gBattleScripting.battler = gBattlerAttacker; BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); } @@ -16750,10 +16786,19 @@ void BS_TryCopycat(void) } else { - if (IsMaxMove(gLastUsedMove)) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gLastUsedMove)) + { + gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gLastUsedMove; + gCalledMove = GetTypeBasedZMove(gLastUsedMove); + } + else if (IsMaxMove(gLastUsedMove)) + { gCalledMove = gBattleStruct->dynamax.lastUsedBaseMove; + } else + { gCalledMove = gLastUsedMove; + } gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); @@ -16841,9 +16886,9 @@ void BS_AllySwitchFailChance(void) void BS_SetPhotonGeyserCategory(void) { NATIVE_ARGS(); - if (!((gMovesInfo[gCurrentMove].effect == EFFECT_TERA_BLAST && !IsTerastallized(gBattlerAttacker)) - || (gMovesInfo[gCurrentMove].effect == EFFECT_TERA_STARSTORM && !(IsTerastallized(gBattlerAttacker) && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR)))) - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL); + if (!((gMovesInfo[gCurrentMove].effect == EFFECT_TERA_BLAST && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA) + || (gMovesInfo[gCurrentMove].effect == EFFECT_TERA_STARSTORM && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR))) + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != gMovesInfo[gCurrentMove].category); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -16893,7 +16938,7 @@ static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 use val = 0; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val); break; - case EVO_DEFEAT_WITH_ITEM: + case EVO_DEFEAT_THREE_WITH_ITEM: if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES) == GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_SPECIES) && GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HELD_ITEM) == evolutions[i].param) SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val); @@ -16926,7 +16971,7 @@ void BS_TryUpdateRecoilTracker(void) void BS_TryUpdateLeadersCrestTracker(void) { NATIVE_ARGS(); - TryUpdateEvolutionTracker(EVO_DEFEAT_WITH_ITEM, 1, MOVE_NONE); + TryUpdateEvolutionTracker(EVO_DEFEAT_THREE_WITH_ITEM, 1, MOVE_NONE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -17029,6 +17074,41 @@ void BS_TryQuash(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_CopyFoesStatIncrease(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 stat = 0; + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gQueuedStatBoosts[battler].stats == 0) + { + for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) + { + if (gQueuedStatBoosts[battler].statChanges[stat] != 0) + gQueuedStatBoosts[battler].stats |= (1 << stat); + } + gBattlescriptCurrInstr = cmd->jumpInstr; + return; + } + + for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) + { + if (gQueuedStatBoosts[battler].stats & (1 << stat)) + { + if (gQueuedStatBoosts[battler].statChanges[stat] <= -1) + SET_STATCHANGER(stat + 1, abs(gQueuedStatBoosts[battler].statChanges[stat]), TRUE); + else + SET_STATCHANGER(stat + 1, gQueuedStatBoosts[battler].statChanges[stat], FALSE); + + gQueuedStatBoosts[battler].stats &= ~(1 << stat); + gBattlerTarget = battler; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } + gBattlescriptCurrInstr = cmd->jumpInstr; +} + void BS_RemoveWeather(void) { NATIVE_ARGS(); @@ -17043,3 +17123,12 @@ void BS_ApplyTerastallization(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_DamageToQuarterTargetHP(void) +{ + NATIVE_ARGS(); + gBattleMoveDamage = (3 * GetNonDynamaxHP(gBattlerTarget)) / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_setup.c b/src/battle_setup.c index e92b32d4c9..41f2b9b502 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1938,15 +1938,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_terastal.c b/src/battle_terastal.c index 62ab3afacb..6866c6aaad 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -4,6 +4,8 @@ #include "battle_controllers.h" #include "battle_interface.h" #include "battle_terastal.h" +#include "battle_gimmick.h" +#include "battle_scripts.h" #include "event_data.h" #include "item.h" #include "palette.h" @@ -16,14 +18,13 @@ #include "constants/rgb.h" // Sets flags and variables upon a battler's Terastallization. -void PrepareBattlerForTera(u32 battler) +void ActivateTera(u32 battler) { u32 side = GetBattlerSide(battler); - u32 index = gBattlerPartyIndexes[battler]; - // Update TeraData fields. - gBattleStruct->tera.isTerastallized[side] |= gBitTable[index]; - gBattleStruct->tera.alreadyTerastallized[battler] = TRUE; + // Set appropriate flags. + SetActiveGimmick(battler, GIMMICK_TERA); + SetGimmickAsActivated(battler, GIMMICK_TERA); // Remove Tera Orb charge. if (B_FLAG_TERA_ORB_CHARGED != 0 @@ -33,6 +34,13 @@ void PrepareBattlerForTera(u32 battler) { FlagClear(B_FLAG_TERA_ORB_CHARGED); } + + // Execute battle script. + PREPARE_TYPE_BUFFER(gBattleTextBuff1, GetBattlerTeraType(battler)); + if (TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_TERASTALLIZATION)) + BattleScriptExecute(BattleScript_TeraFormChange); + else + BattleScriptExecute(BattleScript_Terastallization); } // Applies palette blend and enables UI indicator after animation has played @@ -55,34 +63,38 @@ bool32 CanTerastallize(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); - // Check if Player has Tera Orb and has charge. - if (!CheckBagHasItem(ITEM_TERA_ORB, 1) - || !((B_FLAG_TERA_ORB_NO_COST != 0 && FlagGet(B_FLAG_TERA_ORB_NO_COST)) - || (B_FLAG_TERA_ORB_CHARGED != 0 && FlagGet(B_FLAG_TERA_ORB_CHARGED) - && ((battler == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT)))))) + if (TESTING || GetBattlerSide(battler) == B_SIDE_OPPONENT) + { + // Skip all other checks in this block, go to HasTrainerUsedGimmick + } + else if (!CheckBagHasItem(ITEM_TERA_ORB, 1)) + { + return FALSE; + } + else if (FlagGet(B_FLAG_TERA_ORB_NO_COST)) + { + // Tera Orb is not depleted, go to HasTrainerUsedGimmick + } + else if (!FlagGet(B_FLAG_TERA_ORB_CHARGED)) { return FALSE; } // Check if Trainer has already Terastallized. - if (gBattleStruct->tera.alreadyTerastallized[battler]) - { + if (HasTrainerUsedGimmick(battler, GIMMICK_TERA)) return FALSE; - } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && IsPartnerMonFromSameTrainer(battler) - && (gBattleStruct->tera.alreadyTerastallized[BATTLE_PARTNER(battler)] - || (gBattleStruct->tera.toTera & gBitTable[BATTLE_PARTNER(battler)]))) - { + // Check if AI battler is intended to Terastallize. + if (!ShouldTrainerBattlerUseGimmick(battler, GIMMICK_TERA)) + return FALSE; + + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) return FALSE; - } // Check if battler is holding a Z-Crystal or Mega Stone. - if (holdEffect == HOLD_EFFECT_Z_CRYSTAL || holdEffect == HOLD_EFFECT_MEGA_STONE) - { + if (!TESTING && (holdEffect == HOLD_EFFECT_Z_CRYSTAL || holdEffect == HOLD_EFFECT_MEGA_STONE)) // tests make this check already return FALSE; - } // Every check passed! return TRUE; @@ -94,25 +106,18 @@ u32 GetBattlerTeraType(u32 battler) return GetMonData(&GetBattlerParty(battler)[gBattlerPartyIndexes[battler]], MON_DATA_TERA_TYPE); } -// Returns whether a battler is terastallized. -bool32 IsTerastallized(u32 battler) -{ - return gBattleStruct->tera.isTerastallized[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]; -} - - // Uses up a type's Stellar boost. void ExpendTypeStellarBoost(u32 battler, u32 type) { - if (type < 32) // avoid OOB access - gBattleStruct->tera.stellarBoostFlags[GetBattlerSide(battler)] |= gBitTable[type]; + if (type < 32 && gBattleMons[battler].species != SPECIES_TERAPAGOS_STELLAR) // avoid OOB access + gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= gBitTable[type]; } // Checks whether a type's Stellar boost has been expended. bool32 IsTypeStellarBoosted(u32 battler, u32 type) { if (type < 32) // avoid OOB access - return !(gBattleStruct->tera.stellarBoostFlags[GetBattlerSide(battler)] & gBitTable[type]); + return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & gBitTable[type]); else return FALSE; } @@ -125,7 +130,7 @@ uq4_12_t GetTeraMultiplier(u32 battler, u32 type) bool32 hasAdaptability = (GetBattlerAbility(battler) == ABILITY_ADAPTABILITY); // Safety check. - if (!IsTerastallized(battler)) + if (GetActiveGimmick(battler) != GIMMICK_TERA) return UQ_4_12(1.0); // Stellar-type checks. @@ -172,604 +177,3 @@ u16 GetTeraTypeRGB(u32 type) { return gTypesInfo[type].teraTypeRGBValue; } - -// TERASTAL TRIGGER: -static const u8 ALIGNED(4) sTeraTriggerGfx[] = INCBIN_U8("graphics/battle_interface/tera_trigger.4bpp"); -static const u16 sTeraTriggerPal[] = INCBIN_U16("graphics/battle_interface/tera_trigger.gbapal"); - -static const struct SpriteSheet sSpriteSheet_TeraTrigger = -{ - sTeraTriggerGfx, sizeof(sTeraTriggerGfx), TAG_TERA_TRIGGER_TILE -}; -static const struct SpritePalette sSpritePalette_TeraTrigger = -{ - sTeraTriggerPal, TAG_TERA_TRIGGER_PAL -}; - -static const struct OamData sOamData_TeraTrigger = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_TeraTriggerOff[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_TeraTriggerOn[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_TeraTrigger[] = -{ - sSpriteAnim_TeraTriggerOff, - sSpriteAnim_TeraTriggerOn, -}; - -static void SpriteCb_TeraTrigger(struct Sprite *sprite); -static const struct SpriteTemplate sSpriteTemplate_TeraTrigger = -{ - .tileTag = TAG_TERA_TRIGGER_TILE, - .paletteTag = TAG_TERA_TRIGGER_PAL, - .oam = &sOamData_TeraTrigger, - .anims = sSpriteAnimTable_TeraTrigger, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraTrigger -}; - -// Tera Evolution Trigger icon functions. -void ChangeTeraTriggerSprite(u8 spriteId, u8 animId) -{ - StartSpriteAnim(&gSprites[spriteId], animId); -} - -#define SINGLES_TERA_TRIGGER_POS_X_OPTIMAL (30) -#define SINGLES_TERA_TRIGGER_POS_X_PRIORITY (31) -#define SINGLES_TERA_TRIGGER_POS_X_SLIDE (15) -#define SINGLES_TERA_TRIGGER_POS_Y_DIFF (-11) - -#define DOUBLES_TERA_TRIGGER_POS_X_OPTIMAL (30) -#define DOUBLES_TERA_TRIGGER_POS_X_PRIORITY (31) -#define DOUBLES_TERA_TRIGGER_POS_X_SLIDE (15) -#define DOUBLES_TERA_TRIGGER_POS_Y_DIFF (-4) - -#define tBattler data[0] -#define tHide data[1] - -void CreateTeraTriggerSprite(u8 battler, u8 palId) -{ - LoadSpritePalette(&sSpritePalette_TeraTrigger); - if (GetSpriteTileStartByTag(TAG_TERA_TRIGGER_TILE) == 0xFFFF) - { - LoadSpriteSheet(&sSpriteSheet_TeraTrigger); - } - if (gBattleStruct->tera.triggerSpriteId == 0xFF) - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleStruct->tera.triggerSpriteId = CreateSprite(&sSpriteTemplate_TeraTrigger, - gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_TERA_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_TERA_TRIGGER_POS_Y_DIFF, 0); - else - gBattleStruct->tera.triggerSpriteId = CreateSprite(&sSpriteTemplate_TeraTrigger, - gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_TERA_TRIGGER_POS_X_SLIDE, - gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_TERA_TRIGGER_POS_Y_DIFF, 0); - } - gSprites[gBattleStruct->tera.triggerSpriteId].tBattler = battler; - gSprites[gBattleStruct->tera.triggerSpriteId].tHide = FALSE; - - ChangeTeraTriggerSprite(gBattleStruct->tera.triggerSpriteId, palId); -} - -static void SpriteCb_TeraTrigger(struct Sprite *sprite) -{ - s32 xSlide, xPriority, xOptimal; - s32 yDiff; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - xSlide = DOUBLES_TERA_TRIGGER_POS_X_SLIDE; - xPriority = DOUBLES_TERA_TRIGGER_POS_X_PRIORITY; - xOptimal = DOUBLES_TERA_TRIGGER_POS_X_OPTIMAL; - yDiff = DOUBLES_TERA_TRIGGER_POS_Y_DIFF; - } - else - { - xSlide = SINGLES_TERA_TRIGGER_POS_X_SLIDE; - xPriority = SINGLES_TERA_TRIGGER_POS_X_PRIORITY; - xOptimal = SINGLES_TERA_TRIGGER_POS_X_OPTIMAL; - yDiff = SINGLES_TERA_TRIGGER_POS_Y_DIFF; - } - - if (sprite->tHide) - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - sprite->x++; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - DestroyTeraTriggerSprite(); - } - else - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) - sprite->x--; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - } -} - -bool32 IsTeraTriggerSpriteActive(void) -{ - if (GetSpriteTileStartByTag(TAG_TERA_TRIGGER_TILE) == 0xFFFF) - return FALSE; - else if (IndexOfSpritePaletteTag(TAG_TERA_TRIGGER_PAL) != 0xFF) - return TRUE; - else - return FALSE; -} - -void HideTeraTriggerSprite(void) -{ - if (gBattleStruct->tera.triggerSpriteId != 0xFF) - { - ChangeTeraTriggerSprite(gBattleStruct->tera.triggerSpriteId, 0); - gSprites[gBattleStruct->tera.triggerSpriteId].tHide = TRUE; - } -} - -void DestroyTeraTriggerSprite(void) -{ - FreeSpritePaletteByTag(TAG_TERA_TRIGGER_PAL); - FreeSpriteTilesByTag(TAG_TERA_TRIGGER_TILE); - if (gBattleStruct->tera.triggerSpriteId != 0xFF) - DestroySprite(&gSprites[gBattleStruct->tera.triggerSpriteId]); - gBattleStruct->tera.triggerSpriteId = 0xFF; -} - -#undef tBattler -#undef tHide - -// TERA INDICATOR: -static const u16 sTeraIndicatorPal[] = INCBIN_U16("graphics/battle_interface/tera_indicator.gbapal"); -static const u8 ALIGNED(4) sNormalIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/normal_indicator.4bpp"); -static const u8 ALIGNED(4) sFightingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fighting_indicator.4bpp"); -static const u8 ALIGNED(4) sFlyingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/flying_indicator.4bpp"); -static const u8 ALIGNED(4) sPoisonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/poison_indicator.4bpp"); -static const u8 ALIGNED(4) sGroundIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ground_indicator.4bpp"); -static const u8 ALIGNED(4) sRockIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/rock_indicator.4bpp"); -static const u8 ALIGNED(4) sBugIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/bug_indicator.4bpp"); -static const u8 ALIGNED(4) sGhostIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ghost_indicator.4bpp"); -static const u8 ALIGNED(4) sSteelIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/steel_indicator.4bpp"); -static const u8 ALIGNED(4) sFireIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fire_indicator.4bpp"); -static const u8 ALIGNED(4) sWaterIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/water_indicator.4bpp"); -static const u8 ALIGNED(4) sGrassIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/grass_indicator.4bpp"); -static const u8 ALIGNED(4) sElectricIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/electric_indicator.4bpp"); -static const u8 ALIGNED(4) sPsychicIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/psychic_indicator.4bpp"); -static const u8 ALIGNED(4) sIceIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ice_indicator.4bpp"); -static const u8 ALIGNED(4) sDragonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dragon_indicator.4bpp"); -static const u8 ALIGNED(4) sDarkIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dark_indicator.4bpp"); -static const u8 ALIGNED(4) sFairyIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fairy_indicator.4bpp"); -static const u8 ALIGNED(4) sStellarIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/stellar_indicator.4bpp"); - -static void SpriteCb_TeraIndicator(struct Sprite *sprite); -static const s8 sIndicatorPositions[][2] = -{ - [B_POSITION_PLAYER_LEFT] = {53, -9}, - [B_POSITION_OPPONENT_LEFT] = {44, -9}, - [B_POSITION_PLAYER_RIGHT] = {52, -9}, - [B_POSITION_OPPONENT_RIGHT] = {44, -9}, -}; - -static const struct SpritePalette sSpritePalette_TeraIndicator = -{ - sTeraIndicatorPal, TAG_TERA_INDICATOR_PAL -}; - -static const struct OamData sOamData_TeraIndicator = -{ - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16), - .priority = 1, -}; - -static const struct SpriteTemplate sSpriteTemplate_NormalIndicator = -{ - .tileTag = TAG_NORMAL_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_FightingIndicator = -{ - .tileTag = TAG_FIGHTING_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_FlyingIndicator = -{ - .tileTag = TAG_FLYING_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_PoisonIndicator = -{ - .tileTag = TAG_POISON_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_GroundIndicator = -{ - .tileTag = TAG_GROUND_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_RockIndicator = -{ - .tileTag = TAG_ROCK_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_BugIndicator = -{ - .tileTag = TAG_BUG_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_GhostIndicator = -{ - .tileTag = TAG_GHOST_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_SteelIndicator = -{ - .tileTag = TAG_STEEL_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_FireIndicator = -{ - .tileTag = TAG_FIRE_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_WaterIndicator = -{ - .tileTag = TAG_WATER_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_GrassIndicator = -{ - .tileTag = TAG_GRASS_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_ElectricIndicator = -{ - .tileTag = TAG_ELECTRIC_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_PsychicIndicator = -{ - .tileTag = TAG_PSYCHIC_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_IceIndicator = -{ - .tileTag = TAG_ICE_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_DragonIndicator = -{ - .tileTag = TAG_DRAGON_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_DarkIndicator = -{ - .tileTag = TAG_DARK_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_FairyIndicator = -{ - .tileTag = TAG_FAIRY_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_StellarIndicator = -{ - .tileTag = TAG_STELLAR_INDICATOR_TILE, - .paletteTag = TAG_TERA_INDICATOR_PAL, - .oam = &sOamData_TeraIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_TeraIndicator, -}; - -static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] = -{ - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, - {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE}, - {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE}, - {sPoisonIndicatorGfx, sizeof(sPoisonIndicatorGfx), TAG_POISON_INDICATOR_TILE}, - {sGroundIndicatorGfx, sizeof(sGroundIndicatorGfx), TAG_GROUND_INDICATOR_TILE}, - {sRockIndicatorGfx, sizeof(sRockIndicatorGfx), TAG_ROCK_INDICATOR_TILE}, - {sBugIndicatorGfx, sizeof(sBugIndicatorGfx), TAG_BUG_INDICATOR_TILE}, - {sGhostIndicatorGfx, sizeof(sGhostIndicatorGfx), TAG_GHOST_INDICATOR_TILE}, - {sSteelIndicatorGfx, sizeof(sSteelIndicatorGfx), TAG_STEEL_INDICATOR_TILE}, - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_MYSTERY - {sFireIndicatorGfx, sizeof(sFireIndicatorGfx), TAG_FIRE_INDICATOR_TILE}, - {sWaterIndicatorGfx, sizeof(sWaterIndicatorGfx), TAG_WATER_INDICATOR_TILE}, - {sGrassIndicatorGfx, sizeof(sGrassIndicatorGfx), TAG_GRASS_INDICATOR_TILE}, - {sElectricIndicatorGfx, sizeof(sElectricIndicatorGfx), TAG_ELECTRIC_INDICATOR_TILE}, - {sPsychicIndicatorGfx, sizeof(sPsychicIndicatorGfx), TAG_PSYCHIC_INDICATOR_TILE}, - {sIceIndicatorGfx, sizeof(sIceIndicatorGfx), TAG_ICE_INDICATOR_TILE}, - {sDragonIndicatorGfx, sizeof(sDragonIndicatorGfx), TAG_DRAGON_INDICATOR_TILE}, - {sDarkIndicatorGfx, sizeof(sDarkIndicatorGfx), TAG_DARK_INDICATOR_TILE}, - {sFairyIndicatorGfx, sizeof(sFairyIndicatorGfx), TAG_FAIRY_INDICATOR_TILE}, - {sStellarIndicatorGfx, sizeof(sStellarIndicatorGfx), TAG_STELLAR_INDICATOR_TILE}, - {0} -}; - -static const struct SpriteTemplate * const sTeraIndicatorSpriteTemplates[NUMBER_OF_MON_TYPES] = -{ - [TYPE_NONE] = &sSpriteTemplate_NormalIndicator, // just in case - [TYPE_NORMAL] = &sSpriteTemplate_NormalIndicator, - [TYPE_FIGHTING] = &sSpriteTemplate_FightingIndicator, - [TYPE_FLYING] = &sSpriteTemplate_FlyingIndicator, - [TYPE_POISON] = &sSpriteTemplate_PoisonIndicator, - [TYPE_GROUND] = &sSpriteTemplate_GroundIndicator, - [TYPE_ROCK] = &sSpriteTemplate_RockIndicator, - [TYPE_BUG] = &sSpriteTemplate_BugIndicator, - [TYPE_GHOST] = &sSpriteTemplate_GhostIndicator, - [TYPE_STEEL] = &sSpriteTemplate_SteelIndicator, - [TYPE_MYSTERY] = &sSpriteTemplate_NormalIndicator, // just in case - [TYPE_FIRE] = &sSpriteTemplate_FireIndicator, - [TYPE_WATER] = &sSpriteTemplate_WaterIndicator, - [TYPE_GRASS] = &sSpriteTemplate_GrassIndicator, - [TYPE_ELECTRIC] = &sSpriteTemplate_ElectricIndicator, - [TYPE_PSYCHIC] = &sSpriteTemplate_PsychicIndicator, - [TYPE_ICE] = &sSpriteTemplate_IceIndicator, - [TYPE_DRAGON] = &sSpriteTemplate_DragonIndicator, - [TYPE_DARK] = &sSpriteTemplate_DarkIndicator, - [TYPE_FAIRY] = &sSpriteTemplate_FairyIndicator, - [TYPE_STELLAR] = &sSpriteTemplate_StellarIndicator, -}; - -// for sprite data fields -#define tBattler data[0] -#define tType data[1] // Indicator type: tera -#define tPosX data[2] -#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit - -// data fields for healthboxMain -// oam.affineParam holds healthboxRight spriteId -#define hMain_TeraIndicatorId data[3] -#define hMain_HealthBarSpriteId data[5] -#define hMain_Battler data[6] -#define hMain_Data7 data[7] - -// data fields for healthboxRight -#define hOther_HealthBoxSpriteId data[5] - -// data fields for healthbar -#define hBar_HealthBoxSpriteId data[5] - -void TeraIndicator_LoadSpriteGfx(void) -{ - LoadSpriteSheets(sTeraIndicatorSpriteSheets); - LoadSpritePalette(&sSpritePalette_TeraIndicator); -} - -bool32 TeraIndicator_ShouldBeInvisible(u32 battler) -{ - return !IsTerastallized(battler); -} - -u8 TeraIndicator_GetSpriteId(u32 healthboxSpriteId) -{ - return gBattleStruct->tera.indicatorSpriteId[gSprites[healthboxSpriteId].hMain_Battler]; -} - -void TeraIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) -{ - u8 spriteId = TeraIndicator_GetSpriteId(healthboxId); - u32 battler = gSprites[healthboxId].hMain_Battler; - - if (GetSafariZoneFlag()) - return; - - if (invisible == TRUE) - gSprites[spriteId].invisible = TRUE; - else // Try visible. - gSprites[spriteId].invisible = TeraIndicator_ShouldBeInvisible(battler); -} - -void TeraIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority) -{ - u8 spriteId = TeraIndicator_GetSpriteId(healthboxId); - gSprites[spriteId].oam.priority = oamPriority; -} - -void TeraIndicator_UpdateLevel(u32 healthboxId, u32 level) -{ - s16 xDelta = 0; - u8 spriteId = TeraIndicator_GetSpriteId(healthboxId); - - if (level >= 100) - xDelta -= 4; - else if (level < 10) - xDelta += 5; - - gSprites[spriteId].tLevelXDelta = xDelta; -} - -void TeraIndicator_CreateSprite(u32 battler, u32 healthboxSpriteId) -{ - u32 position; - u8 spriteId; - s16 xHealthbox = 0, y = 0; - s32 x = 0; - u32 type = GetBattlerTeraType(battler); - - position = GetBattlerPosition(battler); - GetBattlerHealthboxCoords(battler, &xHealthbox, &y); - - x = sIndicatorPositions[position][0]; - y += sIndicatorPositions[position][1]; - - spriteId = gBattleStruct->tera.indicatorSpriteId[battler] = CreateSpriteAtEnd(sTeraIndicatorSpriteTemplates[type], 0, y, 0); - gSprites[spriteId].tBattler = battler; - gSprites[spriteId].tPosX = x; - gSprites[spriteId].invisible = TRUE; -} - -void TeraIndicator_DestroySprite(u32 healthboxSpriteId) -{ - u8 spriteId = TeraIndicator_GetSpriteId(healthboxSpriteId); - DestroySprite(&gSprites[spriteId]); -} - -void TeraIndicator_UpdateType(u32 battler, u32 healthboxSpriteId) -{ - TeraIndicator_DestroySprite(healthboxSpriteId); - TeraIndicator_CreateSprite(battler, healthboxSpriteId); -} - -static void SpriteCb_TeraIndicator(struct Sprite *sprite) -{ - u32 battler = sprite->tBattler; - - sprite->x = gSprites[gHealthboxSpriteIds[battler]].x + sprite->tPosX + sprite->tLevelXDelta; - sprite->x2 = gSprites[gHealthboxSpriteIds[battler]].x2; - sprite->y2 = gSprites[gHealthboxSpriteIds[battler]].y2; -} - -#undef tBattler -#undef tType -#undef tPosX -#undef tLevelXDelta diff --git a/src/battle_tower.c b/src/battle_tower.c index 2fa78c7aa6..045f87ad65 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3037,9 +3037,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_transition.c b/src/battle_transition.c index 3e11ccb43e..b2b295e16e 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -212,7 +212,6 @@ static bool8 AngledWipes_TryEnd(struct Task *); static bool8 AngledWipes_StartNext(struct Task *); static bool8 ShredSplit_Init(struct Task *); static bool8 ShredSplit_Main(struct Task *); -static bool8 ShredSplit_BrokenCheck(struct Task *); static bool8 ShredSplit_End(struct Task *); static bool8 Blackhole_Init(struct Task *); static bool8 Blackhole_Vibrate(struct Task *); @@ -561,7 +560,6 @@ static const TransitionStateFunc sShredSplit_Funcs[] = { ShredSplit_Init, ShredSplit_Main, - ShredSplit_BrokenCheck, ShredSplit_End }; @@ -2928,29 +2926,6 @@ static bool8 ShredSplit_Main(struct Task *task) return FALSE; } -// This function never increments the state counter, because the loop condition -// is always false, resulting in the game being stuck in an infinite loop. -// It's possible this transition is only partially -// done and the second part was left out. -// In any case removing or bypassing this state allows the transition to finish. -static bool8 ShredSplit_BrokenCheck(struct Task *task) -{ - u16 i; - bool32 done = TRUE; - u16 checkVar2 = 0xFF10; - - for (i = 0; i < DISPLAY_HEIGHT; i++) - { - if (gScanlineEffectRegBuffers[1][i] != DISPLAY_WIDTH && gScanlineEffectRegBuffers[1][i] != checkVar2) - done = FALSE; - } - - if (done == TRUE) - task->tState++; - - return FALSE; -} - static bool8 ShredSplit_End(struct Task *task) { DmaStop(0); diff --git a/src/battle_util.c b/src/battle_util.c index 1ff9f7b18f..678778bf1a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8,6 +8,7 @@ #include "battle_interface.h" #include "battle_setup.h" #include "battle_z_move.h" +#include "battle_gimmick.h" #include "party_menu.h" #include "pokemon.h" #include "international_string_util.h" @@ -157,7 +158,7 @@ void HandleAction_UseMove(void) gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; } // encore forces you to use the same move - else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + else if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; @@ -165,7 +166,7 @@ void HandleAction_UseMove(void) *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } // check if the encored move wasn't overwritten - else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + else if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; @@ -185,12 +186,6 @@ void HandleAction_UseMove(void) gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; } - // check z move used - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE && !IS_MOVE_STATUS(gCurrentMove)) - { - gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; - } - if (IsBattlerAlive(gBattlerAttacker)) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -203,11 +198,17 @@ void HandleAction_UseMove(void) SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); GET_MOVE_TYPE(gChosenMove, moveType); - // check max move used - if (gBattleStruct->dynamax.usingMaxMove[gBattlerAttacker]) + // check Z-Move used + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gCurrentMove) && !IsZMove(gCurrentMove)) { + gBattleStruct->categoryOverride = gMovesInfo[gCurrentMove].category; + gCurrentMove = gChosenMove = GetUsableZMove(gBattlerAttacker, gCurrentMove); + } + // check Max Move used + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) + { + gBattleStruct->categoryOverride = gMovesInfo[gCurrentMove].category; gCurrentMove = gChosenMove = GetMaxMove(gBattlerAttacker, gCurrentMove); - gBattleStruct->dynamax.activeCategory = gBattleStruct->dynamax.categories[gBattlerAttacker]; } moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); @@ -236,8 +237,8 @@ void HandleAction_UseMove(void) && GetBattlerTurnOrderNum(battler) < var && gMovesInfo[gCurrentMove].effect != EFFECT_SNIPE_SHOT && gMovesInfo[gCurrentMove].effect != EFFECT_PLEDGE - && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL - || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL + && GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART) { var = GetBattlerTurnOrderNum(battler); } @@ -423,6 +424,8 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) + UndoDynamax(gBattlerAttacker); // this is better performed here instead of SwitchInClearSetData TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH); } @@ -720,7 +723,7 @@ void HandleAction_ActionFinished(void) // check if Stellar type boost should be used up GET_MOVE_TYPE(gCurrentMove, moveType); - if (IsTerastallized(gBattlerAttacker) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR && gMovesInfo[gCurrentMove].category != DAMAGE_CATEGORY_STATUS && IsTypeStellarBoosted(gBattlerAttacker, moveType)) @@ -741,7 +744,6 @@ void HandleAction_ActionFinished(void) gBattleCommunication[4] = 0; gBattleScripting.multihitMoveEffect = 0; gBattleResources->battleScriptsStack->size = 0; - gBattleStruct->dynamax.usingMaxMove[gBattlerAttacker] = 0; if (B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove) { @@ -930,11 +932,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: @@ -1252,17 +1254,17 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move) } // Dynamax bypasses all selection prevention except Taunt and Assault Vest. -#define DYNAMAX_BYPASS_CHECK !gBattleStruct->dynamax.playerSelect && !IsDynamaxed(gBattlerAttacker) +#define DYNAMAX_BYPASS_CHECK (!IsGimmickSelected(gBattlerAttacker, GIMMICK_DYNAMAX) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX) u32 TrySetCantSelectMoveBattleScript(u32 battler) { u32 limitations = 0; - u8 moveId = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST | RET_DYNAMAX | RET_TERASTAL); + u8 moveId = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK; u32 move = gBattleMons[battler].moves[moveId]; u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = battler; gCurrentMove = move; @@ -1278,7 +1280,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) { CancelMultiTurnMoves(battler); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1293,9 +1295,9 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].tauntTimer != 0 && IS_MOVE_STATUS(move)) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].tauntTimer != 0 && IS_MOVE_STATUS(move)) { - if (IsDynamaxed(gBattlerAttacker)) + if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) gCurrentMove = MOVE_MAX_GUARD; else gCurrentMove = move; @@ -1311,7 +1313,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].throatChopTimer != 0 && gMovesInfo[move].soundMove) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer != 0 && gMovesInfo[move].soundMove) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1326,7 +1328,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1341,7 +1343,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1356,7 +1358,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsHealBlockPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1371,7 +1373,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsBelchPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1435,7 +1437,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && gMovesInfo[move].effect != EFFECT_ME_FIRST) { - if (IsDynamaxed(gBattlerAttacker)) + if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) gCurrentMove = MOVE_MAX_GUARD; else gCurrentMove = move; @@ -1689,7 +1691,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; } } @@ -1710,7 +1715,7 @@ u8 DoFieldEndTurnEffects(void) do { s32 i; - u8 side; + u32 side; switch (gBattleStruct->turnCountersTracker) { @@ -2063,19 +2068,11 @@ u8 DoFieldEndTurnEffects(void) while (gBattleStruct->turnSideTracker < 2) { side = gBattleStruct->turnSideTracker; - if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES) + if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES && --gSideTimers[side].damageNonTypesTimer == 0) { - if (--gSideTimers[side].damageNonTypesTimer == 0) - { - // There is no in-game message when this side status ends. - gSideStatuses[side] &= ~SIDE_STATUS_DAMAGE_NON_TYPES; - effect++; - } - else - { - ChooseDamageNonTypesString(gSideTimers[side].damageNonTypesType); - BattleScriptExecute(BattleScript_DamageNonTypesContinues); - } + // There is no in-game message when this side status ends. + gSideStatuses[side] &= ~SIDE_STATUS_DAMAGE_NON_TYPES; + effect++; } gBattleStruct->turnSideTracker++; if (effect != 0) @@ -2302,6 +2299,7 @@ u8 DoFieldEndTurnEffects(void) enum { + ENDTURN_WEATHER_DAMAGE, ENDTURN_INGRAIN, ENDTURN_AQUA_RING, ENDTURN_ABILITIES, @@ -2341,6 +2339,7 @@ enum ENDTURN_SALT_CURE, ENDTURN_SYRUP_BOMB, ENDTURN_DYNAMAX, + ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE, ENDTURN_SEA_OF_FIRE_DAMAGE, ENDTURN_BATTLER_COUNT }; @@ -2382,6 +2381,55 @@ u8 DoBattlerEndTurnEffects(void) ability = GetBattlerAbility(battler); switch (gBattleStruct->turnEffectsTracker) { + case ENDTURN_WEATHER_DAMAGE: + ability = GetBattlerAbility(battler); + if (!IsBattlerAlive(battler) || !WEATHER_HAS_EFFECT || ability == ABILITY_MAGIC_GUARD) + { + gBattleStruct->turnEffectsTracker++; + break; + } + else if (gBattleWeather & B_WEATHER_SANDSTORM + && ability != ABILITY_SAND_VEIL + && ability != ABILITY_SAND_FORCE + && ability != ABILITY_SAND_RUSH + && ability != ABILITY_OVERCOAT + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ROCK) + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GROUND) + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_STEEL) + && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) + { + gBattleScripting.battler = battler; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; + BattleScriptExecute(BattleScript_DamagingWeather); + effect++; + } + else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW) + && ability == ABILITY_ICE_BODY + && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && !BATTLER_MAX_HP(battler) + && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + { + gBattleScripting.battler = battler; + gBattleMoveDamage = -1 * (GetNonDynamaxMaxHP(battler) / 16); + BattleScriptExecute(BattleScript_IceBodyHeal); + effect++; + } + else if (gBattleWeather & B_WEATHER_HAIL + && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + && ability != ABILITY_SNOW_CLOAK + && ability != ABILITY_OVERCOAT + && ability != ABILITY_ICE_BODY + && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) + { + gBattleScripting.battler = battler; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; + BattleScriptExecute(BattleScript_DamagingWeather); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_INGRAIN: // ingrain if ((gStatuses3[battler] & STATUS3_ROOTED) && !BATTLER_MAX_HP(battler) @@ -2918,7 +2966,7 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_DYNAMAX: - if (IsDynamaxed(battler) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && --gBattleStruct->dynamax.dynamaxTurns[battler] == 0) { gBattleScripting.battler = battler; @@ -2928,10 +2976,27 @@ u8 DoBattlerEndTurnEffects(void) } gBattleStruct->turnEffectsTracker++; break; + case ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE: + { + u32 side = GetBattlerSide(gBattlerAttacker); + if (gSideTimers[side].damageNonTypesTimer + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, gSideTimers[side].damageNonTypesType) + && IsBattlerAlive(gBattlerAttacker) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + { + gBattleScripting.battler = battler; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 6; + ChooseDamageNonTypesString(gSideTimers[side].damageNonTypesType); + BattleScriptExecute(BattleScript_DamageNonTypesContinues); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + } case ENDTURN_SEA_OF_FIRE_DAMAGE: if (IsBattlerAlive(battler) && gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SEA_OF_FIRE) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; BtlController_EmitStatusAnimation(battler, BUFFER_A, FALSE, STATUS1_BURN); MarkBattlerForControllerExec(battler); BattleScriptExecute(BattleScript_HurtByTheSeaOfFire); @@ -3297,7 +3362,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_DISABLED: // disabled move - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) { gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3309,7 +3374,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_HEAL_BLOCKED: - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3333,7 +3398,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_TAUNTED: // taunt - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3344,7 +3409,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_IMPRISONED: // imprisoned - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3362,7 +3427,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; @@ -3508,7 +3573,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_THROAT_CHOP: - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].throatChopTimer && gMovesInfo[gCurrentMove].soundMove) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].throatChopTimer && gMovesInfo[gCurrentMove].soundMove) { gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3519,23 +3584,18 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_Z_MOVES: - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) { // For Z-Mirror Move, so it doesn't play the animation twice. - bool32 alreadyUsed = (gBattleStruct->zmove.used[gBattlerAttacker] == TRUE); + bool32 alreadyUsed = HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE); - //attacker has a queued z move - gBattleStruct->zmove.active = TRUE; - gBattleStruct->zmove.activeCategory = gBattleStruct->zmove.categories[gBattlerAttacker]; + // attacker has a queued z move RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_Z_CRYSTAL); - gBattleStruct->zmove.used[gBattlerAttacker] = TRUE; - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(gBattlerAttacker)) - gBattleStruct->zmove.used[BATTLE_PARTNER(gBattlerAttacker)] = TRUE; //if 1v1 double, set partner used flag as well + SetGimmickAsActivated(gBattlerAttacker, GIMMICK_Z_MOVE); gBattleScripting.battler = gBattlerAttacker; - if (gBattleStruct->zmove.activeCategory == DAMAGE_CATEGORY_STATUS) + if (gMovesInfo[gCurrentMove].category == DAMAGE_CATEGORY_STATUS) { - gBattleStruct->zmove.effect = gMovesInfo[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMove.effect; if (!alreadyUsed) { BattleScriptPushCursor(); @@ -4253,6 +4313,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)) @@ -4590,13 +4694,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) @@ -5121,11 +5218,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: @@ -5341,8 +5438,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerAlive(gBattlerAttacker) && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) && gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0 - && !IsDynamaxed(gBattlerAttacker) // TODO: Max Moves don't make contact, useless? - && (Random() % 3) == 0) + && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) // TODO: Max Moves don't make contact, useless? + && RandomPercentage(RNG_CURSED_BODY, 30)) { gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove; gDisableStructs[gBattlerAttacker].disableTimer = 4; @@ -5383,7 +5480,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker) - && !IsDynamaxed(gBattlerTarget) + && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped) { if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) @@ -5503,8 +5600,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) || B_POWDER_GRASS < GEN_6) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_OVERCOAT + && ability != ABILITY_OVERCOAT && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) { u32 poison, paralysis, sleep; @@ -5532,7 +5631,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanSleep(gBattlerAttacker) + && CanBeSlept(gBattlerAttacker, ability) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker)) { @@ -5544,6 +5643,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } } + } break; case ABILITY_POISON_POINT: if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) @@ -5553,7 +5653,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBePoisoned(gBattlerTarget, gBattlerAttacker) + && CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker)) { @@ -5574,7 +5674,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBeParalyzed(gBattlerAttacker) + && CanBeParalyzed(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS && IsMoveMakingContact(move, gBattlerAttacker)) { @@ -5594,7 +5694,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)) && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; @@ -5794,7 +5894,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IS_MOVE_PHYSICAL(gCurrentMove) && TARGET_TURN_DAMAGED - && (gSideTimers[gBattlerAttacker].toxicSpikesAmount != 2)) + && (gSideTimers[GetBattlerSide(gBattlerAttacker)].toxicSpikesAmount != 2)) { SWAP(gBattlerAttacker, gBattlerTarget, i); BattleScriptPushCursor(); @@ -5811,11 +5911,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerTarget) && !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); @@ -5829,7 +5929,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && CanBePoisoned(gBattlerAttacker, gBattlerTarget) + && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget)) && TARGET_TURN_DAMAGED // Need to actually hit the target && RandomWeighted(RNG_TOXIC_CHAIN, 7, 3)) { @@ -5925,9 +6025,40 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_OPPORTUNIST: if (gProtectStructs[battler].activateOpportunist == 2) { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattleScripting.battler = gBattlerAttacker = gBattlerAbility = battler; + bool32 statBuffMoreThan1 = FALSE; + bool32 handleSpeedAnimLater = FALSE; + gBattleScripting.animArg1 = 0; + gBattleScripting.battler = battler; gProtectStructs[battler].activateOpportunist--; + + for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) + { + if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) + continue; + + if (i == STAT_SPEED) + { + handleSpeedAnimLater = TRUE; + continue; + } + + if (!statBuffMoreThan1) + statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); + + if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); + + } + if (handleSpeedAnimLater) + { + if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); + } + BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange); effect = 1; } @@ -6069,48 +6200,7 @@ 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++) @@ -6268,18 +6358,43 @@ bool32 IsNeutralizingGasOnField(void) return FALSE; } -bool32 IsMoldBreakerTypeAbility(u32 ability) +bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability) { + if (gStatuses3[battler] & STATUS3_GASTRO_ACID) + return FALSE; + return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE || (ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove))); } +static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability) +{ + return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || gMovesInfo[gCurrentMove].ignoresTargetAbility) + && battlerDef != battlerAtk + && gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable + && gBattlerByTurnOrder[gCurrentTurnActionNumber] == battlerAtk + && gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE + && gCurrentTurnActionNumber < gBattlersCount); +} + u32 GetBattlerAbility(u32 battler) { bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD; + bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed; + + if (abilityCantBeSuppressed) + { + // 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; + + if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability)) + return ABILITY_NONE; - if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed) return gBattleMons[battler].ability; + } if (gStatuses3[battler] & STATUS3_GASTRO_ACID) return ABILITY_NONE; @@ -6289,14 +6404,7 @@ u32 GetBattlerAbility(u32 battler) && noAbilityShield) return ABILITY_NONE; - if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability) - && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID)) - || gMovesInfo[gCurrentMove].ignoresTargetAbility) - && gAbilitiesInfo[gBattleMons[battler].ability].breakable - && noAbilityShield - && gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker - && gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE - && gCurrentTurnActionNumber < gBattlersCount) + if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability)) return ABILITY_NONE; return gBattleMons[battler].ability; @@ -6413,83 +6521,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)) - return FALSE; - return TRUE; -} - -bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget) -{ - u16 ability = GetBattlerAbility(battlerTarget); - - if (!(CanPoisonType(battlerAttacker, battlerTarget)) - || gSideStatuses[GetBattlerSide(battlerTarget)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battlerTarget].status1 & STATUS1_ANY - || ability == ABILITY_IMMUNITY + || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_COMATOSE || ability == ABILITY_PURIFYING_SALT - || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) - || IsAbilityStatusProtected(battlerTarget) - || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + || 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 CanBeBurned(u32 battler) +bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility) +{ + 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; +} + +bool32 CanBeBurned(u32 battler, u32 ability) { - u16 ability = GetBattlerAbility(battler); 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 + || IsAbilityStatusProtected(battler) + || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + +bool32 CanBeParalyzed(u32 battler, u32 ability) +{ + 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; } @@ -6512,8 +6615,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; } @@ -6904,10 +7007,43 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) if (gProtectStructs[battler].eatMirrorHerb) { + u32 i; + bool32 statBuffMoreThan1 = FALSE; + bool32 handleSpeedAnimLater = FALSE; + gBattleScripting.animArg1 = 0; + gLastUsedItem = gBattleMons[battler].item; - gBattleScripting.savedBattler = gBattlerAttacker; - gBattleScripting.battler = gBattlerAttacker = battler; + gBattleScripting.battler = battler; gProtectStructs[battler].eatMirrorHerb = 0; + + for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) + { + if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) + continue; + + if (i == STAT_SPEED) + { + handleSpeedAnimLater = TRUE; + continue; + } + + if (!statBuffMoreThan1) + statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); + + if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); + + } + if (handleSpeedAnimLater) + { + if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); + } + if (execute) { BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); @@ -7434,6 +7570,9 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); effect = ITEM_STATS_CHANGE; break; + case HOLD_EFFECT_MIRROR_HERB: + effect = TryConsumeMirrorHerb(battler, TRUE); + break; case HOLD_EFFECT_BOOSTER_ENERGY: if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) @@ -7827,6 +7966,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) if (IsBattlerAlive(gBattlerAttacker) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && !gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage && gSpecialStatuses[gBattlerAttacker].damagedMons) { @@ -7961,7 +8101,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - RecordItemEffectBattle(battler, HOLD_EFFECT_ROCKY_HELMET); + RecordItemEffectBattle(battler, HOLD_EFFECT_JABOCA_BERRY); } break; case HOLD_EFFECT_ROWAP_BERRY: // consume and damage attacker if used special move @@ -7981,7 +8121,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - RecordItemEffectBattle(battler, HOLD_EFFECT_ROCKY_HELMET); + RecordItemEffectBattle(battler, HOLD_EFFECT_ROWAP_BERRY); } break; case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move @@ -8029,7 +8169,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; @@ -8038,7 +8178,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; @@ -8303,7 +8443,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; @@ -8390,7 +8530,7 @@ bool32 IsMoveMakingContact(u32 move, u32 battlerAtk) if (!gMovesInfo[move].makesContact) { - if (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL) + if (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL) return TRUE; else return FALSE; @@ -8418,7 +8558,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) } // Z-Moves and Max Moves bypass protection (except Max Guard). - if ((IsMaxMove(move) || gBattleStruct->zmove.active) + if ((IsZMove(move) || IsMaxMove(move)) && (!gProtectStructs[battlerDef].maxGuarded || gMovesInfo[move].argument == MAX_EFFECT_BYPASS_PROTECT)) return FALSE; @@ -8430,7 +8570,8 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) // 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 || (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)) + && (gMovesInfo[move].makesContact + || (gMovesInfo[move].effect == EFFECT_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) @@ -8575,12 +8716,12 @@ u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef) switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) { case MOVE_TARGET_BOTH: - return IsBattlerAlive(battlerDef) - + IsBattlerAlive(BATTLE_PARTNER(battlerDef)); + return !(gAbsentBattlerFlags & gBitTable[battlerDef]) + + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]); case MOVE_TARGET_FOES_AND_ALLY: - return IsBattlerAlive(battlerDef) - + IsBattlerAlive(BATTLE_PARTNER(battlerDef)) - + IsBattlerAlive(BATTLE_PARTNER(battlerAtk)); + return !(gAbsentBattlerFlags & gBitTable[battlerDef]) + + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]) + + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]); case MOVE_TARGET_OPPONENTS_FIELD: return 1; case MOVE_TARGET_DEPENDS: @@ -8715,7 +8856,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 u32 basePower = gMovesInfo[move].power; u32 weight, hpFraction, speed; - if (gBattleStruct->zmove.active) + if (GetActiveGimmick(battlerAtk) == GIMMICK_Z_MOVE) return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]); switch (gMovesInfo[move].effect) @@ -8895,7 +9036,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); break; case EFFECT_DYNAMAX_DOUBLE_DMG: - if (IsDynamaxed(battlerDef)) + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) basePower *= 2; break; case EFFECT_HIDDEN_POWER: @@ -8950,7 +9091,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower *= 2; break; case EFFECT_TERA_BLAST: - if (IsTerastallized(battlerAtk) && GetBattlerTeraType(battlerAtk) == TYPE_STELLAR) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) == TYPE_STELLAR) basePower = 100; break; case EFFECT_LAST_RESPECTS: @@ -9034,12 +9175,13 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC) modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); + if (moveType == TYPE_ELECTRIC && ((gFieldStatuses & STATUS_FIELD_MUDSPORT) || AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0))) - modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.23 : 0.5)); + modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); if (moveType == TYPE_FIRE && ((gFieldStatuses & STATUS_FIELD_WATERSPORT) || AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) - modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.23 : 0.5)); + modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); // attacker's abilities switch (atkAbility) @@ -9322,7 +9464,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 } // Terastallization boosts weak, non-priority, non-multi hit moves after modifiers to 60 BP. - if (IsTerastallized(battlerAtk) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && (moveType == GetBattlerTeraType(battlerAtk) || (GetBattlerTeraType(battlerAtk) == TYPE_STELLAR && IsTypeStellarBoosted(battlerAtk, moveType))) && uq4_12_multiply_by_int_half_down(modifier, basePower) < 60 @@ -9526,11 +9668,11 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_CHOICE_BAND: - if (IS_MOVE_PHYSICAL(move) && !IsDynamaxed(battlerAtk)) + if (IS_MOVE_PHYSICAL(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case HOLD_EFFECT_CHOICE_SPECS: - if (IS_MOVE_SPECIAL(move) && !IsDynamaxed(battlerAtk)) + if (IS_MOVE_SPECIAL(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } @@ -9722,7 +9864,7 @@ static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, static inline uq4_12_t GetTargetDamageModifier(u32 move, u32 battlerAtk, u32 battlerDef) { - if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) + if (IsDoubleBattle() && GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -9798,7 +9940,7 @@ static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef) static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(u32 battlerDef, u32 move) { - if ((gBattleStruct->zmove.active || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef)) + if ((IsZMove(move) || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef)) return UQ_4_12(0.25); return UQ_4_12(1.0); } @@ -10039,7 +10181,7 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, dmg /= 100; } - if (IsTerastallized(battlerAtk)) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, moveType)); else DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk)); @@ -10197,7 +10339,7 @@ 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_STELLAR && IsTerastallized(battlerDef)) + if (moveType == TYPE_STELLAR && GetActiveGimmick(battlerDef) == GIMMICK_TERA) mod = UQ_4_12(2.0); // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon @@ -10293,7 +10435,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov // Thousand Arrows ignores type modifiers for flying mons if (!IsBattlerGrounded(battlerDef) && (gMovesInfo[move].ignoreTypeIfFlyingAndUngrounded) - && (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING)) + && (GetBattlerType(battlerDef, 0, FALSE) == TYPE_FLYING || GetBattlerType(battlerDef, 1, FALSE) == TYPE_FLYING || GetBattlerType(battlerDef, 2, FALSE) == TYPE_FLYING)) { modifier = UQ_4_12(1.0); } @@ -10502,62 +10644,37 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) bool32 CanMegaEvolve(u32 battler) { - u32 itemId, holdEffect; - struct Pokemon *mon; - u32 battlerPosition = GetBattlerPosition(battler); - u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); - struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]))->mega); + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); - // Check if Player has a Mega Ring - if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) - && !CheckBagHasItem(ITEM_MEGA_RING, 1)) + // Check if Player has a Mega Ring. + if (!TESTING + && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_MEGA_RING, 1)) return FALSE; - // Check if trainer already mega evolved a pokemon. - if (mega->alreadyEvolved[battlerPosition]) + // Check if Trainer has already Mega Evolved. + if (HasTrainerUsedGimmick(battler, GIMMICK_MEGA)) return FALSE; - // Cannot use z move and mega evolve on same turn - if (gBattleStruct->zmove.toBeUsed[battler]) + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && IsPartnerMonFromSameTrainer(battler) - && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battler)]))) - return FALSE; - - // Check if mon is currently held by Sky Drop + // Check if battler is currently held by Sky Drop. if (gStatuses3[battler] & STATUS3_SKY_DROPPED) return FALSE; - // Gets mon data. - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + // Check if battler is holding a Z-Crystal. + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return FALSE; - itemId = GetMonData(mon, MON_DATA_HELD_ITEM); + // Check if there is an entry in the form change table for regular Mega Evolution and battler is holding Mega Stone. + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE && holdEffect == HOLD_EFFECT_MEGA_STONE) + return TRUE; - if (itemId == ITEM_ENIGMA_BERRY_E_READER) - holdEffect = gEnigmaBerries[battler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(itemId); - - // Check if there is an entry in the evolution table for regular Mega Evolution. - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE) - { - // Can Mega Evolve via Mega Stone. - if (holdEffect == HOLD_EFFECT_MEGA_STONE) - return TRUE; - } - - // Check if there is an entry in the evolution table for Wish Mega Evolution. + // Check if there is an entry in the form change table for Wish Mega Evolution. if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) - { - // Can't Wish Mega Evolve if holding a Z Crystal. - if (holdEffect != HOLD_EFFECT_Z_CRYSTAL) - return TRUE; - } + return TRUE; // No checks passed, the mon CAN'T mega evolve. return FALSE; @@ -10565,58 +10682,51 @@ bool32 CanMegaEvolve(u32 battler) bool32 CanUltraBurst(u32 battler) { - u32 itemId, holdEffect; - struct Pokemon *mon; - u32 battlerPosition = GetBattlerPosition(battler); - u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); - // Check if Player has a Z Ring - if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) - && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + // Check if Player has a Z-Ring + if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT + || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) return FALSE; - // Check if trainer already ultra bursted a pokemon. - if (gBattleStruct->burst.alreadyBursted[battlerPosition]) + // Check if Trainer has already Ultra Bursted. + if (HasTrainerUsedGimmick(battler, GIMMICK_ULTRA_BURST)) return FALSE; - // Cannot use z move and ultra burst on same turn - if (gBattleStruct->zmove.toBeUsed[battler]) - return FALSE; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && IsPartnerMonFromSameTrainer(battler) - && (gBattleStruct->burst.alreadyBursted[partnerPosition] || (gBattleStruct->burst.toBurst & gBitTable[BATTLE_PARTNER(battler)]))) + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) return FALSE; // Check if mon is currently held by Sky Drop if (gStatuses3[battler] & STATUS3_SKY_DROPPED) return FALSE; - // Gets mon data. - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; - - itemId = GetMonData(mon, MON_DATA_HELD_ITEM); - - // Check if there is an entry in the evolution table for Ultra Burst. - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != SPECIES_NONE) - { - if (itemId == ITEM_ENIGMA_BERRY_E_READER) - holdEffect = gEnigmaBerries[battler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(itemId); - - // Can Ultra Burst via Z Crystal. - if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) - return TRUE; - } + // Check if there is an entry in the form change table for Ultra Burst and battler is holding a Z-Crystal. + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != SPECIES_NONE && holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return TRUE; // No checks passed, the mon CAN'T ultra burst. return FALSE; } +void ActivateMegaEvolution(u32 battler) +{ + gLastUsedItem = gBattleMons[battler].item; + SetActiveGimmick(battler, GIMMICK_MEGA); + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) + BattleScriptExecute(BattleScript_WishMegaEvolution); + else + BattleScriptExecute(BattleScript_MegaEvolution); +} + +void ActivateUltraBurst(u32 battler) +{ + gLastUsedItem = gBattleMons[battler].item; + SetActiveGimmick(battler, GIMMICK_ULTRA_BURST); + BattleScriptExecute(BattleScript_UltraBurst); +} + bool32 IsBattlerMegaEvolved(u32 battler) { // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. @@ -10768,12 +10878,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; @@ -10811,10 +10921,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; } } @@ -10951,21 +11065,30 @@ bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) return FALSE; } +static u32 SwapMoveDamageCategory(u32 move) +{ + if (gMovesInfo[move].category == DAMAGE_CATEGORY_PHYSICAL) + return DAMAGE_CATEGORY_SPECIAL; + return DAMAGE_CATEGORY_PHYSICAL; +} + u8 GetBattleMoveCategory(u32 moveId) { - if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId)) - return gBattleStruct->zmove.activeCategory; - if (gBattleStruct != NULL && IsMaxMove(moveId)) // TODO: Might be buggy depending on when this is called. - return gBattleStruct->dynamax.activeCategory; - if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky - return DAMAGE_CATEGORY_PHYSICAL; + u8 moveType; + if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast + return SwapMoveDamageCategory(moveId); + if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called. + return gBattleStruct->categoryOverride; if (B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) return gMovesInfo[moveId].category; if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; + else if (gMain.inBattle) + GET_MOVE_TYPE(moveId, moveType); else - return gTypesInfo[gMovesInfo[moveId].type].damageCategory; + moveType = gMovesInfo[moveId].type; + return gTypesInfo[moveType].damageCategory; } static bool32 TryRemoveScreens(u32 battler) @@ -11100,9 +11223,9 @@ void TryRestoreHeldItems(void) for (i = 0; i < PARTY_SIZE; i++) { // Check if held items should be restored after battle based on generation - if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[i].stolen || returnNPCItems) + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen || returnNPCItems) { - u16 lostItem = gBattleStruct->itemLost[i].originalItem; + u16 lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem; // Check if the lost item is a berry and the mon is not holding it if (ItemId_GetPocket(lostItem) == POCKET_BERRIES && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != lostItem) @@ -11163,8 +11286,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) @@ -11343,7 +11466,7 @@ bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move) && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef) && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff - if ((IsDynamaxed(battlerAtk) || gBattleStruct->dynamax.playerSelect) + if ((GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX)) && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)) return FALSE; return TRUE; @@ -11382,7 +11505,7 @@ void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) void RecalcBattlerStats(u32 battler, struct Pokemon *mon) { CalculateMonStats(mon); - if (IsDynamaxed(battler) && gChosenActionByBattler[battler] != B_ACTION_SWITCH) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gChosenActionByBattler[battler] != B_ACTION_SWITCH) ApplyDynamaxHPMultiplier(battler, mon); CopyMonLevelAndBaseStatsToBattleMon(battler, mon); CopyMonAbilityAndTypesToBattleMon(battler, mon); @@ -11586,14 +11709,14 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera) types[2] = gBattleMons[battler].type3; // Handle Terastallization - if (IsTerastallized(battler) && teraType != TYPE_STELLAR && !ignoreTera) + if (GetActiveGimmick(battler) == GIMMICK_TERA && teraType != TYPE_STELLAR && !ignoreTera) return GetBattlerTeraType(battler); // Handle Roost's Flying-type suppression if (typeIndex == 0 || typeIndex == 1) { if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST - && !IsTerastallized(battler)) + && GetActiveGimmick(battler) != GIMMICK_TERA) { if (types[0] == TYPE_FLYING && types[1] == TYPE_FLYING) return B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY; @@ -11608,7 +11731,7 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera) void RemoveBattlerType(u32 battler, u8 type) { u32 i; - if (IsTerastallized(battler)) // don't remove type if Terastallized + if (GetActiveGimmick(battler) == GIMMICK_TERA) // don't remove type if Terastallized return; for (i = 0; i < 3; i++) { diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 203185cfdc..c000c35808 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -45,12 +45,8 @@ #define STAT_STAGE(battler, stat) (gBattleMons[battler].statStages[stat - 1]) // Function Declarations -static void SpriteCB_ZMoveTrigger(struct Sprite *sprite); -static u16 GetSignatureZMove(u16 move, u16 species, u16 item); static void ZMoveSelectionDisplayPpNumber(u32 battler); static void ZMoveSelectionDisplayPower(u16 move, u16 zMove); -static void ShowZMoveTriggerSprite(u8 battleId); -static bool32 AreStatsMaxed(u8 battler, u8 n); static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler); // Const Data @@ -108,260 +104,130 @@ static const u8 sText_RecoverHP[] = _("Recover HP"); static const u8 sText_HealAllyHP[] = _("Heal Replacement HP"); static const u8 sText_PowerColon[] = _("Power: "); -static const u32 sZMoveTriggerGfx[] = INCBIN_U32("graphics/battle_interface/z_move_trigger.4bpp.lz"); -static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal"); - -static const struct CompressedSpriteSheet sSpriteSheet_ZMoveTrigger = { - sZMoveTriggerGfx, (32 * 32) / 2, TAG_ZMOVE_TRIGGER_TILE -}; - -static const struct SpritePalette sSpritePalette_ZMoveTrigger = { - sZMoveTriggerPal, TAG_ZMOVE_TRIGGER_PAL -}; - -static const struct OamData sOamData_ZMoveTrigger = -{ - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .priority = 1, -}; - -static const struct SpriteTemplate sSpriteTemplate_ZMoveTrigger = -{ - .tileTag = TAG_ZMOVE_TRIGGER_TILE, - .paletteTag = TAG_ZMOVE_TRIGGER_PAL, - .oam = &sOamData_ZMoveTrigger, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_ZMoveTrigger -}; - // Functions -bool8 IsZMove(u16 move) +bool32 IsZMove(u32 move) { return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE; } -void QueueZMove(u8 battler, u16 baseMove) +bool32 CanUseZMove(u32 battler) { - gBattleStruct->zmove.toBeUsed[battler] = gBattleStruct->zmove.chosenZMove; - gBattleStruct->zmove.baseMoves[battler] = baseMove; - if (gBattleStruct->zmove.chosenZMove == MOVE_LIGHT_THAT_BURNS_THE_SKY) - gBattleStruct->zmove.categories[battler] = GetCategoryBasedOnStats(battler); - else - gBattleStruct->zmove.categories[battler] = gMovesInfo[baseMove].category; + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + + // Check if Player has Z-Power Ring. + if (!TESTING && (battler == B_POSITION_PLAYER_LEFT + || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + return FALSE; + + // Add '| BATTLE_TYPE_FRONTIER' to below if issues occur + if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL)) + return FALSE; + + // Check if Trainer has already used a Z-Move. + if (HasTrainerUsedGimmick(battler, GIMMICK_Z_MOVE)) + return FALSE; + + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE && GetActiveGimmick(battler) != GIMMICK_ULTRA_BURST) + return FALSE; + + // Check if battler isn't holding a Z-Crystal. + if (holdEffect != HOLD_EFFECT_Z_CRYSTAL) + return FALSE; + + // All checks passed! + return TRUE; } -bool32 IsViableZMove(u8 battler, u16 move) +u32 GetUsableZMove(u32 battler, u32 move) +{ + u32 item = gBattleMons[battler].item; + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + { + u16 zMove = GetSignatureZMove(move, gBattleMons[battler].species, item); + if (zMove != MOVE_NONE) + return zMove; // Signature z move exists + + if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gMovesInfo[move].type == ItemId_GetSecondaryId(item)) + return GetTypeBasedZMove(move); + } + + return MOVE_NONE; +} + +void ActivateZMove(u32 battler) +{ + gBattleStruct->zmove.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + SetActiveGimmick(battler, GIMMICK_Z_MOVE); +} + +bool32 IsViableZMove(u32 battler, u32 move) { u32 item; - u16 holdEffect; + u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); int moveSlotIndex; item = gBattleMons[battler].item; + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_Z_MOVE) + return FALSE; + for (moveSlotIndex = 0; moveSlotIndex < MAX_MON_MOVES; moveSlotIndex++) { if (gBattleMons[battler].moves[moveSlotIndex] == move && gBattleMons[battler].pp[moveSlotIndex] == 0) return FALSE; } - if (gBattleStruct->zmove.used[battler]) + // Check if Player has Z-Power Ring. + if ((battler == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + { return FALSE; + } - // Add '| BATTLE_TYPE_FRONTIER' to below if issues occur - if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL)) - return FALSE; - - if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) - return FALSE; - - if (item == ITEM_ENIGMA_BERRY_E_READER) - return FALSE; // HoldEffect = gEnigmaBerries[battler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(item); - + // Check for signature Z-Move or type-based Z-Move. if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) { u16 zMove = GetSignatureZMove(move, gBattleMons[battler].species, item); if (zMove != MOVE_NONE) - { - gBattleStruct->zmove.chosenZMove = zMove; // Signature z move exists return TRUE; - } - if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gMovesInfo[move].type == ItemId_GetSecondaryId(item)) - { - gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battler); + if (move != MOVE_NONE && gMovesInfo[move].type == ItemId_GetSecondaryId(item)) return TRUE; - } } return FALSE; } -void GetUsableZMoves(u8 battler, u16 *moves) +void AssignUsableZMoves(u32 battler, u16 *moves) { u32 i; gBattleStruct->zmove.possibleZMoves[battler] = 0; for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && IsViableZMove(battler, moves[i])) - gBattleStruct->zmove.possibleZMoves[battler] |= (1 << i); + gBattleStruct->zmove.possibleZMoves[battler] |= gBitTable[i]; } } -bool32 IsZMoveUsable(u8 battler, u16 moveIndex) +bool32 TryChangeZTrigger(u32 battler, u32 moveIndex) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(battler) && gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(battler)] != MOVE_NONE) - return FALSE; // Player's other mon has a z move queued up already - if (gBattleStruct->zmove.possibleZMoves[battler] & (1 << moveIndex)) - return TRUE; - return FALSE; -} - -bool32 TryChangeZIndicator(u8 battler, u8 moveIndex) -{ - bool32 viableZMove = IsZMoveUsable(battler, moveIndex); + bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[moveIndex]) != 0; if (gBattleStruct->zmove.viable && !viableZMove) - HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out + HideGimmickTriggerSprite(); // Was a viable z move, now is not -> slide out else if (!gBattleStruct->zmove.viable && viableZMove) - ShowZMoveTriggerSprite(battler); // Was not a viable z move, now is -> slide back in + CreateGimmickTriggerSprite(battler); // Was not a viable z move, now is -> slide back in + + gBattleStruct->zmove.viable = viableZMove; return viableZMove; } -#define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29) -#define SINGLES_Z_TRIGGER_POS_X_PRIORITY (29) -#define SINGLES_Z_TRIGGER_POS_X_SLIDE (15) -#define SINGLES_Z_TRIGGER_POS_Y_DIFF (-10) - -#define DOUBLES_Z_TRIGGER_POS_X_OPTIMAL SINGLES_Z_TRIGGER_POS_X_OPTIMAL -#define DOUBLES_Z_TRIGGER_POS_X_PRIORITY SINGLES_Z_TRIGGER_POS_X_PRIORITY -#define DOUBLES_Z_TRIGGER_POS_X_SLIDE SINGLES_Z_TRIGGER_POS_X_SLIDE -#define DOUBLES_Z_TRIGGER_POS_Y_DIFF (-4) - -#define tBattler data[0] -#define tHide data[1] - -void CreateZMoveTriggerSprite(u8 battler, bool8 viable) -{ - s16 x, y; - - LoadSpritePalette(&sSpritePalette_ZMoveTrigger); - if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF) - LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_ZMoveTrigger); - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - x = gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_Z_TRIGGER_POS_X_SLIDE; - y = gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_Z_TRIGGER_POS_Y_DIFF; - } - else - { - x = gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE; - y = gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF; - } - - if (gBattleStruct->zmove.triggerSpriteId == 0xFF) - gBattleStruct->zmove.triggerSpriteId = CreateSprite(&sSpriteTemplate_ZMoveTrigger, x, y, 0); - - gSprites[gBattleStruct->zmove.triggerSpriteId].tBattler = battler; - gSprites[gBattleStruct->zmove.triggerSpriteId].tHide = (viable == TRUE) ? FALSE : TRUE; -} - -static void SpriteCB_ZMoveTrigger(struct Sprite *sprite) -{ - s32 xSlide, xPriority, xOptimal; - s32 yDiff; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - xSlide = DOUBLES_Z_TRIGGER_POS_X_SLIDE; - xPriority = DOUBLES_Z_TRIGGER_POS_X_PRIORITY; - xOptimal = DOUBLES_Z_TRIGGER_POS_X_OPTIMAL; - yDiff = DOUBLES_Z_TRIGGER_POS_Y_DIFF; - } - else - { - xSlide = SINGLES_Z_TRIGGER_POS_X_SLIDE; - xPriority = SINGLES_Z_TRIGGER_POS_X_PRIORITY; - xOptimal = SINGLES_Z_TRIGGER_POS_X_OPTIMAL; - yDiff = SINGLES_Z_TRIGGER_POS_Y_DIFF; - } - - if (sprite->tHide) - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - sprite->x++; - - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) - sprite->oam.priority = 2; - else - sprite->oam.priority = 1; - - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) - DestroyZMoveTriggerSprite(); - } - else - { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) - { - sprite->x--; - sprite->oam.priority = 2; - } - else - { - sprite->oam.priority = 1; - } - sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; - sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - } -} - -bool32 IsZMoveTriggerSpriteActive(void) -{ - if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF) - return FALSE; - else if (IndexOfSpritePaletteTag(TAG_ZMOVE_TRIGGER_PAL) != 0xFF) - return TRUE; - else - return FALSE; -} - -void HideZMoveTriggerSprite(void) -{ - struct Sprite *sprite; - gBattleStruct->zmove.viable = FALSE; - if (gBattleStruct->zmove.triggerSpriteId >= MAX_SPRITES) - return; - sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; - sprite->tHide = TRUE; -} - -static void ShowZMoveTriggerSprite(u8 battler) -{ - gBattleStruct->zmove.viable = TRUE; - CreateZMoveTriggerSprite(battler, TRUE); -} - -void DestroyZMoveTriggerSprite(void) -{ - FreeSpritePaletteByTag(TAG_ZMOVE_TRIGGER_PAL); - FreeSpriteTilesByTag(TAG_ZMOVE_TRIGGER_TILE); - if (gBattleStruct->zmove.triggerSpriteId != 0xFF) - DestroySprite(&gSprites[gBattleStruct->zmove.triggerSpriteId]); - - gBattleStruct->zmove.triggerSpriteId = 0xFF; -} - -static u16 GetSignatureZMove(u16 move, u16 species, u16 item) +u32 GetSignatureZMove(u32 move, u32 species, u32 item) { u32 i; @@ -375,13 +241,17 @@ static u16 GetSignatureZMove(u16 move, u16 species, u16 item) return MOVE_NONE; } -u16 GetTypeBasedZMove(u16 move, u8 battler) +u32 GetTypeBasedZMove(u32 move) { - u8 moveType = gMovesInfo[move].type; + u32 moveType = gMovesInfo[move].type; if (moveType >= NUMBER_OF_MON_TYPES) moveType = TYPE_MYSTERY; + // Z-Weather Ball changes types, however Revelation Dance, -ate ability affected moves, and Hidden Power do not + if (gBattleStruct->dynamicMoveType && gMovesInfo[move].effect == EFFECT_WEATHER_BALL) + moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + // Get Z-Move from type if (gTypesInfo[moveType].zMove == MOVE_NONE) // failsafe return gTypesInfo[0].zMove; @@ -544,7 +414,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { - u8 *txtPtr; + u8 *txtPtr, *end; u8 zMoveType; GET_MOVE_TYPE(zMove, zMoveType); @@ -554,7 +424,8 @@ static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) *(txtPtr)++ = EXT_CTRL_CODE_FONT; *(txtPtr)++ = FONT_NORMAL; - StringCopy(txtPtr, gTypesInfo[zMoveType].name); + end = StringCopy(txtPtr, gTypesInfo[zMoveType].name); + PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } @@ -564,20 +435,20 @@ static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) void SetZEffect(void) { u32 i; + u32 effect = gMovesInfo[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMove.effect; - gBattleStruct->zmove.zStatusActive = TRUE; - if (gBattleStruct->zmove.effect == Z_EFFECT_CURSE) + if (effect == Z_EFFECT_CURSE) { if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - gBattleStruct->zmove.effect = Z_EFFECT_RECOVER_HP; + effect = Z_EFFECT_RECOVER_HP; else - gBattleStruct->zmove.effect = Z_EFFECT_ATK_UP_1; + effect = Z_EFFECT_ATK_UP_1; } gBattleScripting.savedStatChanger = gBattleScripting.statChanger; // Save used move's stat changer (e.g. for Z-Growl) gBattleScripting.battler = gBattlerAttacker; - switch (gBattleStruct->zmove.effect) + switch (effect) { case Z_EFFECT_RESET_STATS: for (i = 0; i < NUM_BATTLE_STATS - 1; i++) @@ -590,22 +461,27 @@ void SetZEffect(void) gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; break; case Z_EFFECT_ALL_STATS_UP_1: - if (!AreStatsMaxed(gBattlerAttacker, STAT_SPDEF)) + { + bool32 canBoost = FALSE; + for (i = STAT_ATK; i < NUM_STATS; i++) // Doesn't increase Acc or Evsn { - for (i = 0; i < STAT_ACC - 1; i++) // Doesn't increase Acc or Evsn + if (STAT_STAGE(gBattlerAttacker, i) < 12) { - if (gBattleMons[gBattlerAttacker].statStages[i] < 12) - ++gBattleMons[gBattlerAttacker].statStages[i]; + canBoost = TRUE; } + } + if (canBoost) + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_ALL_STATS_UP; BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); - gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + gBattlescriptCurrInstr = BattleScript_AllStatsUpZMove; } else { gBattlescriptCurrInstr += Z_EFFECT_BS_LENGTH; } break; + } case Z_EFFECT_BOOST_CRITS: if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY_ANY)) { @@ -646,17 +522,17 @@ void SetZEffect(void) gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; break; case Z_EFFECT_ATK_UP_1 ... Z_EFFECT_EVSN_UP_1: - SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE); + SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE); BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); gBattlescriptCurrInstr = BattleScript_StatUpZMove; break; case Z_EFFECT_ATK_UP_2 ... Z_EFFECT_EVSN_UP_2: - SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE); + SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE); BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); gBattlescriptCurrInstr = BattleScript_StatUpZMove; break; case Z_EFFECT_ATK_UP_3 ... Z_EFFECT_EVSN_UP_3: - SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE); + SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE); BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); gBattlescriptCurrInstr = BattleScript_StatUpZMove; break; @@ -664,22 +540,9 @@ void SetZEffect(void) gBattlescriptCurrInstr += Z_EFFECT_BS_LENGTH; break; } - - gBattleStruct->zmove.zStatusActive = FALSE; } -static bool32 AreStatsMaxed(u8 battler, u8 n) -{ - u32 i; - for (i = STAT_ATK; i <= n; i++) - { - if (STAT_STAGE(battler, i) < MAX_STAT_STAGE) - return FALSE; - } - return TRUE; -} - -u16 GetZMovePower(u16 move) +u32 GetZMovePower(u32 move) { if (gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) return 0; diff --git a/src/berry_blender.c b/src/berry_blender.c index 3524ad50d2..0af3fd3ba6 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/clock.c b/src/clock.c index 825ccc4448..7061f96b7f 100644 --- a/src/clock.c +++ b/src/clock.c @@ -54,6 +54,7 @@ static void UpdatePerDay(struct Time *localTime) UpdateFrontierGambler(daysSince); SetShoalItemFlag(daysSince); SetRandomLotteryNumber(daysSince); + UpdateDaysPassedSinceFormChange(daysSince); *days = localTime->days; } } diff --git a/src/data/abilities.h b/src/data/abilities.h index 8b81057b4f..ccb27ffe35 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -881,7 +881,11 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SNOW_WARNING] = { .name = _("Snow Warning"), - .description = COMPOUND_STRING("Summons a Hailstorm."), + #if B_SNOW_WARNING >= GEN_9 + .description = COMPOUND_STRING("Summons snow in battle."), + #else + .description = COMPOUND_STRING("Summons hail in battle."), + #endif .aiRating = 8, }, @@ -2548,7 +2552,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_anim.h b/src/data/battle_anim.h index 485519cdc5..371fb61a48 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1454,6 +1454,10 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_SyrupShell, 0x2000, ANIM_TAG_SYRUP_SHELL_YELLOW}, {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_RED}, {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_YELLOW}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_GRASS}, + {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_FIRE}, + {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_ROCK}, + {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_WATER}, {gBattleAnimSpriteGfx_TeraCrystal, 0x800, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpriteGfx_TeraShatter, 0x0180, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpriteGfx_DreepyMissile, 0x200, ANIM_TAG_DREEPY_SHINY}, @@ -1912,6 +1916,10 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SHELL_YELLOW}, {gBattleAnimSpritePal_SyrupRed, ANIM_TAG_SYRUP_SPLAT_RED}, {gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SPLAT_YELLOW}, + {gBattleAnimSpritePal_IvyCudgelGrass, ANIM_TAG_IVY_CUDGEL_GRASS}, + {gBattleAnimSpritePal_IvyCudgelFire, ANIM_TAG_IVY_CUDGEL_FIRE}, + {gBattleAnimSpritePal_IvyCudgelRock, ANIM_TAG_IVY_CUDGEL_ROCK}, + {gBattleAnimSpritePal_IvyCudgelWater, ANIM_TAG_IVY_CUDGEL_WATER}, {gBattleAnimSpritePal_TeraCrystal, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpritePal_TeraShatter, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpritePal_DreepyMissileShiny, ANIM_TAG_DREEPY_SHINY}, diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h index 7299e78a03..e83a25e829 100644 --- a/src/data/battle_frontier/battle_frontier_mons.h +++ b/src/data/battle_frontier/battle_frontier_mons.h @@ -2804,7 +2804,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_LUDICOLO, .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH}, .heldItem = ITEM_SHELL_BELL, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_QUIET }, [FRONTIER_MON_HYPNO_1] = { @@ -2853,7 +2853,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_ELECTABUZZ, .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN}, .heldItem = ITEM_CHERI_BERRY, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_RELAXED }, [FRONTIER_MON_TAUROS_1] = { @@ -2909,7 +2909,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_MAGMAR, .moves = {MOVE_FLAMETHROWER, MOVE_SMOKESCREEN, MOVE_BRICK_BREAK, MOVE_BARRIER}, .heldItem = ITEM_RAWST_BERRY, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_RELAXED }, [FRONTIER_MON_CRADILY_1] = { @@ -3245,7 +3245,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_MILOTIC, .moves = {MOVE_HYDRO_PUMP, MOVE_ICY_WIND, MOVE_RECOVER, MOVE_MIRROR_COAT}, .heldItem = ITEM_LUM_BERRY, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_MODEST }, [FRONTIER_MON_ARCANINE_1] = { @@ -3714,7 +3714,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_TENTACRUEL, .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_SURF}, .heldItem = ITEM_LEFTOVERS, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_HARDY }, [FRONTIER_MON_AERODACTYL_2] = { @@ -5870,7 +5870,7 @@ const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .species = SPECIES_REGICE, .moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_COUNTER}, .heldItem = ITEM_LEFTOVERS, - .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0), + .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0), .nature = NATURE_BRAVE }, [FRONTIER_MON_REGICE_6] = { diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 0b23c30817..f970f0e9f7 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2243,4 +2243,16 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, + + [EFFECT_GUARDIAN_OF_ALOLA] = + { + .battleScript = BattleScript_DamageToQuarterTargetHP, + .battleTvScore = 0, // TODO: Assign points + }, + + [EFFECT_SHELL_SIDE_ARM] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, }; diff --git a/src/data/battle_partners.h b/src/data/battle_partners.h index ae0b753cb3..95866d24fa 100644 --- a/src/data/battle_partners.h +++ b/src/data/battle_partners.h @@ -2,7 +2,7 @@ // DO NOT MODIFY THIS FILE! It is auto-generated from src/data/battle_partners.party // // If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE -// in include/config.h and remove this notice. +// in include/config/general.h and remove this notice. // Use sed -i '/^#line/d' 'src/data/battle_partners.h' to remove #line markers. // diff --git a/src/data/gimmicks.h b/src/data/gimmicks.h new file mode 100644 index 0000000000..95a233e3fe --- /dev/null +++ b/src/data/gimmicks.h @@ -0,0 +1,54 @@ +#include "graphics/gimmicks.h" + +// Gimmick data + +const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = +{ + [GIMMICK_NONE] = {0}, + [GIMMICK_MEGA] = + { + .triggerSheet = &sSpriteSheet_MegaTrigger, + .triggerPal = &sSpritePalette_MegaTrigger, + .triggerTemplate = &sSpriteTemplate_GimmickTrigger, + .indicatorSheet = &sSpriteSheet_MegaIndicator, + .indicatorPal = &sSpritePalette_MegaIndicator, + .CanActivate = CanMegaEvolve, + .ActivateGimmick = ActivateMegaEvolution, + }, + [GIMMICK_Z_MOVE] = + { + .triggerSheet = &sSpriteSheet_ZMoveTrigger, + .triggerPal = &sSpritePalette_ZMoveTrigger, + .triggerTemplate = &sSpriteTemplate_GimmickTrigger, + .CanActivate = CanUseZMove, + .ActivateGimmick = ActivateZMove, + }, + [GIMMICK_ULTRA_BURST] = + { + .triggerSheet = &sSpriteSheet_BurstTrigger, + .triggerPal = &sSpritePalette_BurstTrigger, + .triggerTemplate = &sSpriteTemplate_GimmickTrigger, + .CanActivate = CanUltraBurst, + .ActivateGimmick = ActivateUltraBurst, + }, + [GIMMICK_DYNAMAX] = + { + .triggerSheet = &sSpriteSheet_DynamaxTrigger, + .triggerPal = &sSpritePalette_DynamaxTrigger, + .triggerTemplate = &sSpriteTemplate_GimmickTrigger, + .indicatorSheet = &sSpriteSheet_DynamaxIndicator, + .indicatorPal = &sSpritePalette_MiscIndicator, + .CanActivate = CanDynamax, + .ActivateGimmick = ActivateDynamax, + }, + [GIMMICK_TERA] = + { + .triggerSheet = &sSpriteSheet_TeraTrigger, + .triggerPal = &sSpritePalette_TeraTrigger, + .triggerTemplate = &sSpriteTemplate_GimmickTrigger, + .indicatorSheet = NULL, // handled separately + .indicatorPal = &sSpritePalette_TeraIndicator, + .CanActivate = CanTerastallize, + .ActivateGimmick = ActivateTera, + } +}; diff --git a/src/data/graphics/gimmicks.h b/src/data/graphics/gimmicks.h new file mode 100644 index 0000000000..5299f74fc3 --- /dev/null +++ b/src/data/graphics/gimmicks.h @@ -0,0 +1,153 @@ +// trigger data +static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); +static const u8 ALIGNED(4) sZMoveTriggerGfx[] = INCBIN_U8("graphics/battle_interface/z_move_trigger.4bpp"); +static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp"); +static const u8 ALIGNED(4) sDynamaxTriggerGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_trigger.4bpp"); +static const u8 ALIGNED(4) sTeraTriggerGfx[] = INCBIN_U8("graphics/battle_interface/tera_trigger.4bpp"); + +static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); +static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal"); +static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal"); +static const u16 sDynamaxTriggerPal[] = INCBIN_U16("graphics/battle_interface/dynamax_trigger.gbapal"); +static const u16 sTeraTriggerPal[] = INCBIN_U16("graphics/battle_interface/tera_trigger.gbapal"); + +static const struct SpriteSheet sSpriteSheet_MegaTrigger = {sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpriteSheet sSpriteSheet_ZMoveTrigger = {sZMoveTriggerGfx, sizeof(sZMoveTriggerGfx), TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpriteSheet sSpriteSheet_BurstTrigger = {sBurstTriggerGfx, sizeof(sBurstTriggerGfx), TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpriteSheet sSpriteSheet_DynamaxTrigger = {sDynamaxTriggerGfx, sizeof(sDynamaxTriggerGfx), TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpriteSheet sSpriteSheet_TeraTrigger = {sTeraTriggerGfx, sizeof(sTeraTriggerGfx), TAG_GIMMICK_TRIGGER_TILE}; + +static const struct SpritePalette sSpritePalette_MegaTrigger = {sMegaTriggerPal, TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpritePalette sSpritePalette_ZMoveTrigger = {sZMoveTriggerPal, TAG_GIMMICK_TRIGGER_PAL}; +static const struct SpritePalette sSpritePalette_BurstTrigger = {sBurstTriggerPal, TAG_GIMMICK_TRIGGER_TILE}; +static const struct SpritePalette sSpritePalette_DynamaxTrigger = {sDynamaxTriggerPal, TAG_GIMMICK_TRIGGER_PAL}; +static const struct SpritePalette sSpritePalette_TeraTrigger = {sTeraTriggerPal, TAG_GIMMICK_TRIGGER_TILE}; + +static const struct OamData sOamData_GimmickTrigger = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_GimmickTriggerOff[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_GimmickTriggerOn[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_GimmickTrigger[] = +{ + sSpriteAnim_GimmickTriggerOff, + sSpriteAnim_GimmickTriggerOn, +}; + +static void SpriteCb_GimmickTrigger(struct Sprite *sprite); +static const struct SpriteTemplate sSpriteTemplate_GimmickTrigger = +{ + .tileTag = TAG_GIMMICK_TRIGGER_TILE, + .paletteTag = TAG_GIMMICK_TRIGGER_PAL, + .oam = &sOamData_GimmickTrigger, + .anims = sSpriteAnimTable_GimmickTrigger, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickTrigger, +}; + +// indicator data +static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u8 ALIGNED(4) sDynamaxIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_indicator.4bpp"); +static const u8 ALIGNED(4) sNormalIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/normal_indicator.4bpp"); +static const u8 ALIGNED(4) sFightingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fighting_indicator.4bpp"); +static const u8 ALIGNED(4) sFlyingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/flying_indicator.4bpp"); +static const u8 ALIGNED(4) sPoisonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/poison_indicator.4bpp"); +static const u8 ALIGNED(4) sGroundIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ground_indicator.4bpp"); +static const u8 ALIGNED(4) sRockIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/rock_indicator.4bpp"); +static const u8 ALIGNED(4) sBugIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/bug_indicator.4bpp"); +static const u8 ALIGNED(4) sGhostIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ghost_indicator.4bpp"); +static const u8 ALIGNED(4) sSteelIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/steel_indicator.4bpp"); +static const u8 ALIGNED(4) sFireIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fire_indicator.4bpp"); +static const u8 ALIGNED(4) sWaterIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/water_indicator.4bpp"); +static const u8 ALIGNED(4) sGrassIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/grass_indicator.4bpp"); +static const u8 ALIGNED(4) sElectricIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/electric_indicator.4bpp"); +static const u8 ALIGNED(4) sPsychicIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/psychic_indicator.4bpp"); +static const u8 ALIGNED(4) sIceIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ice_indicator.4bpp"); +static const u8 ALIGNED(4) sDragonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dragon_indicator.4bpp"); +static const u8 ALIGNED(4) sDarkIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dark_indicator.4bpp"); +static const u8 ALIGNED(4) sFairyIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fairy_indicator.4bpp"); +static const u8 ALIGNED(4) sStellarIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/stellar_indicator.4bpp"); + +static const u16 sMiscIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal"); // has room for more colors +static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); +static const u16 sTeraIndicatorPal[] = INCBIN_U16("graphics/battle_interface/tera_indicator.gbapal"); + +static const struct SpriteSheet sSpriteSheet_MegaIndicator = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE}; +static const struct SpriteSheet sSpriteSheet_AlphaIndicator = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE}; +static const struct SpriteSheet sSpriteSheet_OmegaIndicator = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE}; +static const struct SpriteSheet sSpriteSheet_DynamaxIndicator = {sDynamaxIndicatorGfx, sizeof(sDynamaxIndicatorGfx), TAG_DYNAMAX_INDICATOR_TILE}; +static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] = +{ + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, + {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE}, + {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE}, + {sPoisonIndicatorGfx, sizeof(sPoisonIndicatorGfx), TAG_POISON_INDICATOR_TILE}, + {sGroundIndicatorGfx, sizeof(sGroundIndicatorGfx), TAG_GROUND_INDICATOR_TILE}, + {sRockIndicatorGfx, sizeof(sRockIndicatorGfx), TAG_ROCK_INDICATOR_TILE}, + {sBugIndicatorGfx, sizeof(sBugIndicatorGfx), TAG_BUG_INDICATOR_TILE}, + {sGhostIndicatorGfx, sizeof(sGhostIndicatorGfx), TAG_GHOST_INDICATOR_TILE}, + {sSteelIndicatorGfx, sizeof(sSteelIndicatorGfx), TAG_STEEL_INDICATOR_TILE}, + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_MYSTERY + {sFireIndicatorGfx, sizeof(sFireIndicatorGfx), TAG_FIRE_INDICATOR_TILE}, + {sWaterIndicatorGfx, sizeof(sWaterIndicatorGfx), TAG_WATER_INDICATOR_TILE}, + {sGrassIndicatorGfx, sizeof(sGrassIndicatorGfx), TAG_GRASS_INDICATOR_TILE}, + {sElectricIndicatorGfx, sizeof(sElectricIndicatorGfx), TAG_ELECTRIC_INDICATOR_TILE}, + {sPsychicIndicatorGfx, sizeof(sPsychicIndicatorGfx), TAG_PSYCHIC_INDICATOR_TILE}, + {sIceIndicatorGfx, sizeof(sIceIndicatorGfx), TAG_ICE_INDICATOR_TILE}, + {sDragonIndicatorGfx, sizeof(sDragonIndicatorGfx), TAG_DRAGON_INDICATOR_TILE}, + {sDarkIndicatorGfx, sizeof(sDarkIndicatorGfx), TAG_DARK_INDICATOR_TILE}, + {sFairyIndicatorGfx, sizeof(sFairyIndicatorGfx), TAG_FAIRY_INDICATOR_TILE}, + {sStellarIndicatorGfx, sizeof(sStellarIndicatorGfx), TAG_STELLAR_INDICATOR_TILE}, + {0} +}; + +static const struct SpritePalette sSpritePalette_MiscIndicator = {sMiscIndicatorPal, TAG_MISC_INDICATOR_PAL}; +static const struct SpritePalette sSpritePalette_MegaIndicator = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL}; +static const struct SpritePalette sSpritePalette_TeraIndicator = {sTeraIndicatorPal, TAG_TERA_INDICATOR_PAL}; + +static const struct OamData sOamData_GimmickIndicator = +{ + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 1, +}; + +static void SpriteCb_GimmickIndicator(struct Sprite *sprite); +static const struct SpriteTemplate sSpriteTemplate_GimmickIndicator = +{ + .tileTag = TAG_NORMAL_INDICATOR_TILE, // updated dynamically + .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically + .oam = &sOamData_GimmickIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickIndicator, +}; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 4e3cccba1e..37258b7f54 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -21833,25 +21833,25 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/shiny.gbapal.lz"); const u8 gMonIcon_OgerponCornerstoneMask[] = INCBIN_U8("graphics/pokemon/ogerpon/cornerstone/icon.4bpp"); - // const u32 gMonFrontPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/front.4bpp.lz"); - // const u32 gMonPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/normal.gbapal.lz"); - // const u32 gMonBackPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/back.4bpp.lz"); - // const u32 gMonShinyPalette_OgerponTealMaskTera[]] = INCBIN_U32("graphics/pokemon/ogerpon/tera/shiny.gbapal.lz"); + const u32 gMonFrontPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/front.4bpp.lz"); + const u32 gMonPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/normal.gbapal.lz"); + const u32 gMonBackPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/back.4bpp.lz"); + const u32 gMonShinyPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/shiny.gbapal.lz"); - // const u32 gMonFrontPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/front.4bpp.lz"); - // const u32 gMonPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/normal.gbapal.lz"); - // const u32 gMonBackPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/back.4bpp.lz"); - // const u32 gMonShinyPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/shiny.gbapal.lz"); + const u32 gMonFrontPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/front.4bpp.lz"); + const u32 gMonPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/normal.gbapal.lz"); + const u32 gMonBackPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/back.4bpp.lz"); + const u32 gMonShinyPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/shiny.gbapal.lz"); - // const u32 gMonFrontPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/front.4bpp.lz"); - // const u32 gMonPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/normal.gbapal.lz"); - // const u32 gMonBackPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/back.4bpp.lz"); - // const u32 gMonShinyPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/shiny.gbapal.lz"); + const u32 gMonFrontPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/front.4bpp.lz"); + const u32 gMonPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/normal.gbapal.lz"); + const u32 gMonBackPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/back.4bpp.lz"); + const u32 gMonShinyPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/shiny.gbapal.lz"); - // const u32 gMonFrontPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/front.4bpp.lz"); - // const u32 gMonPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/normal.gbapal.lz"); - // const u32 gMonBackPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/back.4bpp.lz"); - // const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz"); + const u32 gMonFrontPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/front.4bpp.lz"); + const u32 gMonPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/normal.gbapal.lz"); + const u32 gMonBackPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/back.4bpp.lz"); + const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz"); #if OW_POKEMON_OBJECT_EVENTS // const u32 gObjectEventPic_OgerponTealMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); @@ -21966,10 +21966,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS - // const u32 gMonFrontPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/front.4bpp.lz"); + const u32 gMonPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/footprint.1bpp"); diff --git a/src/data/heal_locations_pkm_center.h b/src/data/heal_locations_pkm_center.h new file mode 100644 index 0000000000..58be0be05e --- /dev/null +++ b/src/data/heal_locations_pkm_center.h @@ -0,0 +1,175 @@ +#define DEFAULT_POKEMON_CENTER_COORDS .x = 7, .y = 4 + +static const struct HealLocation sHealLocationsPokemonCenter[HEAL_LOCATION_COUNT - 1] = +{ + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .x = 2, + .y = 7, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .x = 8, + .y = 7, + }, + [HEAL_LOCATION_PETALBURG_CITY - 1] = + { + .group = MAP_GROUP(PETALBURG_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(PETALBURG_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_SLATEPORT_CITY - 1] = + { + .group = MAP_GROUP(SLATEPORT_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(SLATEPORT_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_MAUVILLE_CITY - 1] = + { + .group = MAP_GROUP(MAUVILLE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(MAUVILLE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_RUSTBORO_CITY - 1] = + { + .group = MAP_GROUP(RUSTBORO_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(RUSTBORO_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_FORTREE_CITY - 1] = + { + .group = MAP_GROUP(FORTREE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(FORTREE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LILYCOVE_CITY - 1] = + { + .group = MAP_GROUP(LILYCOVE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(LILYCOVE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_MOSSDEEP_CITY - 1] = + { + .group = MAP_GROUP(MOSSDEEP_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(MOSSDEEP_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = + { + .group = MAP_GROUP(SOOTOPOLIS_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(SOOTOPOLIS_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = + { + .group = MAP_GROUP(EVER_GRANDE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(EVER_GRANDE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .x = 2, + .y = 7, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .x = 8, + .y = 7, + }, + [HEAL_LOCATION_OLDALE_TOWN - 1] = + { + .group = MAP_GROUP(OLDALE_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(OLDALE_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_DEWFORD_TOWN - 1] = + { + .group = MAP_GROUP(DEWFORD_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(DEWFORD_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = + { + .group = MAP_GROUP(LAVARIDGE_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(LAVARIDGE_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_FALLARBOR_TOWN - 1] = + { + .group = MAP_GROUP(FALLARBOR_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(FALLARBOR_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_VERDANTURF_TOWN - 1] = + { + .group = MAP_GROUP(VERDANTURF_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(VERDANTURF_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = + { + .group = MAP_GROUP(PACIFIDLOG_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(PACIFIDLOG_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = + { + .group = MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), + .map = MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), + .x = 3, + .y = 4, + }, + [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = + { + .group = MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), + .map = MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), + .x = 15, + .y = 20, + }, + [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = + { + .group = MAP_GROUP(BATTLE_FRONTIER_POKEMON_CENTER_1F), + .map = MAP_NUM(BATTLE_FRONTIER_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, +}; + +#undef DEFAULT_POKEMON_CENTER_COORDS + +// localIds can be found in the generated events.inc file for the specific heal location map +// e.g. for OldaleTown_PokemonCenter1F/events.inc the following entry gets generated: +// object_event 1, OBJ_EVENT_GFX_NURSE, 7, 2, 3, MOVEMENT_TYPE_FACE_DOWN, 0, 0, TRAINER_TYPE_NONE, 0, OldaleTown_PokemonCenter_1F_EventScript_Nurse, 0 +// In this case the localId is 1. +static const u8 sHealNpcLocalId[HEAL_LOCATION_COUNT - 1] = +{ + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = 1, + [HEAL_LOCATION_PETALBURG_CITY - 1] = 1, + [HEAL_LOCATION_SLATEPORT_CITY - 1] = 1, + [HEAL_LOCATION_MAUVILLE_CITY - 1] = 1, + [HEAL_LOCATION_RUSTBORO_CITY - 1] = 1, + [HEAL_LOCATION_FORTREE_CITY - 1] = 1, + [HEAL_LOCATION_LILYCOVE_CITY - 1] = 1, + [HEAL_LOCATION_MOSSDEEP_CITY - 1] = 1, + [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = 1, + [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = 1, + [HEAL_LOCATION_OLDALE_TOWN - 1] = 1, + [HEAL_LOCATION_DEWFORD_TOWN - 1] = 1, + [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = 1, + [HEAL_LOCATION_FALLARBOR_TOWN - 1] = 1, + [HEAL_LOCATION_VERDANTURF_TOWN - 1] = 1, + [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = 1, + [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = 1, + [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = 0, // no heal npc + [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = 1, +}; diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 09586ccd6b..de9f5f212e 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -2,13 +2,52 @@ #include "constants/items.h" #include "constants/moves.h" -static const u16 sContestLadyMonGfxId[] = +struct LilycoveContestLadyValues { - [CONTEST_CATEGORY_COOL] = OBJ_EVENT_GFX_ZIGZAGOON_1, - [CONTEST_CATEGORY_BEAUTY] = OBJ_EVENT_GFX_SKITTY, - [CONTEST_CATEGORY_CUTE] = OBJ_EVENT_GFX_POOCHYENA, - [CONTEST_CATEGORY_SMART] = OBJ_EVENT_GFX_KECLEON, - [CONTEST_CATEGORY_TOUGH] = OBJ_EVENT_GFX_PIKACHU + u16 monGfxId; + u16 monSpecies; + const u8 *monName; + const u8 *categoryName; + const u8 *contestName; +}; + +static const struct LilycoveContestLadyValues sContestLadyValues[] = +{ + [CONTEST_CATEGORY_COOL] = { + .monGfxId = OBJ_EVENT_GFX_ZIGZAGOON_1, + .monSpecies = SPECIES_ZIGZAGOON, + .monName = COMPOUND_STRING("HANDSOME"), + .categoryName = COMPOUND_STRING("coolness"), + .contestName = gText_CoolnessContest, + }, + [CONTEST_CATEGORY_BEAUTY] = { + .monGfxId = OBJ_EVENT_GFX_SKITTY, + .monSpecies = SPECIES_SKITTY, + .monName = COMPOUND_STRING("VINNY"), + .categoryName = COMPOUND_STRING("beauty"), + .contestName = gText_BeautyContest, + }, + [CONTEST_CATEGORY_CUTE] = { + .monGfxId = OBJ_EVENT_GFX_POOCHYENA, + .monSpecies = SPECIES_POOCHYENA, + .monName = COMPOUND_STRING("MOREME"), + .categoryName = COMPOUND_STRING("cuteness"), + .contestName = gText_CutenessContest, + }, + [CONTEST_CATEGORY_SMART] = { + .monGfxId = OBJ_EVENT_GFX_KECLEON, + .monSpecies = SPECIES_KECLEON, + .monName = COMPOUND_STRING("IRONHARD"), + .categoryName = COMPOUND_STRING("smartness"), + .contestName = gText_SmartnessContest, + }, + [CONTEST_CATEGORY_TOUGH] = { + .monGfxId = OBJ_EVENT_GFX_PIKACHU, + .monSpecies = SPECIES_PIKACHU, + .monName = COMPOUND_STRING("MUSCLE"), + .categoryName = COMPOUND_STRING("toughness"), + .contestName = gText_ToughnessContest, + }, }; static const u16 sLilycoveLadyGfxId[] = @@ -290,12 +329,12 @@ static const u16 sQuizLadyPrizes[] = // Favor Lady data static const u8 *const sFavorLadyRequests[] = { - gText_FavorLady_Slippery, - gText_FavorLady_Roundish, - gText_FavorLady_Whamish, - gText_FavorLady_Shiny, - gText_FavorLady_Sticky, - gText_FavorLady_Pointy + COMPOUND_STRING("slippery"), + COMPOUND_STRING("roundish"), + COMPOUND_STRING("wham-ish"), + COMPOUND_STRING("shiny"), + COMPOUND_STRING("sticky"), + COMPOUND_STRING("pointy"), }; static const u16 sFavorLadyAcceptedItems_Slippery[] = @@ -429,40 +468,3 @@ static const u16 sFavorLadyPrizes[] = ITEM_RARE_CANDY, ITEM_PP_MAX }; - - -static const u8 *const sContestLadyMonNames[] = -{ - [CONTEST_CATEGORY_COOL] = gText_ContestLady_Handsome, - [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Vinny, - [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Moreme, - [CONTEST_CATEGORY_SMART] = gText_ContestLady_Ironhard, - [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Muscle -}; - -static const u8 *const sContestLadyCategoryNames[] = -{ - [CONTEST_CATEGORY_COOL] = gText_ContestLady_Coolness, - [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Beauty, - [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Cuteness, - [CONTEST_CATEGORY_SMART] = gText_ContestLady_Smartness, - [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Toughness -}; - -static const u8 *const sContestNames[] = -{ - [CONTEST_CATEGORY_COOL] = gText_CoolnessContest, - [CONTEST_CATEGORY_BEAUTY] = gText_BeautyContest, - [CONTEST_CATEGORY_CUTE] = gText_CutenessContest, - [CONTEST_CATEGORY_SMART] = gText_SmartnessContest, - [CONTEST_CATEGORY_TOUGH] = gText_ToughnessContest -}; - -static const u16 sContestLadyMonSpecies[] = -{ - [CONTEST_CATEGORY_COOL] = SPECIES_ZIGZAGOON, - [CONTEST_CATEGORY_BEAUTY] = SPECIES_SKITTY, - [CONTEST_CATEGORY_CUTE] = SPECIES_POOCHYENA, - [CONTEST_CATEGORY_SMART] = SPECIES_KECLEON, - [CONTEST_CATEGORY_TOUGH] = SPECIES_PIKACHU -}; diff --git a/src/data/moves_info.h b/src/data/moves_info.h index f627e01396..e79f804bb1 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -14718,6 +14718,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, @@ -15646,7 +15647,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."), @@ -18079,7 +18080,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Deals better of physical and\n" "special damage. May poison."), - .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 + .effect = EFFECT_SHELL_SIDE_ARM, .power = 90, .type = TYPE_POISON, .accuracy = 100, @@ -18422,7 +18423,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."), @@ -19002,7 +19003,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, @@ -21042,7 +21043,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, @@ -21106,9 +21107,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = }, [MOVE_GUARDIAN_OF_ALOLA] = { - .name = COMPOUND_STRING("Guardian Of Alola"), + .name = COMPOUND_STRING("Guardian of Alola"), .description = sNullDescription, - .effect = EFFECT_SUPER_FANG, + .effect = EFFECT_GUARDIAN_OF_ALOLA, .power = 1, .type = TYPE_FAIRY, .accuracy = 0, @@ -21152,7 +21153,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Light That Burns The Sky"), .description = sNullDescription, - .effect = EFFECT_HIT, + .effect = EFFECT_PHOTON_GEYSER, .power = 200, .type = TYPE_PSYCHIC, .accuracy = 0, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 78de99f140..52f888a55b 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -779,6 +779,14 @@ static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { }; #endif //P_FAMILY_FROAKIE +#if P_FAMILY_FURFROU +static const struct FormChange sFurfrouFormChangeTable[] = { + {FORM_CHANGE_WITHDRAW, SPECIES_FURFROU_NATURAL}, + {FORM_CHANGE_DAYS_PASSED, SPECIES_FURFROU_NATURAL, 5}, + {FORM_CHANGE_TERMINATOR}, +}; +#endif //P_FAMILY_FURFROU + #if P_FAMILY_HONEDGE static const struct FormChange sAegislashFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, @@ -841,8 +849,9 @@ static const struct FormChange sDiancieFormChangeTable[] = { #if P_FAMILY_HOOPA static const struct FormChange sHoopaFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED}, - {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED}, + {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED}, + {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED}, + {FORM_CHANGE_DAYS_PASSED, SPECIES_HOOPA_CONFINED, 3}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_HOOPA diff --git a/src/data/pokemon/level_up_learnsets/gen_1.h b/src/data/pokemon/level_up_learnsets/gen_1.h index 240a4b0695..e7b9d23238 100644 --- a/src/data/pokemon/level_up_learnsets/gen_1.h +++ b/src/data/pokemon/level_up_learnsets/gen_1.h @@ -5048,7 +5048,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_PROTECT), LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(61, MOVE_ENDEAVOR), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_FAMILY_MUDKIP @@ -17587,6 +17587,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -17645,6 +17647,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -17704,6 +17708,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -18188,6 +18193,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -18524,6 +18533,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -19050,6 +19061,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -19072,6 +19084,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19093,6 +19106,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19115,6 +19129,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -19138,6 +19153,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -19183,6 +19199,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -19203,6 +19220,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -19249,6 +19267,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -19272,11 +19291,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -19473,6 +19493,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -19496,6 +19520,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -19511,8 +19536,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -19564,6 +19589,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -19585,6 +19612,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -19692,8 +19721,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -19702,6 +19731,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -19723,6 +19756,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -19746,6 +19782,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -19833,6 +19870,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_2.h b/src/data/pokemon/level_up_learnsets/gen_2.h index 0995a4c150..991cf5daf8 100644 --- a/src/data/pokemon/level_up_learnsets/gen_2.h +++ b/src/data/pokemon/level_up_learnsets/gen_2.h @@ -5292,7 +5292,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_PROTECT), LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(61, MOVE_ENDEAVOR), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_FAMILY_MUDKIP @@ -17831,6 +17831,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -17889,6 +17891,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -17948,6 +17952,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -18432,6 +18437,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -18768,6 +18777,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -19294,6 +19305,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -19316,6 +19328,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19337,6 +19350,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19359,6 +19373,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -19382,6 +19397,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -19427,6 +19443,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -19447,6 +19464,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -19493,6 +19511,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -19516,11 +19535,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -19717,6 +19737,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -19740,6 +19764,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -19755,8 +19780,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -19808,6 +19833,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -19829,6 +19856,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -19936,8 +19965,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -19946,6 +19975,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -19967,6 +20000,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -19990,6 +20026,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -20077,6 +20114,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_3.h b/src/data/pokemon/level_up_learnsets/gen_3.h index 999c4c29d2..35af1dfbe6 100644 --- a/src/data/pokemon/level_up_learnsets/gen_3.h +++ b/src/data/pokemon/level_up_learnsets/gen_3.h @@ -5518,7 +5518,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_PROTECT), LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE), LEVEL_UP_MOVE(61, MOVE_ENDEAVOR), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_FAMILY_MUDKIP @@ -18057,6 +18057,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -18115,6 +18117,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -18174,6 +18178,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -18658,6 +18663,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -18994,6 +19003,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -19520,6 +19531,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -19542,6 +19554,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19563,6 +19576,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -19585,6 +19599,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -19608,6 +19623,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -19653,6 +19669,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -19673,6 +19690,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -19719,6 +19737,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -19742,11 +19761,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -19943,6 +19963,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -19966,6 +19990,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -19981,8 +20006,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -20034,6 +20059,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -20055,6 +20082,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -20162,8 +20191,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -20172,6 +20201,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -20193,6 +20226,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -20216,6 +20252,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -20303,6 +20340,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_4.h b/src/data/pokemon/level_up_learnsets/gen_4.h index 169281c56f..f620abc3df 100644 --- a/src/data/pokemon/level_up_learnsets/gen_4.h +++ b/src/data/pokemon/level_up_learnsets/gen_4.h @@ -19331,6 +19331,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -19389,6 +19391,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -19448,6 +19452,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -19932,6 +19937,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -20268,6 +20277,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -20794,6 +20805,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -20816,6 +20828,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -20837,6 +20850,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -20859,6 +20873,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -20882,6 +20897,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -20927,6 +20943,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -20947,6 +20964,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -20993,6 +21011,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -21016,11 +21035,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -21217,6 +21237,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -21240,6 +21264,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -21255,8 +21280,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -21308,6 +21333,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -21329,6 +21356,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -21436,8 +21465,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -21446,6 +21475,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -21467,6 +21500,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -21490,6 +21526,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -21577,6 +21614,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_5.h b/src/data/pokemon/level_up_learnsets/gen_5.h index af612cf583..b02bbdf430 100644 --- a/src/data/pokemon/level_up_learnsets/gen_5.h +++ b/src/data/pokemon/level_up_learnsets/gen_5.h @@ -19854,6 +19854,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -19912,6 +19914,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -19971,6 +19975,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -20455,6 +20460,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -20791,6 +20800,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -21317,6 +21328,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -21339,6 +21351,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21360,6 +21373,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21382,6 +21396,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -21405,6 +21420,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -21450,6 +21466,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -21470,6 +21487,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -21516,6 +21534,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -21539,11 +21558,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -21740,6 +21760,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -21763,6 +21787,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -21778,8 +21803,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -21831,6 +21856,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -21852,6 +21879,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -21959,8 +21988,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -21969,6 +21998,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -21990,6 +22023,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -22013,6 +22049,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -22100,6 +22137,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_6.h b/src/data/pokemon/level_up_learnsets/gen_6.h index 59b05f9605..3286c5ce4e 100644 --- a/src/data/pokemon/level_up_learnsets/gen_6.h +++ b/src/data/pokemon/level_up_learnsets/gen_6.h @@ -1787,7 +1787,7 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = { LEVEL_UP_MOVE(44, MOVE_HEX), LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE(56, MOVE_WRING_OUT), + LEVEL_UP_MOVE(56, MOVE_WRING_OUT), LEVEL_UP_END }; #endif //P_FAMILY_TENTACOOL @@ -20504,6 +20504,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -20562,6 +20564,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -20621,6 +20625,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -21105,6 +21110,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21441,6 +21450,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -21967,6 +21978,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -21989,6 +22001,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -22010,6 +22023,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -22032,6 +22046,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -22055,6 +22070,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -22100,6 +22116,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -22120,6 +22137,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -22166,6 +22184,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -22189,11 +22208,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -22390,6 +22410,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -22413,6 +22437,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -22428,8 +22453,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -22481,6 +22506,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -22502,6 +22529,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -22609,8 +22638,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -22619,6 +22648,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -22640,6 +22673,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -22663,6 +22699,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -22750,6 +22787,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_7.h b/src/data/pokemon/level_up_learnsets/gen_7.h index dd561a27fa..1b95b442e0 100644 --- a/src/data/pokemon/level_up_learnsets/gen_7.h +++ b/src/data/pokemon/level_up_learnsets/gen_7.h @@ -20867,6 +20867,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -20925,6 +20927,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -20984,6 +20988,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -21468,6 +21473,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21804,6 +21813,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -22330,6 +22341,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -22352,6 +22364,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -22373,6 +22386,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -22395,6 +22409,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -22418,6 +22433,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -22463,6 +22479,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -22483,6 +22500,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -22529,6 +22547,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -22552,11 +22571,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -22753,6 +22773,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -22776,6 +22800,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -22791,8 +22816,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -22844,6 +22869,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -22865,6 +22892,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -22972,8 +23001,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -22982,6 +23011,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -23003,6 +23036,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -23026,6 +23062,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -23113,6 +23150,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_8.h b/src/data/pokemon/level_up_learnsets/gen_8.h index e774dd088a..4357fdf643 100644 --- a/src/data/pokemon/level_up_learnsets/gen_8.h +++ b/src/data/pokemon/level_up_learnsets/gen_8.h @@ -9937,7 +9937,7 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = { LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(78, MOVE_EXPLOSION), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_FAMILY_REGICE @@ -9960,7 +9960,7 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = { LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM), LEVEL_UP_MOVE(78, MOVE_EXPLOSION), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_FAMILY_REGISTEEL @@ -20438,6 +20438,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -20496,6 +20498,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -20555,6 +20559,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -21039,6 +21044,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21375,6 +21384,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -21901,6 +21912,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -21923,6 +21935,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21944,6 +21957,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21966,6 +21980,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -21989,6 +22004,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -22034,6 +22050,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -22054,6 +22071,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -22100,6 +22118,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -22123,11 +22142,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -22324,6 +22344,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -22347,6 +22371,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -22362,8 +22387,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -22415,6 +22440,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -22436,6 +22463,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -22543,8 +22572,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -22553,6 +22582,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -22574,6 +22607,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -22597,6 +22633,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -22684,6 +22721,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/level_up_learnsets/gen_9.h b/src/data/pokemon/level_up_learnsets/gen_9.h index 21b0a96112..de35a1d36d 100644 --- a/src/data/pokemon/level_up_learnsets/gen_9.h +++ b/src/data/pokemon/level_up_learnsets/gen_9.h @@ -21,15 +21,15 @@ static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = { LEVEL_UP_MOVE(24, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(27, MOVE_SYNTHESIS), LEVEL_UP_MOVE(30, MOVE_WORRY_SEED), - LEVEL_UP_MOVE(33, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(33, MOVE_POWER_WHIP), LEVEL_UP_MOVE(36, MOVE_SOLAR_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sIvysaurLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 9, MOVE_LEECH_SEED), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), @@ -40,29 +40,28 @@ static const struct LevelUpMove sIvysaurLevelUpLearnset[] = { LEVEL_UP_MOVE(30, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(35, MOVE_SYNTHESIS), LEVEL_UP_MOVE(40, MOVE_WORRY_SEED), - LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(45, MOVE_POWER_WHIP), LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sVenusaurLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 9, MOVE_LEECH_SEED), LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), LEVEL_UP_MOVE(20, MOVE_SEED_BOMB), LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(30, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(37, MOVE_SYNTHESIS), LEVEL_UP_MOVE(44, MOVE_WORRY_SEED), - LEVEL_UP_MOVE(51, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(51, MOVE_POWER_WHIP), LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM), LEVEL_UP_END }; @@ -135,7 +134,7 @@ static const struct LevelUpMove sSquirtleLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(33, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE(36, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(36, MOVE_WAVE_CRASH), LEVEL_UP_END }; @@ -153,13 +152,12 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(40, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE(50, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(50, MOVE_WAVE_CRASH), LEVEL_UP_END }; static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLASH_CANNON), - LEVEL_UP_MOVE( 1, MOVE_FLASH_CANNON), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -173,7 +171,7 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_SHELL_SMASH), LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE(56, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(56, MOVE_WAVE_CRASH), LEVEL_UP_END }; #endif //P_FAMILY_SQUIRTLE @@ -444,8 +442,8 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_GLARE), LEVEL_UP_MOVE(17, MOVE_SCREECH), LEVEL_UP_MOVE(20, MOVE_ACID), - LEVEL_UP_MOVE(25, MOVE_STOCKPILE), LEVEL_UP_MOVE(25, MOVE_SWALLOW), + LEVEL_UP_MOVE(25, MOVE_STOCKPILE), LEVEL_UP_MOVE(25, MOVE_SPIT_UP), LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(33, MOVE_SLUDGE_BOMB), @@ -459,21 +457,18 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = { static const struct LevelUpMove sArbokLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CRUNCH), - LEVEL_UP_MOVE( 1, MOVE_CRUNCH), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - LEVEL_UP_MOVE( 1, MOVE_WRAP), - LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 1, MOVE_BITE), - LEVEL_UP_MOVE( 4, MOVE_POISON_STING), - LEVEL_UP_MOVE( 9, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_GLARE), LEVEL_UP_MOVE(17, MOVE_SCREECH), LEVEL_UP_MOVE(20, MOVE_ACID), - LEVEL_UP_MOVE(27, MOVE_STOCKPILE), LEVEL_UP_MOVE(27, MOVE_SWALLOW), + LEVEL_UP_MOVE(27, MOVE_STOCKPILE), LEVEL_UP_MOVE(27, MOVE_SPIT_UP), LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY), LEVEL_UP_MOVE(39, MOVE_SLUDGE_BOMB), @@ -600,11 +595,11 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = { }; static const struct LevelUpMove sSandslashLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 9, MOVE_ROLLOUT), LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER), LEVEL_UP_MOVE(15, MOVE_RAPID_SPIN), @@ -623,8 +618,8 @@ static const struct LevelUpMove sSandslashLevelUpLearnset[] = { #if P_ALOLAN_FORMS static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 3, MOVE_MIST), LEVEL_UP_MOVE( 6, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 9, MOVE_ROLLOUT), @@ -638,33 +633,32 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(33, MOVE_IRON_HEAD), LEVEL_UP_MOVE(36, MOVE_GYRO_BALL), LEVEL_UP_MOVE(39, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(42, MOVE_HAIL), + LEVEL_UP_MOVE(42, MOVE_SNOWSCAPE), LEVEL_UP_MOVE(45, MOVE_BLIZZARD), LEVEL_UP_END }; static const struct LevelUpMove sSandslashAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR), - LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR), - LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), - LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_MIST), + LEVEL_UP_MOVE( 1, MOVE_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_SWIFT), + LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), - LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - LEVEL_UP_MOVE( 1, MOVE_SWIFT), - LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE( 1, MOVE_SLASH), - LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD), + LEVEL_UP_MOVE( 1, MOVE_SNOWSCAPE), LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE( 1, MOVE_HAIL), - LEVEL_UP_MOVE( 1, MOVE_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - LEVEL_UP_MOVE( 1, MOVE_MIST), - LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_SLASH), + LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), LEVEL_UP_END }; #endif //P_ALOLAN_FORMS @@ -707,6 +701,7 @@ static const struct LevelUpMove sNidorinaLevelUpLearnset[] = { static const struct LevelUpMove sNidoqueenLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER), + LEVEL_UP_MOVE( 1, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), @@ -760,6 +755,7 @@ static const struct LevelUpMove sNidorinoLevelUpLearnset[] = { static const struct LevelUpMove sNidokingLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_MEGAHORN), + LEVEL_UP_MOVE( 1, MOVE_SLUDGE_WAVE), LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), @@ -781,8 +777,8 @@ static const struct LevelUpMove sNidokingLevelUpLearnset[] = { #if P_FAMILY_CLEFAIRY #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sCleffaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 4, MOVE_SING), LEVEL_UP_MOVE( 8, MOVE_SWEET_KISS), @@ -794,18 +790,17 @@ static const struct LevelUpMove sCleffaLevelUpLearnset[] = { #endif //P_GEN_2_CROSS_EVOS static const struct LevelUpMove sClefairyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SING), - LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), - LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), - LEVEL_UP_MOVE( 1, MOVE_ENCORE), - LEVEL_UP_MOVE( 1, MOVE_CHARM), - LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), LEVEL_UP_MOVE( 4, MOVE_STORED_POWER), - LEVEL_UP_MOVE( 8, MOVE_MINIMIZE), + LEVEL_UP_MOVE( 8, MOVE_ENCORE), LEVEL_UP_MOVE(12, MOVE_AFTER_YOU), LEVEL_UP_MOVE(16, MOVE_LIFE_DEW), LEVEL_UP_MOVE(20, MOVE_METRONOME), @@ -820,36 +815,35 @@ static const struct LevelUpMove sClefairyLevelUpLearnset[] = { }; static const struct LevelUpMove sClefableLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), - LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), - LEVEL_UP_MOVE( 1, MOVE_ENCORE), LEVEL_UP_MOVE( 1, MOVE_CHARM), - LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), - LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), - LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), - LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), - LEVEL_UP_MOVE( 1, MOVE_METRONOME), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), - LEVEL_UP_MOVE( 1, MOVE_GRAVITY), - LEVEL_UP_MOVE( 1, MOVE_METEOR_MASH), LEVEL_UP_MOVE( 1, MOVE_FOLLOW_ME), LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), - LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_GRAVITY), LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), - LEVEL_UP_MOVE( 1, MOVE_SPLASH), - LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_COPYCAT), - LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_METRONOME), + LEVEL_UP_MOVE( 1, MOVE_METEOR_MASH), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW), LEVEL_UP_END }; #endif //P_FAMILY_CLEFAIRY #if P_FAMILY_VULPIX static const struct LevelUpMove sVulpixLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 4, MOVE_DISABLE), LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(12, MOVE_SPITE), @@ -862,36 +856,34 @@ static const struct LevelUpMove sVulpixLevelUpLearnset[] = { LEVEL_UP_MOVE(40, MOVE_FIRE_SPIN), LEVEL_UP_MOVE(44, MOVE_SAFEGUARD), LEVEL_UP_MOVE(48, MOVE_INFERNO), - LEVEL_UP_MOVE(52, MOVE_GRUDGE), - LEVEL_UP_MOVE(56, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE(52, MOVE_FIRE_BLAST), LEVEL_UP_END }; static const struct LevelUpMove sNinetalesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 1, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE( 1, MOVE_IMPRISON), + LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), - LEVEL_UP_MOVE( 1, MOVE_SPITE), - LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP), - LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), - LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), - LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN), - LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), LEVEL_UP_MOVE( 1, MOVE_INFERNO), - LEVEL_UP_MOVE( 1, MOVE_GRUDGE), - LEVEL_UP_MOVE( 1, MOVE_FIRE_BLAST), - LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_END }; #if P_ALOLAN_FORMS static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 4, MOVE_DISABLE), LEVEL_UP_MOVE( 8, MOVE_ICE_SHARD), LEVEL_UP_MOVE(12, MOVE_SPITE), @@ -903,32 +895,29 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(36, MOVE_IMPRISON), LEVEL_UP_MOVE(40, MOVE_MIST), LEVEL_UP_MOVE(44, MOVE_AURORA_VEIL), - LEVEL_UP_MOVE(48, MOVE_SHEER_COLD), - LEVEL_UP_MOVE(52, MOVE_GRUDGE), - LEVEL_UP_MOVE(56, MOVE_BLIZZARD), + LEVEL_UP_MOVE(48, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(52, MOVE_BLIZZARD), LEVEL_UP_END }; static const struct LevelUpMove sNinetalesAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DAZZLING_GLEAM), - LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM), - LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - LEVEL_UP_MOVE( 1, MOVE_SPITE), - LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), - LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM), - LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), - LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM), - LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - LEVEL_UP_MOVE( 1, MOVE_MIST), - LEVEL_UP_MOVE( 1, MOVE_AURORA_VEIL), - LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), - LEVEL_UP_MOVE( 1, MOVE_GRUDGE), - LEVEL_UP_MOVE( 1, MOVE_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_MIST), + LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE( 1, MOVE_AURORA_VEIL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), + LEVEL_UP_MOVE( 1, MOVE_IMPRISON), LEVEL_UP_END }; #endif //P_ALOLAN_FORMS @@ -1080,9 +1069,9 @@ static const struct LevelUpMove sOddishLevelUpLearnset[] = { }; static const struct LevelUpMove sGloomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(14, MOVE_POISON_POWDER), @@ -1099,44 +1088,41 @@ static const struct LevelUpMove sGloomLevelUpLearnset[] = { static const struct LevelUpMove sVileplumeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_TOXIC), - LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), - LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), - LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_TOXIC), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), LEVEL_UP_END }; #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sBellossomLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_TOXIC), - LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), - LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), - LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_TOXIC), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), + LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), LEVEL_UP_END }; #endif //P_GEN_2_CROSS_EVOS @@ -1624,9 +1610,9 @@ static const struct LevelUpMove sPoliwagLevelUpLearnset[] = { }; static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), - LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(24, MOVE_RAIN_DANCE), @@ -1639,43 +1625,39 @@ static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = { }; static const struct LevelUpMove sPoliwrathLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_SUBMISSION), - LEVEL_UP_MOVE( 1, MOVE_SUBMISSION), - LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW), - LEVEL_UP_MOVE( 1, MOVE_MIND_READER), - LEVEL_UP_MOVE( 1, MOVE_DYNAMIC_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), - LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM), - LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), - LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE( 0, MOVE_DYNAMIC_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), - LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), + LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), + LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_END }; #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sPolitoedLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_BOUNCE), - LEVEL_UP_MOVE( 1, MOVE_BOUNCE), - LEVEL_UP_MOVE( 1, MOVE_SWAGGER), - LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), - LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG), - LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM), - LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), - LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), - LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), - LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SWAGGER), + LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), + LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), LEVEL_UP_END }; #endif //P_GEN_2_CROSS_EVOS @@ -1800,15 +1782,15 @@ static const struct LevelUpMove sBellsproutLevelUpLearnset[] = { LEVEL_UP_MOVE(39, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(41, MOVE_POISON_JAB), LEVEL_UP_MOVE(47, MOVE_SLAM), + LEVEL_UP_MOVE(52, MOVE_POWER_WHIP), LEVEL_UP_END }; + static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_WRAP), - LEVEL_UP_MOVE( 7, MOVE_GROWTH), - LEVEL_UP_MOVE(11, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE(13, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), LEVEL_UP_MOVE(17, MOVE_STUN_SPORE), @@ -1819,29 +1801,21 @@ static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = { LEVEL_UP_MOVE(44, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(47, MOVE_POISON_JAB), LEVEL_UP_MOVE(54, MOVE_SLAM), + LEVEL_UP_MOVE(58, MOVE_POWER_WHIP), LEVEL_UP_END }; static const struct LevelUpMove sVictreebelLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_LEAF_TORNADO), - LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE( 0, MOVE_LEAF_STORM), LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), - LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 1, MOVE_SPIT_UP), + LEVEL_UP_MOVE( 1, MOVE_SWALLOW), + LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), - LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_WRAP), - LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), - LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), - LEVEL_UP_MOVE( 1, MOVE_ACID), - LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID), - LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), - LEVEL_UP_MOVE( 1, MOVE_SLAM), - LEVEL_UP_MOVE(32, MOVE_LEAF_STORM), LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE), LEVEL_UP_END }; @@ -1867,11 +1841,11 @@ static const struct LevelUpMove sTentacoolLevelUpLearnset[] = { }; static const struct LevelUpMove sTentacruelLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), - LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_ACID), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), LEVEL_UP_MOVE(12, MOVE_SUPERSONIC), LEVEL_UP_MOVE(16, MOVE_WATER_PULSE), LEVEL_UP_MOVE(20, MOVE_SCREECH), @@ -1890,13 +1864,11 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = { static const struct LevelUpMove sGeodudeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), - LEVEL_UP_MOVE( 4, MOVE_SANDSTORM), LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), - LEVEL_UP_MOVE(12, MOVE_HARDEN), + LEVEL_UP_MOVE(12, MOVE_BULLDOZE), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), - LEVEL_UP_MOVE(22, MOVE_BULLDOZE), LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST), @@ -1911,13 +1883,10 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE( 4, MOVE_SANDSTORM), - LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), - LEVEL_UP_MOVE(12, MOVE_HARDEN), + LEVEL_UP_MOVE(12, MOVE_BULLDOZE), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), - LEVEL_UP_MOVE(22, MOVE_BULLDOZE), LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), @@ -1929,14 +1898,10 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = { }; static const struct LevelUpMove sGolemLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE( 4, MOVE_SANDSTORM), - LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE(10, MOVE_ROLLOUT), - LEVEL_UP_MOVE(12, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), LEVEL_UP_MOVE(22, MOVE_BULLDOZE), @@ -1947,7 +1912,6 @@ static const struct LevelUpMove sGolemLevelUpLearnset[] = { LEVEL_UP_MOVE(44, MOVE_EXPLOSION), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), - LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM), LEVEL_UP_END }; @@ -1977,8 +1941,6 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE( 4, MOVE_CHARGE), - LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(10, MOVE_ROLLOUT), LEVEL_UP_MOVE(12, MOVE_SPARK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), @@ -1995,14 +1957,11 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = { }; static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE( 4, MOVE_CHARGE), - LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH), - LEVEL_UP_MOVE(10, MOVE_STEAMROLLER), + LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(12, MOVE_SPARK), LEVEL_UP_MOVE(16, MOVE_ROCK_THROW), LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN), @@ -2014,7 +1973,6 @@ static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE(44, MOVE_EXPLOSION), LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), - LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM), LEVEL_UP_END }; #endif //P_ALOLAN_FORMS @@ -2124,6 +2082,7 @@ static const struct LevelUpMove sSlowpokeLevelUpLearnset[] = { }; static const struct LevelUpMove sSlowbroLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -2147,6 +2106,8 @@ static const struct LevelUpMove sSlowbroLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sSlowkingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE( 1, MOVE_CHILLY_RECEPTION), LEVEL_UP_MOVE( 1, MOVE_CURSE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), @@ -2218,6 +2179,9 @@ static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_EERIE_SPELL), + LEVEL_UP_MOVE( 1, MOVE_TOXIC), + LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE( 1, MOVE_CHILLY_RECEPTION), LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), LEVEL_UP_MOVE( 1, MOVE_POWER_GEM), LEVEL_UP_MOVE( 1, MOVE_CURSE), @@ -2378,45 +2342,37 @@ static const struct LevelUpMove sSirfetchdLevelUpLearnset[] = { #if P_FAMILY_DODUO static const struct LevelUpMove sDoduoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 8, MOVE_LEER), - LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), - LEVEL_UP_MOVE(15, MOVE_WING_ATTACK), - LEVEL_UP_MOVE(19, MOVE_PLUCK), - LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE(26, MOVE_AGILITY), - LEVEL_UP_MOVE(29, MOVE_UPROAR), - LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE), - LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(40, MOVE_LUNGE), - LEVEL_UP_MOVE(43, MOVE_DRILL_PECK), - LEVEL_UP_MOVE(47, MOVE_ENDEAVOR), - LEVEL_UP_MOVE(50, MOVE_THRASH), + LEVEL_UP_MOVE( 9, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(14, MOVE_PLUCK), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(23, MOVE_AGILITY), + LEVEL_UP_MOVE(27, MOVE_UPROAR), + LEVEL_UP_MOVE(30, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(33, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(36, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(39, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(43, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sDodrioLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 8, MOVE_LEER), LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK), - LEVEL_UP_MOVE(15, MOVE_WING_ATTACK), - LEVEL_UP_MOVE(19, MOVE_PLUCK), - LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE(26, MOVE_AGILITY), - LEVEL_UP_MOVE(29, MOVE_UPROAR), - LEVEL_UP_MOVE(34, MOVE_ACUPRESSURE), - LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(43, MOVE_LUNGE), - LEVEL_UP_MOVE(47, MOVE_DRILL_PECK), - LEVEL_UP_MOVE(52, MOVE_ENDEAVOR), - LEVEL_UP_MOVE(56, MOVE_THRASH), + LEVEL_UP_MOVE(15, MOVE_PLUCK), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(23, MOVE_AGILITY), + LEVEL_UP_MOVE(26, MOVE_UPROAR), + LEVEL_UP_MOVE(30, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(38, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(43, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(50, MOVE_THRASH), LEVEL_UP_END }; #endif //P_FAMILY_DODUO @@ -2425,7 +2381,7 @@ static const struct LevelUpMove sDodrioLevelUpLearnset[] = { static const struct LevelUpMove sSeelLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 3, MOVE_GROWL), - LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_CHARM), LEVEL_UP_MOVE(11, MOVE_ICY_WIND), LEVEL_UP_MOVE(13, MOVE_ENCORE), LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), @@ -2439,21 +2395,15 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = { LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(47, MOVE_ICE_BEAM), LEVEL_UP_MOVE(51, MOVE_SAFEGUARD), - LEVEL_UP_MOVE(53, MOVE_HAIL), + LEVEL_UP_MOVE(53, MOVE_SNOWSCAPE), LEVEL_UP_END }; static const struct LevelUpMove sDewgongLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHEER_COLD), - LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 3, MOVE_GROWL), - LEVEL_UP_MOVE( 7, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE(11, MOVE_ICY_WIND), LEVEL_UP_MOVE(13, MOVE_ENCORE), LEVEL_UP_MOVE(17, MOVE_ICE_SHARD), LEVEL_UP_MOVE(21, MOVE_REST), @@ -2466,7 +2416,7 @@ static const struct LevelUpMove sDewgongLevelUpLearnset[] = { LEVEL_UP_MOVE(49, MOVE_AQUA_TAIL), LEVEL_UP_MOVE(55, MOVE_ICE_BEAM), LEVEL_UP_MOVE(61, MOVE_SAFEGUARD), - LEVEL_UP_MOVE(65, MOVE_HAIL), + LEVEL_UP_MOVE(65, MOVE_SNOWSCAPE), LEVEL_UP_END }; #endif //P_FAMILY_SEEL @@ -2900,48 +2850,48 @@ static const struct LevelUpMove sExeggcuteLevelUpLearnset[] = { static const struct LevelUpMove sExeggutorLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_STOMP), - LEVEL_UP_MOVE( 1, MOVE_STOMP), - LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), - LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), - LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), - LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), + LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED), LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), LEVEL_UP_MOVE( 1, MOVE_UPROAR), - LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED), - LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), LEVEL_UP_MOVE( 1, MOVE_REFLECT), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_END }; #if P_ALOLAN_FORMS static const struct LevelUpMove sExeggutorAlolanLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DRAGON_HAMMER), - LEVEL_UP_MOVE( 1, MOVE_DRAGON_HAMMER), - LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), - LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), - LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB), + LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED), LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), LEVEL_UP_MOVE( 1, MOVE_UPROAR), - LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED), - LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_REFLECT), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_END }; #endif //P_ALOLAN_FORMS @@ -3015,50 +2965,46 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sTyrogueLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_END }; #endif //P_GEN_2_CROSS_EVOS static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_BRICK_BREAK), - LEVEL_UP_MOVE( 1, MOVE_BRICK_BREAK), - LEVEL_UP_MOVE( 1, MOVE_FEINT), - LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP), LEVEL_UP_MOVE( 4, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 8, MOVE_LOW_KICK), LEVEL_UP_MOVE(12, MOVE_ENDURE), - LEVEL_UP_MOVE(16, MOVE_REVENGE), + LEVEL_UP_MOVE(16, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(21, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(24, MOVE_BLAZE_KICK), - LEVEL_UP_MOVE(28, MOVE_MIND_READER), + LEVEL_UP_MOVE(28, MOVE_FEINT), LEVEL_UP_MOVE(32, MOVE_MEGA_KICK), LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(40, MOVE_REVERSAL), LEVEL_UP_MOVE(44, MOVE_HIGH_JUMP_KICK), + LEVEL_UP_MOVE(50, MOVE_AXE_KICK), LEVEL_UP_END }; static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DRAIN_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FEINT), - LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE), - LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 4, MOVE_MACH_PUNCH), - LEVEL_UP_MOVE( 8, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE( 8, MOVE_VACUUM_WAVE), LEVEL_UP_MOVE(12, MOVE_DETECT), - LEVEL_UP_MOVE(16, MOVE_REVENGE), + LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH), LEVEL_UP_MOVE(21, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(24, MOVE_THUNDER_PUNCH), LEVEL_UP_MOVE(24, MOVE_ICE_PUNCH), @@ -3074,17 +3020,15 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sHitmontopLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TRIPLE_KICK), - LEVEL_UP_MOVE( 1, MOVE_TRIPLE_KICK), - LEVEL_UP_MOVE( 1, MOVE_FEINT), - LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_FEINT), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 4, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 8, MOVE_GYRO_BALL), LEVEL_UP_MOVE(12, MOVE_DETECT), - LEVEL_UP_MOVE(16, MOVE_REVENGE), + LEVEL_UP_MOVE(16, MOVE_RAPID_SPIN), LEVEL_UP_MOVE(21, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(21, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH), @@ -3136,8 +3080,8 @@ static const struct LevelUpMove sLickilickyLevelUpLearnset[] = { #if P_FAMILY_KOFFING static const struct LevelUpMove sKoffingLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 4, MOVE_SMOG), LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), @@ -3156,12 +3100,11 @@ static const struct LevelUpMove sKoffingLevelUpLearnset[] = { static const struct LevelUpMove sWeezingLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), - LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(20, MOVE_SLUDGE), @@ -3179,21 +3122,19 @@ static const struct LevelUpMove sWeezingLevelUpLearnset[] = { #if P_GALARIAN_FORMS static const struct LevelUpMove sWeezingGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), LEVEL_UP_MOVE( 1, MOVE_STRANGE_STEAM), LEVEL_UP_MOVE( 1, MOVE_DEFOG), LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE), - LEVEL_UP_MOVE( 1, MOVE_SMOG), - LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), - LEVEL_UP_MOVE( 1, MOVE_HAZE), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_HAZE), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(16, MOVE_ASSURANCE), LEVEL_UP_MOVE(20, MOVE_SLUDGE), - LEVEL_UP_MOVE(24, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(24, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(32, MOVE_SLUDGE_BOMB), LEVEL_UP_MOVE(38, MOVE_TOXIC), @@ -3228,7 +3169,6 @@ static const struct LevelUpMove sRhyhornLevelUpLearnset[] = { static const struct LevelUpMove sRhydonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM), - LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), @@ -3248,9 +3188,9 @@ static const struct LevelUpMove sRhydonLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sRhyperiorLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE(15, MOVE_HORN_ATTACK), @@ -3402,15 +3342,15 @@ static const struct LevelUpMove sKangaskhanLevelUpLearnset[] = { #if P_FAMILY_HORSEA static const struct LevelUpMove sHorseaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 5, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(10, MOVE_TWISTER), LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(30, MOVE_AGILITY), - LEVEL_UP_MOVE(35, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(35, MOVE_WATER_PULSE), LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(50, MOVE_DRAGON_DANCE), @@ -3419,15 +3359,15 @@ static const struct LevelUpMove sHorseaLevelUpLearnset[] = { }; static const struct LevelUpMove sSeadraLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(30, MOVE_AGILITY), - LEVEL_UP_MOVE(37, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(37, MOVE_WATER_PULSE), LEVEL_UP_MOVE(44, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(58, MOVE_DRAGON_DANCE), @@ -3437,21 +3377,22 @@ static const struct LevelUpMove sSeadraLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sKingdraLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), - LEVEL_UP_MOVE( 1, MOVE_YAWN), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 1, MOVE_TWISTER), + LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(30, MOVE_AGILITY), - LEVEL_UP_MOVE(37, MOVE_LASER_FOCUS), + LEVEL_UP_MOVE(37, MOVE_WATER_PULSE), LEVEL_UP_MOVE(44, MOVE_DRAGON_PULSE), LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), LEVEL_UP_MOVE(58, MOVE_DRAGON_DANCE), LEVEL_UP_MOVE(65, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(72, MOVE_WAVE_CRASH), LEVEL_UP_END }; #endif //P_GEN_2_CROSS_EVOS @@ -3755,8 +3696,8 @@ static const struct LevelUpMove sJynxLevelUpLearnset[] = { #if P_FAMILY_ELECTABUZZ #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sElekidLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 8, MOVE_CHARGE), LEVEL_UP_MOVE(12, MOVE_SWIFT), @@ -3774,9 +3715,9 @@ static const struct LevelUpMove sElekidLevelUpLearnset[] = { #endif //P_GEN_2_CROSS_EVOS static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE(12, MOVE_SWIFT), LEVEL_UP_MOVE(16, MOVE_SHOCK_WAVE), @@ -3794,10 +3735,9 @@ static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sElectivireLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WILD_CHARGE), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE(12, MOVE_SWIFT), LEVEL_UP_MOVE(16, MOVE_SHOCK_WAVE), @@ -3818,8 +3758,8 @@ static const struct LevelUpMove sElectivireLevelUpLearnset[] = { #if P_FAMILY_MAGMAR #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sMagbyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 4, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), @@ -3837,10 +3777,10 @@ static const struct LevelUpMove sMagbyLevelUpLearnset[] = { #endif //P_GEN_2_CROSS_EVOS static const struct LevelUpMove sMagmarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(16, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(20, MOVE_CONFUSE_RAY), @@ -3857,10 +3797,10 @@ static const struct LevelUpMove sMagmarLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sMagmortarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(16, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(20, MOVE_CONFUSE_RAY), @@ -4295,7 +4235,7 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_RECOVER), LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT), + LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(55, MOVE_LOCK_ON), LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON), LEVEL_UP_END @@ -4303,8 +4243,8 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = { #if P_GEN_2_CROSS_EVOS static const struct LevelUpMove sPorygon2LevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONVERSION), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), @@ -4315,22 +4255,21 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_RECOVER), LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT), - LEVEL_UP_MOVE(55, MOVE_LOCK_ON), - LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON), - LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_MOVE(50, MOVE_LOCK_ON), + LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(60, MOVE_HYPER_BEAM), LEVEL_UP_END }; #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sPorygonZLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM), + LEVEL_UP_MOVE( 1, MOVE_CONVERSION), LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_RECYCLE), + LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_CONVERSION), - LEVEL_UP_MOVE( 1, MOVE_RECYCLE), - LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(15, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE(20, MOVE_PSYBEAM), LEVEL_UP_MOVE(25, MOVE_CONVERSION_2), @@ -4338,7 +4277,7 @@ static const struct LevelUpMove sPorygonZLevelUpLearnset[] = { LEVEL_UP_MOVE(35, MOVE_RECOVER), LEVEL_UP_MOVE(40, MOVE_DISCHARGE), LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT), + LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(55, MOVE_LOCK_ON), LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON), LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), @@ -4453,8 +4392,8 @@ static const struct LevelUpMove sAerodactylLevelUpLearnset[] = { #if P_FAMILY_SNORLAX #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LICK), LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 8, MOVE_RECYCLE), LEVEL_UP_MOVE(12, MOVE_COVET), @@ -4474,24 +4413,24 @@ static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = { #endif //P_GEN_4_CROSS_EVOS static const struct LevelUpMove sSnorlaxLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_RECYCLE), - LEVEL_UP_MOVE( 1, MOVE_COVET), - LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 1, MOVE_SCREECH), - LEVEL_UP_MOVE( 1, MOVE_FLING), - LEVEL_UP_MOVE( 1, MOVE_METRONOME), - LEVEL_UP_MOVE( 1, MOVE_FLAIL), - LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), - LEVEL_UP_MOVE( 1, MOVE_LICK), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_METRONOME), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_RECYCLE), + LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_BLOCK), LEVEL_UP_MOVE(12, MOVE_YAWN), LEVEL_UP_MOVE(16, MOVE_BITE), - LEVEL_UP_MOVE(20, MOVE_REST), LEVEL_UP_MOVE(20, MOVE_SNORE), LEVEL_UP_MOVE(20, MOVE_SLEEP_TALK), + LEVEL_UP_MOVE(20, MOVE_REST), LEVEL_UP_MOVE(24, MOVE_CRUNCH), LEVEL_UP_MOVE(28, MOVE_BODY_SLAM), LEVEL_UP_MOVE(32, MOVE_HEAVY_SLAM), @@ -4747,12 +4686,12 @@ static const struct LevelUpMove sChikoritaLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SYNTHESIS), LEVEL_UP_MOVE(17, MOVE_REFLECT), LEVEL_UP_MOVE(20, MOVE_MAGICAL_LEAF), - LEVEL_UP_MOVE(23, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(23, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(34, MOVE_BODY_SLAM), LEVEL_UP_MOVE(39, MOVE_SAFEGUARD), - LEVEL_UP_MOVE(42, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(42, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(45, MOVE_SOLAR_BEAM), LEVEL_UP_END }; @@ -4762,42 +4701,36 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), - LEVEL_UP_MOVE( 6, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 9, MOVE_POISON_POWDER), LEVEL_UP_MOVE(12, MOVE_SYNTHESIS), LEVEL_UP_MOVE(18, MOVE_REFLECT), LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF), - LEVEL_UP_MOVE(26, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(26, MOVE_LEECH_SEED), LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(40, MOVE_BODY_SLAM), LEVEL_UP_MOVE(46, MOVE_SAFEGUARD), - LEVEL_UP_MOVE(50, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(50, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(54, MOVE_SOLAR_BEAM), LEVEL_UP_END }; static const struct LevelUpMove sMeganiumLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE), - LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE), - LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), - LEVEL_UP_MOVE( 6, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 9, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), LEVEL_UP_MOVE(12, MOVE_SYNTHESIS), LEVEL_UP_MOVE(18, MOVE_REFLECT), LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF), - LEVEL_UP_MOVE(26, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(26, MOVE_LEECH_SEED), LEVEL_UP_MOVE(34, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(40, MOVE_LIGHT_SCREEN), LEVEL_UP_MOVE(46, MOVE_BODY_SLAM), LEVEL_UP_MOVE(54, MOVE_SAFEGUARD), - LEVEL_UP_MOVE(60, MOVE_AROMATHERAPY), - LEVEL_UP_MOVE(66, MOVE_SOLAR_BEAM), - LEVEL_UP_MOVE(70, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(60, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(65, MOVE_SOLAR_BEAM), LEVEL_UP_END }; #endif //P_FAMILY_CHIKORITA @@ -4894,18 +4827,16 @@ static const struct LevelUpMove sTotodileLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP), - LEVEL_UP_MOVE(13, MOVE_BITE), - LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), - LEVEL_UP_MOVE(20, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 9, MOVE_BITE), + LEVEL_UP_MOVE(13, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(19, MOVE_ICE_FANG), LEVEL_UP_MOVE(22, MOVE_FLAIL), LEVEL_UP_MOVE(27, MOVE_CRUNCH), - LEVEL_UP_MOVE(29, MOVE_LOW_KICK), - LEVEL_UP_MOVE(34, MOVE_SLASH), - LEVEL_UP_MOVE(36, MOVE_SCREECH), - LEVEL_UP_MOVE(41, MOVE_THRASH), - LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(48, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(30, MOVE_SLASH), + LEVEL_UP_MOVE(33, MOVE_SCREECH), + LEVEL_UP_MOVE(37, MOVE_THRASH), + LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(45, MOVE_SUPERPOWER), LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), LEVEL_UP_END }; @@ -4914,43 +4845,36 @@ static const struct LevelUpMove sCroconawLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP), LEVEL_UP_MOVE(13, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), LEVEL_UP_MOVE(21, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_FLAIL), LEVEL_UP_MOVE(30, MOVE_CRUNCH), - LEVEL_UP_MOVE(33, MOVE_LOW_KICK), - LEVEL_UP_MOVE(39, MOVE_SLASH), - LEVEL_UP_MOVE(42, MOVE_SCREECH), - LEVEL_UP_MOVE(48, MOVE_THRASH), - LEVEL_UP_MOVE(51, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(57, MOVE_SUPERPOWER), - LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(34, MOVE_SLASH), + LEVEL_UP_MOVE(37, MOVE_SCREECH), + LEVEL_UP_MOVE(42, MOVE_THRASH), + LEVEL_UP_MOVE(47, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(50, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_AGILITY), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), - LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_AGILITY), LEVEL_UP_MOVE(13, MOVE_BITE), LEVEL_UP_MOVE(15, MOVE_SCARY_FACE), LEVEL_UP_MOVE(21, MOVE_ICE_FANG), LEVEL_UP_MOVE(24, MOVE_FLAIL), LEVEL_UP_MOVE(32, MOVE_CRUNCH), - LEVEL_UP_MOVE(37, MOVE_LOW_KICK), - LEVEL_UP_MOVE(45, MOVE_SLASH), - LEVEL_UP_MOVE(50, MOVE_SCREECH), - LEVEL_UP_MOVE(58, MOVE_THRASH), - LEVEL_UP_MOVE(63, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(71, MOVE_SUPERPOWER), - LEVEL_UP_MOVE(76, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(37, MOVE_SLASH), + LEVEL_UP_MOVE(44, MOVE_SCREECH), + LEVEL_UP_MOVE(51, MOVE_THRASH), + LEVEL_UP_MOVE(59, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(65, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(70, MOVE_HYDRO_PUMP), LEVEL_UP_END }; #endif //P_FAMILY_TOTODILE @@ -4958,7 +4882,6 @@ static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = { #if P_FAMILY_SENTRET static const struct LevelUpMove sSentretLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), @@ -4969,21 +4892,17 @@ static const struct LevelUpMove sSentretLevelUpLearnset[] = { LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(36, MOVE_AMNESIA), LEVEL_UP_MOVE(39, MOVE_BATON_PASS), - LEVEL_UP_MOVE(42, MOVE_REVERSAL), + LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE), LEVEL_UP_END }; static const struct LevelUpMove sFurretLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AGILITY), - LEVEL_UP_MOVE( 1, MOVE_AGILITY), - LEVEL_UP_MOVE( 1, MOVE_COIL), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), - LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_COIL), LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_HELPING_HAND), LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME), @@ -4992,7 +4911,7 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = { LEVEL_UP_MOVE(36, MOVE_SUCKER_PUNCH), LEVEL_UP_MOVE(42, MOVE_AMNESIA), LEVEL_UP_MOVE(46, MOVE_BATON_PASS), - LEVEL_UP_MOVE(50, MOVE_REVERSAL), + LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(56, MOVE_HYPER_VOICE), LEVEL_UP_END }; @@ -5000,13 +4919,13 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = { #if P_FAMILY_HOOTHOOT static const struct LevelUpMove sHoothootLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 3, MOVE_TACKLE), LEVEL_UP_MOVE( 6, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_CONFUSION), LEVEL_UP_MOVE(12, MOVE_REFLECT), - LEVEL_UP_MOVE(15, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(15, MOVE_DEFOG), LEVEL_UP_MOVE(18, MOVE_AIR_SLASH), LEVEL_UP_MOVE(21, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN), @@ -5019,14 +4938,14 @@ static const struct LevelUpMove sHoothootLevelUpLearnset[] = { }; static const struct LevelUpMove sNoctowlLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_PECK), - LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE( 9, MOVE_CONFUSION), LEVEL_UP_MOVE(12, MOVE_REFLECT), - LEVEL_UP_MOVE(15, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(15, MOVE_DEFOG), LEVEL_UP_MOVE(18, MOVE_AIR_SLASH), LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), @@ -5090,50 +5009,45 @@ static const struct LevelUpMove sSpinarakLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(22, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH), - LEVEL_UP_MOVE(29, MOVE_LEECH_LIFE), - LEVEL_UP_MOVE(33, MOVE_AGILITY), - LEVEL_UP_MOVE(36, MOVE_PIN_MISSILE), - LEVEL_UP_MOVE(40, MOVE_PSYCHIC), - LEVEL_UP_MOVE(43, MOVE_POISON_JAB), - LEVEL_UP_MOVE(47, MOVE_CROSS_POISON), - LEVEL_UP_MOVE(50, MOVE_STICKY_WEB), - LEVEL_UP_MOVE(54, MOVE_TOXIC_THREAD), + LEVEL_UP_MOVE(29, MOVE_AGILITY), + LEVEL_UP_MOVE(33, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(36, MOVE_PSYCHIC), + LEVEL_UP_MOVE(40, MOVE_POISON_JAB), + LEVEL_UP_MOVE(44, MOVE_CROSS_POISON), + LEVEL_UP_MOVE(47, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(51, MOVE_TOXIC_THREAD), LEVEL_UP_END }; static const struct LevelUpMove sAriadosLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), - LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH), - LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), - LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), LEVEL_UP_MOVE( 8, MOVE_INFESTATION), LEVEL_UP_MOVE(12, MOVE_SCARY_FACE), LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(23, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH), - LEVEL_UP_MOVE(32, MOVE_LEECH_LIFE), - LEVEL_UP_MOVE(37, MOVE_AGILITY), - LEVEL_UP_MOVE(41, MOVE_PIN_MISSILE), - LEVEL_UP_MOVE(46, MOVE_PSYCHIC), - LEVEL_UP_MOVE(50, MOVE_POISON_JAB), - LEVEL_UP_MOVE(55, MOVE_CROSS_POISON), - LEVEL_UP_MOVE(58, MOVE_STICKY_WEB), - LEVEL_UP_MOVE(63, MOVE_TOXIC_THREAD), + LEVEL_UP_MOVE(31, MOVE_AGILITY), + LEVEL_UP_MOVE(35, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(41, MOVE_PSYCHIC), + LEVEL_UP_MOVE(46, MOVE_POISON_JAB), + LEVEL_UP_MOVE(50, MOVE_CROSS_POISON), + LEVEL_UP_MOVE(54, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(59, MOVE_TOXIC_THREAD), LEVEL_UP_END }; #endif //P_FAMILY_SPINARAK #if P_FAMILY_CHINCHOU static const struct LevelUpMove sChinchouLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 4, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), @@ -5150,16 +5064,13 @@ static const struct LevelUpMove sChinchouLevelUpLearnset[] = { static const struct LevelUpMove sLanturnLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SWALLOW), - LEVEL_UP_MOVE( 0, MOVE_STOCKPILE), LEVEL_UP_MOVE( 0, MOVE_SPIT_UP), - LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), - LEVEL_UP_MOVE( 1, MOVE_SWALLOW), - LEVEL_UP_MOVE( 1, MOVE_SPIT_UP), + LEVEL_UP_MOVE( 0, MOVE_STOCKPILE), LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), - LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(20, MOVE_SPARK), @@ -5534,13 +5445,10 @@ static const struct LevelUpMove sAipomLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sAmbipomLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), - LEVEL_UP_MOVE( 8, MOVE_ASTONISH), LEVEL_UP_MOVE(11, MOVE_BATON_PASS), LEVEL_UP_MOVE(15, MOVE_TICKLE), LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES), @@ -5599,14 +5507,13 @@ static const struct LevelUpMove sSunfloraLevelUpLearnset[] = { #if P_FAMILY_YANMA static const struct LevelUpMove sYanmaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM), - LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(14, MOVE_AIR_CUTTER), LEVEL_UP_MOVE(17, MOVE_DETECT), LEVEL_UP_MOVE(22, MOVE_SUPERSONIC), LEVEL_UP_MOVE(27, MOVE_UPROAR), - LEVEL_UP_MOVE(30, MOVE_STRING_SHOT), + LEVEL_UP_MOVE(30, MOVE_BUG_BITE), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(38, MOVE_HYPNOSIS), LEVEL_UP_MOVE(43, MOVE_WING_ATTACK), @@ -5619,30 +5526,22 @@ static const struct LevelUpMove sYanmaLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sYanmegaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), - LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), - LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_GUST), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), - LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM), - LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH), + LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(14, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(17, MOVE_DETECT), LEVEL_UP_MOVE(22, MOVE_SUPERSONIC), LEVEL_UP_MOVE(27, MOVE_UPROAR), - LEVEL_UP_MOVE(30, MOVE_STRING_SHOT), + LEVEL_UP_MOVE(30, MOVE_BUG_BITE), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(38, MOVE_FEINT), LEVEL_UP_MOVE(43, MOVE_SLASH), LEVEL_UP_MOVE(46, MOVE_SCREECH), LEVEL_UP_MOVE(49, MOVE_U_TURN), - LEVEL_UP_MOVE(54, MOVE_AIR_SLASH), - LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ), LEVEL_UP_END }; #endif //P_GEN_4_CROSS_EVOS @@ -5963,45 +5862,35 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = { LEVEL_UP_MOVE(10, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), - LEVEL_UP_MOVE(19, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(19, MOVE_POISON_TAIL), LEVEL_UP_MOVE(22, MOVE_ACROBATICS), LEVEL_UP_MOVE(27, MOVE_SLASH), LEVEL_UP_MOVE(30, MOVE_U_TURN), LEVEL_UP_MOVE(35, MOVE_SCREECH), LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), - LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(45, MOVE_CRABHAMMER), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(55, MOVE_GUILLOTINE), LEVEL_UP_END }; #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sGliscorLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - LEVEL_UP_MOVE( 1, MOVE_POISON_JAB), - LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_HARDEN), - LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), - LEVEL_UP_MOVE( 1, MOVE_SLASH), - LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), - LEVEL_UP_MOVE( 7, MOVE_HARDEN), - LEVEL_UP_MOVE(10, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), - LEVEL_UP_MOVE(19, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(22, MOVE_ACROBATICS), LEVEL_UP_MOVE(27, MOVE_NIGHT_SLASH), LEVEL_UP_MOVE(30, MOVE_U_TURN), LEVEL_UP_MOVE(35, MOVE_SCREECH), LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), - LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(45, MOVE_CRABHAMMER), LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(55, MOVE_GUILLOTINE), LEVEL_UP_END }; #endif //P_GEN_4_CROSS_EVOS @@ -6009,18 +5898,19 @@ static const struct LevelUpMove sGliscorLevelUpLearnset[] = { #if P_FAMILY_SNUBBULL static const struct LevelUpMove sSnubbullLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 1, MOVE_CHARM), LEVEL_UP_MOVE( 7, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_LICK), LEVEL_UP_MOVE(19, MOVE_HEADBUTT), LEVEL_UP_MOVE(25, MOVE_ROAR), - LEVEL_UP_MOVE(31, MOVE_TAUNT), + LEVEL_UP_MOVE(31, MOVE_LAST_RESORT), LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(43, MOVE_PAYBACK), LEVEL_UP_MOVE(49, MOVE_CRUNCH), @@ -6029,22 +5919,22 @@ static const struct LevelUpMove sSnubbullLevelUpLearnset[] = { static const struct LevelUpMove sGranbullLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_OUTRAGE), - LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_BITE), LEVEL_UP_MOVE(13, MOVE_LICK), LEVEL_UP_MOVE(19, MOVE_HEADBUTT), LEVEL_UP_MOVE(27, MOVE_ROAR), - LEVEL_UP_MOVE(35, MOVE_TAUNT), + LEVEL_UP_MOVE(35, MOVE_LAST_RESORT), LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(51, MOVE_PAYBACK), LEVEL_UP_MOVE(59, MOVE_CRUNCH), - LEVEL_UP_MOVE(67, MOVE_OUTRAGE), LEVEL_UP_END }; #endif //P_FAMILY_SNUBBULL @@ -6220,10 +6110,10 @@ static const struct LevelUpMove sSneaselHisuianLevelUpLearnset[] = { static const struct LevelUpMove sSneaslerLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DIRE_CLAW), - LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_FLING), LEVEL_UP_MOVE( 6, MOVE_TAUNT), LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(18, MOVE_METAL_CLAW), @@ -6304,6 +6194,7 @@ static const struct LevelUpMove sUrsalunaLevelUpLearnset[] = { }; static const struct LevelUpMove sUrsalunaBloodmoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_LICK), @@ -6327,14 +6218,14 @@ static const struct LevelUpMove sUrsalunaBloodmoonLevelUpLearnset[] = { #if P_FAMILY_SLUGMA static const struct LevelUpMove sSlugmaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 6, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW), LEVEL_UP_MOVE(13, MOVE_HARDEN), - LEVEL_UP_MOVE(15, MOVE_INCINERATE), LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(27, MOVE_INCINERATE), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(36, MOVE_AMNESIA), @@ -6347,25 +6238,21 @@ static const struct LevelUpMove sSlugmaLevelUpLearnset[] = { static const struct LevelUpMove sMagcargoLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHELL_SMASH), - LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH), - LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), - LEVEL_UP_MOVE( 1, MOVE_YAWN), - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), - LEVEL_UP_MOVE( 6, MOVE_EMBER), - LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER), LEVEL_UP_MOVE(13, MOVE_HARDEN), - LEVEL_UP_MOVE(15, MOVE_INCINERATE), LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG), LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(27, MOVE_INCINERATE), LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE), LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME), LEVEL_UP_MOVE(36, MOVE_AMNESIA), LEVEL_UP_MOVE(43, MOVE_BODY_SLAM), LEVEL_UP_MOVE(47, MOVE_RECOVER), LEVEL_UP_MOVE(54, MOVE_FLAMETHROWER), - LEVEL_UP_MOVE(58, MOVE_EARTH_POWER), LEVEL_UP_END }; #endif //P_FAMILY_SLUGMA @@ -6389,12 +6276,11 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = { static const struct LevelUpMove sPiloswineLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), - LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(15, MOVE_ICE_SHARD), LEVEL_UP_MOVE(20, MOVE_MIST), LEVEL_UP_MOVE(25, MOVE_ENDURE), @@ -6410,13 +6296,12 @@ static const struct LevelUpMove sPiloswineLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sMamoswineLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), - LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE(15, MOVE_ICE_SHARD), LEVEL_UP_MOVE(20, MOVE_MIST), LEVEL_UP_MOVE(25, MOVE_ENDURE), @@ -6581,8 +6466,8 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = { #if P_FAMILY_SKARMORY static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 8, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(12, MOVE_METAL_CLAW), @@ -6590,7 +6475,7 @@ static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = { LEVEL_UP_MOVE(20, MOVE_WING_ATTACK), LEVEL_UP_MOVE(24, MOVE_SLASH), LEVEL_UP_MOVE(28, MOVE_STEEL_WING), - LEVEL_UP_MOVE(32, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(32, MOVE_PAYBACK), LEVEL_UP_MOVE(36, MOVE_DRILL_PECK), LEVEL_UP_MOVE(40, MOVE_METAL_SOUND), LEVEL_UP_MOVE(44, MOVE_SPIKES), @@ -6723,6 +6608,7 @@ static const struct LevelUpMove sWyrdeerLevelUpLearnset[] = { #if P_FAMILY_SMEARGLE static const struct LevelUpMove sSmeargleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SKETCH), LEVEL_UP_MOVE(11, MOVE_SKETCH), LEVEL_UP_MOVE(21, MOVE_SKETCH), LEVEL_UP_MOVE(31, MOVE_SKETCH), @@ -6757,10 +6643,10 @@ static const struct LevelUpMove sMiltankLevelUpLearnset[] = { #if P_FAMILY_RAIKOU static const struct LevelUpMove sRaikouLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 6, MOVE_SPARK), LEVEL_UP_MOVE(12, MOVE_BITE), @@ -6783,9 +6669,9 @@ static const struct LevelUpMove sRaikouLevelUpLearnset[] = { static const struct LevelUpMove sEnteiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SACRED_FIRE), LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED), - LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_STOMP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), LEVEL_UP_MOVE( 6, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(12, MOVE_BITE), @@ -6806,12 +6692,12 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = { #if P_FAMILY_SUICUNE static const struct LevelUpMove sSuicuneLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD), LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_MIST), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 6, MOVE_WATER_PULSE), LEVEL_UP_MOVE(12, MOVE_BITE), LEVEL_UP_MOVE(18, MOVE_CALM_MIND), @@ -6903,8 +6789,8 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_RUSH), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), - LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 9, MOVE_MIST), LEVEL_UP_MOVE(18, MOVE_SAFEGUARD), LEVEL_UP_MOVE(27, MOVE_CALM_MIND), @@ -6923,8 +6809,8 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = { static const struct LevelUpMove sHoOhLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), - LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL), LEVEL_UP_MOVE( 9, MOVE_LIFE_DEW), LEVEL_UP_MOVE(18, MOVE_SAFEGUARD), LEVEL_UP_MOVE(27, MOVE_CALM_MIND), @@ -6935,7 +6821,7 @@ static const struct LevelUpMove sHoOhLevelUpLearnset[] = { LEVEL_UP_MOVE(72, MOVE_FIRE_BLAST), LEVEL_UP_MOVE(81, MOVE_FUTURE_SIGHT), LEVEL_UP_MOVE(90, MOVE_SKY_ATTACK), - LEVEL_UP_MOVE(99, MOVE_BURN_UP), + LEVEL_UP_MOVE(99, MOVE_OVERHEAT), LEVEL_UP_END }; #endif //P_FAMILY_HO_OH @@ -6979,14 +6865,14 @@ static const struct LevelUpMove sTreeckoLevelUpLearnset[] = { }; static const struct LevelUpMove sGrovyleLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 9, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(12, MOVE_DETECT), LEVEL_UP_MOVE(15, MOVE_QUICK_GUARD), @@ -7002,16 +6888,16 @@ static const struct LevelUpMove sGrovyleLevelUpLearnset[] = { }; static const struct LevelUpMove sSceptileLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP), - LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP), - LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE( 0, MOVE_LEAF_BLADE), LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE( 1, MOVE_SHED_TAIL), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 5, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(12, MOVE_DETECT), LEVEL_UP_MOVE(15, MOVE_QUICK_GUARD), @@ -7019,10 +6905,9 @@ static const struct LevelUpMove sSceptileLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(30, MOVE_SLAM), LEVEL_UP_MOVE(35, MOVE_DOUBLE_TEAM), - LEVEL_UP_MOVE(42, MOVE_LEAF_BLADE), - LEVEL_UP_MOVE(49, MOVE_SCREECH), - LEVEL_UP_MOVE(56, MOVE_ENDEAVOR), - LEVEL_UP_MOVE(63, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(42, MOVE_SCREECH), + LEVEL_UP_MOVE(49, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(56, MOVE_LEAF_STORM), LEVEL_UP_END }; #endif //P_FAMILY_TREECKO @@ -7049,7 +6934,6 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = { static const struct LevelUpMove sCombuskenLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), LEVEL_UP_MOVE( 1, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), @@ -7071,15 +6955,14 @@ static const struct LevelUpMove sCombuskenLevelUpLearnset[] = { }; static const struct LevelUpMove sBlazikenLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), LEVEL_UP_MOVE( 1, MOVE_FEATHER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 9, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(12, MOVE_DETECT), @@ -7088,10 +6971,10 @@ static const struct LevelUpMove sBlazikenLevelUpLearnset[] = { LEVEL_UP_MOVE(25, MOVE_SLASH), LEVEL_UP_MOVE(30, MOVE_BOUNCE), LEVEL_UP_MOVE(35, MOVE_FOCUS_ENERGY), - LEVEL_UP_MOVE(42, MOVE_BLAZE_KICK), - LEVEL_UP_MOVE(49, MOVE_BULK_UP), - LEVEL_UP_MOVE(56, MOVE_REVERSAL), - LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(42, MOVE_BULK_UP), + LEVEL_UP_MOVE(49, MOVE_REVERSAL), + LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD), LEVEL_UP_END }; #endif //P_FAMILY_TORCHIC @@ -7118,13 +7001,10 @@ static const struct LevelUpMove sMudkipLevelUpLearnset[] = { static const struct LevelUpMove sMarshtompLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT), - LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), - LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), - LEVEL_UP_MOVE( 1, MOVE_SURF), + LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), LEVEL_UP_MOVE( 9, MOVE_ROCK_THROW), LEVEL_UP_MOVE(12, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_SUPERSONIC), @@ -7140,14 +7020,14 @@ static const struct LevelUpMove sMarshtompLevelUpLearnset[] = { }; static const struct LevelUpMove sSwampertLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), - LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), LEVEL_UP_MOVE( 1, MOVE_SURF), + LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), LEVEL_UP_MOVE( 9, MOVE_ROCK_THROW), LEVEL_UP_MOVE(12, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_SUPERSONIC), @@ -7169,44 +7049,37 @@ static const struct LevelUpMove sPoochyenaLevelUpLearnset[] = { LEVEL_UP_MOVE( 4, MOVE_HOWL), LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(10, MOVE_BITE), - LEVEL_UP_MOVE(13, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(13, MOVE_LEER), LEVEL_UP_MOVE(16, MOVE_ROAR), LEVEL_UP_MOVE(19, MOVE_SWAGGER), LEVEL_UP_MOVE(22, MOVE_ASSURANCE), LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), - LEVEL_UP_MOVE(28, MOVE_HEADBUTT), - LEVEL_UP_MOVE(31, MOVE_TAUNT), - LEVEL_UP_MOVE(34, MOVE_CRUNCH), - LEVEL_UP_MOVE(37, MOVE_YAWN), - LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN), - LEVEL_UP_MOVE(43, MOVE_SUCKER_PUNCH), - LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(28, MOVE_TAUNT), + LEVEL_UP_MOVE(31, MOVE_CRUNCH), + LEVEL_UP_MOVE(34, MOVE_YAWN), + LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(44, MOVE_PLAY_ROUGH), LEVEL_UP_END }; static const struct LevelUpMove sMightyenaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SNARL), - LEVEL_UP_MOVE( 1, MOVE_SNARL), - LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), - LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_THIEF), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_HOWL), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), - LEVEL_UP_MOVE( 4, MOVE_HOWL), - LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK), - LEVEL_UP_MOVE(10, MOVE_BITE), - LEVEL_UP_MOVE(13, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE(13, MOVE_HOWL), + LEVEL_UP_MOVE(13, MOVE_LEER), LEVEL_UP_MOVE(16, MOVE_ROAR), LEVEL_UP_MOVE(20, MOVE_SWAGGER), LEVEL_UP_MOVE(24, MOVE_ASSURANCE), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), - LEVEL_UP_MOVE(32, MOVE_HEADBUTT), LEVEL_UP_MOVE(36, MOVE_TAUNT), - LEVEL_UP_MOVE(40, MOVE_CRUNCH), LEVEL_UP_MOVE(44, MOVE_YAWN), LEVEL_UP_MOVE(48, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(52, MOVE_SUCKER_PUNCH), @@ -7397,15 +7270,15 @@ static const struct LevelUpMove sDustoxLevelUpLearnset[] = { #if P_FAMILY_LOTAD static const struct LevelUpMove sLotadLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 3, MOVE_ABSORB), LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), LEVEL_UP_MOVE( 9, MOVE_MIST), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(16, MOVE_FLAIL), LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE(24, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(24, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT), @@ -7414,21 +7287,20 @@ static const struct LevelUpMove sLotadLevelUpLearnset[] = { }; static const struct LevelUpMove sLombreLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE( 1, MOVE_FLAIL), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 9, MOVE_MIST), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE(30, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(30, MOVE_LEECH_SEED), LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE(43, MOVE_RAIN_DANCE), LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(57, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(64, MOVE_HYDRO_PUMP), @@ -7436,24 +7308,22 @@ static const struct LevelUpMove sLombreLevelUpLearnset[] = { }; static const struct LevelUpMove sLudicoloLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_MIST), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), - LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), - LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), - LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), - LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), - LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM), LEVEL_UP_END }; #endif //P_FAMILY_LOTAD @@ -7468,7 +7338,7 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_ROLLOUT), LEVEL_UP_MOVE(15, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(18, MOVE_PAYBACK), - LEVEL_UP_MOVE(21, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(21, MOVE_HEADBUTT), LEVEL_UP_MOVE(24, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(27, MOVE_SYNTHESIS), LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH), @@ -7478,22 +7348,20 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = { static const struct LevelUpMove sNuzleafLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), - LEVEL_UP_MOVE( 1, MOVE_TORMENT), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_SWAGGER), - LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), - LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 1, MOVE_SWAGGER), + LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_TORMENT), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 9, MOVE_GROWTH), LEVEL_UP_MOVE(12, MOVE_ROLLOUT), LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(24, MOVE_PAYBACK), - LEVEL_UP_MOVE(30, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(30, MOVE_SYNTHESIS), LEVEL_UP_MOVE(36, MOVE_SUNNY_DAY), LEVEL_UP_MOVE(43, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(50, MOVE_SUCKER_PUNCH), @@ -7502,30 +7370,28 @@ static const struct LevelUpMove sNuzleafLevelUpLearnset[] = { }; static const struct LevelUpMove sShiftryLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_LEAF_TORNADO), - LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO), - LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), - LEVEL_UP_MOVE( 1, MOVE_TORMENT), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_SWAGGER), + LEVEL_UP_MOVE( 0, MOVE_LEAF_BLADE), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), - LEVEL_UP_MOVE( 1, MOVE_HURRICANE), - LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), - LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), - LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_PAYBACK), - LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER), - LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_SWAGGER), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_BEAT_UP), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_TORMENT), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_HARDEN), - LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE( 1, MOVE_PAYBACK), + LEVEL_UP_MOVE( 1, MOVE_HURRICANE), LEVEL_UP_END }; #endif //P_FAMILY_SEEDOT @@ -7767,6 +7633,7 @@ static const struct LevelUpMove sShroomishLevelUpLearnset[] = { static const struct LevelUpMove sBreloomLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_SPORE), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_ABSORB), @@ -8024,27 +7891,21 @@ static const struct LevelUpMove sNosepassLevelUpLearnset[] = { LEVEL_UP_MOVE(34, MOVE_SANDSTORM), LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), LEVEL_UP_MOVE(40, MOVE_STONE_EDGE), - LEVEL_UP_MOVE(43, MOVE_LOCK_ON), LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(43, MOVE_LOCK_ON), LEVEL_UP_END }; #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sProbopassLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX), LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), LEVEL_UP_MOVE( 1, MOVE_GRAVITY), - LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE( 1, MOVE_BLOCK), - LEVEL_UP_MOVE( 1, MOVE_HARDEN), - LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), - LEVEL_UP_MOVE( 4, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE( 7, MOVE_BLOCK), - LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(13, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(16, MOVE_REST), LEVEL_UP_MOVE(19, MOVE_SPARK), @@ -8055,9 +7916,8 @@ static const struct LevelUpMove sProbopassLevelUpLearnset[] = { LEVEL_UP_MOVE(34, MOVE_SANDSTORM), LEVEL_UP_MOVE(37, MOVE_EARTH_POWER), LEVEL_UP_MOVE(40, MOVE_STONE_EDGE), - LEVEL_UP_MOVE(43, MOVE_LOCK_ON), LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON), - LEVEL_UP_MOVE(50, MOVE_BODY_PRESS), + LEVEL_UP_MOVE(43, MOVE_LOCK_ON), LEVEL_UP_END }; #endif //P_GEN_4_CROSS_EVOS @@ -8303,19 +8163,18 @@ static const struct LevelUpMove sManectricLevelUpLearnset[] = { #if P_FAMILY_PLUSLE static const struct LevelUpMove sPlusleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 7, MOVE_SPARK), LEVEL_UP_MOVE(10, MOVE_ENCORE), - LEVEL_UP_MOVE(13, MOVE_SKILL_SWAP), + LEVEL_UP_MOVE(13, MOVE_SWITCHEROO), LEVEL_UP_MOVE(16, MOVE_SWIFT), LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(22, MOVE_COPYCAT), - LEVEL_UP_MOVE(25, MOVE_CHARM), - LEVEL_UP_MOVE(28, MOVE_CHARGE), + LEVEL_UP_MOVE(26, MOVE_CHARGE), LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_BATON_PASS), LEVEL_UP_MOVE(37, MOVE_AGILITY), @@ -8330,10 +8189,10 @@ static const struct LevelUpMove sPlusleLevelUpLearnset[] = { #if P_FAMILY_MINUN static const struct LevelUpMove sMinunLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_NUZZLE), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 7, MOVE_SPARK), LEVEL_UP_MOVE(10, MOVE_ENCORE), @@ -8341,8 +8200,7 @@ static const struct LevelUpMove sMinunLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_SWIFT), LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL), LEVEL_UP_MOVE(22, MOVE_COPYCAT), - LEVEL_UP_MOVE(25, MOVE_FAKE_TEARS), - LEVEL_UP_MOVE(28, MOVE_CHARGE), + LEVEL_UP_MOVE(26, MOVE_CHARGE), LEVEL_UP_MOVE(31, MOVE_DISCHARGE), LEVEL_UP_MOVE(34, MOVE_BATON_PASS), LEVEL_UP_MOVE(37, MOVE_AGILITY), @@ -8356,7 +8214,6 @@ static const struct LevelUpMove sMinunLevelUpLearnset[] = { #if P_FAMILY_VOLBEAT_ILLUMISE static const struct LevelUpMove sVolbeatLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 8, MOVE_CONFUSE_RAY), @@ -8364,20 +8221,19 @@ static const struct LevelUpMove sVolbeatLevelUpLearnset[] = { LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(19, MOVE_MOONLIGHT), LEVEL_UP_MOVE(22, MOVE_TAIL_GLOW), - LEVEL_UP_MOVE(26, MOVE_ENCORE), - LEVEL_UP_MOVE(29, MOVE_PROTECT), - LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT), - LEVEL_UP_MOVE(36, MOVE_HELPING_HAND), - LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ), - LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), - LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(50, MOVE_INFESTATION), + LEVEL_UP_MOVE(26, MOVE_PROTECT), + LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(33, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(47, MOVE_INFESTATION), LEVEL_UP_END }; static const struct LevelUpMove sIllumiseLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 5, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 9, MOVE_CHARM), LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), @@ -8390,8 +8246,7 @@ static const struct LevelUpMove sIllumiseLevelUpLearnset[] = { LEVEL_UP_MOVE(36, MOVE_HELPING_HAND), LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ), LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH), - LEVEL_UP_MOVE(47, MOVE_COVET), - LEVEL_UP_MOVE(50, MOVE_INFESTATION), + LEVEL_UP_MOVE(47, MOVE_INFESTATION), LEVEL_UP_END }; #endif //P_FAMILY_VOLBEAT_ILLUMISE @@ -8704,7 +8559,6 @@ static const struct LevelUpMove sSpindaLevelUpLearnset[] = { static const struct LevelUpMove sTrapinchLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 4, MOVE_LASER_FOCUS), LEVEL_UP_MOVE( 8, MOVE_BITE), LEVEL_UP_MOVE(12, MOVE_MUD_SLAP), LEVEL_UP_MOVE(16, MOVE_SAND_TOMB), @@ -8721,17 +8575,15 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = { static const struct LevelUpMove sVibravaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), - LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), - LEVEL_UP_MOVE( 1, MOVE_DIG), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_FISSURE), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), - LEVEL_UP_MOVE( 1, MOVE_FISSURE), - LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_DIG), LEVEL_UP_MOVE(12, MOVE_MUD_SLAP), LEVEL_UP_MOVE(16, MOVE_SAND_TOMB), LEVEL_UP_MOVE(20, MOVE_DRAGON_TAIL), @@ -8748,21 +8600,18 @@ static const struct LevelUpMove sVibravaLevelUpLearnset[] = { static const struct LevelUpMove sFlygonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW), - LEVEL_UP_MOVE( 1, MOVE_OUTRAGE), - LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW), - LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE), - LEVEL_UP_MOVE( 1, MOVE_FEINT), - LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS), - LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_FISSURE), LEVEL_UP_MOVE( 1, MOVE_DIG), LEVEL_UP_MOVE( 1, MOVE_CRUNCH), LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), - LEVEL_UP_MOVE( 1, MOVE_FISSURE), - LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), - LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE( 1, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_MUD_SLAP), LEVEL_UP_MOVE(16, MOVE_SAND_TOMB), LEVEL_UP_MOVE(20, MOVE_DRAGON_TAIL), @@ -8864,6 +8713,18 @@ static const struct LevelUpMove sAltariaLevelUpLearnset[] = { #if P_FAMILY_ZANGOOSE static const struct LevelUpMove sZangooseLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK), @@ -9009,10 +8870,9 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = { static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SWIFT), - LEVEL_UP_MOVE( 1, MOVE_SWIFT), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE( 1, MOVE_HARDEN), - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_KNOCK_OFF), @@ -9163,12 +9023,11 @@ static const struct LevelUpMove sFeebasLevelUpLearnset[] = { static const struct LevelUpMove sMiloticLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE), - LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE), - LEVEL_UP_MOVE( 1, MOVE_FLAIL), - LEVEL_UP_MOVE( 1, MOVE_SPLASH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), LEVEL_UP_MOVE( 4, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 8, MOVE_TWISTER), LEVEL_UP_MOVE(12, MOVE_AQUA_RING), @@ -9268,8 +9127,8 @@ static const struct LevelUpMove sBanetteLevelUpLearnset[] = { #if P_FAMILY_DUSKULL static const struct LevelUpMove sDuskullLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 4, MOVE_DISABLE), LEVEL_UP_MOVE( 8, MOVE_SHADOW_SNEAK), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), @@ -9286,16 +9145,15 @@ static const struct LevelUpMove sDuskullLevelUpLearnset[] = { static const struct LevelUpMove sDusclopsLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_GRAVITY), LEVEL_UP_MOVE( 1, MOVE_BIND), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_GRAVITY), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(16, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(20, MOVE_PAYBACK), @@ -9310,16 +9168,16 @@ static const struct LevelUpMove sDusclopsLevelUpLearnset[] = { #if P_GEN_4_CROSS_EVOS static const struct LevelUpMove sDusknoirLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_GRAVITY), LEVEL_UP_MOVE( 1, MOVE_BIND), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_GRAVITY), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(16, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(20, MOVE_PAYBACK), @@ -9372,18 +9230,13 @@ static const struct LevelUpMove sChinglingLevelUpLearnset[] = { #endif //P_GEN_4_CROSS_EVOS static const struct LevelUpMove sChimechoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), - LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT), - LEVEL_UP_MOVE( 4, MOVE_GROWL), - LEVEL_UP_MOVE( 7, MOVE_ASTONISH), - LEVEL_UP_MOVE(10, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH), LEVEL_UP_MOVE(13, MOVE_YAWN), - LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(16, MOVE_STORED_POWER), LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(22, MOVE_EXTRASENSORY), LEVEL_UP_MOVE(27, MOVE_HEAL_BELL), @@ -9391,8 +9244,6 @@ static const struct LevelUpMove sChimechoLevelUpLearnset[] = { LEVEL_UP_MOVE(37, MOVE_SAFEGUARD), LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE(47, MOVE_HEAL_PULSE), - LEVEL_UP_MOVE(52, MOVE_PSYCHIC), - LEVEL_UP_MOVE(57, MOVE_HEALING_WISH), LEVEL_UP_END }; #endif //P_FAMILY_CHIMECHO @@ -9709,12 +9560,11 @@ static const struct LevelUpMove sBeldumLevelUpLearnset[] = { }; static const struct LevelUpMove sMetangLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 0, MOVE_CONFUSION), - LEVEL_UP_MOVE( 1, MOVE_CONFUSION), - LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), - LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 6, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(12, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(18, MOVE_FLASH_CANNON), @@ -9730,11 +9580,12 @@ static const struct LevelUpMove sMetangLevelUpLearnset[] = { static const struct LevelUpMove sMetagrossLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM), - LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 6, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(12, MOVE_MAGNET_RISE), LEVEL_UP_MOVE(16, MOVE_FLASH_CANNON), @@ -9751,8 +9602,8 @@ static const struct LevelUpMove sMetagrossLevelUpLearnset[] = { #if P_FAMILY_REGIROCK static const struct LevelUpMove sRegirockLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 6, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(18, MOVE_STOMP), @@ -9772,8 +9623,8 @@ static const struct LevelUpMove sRegirockLevelUpLearnset[] = { #if P_FAMILY_REGICE static const struct LevelUpMove sRegiceLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 6, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(18, MOVE_STOMP), @@ -9793,16 +9644,16 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = { #if P_FAMILY_REGISTEEL static const struct LevelUpMove sRegisteelLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 6, MOVE_BULLDOZE), LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(18, MOVE_STOMP), - LEVEL_UP_MOVE(24, MOVE_IRON_HEAD), LEVEL_UP_MOVE(24, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(24, MOVE_IRON_HEAD), LEVEL_UP_MOVE(30, MOVE_CURSE), - LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(36, MOVE_AMNESIA), + LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM), LEVEL_UP_MOVE(48, MOVE_HEAVY_SLAM), LEVEL_UP_MOVE(54, MOVE_SUPERPOWER), @@ -9816,8 +9667,8 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = { #if P_FAMILY_LATIAS static const struct LevelUpMove sLatiasLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), LEVEL_UP_MOVE( 5, MOVE_HELPING_HAND), LEVEL_UP_MOVE(10, MOVE_RECOVER), LEVEL_UP_MOVE(15, MOVE_CONFUSION), @@ -9832,15 +9683,14 @@ static const struct LevelUpMove sLatiasLevelUpLearnset[] = { LEVEL_UP_MOVE(60, MOVE_PSYCHIC), LEVEL_UP_MOVE(65, MOVE_GUARD_SPLIT), LEVEL_UP_MOVE(70, MOVE_HEALING_WISH), - LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT), LEVEL_UP_END }; #endif //P_FAMILY_LATIAS #if P_FAMILY_LATIOS static const struct LevelUpMove sLatiosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), LEVEL_UP_MOVE( 5, MOVE_HELPING_HAND), LEVEL_UP_MOVE(10, MOVE_RECOVER), LEVEL_UP_MOVE(15, MOVE_CONFUSION), @@ -9855,7 +9705,6 @@ static const struct LevelUpMove sLatiosLevelUpLearnset[] = { LEVEL_UP_MOVE(60, MOVE_PSYCHIC), LEVEL_UP_MOVE(65, MOVE_POWER_SPLIT), LEVEL_UP_MOVE(70, MOVE_MEMENTO), - LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT), LEVEL_UP_END }; #endif //P_FAMILY_LATIOS @@ -9926,7 +9775,6 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_WISH), LEVEL_UP_MOVE( 7, MOVE_SWIFT), - LEVEL_UP_MOVE(14, MOVE_HELPING_HAND), LEVEL_UP_MOVE(21, MOVE_LIFE_DEW), LEVEL_UP_MOVE(28, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(35, MOVE_GRAVITY), @@ -9945,15 +9793,15 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = { #if P_FAMILY_DEOXYS static const struct LevelUpMove sDeoxysNormalLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(13, MOVE_TELEPORT), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), - LEVEL_UP_MOVE(37, MOVE_SWITCHEROO), - LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(37, MOVE_GRAVITY), + LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(61, MOVE_RECOVER), @@ -9963,15 +9811,15 @@ static const struct LevelUpMove sDeoxysNormalLevelUpLearnset[] = { }; static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(13, MOVE_TELEPORT), LEVEL_UP_MOVE(19, MOVE_TAUNT), - LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SUPERPOWER), - LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(61, MOVE_ZAP_CANNON), @@ -9981,18 +9829,18 @@ static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = { }; static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(13, MOVE_TELEPORT), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(25, MOVE_SPIKES), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), - LEVEL_UP_MOVE(37, MOVE_SWITCHEROO), - LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), - LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(55, MOVE_AMNESIA), + LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(61, MOVE_RECOVER), LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST), LEVEL_UP_MOVE(73, MOVE_COUNTER), @@ -10001,15 +9849,15 @@ static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = { }; static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(13, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(25, MOVE_PSYSHOCK), LEVEL_UP_MOVE(31, MOVE_PSYCHIC), LEVEL_UP_MOVE(37, MOVE_SWIFT), - LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT), + LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP), LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(55, MOVE_AGILITY), LEVEL_UP_MOVE(61, MOVE_RECOVER), @@ -10023,8 +9871,7 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = { static const struct LevelUpMove sTurtwigLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_WITHDRAW), - LEVEL_UP_MOVE( 6, MOVE_LEAFAGE), - LEVEL_UP_MOVE(10, MOVE_GROWTH), + LEVEL_UP_MOVE( 9, MOVE_ABSORB), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(17, MOVE_CURSE), LEVEL_UP_MOVE(21, MOVE_BITE), @@ -10039,11 +9886,8 @@ static const struct LevelUpMove sTurtwigLevelUpLearnset[] = { static const struct LevelUpMove sGrotleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 5, MOVE_WITHDRAW), - LEVEL_UP_MOVE( 6, MOVE_LEAFAGE), - LEVEL_UP_MOVE(10, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE(17, MOVE_CURSE), LEVEL_UP_MOVE(22, MOVE_BITE), @@ -10058,16 +9902,11 @@ static const struct LevelUpMove sGrotleLevelUpLearnset[] = { static const struct LevelUpMove sTorterraLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE), - LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE), - LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 5, MOVE_WITHDRAW), - LEVEL_UP_MOVE( 6, MOVE_LEAFAGE), - LEVEL_UP_MOVE(10, MOVE_GROWTH), - LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER), LEVEL_UP_MOVE(17, MOVE_CURSE), LEVEL_UP_MOVE(22, MOVE_BITE), LEVEL_UP_MOVE(27, MOVE_MEGA_DRAIN), @@ -10076,6 +9915,7 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = { LEVEL_UP_MOVE(45, MOVE_CRUNCH), LEVEL_UP_MOVE(51, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(57, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(63, MOVE_HEADLONG_RUSH), LEVEL_UP_END }; #endif //P_FAMILY_TURTWIG @@ -10084,9 +9924,8 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = { static const struct LevelUpMove sChimcharLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 6, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_EMBER), LEVEL_UP_MOVE( 9, MOVE_TAUNT), - LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT), @@ -10101,16 +9940,10 @@ static const struct LevelUpMove sChimcharLevelUpLearnset[] = { static const struct LevelUpMove sMonfernoLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - LEVEL_UP_MOVE( 1, MOVE_FACADE), - LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), - LEVEL_UP_MOVE( 7, MOVE_EMBER), LEVEL_UP_MOVE( 9, MOVE_TAUNT), - LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH), LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(26, MOVE_FEINT), @@ -10125,29 +9958,21 @@ static const struct LevelUpMove sMonfernoLevelUpLearnset[] = { static const struct LevelUpMove sInfernapeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT), - LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT), - LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH), - LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_TAUNT), + LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_TAUNT), - LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - LEVEL_UP_MOVE( 1, MOVE_FACADE), - LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER), - LEVEL_UP_MOVE( 1, MOVE_TORMENT), - LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF), - LEVEL_UP_MOVE( 7, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_TAUNT), - LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH), LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL), LEVEL_UP_MOVE(26, MOVE_FEINT), - LEVEL_UP_MOVE(29, MOVE_U_TURN), + LEVEL_UP_MOVE(29, MOVE_TORMENT), LEVEL_UP_MOVE(42, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ), LEVEL_UP_MOVE(52, MOVE_ACROBATICS), LEVEL_UP_MOVE(58, MOVE_CALM_MIND), - LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(65, MOVE_RAGING_FURY), LEVEL_UP_END }; #endif //P_FAMILY_CHIMCHAR @@ -10156,7 +9981,7 @@ static const struct LevelUpMove sInfernapeLevelUpLearnset[] = { static const struct LevelUpMove sPiplupLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 4, MOVE_GROWL), - LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 8, MOVE_WATER_GUN), LEVEL_UP_MOVE(11, MOVE_CHARM), LEVEL_UP_MOVE(15, MOVE_PECK), LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM), @@ -10172,13 +9997,9 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = { static const struct LevelUpMove sPrinplupLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW), - LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 4, MOVE_GROWL), - LEVEL_UP_MOVE( 8, MOVE_WATER_GUN), - LEVEL_UP_MOVE(11, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), LEVEL_UP_MOVE(15, MOVE_PECK), LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(24, MOVE_SWAGGER), @@ -10193,14 +10014,10 @@ static const struct LevelUpMove sPrinplupLevelUpLearnset[] = { static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_JET), - LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), - LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 1, MOVE_CHARM), - LEVEL_UP_MOVE( 4, MOVE_GROWL), - LEVEL_UP_MOVE( 8, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE(11, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(15, MOVE_PECK), LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM), @@ -10211,6 +10028,7 @@ static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = { LEVEL_UP_MOVE(46, MOVE_MIST), LEVEL_UP_MOVE(52, MOVE_DRILL_PECK), LEVEL_UP_MOVE(59, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(66, MOVE_WAVE_CRASH), LEVEL_UP_END }; #endif //P_FAMILY_PIPLUP @@ -10398,11 +10216,11 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY), - LEVEL_UP_MOVE(10, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), LEVEL_UP_MOVE(24, MOVE_ASSURANCE), - LEVEL_UP_MOVE(28, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(42, MOVE_SCREECH), @@ -10411,16 +10229,15 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = { }; static const struct LevelUpMove sRampardosLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), + LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), - LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY), - LEVEL_UP_MOVE(10, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), LEVEL_UP_MOVE(24, MOVE_ASSURANCE), - LEVEL_UP_MOVE(28, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(36, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT), LEVEL_UP_MOVE(51, MOVE_SCREECH), @@ -10448,13 +10265,11 @@ static const struct LevelUpMove sShieldonLevelUpLearnset[] = { static const struct LevelUpMove sBastiodonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_BLOCK), - LEVEL_UP_MOVE( 1, MOVE_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_TAUNT), LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND), - LEVEL_UP_MOVE( 6, MOVE_TAUNT), - LEVEL_UP_MOVE(10, MOVE_METAL_SOUND), LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), LEVEL_UP_MOVE(19, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(24, MOVE_SWAGGER), @@ -11332,6 +11147,16 @@ static const struct LevelUpMove sRotomLevelUpLearnset[] = { #if P_FAMILY_UXIE static const struct LevelUpMove sUxieLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SNORE), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 7, MOVE_SWIFT), @@ -11352,6 +11177,16 @@ static const struct LevelUpMove sUxieLevelUpLearnset[] = { #if P_FAMILY_MESPRIT static const struct LevelUpMove sMespritLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SNORE), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 7, MOVE_SWIFT), @@ -11372,6 +11207,19 @@ static const struct LevelUpMove sMespritLevelUpLearnset[] = { #if P_FAMILY_AZELF static const struct LevelUpMove sAzelfLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SNORE), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_PAYBACK), + LEVEL_UP_MOVE( 1, MOVE_ASSURANCE), + LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM), + LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM), + LEVEL_UP_MOVE( 1, MOVE_ROUND), + LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_REST), LEVEL_UP_MOVE( 7, MOVE_SWIFT), @@ -11452,7 +11300,7 @@ static const struct LevelUpMove sRegigigasLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 6, MOVE_PAYBACK), - LEVEL_UP_MOVE(12, MOVE_REVENGE), + LEVEL_UP_MOVE(12, MOVE_FACADE), LEVEL_UP_MOVE(18, MOVE_STOMP), LEVEL_UP_MOVE(24, MOVE_PROTECT), LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF), @@ -11521,12 +11369,14 @@ static const struct LevelUpMove sPhioneLevelUpLearnset[] = { LEVEL_UP_MOVE(54, MOVE_AQUA_RING), LEVEL_UP_MOVE(61, MOVE_DIVE), LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(75, MOVE_TAKE_HEART), LEVEL_UP_END }; static const struct LevelUpMove sManaphyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TAIL_GLOW), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_TAIL_GLOW), + LEVEL_UP_MOVE( 1, MOVE_HEART_SWAP), LEVEL_UP_MOVE( 9, MOVE_CHARM), LEVEL_UP_MOVE(16, MOVE_SUPERSONIC), LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM), @@ -11536,19 +11386,18 @@ static const struct LevelUpMove sManaphyLevelUpLearnset[] = { LEVEL_UP_MOVE(54, MOVE_AQUA_RING), LEVEL_UP_MOVE(61, MOVE_DIVE), LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE), - LEVEL_UP_MOVE(76, MOVE_HEART_SWAP), + LEVEL_UP_MOVE(76, MOVE_TAKE_HEART), LEVEL_UP_END }; #endif //P_FAMILY_MANAPHY #if P_FAMILY_DARKRAI static const struct LevelUpMove sDarkraiLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(20, MOVE_HYPNOSIS), LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH), - LEVEL_UP_MOVE(38, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(38, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(47, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE(57, MOVE_HAZE), LEVEL_UP_MOVE(66, MOVE_DARK_VOID), @@ -11566,11 +11415,12 @@ static const struct LevelUpMove sShayminLandLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_SYNTHESIS), LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), - LEVEL_UP_MOVE(64, MOVE_AROMATHERAPY), - LEVEL_UP_MOVE(68, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(64, MOVE_GRASSY_TERRAIN), LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(82, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(91, MOVE_HEALING_WISH), LEVEL_UP_MOVE(100, MOVE_SEED_FLARE), LEVEL_UP_END }; @@ -11581,7 +11431,7 @@ static const struct LevelUpMove sShayminSkyLevelUpLearnset[] = { LEVEL_UP_MOVE(19, MOVE_LEECH_SEED), LEVEL_UP_MOVE(28, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT), - LEVEL_UP_MOVE(46, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(55, MOVE_WORRY_SEED), LEVEL_UP_MOVE(64, MOVE_AIR_SLASH), LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL), @@ -11641,60 +11491,51 @@ static const struct LevelUpMove sSnivyLevelUpLearnset[] = { LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP), LEVEL_UP_MOVE(10, MOVE_WRAP), LEVEL_UP_MOVE(13, MOVE_GROWTH), - LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(19, MOVE_LEECH_SEED), LEVEL_UP_MOVE(22, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(25, MOVE_SLAM), LEVEL_UP_MOVE(28, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(31, MOVE_COIL), LEVEL_UP_MOVE(34, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE(37, MOVE_WRING_OUT), - LEVEL_UP_MOVE(40, MOVE_GASTRO_ACID), - LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(37, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(40, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sServineLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_WRAP), - LEVEL_UP_MOVE( 4, MOVE_LEER), - LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP), - LEVEL_UP_MOVE(10, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE(13, MOVE_GROWTH), - LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(20, MOVE_LEECH_SEED), LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(36, MOVE_COIL), LEVEL_UP_MOVE(40, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE(44, MOVE_WRING_OUT), - LEVEL_UP_MOVE(48, MOVE_GASTRO_ACID), - LEVEL_UP_MOVE(52, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(48, MOVE_LEAF_STORM), LEVEL_UP_END }; static const struct LevelUpMove sSerperiorLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_WRAP), - LEVEL_UP_MOVE( 4, MOVE_LEER), - LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP), - LEVEL_UP_MOVE(10, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE(13, MOVE_GROWTH), - LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO), + LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(20, MOVE_LEECH_SEED), LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE(28, MOVE_SLAM), LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE), LEVEL_UP_MOVE(38, MOVE_COIL), LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE(50, MOVE_WRING_OUT), - LEVEL_UP_MOVE(56, MOVE_GASTRO_ACID), - LEVEL_UP_MOVE(62, MOVE_LEAF_STORM), + LEVEL_UP_MOVE(50, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(56, MOVE_LEAF_STORM), LEVEL_UP_END }; #endif //P_FAMILY_SNIVY @@ -11704,7 +11545,7 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 7, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 9, MOVE_ENDURE), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(19, MOVE_SMOG), @@ -11721,14 +11562,10 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = { static const struct LevelUpMove sPigniteLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST), - LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), - LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 7, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_ENDURE), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(20, MOVE_SMOG), @@ -11744,15 +11581,12 @@ static const struct LevelUpMove sPigniteLevelUpLearnset[] = { }; static const struct LevelUpMove sEmboarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), + LEVEL_UP_MOVE( 1, MOVE_ENDURE), LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_EMBER), - LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), - LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 7, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(20, MOVE_SMOG), @@ -12188,35 +12022,28 @@ static const struct LevelUpMove sBlitzleLevelUpLearnset[] = { LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE), LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE), - LEVEL_UP_MOVE(22, MOVE_PURSUIT), - LEVEL_UP_MOVE(25, MOVE_SPARK), - LEVEL_UP_MOVE(29, MOVE_STOMP), - LEVEL_UP_MOVE(32, MOVE_DISCHARGE), - LEVEL_UP_MOVE(36, MOVE_AGILITY), - LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE), - LEVEL_UP_MOVE(43, MOVE_THRASH), + LEVEL_UP_MOVE(22, MOVE_SPARK), + LEVEL_UP_MOVE(25, MOVE_STOMP), + LEVEL_UP_MOVE(29, MOVE_DISCHARGE), + LEVEL_UP_MOVE(33, MOVE_AGILITY), + LEVEL_UP_MOVE(35, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(40, MOVE_THRASH), LEVEL_UP_END }; static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), - LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 8, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE), - LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE), - LEVEL_UP_MOVE(22, MOVE_PURSUIT), LEVEL_UP_MOVE(25, MOVE_SPARK), LEVEL_UP_MOVE(31, MOVE_STOMP), LEVEL_UP_MOVE(36, MOVE_DISCHARGE), LEVEL_UP_MOVE(42, MOVE_AGILITY), LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE), LEVEL_UP_MOVE(53, MOVE_THRASH), - LEVEL_UP_MOVE(58, MOVE_ION_DELUGE), LEVEL_UP_END }; #endif //P_FAMILY_BLITZLE @@ -12334,10 +12161,9 @@ static const struct LevelUpMove sDrilburLevelUpLearnset[] = { static const struct LevelUpMove sExcadrillLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL), - LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), - LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(16, MOVE_METAL_CLAW), @@ -12545,25 +12371,25 @@ static const struct LevelUpMove sSewaddleLevelUpLearnset[] = { static const struct LevelUpMove sSwadloonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_PROTECT), - LEVEL_UP_MOVE( 1, MOVE_PROTECT), - LEVEL_UP_MOVE( 1, MOVE_GRASS_WHISTLE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), - LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(29, MOVE_ENDURE), + LEVEL_UP_MOVE(31, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(43, MOVE_FLAIL), LEVEL_UP_END }; static const struct LevelUpMove sLeavannyLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SLASH), - LEVEL_UP_MOVE( 1, MOVE_SLASH), - LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), - LEVEL_UP_MOVE( 8, MOVE_BUG_BITE), - LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE), LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(29, MOVE_FELL_STINGER), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), @@ -12636,8 +12462,8 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = { #if P_FAMILY_COTTONEE static const struct LevelUpMove sCottoneeLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 3, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE), LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN), @@ -12657,28 +12483,28 @@ static const struct LevelUpMove sCottoneeLevelUpLearnset[] = { }; static const struct LevelUpMove sWhimsicottLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_GUST), - LEVEL_UP_MOVE( 1, MOVE_TAILWIND), LEVEL_UP_MOVE( 1, MOVE_MOONBLAST), - LEVEL_UP_MOVE( 1, MOVE_MEMENTO), LEVEL_UP_MOVE( 1, MOVE_HURRICANE), - LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD), + LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE( 1, MOVE_TAILWIND), + LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), LEVEL_UP_MOVE( 1, MOVE_GROWTH), - LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), - LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE( 1, MOVE_CHARM), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), - LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE), - LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), - LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), - LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), - LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD), - LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), - LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_END }; #endif //P_FAMILY_COTTONEE @@ -12801,7 +12627,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), @@ -13031,13 +12856,13 @@ static const struct LevelUpMove sCrustleLevelUpLearnset[] = { #if P_FAMILY_SCRAGGY static const struct LevelUpMove sScraggyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), LEVEL_UP_MOVE( 4, MOVE_PAYBACK), LEVEL_UP_MOVE( 8, MOVE_HEADBUTT), LEVEL_UP_MOVE(12, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(16, MOVE_FACADE), - LEVEL_UP_MOVE(20, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_TORMENT), LEVEL_UP_MOVE(24, MOVE_BEAT_UP), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), LEVEL_UP_MOVE(32, MOVE_BRICK_BREAK), @@ -13050,13 +12875,13 @@ static const struct LevelUpMove sScraggyLevelUpLearnset[] = { }; static const struct LevelUpMove sScraftyLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), - LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_PAYBACK), LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_PAYBACK), LEVEL_UP_MOVE(12, MOVE_SAND_ATTACK), LEVEL_UP_MOVE(16, MOVE_FACADE), - LEVEL_UP_MOVE(20, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_TORMENT), LEVEL_UP_MOVE(24, MOVE_BEAT_UP), LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), LEVEL_UP_MOVE(32, MOVE_BRICK_BREAK), @@ -13362,7 +13187,6 @@ static const struct LevelUpMove sZoruaHisuianLevelUpLearnset[] = { LEVEL_UP_MOVE(16, MOVE_CURSE), LEVEL_UP_MOVE(20, MOVE_TAUNT), LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF), - LEVEL_UP_MOVE(28, MOVE_SPITE), LEVEL_UP_MOVE(32, MOVE_AGILITY), LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(40, MOVE_BITTER_MALICE), @@ -13413,22 +13237,22 @@ static const struct LevelUpMove sMinccinoLevelUpLearnset[] = { }; static const struct LevelUpMove sCinccinoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), - LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), - LEVEL_UP_MOVE( 1, MOVE_SING), - LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 0, MOVE_TAIL_SLAP), + LEVEL_UP_MOVE( 1, MOVE_SLAM), LEVEL_UP_MOVE( 1, MOVE_SWIFT), LEVEL_UP_MOVE( 1, MOVE_ENCORE), - LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), - LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP), - LEVEL_UP_MOVE( 1, MOVE_TICKLE), - LEVEL_UP_MOVE( 1, MOVE_SLAM), - LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), - LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), - LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE( 1, MOVE_TICKLE), + LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED), LEVEL_UP_END }; #endif //P_FAMILY_MINCCINO @@ -13490,8 +13314,8 @@ static const struct LevelUpMove sGothitelleLevelUpLearnset[] = { #if P_FAMILY_SOLOSIS static const struct LevelUpMove sSolosisLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 4, MOVE_RECOVER), LEVEL_UP_MOVE( 8, MOVE_ENDEAVOR), LEVEL_UP_MOVE(12, MOVE_PSYBEAM), @@ -13509,9 +13333,9 @@ static const struct LevelUpMove sSolosisLevelUpLearnset[] = { }; static const struct LevelUpMove sDuosionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_RECOVER), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), LEVEL_UP_MOVE(12, MOVE_PSYBEAM), LEVEL_UP_MOVE(16, MOVE_CHARM), @@ -13529,10 +13353,9 @@ static const struct LevelUpMove sDuosionLevelUpLearnset[] = { static const struct LevelUpMove sReuniclusLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM), - LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM), - LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_RECOVER), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR), LEVEL_UP_MOVE(12, MOVE_PSYBEAM), LEVEL_UP_MOVE(16, MOVE_CHARM), @@ -13552,7 +13375,6 @@ static const struct LevelUpMove sReuniclusLevelUpLearnset[] = { #if P_FAMILY_DUCKLETT static const struct LevelUpMove sDucklettLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT), LEVEL_UP_MOVE( 6, MOVE_DEFOG), LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK), LEVEL_UP_MOVE(13, MOVE_WATER_PULSE), @@ -13570,13 +13392,9 @@ static const struct LevelUpMove sDucklettLevelUpLearnset[] = { }; static const struct LevelUpMove sSwannaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), - LEVEL_UP_MOVE( 1, MOVE_DEFOG), LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), - LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT), - LEVEL_UP_MOVE( 6, MOVE_DEFOG), - LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_DEFOG), LEVEL_UP_MOVE(13, MOVE_WATER_PULSE), LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE), LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM), @@ -13870,11 +13688,10 @@ static const struct LevelUpMove sJoltikLevelUpLearnset[] = { static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_STICKY_WEB), - LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), - LEVEL_UP_MOVE( 1, MOVE_ELECTROWEB), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_ELECTROWEB), LEVEL_UP_MOVE(12, MOVE_STRING_SHOT), LEVEL_UP_MOVE(16, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE(20, MOVE_ELECTRO_BALL), @@ -14066,8 +13883,8 @@ static const struct LevelUpMove sBeheeyemLevelUpLearnset[] = { #if P_FAMILY_LITWICK static const struct LevelUpMove sLitwickLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 4, MOVE_EMBER), LEVEL_UP_MOVE( 8, MOVE_MINIMIZE), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), @@ -14086,10 +13903,10 @@ static const struct LevelUpMove sLitwickLevelUpLearnset[] = { }; static const struct LevelUpMove sLampentLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(16, MOVE_HEX), LEVEL_UP_MOVE(20, MOVE_WILL_O_WISP), @@ -14106,22 +13923,22 @@ static const struct LevelUpMove sLampentLevelUpLearnset[] = { }; static const struct LevelUpMove sChandelureLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - LEVEL_UP_MOVE( 1, MOVE_HEX), - LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN), LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), - LEVEL_UP_MOVE( 1, MOVE_CURSE), - LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), - LEVEL_UP_MOVE( 1, MOVE_INFERNO), - LEVEL_UP_MOVE( 1, MOVE_IMPRISON), - LEVEL_UP_MOVE( 1, MOVE_PAIN_SPLIT), - LEVEL_UP_MOVE( 1, MOVE_OVERHEAT), - LEVEL_UP_MOVE( 1, MOVE_MEMENTO), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 1, MOVE_SMOG), - LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 1, MOVE_PAIN_SPLIT), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_IMPRISON), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_OVERHEAT), + LEVEL_UP_MOVE( 1, MOVE_HEX), + LEVEL_UP_MOVE( 1, MOVE_INFERNO), LEVEL_UP_END }; #endif //P_FAMILY_LITWICK @@ -14373,11 +14190,11 @@ static const struct LevelUpMove sMienfooLevelUpLearnset[] = { }; static const struct LevelUpMove sMienshaoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_REVERSAL), LEVEL_UP_MOVE( 1, MOVE_DETECT), LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_REVERSAL), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(20, MOVE_WIDE_GUARD), LEVEL_UP_MOVE(25, MOVE_FORCE_PALM), @@ -14433,12 +14250,12 @@ static const struct LevelUpMove sGolettLevelUpLearnset[] = { }; static const struct LevelUpMove sGolurkLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER), - LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), - LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH), LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER), LEVEL_UP_MOVE(12, MOVE_SHADOW_PUNCH), LEVEL_UP_MOVE(16, MOVE_CURSE), LEVEL_UP_MOVE(20, MOVE_NIGHT_SHADE), @@ -14621,13 +14438,12 @@ static const struct LevelUpMove sVullabyLevelUpLearnset[] = { static const struct LevelUpMove sMandibuzzLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH), - LEVEL_UP_MOVE( 1, MOVE_BONE_RUSH), - LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), - LEVEL_UP_MOVE( 1, MOVE_TOXIC), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_FLATTER), + LEVEL_UP_MOVE( 1, MOVE_TOXIC), + LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), LEVEL_UP_MOVE( 1, MOVE_PLUCK), + LEVEL_UP_MOVE( 1, MOVE_FLATTER), LEVEL_UP_MOVE(18, MOVE_TAILWIND), LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE), @@ -14762,7 +14578,6 @@ static const struct LevelUpMove sLarvestaLevelUpLearnset[] = { LEVEL_UP_MOVE( 6, MOVE_FLAME_CHARGE), LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG), LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL), - LEVEL_UP_MOVE(24, MOVE_BUG_BITE), LEVEL_UP_MOVE(30, MOVE_SCREECH), LEVEL_UP_MOVE(36, MOVE_LEECH_LIFE), LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ), @@ -14802,8 +14617,8 @@ static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = { #if P_FAMILY_COBALION static const struct LevelUpMove sCobalionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_WORK_UP), LEVEL_UP_MOVE( 7, MOVE_METAL_CLAW), @@ -14822,8 +14637,8 @@ static const struct LevelUpMove sCobalionLevelUpLearnset[] = { #if P_FAMILY_TERRAKION static const struct LevelUpMove sTerrakionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_WORK_UP), LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN), @@ -14842,8 +14657,9 @@ static const struct LevelUpMove sTerrakionLevelUpLearnset[] = { #if P_FAMILY_VIRIZION static const struct LevelUpMove sVirizionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 1, MOVE_WORK_UP), LEVEL_UP_MOVE( 7, MOVE_MAGICAL_LEAF), @@ -14851,7 +14667,7 @@ static const struct LevelUpMove sVirizionLevelUpLearnset[] = { LEVEL_UP_MOVE(21, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE(28, MOVE_RETALIATE), LEVEL_UP_MOVE(35, MOVE_GIGA_DRAIN), - LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(42, MOVE_SYNTHESIS), LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD), LEVEL_UP_MOVE(56, MOVE_SWORDS_DANCE), LEVEL_UP_MOVE(63, MOVE_LEAF_BLADE), @@ -14909,9 +14725,9 @@ static const struct LevelUpMove sThundurusLevelUpLearnset[] = { #if P_FAMILY_RESHIRAM static const struct LevelUpMove sReshiramLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 8, MOVE_SLASH), LEVEL_UP_MOVE(16, MOVE_CRUNCH), LEVEL_UP_MOVE(24, MOVE_EXTRASENSORY), @@ -14930,9 +14746,9 @@ static const struct LevelUpMove sReshiramLevelUpLearnset[] = { #if P_FAMILY_ZEKROM static const struct LevelUpMove sZekromLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 8, MOVE_SLASH), LEVEL_UP_MOVE(16, MOVE_CRUNCH), LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT), @@ -14974,8 +14790,8 @@ static const struct LevelUpMove sLandorusLevelUpLearnset[] = { #if P_FAMILY_KYUREM static const struct LevelUpMove sKyuremLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 8, MOVE_SLASH), LEVEL_UP_MOVE(16, MOVE_ENDEAVOR), @@ -14994,8 +14810,8 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = { #if P_FUSION_FORMS static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 8, MOVE_SLASH), LEVEL_UP_MOVE(16, MOVE_ENDEAVOR), @@ -15015,8 +14831,8 @@ static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = { #if P_FUSION_FORMS static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), - LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY), LEVEL_UP_MOVE( 8, MOVE_SLASH), LEVEL_UP_MOVE(16, MOVE_ENDEAVOR), @@ -15036,11 +14852,11 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = { #if P_FAMILY_KELDEO static const struct LevelUpMove sKeldeoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SECRET_SWORD), - LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), LEVEL_UP_MOVE( 1, MOVE_WORK_UP), + LEVEL_UP_MOVE( 1, MOVE_SECRET_SWORD), LEVEL_UP_MOVE( 7, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(14, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(21, MOVE_DOUBLE_KICK), @@ -15498,6 +15314,7 @@ static const struct LevelUpMove sFloetteEternalFlowerLevelUpLearnset[] = { LEVEL_UP_MOVE(38, MOVE_SYNTHESIS), LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN), LEVEL_UP_MOVE(46, MOVE_MOONBLAST), + LEVEL_UP_MOVE(50, MOVE_LIGHT_OF_RUIN), LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE), LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM), LEVEL_UP_END @@ -15639,10 +15456,10 @@ static const struct LevelUpMove sEspurrLevelUpLearnset[] = { static const struct LevelUpMove sMeowsticMaleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), - LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), LEVEL_UP_MOVE( 9, MOVE_CONFUSION), LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), LEVEL_UP_MOVE(15, MOVE_CHARM), @@ -15662,10 +15479,10 @@ static const struct LevelUpMove sMeowsticMaleLevelUpLearnset[] = { static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), - LEVEL_UP_MOVE( 1, MOVE_SCRATCH), - LEVEL_UP_MOVE( 1, MOVE_LEER), - LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 9, MOVE_CONFUSION), LEVEL_UP_MOVE(12, MOVE_STORED_POWER), LEVEL_UP_MOVE(15, MOVE_CHARGE_BEAM), @@ -15828,8 +15645,8 @@ static const struct LevelUpMove sSlurpuffLevelUpLearnset[] = { #if P_FAMILY_INKAY static const struct LevelUpMove sInkayLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 3, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 6, MOVE_WRAP), LEVEL_UP_MOVE( 9, MOVE_PAYBACK), @@ -15847,11 +15664,11 @@ static const struct LevelUpMove sInkayLevelUpLearnset[] = { }; static const struct LevelUpMove sMalamarLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_REVERSAL), - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_REVERSAL), LEVEL_UP_MOVE( 9, MOVE_PAYBACK), LEVEL_UP_MOVE(12, MOVE_PLUCK), LEVEL_UP_MOVE(15, MOVE_PSYBEAM), @@ -16286,8 +16103,8 @@ static const struct LevelUpMove sKlefkiLevelUpLearnset[] = { #if P_FAMILY_PHANTUMP static const struct LevelUpMove sPhantumpLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 4, MOVE_BRANCH_POKE), LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), @@ -16306,11 +16123,10 @@ static const struct LevelUpMove sPhantumpLevelUpLearnset[] = { static const struct LevelUpMove sTrevenantLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), - LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW), - LEVEL_UP_MOVE( 1, MOVE_ASTONISH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE), LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), LEVEL_UP_MOVE(20, MOVE_HEX), @@ -16766,14 +16582,13 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = { static const struct LevelUpMove sIncineroarLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DARKEST_LARIAT), - LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT), - LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP), - LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), - LEVEL_UP_MOVE( 1, MOVE_BULK_UP), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE( 1, MOVE_BULK_UP), LEVEL_UP_MOVE( 9, MOVE_ROAR), LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), LEVEL_UP_MOVE(15, MOVE_BITE), @@ -16827,7 +16642,6 @@ static const struct LevelUpMove sBrionneLevelUpLearnset[] = { static const struct LevelUpMove sPrimarinaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SPARKLING_ARIA), - LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -16865,14 +16679,11 @@ static const struct LevelUpMove sPikipekLevelUpLearnset[] = { }; static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), - LEVEL_UP_MOVE( 1, MOVE_PECK), - LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE( 3, MOVE_GROWL), - LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), - LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), LEVEL_UP_MOVE(13, MOVE_SUPERSONIC), LEVEL_UP_MOVE(16, MOVE_PLUCK), LEVEL_UP_MOVE(21, MOVE_ROOST), @@ -16887,15 +16698,11 @@ static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = { static const struct LevelUpMove sToucannonLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_BEAK_BLAST), - LEVEL_UP_MOVE( 1, MOVE_BEAK_BLAST), - LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), - LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_GROWL), - LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE( 3, MOVE_GROWL), - LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE), - LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE), LEVEL_UP_MOVE(13, MOVE_SUPERSONIC), LEVEL_UP_MOVE(16, MOVE_PLUCK), LEVEL_UP_MOVE(21, MOVE_ROOST), @@ -16964,10 +16771,9 @@ static const struct LevelUpMove sGrubbinLevelUpLearnset[] = { static const struct LevelUpMove sCharjabugLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CHARGE), - LEVEL_UP_MOVE( 1, MOVE_CHARGE), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), - LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE(15, MOVE_BITE), LEVEL_UP_MOVE(23, MOVE_SPARK), @@ -16982,17 +16788,16 @@ static const struct LevelUpMove sCharjabugLevelUpLearnset[] = { static const struct LevelUpMove sVikavoltLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT), - LEVEL_UP_MOVE( 1, MOVE_THUNDERBOLT), - LEVEL_UP_MOVE( 1, MOVE_CHARGE), - LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), - LEVEL_UP_MOVE( 1, MOVE_CRUNCH), - LEVEL_UP_MOVE( 1, MOVE_DIG), - LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), + LEVEL_UP_MOVE( 1, MOVE_DIG), LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), - LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_CRUNCH), + LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_DISCHARGE), LEVEL_UP_MOVE(15, MOVE_BITE), LEVEL_UP_MOVE(23, MOVE_SPARK), LEVEL_UP_MOVE(29, MOVE_STICKY_WEB), @@ -17070,7 +16875,7 @@ static const struct LevelUpMove sCutieflyLevelUpLearnset[] = { LEVEL_UP_MOVE(12, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(24, MOVE_STRUGGLE_BUG), - LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(30, MOVE_COVET), LEVEL_UP_MOVE(36, MOVE_SWITCHEROO), LEVEL_UP_MOVE(42, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ), @@ -17080,15 +16885,13 @@ static const struct LevelUpMove sCutieflyLevelUpLearnset[] = { static const struct LevelUpMove sRibombeeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_POLLEN_PUFF), - LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF), - LEVEL_UP_MOVE( 1, MOVE_COVET), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS), LEVEL_UP_MOVE(24, MOVE_STRUGGLE_BUG), - LEVEL_UP_MOVE(32, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(32, MOVE_COVET), LEVEL_UP_MOVE(40, MOVE_SWITCHEROO), LEVEL_UP_MOVE(48, MOVE_DAZZLING_GLEAM), LEVEL_UP_MOVE(56, MOVE_BUG_BUZZ), @@ -17299,11 +17102,11 @@ static const struct LevelUpMove sDewpiderLevelUpLearnset[] = { }; static const struct LevelUpMove sAraquanidLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), - LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), - LEVEL_UP_MOVE( 1, MOVE_INFESTATION), - LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM), LEVEL_UP_MOVE(16, MOVE_AQUA_RING), LEVEL_UP_MOVE(20, MOVE_HEADBUTT), @@ -17530,7 +17333,7 @@ static const struct LevelUpMove sComfeyLevelUpLearnset[] = { LEVEL_UP_MOVE( 3, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 6, MOVE_HELPING_HAND), LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS), - LEVEL_UP_MOVE(12, MOVE_FLOWER_SHIELD), + LEVEL_UP_MOVE(12, MOVE_CHARM), LEVEL_UP_MOVE(15, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(18, MOVE_SYNTHESIS), LEVEL_UP_MOVE(21, MOVE_LEECH_SEED), @@ -17538,7 +17341,7 @@ static const struct LevelUpMove sComfeyLevelUpLearnset[] = { LEVEL_UP_MOVE(27, MOVE_SWEET_KISS), LEVEL_UP_MOVE(30, MOVE_FLORAL_HEALING), LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD), - LEVEL_UP_MOVE(36, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(36, MOVE_BIND), LEVEL_UP_MOVE(39, MOVE_PLAY_ROUGH), LEVEL_UP_MOVE(42, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(45, MOVE_PETAL_DANCE), @@ -17732,7 +17535,7 @@ static const struct LevelUpMove sMiniorLevelUpLearnset[] = { LEVEL_UP_MOVE(22, MOVE_SELF_DESTRUCT), LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), - LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(31, MOVE_ROCK_POLISH), LEVEL_UP_MOVE(36, MOVE_COSMIC_POWER), LEVEL_UP_MOVE(38, MOVE_POWER_GEM), LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), @@ -17903,7 +17706,6 @@ static const struct LevelUpMove sJangmoOLevelUpLearnset[] = { }; static const struct LevelUpMove sHakamoOLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -17923,9 +17725,7 @@ static const struct LevelUpMove sHakamoOLevelUpLearnset[] = { static const struct LevelUpMove sKommoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES), - LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM), - LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_PROTECT), @@ -18048,17 +17848,15 @@ static const struct LevelUpMove sCosmogLevelUpLearnset[] = { static const struct LevelUpMove sCosmoemLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER), - LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_END }; static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SUNSTEEL_STRIKE), - LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE), - LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD), LEVEL_UP_MOVE(14, MOVE_METAL_SOUND), @@ -18077,23 +17875,21 @@ static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = { static const struct LevelUpMove sLunalaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_MOONGEIST_BEAM), - LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM), - LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), - LEVEL_UP_MOVE( 1, MOVE_TELEPORT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), LEVEL_UP_MOVE(14, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE(21, MOVE_AIR_SLASH), LEVEL_UP_MOVE(28, MOVE_SHADOW_BALL), LEVEL_UP_MOVE(35, MOVE_MOONLIGHT), LEVEL_UP_MOVE(42, MOVE_NIGHT_DAZE), - LEVEL_UP_MOVE(49, MOVE_MAGIC_COAT), + LEVEL_UP_MOVE(49, MOVE_PSYCHIC), LEVEL_UP_MOVE(56, MOVE_MOONBLAST), LEVEL_UP_MOVE(63, MOVE_PHANTOM_FORCE), LEVEL_UP_MOVE(70, MOVE_DREAM_EATER), LEVEL_UP_MOVE(77, MOVE_WIDE_GUARD), - LEVEL_UP_MOVE(84, MOVE_HYPER_BEAM), LEVEL_UP_END }; #endif //P_FAMILY_COSMOG @@ -18256,12 +18052,11 @@ static const struct LevelUpMove sGuzzlordLevelUpLearnset[] = { #if P_FAMILY_NECROZMA static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), - LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN), - LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), - LEVEL_UP_MOVE( 1, MOVE_GRAVITY), - LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN), + LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT), + LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM), LEVEL_UP_MOVE( 8, MOVE_STEALTH_ROCK), LEVEL_UP_MOVE(16, MOVE_SLASH), LEVEL_UP_MOVE(24, MOVE_NIGHT_SLASH), @@ -18271,7 +18066,7 @@ static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = { LEVEL_UP_MOVE(56, MOVE_IRON_DEFENSE), LEVEL_UP_MOVE(64, MOVE_POWER_GEM), LEVEL_UP_MOVE(72, MOVE_PHOTON_GEYSER), - LEVEL_UP_MOVE(80, MOVE_AUTOTOMIZE), + LEVEL_UP_MOVE(80, MOVE_GRAVITY), LEVEL_UP_MOVE(88, MOVE_PRISMATIC_LASER), LEVEL_UP_END }; @@ -19019,6 +18814,7 @@ static const struct LevelUpMove sAppletunLevelUpLearnset[] = { #if P_GEN_9_CROSS_EVOS static const struct LevelUpMove sDipplinLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), @@ -19038,6 +18834,9 @@ static const struct LevelUpMove sDipplinLevelUpLearnset[] = { static const struct LevelUpMove sHydrappleLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FICKLE_BEAM), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_INFESTATION), LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), LEVEL_UP_MOVE( 1, MOVE_RECYCLE), @@ -19097,8 +18896,8 @@ static const struct LevelUpMove sCramorantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BELCH), LEVEL_UP_MOVE( 1, MOVE_PECK), LEVEL_UP_MOVE( 1, MOVE_STOCKPILE), - LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 1, MOVE_SPIT_UP), + LEVEL_UP_MOVE( 1, MOVE_SWALLOW), LEVEL_UP_MOVE( 7, MOVE_WATER_GUN), LEVEL_UP_MOVE(14, MOVE_FURY_ATTACK), LEVEL_UP_MOVE(21, MOVE_PLUCK), @@ -19433,7 +19232,7 @@ static const struct LevelUpMove sMilceryLevelUpLearnset[] = { LEVEL_UP_MOVE( 5, MOVE_SWEET_KISS), LEVEL_UP_MOVE(10, MOVE_SWEET_SCENT), LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), - LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(20, MOVE_CHARM), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), @@ -19445,13 +19244,12 @@ static const struct LevelUpMove sMilceryLevelUpLearnset[] = { static const struct LevelUpMove sAlcremieLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_DECORATE), - LEVEL_UP_MOVE( 1, MOVE_DECORATE), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS), LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST), LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS), - LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(20, MOVE_CHARM), LEVEL_UP_MOVE(25, MOVE_ATTRACT), LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR), LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), @@ -19606,8 +19404,8 @@ static const struct LevelUpMove sIndeedeeFemaleLevelUpLearnset[] = { #if P_FAMILY_MORPEKO static const struct LevelUpMove sMorpekoLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE(10, MOVE_POWER_TRIP), LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), @@ -20080,29 +19878,30 @@ static const struct LevelUpMove sCalyrexLevelUpLearnset[] = { #if P_FUSION_FORMS static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GLACIAL_LANCE), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), - LEVEL_UP_MOVE( 1, MOVE_AVALANCHE), - LEVEL_UP_MOVE( 1, MOVE_STOMP), - LEVEL_UP_MOVE( 1, MOVE_TORMENT), - LEVEL_UP_MOVE( 1, MOVE_MIST), LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH), - LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE( 1, MOVE_AVALANCHE), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE( 1, MOVE_THRASH), LEVEL_UP_MOVE( 1, MOVE_TAUNT), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_TORMENT), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE( 1, MOVE_THRASH), + LEVEL_UP_MOVE( 1, MOVE_STOMP), + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_MIST), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), - LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(40, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC_TERRAIN), LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_LEECH_SEED), @@ -20116,29 +19915,30 @@ static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = { #if P_FUSION_FORMS static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_ASTRAL_BARRAGE), - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), LEVEL_UP_MOVE( 1, MOVE_HEX), - LEVEL_UP_MOVE( 1, MOVE_STOMP), - LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), - LEVEL_UP_MOVE( 1, MOVE_HAZE), - LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), - LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), - LEVEL_UP_MOVE( 1, MOVE_AGILITY), - LEVEL_UP_MOVE( 1, MOVE_THRASH), - LEVEL_UP_MOVE( 1, MOVE_DISABLE), - LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT), - LEVEL_UP_MOVE( 1, MOVE_POUND), - LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE( 1, MOVE_HAZE), + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_AGILITY), + LEVEL_UP_MOVE( 1, MOVE_STOMP), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE( 1, MOVE_THRASH), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW), LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN), LEVEL_UP_MOVE(24, MOVE_PSYSHOCK), LEVEL_UP_MOVE(32, MOVE_HELPING_HAND), - LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(40, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC_TERRAIN), LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL), LEVEL_UP_MOVE(56, MOVE_PSYCHIC), LEVEL_UP_MOVE(64, MOVE_LEECH_SEED), @@ -20211,6 +20011,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), LEVEL_UP_MOVE( 1, MOVE_SCRATCH), LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), @@ -20269,6 +20071,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_YAWN), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_LEER), @@ -20328,6 +20132,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_GROWL), LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), @@ -20812,6 +20617,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21148,6 +20957,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = { static const struct LevelUpMove sRabscaLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), LEVEL_UP_MOVE( 1, MOVE_CONFUSION), @@ -21674,6 +21485,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_POUND), LEVEL_UP_MOVE( 1, MOVE_SING), LEVEL_UP_MOVE( 1, MOVE_DISABLE), @@ -21696,6 +21508,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { #if P_FAMILY_BRUTE_BONNET static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_ABSORB), LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21717,6 +21530,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), LEVEL_UP_MOVE( 1, MOVE_SPITE), LEVEL_UP_MOVE( 1, MOVE_ASTONISH), @@ -21739,6 +21553,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { #if P_FAMILY_SLITHER_WING static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_EMBER), LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), @@ -21762,6 +21577,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { #if P_FAMILY_SANDY_SHOCKS static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), @@ -21807,6 +21623,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_PRESENT), LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), @@ -21827,6 +21644,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { #if P_FAMILY_IRON_HANDS static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), @@ -21873,6 +21691,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { #if P_FAMILY_IRON_MOTH static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_GUST), LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), LEVEL_UP_MOVE( 1, MOVE_EMBER), @@ -21896,11 +21715,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = { #if P_FAMILY_IRON_THORNS static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), LEVEL_UP_MOVE( 1, MOVE_ICE_FANG), - LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG), LEVEL_UP_MOVE( 7, MOVE_SCREECH), LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), LEVEL_UP_MOVE(28, MOVE_BITE), @@ -22097,6 +21917,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = { #if P_FAMILY_ROARING_MOON static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT), LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_BITE), @@ -22120,6 +21944,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { #if P_FAMILY_IRON_VALIANT static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_DISABLE), LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), @@ -22135,8 +21960,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND), - LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD), LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK), LEVEL_UP_END }; @@ -22188,6 +22013,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { #if P_FAMILY_WALKING_WAKE static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_ROAR), LEVEL_UP_MOVE( 1, MOVE_TWISTER), @@ -22209,6 +22036,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { #if P_FAMILY_IRON_LEAVES static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUASH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -22316,8 +22145,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { LEVEL_UP_MOVE(32, MOVE_CROSS_POISON), LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP), LEVEL_UP_MOVE(48, MOVE_BEAT_UP), - LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(56, MOVE_SWAGGER), + LEVEL_UP_MOVE(56, MOVE_FLATTER), LEVEL_UP_MOVE(64, MOVE_ROOST), LEVEL_UP_MOVE(72, MOVE_MOONBLAST), LEVEL_UP_END @@ -22326,6 +22155,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { #if P_FAMILY_OGERPON static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH), LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), @@ -22347,6 +22180,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = { #if P_FAMILY_GOUGING_FIRE static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR), LEVEL_UP_MOVE( 1, MOVE_STOMP), LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_INCINERATE), @@ -22370,6 +22206,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = { #if P_FAMILY_RAGING_BOLT static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER), LEVEL_UP_MOVE( 1, MOVE_TWISTER), LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE), @@ -22457,6 +22294,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = { #if P_FAMILY_PECHARUNT static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_SMOG), LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), LEVEL_UP_MOVE( 1, MOVE_MEMENTO), diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index eae4929a9d..4f21223eee 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -76,11 +76,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, @@ -100,7 +96,24 @@ const struct SpeciesInfo gSpeciesInfo[] = .iconPalIndex = 0, FOOTPRINT(QuestionMark) #if OW_POKEMON_OBJECT_EVENTS - .overworldData = {TAG_NONE, OBJ_EVENT_PAL_TAG_SUBSTITUTE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, COMP, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Substitute, gDummySpriteAffineAnimTable}, + .overworldData = { + .tileTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, + .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, + .size = 512, + .width = 32, + .height = 32, + .paletteSlot = PALSLOT_NPC_1, + .shadowSize = SHADOW_SIZE_M, + .inanimate = FALSE, + .compressed = COMP, + .tracks = TRACKS_FOOT, + .oam = &gObjectEventBaseOam_32x32, + .subspriteTables = sOamTables_32x32, + .anims = sAnimTable_Following, + .images = sPicTable_Substitute, + .affineAnims = gDummySpriteAffineAnimTable, + }, #endif .levelUpLearnset = sNoneLevelUpLearnset, .teachableLearnset = sNoneTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e3689d102d..e35bb848b7 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -1534,7 +1534,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_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgey"), .cryId = CRY_PIDGEY, @@ -1596,7 +1600,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_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeotto"), .cryId = CRY_PIDGEOTTO, @@ -1668,7 +1676,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_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeot"), .cryId = CRY_PIDGEOT, @@ -3822,7 +3834,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, @@ -3885,7 +3901,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, @@ -3954,7 +3974,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_SHEER_FORCE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidoqueen"), .cryId = CRY_NIDOQUEEN, @@ -4014,7 +4038,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, @@ -4076,7 +4104,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, @@ -4145,7 +4177,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, @@ -4216,7 +4252,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"), @@ -4281,7 +4321,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"), @@ -4352,7 +4396,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"), @@ -4682,7 +4730,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"), @@ -4747,7 +4799,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"), @@ -4818,7 +4874,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_FRISK }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRISK }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Wigglytuff"), @@ -5363,7 +5423,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_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Paras"), .cryId = CRY_PARAS, @@ -5429,7 +5493,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_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Parasect"), .cryId = CRY_PARASECT, @@ -5492,7 +5560,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, @@ -5557,7 +5629,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, @@ -5893,7 +5969,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, @@ -5959,7 +6039,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, @@ -6461,7 +6545,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, @@ -6524,7 +6612,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, @@ -7453,7 +7545,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, @@ -7516,7 +7612,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"), @@ -7588,7 +7688,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, @@ -7652,7 +7756,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, @@ -9684,7 +9792,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, @@ -9746,7 +9858,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, @@ -10072,7 +10188,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, @@ -10137,7 +10257,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, @@ -10709,7 +10833,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, @@ -10772,7 +10900,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 = _("Hypno"), .cryId = CRY_HYPNO, @@ -11730,7 +11862,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, @@ -11795,7 +11931,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, @@ -11855,7 +11995,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, @@ -11916,7 +12060,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, @@ -12713,7 +12861,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, @@ -12965,7 +13117,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, @@ -13029,7 +13185,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, @@ -13101,7 +13261,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 = _("Kingdra"), .cryId = CRY_KINGDRA, @@ -13431,7 +13595,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, @@ -13688,7 +13856,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, @@ -13756,7 +13928,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, @@ -13944,7 +14120,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, @@ -14008,7 +14188,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, @@ -14472,7 +14656,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, @@ -14597,7 +14785,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, @@ -15212,7 +15404,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_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION }, + #else + .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_ANTICIPATION }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Eevee"), .cryId = CRY_EEVEE, @@ -15892,7 +16088,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, @@ -15955,7 +16155,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 ed6e9e23fb..1bfbb41bec 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -2238,7 +2238,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, @@ -2301,7 +2305,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, @@ -2371,7 +2379,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, @@ -2568,7 +2580,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_CHLOROPHYLL, 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, @@ -2630,7 +2646,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_CHLOROPHYLL, 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, @@ -3065,7 +3085,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, @@ -4183,7 +4207,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, @@ -4450,7 +4478,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, @@ -4913,7 +4945,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_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"), @@ -4976,7 +5012,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, @@ -5290,7 +5330,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, @@ -5353,7 +5397,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, @@ -5692,7 +5740,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, @@ -5755,7 +5807,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_SNIPER, ABILITY_MOODY }, + #else + .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Octillery"), .cryId = CRY_OCTILLERY, @@ -6398,7 +6454,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, @@ -6525,7 +6585,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_OWN_TEMPO, ABILITY_TECHNICIAN, ABILITY_MOODY }, + #else + .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Smeargle"), .cryId = CRY_SMEARGLE, @@ -6590,7 +6654,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 2da10d3711..8a23bb05fd 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -788,7 +788,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, @@ -850,7 +854,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, @@ -922,7 +930,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, @@ -987,7 +999,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, @@ -2127,7 +2143,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, @@ -2197,7 +2217,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_DRIZZLE, ABILITY_RAIN_DISH }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Pelipper"), .cryId = CRY_PELIPPER, @@ -2786,7 +2810,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, @@ -2850,7 +2878,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, @@ -3741,7 +3773,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_CUTE_CHARM, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Skitty"), .cryId = CRY_SKITTY, @@ -3810,7 +3846,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_CUTE_CHARM, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Delcatty"), .cryId = CRY_DELCATTY, @@ -3874,7 +3914,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_KEEN_EYE, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Sableye"), .cryId = CRY_SABLEYE, @@ -4757,7 +4801,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, @@ -4821,7 +4869,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, @@ -4959,7 +5011,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, @@ -5682,7 +5738,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, @@ -5749,7 +5809,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, @@ -5876,7 +5940,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, @@ -6064,7 +6132,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"), @@ -6921,7 +6993,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, @@ -6984,7 +7060,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_BLUE, .speciesName = _("Whiscash"), .cryId = CRY_WHISCASH, @@ -7571,7 +7651,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, @@ -7635,7 +7719,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, @@ -7968,7 +8056,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_NONE, ABILITY_PROTEAN }, + #else + .abilities = { ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Kecleon"), .cryId = CRY_KECLEON, @@ -8033,7 +8125,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, @@ -8097,7 +8193,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 = _("Banette"), .cryId = CRY_BANETTE, @@ -8221,7 +8321,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_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Duskull"), .cryId = CRY_DUSKULL, @@ -8286,7 +8390,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_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusclops"), .cryId = CRY_DUSCLOPS, @@ -8358,7 +8466,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_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusknoir"), .cryId = CRY_DUSKNOIR, @@ -8422,7 +8534,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, @@ -8622,7 +8738,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"), @@ -8749,7 +8869,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, @@ -8813,7 +8937,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, @@ -8998,7 +9126,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_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Spheal"), .cryId = CRY_SPHEAL, @@ -9061,7 +9193,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_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, @@ -9128,7 +9264,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_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #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 ed95691513..faa9ed73b4 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -614,7 +614,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 be00b1ee6d..ffa2dd4a1c 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -1971,7 +1971,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, @@ -2036,7 +2040,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, @@ -2106,7 +2114,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, @@ -6111,7 +6123,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, @@ -6173,7 +6189,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, @@ -6234,7 +6254,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, @@ -6610,7 +6634,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, @@ -6673,7 +6701,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, @@ -6735,7 +6767,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, @@ -8004,7 +8040,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, @@ -8954,7 +8994,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, @@ -9016,7 +9060,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, @@ -9815,7 +9863,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .levelUpLearnset = sBisharpLevelUpLearnset, .teachableLearnset = sBisharpTeachableLearnset, - .evolutions = EVOLUTION({EVO_DEFEAT_WITH_ITEM, ITEM_LEADERS_CREST, SPECIES_KINGAMBIT}), + .evolutions = EVOLUTION({EVO_DEFEAT_THREE_WITH_ITEM, ITEM_LEADERS_CREST, SPECIES_KINGAMBIT}), }, #if P_GEN_9_CROSS_EVOS diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 09ad2a01d0..46c776639c 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -2156,6 +2156,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .teachableLearnset = sFurfrouTeachableLearnset, \ .eggMoveLearnset = sFurfrouEggMoveLearnset, \ .formSpeciesIdTable = sFurfrouFormSpeciesIdTable, \ + .formChangeTable = sFurfrouFormChangeTable, \ } [SPECIES_FURFROU_NATURAL] = FURFROU_MISC_INFO(Natural, FALSE, 48, 3, 56, 0, 0), diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index feb4fe968b..4669051d04 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -4143,6 +4143,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 6eabb6b0e9..8880d3584d 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -6321,68 +6321,68 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = #endif //P_FAMILY_FEZANDIPITI #if P_FAMILY_OGERPON -#define OGERPON_SPECIES_INFO(Form, type, ability, color, iconpalette, isTeraform) \ - { \ - .baseHP = 80, \ - .baseAttack = 120, \ - .baseDefense = 84, \ - .baseSpeed = 110, \ - .baseSpAttack = 60, \ - .baseSpDefense = 96, \ - .types = MON_TYPES(TYPE_GRASS, type), \ - .forceTeraType = type, \ - .catchRate = 5, \ - .expYield = 275, \ - .evYield_Attack = 3, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ability, ABILITY_NONE }, \ - .bodyColor = color, \ - .speciesName = _("Ogerpon"), \ - .cryId = CRY_OGERPON, \ - .natDexNum = NATIONAL_DEX_OGERPON, \ - .categoryName = _("Mask"), \ - .height = 12, \ - .weight = 398, \ - .description = gOgerpon##Form##PokedexText, \ - .pokemonScale = 356, \ - .pokemonOffset = 17, \ - .trainerScale = 256, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Ogerpon##Form, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Ogerpon, \ - /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ - .backPic = gMonBackPic_Ogerpon##Form, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 16, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Ogerpon##Form, \ - .shinyPalette = gMonShinyPalette_Ogerpon##Form, \ - .iconSprite = gMonIcon_Ogerpon##Form, \ - .iconPalIndex = iconpalette, \ - FOOTPRINT(Ogerpon) \ - .levelUpLearnset = sOgerponLevelUpLearnset, \ - .teachableLearnset = sOgerponTeachableLearnset, \ - .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ - .formChangeTable = sOgerponFormChangeTable, \ - .isLegendary = TRUE, \ - .isTeraForm = isTeraform, \ +#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, iconpalette, isTeraform) \ + { \ + .baseHP = 80, \ + .baseAttack = 120, \ + .baseDefense = 84, \ + .baseSpeed = 110, \ + .baseSpAttack = 60, \ + .baseSpDefense = 96, \ + .types = MON_TYPES(TYPE_GRASS, type), \ + .forceTeraType = type, \ + .catchRate = 5, \ + .expYield = 275, \ + .evYield_Attack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ability, ABILITY_NONE }, \ + .bodyColor = color, \ + .speciesName = _("Ogerpon"), \ + .cryId = CRY_OGERPON, \ + .natDexNum = NATIONAL_DEX_OGERPON, \ + .categoryName = _("Mask"), \ + .height = 12, \ + .weight = 398, \ + .description = gOgerpon##Form1##MaskPokedexText, \ + .pokemonScale = 356, \ + .pokemonOffset = 17, \ + .trainerScale = 256, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Ogerpon##Form1##Form2, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Ogerpon, \ + /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ + .backPic = gMonBackPic_Ogerpon##Form1##Form2, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = 0, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Ogerpon##Form1##Form2, \ + .shinyPalette = gMonShinyPalette_Ogerpon##Form1##Form2, \ + .iconSprite = gMonIcon_Ogerpon##Form1##Mask, \ + .iconPalIndex = iconpalette, \ + FOOTPRINT(Ogerpon) \ + .levelUpLearnset = sOgerponLevelUpLearnset, \ + .teachableLearnset = sOgerponTeachableLearnset, \ + .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ + .formChangeTable = sOgerponFormChangeTable, \ + .isLegendary = TRUE, \ + .isTeraForm = isTeraform, \ } - [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(TealMask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), - [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(WellspringMask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE), - [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(HearthflameMask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE), - [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(CornerstoneMask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE), + [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), + [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(Wellspring, Mask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE), + [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(Hearthflame, Mask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE), + [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(Cornerstone, Mask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE), #if P_TERA_FORMS - [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(TealMask, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE), - [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(WellspringMask, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE), - [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(HearthflameMask, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE), - [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(CornerstoneMask, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE), + [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(Teal, MaskTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE), + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(Wellspring, MaskTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE), + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(Hearthflame, MaskTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE), + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(Cornerstone, MaskTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE), #endif //P_TERA_FORMS #endif //P_FAMILY_OGERPON @@ -6763,17 +6763,17 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosStellar, - //.frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPic = gMonFrontPic_TerapagosStellar, + .frontPicSize = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_TerapagosStellar, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosStellar, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .backPic = gMonBackPic_TerapagosStellar, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosStellar, - //.shinyPalette = gMonShinyPalette_TerapagosStellar, + .palette = gMonPalette_TerapagosStellar, + .shinyPalette = gMonShinyPalette_TerapagosStellar, .iconSprite = gMonIcon_TerapagosStellar, .iconPalIndex = 0, FOOTPRINT(TerapagosStellar) diff --git a/src/data/pokemon/species_info/shared_dex_text.h b/src/data/pokemon/species_info/shared_dex_text.h index dbfef82d74..0c591bd811 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/trainers.h b/src/data/trainers.h index 128eed5a7f..6215baf1c4 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -2,1846 +2,1846 @@ // DO NOT MODIFY THIS FILE! It is auto-generated from src/data/trainers.party // // If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE -// in include/config.h and remove this notice. +// in include/config/general.h and remove this notice. // Use sed -i '/^#line/d' 'src/data/trainers.h' to remove #line markers. // #line 1 "src/data/trainers.party" -#line 1 +#line 11 [TRAINER_NONE] = { -#line 3 +#line 13 .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, -#line 4 +#line 14 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 6 +#line 16 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 7 +#line 17 .doubleBattle = FALSE, .partySize = 0, .party = (const struct TrainerMon[]) { }, }, -#line 9 +#line 19 [TRAINER_SAWYER_1] = { -#line 10 +#line 20 .trainerName = _("SAWYER"), -#line 11 +#line 21 .trainerClass = TRAINER_CLASS_HIKER, -#line 12 +#line 22 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 14 +#line 24 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15 +#line 25 .doubleBattle = FALSE, -#line 16 +#line 26 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 18 +#line 28 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 20 +#line 30 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 19 +#line 29 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 22 +#line 32 [TRAINER_GRUNT_AQUA_HIDEOUT_1] = { -#line 23 +#line 33 .trainerName = _("GRUNT"), -#line 24 +#line 34 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 25 +#line 35 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 27 +#line 37 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 28 +#line 38 .doubleBattle = FALSE, -#line 29 +#line 39 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 31 +#line 41 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 33 +#line 43 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 32 +#line 42 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 35 +#line 45 [TRAINER_GRUNT_AQUA_HIDEOUT_2] = { -#line 36 +#line 46 .trainerName = _("GRUNT"), -#line 37 +#line 47 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 38 +#line 48 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 40 +#line 50 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 41 +#line 51 .doubleBattle = FALSE, -#line 42 +#line 52 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 44 +#line 54 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 46 +#line 56 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 45 +#line 55 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 48 +#line 58 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 50 +#line 60 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 49 +#line 59 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 52 +#line 62 [TRAINER_GRUNT_AQUA_HIDEOUT_3] = { -#line 53 +#line 63 .trainerName = _("GRUNT"), -#line 54 +#line 64 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 55 +#line 65 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 57 +#line 67 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 58 +#line 68 .doubleBattle = FALSE, -#line 59 +#line 69 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 61 +#line 71 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 63 +#line 73 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 62 +#line 72 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 65 +#line 75 [TRAINER_GRUNT_AQUA_HIDEOUT_4] = { -#line 66 +#line 76 .trainerName = _("GRUNT"), -#line 67 +#line 77 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 68 +#line 78 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 70 +#line 80 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 71 +#line 81 .doubleBattle = FALSE, -#line 72 +#line 82 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 74 +#line 84 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 76 +#line 86 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 75 +#line 85 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 78 +#line 88 [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = { -#line 79 +#line 89 .trainerName = _("GRUNT"), -#line 80 +#line 90 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 81 +#line 91 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 83 +#line 93 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 84 +#line 94 .doubleBattle = FALSE, -#line 85 +#line 95 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 87 +#line 97 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 89 +#line 99 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 88 +#line 98 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 91 +#line 101 [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = { -#line 92 +#line 102 .trainerName = _("GRUNT"), -#line 93 +#line 103 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 94 +#line 104 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 96 +#line 106 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 97 +#line 107 .doubleBattle = FALSE, -#line 98 +#line 108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 100 +#line 110 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 102 +#line 112 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 101 +#line 111 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 104 +#line 114 [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = { -#line 105 +#line 115 .trainerName = _("GRUNT"), -#line 106 +#line 116 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 107 +#line 117 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 109 +#line 119 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 110 +#line 120 .doubleBattle = FALSE, -#line 111 +#line 121 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 113 +#line 123 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 115 +#line 125 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 114 +#line 124 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 117 +#line 127 [TRAINER_GABRIELLE_1] = { -#line 118 +#line 128 .trainerName = _("GABRIELLE"), -#line 119 +#line 129 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 120 +#line 130 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 121 +#line 131 F_TRAINER_FEMALE | -#line 122 +#line 132 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 123 +#line 133 .doubleBattle = FALSE, -#line 124 +#line 134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 126 +#line 136 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 128 +#line 138 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 127 +#line 137 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 130 +#line 140 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 132 +#line 142 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 131 +#line 141 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 134 +#line 144 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 136 +#line 146 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 135 +#line 145 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 138 +#line 148 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 140 +#line 150 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 139 +#line 149 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 142 +#line 152 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 144 +#line 154 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 143 +#line 153 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 146 +#line 156 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 148 +#line 158 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 147 +#line 157 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 150 +#line 160 [TRAINER_GRUNT_PETALBURG_WOODS] = { -#line 151 +#line 161 .trainerName = _("GRUNT"), -#line 152 +#line 162 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 153 +#line 163 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 155 +#line 165 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 156 +#line 166 .doubleBattle = FALSE, -#line 157 +#line 167 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 159 +#line 169 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 161 +#line 171 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 160 +#line 170 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 163 +#line 173 [TRAINER_MARCEL] = { -#line 164 +#line 174 .trainerName = _("MARCEL"), -#line 165 +#line 175 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 166 +#line 176 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 168 +#line 178 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 169 +#line 179 .items = { ITEM_HYPER_POTION }, -#line 170 +#line 180 .doubleBattle = FALSE, -#line 171 +#line 181 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 173 +#line 183 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 175 +#line 185 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 174 +#line 184 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 177 +#line 187 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 179 +#line 189 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 178 +#line 188 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 181 +#line 191 [TRAINER_ALBERTO] = { -#line 182 +#line 192 .trainerName = _("ALBERTO"), -#line 183 +#line 193 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 184 +#line 194 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 186 +#line 196 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 187 +#line 197 .doubleBattle = FALSE, -#line 188 +#line 198 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 190 +#line 200 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 192 +#line 202 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 191 +#line 201 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 194 +#line 204 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 196 +#line 206 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 195 +#line 205 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 198 +#line 208 [TRAINER_ED] = { -#line 199 +#line 209 .trainerName = _("ED"), -#line 200 +#line 210 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 201 +#line 211 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 203 +#line 213 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 204 +#line 214 .doubleBattle = FALSE, -#line 205 +#line 215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 207 +#line 217 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 209 +#line 219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 208 +#line 218 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 211 +#line 221 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 213 +#line 223 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 212 +#line 222 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 215 +#line 225 [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = { -#line 216 +#line 226 .trainerName = _("GRUNT"), -#line 217 +#line 227 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 218 +#line 228 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 219 +#line 229 F_TRAINER_FEMALE | -#line 220 +#line 230 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 221 +#line 231 .doubleBattle = FALSE, -#line 222 +#line 232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 224 +#line 234 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 226 +#line 236 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 225 +#line 235 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 228 +#line 238 [TRAINER_DECLAN] = { -#line 229 +#line 239 .trainerName = _("DECLAN"), -#line 230 +#line 240 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 231 +#line 241 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 233 +#line 243 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 234 +#line 244 .doubleBattle = FALSE, -#line 235 +#line 245 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 237 +#line 247 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 239 +#line 249 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 238 +#line 248 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 241 +#line 251 [TRAINER_GRUNT_RUSTURF_TUNNEL] = { -#line 242 +#line 252 .trainerName = _("GRUNT"), -#line 243 +#line 253 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 244 +#line 254 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 246 +#line 256 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 247 +#line 257 .doubleBattle = FALSE, -#line 248 +#line 258 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 250 +#line 260 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 252 +#line 262 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 251 +#line 261 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 254 +#line 264 [TRAINER_GRUNT_WEATHER_INST_1] = { -#line 255 +#line 265 .trainerName = _("GRUNT"), -#line 256 +#line 266 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 257 +#line 267 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 259 +#line 269 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 260 +#line 270 .doubleBattle = FALSE, -#line 261 +#line 271 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 263 +#line 273 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 265 +#line 275 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 264 +#line 274 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 267 +#line 277 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 269 +#line 279 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 268 +#line 278 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 271 +#line 281 [TRAINER_GRUNT_WEATHER_INST_2] = { -#line 272 +#line 282 .trainerName = _("GRUNT"), -#line 273 +#line 283 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 274 +#line 284 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 276 +#line 286 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 277 +#line 287 .doubleBattle = FALSE, -#line 278 +#line 288 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 280 +#line 290 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 282 +#line 292 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 281 +#line 291 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 284 +#line 294 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 286 +#line 296 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 285 +#line 295 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 288 +#line 298 [TRAINER_GRUNT_WEATHER_INST_3] = { -#line 289 +#line 299 .trainerName = _("GRUNT"), -#line 290 +#line 300 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 291 +#line 301 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 293 +#line 303 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 294 +#line 304 .doubleBattle = FALSE, -#line 295 +#line 305 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 297 +#line 307 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 299 +#line 309 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 298 +#line 308 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 301 +#line 311 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 303 +#line 313 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 302 +#line 312 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 305 +#line 315 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 307 +#line 317 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 306 +#line 316 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 309 +#line 319 [TRAINER_GRUNT_MUSEUM_1] = { -#line 310 +#line 320 .trainerName = _("GRUNT"), -#line 311 +#line 321 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 312 +#line 322 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 314 +#line 324 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 315 +#line 325 .doubleBattle = FALSE, -#line 316 +#line 326 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 318 +#line 328 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 320 +#line 330 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 319 +#line 329 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 322 +#line 332 [TRAINER_GRUNT_MUSEUM_2] = { -#line 323 +#line 333 .trainerName = _("GRUNT"), -#line 324 +#line 334 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 325 +#line 335 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 327 +#line 337 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 328 +#line 338 .doubleBattle = FALSE, -#line 329 +#line 339 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 331 +#line 341 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 333 +#line 343 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 332 +#line 342 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 335 +#line 345 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 337 +#line 347 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 336 +#line 346 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 339 +#line 349 [TRAINER_GRUNT_SPACE_CENTER_1] = { -#line 340 +#line 350 .trainerName = _("GRUNT"), -#line 341 +#line 351 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 342 +#line 352 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 344 +#line 354 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 345 +#line 355 .doubleBattle = FALSE, -#line 346 +#line 356 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 348 +#line 358 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 350 +#line 360 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 349 +#line 359 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 352 +#line 362 [TRAINER_GRUNT_MT_PYRE_1] = { -#line 353 +#line 363 .trainerName = _("GRUNT"), -#line 354 +#line 364 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 355 +#line 365 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 357 +#line 367 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 358 +#line 368 .doubleBattle = FALSE, -#line 359 +#line 369 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 361 +#line 371 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 363 +#line 373 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 362 +#line 372 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 365 +#line 375 [TRAINER_GRUNT_MT_PYRE_2] = { -#line 366 +#line 376 .trainerName = _("GRUNT"), -#line 367 +#line 377 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 368 +#line 378 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 370 +#line 380 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 371 +#line 381 .doubleBattle = FALSE, -#line 372 +#line 382 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 374 +#line 384 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 376 +#line 386 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 375 +#line 385 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 378 +#line 388 [TRAINER_GRUNT_MT_PYRE_3] = { -#line 379 +#line 389 .trainerName = _("GRUNT"), -#line 380 +#line 390 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 381 +#line 391 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 383 +#line 393 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 384 +#line 394 .doubleBattle = FALSE, -#line 385 +#line 395 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 387 +#line 397 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 389 +#line 399 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 388 +#line 398 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 391 +#line 401 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 393 +#line 403 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 392 +#line 402 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 395 +#line 405 [TRAINER_GRUNT_WEATHER_INST_4] = { -#line 396 +#line 406 .trainerName = _("GRUNT"), -#line 397 +#line 407 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 398 +#line 408 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 399 +#line 409 F_TRAINER_FEMALE | -#line 400 +#line 410 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 401 +#line 411 .doubleBattle = FALSE, -#line 402 +#line 412 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 404 +#line 414 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 406 +#line 416 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 405 +#line 415 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 408 +#line 418 [TRAINER_GRUNT_AQUA_HIDEOUT_5] = { -#line 409 +#line 419 .trainerName = _("GRUNT"), -#line 410 +#line 420 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 411 +#line 421 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 412 +#line 422 F_TRAINER_FEMALE | -#line 413 +#line 423 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 414 +#line 424 .doubleBattle = FALSE, -#line 415 +#line 425 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 417 +#line 427 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 419 +#line 429 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 418 +#line 428 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 421 +#line 431 [TRAINER_GRUNT_AQUA_HIDEOUT_6] = { -#line 422 +#line 432 .trainerName = _("GRUNT"), -#line 423 +#line 433 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 424 +#line 434 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 425 +#line 435 F_TRAINER_FEMALE | -#line 426 +#line 436 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 427 +#line 437 .doubleBattle = FALSE, -#line 428 +#line 438 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 430 +#line 440 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 432 +#line 442 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 431 +#line 441 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 434 +#line 444 [TRAINER_FREDRICK] = { -#line 435 +#line 445 .trainerName = _("FREDRICK"), -#line 436 +#line 446 .trainerClass = TRAINER_CLASS_EXPERT, -#line 437 +#line 447 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 439 +#line 449 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 440 +#line 450 .doubleBattle = FALSE, -#line 441 +#line 451 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 443 +#line 453 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 445 +#line 455 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 444 +#line 454 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 447 +#line 457 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 449 +#line 459 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 448 +#line 458 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 451 +#line 461 [TRAINER_MATT] = { -#line 452 +#line 462 .trainerName = _("MATT"), -#line 453 +#line 463 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 454 +#line 464 .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, .encounterMusic_gender = -#line 456 +#line 466 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 457 +#line 467 .items = { ITEM_SUPER_POTION }, -#line 458 +#line 468 .doubleBattle = FALSE, -#line 459 +#line 469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 461 +#line 471 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 463 +#line 473 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 462 +#line 472 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 465 +#line 475 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 467 +#line 477 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 466 +#line 476 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 469 +#line 479 [TRAINER_ZANDER] = { -#line 470 +#line 480 .trainerName = _("ZANDER"), -#line 471 +#line 481 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 472 +#line 482 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 474 +#line 484 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 475 +#line 485 .doubleBattle = FALSE, -#line 476 +#line 486 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 478 +#line 488 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 480 +#line 490 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 479 +#line 489 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 482 +#line 492 [TRAINER_SHELLY_WEATHER_INSTITUTE] = { -#line 483 +#line 493 .trainerName = _("SHELLY"), -#line 484 +#line 494 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 485 +#line 495 .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = -#line 486 +#line 496 F_TRAINER_FEMALE | -#line 487 +#line 497 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 488 +#line 498 .doubleBattle = FALSE, -#line 489 +#line 499 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 491 +#line 501 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 493 +#line 503 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 492 +#line 502 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 495 +#line 505 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 497 +#line 507 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 496 +#line 506 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 499 +#line 509 [TRAINER_SHELLY_SEAFLOOR_CAVERN] = { -#line 500 +#line 510 .trainerName = _("SHELLY"), -#line 501 +#line 511 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 502 +#line 512 .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = -#line 503 +#line 513 F_TRAINER_FEMALE | -#line 504 +#line 514 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 505 +#line 515 .doubleBattle = FALSE, -#line 506 +#line 516 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 508 +#line 518 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 510 +#line 520 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 509 +#line 519 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 512 +#line 522 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 514 +#line 524 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 513 +#line 523 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 516 +#line 526 [TRAINER_ARCHIE] = { -#line 517 +#line 527 .trainerName = _("ARCHIE"), -#line 518 +#line 528 .trainerClass = TRAINER_CLASS_AQUA_LEADER, -#line 519 +#line 529 .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, .encounterMusic_gender = -#line 521 +#line 531 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 522 +#line 532 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 523 +#line 533 .doubleBattle = FALSE, -#line 524 +#line 534 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 526 +#line 536 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 528 +#line 538 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 527 +#line 537 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 530 +#line 540 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 532 +#line 542 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 531 +#line 541 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 534 +#line 544 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 536 +#line 546 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 535 +#line 545 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 538 +#line 548 [TRAINER_LEAH] = { -#line 539 +#line 549 .trainerName = _("LEAH"), -#line 540 +#line 550 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 541 +#line 551 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 542 +#line 552 F_TRAINER_FEMALE | -#line 543 +#line 553 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 544 +#line 554 .doubleBattle = FALSE, -#line 545 +#line 555 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 547 +#line 557 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 549 +#line 559 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 548 +#line 558 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 551 +#line 561 [TRAINER_DAISY] = { -#line 552 +#line 562 .trainerName = _("DAISY"), -#line 553 +#line 563 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 554 +#line 564 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 555 +#line 565 F_TRAINER_FEMALE | -#line 556 +#line 566 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 557 +#line 567 .doubleBattle = FALSE, -#line 558 +#line 568 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 560 +#line 570 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 562 +#line 572 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 561 +#line 571 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 564 +#line 574 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 566 +#line 576 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 565 +#line 575 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 568 +#line 578 [TRAINER_ROSE_1] = { -#line 569 +#line 579 .trainerName = _("ROSE"), -#line 570 +#line 580 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 571 +#line 581 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 572 +#line 582 F_TRAINER_FEMALE | -#line 573 +#line 583 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 574 +#line 584 .doubleBattle = FALSE, -#line 575 +#line 585 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 577 +#line 587 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 579 +#line 589 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 578 +#line 588 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 581 +#line 591 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 583 +#line 593 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 582 +#line 592 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 585 +#line 595 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 587 +#line 597 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 586 +#line 596 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 589 +#line 599 [TRAINER_FELIX] = { -#line 590 +#line 600 .trainerName = _("FELIX"), -#line 591 +#line 601 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 592 +#line 602 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 594 +#line 604 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 595 +#line 605 .items = { ITEM_FULL_RESTORE }, -#line 596 +#line 606 .doubleBattle = FALSE, -#line 597 +#line 607 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 599 +#line 609 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 601 +#line 611 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 600 +#line 610 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 602 +#line 612 MOVE_PSYCHIC, }, }, { -#line 604 +#line 614 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 606 +#line 616 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 605 +#line 615 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 607 +#line 617 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, }, }, -#line 610 +#line 620 [TRAINER_VIOLET] = { -#line 611 +#line 621 .trainerName = _("VIOLET"), -#line 612 +#line 622 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 613 +#line 623 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 614 +#line 624 F_TRAINER_FEMALE | -#line 615 +#line 625 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 616 +#line 626 .doubleBattle = FALSE, -#line 617 +#line 627 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 619 +#line 629 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 621 +#line 631 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 620 +#line 630 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 623 +#line 633 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 625 +#line 635 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 624 +#line 634 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 627 +#line 637 [TRAINER_ROSE_2] = { -#line 628 +#line 638 .trainerName = _("ROSE"), -#line 629 +#line 639 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 630 +#line 640 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 631 +#line 641 F_TRAINER_FEMALE | -#line 632 +#line 642 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 633 +#line 643 .doubleBattle = FALSE, -#line 634 +#line 644 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 636 +#line 646 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 638 +#line 648 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 637 +#line 647 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 640 +#line 650 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 642 +#line 652 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 641 +#line 651 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 644 +#line 654 [TRAINER_ROSE_3] = { -#line 645 +#line 655 .trainerName = _("ROSE"), -#line 646 +#line 656 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 647 +#line 657 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 648 +#line 658 F_TRAINER_FEMALE | -#line 649 +#line 659 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 650 +#line 660 .doubleBattle = FALSE, -#line 651 +#line 661 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 653 +#line 663 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 655 +#line 665 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 654 +#line 664 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 657 +#line 667 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 659 +#line 669 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 658 +#line 668 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 661 +#line 671 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 663 +#line 673 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 662 +#line 672 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 665 +#line 675 [TRAINER_ROSE_4] = { -#line 666 +#line 676 .trainerName = _("ROSE"), -#line 667 +#line 677 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 668 +#line 678 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 669 +#line 679 F_TRAINER_FEMALE | -#line 670 +#line 680 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 671 +#line 681 .doubleBattle = FALSE, -#line 672 +#line 682 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 674 +#line 684 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 676 +#line 686 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 675 +#line 685 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 678 +#line 688 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 680 +#line 690 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 679 +#line 689 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 682 +#line 692 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 684 +#line 694 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 683 +#line 693 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 686 +#line 696 [TRAINER_ROSE_5] = { -#line 687 +#line 697 .trainerName = _("ROSE"), -#line 688 +#line 698 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 689 +#line 699 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 690 +#line 700 F_TRAINER_FEMALE | -#line 691 +#line 701 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 692 +#line 702 .doubleBattle = FALSE, -#line 693 +#line 703 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 695 +#line 705 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 697 +#line 707 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 696 +#line 706 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 699 +#line 709 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 701 +#line 711 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 700 +#line 710 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 703 +#line 713 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 705 +#line 715 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 704 +#line 714 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 707 +#line 717 [TRAINER_DUSTY_1] = { -#line 708 +#line 718 .trainerName = _("DUSTY"), -#line 709 +#line 719 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 710 +#line 720 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 712 +#line 722 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 713 +#line 723 .doubleBattle = FALSE, -#line 714 +#line 724 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 716 +#line 726 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 718 +#line 728 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 717 +#line 727 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 719 +#line 729 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1850,37 +1850,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 724 +#line 734 [TRAINER_CHIP] = { -#line 725 +#line 735 .trainerName = _("CHIP"), -#line 726 +#line 736 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 727 +#line 737 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 729 +#line 739 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 730 +#line 740 .doubleBattle = FALSE, -#line 731 +#line 741 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 733 +#line 743 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 735 +#line 745 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 734 +#line 744 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 736 +#line 746 MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, @@ -1888,17 +1888,17 @@ F_TRAINER_FEMALE | }, }, { -#line 741 +#line 751 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 743 +#line 753 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 742 +#line 752 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 744 +#line 754 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1906,17 +1906,17 @@ F_TRAINER_FEMALE | }, }, { -#line 749 +#line 759 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 751 +#line 761 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 750 +#line 760 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 752 +#line 762 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1925,37 +1925,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 757 +#line 767 [TRAINER_FOSTER] = { -#line 758 +#line 768 .trainerName = _("FOSTER"), -#line 759 +#line 769 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 760 +#line 770 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 762 +#line 772 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 763 +#line 773 .doubleBattle = FALSE, -#line 764 +#line 774 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 766 +#line 776 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 768 +#line 778 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 767 +#line 777 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 769 +#line 779 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1963,17 +1963,17 @@ F_TRAINER_FEMALE | }, }, { -#line 774 +#line 784 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 776 +#line 786 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 775 +#line 785 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 777 +#line 787 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1982,37 +1982,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 782 +#line 792 [TRAINER_DUSTY_2] = { -#line 783 +#line 793 .trainerName = _("DUSTY"), -#line 784 +#line 794 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 785 +#line 795 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 787 +#line 797 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 788 +#line 798 .doubleBattle = FALSE, -#line 789 +#line 799 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 791 +#line 801 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 793 +#line 803 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 792 +#line 802 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 794 +#line 804 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2021,37 +2021,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 799 +#line 809 [TRAINER_DUSTY_3] = { -#line 800 +#line 810 .trainerName = _("DUSTY"), -#line 801 +#line 811 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 802 +#line 812 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 804 +#line 814 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 805 +#line 815 .doubleBattle = FALSE, -#line 806 +#line 816 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 808 +#line 818 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 810 +#line 820 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 809 +#line 819 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 811 +#line 821 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2060,37 +2060,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 816 +#line 826 [TRAINER_DUSTY_4] = { -#line 817 +#line 827 .trainerName = _("DUSTY"), -#line 818 +#line 828 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 819 +#line 829 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 821 +#line 831 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 822 +#line 832 .doubleBattle = FALSE, -#line 823 +#line 833 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 825 +#line 835 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 827 +#line 837 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 826 +#line 836 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 828 +#line 838 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2099,37 +2099,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 833 +#line 843 [TRAINER_DUSTY_5] = { -#line 834 +#line 844 .trainerName = _("DUSTY"), -#line 835 +#line 845 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 836 +#line 846 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 838 +#line 848 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 839 +#line 849 .doubleBattle = FALSE, -#line 840 +#line 850 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 842 +#line 852 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 844 +#line 854 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 843 +#line 853 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 845 +#line 855 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2138,252 +2138,252 @@ F_TRAINER_FEMALE | }, }, }, -#line 850 +#line 860 [TRAINER_GABBY_AND_TY_1] = { -#line 851 +#line 861 .trainerName = _("GABBY & TY"), -#line 852 +#line 862 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 853 +#line 863 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 855 +#line 865 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 856 +#line 866 .doubleBattle = TRUE, -#line 857 +#line 867 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 859 +#line 869 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 861 +#line 871 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 860 +#line 870 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 863 +#line 873 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 865 +#line 875 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 864 +#line 874 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 867 +#line 877 [TRAINER_GABBY_AND_TY_2] = { -#line 868 +#line 878 .trainerName = _("GABBY & TY"), -#line 869 +#line 879 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 870 +#line 880 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 872 +#line 882 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 873 +#line 883 .doubleBattle = TRUE, -#line 874 +#line 884 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 876 +#line 886 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 878 +#line 888 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 877 +#line 887 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 880 +#line 890 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 882 +#line 892 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 881 +#line 891 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 884 +#line 894 [TRAINER_GABBY_AND_TY_3] = { -#line 885 +#line 895 .trainerName = _("GABBY & TY"), -#line 886 +#line 896 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 887 +#line 897 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 889 +#line 899 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 890 +#line 900 .doubleBattle = TRUE, -#line 891 +#line 901 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 893 +#line 903 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 895 +#line 905 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 894 +#line 904 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 897 +#line 907 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 899 +#line 909 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 898 +#line 908 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 901 +#line 911 [TRAINER_GABBY_AND_TY_4] = { -#line 902 +#line 912 .trainerName = _("GABBY & TY"), -#line 903 +#line 913 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 904 +#line 914 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 906 +#line 916 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 907 +#line 917 .doubleBattle = TRUE, -#line 908 +#line 918 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 910 +#line 920 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 912 +#line 922 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 911 +#line 921 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 914 +#line 924 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 916 +#line 926 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 915 +#line 925 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 918 +#line 928 [TRAINER_GABBY_AND_TY_5] = { -#line 919 +#line 929 .trainerName = _("GABBY & TY"), -#line 920 +#line 930 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 921 +#line 931 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 923 +#line 933 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 924 +#line 934 .doubleBattle = TRUE, -#line 925 +#line 935 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 927 +#line 937 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 929 +#line 939 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 928 +#line 938 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 931 +#line 941 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 933 +#line 943 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 932 +#line 942 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 935 +#line 945 [TRAINER_GABBY_AND_TY_6] = { -#line 936 +#line 946 .trainerName = _("GABBY & TY"), -#line 937 +#line 947 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 938 +#line 948 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 940 +#line 950 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 941 +#line 951 .doubleBattle = TRUE, -#line 942 +#line 952 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 944 +#line 954 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 946 +#line 956 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 945 +#line 955 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 947 +#line 957 MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, @@ -2391,17 +2391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 952 +#line 962 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 954 +#line 964 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 953 +#line 963 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 955 +#line 965 MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, @@ -2410,330 +2410,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 960 +#line 970 [TRAINER_LOLA_1] = { -#line 961 +#line 971 .trainerName = _("LOLA"), -#line 962 +#line 972 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 963 +#line 973 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 964 +#line 974 F_TRAINER_FEMALE | -#line 965 +#line 975 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 966 +#line 976 .doubleBattle = FALSE, -#line 967 +#line 977 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 969 +#line 979 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 971 +#line 981 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 970 +#line 980 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 973 +#line 983 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 975 +#line 985 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 974 +#line 984 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 977 +#line 987 [TRAINER_AUSTINA] = { -#line 978 +#line 988 .trainerName = _("AUSTINA"), -#line 979 +#line 989 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 980 +#line 990 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 981 +#line 991 F_TRAINER_FEMALE | -#line 982 +#line 992 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 983 +#line 993 .doubleBattle = FALSE, -#line 984 +#line 994 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 986 +#line 996 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 988 +#line 998 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 987 +#line 997 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 990 +#line 1000 [TRAINER_GWEN] = { -#line 991 +#line 1001 .trainerName = _("GWEN"), -#line 992 +#line 1002 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 993 +#line 1003 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 994 +#line 1004 F_TRAINER_FEMALE | -#line 995 +#line 1005 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 996 +#line 1006 .doubleBattle = FALSE, -#line 997 +#line 1007 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 999 +#line 1009 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1001 +#line 1011 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1000 +#line 1010 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1003 +#line 1013 [TRAINER_LOLA_2] = { -#line 1004 +#line 1014 .trainerName = _("LOLA"), -#line 1005 +#line 1015 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1006 +#line 1016 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1007 +#line 1017 F_TRAINER_FEMALE | -#line 1008 +#line 1018 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1009 +#line 1019 .doubleBattle = FALSE, -#line 1010 +#line 1020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1012 +#line 1022 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1014 +#line 1024 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1013 +#line 1023 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1016 +#line 1026 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1018 +#line 1028 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1017 +#line 1027 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1020 +#line 1030 [TRAINER_LOLA_3] = { -#line 1021 +#line 1031 .trainerName = _("LOLA"), -#line 1022 +#line 1032 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1023 +#line 1033 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1024 +#line 1034 F_TRAINER_FEMALE | -#line 1025 +#line 1035 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1026 +#line 1036 .doubleBattle = FALSE, -#line 1027 +#line 1037 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1029 +#line 1039 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1031 +#line 1041 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1030 +#line 1040 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1033 +#line 1043 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1035 +#line 1045 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1034 +#line 1044 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1037 +#line 1047 [TRAINER_LOLA_4] = { -#line 1038 +#line 1048 .trainerName = _("LOLA"), -#line 1039 +#line 1049 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1040 +#line 1050 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1041 +#line 1051 F_TRAINER_FEMALE | -#line 1042 +#line 1052 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1043 +#line 1053 .doubleBattle = FALSE, -#line 1044 +#line 1054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1046 +#line 1056 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1048 +#line 1058 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1047 +#line 1057 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1050 +#line 1060 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1052 +#line 1062 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1051 +#line 1061 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1054 +#line 1064 [TRAINER_LOLA_5] = { -#line 1055 +#line 1065 .trainerName = _("LOLA"), -#line 1056 +#line 1066 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1057 +#line 1067 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1058 +#line 1068 F_TRAINER_FEMALE | -#line 1059 +#line 1069 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1060 +#line 1070 .doubleBattle = FALSE, -#line 1061 +#line 1071 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1063 +#line 1073 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1065 +#line 1075 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1064 +#line 1074 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1067 +#line 1077 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1069 +#line 1079 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1068 +#line 1078 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1071 +#line 1081 [TRAINER_RICKY_1] = { -#line 1072 +#line 1082 .trainerName = _("RICKY"), -#line 1073 +#line 1083 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1074 +#line 1084 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1076 +#line 1086 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1077 +#line 1087 .doubleBattle = FALSE, -#line 1078 +#line 1088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1080 +#line 1090 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1082 +#line 1092 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1081 +#line 1091 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1083 +#line 1093 MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, @@ -2742,112 +2742,112 @@ F_TRAINER_FEMALE | }, }, }, -#line 1088 +#line 1098 [TRAINER_SIMON] = { -#line 1089 +#line 1099 .trainerName = _("SIMON"), -#line 1090 +#line 1100 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1091 +#line 1101 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1093 +#line 1103 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1094 +#line 1104 .doubleBattle = FALSE, -#line 1095 +#line 1105 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1097 +#line 1107 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1099 +#line 1109 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1098 +#line 1108 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1101 +#line 1111 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1103 +#line 1113 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1102 +#line 1112 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1105 +#line 1115 [TRAINER_CHARLIE] = { -#line 1106 +#line 1116 .trainerName = _("CHARLIE"), -#line 1107 +#line 1117 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1108 +#line 1118 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1110 +#line 1120 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1111 +#line 1121 .doubleBattle = FALSE, -#line 1112 +#line 1122 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1114 +#line 1124 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1116 +#line 1126 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1115 +#line 1125 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1118 +#line 1128 [TRAINER_RICKY_2] = { -#line 1119 +#line 1129 .trainerName = _("RICKY"), -#line 1120 +#line 1130 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1121 +#line 1131 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1123 +#line 1133 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1124 +#line 1134 .doubleBattle = FALSE, -#line 1125 +#line 1135 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1127 +#line 1137 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1129 +#line 1139 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1128 +#line 1138 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1130 +#line 1140 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2856,37 +2856,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1135 +#line 1145 [TRAINER_RICKY_3] = { -#line 1136 +#line 1146 .trainerName = _("RICKY"), -#line 1137 +#line 1147 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1138 +#line 1148 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1140 +#line 1150 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1141 +#line 1151 .doubleBattle = FALSE, -#line 1142 +#line 1152 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1144 +#line 1154 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1146 +#line 1156 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1145 +#line 1155 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1147 +#line 1157 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2895,37 +2895,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1152 +#line 1162 [TRAINER_RICKY_4] = { -#line 1153 +#line 1163 .trainerName = _("RICKY"), -#line 1154 +#line 1164 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1155 +#line 1165 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1157 +#line 1167 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1158 +#line 1168 .doubleBattle = FALSE, -#line 1159 +#line 1169 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1161 +#line 1171 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1163 +#line 1173 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1162 +#line 1172 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1164 +#line 1174 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2934,37 +2934,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1169 +#line 1179 [TRAINER_RICKY_5] = { -#line 1170 +#line 1180 .trainerName = _("RICKY"), -#line 1171 +#line 1181 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1172 +#line 1182 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1174 +#line 1184 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1175 +#line 1185 .doubleBattle = FALSE, -#line 1176 +#line 1186 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1178 +#line 1188 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1180 +#line 1190 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1179 +#line 1189 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1181 +#line 1191 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2973,39 +2973,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1186 +#line 1196 [TRAINER_RANDALL] = { -#line 1187 +#line 1197 .trainerName = _("RANDALL"), -#line 1188 +#line 1198 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1189 +#line 1199 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1191 +#line 1201 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1192 +#line 1202 .items = { ITEM_HYPER_POTION }, -#line 1193 +#line 1203 .doubleBattle = FALSE, -#line 1194 +#line 1204 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1196 +#line 1206 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1198 +#line 1208 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1197 +#line 1207 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1199 +#line 1209 MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, @@ -3013,39 +3013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1203 +#line 1213 [TRAINER_PARKER] = { -#line 1204 +#line 1214 .trainerName = _("PARKER"), -#line 1205 +#line 1215 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1206 +#line 1216 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1208 +#line 1218 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1209 +#line 1219 .items = { ITEM_HYPER_POTION }, -#line 1210 +#line 1220 .doubleBattle = FALSE, -#line 1211 +#line 1221 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1213 +#line 1223 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1215 +#line 1225 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1214 +#line 1224 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1216 +#line 1226 MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, @@ -3053,41 +3053,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 1220 +#line 1230 [TRAINER_GEORGE] = { -#line 1221 +#line 1231 .trainerName = _("GEORGE"), -#line 1222 +#line 1232 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1223 +#line 1233 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1225 +#line 1235 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1226 +#line 1236 .items = { ITEM_HYPER_POTION }, -#line 1227 +#line 1237 .doubleBattle = FALSE, -#line 1228 +#line 1238 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1230 +#line 1240 .species = SPECIES_SLAKOTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1230 +#line 1240 .heldItem = ITEM_SITRUS_BERRY, -#line 1232 +#line 1242 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1231 +#line 1241 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1233 +#line 1243 MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, @@ -3095,78 +3095,78 @@ F_TRAINER_FEMALE | }, }, }, -#line 1237 +#line 1247 [TRAINER_BERKE] = { -#line 1238 +#line 1248 .trainerName = _("BERKE"), -#line 1239 +#line 1249 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1240 +#line 1250 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1242 +#line 1252 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1243 +#line 1253 .items = { ITEM_HYPER_POTION }, -#line 1244 +#line 1254 .doubleBattle = FALSE, -#line 1245 +#line 1255 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1247 +#line 1257 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1249 +#line 1259 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1248 +#line 1258 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1250 +#line 1260 MOVE_FOCUS_ENERGY, MOVE_SLASH, }, }, }, }, -#line 1253 +#line 1263 [TRAINER_BRAXTON] = { -#line 1254 +#line 1264 .trainerName = _("BRAXTON"), -#line 1255 +#line 1265 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1256 +#line 1266 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1258 +#line 1268 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1259 +#line 1269 .items = { ITEM_HYPER_POTION }, -#line 1260 +#line 1270 .doubleBattle = FALSE, -#line 1261 +#line 1271 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 1263 +#line 1273 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1265 +#line 1275 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1264 +#line 1274 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1266 +#line 1276 MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, @@ -3174,17 +3174,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1271 +#line 1281 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1273 +#line 1283 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1272 +#line 1282 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1274 +#line 1284 MOVE_BITE, MOVE_DIG, MOVE_FEINT_ATTACK, @@ -3192,17 +3192,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1279 +#line 1289 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1281 +#line 1291 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1280 +#line 1290 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1282 +#line 1292 MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, @@ -3210,17 +3210,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1287 +#line 1297 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1289 +#line 1299 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1288 +#line 1298 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1290 +#line 1300 MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, @@ -3228,17 +3228,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1295 +#line 1305 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1297 +#line 1307 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1296 +#line 1306 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1298 +#line 1308 MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, @@ -3247,777 +3247,777 @@ F_TRAINER_FEMALE | }, }, }, -#line 1303 +#line 1313 [TRAINER_VINCENT] = { -#line 1304 +#line 1314 .trainerName = _("VINCENT"), -#line 1305 +#line 1315 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1306 +#line 1316 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1308 +#line 1318 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1309 +#line 1319 .items = { ITEM_FULL_RESTORE }, -#line 1310 +#line 1320 .doubleBattle = FALSE, -#line 1311 +#line 1321 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1313 +#line 1323 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1315 +#line 1325 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1314 +#line 1324 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1317 +#line 1327 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1319 +#line 1329 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1318 +#line 1328 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1321 +#line 1331 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1323 +#line 1333 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1322 +#line 1332 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1325 +#line 1335 [TRAINER_LEROY] = { -#line 1326 +#line 1336 .trainerName = _("LEROY"), -#line 1327 +#line 1337 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1328 +#line 1338 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1330 +#line 1340 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1331 +#line 1341 .items = { ITEM_FULL_RESTORE }, -#line 1332 +#line 1342 .doubleBattle = FALSE, -#line 1333 +#line 1343 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1335 +#line 1345 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1337 +#line 1347 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1336 +#line 1346 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1339 +#line 1349 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1341 +#line 1351 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1340 +#line 1350 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1343 +#line 1353 [TRAINER_WILTON_1] = { -#line 1344 +#line 1354 .trainerName = _("WILTON"), -#line 1345 +#line 1355 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1346 +#line 1356 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1348 +#line 1358 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1349 +#line 1359 .items = { ITEM_SUPER_POTION }, -#line 1350 +#line 1360 .doubleBattle = FALSE, -#line 1351 +#line 1361 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1353 +#line 1363 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1355 +#line 1365 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1354 +#line 1364 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1357 +#line 1367 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1359 +#line 1369 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1358 +#line 1368 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1361 +#line 1371 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1363 +#line 1373 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1362 +#line 1372 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1365 +#line 1375 [TRAINER_EDGAR] = { -#line 1366 +#line 1376 .trainerName = _("EDGAR"), -#line 1367 +#line 1377 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1368 +#line 1378 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1370 +#line 1380 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1371 +#line 1381 .items = { ITEM_FULL_RESTORE }, -#line 1372 +#line 1382 .doubleBattle = FALSE, -#line 1373 +#line 1383 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1375 +#line 1385 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1377 +#line 1387 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1376 +#line 1386 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1379 +#line 1389 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1381 +#line 1391 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1380 +#line 1390 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1383 +#line 1393 [TRAINER_ALBERT] = { -#line 1384 +#line 1394 .trainerName = _("ALBERT"), -#line 1385 +#line 1395 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1386 +#line 1396 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1388 +#line 1398 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1389 +#line 1399 .items = { ITEM_FULL_RESTORE }, -#line 1390 +#line 1400 .doubleBattle = FALSE, -#line 1391 +#line 1401 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1393 +#line 1403 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1395 +#line 1405 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1394 +#line 1404 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1397 +#line 1407 .species = SPECIES_MUK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1399 +#line 1409 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1398 +#line 1408 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1401 +#line 1411 [TRAINER_SAMUEL] = { -#line 1402 +#line 1412 .trainerName = _("SAMUEL"), -#line 1403 +#line 1413 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1404 +#line 1414 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1406 +#line 1416 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1407 +#line 1417 .items = { ITEM_FULL_RESTORE }, -#line 1408 +#line 1418 .doubleBattle = FALSE, -#line 1409 +#line 1419 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1411 +#line 1421 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1413 +#line 1423 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1412 +#line 1422 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1415 +#line 1425 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1417 +#line 1427 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1416 +#line 1426 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1419 +#line 1429 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1421 +#line 1431 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1420 +#line 1430 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1423 +#line 1433 [TRAINER_VITO] = { -#line 1424 +#line 1434 .trainerName = _("VITO"), -#line 1425 +#line 1435 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1426 +#line 1436 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1428 +#line 1438 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1429 +#line 1439 .items = { ITEM_FULL_RESTORE }, -#line 1430 +#line 1440 .doubleBattle = FALSE, -#line 1431 +#line 1441 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 1433 +#line 1443 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1435 +#line 1445 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1434 +#line 1444 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1437 +#line 1447 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1439 +#line 1449 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1438 +#line 1448 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1441 +#line 1451 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1443 +#line 1453 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1442 +#line 1452 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1445 +#line 1455 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1447 +#line 1457 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1446 +#line 1456 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1449 +#line 1459 [TRAINER_OWEN] = { -#line 1450 +#line 1460 .trainerName = _("OWEN"), -#line 1451 +#line 1461 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1452 +#line 1462 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1454 +#line 1464 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1455 +#line 1465 .items = { ITEM_FULL_RESTORE }, -#line 1456 +#line 1466 .doubleBattle = FALSE, -#line 1457 +#line 1467 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1459 +#line 1469 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1461 +#line 1471 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1460 +#line 1470 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1463 +#line 1473 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1465 +#line 1475 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1464 +#line 1474 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1467 +#line 1477 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1469 +#line 1479 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1468 +#line 1478 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1471 +#line 1481 [TRAINER_WILTON_2] = { -#line 1472 +#line 1482 .trainerName = _("WILTON"), -#line 1473 +#line 1483 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1474 +#line 1484 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1476 +#line 1486 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1477 +#line 1487 .items = { ITEM_HYPER_POTION }, -#line 1478 +#line 1488 .doubleBattle = FALSE, -#line 1479 +#line 1489 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1481 +#line 1491 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1483 +#line 1493 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1482 +#line 1492 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1485 +#line 1495 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1487 +#line 1497 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1486 +#line 1496 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1489 +#line 1499 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1491 +#line 1501 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1490 +#line 1500 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1493 +#line 1503 [TRAINER_WILTON_3] = { -#line 1494 +#line 1504 .trainerName = _("WILTON"), -#line 1495 +#line 1505 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1496 +#line 1506 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1498 +#line 1508 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1499 +#line 1509 .items = { ITEM_HYPER_POTION }, -#line 1500 +#line 1510 .doubleBattle = FALSE, -#line 1501 +#line 1511 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1503 +#line 1513 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1505 +#line 1515 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1504 +#line 1514 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1507 +#line 1517 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1509 +#line 1519 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1508 +#line 1518 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1511 +#line 1521 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1513 +#line 1523 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1512 +#line 1522 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1515 +#line 1525 [TRAINER_WILTON_4] = { -#line 1516 +#line 1526 .trainerName = _("WILTON"), -#line 1517 +#line 1527 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1518 +#line 1528 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1520 +#line 1530 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1521 +#line 1531 .items = { ITEM_FULL_RESTORE }, -#line 1522 +#line 1532 .doubleBattle = FALSE, -#line 1523 +#line 1533 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1525 +#line 1535 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1527 +#line 1537 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1526 +#line 1536 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1529 +#line 1539 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1531 +#line 1541 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1530 +#line 1540 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1533 +#line 1543 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1535 +#line 1545 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1534 +#line 1544 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1537 +#line 1547 [TRAINER_WILTON_5] = { -#line 1538 +#line 1548 .trainerName = _("WILTON"), -#line 1539 +#line 1549 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1540 +#line 1550 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1542 +#line 1552 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1543 +#line 1553 .items = { ITEM_FULL_RESTORE }, -#line 1544 +#line 1554 .doubleBattle = FALSE, -#line 1545 +#line 1555 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1547 +#line 1557 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1549 +#line 1559 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1548 +#line 1558 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1551 +#line 1561 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1553 +#line 1563 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1552 +#line 1562 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1555 +#line 1565 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1557 +#line 1567 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1556 +#line 1566 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1559 +#line 1569 [TRAINER_WARREN] = { -#line 1560 +#line 1570 .trainerName = _("WARREN"), -#line 1561 +#line 1571 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1562 +#line 1572 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1564 +#line 1574 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1565 +#line 1575 .items = { ITEM_FULL_RESTORE }, -#line 1566 +#line 1576 .doubleBattle = FALSE, -#line 1567 +#line 1577 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1569 +#line 1579 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1571 +#line 1581 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1570 +#line 1580 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1573 +#line 1583 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1575 +#line 1585 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1574 +#line 1584 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1577 +#line 1587 [TRAINER_MARY] = { -#line 1578 +#line 1588 .trainerName = _("MARY"), -#line 1579 +#line 1589 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1580 +#line 1590 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1581 +#line 1591 F_TRAINER_FEMALE | -#line 1582 +#line 1592 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1583 +#line 1593 .items = { ITEM_HYPER_POTION }, -#line 1584 +#line 1594 .doubleBattle = FALSE, -#line 1585 +#line 1595 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1587 +#line 1597 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1589 +#line 1599 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1588 +#line 1598 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1590 +#line 1600 MOVE_FEINT_ATTACK, MOVE_SHOCK_WAVE, }, }, }, }, -#line 1593 +#line 1603 [TRAINER_ALEXIA] = { -#line 1594 +#line 1604 .trainerName = _("ALEXIA"), -#line 1595 +#line 1605 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1596 +#line 1606 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1597 +#line 1607 F_TRAINER_FEMALE | -#line 1598 +#line 1608 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1599 +#line 1609 .items = { ITEM_HYPER_POTION }, -#line 1600 +#line 1610 .doubleBattle = FALSE, -#line 1601 +#line 1611 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1603 +#line 1613 .species = SPECIES_WIGGLYTUFF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1605 +#line 1615 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1604 +#line 1614 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1606 +#line 1616 MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, @@ -4025,82 +4025,82 @@ F_TRAINER_FEMALE | }, }, }, -#line 1610 +#line 1620 [TRAINER_JODY] = { -#line 1611 +#line 1621 .trainerName = _("JODY"), -#line 1612 +#line 1622 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1613 +#line 1623 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1614 +#line 1624 F_TRAINER_FEMALE | -#line 1615 +#line 1625 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1616 +#line 1626 .items = { ITEM_HYPER_POTION }, -#line 1617 +#line 1627 .doubleBattle = FALSE, -#line 1618 +#line 1628 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1620 +#line 1630 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1622 +#line 1632 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1621 +#line 1631 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1623 +#line 1633 MOVE_SWORDS_DANCE, MOVE_SLASH, }, }, }, }, -#line 1626 +#line 1636 [TRAINER_WENDY] = { -#line 1627 +#line 1637 .trainerName = _("WENDY"), -#line 1628 +#line 1638 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1629 +#line 1639 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1630 +#line 1640 F_TRAINER_FEMALE | -#line 1631 +#line 1641 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1632 +#line 1642 .items = { ITEM_FULL_RESTORE }, -#line 1633 +#line 1643 .doubleBattle = FALSE, -#line 1634 +#line 1644 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1636 +#line 1646 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1638 +#line 1648 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1637 +#line 1647 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1639 +#line 1649 MOVE_BATON_PASS, MOVE_FEINT_ATTACK, MOVE_FAKE_TEARS, @@ -4108,17 +4108,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1644 +#line 1654 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1646 +#line 1656 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1645 +#line 1655 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1647 +#line 1657 MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, @@ -4126,17 +4126,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1652 +#line 1662 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1654 +#line 1664 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1653 +#line 1663 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1655 +#line 1665 MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, @@ -4145,1083 +4145,1083 @@ F_TRAINER_FEMALE | }, }, }, -#line 1660 +#line 1670 [TRAINER_KEIRA] = { -#line 1661 +#line 1671 .trainerName = _("KEIRA"), -#line 1662 +#line 1672 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1663 +#line 1673 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1664 +#line 1674 F_TRAINER_FEMALE | -#line 1665 +#line 1675 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1666 +#line 1676 .items = { ITEM_FULL_RESTORE }, -#line 1667 +#line 1677 .doubleBattle = FALSE, -#line 1668 +#line 1678 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1670 +#line 1680 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1672 +#line 1682 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1671 +#line 1681 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1674 +#line 1684 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1676 +#line 1686 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1675 +#line 1685 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1678 +#line 1688 [TRAINER_BROOKE_1] = { -#line 1679 +#line 1689 .trainerName = _("BROOKE"), -#line 1680 +#line 1690 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1681 +#line 1691 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1682 +#line 1692 F_TRAINER_FEMALE | -#line 1683 +#line 1693 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1684 +#line 1694 .items = { ITEM_SUPER_POTION }, -#line 1685 +#line 1695 .doubleBattle = FALSE, -#line 1686 +#line 1696 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1688 +#line 1698 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1690 +#line 1700 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1689 +#line 1699 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1692 +#line 1702 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1694 +#line 1704 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1693 +#line 1703 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1696 +#line 1706 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1698 +#line 1708 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1697 +#line 1707 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1700 +#line 1710 [TRAINER_JENNIFER] = { -#line 1701 +#line 1711 .trainerName = _("JENNIFER"), -#line 1702 +#line 1712 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1703 +#line 1713 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1704 +#line 1714 F_TRAINER_FEMALE | -#line 1705 +#line 1715 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1706 +#line 1716 .items = { ITEM_FULL_RESTORE }, -#line 1707 +#line 1717 .doubleBattle = FALSE, -#line 1708 +#line 1718 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1710 +#line 1720 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1712 +#line 1722 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 1711 +#line 1721 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1714 +#line 1724 [TRAINER_HOPE] = { -#line 1715 +#line 1725 .trainerName = _("HOPE"), -#line 1716 +#line 1726 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1717 +#line 1727 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1718 +#line 1728 F_TRAINER_FEMALE | -#line 1719 +#line 1729 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1720 +#line 1730 .items = { ITEM_FULL_RESTORE }, -#line 1721 +#line 1731 .doubleBattle = FALSE, -#line 1722 +#line 1732 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1724 +#line 1734 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1726 +#line 1736 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1725 +#line 1735 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1728 +#line 1738 [TRAINER_SHANNON] = { -#line 1729 +#line 1739 .trainerName = _("SHANNON"), -#line 1730 +#line 1740 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1731 +#line 1741 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1732 +#line 1742 F_TRAINER_FEMALE | -#line 1733 +#line 1743 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1734 +#line 1744 .items = { ITEM_FULL_RESTORE }, -#line 1735 +#line 1745 .doubleBattle = FALSE, -#line 1736 +#line 1746 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1738 +#line 1748 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1740 +#line 1750 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1739 +#line 1749 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1742 +#line 1752 [TRAINER_MICHELLE] = { -#line 1743 +#line 1753 .trainerName = _("MICHELLE"), -#line 1744 +#line 1754 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1745 +#line 1755 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1746 +#line 1756 F_TRAINER_FEMALE | -#line 1747 +#line 1757 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1748 +#line 1758 .items = { ITEM_FULL_RESTORE }, -#line 1749 +#line 1759 .doubleBattle = FALSE, -#line 1750 +#line 1760 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1752 +#line 1762 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1754 +#line 1764 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1753 +#line 1763 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1756 +#line 1766 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1758 +#line 1768 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1757 +#line 1767 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1760 +#line 1770 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1762 +#line 1772 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1761 +#line 1771 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1764 +#line 1774 [TRAINER_CAROLINE] = { -#line 1765 +#line 1775 .trainerName = _("CAROLINE"), -#line 1766 +#line 1776 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1767 +#line 1777 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1768 +#line 1778 F_TRAINER_FEMALE | -#line 1769 +#line 1779 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1770 +#line 1780 .items = { ITEM_FULL_RESTORE }, -#line 1771 +#line 1781 .doubleBattle = FALSE, -#line 1772 +#line 1782 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1774 +#line 1784 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1776 +#line 1786 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1775 +#line 1785 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1778 +#line 1788 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1780 +#line 1790 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1779 +#line 1789 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1782 +#line 1792 [TRAINER_JULIE] = { -#line 1783 +#line 1793 .trainerName = _("JULIE"), -#line 1784 +#line 1794 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1785 +#line 1795 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1786 +#line 1796 F_TRAINER_FEMALE | -#line 1787 +#line 1797 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1788 +#line 1798 .items = { ITEM_FULL_RESTORE }, -#line 1789 +#line 1799 .doubleBattle = FALSE, -#line 1790 +#line 1800 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1792 +#line 1802 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1794 +#line 1804 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1793 +#line 1803 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1796 +#line 1806 .species = SPECIES_NINETALES, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1798 +#line 1808 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1797 +#line 1807 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1800 +#line 1810 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1802 +#line 1812 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1801 +#line 1811 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1804 +#line 1814 [TRAINER_BROOKE_2] = { -#line 1805 +#line 1815 .trainerName = _("BROOKE"), -#line 1806 +#line 1816 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1807 +#line 1817 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1808 +#line 1818 F_TRAINER_FEMALE | -#line 1809 +#line 1819 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1810 +#line 1820 .items = { ITEM_HYPER_POTION }, -#line 1811 +#line 1821 .doubleBattle = FALSE, -#line 1812 +#line 1822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1814 +#line 1824 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1816 +#line 1826 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1815 +#line 1825 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1818 +#line 1828 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1820 +#line 1830 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1819 +#line 1829 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1822 +#line 1832 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1824 +#line 1834 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1823 +#line 1833 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1826 +#line 1836 [TRAINER_BROOKE_3] = { -#line 1827 +#line 1837 .trainerName = _("BROOKE"), -#line 1828 +#line 1838 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1829 +#line 1839 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1830 +#line 1840 F_TRAINER_FEMALE | -#line 1831 +#line 1841 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1832 +#line 1842 .items = { ITEM_HYPER_POTION }, -#line 1833 +#line 1843 .doubleBattle = FALSE, -#line 1834 +#line 1844 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1836 +#line 1846 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1838 +#line 1848 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1837 +#line 1847 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1840 +#line 1850 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1842 +#line 1852 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1841 +#line 1851 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1844 +#line 1854 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1846 +#line 1856 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1845 +#line 1855 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1848 +#line 1858 [TRAINER_BROOKE_4] = { -#line 1849 +#line 1859 .trainerName = _("BROOKE"), -#line 1850 +#line 1860 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1851 +#line 1861 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1852 +#line 1862 F_TRAINER_FEMALE | -#line 1853 +#line 1863 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1854 +#line 1864 .items = { ITEM_FULL_RESTORE }, -#line 1855 +#line 1865 .doubleBattle = FALSE, -#line 1856 +#line 1866 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1858 +#line 1868 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1860 +#line 1870 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1859 +#line 1869 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1862 +#line 1872 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1864 +#line 1874 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1863 +#line 1873 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1866 +#line 1876 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1868 +#line 1878 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1867 +#line 1877 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1870 +#line 1880 [TRAINER_BROOKE_5] = { -#line 1871 +#line 1881 .trainerName = _("BROOKE"), -#line 1872 +#line 1882 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1873 +#line 1883 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1874 +#line 1884 F_TRAINER_FEMALE | -#line 1875 +#line 1885 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1876 +#line 1886 .items = { ITEM_FULL_RESTORE }, -#line 1877 +#line 1887 .doubleBattle = FALSE, -#line 1878 +#line 1888 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1880 +#line 1890 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1882 +#line 1892 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1881 +#line 1891 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1884 +#line 1894 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1886 +#line 1896 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1885 +#line 1895 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1888 +#line 1898 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1890 +#line 1900 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1889 +#line 1899 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1892 +#line 1902 [TRAINER_PATRICIA] = { -#line 1893 +#line 1903 .trainerName = _("PATRICIA"), -#line 1894 +#line 1904 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1895 +#line 1905 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1896 +#line 1906 F_TRAINER_FEMALE | -#line 1897 +#line 1907 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1898 +#line 1908 .doubleBattle = FALSE, -#line 1899 +#line 1909 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1901 +#line 1911 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1903 +#line 1913 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1902 +#line 1912 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1905 +#line 1915 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1907 +#line 1917 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1906 +#line 1916 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1909 +#line 1919 [TRAINER_KINDRA] = { -#line 1910 +#line 1920 .trainerName = _("KINDRA"), -#line 1911 +#line 1921 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1912 +#line 1922 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1913 +#line 1923 F_TRAINER_FEMALE | -#line 1914 +#line 1924 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1915 +#line 1925 .doubleBattle = FALSE, -#line 1916 +#line 1926 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1918 +#line 1928 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1920 +#line 1930 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1919 +#line 1929 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1922 +#line 1932 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1924 +#line 1934 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1923 +#line 1933 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1926 +#line 1936 [TRAINER_TAMMY] = { -#line 1927 +#line 1937 .trainerName = _("TAMMY"), -#line 1928 +#line 1938 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1929 +#line 1939 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1930 +#line 1940 F_TRAINER_FEMALE | -#line 1931 +#line 1941 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1932 +#line 1942 .doubleBattle = FALSE, -#line 1933 +#line 1943 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1935 +#line 1945 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1937 +#line 1947 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1936 +#line 1946 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1939 +#line 1949 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1941 +#line 1951 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1940 +#line 1950 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1943 +#line 1953 [TRAINER_VALERIE_1] = { -#line 1944 +#line 1954 .trainerName = _("VALERIE"), -#line 1945 +#line 1955 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1946 +#line 1956 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1947 +#line 1957 F_TRAINER_FEMALE | -#line 1948 +#line 1958 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1949 +#line 1959 .doubleBattle = FALSE, -#line 1950 +#line 1960 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1952 +#line 1962 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1954 +#line 1964 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1953 +#line 1963 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1956 +#line 1966 [TRAINER_TASHA] = { -#line 1957 +#line 1967 .trainerName = _("TASHA"), -#line 1958 +#line 1968 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1959 +#line 1969 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1960 +#line 1970 F_TRAINER_FEMALE | -#line 1961 +#line 1971 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1962 +#line 1972 .doubleBattle = FALSE, -#line 1963 +#line 1973 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1965 +#line 1975 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1967 +#line 1977 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 1966 +#line 1976 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1969 +#line 1979 [TRAINER_VALERIE_2] = { -#line 1970 +#line 1980 .trainerName = _("VALERIE"), -#line 1971 +#line 1981 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1972 +#line 1982 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1973 +#line 1983 F_TRAINER_FEMALE | -#line 1974 +#line 1984 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1975 +#line 1985 .doubleBattle = FALSE, -#line 1976 +#line 1986 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1978 +#line 1988 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1980 +#line 1990 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1979 +#line 1989 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1982 +#line 1992 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1984 +#line 1994 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1983 +#line 1993 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1986 +#line 1996 [TRAINER_VALERIE_3] = { -#line 1987 +#line 1997 .trainerName = _("VALERIE"), -#line 1988 +#line 1998 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1989 +#line 1999 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1990 +#line 2000 F_TRAINER_FEMALE | -#line 1991 +#line 2001 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1992 +#line 2002 .doubleBattle = FALSE, -#line 1993 +#line 2003 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1995 +#line 2005 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1997 +#line 2007 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1996 +#line 2006 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1999 +#line 2009 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2001 +#line 2011 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2000 +#line 2010 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2003 +#line 2013 [TRAINER_VALERIE_4] = { -#line 2004 +#line 2014 .trainerName = _("VALERIE"), -#line 2005 +#line 2015 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2006 +#line 2016 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2007 +#line 2017 F_TRAINER_FEMALE | -#line 2008 +#line 2018 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2009 +#line 2019 .doubleBattle = FALSE, -#line 2010 +#line 2020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2012 +#line 2022 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2014 +#line 2024 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2013 +#line 2023 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2016 +#line 2026 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2018 +#line 2028 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2017 +#line 2027 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2020 +#line 2030 [TRAINER_VALERIE_5] = { -#line 2021 +#line 2031 .trainerName = _("VALERIE"), -#line 2022 +#line 2032 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2023 +#line 2033 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2024 +#line 2034 F_TRAINER_FEMALE | -#line 2025 +#line 2035 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2026 +#line 2036 .doubleBattle = FALSE, -#line 2027 +#line 2037 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2029 +#line 2039 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2031 +#line 2041 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2030 +#line 2040 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2033 +#line 2043 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2035 +#line 2045 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2034 +#line 2044 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2037 +#line 2047 .species = SPECIES_GRUMPIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2039 +#line 2049 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2038 +#line 2048 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2041 +#line 2051 [TRAINER_CINDY_1] = { -#line 2042 +#line 2052 .trainerName = _("CINDY"), -#line 2043 +#line 2053 .trainerClass = TRAINER_CLASS_LADY, -#line 2044 +#line 2054 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2045 +#line 2055 F_TRAINER_FEMALE | -#line 2046 +#line 2056 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2047 +#line 2057 .items = { ITEM_FULL_RESTORE }, -#line 2048 +#line 2058 .doubleBattle = FALSE, -#line 2049 +#line 2059 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2051 +#line 2061 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2051 +#line 2061 .heldItem = ITEM_NUGGET, -#line 2053 +#line 2063 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2052 +#line 2062 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2055 +#line 2065 [TRAINER_DAPHNE] = { -#line 2056 +#line 2066 .trainerName = _("DAPHNE"), -#line 2057 +#line 2067 .trainerClass = TRAINER_CLASS_LADY, -#line 2058 +#line 2068 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2059 +#line 2069 F_TRAINER_FEMALE | -#line 2060 +#line 2070 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2061 +#line 2071 .items = { ITEM_FULL_RESTORE }, -#line 2062 +#line 2072 .doubleBattle = FALSE, -#line 2063 +#line 2073 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2065 +#line 2075 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2065 +#line 2075 .heldItem = ITEM_NUGGET, -#line 2067 +#line 2077 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2066 +#line 2076 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2068 +#line 2078 MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, @@ -5229,19 +5229,19 @@ F_TRAINER_FEMALE | }, }, { -#line 2073 +#line 2083 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2073 +#line 2083 .heldItem = ITEM_NUGGET, -#line 2075 +#line 2085 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2074 +#line 2084 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2076 +#line 2086 MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, @@ -5250,330 +5250,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 2081 +#line 2091 [TRAINER_GRUNT_SPACE_CENTER_2] = { -#line 2082 +#line 2092 .trainerName = _("GRUNT"), -#line 2083 +#line 2093 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2084 +#line 2094 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 2086 +#line 2096 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2087 +#line 2097 .doubleBattle = FALSE, -#line 2088 +#line 2098 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2090 +#line 2100 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2092 +#line 2102 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2091 +#line 2101 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2094 +#line 2104 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2096 +#line 2106 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2095 +#line 2105 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2098 +#line 2108 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2100 +#line 2110 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2099 +#line 2109 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2102 +#line 2112 [TRAINER_CINDY_2] = { -#line 2103 +#line 2113 .trainerName = _("CINDY"), -#line 2104 +#line 2114 .trainerClass = TRAINER_CLASS_LADY, -#line 2105 +#line 2115 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2106 +#line 2116 F_TRAINER_FEMALE | -#line 2107 +#line 2117 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2108 +#line 2118 .items = { ITEM_FULL_RESTORE }, -#line 2109 +#line 2119 .doubleBattle = FALSE, -#line 2110 +#line 2120 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2112 +#line 2122 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2112 +#line 2122 .heldItem = ITEM_NUGGET, -#line 2114 +#line 2124 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2113 +#line 2123 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2115 +#line 2125 MOVE_TACKLE, MOVE_TAIL_WHIP, }, }, }, }, -#line 2118 +#line 2128 [TRAINER_BRIANNA] = { -#line 2119 +#line 2129 .trainerName = _("BRIANNA"), -#line 2120 +#line 2130 .trainerClass = TRAINER_CLASS_LADY, -#line 2121 +#line 2131 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2122 +#line 2132 F_TRAINER_FEMALE | -#line 2123 +#line 2133 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2124 +#line 2134 .items = { ITEM_FULL_RESTORE }, -#line 2125 +#line 2135 .doubleBattle = FALSE, -#line 2126 +#line 2136 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2128 +#line 2138 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2128 +#line 2138 .heldItem = ITEM_NUGGET, -#line 2130 +#line 2140 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2129 +#line 2139 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2132 +#line 2142 [TRAINER_NAOMI] = { -#line 2133 +#line 2143 .trainerName = _("NAOMI"), -#line 2134 +#line 2144 .trainerClass = TRAINER_CLASS_LADY, -#line 2135 +#line 2145 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2136 +#line 2146 F_TRAINER_FEMALE | -#line 2137 +#line 2147 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2138 +#line 2148 .items = { ITEM_FULL_RESTORE }, -#line 2139 +#line 2149 .doubleBattle = FALSE, -#line 2140 +#line 2150 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2142 +#line 2152 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2142 +#line 2152 .heldItem = ITEM_NUGGET, -#line 2144 +#line 2154 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2143 +#line 2153 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2146 +#line 2156 [TRAINER_CINDY_3] = { -#line 2147 +#line 2157 .trainerName = _("CINDY"), -#line 2148 +#line 2158 .trainerClass = TRAINER_CLASS_LADY, -#line 2149 +#line 2159 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2150 +#line 2160 F_TRAINER_FEMALE | -#line 2151 +#line 2161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2152 +#line 2162 .items = { ITEM_FULL_RESTORE }, -#line 2153 +#line 2163 .doubleBattle = FALSE, -#line 2154 +#line 2164 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2156 +#line 2166 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2156 +#line 2166 .heldItem = ITEM_NUGGET, -#line 2158 +#line 2168 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2157 +#line 2167 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2160 +#line 2170 [TRAINER_CINDY_4] = { -#line 2161 +#line 2171 .trainerName = _("CINDY"), -#line 2162 +#line 2172 .trainerClass = TRAINER_CLASS_LADY, -#line 2163 +#line 2173 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2164 +#line 2174 F_TRAINER_FEMALE | -#line 2165 +#line 2175 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2166 +#line 2176 .items = { ITEM_FULL_RESTORE }, -#line 2167 +#line 2177 .doubleBattle = FALSE, -#line 2168 +#line 2178 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2170 +#line 2180 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2170 +#line 2180 .heldItem = ITEM_NUGGET, -#line 2172 +#line 2182 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2171 +#line 2181 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2174 +#line 2184 [TRAINER_CINDY_5] = { -#line 2175 +#line 2185 .trainerName = _("CINDY"), -#line 2176 +#line 2186 .trainerClass = TRAINER_CLASS_LADY, -#line 2177 +#line 2187 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2178 +#line 2188 F_TRAINER_FEMALE | -#line 2179 +#line 2189 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2180 +#line 2190 .items = { ITEM_FULL_RESTORE }, -#line 2181 +#line 2191 .doubleBattle = FALSE, -#line 2182 +#line 2192 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2184 +#line 2194 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2184 +#line 2194 .heldItem = ITEM_NUGGET, -#line 2186 +#line 2196 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2185 +#line 2195 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2188 +#line 2198 [TRAINER_CINDY_6] = { -#line 2189 +#line 2199 .trainerName = _("CINDY"), -#line 2190 +#line 2200 .trainerClass = TRAINER_CLASS_LADY, -#line 2191 +#line 2201 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2192 +#line 2202 F_TRAINER_FEMALE | -#line 2193 +#line 2203 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2194 +#line 2204 .items = { ITEM_FULL_RESTORE }, -#line 2195 +#line 2205 .doubleBattle = FALSE, -#line 2196 +#line 2206 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2198 +#line 2208 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2198 +#line 2208 .heldItem = ITEM_NUGGET, -#line 2200 +#line 2210 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2199 +#line 2209 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2201 +#line 2211 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -5582,141 +5582,141 @@ F_TRAINER_FEMALE | }, }, }, -#line 2206 +#line 2216 [TRAINER_MELISSA] = { -#line 2207 +#line 2217 .trainerName = _("MELISSA"), -#line 2208 +#line 2218 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2209 +#line 2219 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2210 +#line 2220 F_TRAINER_FEMALE | -#line 2211 +#line 2221 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2212 +#line 2222 .doubleBattle = FALSE, -#line 2213 +#line 2223 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2215 +#line 2225 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2217 +#line 2227 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2216 +#line 2226 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2219 +#line 2229 [TRAINER_SHEILA] = { -#line 2220 +#line 2230 .trainerName = _("SHEILA"), -#line 2221 +#line 2231 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2222 +#line 2232 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2223 +#line 2233 F_TRAINER_FEMALE | -#line 2224 +#line 2234 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2225 +#line 2235 .doubleBattle = FALSE, -#line 2226 +#line 2236 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2228 +#line 2238 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2230 +#line 2240 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2229 +#line 2239 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2232 +#line 2242 [TRAINER_SHIRLEY] = { -#line 2233 +#line 2243 .trainerName = _("SHIRLEY"), -#line 2234 +#line 2244 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2235 +#line 2245 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2236 +#line 2246 F_TRAINER_FEMALE | -#line 2237 +#line 2247 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2238 +#line 2248 .doubleBattle = FALSE, -#line 2239 +#line 2249 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2241 +#line 2251 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2243 +#line 2253 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2242 +#line 2252 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2245 +#line 2255 [TRAINER_JESSICA_1] = { -#line 2246 +#line 2256 .trainerName = _("JESSICA"), -#line 2247 +#line 2257 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2248 +#line 2258 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2249 +#line 2259 F_TRAINER_FEMALE | -#line 2250 +#line 2260 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2251 +#line 2261 .doubleBattle = FALSE, -#line 2252 +#line 2262 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2254 +#line 2264 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2256 +#line 2266 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2255 +#line 2265 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2257 +#line 2267 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5724,17 +5724,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2262 +#line 2272 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2264 +#line 2274 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2263 +#line 2273 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2265 +#line 2275 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5743,107 +5743,107 @@ F_TRAINER_FEMALE | }, }, }, -#line 2270 +#line 2280 [TRAINER_CONNIE] = { -#line 2271 +#line 2281 .trainerName = _("CONNIE"), -#line 2272 +#line 2282 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2273 +#line 2283 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2274 +#line 2284 F_TRAINER_FEMALE | -#line 2275 +#line 2285 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2276 +#line 2286 .doubleBattle = FALSE, -#line 2277 +#line 2287 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2279 +#line 2289 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2281 +#line 2291 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2280 +#line 2290 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2283 +#line 2293 [TRAINER_BRIDGET] = { -#line 2284 +#line 2294 .trainerName = _("BRIDGET"), -#line 2285 +#line 2295 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2286 +#line 2296 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2287 +#line 2297 F_TRAINER_FEMALE | -#line 2288 +#line 2298 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2289 +#line 2299 .doubleBattle = FALSE, -#line 2290 +#line 2300 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2292 +#line 2302 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2294 +#line 2304 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2293 +#line 2303 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2296 +#line 2306 [TRAINER_OLIVIA] = { -#line 2297 +#line 2307 .trainerName = _("OLIVIA"), -#line 2298 +#line 2308 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2299 +#line 2309 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2300 +#line 2310 F_TRAINER_FEMALE | -#line 2301 +#line 2311 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2302 +#line 2312 .doubleBattle = FALSE, -#line 2303 +#line 2313 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2305 +#line 2315 .species = SPECIES_CLAMPERL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2307 +#line 2317 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2306 +#line 2316 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2308 +#line 2318 MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, @@ -5851,34 +5851,34 @@ F_TRAINER_FEMALE | }, }, { -#line 2313 +#line 2323 .species = SPECIES_CORPHISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2315 +#line 2325 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2314 +#line 2324 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2316 +#line 2326 MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, }, }, { -#line 2320 +#line 2330 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2322 +#line 2332 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2321 +#line 2331 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2323 +#line 2333 MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, @@ -5887,84 +5887,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 2328 +#line 2338 [TRAINER_TIFFANY] = { -#line 2329 +#line 2339 .trainerName = _("TIFFANY"), -#line 2330 +#line 2340 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2331 +#line 2341 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2332 +#line 2342 F_TRAINER_FEMALE | -#line 2333 +#line 2343 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2334 +#line 2344 .doubleBattle = FALSE, -#line 2335 +#line 2345 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2337 +#line 2347 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2339 +#line 2349 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2338 +#line 2348 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2341 +#line 2351 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2343 +#line 2353 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2342 +#line 2352 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2345 +#line 2355 [TRAINER_JESSICA_2] = { -#line 2346 +#line 2356 .trainerName = _("JESSICA"), -#line 2347 +#line 2357 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2348 +#line 2358 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2349 +#line 2359 F_TRAINER_FEMALE | -#line 2350 +#line 2360 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2351 +#line 2361 .doubleBattle = FALSE, -#line 2352 +#line 2362 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2354 +#line 2364 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2356 +#line 2366 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2355 +#line 2365 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2357 +#line 2367 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5972,17 +5972,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2362 +#line 2372 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2364 +#line 2374 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2363 +#line 2373 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2365 +#line 2375 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5991,39 +5991,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2370 +#line 2380 [TRAINER_JESSICA_3] = { -#line 2371 +#line 2381 .trainerName = _("JESSICA"), -#line 2372 +#line 2382 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2373 +#line 2383 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2374 +#line 2384 F_TRAINER_FEMALE | -#line 2375 +#line 2385 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2376 +#line 2386 .doubleBattle = FALSE, -#line 2377 +#line 2387 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2379 +#line 2389 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2381 +#line 2391 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2380 +#line 2390 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2382 +#line 2392 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6031,17 +6031,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2387 +#line 2397 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2389 +#line 2399 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2388 +#line 2398 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2390 +#line 2400 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6050,39 +6050,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2395 +#line 2405 [TRAINER_JESSICA_4] = { -#line 2396 +#line 2406 .trainerName = _("JESSICA"), -#line 2397 +#line 2407 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2398 +#line 2408 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2399 +#line 2409 F_TRAINER_FEMALE | -#line 2400 +#line 2410 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2401 +#line 2411 .doubleBattle = FALSE, -#line 2402 +#line 2412 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2404 +#line 2414 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2406 +#line 2416 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2405 +#line 2415 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2407 +#line 2417 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6090,17 +6090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2412 +#line 2422 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2414 +#line 2424 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2413 +#line 2423 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2415 +#line 2425 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6109,39 +6109,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2420 +#line 2430 [TRAINER_JESSICA_5] = { -#line 2421 +#line 2431 .trainerName = _("JESSICA"), -#line 2422 +#line 2432 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2423 +#line 2433 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2424 +#line 2434 F_TRAINER_FEMALE | -#line 2425 +#line 2435 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2426 +#line 2436 .doubleBattle = FALSE, -#line 2427 +#line 2437 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2429 +#line 2439 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2431 +#line 2441 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2430 +#line 2440 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2432 +#line 2442 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6149,17 +6149,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2437 +#line 2447 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2439 +#line 2449 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2438 +#line 2448 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2440 +#line 2450 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6168,266 +6168,266 @@ F_TRAINER_FEMALE | }, }, }, -#line 2445 +#line 2455 [TRAINER_WINSTON_1] = { -#line 2446 +#line 2456 .trainerName = _("WINSTON"), -#line 2447 +#line 2457 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2448 +#line 2458 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2450 +#line 2460 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2451 +#line 2461 .items = { ITEM_FULL_RESTORE }, -#line 2452 +#line 2462 .doubleBattle = FALSE, -#line 2453 +#line 2463 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2455 +#line 2465 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2455 +#line 2465 .heldItem = ITEM_NUGGET, -#line 2457 +#line 2467 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2456 +#line 2466 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2459 +#line 2469 [TRAINER_MOLLIE] = { -#line 2460 +#line 2470 .trainerName = _("MOLLIE"), -#line 2461 +#line 2471 .trainerClass = TRAINER_CLASS_EXPERT, -#line 2462 +#line 2472 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 2463 +#line 2473 F_TRAINER_FEMALE | -#line 2464 +#line 2474 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 2465 +#line 2475 .doubleBattle = FALSE, -#line 2466 +#line 2476 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2468 +#line 2478 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2470 +#line 2480 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2469 +#line 2479 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2472 +#line 2482 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2474 +#line 2484 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 2473 +#line 2483 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2476 +#line 2486 [TRAINER_GARRET] = { -#line 2477 +#line 2487 .trainerName = _("GARRET"), -#line 2478 +#line 2488 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2479 +#line 2489 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2481 +#line 2491 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2482 +#line 2492 .items = { ITEM_FULL_RESTORE }, -#line 2483 +#line 2493 .doubleBattle = FALSE, -#line 2484 +#line 2494 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2486 +#line 2496 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2486 +#line 2496 .heldItem = ITEM_NUGGET, -#line 2488 +#line 2498 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2487 +#line 2497 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2490 +#line 2500 [TRAINER_WINSTON_2] = { -#line 2491 +#line 2501 .trainerName = _("WINSTON"), -#line 2492 +#line 2502 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2493 +#line 2503 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2495 +#line 2505 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2496 +#line 2506 .items = { ITEM_FULL_RESTORE }, -#line 2497 +#line 2507 .doubleBattle = FALSE, -#line 2498 +#line 2508 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2500 +#line 2510 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2500 +#line 2510 .heldItem = ITEM_NUGGET, -#line 2502 +#line 2512 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2501 +#line 2511 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2504 +#line 2514 [TRAINER_WINSTON_3] = { -#line 2505 +#line 2515 .trainerName = _("WINSTON"), -#line 2506 +#line 2516 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2507 +#line 2517 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2509 +#line 2519 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2510 +#line 2520 .items = { ITEM_FULL_RESTORE }, -#line 2511 +#line 2521 .doubleBattle = FALSE, -#line 2512 +#line 2522 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2514 +#line 2524 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2514 +#line 2524 .heldItem = ITEM_NUGGET, -#line 2516 +#line 2526 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2515 +#line 2525 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2518 +#line 2528 [TRAINER_WINSTON_4] = { -#line 2519 +#line 2529 .trainerName = _("WINSTON"), -#line 2520 +#line 2530 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2521 +#line 2531 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2523 +#line 2533 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2524 +#line 2534 .items = { ITEM_FULL_RESTORE }, -#line 2525 +#line 2535 .doubleBattle = FALSE, -#line 2526 +#line 2536 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2528 +#line 2538 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2528 +#line 2538 .heldItem = ITEM_NUGGET, -#line 2530 +#line 2540 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2529 +#line 2539 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2532 +#line 2542 [TRAINER_WINSTON_5] = { -#line 2533 +#line 2543 .trainerName = _("WINSTON"), -#line 2534 +#line 2544 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2535 +#line 2545 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2537 +#line 2547 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2538 +#line 2548 .items = { ITEM_FULL_RESTORE }, -#line 2539 +#line 2549 .doubleBattle = FALSE, -#line 2540 +#line 2550 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2542 +#line 2552 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2542 +#line 2552 .heldItem = ITEM_NUGGET, -#line 2544 +#line 2554 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2543 +#line 2553 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2545 +#line 2555 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -6436,1876 +6436,1876 @@ F_TRAINER_FEMALE | }, }, }, -#line 2550 +#line 2560 [TRAINER_STEVE_1] = { -#line 2551 +#line 2561 .trainerName = _("STEVE"), -#line 2552 +#line 2562 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2553 +#line 2563 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2555 +#line 2565 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2556 +#line 2566 .doubleBattle = FALSE, -#line 2557 +#line 2567 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2559 +#line 2569 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2561 +#line 2571 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2560 +#line 2570 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2563 +#line 2573 [TRAINER_THALIA_1] = { -#line 2564 +#line 2574 .trainerName = _("THALIA"), -#line 2565 +#line 2575 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2566 +#line 2576 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2567 +#line 2577 F_TRAINER_FEMALE | -#line 2568 +#line 2578 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2569 +#line 2579 .doubleBattle = FALSE, -#line 2570 +#line 2580 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2572 +#line 2582 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2574 +#line 2584 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2573 +#line 2583 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2576 +#line 2586 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2578 +#line 2588 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2577 +#line 2587 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2580 +#line 2590 [TRAINER_MARK] = { -#line 2581 +#line 2591 .trainerName = _("MARK"), -#line 2582 +#line 2592 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2583 +#line 2593 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2585 +#line 2595 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2586 +#line 2596 .doubleBattle = FALSE, -#line 2587 +#line 2597 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2589 +#line 2599 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2591 +#line 2601 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2590 +#line 2600 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2593 +#line 2603 [TRAINER_GRUNT_MT_CHIMNEY_1] = { -#line 2594 +#line 2604 .trainerName = _("GRUNT"), -#line 2595 +#line 2605 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2596 +#line 2606 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 2597 +#line 2607 F_TRAINER_FEMALE | -#line 2598 +#line 2608 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2599 +#line 2609 .doubleBattle = FALSE, -#line 2600 +#line 2610 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2602 +#line 2612 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2604 +#line 2614 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2603 +#line 2613 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2606 +#line 2616 [TRAINER_STEVE_2] = { -#line 2607 +#line 2617 .trainerName = _("STEVE"), -#line 2608 +#line 2618 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2609 +#line 2619 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2611 +#line 2621 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2612 +#line 2622 .doubleBattle = FALSE, -#line 2613 +#line 2623 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2615 +#line 2625 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2617 +#line 2627 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2616 +#line 2626 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2619 +#line 2629 [TRAINER_STEVE_3] = { -#line 2620 +#line 2630 .trainerName = _("STEVE"), -#line 2621 +#line 2631 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2622 +#line 2632 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2624 +#line 2634 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2625 +#line 2635 .doubleBattle = FALSE, -#line 2626 +#line 2636 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2628 +#line 2638 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2630 +#line 2640 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2629 +#line 2639 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2632 +#line 2642 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2634 +#line 2644 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2633 +#line 2643 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2636 +#line 2646 [TRAINER_STEVE_4] = { -#line 2637 +#line 2647 .trainerName = _("STEVE"), -#line 2638 +#line 2648 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2639 +#line 2649 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2641 +#line 2651 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2642 +#line 2652 .doubleBattle = FALSE, -#line 2643 +#line 2653 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2645 +#line 2655 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2647 +#line 2657 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2646 +#line 2656 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2649 +#line 2659 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2651 +#line 2661 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2650 +#line 2660 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2653 +#line 2663 [TRAINER_STEVE_5] = { -#line 2654 +#line 2664 .trainerName = _("STEVE"), -#line 2655 +#line 2665 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2656 +#line 2666 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2658 +#line 2668 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2659 +#line 2669 .doubleBattle = FALSE, -#line 2660 +#line 2670 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2662 +#line 2672 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2664 +#line 2674 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2663 +#line 2673 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2666 +#line 2676 .species = SPECIES_RHYDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2668 +#line 2678 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2667 +#line 2677 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2670 +#line 2680 [TRAINER_LUIS] = { -#line 2671 +#line 2681 .trainerName = _("LUIS"), -#line 2672 +#line 2682 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2673 +#line 2683 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2675 +#line 2685 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2676 +#line 2686 .doubleBattle = FALSE, -#line 2677 +#line 2687 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2679 +#line 2689 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2681 +#line 2691 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2680 +#line 2690 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2683 +#line 2693 [TRAINER_DOMINIK] = { -#line 2684 +#line 2694 .trainerName = _("DOMINIK"), -#line 2685 +#line 2695 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2686 +#line 2696 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2688 +#line 2698 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2689 +#line 2699 .doubleBattle = FALSE, -#line 2690 +#line 2700 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2692 +#line 2702 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2694 +#line 2704 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2693 +#line 2703 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2696 +#line 2706 [TRAINER_DOUGLAS] = { -#line 2697 +#line 2707 .trainerName = _("DOUGLAS"), -#line 2698 +#line 2708 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2699 +#line 2709 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2701 +#line 2711 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2702 +#line 2712 .doubleBattle = FALSE, -#line 2703 +#line 2713 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2705 +#line 2715 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2707 +#line 2717 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2706 +#line 2716 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2709 +#line 2719 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2711 +#line 2721 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2710 +#line 2720 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2713 +#line 2723 [TRAINER_DARRIN] = { -#line 2714 +#line 2724 .trainerName = _("DARRIN"), -#line 2715 +#line 2725 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2716 +#line 2726 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2718 +#line 2728 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2719 +#line 2729 .doubleBattle = FALSE, -#line 2720 +#line 2730 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2722 +#line 2732 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2724 +#line 2734 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2723 +#line 2733 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2726 +#line 2736 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2728 +#line 2738 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2727 +#line 2737 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2730 +#line 2740 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2732 +#line 2742 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2731 +#line 2741 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2734 +#line 2744 [TRAINER_TONY_1] = { -#line 2735 +#line 2745 .trainerName = _("TONY"), -#line 2736 +#line 2746 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2737 +#line 2747 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2739 +#line 2749 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2740 +#line 2750 .doubleBattle = FALSE, -#line 2741 +#line 2751 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2743 +#line 2753 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2745 +#line 2755 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2744 +#line 2754 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2747 +#line 2757 [TRAINER_JEROME] = { -#line 2748 +#line 2758 .trainerName = _("JEROME"), -#line 2749 +#line 2759 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2750 +#line 2760 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2752 +#line 2762 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2753 +#line 2763 .doubleBattle = FALSE, -#line 2754 +#line 2764 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2756 +#line 2766 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2758 +#line 2768 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2757 +#line 2767 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2760 +#line 2770 [TRAINER_MATTHEW] = { -#line 2761 +#line 2771 .trainerName = _("MATTHEW"), -#line 2762 +#line 2772 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2763 +#line 2773 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2765 +#line 2775 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2766 +#line 2776 .doubleBattle = FALSE, -#line 2767 +#line 2777 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2769 +#line 2779 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2771 +#line 2781 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2770 +#line 2780 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2773 +#line 2783 [TRAINER_DAVID] = { -#line 2774 +#line 2784 .trainerName = _("DAVID"), -#line 2775 +#line 2785 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2776 +#line 2786 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2778 +#line 2788 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2779 +#line 2789 .doubleBattle = FALSE, -#line 2780 +#line 2790 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2782 +#line 2792 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2784 +#line 2794 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2783 +#line 2793 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2786 +#line 2796 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2788 +#line 2798 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2787 +#line 2797 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2790 +#line 2800 [TRAINER_SPENCER] = { -#line 2791 +#line 2801 .trainerName = _("SPENCER"), -#line 2792 +#line 2802 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2793 +#line 2803 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2795 +#line 2805 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2796 +#line 2806 .doubleBattle = FALSE, -#line 2797 +#line 2807 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2799 +#line 2809 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2801 +#line 2811 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2800 +#line 2810 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2803 +#line 2813 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2805 +#line 2815 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2804 +#line 2814 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2807 +#line 2817 [TRAINER_ROLAND] = { -#line 2808 +#line 2818 .trainerName = _("ROLAND"), -#line 2809 +#line 2819 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2810 +#line 2820 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2812 +#line 2822 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2813 +#line 2823 .doubleBattle = FALSE, -#line 2814 +#line 2824 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2816 +#line 2826 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2818 +#line 2828 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2817 +#line 2827 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2820 +#line 2830 [TRAINER_NOLEN] = { -#line 2821 +#line 2831 .trainerName = _("NOLEN"), -#line 2822 +#line 2832 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2823 +#line 2833 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2825 +#line 2835 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2826 +#line 2836 .doubleBattle = FALSE, -#line 2827 +#line 2837 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2829 +#line 2839 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2831 +#line 2841 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2830 +#line 2840 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2833 +#line 2843 [TRAINER_STAN] = { -#line 2834 +#line 2844 .trainerName = _("STAN"), -#line 2835 +#line 2845 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2836 +#line 2846 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2838 +#line 2848 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2839 +#line 2849 .doubleBattle = FALSE, -#line 2840 +#line 2850 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2842 +#line 2852 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2844 +#line 2854 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2843 +#line 2853 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2846 +#line 2856 [TRAINER_BARRY] = { -#line 2847 +#line 2857 .trainerName = _("BARRY"), -#line 2848 +#line 2858 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2849 +#line 2859 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2851 +#line 2861 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2852 +#line 2862 .doubleBattle = FALSE, -#line 2853 +#line 2863 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2855 +#line 2865 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2857 +#line 2867 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2856 +#line 2866 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2859 +#line 2869 [TRAINER_DEAN] = { -#line 2860 +#line 2870 .trainerName = _("DEAN"), -#line 2861 +#line 2871 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2862 +#line 2872 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2864 +#line 2874 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2865 +#line 2875 .doubleBattle = FALSE, -#line 2866 +#line 2876 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2868 +#line 2878 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2870 +#line 2880 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2869 +#line 2879 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2872 +#line 2882 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2874 +#line 2884 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2873 +#line 2883 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2876 +#line 2886 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2878 +#line 2888 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2877 +#line 2887 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2880 +#line 2890 [TRAINER_RODNEY] = { -#line 2881 +#line 2891 .trainerName = _("RODNEY"), -#line 2882 +#line 2892 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2883 +#line 2893 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2885 +#line 2895 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2886 +#line 2896 .doubleBattle = FALSE, -#line 2887 +#line 2897 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2889 +#line 2899 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2891 +#line 2901 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2890 +#line 2900 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2893 +#line 2903 [TRAINER_RICHARD] = { -#line 2894 +#line 2904 .trainerName = _("RICHARD"), -#line 2895 +#line 2905 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2896 +#line 2906 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2898 +#line 2908 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2899 +#line 2909 .doubleBattle = FALSE, -#line 2900 +#line 2910 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2902 +#line 2912 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2904 +#line 2914 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2903 +#line 2913 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2906 +#line 2916 [TRAINER_HERMAN] = { -#line 2907 +#line 2917 .trainerName = _("HERMAN"), -#line 2908 +#line 2918 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2909 +#line 2919 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2911 +#line 2921 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2912 +#line 2922 .doubleBattle = FALSE, -#line 2913 +#line 2923 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2915 +#line 2925 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2917 +#line 2927 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2916 +#line 2926 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2919 +#line 2929 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2921 +#line 2931 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2920 +#line 2930 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2923 +#line 2933 [TRAINER_SANTIAGO] = { -#line 2924 +#line 2934 .trainerName = _("SANTIAGO"), -#line 2925 +#line 2935 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2926 +#line 2936 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2928 +#line 2938 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2929 +#line 2939 .doubleBattle = FALSE, -#line 2930 +#line 2940 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2932 +#line 2942 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2934 +#line 2944 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2933 +#line 2943 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2936 +#line 2946 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2938 +#line 2948 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2937 +#line 2947 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2940 +#line 2950 [TRAINER_GILBERT] = { -#line 2941 +#line 2951 .trainerName = _("GILBERT"), -#line 2942 +#line 2952 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2943 +#line 2953 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2945 +#line 2955 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2946 +#line 2956 .doubleBattle = FALSE, -#line 2947 +#line 2957 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2949 +#line 2959 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2951 +#line 2961 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2950 +#line 2960 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2953 +#line 2963 [TRAINER_FRANKLIN] = { -#line 2954 +#line 2964 .trainerName = _("FRANKLIN"), -#line 2955 +#line 2965 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2956 +#line 2966 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2958 +#line 2968 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2959 +#line 2969 .doubleBattle = FALSE, -#line 2960 +#line 2970 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2962 +#line 2972 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2964 +#line 2974 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2963 +#line 2973 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2966 +#line 2976 [TRAINER_KEVIN] = { -#line 2967 +#line 2977 .trainerName = _("KEVIN"), -#line 2968 +#line 2978 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2969 +#line 2979 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2971 +#line 2981 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2972 +#line 2982 .doubleBattle = FALSE, -#line 2973 +#line 2983 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2975 +#line 2985 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2977 +#line 2987 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2976 +#line 2986 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2979 +#line 2989 [TRAINER_JACK] = { -#line 2980 +#line 2990 .trainerName = _("JACK"), -#line 2981 +#line 2991 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2982 +#line 2992 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2984 +#line 2994 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2985 +#line 2995 .doubleBattle = FALSE, -#line 2986 +#line 2996 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2988 +#line 2998 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2990 +#line 3000 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2989 +#line 2999 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2992 +#line 3002 [TRAINER_DUDLEY] = { -#line 2993 +#line 3003 .trainerName = _("DUDLEY"), -#line 2994 +#line 3004 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2995 +#line 3005 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2997 +#line 3007 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2998 +#line 3008 .doubleBattle = FALSE, -#line 2999 +#line 3009 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3001 +#line 3011 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3003 +#line 3013 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3002 +#line 3012 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3005 +#line 3015 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3007 +#line 3017 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3006 +#line 3016 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3009 +#line 3019 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3011 +#line 3021 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3010 +#line 3020 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3013 +#line 3023 [TRAINER_CHAD] = { -#line 3014 +#line 3024 .trainerName = _("CHAD"), -#line 3015 +#line 3025 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3016 +#line 3026 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3018 +#line 3028 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3019 +#line 3029 .doubleBattle = FALSE, -#line 3020 +#line 3030 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3022 +#line 3032 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3024 +#line 3034 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3023 +#line 3033 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3026 +#line 3036 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3028 +#line 3038 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3027 +#line 3037 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3030 +#line 3040 [TRAINER_TONY_2] = { -#line 3031 +#line 3041 .trainerName = _("TONY"), -#line 3032 +#line 3042 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3033 +#line 3043 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3035 +#line 3045 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3036 +#line 3046 .doubleBattle = FALSE, -#line 3037 +#line 3047 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3039 +#line 3049 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3041 +#line 3051 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3040 +#line 3050 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3043 +#line 3053 [TRAINER_TONY_3] = { -#line 3044 +#line 3054 .trainerName = _("TONY"), -#line 3045 +#line 3055 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3046 +#line 3056 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3048 +#line 3058 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3049 +#line 3059 .doubleBattle = FALSE, -#line 3050 +#line 3060 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3052 +#line 3062 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3054 +#line 3064 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3053 +#line 3063 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3056 +#line 3066 [TRAINER_TONY_4] = { -#line 3057 +#line 3067 .trainerName = _("TONY"), -#line 3058 +#line 3068 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3059 +#line 3069 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3061 +#line 3071 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3062 +#line 3072 .doubleBattle = FALSE, -#line 3063 +#line 3073 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3065 +#line 3075 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3067 +#line 3077 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3066 +#line 3076 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3069 +#line 3079 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3071 +#line 3081 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3070 +#line 3080 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3073 +#line 3083 [TRAINER_TONY_5] = { -#line 3074 +#line 3084 .trainerName = _("TONY"), -#line 3075 +#line 3085 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3076 +#line 3086 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3078 +#line 3088 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3079 +#line 3089 .doubleBattle = FALSE, -#line 3080 +#line 3090 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3082 +#line 3092 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3084 +#line 3094 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3083 +#line 3093 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3086 +#line 3096 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3088 +#line 3098 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3087 +#line 3097 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3090 +#line 3100 [TRAINER_TAKAO] = { -#line 3091 +#line 3101 .trainerName = _("TAKAO"), -#line 3092 +#line 3102 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3093 +#line 3103 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3095 +#line 3105 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3096 +#line 3106 .doubleBattle = FALSE, -#line 3097 +#line 3107 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3099 +#line 3109 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3101 +#line 3111 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3100 +#line 3110 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3103 +#line 3113 [TRAINER_HITOSHI] = { -#line 3104 +#line 3114 .trainerName = _("HITOSHI"), -#line 3105 +#line 3115 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3106 +#line 3116 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3108 +#line 3118 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3109 +#line 3119 .doubleBattle = FALSE, -#line 3110 +#line 3120 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3112 +#line 3122 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3114 +#line 3124 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 3113 +#line 3123 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3116 +#line 3126 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3118 +#line 3128 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 3117 +#line 3127 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3120 +#line 3130 [TRAINER_KIYO] = { -#line 3121 +#line 3131 .trainerName = _("KIYO"), -#line 3122 +#line 3132 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3123 +#line 3133 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3125 +#line 3135 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3126 +#line 3136 .doubleBattle = FALSE, -#line 3127 +#line 3137 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3129 +#line 3139 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3131 +#line 3141 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3130 +#line 3140 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3133 +#line 3143 [TRAINER_KOICHI] = { -#line 3134 +#line 3144 .trainerName = _("KOICHI"), -#line 3135 +#line 3145 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3136 +#line 3146 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3138 +#line 3148 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3139 +#line 3149 .doubleBattle = FALSE, -#line 3140 +#line 3150 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3142 +#line 3152 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3144 +#line 3154 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3143 +#line 3153 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3146 +#line 3156 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3148 +#line 3158 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3147 +#line 3157 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3150 +#line 3160 [TRAINER_NOB_1] = { -#line 3151 +#line 3161 .trainerName = _("NOB"), -#line 3152 +#line 3162 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3153 +#line 3163 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3155 +#line 3165 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3156 +#line 3166 .doubleBattle = FALSE, -#line 3157 +#line 3167 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3159 +#line 3169 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3161 +#line 3171 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3160 +#line 3170 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3163 +#line 3173 [TRAINER_NOB_2] = { -#line 3164 +#line 3174 .trainerName = _("NOB"), -#line 3165 +#line 3175 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3166 +#line 3176 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3168 +#line 3178 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3169 +#line 3179 .doubleBattle = FALSE, -#line 3170 +#line 3180 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3172 +#line 3182 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3174 +#line 3184 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 3173 +#line 3183 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3176 +#line 3186 [TRAINER_NOB_3] = { -#line 3177 +#line 3187 .trainerName = _("NOB"), -#line 3178 +#line 3188 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3179 +#line 3189 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3181 +#line 3191 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3182 +#line 3192 .doubleBattle = FALSE, -#line 3183 +#line 3193 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3185 +#line 3195 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3187 +#line 3197 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3186 +#line 3196 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3189 +#line 3199 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3191 +#line 3201 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3190 +#line 3200 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3193 +#line 3203 [TRAINER_NOB_4] = { -#line 3194 +#line 3204 .trainerName = _("NOB"), -#line 3195 +#line 3205 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3196 +#line 3206 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3198 +#line 3208 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3199 +#line 3209 .doubleBattle = FALSE, -#line 3200 +#line 3210 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3202 +#line 3212 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3204 +#line 3214 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3203 +#line 3213 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3206 +#line 3216 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3208 +#line 3218 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3207 +#line 3217 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3210 +#line 3220 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3212 +#line 3222 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3211 +#line 3221 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3214 +#line 3224 [TRAINER_NOB_5] = { -#line 3215 +#line 3225 .trainerName = _("NOB"), -#line 3216 +#line 3226 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3217 +#line 3227 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3219 +#line 3229 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3220 +#line 3230 .doubleBattle = FALSE, -#line 3221 +#line 3231 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3223 +#line 3233 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3225 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3224 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3227 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3229 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3228 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3231 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3233 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3232 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { #line 3235 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 3234 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3237 + .species = SPECIES_MACHOKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3239 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 3238 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3241 + .species = SPECIES_MACHOKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3243 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 3242 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3245 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3235 +#line 3245 .heldItem = ITEM_BLACK_BELT, -#line 3237 +#line 3247 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3236 +#line 3246 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3239 +#line 3249 [TRAINER_YUJI] = { -#line 3240 +#line 3250 .trainerName = _("YUJI"), -#line 3241 +#line 3251 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3242 +#line 3252 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3244 +#line 3254 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3245 +#line 3255 .doubleBattle = FALSE, -#line 3246 +#line 3256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3248 +#line 3258 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3250 +#line 3260 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3249 +#line 3259 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3252 +#line 3262 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3254 +#line 3264 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3253 +#line 3263 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3256 +#line 3266 [TRAINER_DAISUKE] = { -#line 3257 +#line 3267 .trainerName = _("DAISUKE"), -#line 3258 +#line 3268 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3259 +#line 3269 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3261 +#line 3271 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3262 +#line 3272 .doubleBattle = FALSE, -#line 3263 +#line 3273 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3265 +#line 3275 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3267 +#line 3277 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3266 +#line 3276 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3269 +#line 3279 [TRAINER_ATSUSHI] = { -#line 3270 +#line 3280 .trainerName = _("ATSUSHI"), -#line 3271 +#line 3281 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3272 +#line 3282 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3274 +#line 3284 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3275 +#line 3285 .doubleBattle = FALSE, -#line 3276 +#line 3286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3278 +#line 3288 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3280 +#line 3290 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3279 +#line 3289 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3282 +#line 3292 [TRAINER_KIRK] = { -#line 3283 +#line 3293 .trainerName = _("KIRK"), -#line 3284 +#line 3294 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3285 +#line 3295 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3287 +#line 3297 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3288 +#line 3298 .doubleBattle = FALSE, -#line 3289 +#line 3299 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3291 +#line 3301 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3293 +#line 3303 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3292 +#line 3302 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3294 +#line 3304 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, @@ -8313,17 +8313,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3299 +#line 3309 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3301 +#line 3311 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3300 +#line 3310 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3302 +#line 3312 MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, @@ -8331,845 +8331,845 @@ F_TRAINER_FEMALE | }, }, }, -#line 3306 +#line 3316 [TRAINER_GRUNT_AQUA_HIDEOUT_7] = { -#line 3307 +#line 3317 .trainerName = _("GRUNT"), -#line 3308 +#line 3318 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3309 +#line 3319 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 3310 +#line 3320 F_TRAINER_FEMALE | -#line 3311 +#line 3321 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3312 +#line 3322 .doubleBattle = FALSE, -#line 3313 +#line 3323 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3315 +#line 3325 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3317 +#line 3327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3316 +#line 3326 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3319 +#line 3329 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3321 +#line 3331 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3320 +#line 3330 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3323 +#line 3333 [TRAINER_GRUNT_AQUA_HIDEOUT_8] = { -#line 3324 +#line 3334 .trainerName = _("GRUNT"), -#line 3325 +#line 3335 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3326 +#line 3336 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 3328 +#line 3338 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3329 +#line 3339 .doubleBattle = FALSE, -#line 3330 +#line 3340 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3332 +#line 3342 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3334 +#line 3344 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3333 +#line 3343 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3336 +#line 3346 [TRAINER_SHAWN] = { -#line 3337 +#line 3347 .trainerName = _("SHAWN"), -#line 3338 +#line 3348 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3339 +#line 3349 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3341 +#line 3351 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3342 +#line 3352 .doubleBattle = FALSE, -#line 3343 +#line 3353 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3345 +#line 3355 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3347 +#line 3357 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3346 +#line 3356 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3349 +#line 3359 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3351 +#line 3361 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3350 +#line 3360 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3353 +#line 3363 [TRAINER_FERNANDO_1] = { -#line 3354 +#line 3364 .trainerName = _("FERNANDO"), -#line 3355 +#line 3365 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3356 +#line 3366 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3358 +#line 3368 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3359 +#line 3369 .doubleBattle = FALSE, -#line 3360 +#line 3370 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3362 +#line 3372 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3364 +#line 3374 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3363 +#line 3373 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3366 +#line 3376 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3368 +#line 3378 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3367 +#line 3377 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3370 +#line 3380 [TRAINER_DALTON_1] = { -#line 3371 +#line 3381 .trainerName = _("DALTON"), -#line 3372 +#line 3382 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3373 +#line 3383 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3375 +#line 3385 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3376 +#line 3386 .doubleBattle = FALSE, -#line 3377 +#line 3387 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3379 +#line 3389 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3381 +#line 3391 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3380 +#line 3390 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3383 +#line 3393 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3385 +#line 3395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3384 +#line 3394 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3387 +#line 3397 [TRAINER_DALTON_2] = { -#line 3388 +#line 3398 .trainerName = _("DALTON"), -#line 3389 +#line 3399 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3390 +#line 3400 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3392 +#line 3402 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3393 +#line 3403 .doubleBattle = FALSE, -#line 3394 +#line 3404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3396 +#line 3406 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3398 +#line 3408 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3397 +#line 3407 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3400 +#line 3410 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3402 +#line 3412 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3401 +#line 3411 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3404 +#line 3414 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3406 +#line 3416 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3405 +#line 3415 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3408 +#line 3418 [TRAINER_DALTON_3] = { -#line 3409 +#line 3419 .trainerName = _("DALTON"), -#line 3410 +#line 3420 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3411 +#line 3421 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3413 +#line 3423 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3414 +#line 3424 .doubleBattle = FALSE, -#line 3415 +#line 3425 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3417 +#line 3427 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3419 +#line 3429 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3418 +#line 3428 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3421 +#line 3431 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3423 +#line 3433 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3422 +#line 3432 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3425 +#line 3435 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3427 +#line 3437 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3426 +#line 3436 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3429 +#line 3439 [TRAINER_DALTON_4] = { -#line 3430 +#line 3440 .trainerName = _("DALTON"), -#line 3431 +#line 3441 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3432 +#line 3442 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3434 +#line 3444 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3435 +#line 3445 .doubleBattle = FALSE, -#line 3436 +#line 3446 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3438 +#line 3448 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3440 +#line 3450 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3439 +#line 3449 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3442 +#line 3452 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3444 +#line 3454 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3443 +#line 3453 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3446 +#line 3456 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3448 +#line 3458 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3447 +#line 3457 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3450 +#line 3460 [TRAINER_DALTON_5] = { -#line 3451 +#line 3461 .trainerName = _("DALTON"), -#line 3452 +#line 3462 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3453 +#line 3463 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3455 +#line 3465 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3456 +#line 3466 .doubleBattle = FALSE, -#line 3457 +#line 3467 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3459 +#line 3469 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3461 +#line 3471 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3460 +#line 3470 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3463 +#line 3473 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3465 +#line 3475 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3464 +#line 3474 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3467 +#line 3477 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3469 +#line 3479 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3468 +#line 3478 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3471 +#line 3481 [TRAINER_COLE] = { -#line 3472 +#line 3482 .trainerName = _("COLE"), -#line 3473 +#line 3483 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3474 +#line 3484 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3476 +#line 3486 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3477 +#line 3487 .doubleBattle = FALSE, -#line 3478 +#line 3488 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3480 +#line 3490 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3482 +#line 3492 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3481 +#line 3491 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3484 +#line 3494 [TRAINER_JEFF] = { -#line 3485 +#line 3495 .trainerName = _("JEFF"), -#line 3486 +#line 3496 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3487 +#line 3497 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3489 +#line 3499 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3490 +#line 3500 .doubleBattle = FALSE, -#line 3491 +#line 3501 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3493 +#line 3503 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3495 +#line 3505 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3494 +#line 3504 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3497 +#line 3507 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3499 +#line 3509 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3498 +#line 3508 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3501 +#line 3511 [TRAINER_AXLE] = { -#line 3502 +#line 3512 .trainerName = _("AXLE"), -#line 3503 +#line 3513 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3504 +#line 3514 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3506 +#line 3516 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3507 +#line 3517 .doubleBattle = FALSE, -#line 3508 +#line 3518 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3510 +#line 3520 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3512 +#line 3522 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3511 +#line 3521 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3514 +#line 3524 [TRAINER_JACE] = { -#line 3515 +#line 3525 .trainerName = _("JACE"), -#line 3516 +#line 3526 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3517 +#line 3527 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3519 +#line 3529 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3520 +#line 3530 .doubleBattle = FALSE, -#line 3521 +#line 3531 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3523 +#line 3533 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3525 +#line 3535 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3524 +#line 3534 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3527 +#line 3537 [TRAINER_KEEGAN] = { -#line 3528 +#line 3538 .trainerName = _("KEEGAN"), -#line 3529 +#line 3539 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3530 +#line 3540 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3532 +#line 3542 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3533 +#line 3543 .doubleBattle = FALSE, -#line 3534 +#line 3544 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3536 +#line 3546 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3538 +#line 3548 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3537 +#line 3547 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3540 +#line 3550 [TRAINER_BERNIE_1] = { -#line 3541 +#line 3551 .trainerName = _("BERNIE"), -#line 3542 +#line 3552 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3543 +#line 3553 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3545 +#line 3555 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3546 +#line 3556 .doubleBattle = FALSE, -#line 3547 +#line 3557 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3549 +#line 3559 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3551 +#line 3561 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3550 +#line 3560 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3553 +#line 3563 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3555 +#line 3565 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3554 +#line 3564 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3557 +#line 3567 [TRAINER_BERNIE_2] = { -#line 3558 +#line 3568 .trainerName = _("BERNIE"), -#line 3559 +#line 3569 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3560 +#line 3570 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3562 +#line 3572 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3563 +#line 3573 .doubleBattle = FALSE, -#line 3564 +#line 3574 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3566 +#line 3576 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3568 +#line 3578 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3567 +#line 3577 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3570 +#line 3580 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3572 +#line 3582 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3571 +#line 3581 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3574 +#line 3584 [TRAINER_BERNIE_3] = { -#line 3575 +#line 3585 .trainerName = _("BERNIE"), -#line 3576 +#line 3586 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3577 +#line 3587 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3579 +#line 3589 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3580 +#line 3590 .doubleBattle = FALSE, -#line 3581 +#line 3591 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3583 +#line 3593 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3585 +#line 3595 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3584 +#line 3594 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3587 +#line 3597 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3589 +#line 3599 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3588 +#line 3598 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3591 +#line 3601 [TRAINER_BERNIE_4] = { -#line 3592 +#line 3602 .trainerName = _("BERNIE"), -#line 3593 +#line 3603 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3594 +#line 3604 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3596 +#line 3606 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3597 +#line 3607 .doubleBattle = FALSE, -#line 3598 +#line 3608 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3600 +#line 3610 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3602 +#line 3612 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3601 +#line 3611 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3604 +#line 3614 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3606 +#line 3616 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3605 +#line 3615 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3608 +#line 3618 [TRAINER_BERNIE_5] = { -#line 3609 +#line 3619 .trainerName = _("BERNIE"), -#line 3610 +#line 3620 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3611 +#line 3621 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3613 +#line 3623 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3614 +#line 3624 .doubleBattle = FALSE, -#line 3615 +#line 3625 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3617 +#line 3627 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3619 +#line 3629 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3618 +#line 3628 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3621 +#line 3631 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3623 +#line 3633 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3622 +#line 3632 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3625 +#line 3635 [TRAINER_DREW] = { -#line 3626 +#line 3636 .trainerName = _("DREW"), -#line 3627 +#line 3637 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3628 +#line 3638 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3630 +#line 3640 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3631 +#line 3641 .doubleBattle = FALSE, -#line 3632 +#line 3642 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3634 +#line 3644 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3636 +#line 3646 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3635 +#line 3645 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3637 +#line 3647 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -9178,37 +9178,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 3642 +#line 3652 [TRAINER_BEAU] = { -#line 3643 +#line 3653 .trainerName = _("BEAU"), -#line 3644 +#line 3654 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3645 +#line 3655 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3647 +#line 3657 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3648 +#line 3658 .doubleBattle = FALSE, -#line 3649 +#line 3659 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3651 +#line 3661 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3653 +#line 3663 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3652 +#line 3662 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3654 +#line 3664 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9216,17 +9216,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3659 +#line 3669 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3661 +#line 3671 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3660 +#line 3670 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3662 +#line 3672 MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, @@ -9234,17 +9234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3667 +#line 3677 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3669 +#line 3679 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3668 +#line 3678 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3670 +#line 3680 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9253,1973 +9253,1973 @@ F_TRAINER_FEMALE | }, }, }, -#line 3675 +#line 3685 [TRAINER_LARRY] = { -#line 3676 +#line 3686 .trainerName = _("LARRY"), -#line 3677 +#line 3687 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3678 +#line 3688 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3680 +#line 3690 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3681 +#line 3691 .doubleBattle = FALSE, -#line 3682 +#line 3692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3684 +#line 3694 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3686 +#line 3696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3685 +#line 3695 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3688 +#line 3698 [TRAINER_SHANE] = { -#line 3689 +#line 3699 .trainerName = _("SHANE"), -#line 3690 +#line 3700 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3691 +#line 3701 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3693 +#line 3703 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3694 +#line 3704 .doubleBattle = FALSE, -#line 3695 +#line 3705 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3697 +#line 3707 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3699 +#line 3709 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3698 +#line 3708 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3701 +#line 3711 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3703 +#line 3713 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3702 +#line 3712 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3705 +#line 3715 [TRAINER_JUSTIN] = { -#line 3706 +#line 3716 .trainerName = _("JUSTIN"), -#line 3707 +#line 3717 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3708 +#line 3718 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3710 +#line 3720 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3711 +#line 3721 .doubleBattle = FALSE, -#line 3712 +#line 3722 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3714 +#line 3724 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3716 +#line 3726 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3715 +#line 3725 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3718 +#line 3728 [TRAINER_ETHAN_1] = { -#line 3719 +#line 3729 .trainerName = _("ETHAN"), -#line 3720 +#line 3730 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3721 +#line 3731 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3723 +#line 3733 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3724 +#line 3734 .doubleBattle = FALSE, -#line 3725 +#line 3735 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3727 +#line 3737 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3729 +#line 3739 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3728 +#line 3738 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3731 +#line 3741 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3733 +#line 3743 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3732 +#line 3742 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3735 +#line 3745 [TRAINER_AUTUMN] = { -#line 3736 +#line 3746 .trainerName = _("AUTUMN"), -#line 3737 +#line 3747 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 3738 +#line 3748 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 3739 +#line 3749 F_TRAINER_FEMALE | -#line 3740 +#line 3750 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 3741 +#line 3751 .doubleBattle = FALSE, -#line 3742 +#line 3752 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3744 +#line 3754 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3746 +#line 3756 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3745 +#line 3755 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3748 +#line 3758 [TRAINER_TRAVIS] = { -#line 3749 +#line 3759 .trainerName = _("TRAVIS"), -#line 3750 +#line 3760 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3751 +#line 3761 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3753 +#line 3763 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3754 +#line 3764 .doubleBattle = FALSE, -#line 3755 +#line 3765 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3757 +#line 3767 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3759 +#line 3769 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3758 +#line 3768 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3761 +#line 3771 [TRAINER_ETHAN_2] = { -#line 3762 +#line 3772 .trainerName = _("ETHAN"), -#line 3763 +#line 3773 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3764 +#line 3774 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3766 +#line 3776 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3767 +#line 3777 .doubleBattle = FALSE, -#line 3768 +#line 3778 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3770 +#line 3780 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3772 +#line 3782 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3771 +#line 3781 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3774 +#line 3784 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3776 +#line 3786 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3775 +#line 3785 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3778 +#line 3788 [TRAINER_ETHAN_3] = { -#line 3779 +#line 3789 .trainerName = _("ETHAN"), -#line 3780 +#line 3790 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3781 +#line 3791 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3783 +#line 3793 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3784 +#line 3794 .doubleBattle = FALSE, -#line 3785 +#line 3795 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3787 +#line 3797 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3789 +#line 3799 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3788 +#line 3798 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3791 +#line 3801 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3793 +#line 3803 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3792 +#line 3802 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3795 +#line 3805 [TRAINER_ETHAN_4] = { -#line 3796 +#line 3806 .trainerName = _("ETHAN"), -#line 3797 +#line 3807 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3798 +#line 3808 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3800 +#line 3810 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3801 +#line 3811 .doubleBattle = FALSE, -#line 3802 +#line 3812 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3804 +#line 3814 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3806 +#line 3816 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3805 +#line 3815 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3808 +#line 3818 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3810 +#line 3820 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3809 +#line 3819 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3812 +#line 3822 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3814 +#line 3824 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3813 +#line 3823 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3816 +#line 3826 [TRAINER_ETHAN_5] = { -#line 3817 +#line 3827 .trainerName = _("ETHAN"), -#line 3818 +#line 3828 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3819 +#line 3829 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3821 +#line 3831 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3822 +#line 3832 .doubleBattle = FALSE, -#line 3823 +#line 3833 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3825 +#line 3835 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3827 +#line 3837 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3826 +#line 3836 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3829 +#line 3839 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3831 +#line 3841 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3830 +#line 3840 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3833 +#line 3843 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3835 +#line 3845 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3834 +#line 3844 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3837 +#line 3847 [TRAINER_BRENT] = { -#line 3838 +#line 3848 .trainerName = _("BRENT"), -#line 3839 +#line 3849 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3840 +#line 3850 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3842 +#line 3852 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3843 +#line 3853 .doubleBattle = FALSE, -#line 3844 +#line 3854 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3846 +#line 3856 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3848 +#line 3858 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3847 +#line 3857 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3850 +#line 3860 [TRAINER_DONALD] = { -#line 3851 +#line 3861 .trainerName = _("DONALD"), -#line 3852 +#line 3862 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3853 +#line 3863 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3855 +#line 3865 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3856 +#line 3866 .doubleBattle = FALSE, -#line 3857 +#line 3867 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3859 +#line 3869 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3861 +#line 3871 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3860 +#line 3870 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3863 +#line 3873 .species = SPECIES_SILCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3865 +#line 3875 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3864 +#line 3874 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3867 +#line 3877 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3869 +#line 3879 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3868 +#line 3878 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3871 +#line 3881 [TRAINER_TAYLOR] = { -#line 3872 +#line 3882 .trainerName = _("TAYLOR"), -#line 3873 +#line 3883 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3874 +#line 3884 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3876 +#line 3886 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3877 +#line 3887 .doubleBattle = FALSE, -#line 3878 +#line 3888 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3880 +#line 3890 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3882 +#line 3892 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3881 +#line 3891 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3884 +#line 3894 .species = SPECIES_CASCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3886 +#line 3896 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3885 +#line 3895 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3888 +#line 3898 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3890 +#line 3900 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3889 +#line 3899 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3892 +#line 3902 [TRAINER_JEFFREY_1] = { -#line 3893 +#line 3903 .trainerName = _("JEFFREY"), -#line 3894 +#line 3904 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3895 +#line 3905 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3897 +#line 3907 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3898 +#line 3908 .doubleBattle = FALSE, -#line 3899 +#line 3909 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3901 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3903 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3902 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3905 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3907 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3906 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3909 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, #line 3911 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3913 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3910 +#line 3912 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3915 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3917 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3916 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3919 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3921 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3920 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3913 +#line 3923 [TRAINER_DEREK] = { -#line 3914 +#line 3924 .trainerName = _("DEREK"), -#line 3915 +#line 3925 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3916 +#line 3926 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3918 +#line 3928 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3919 +#line 3929 .doubleBattle = FALSE, -#line 3920 +#line 3930 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3922 +#line 3932 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3924 +#line 3934 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3923 +#line 3933 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3926 +#line 3936 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3928 +#line 3938 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3927 +#line 3937 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3930 +#line 3940 [TRAINER_JEFFREY_2] = { -#line 3931 +#line 3941 .trainerName = _("JEFFREY"), -#line 3932 +#line 3942 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3933 +#line 3943 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3935 +#line 3945 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3936 +#line 3946 .doubleBattle = FALSE, -#line 3937 +#line 3947 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3939 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3941 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3940 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3943 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3945 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3944 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3947 - .species = SPECIES_SURSKIT, - .gender = TRAINER_MON_RANDOM_GENDER, #line 3949 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3951 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3948 +#line 3950 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3953 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3955 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 3954 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3957 + .species = SPECIES_SURSKIT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3959 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 3958 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3951 +#line 3961 [TRAINER_JEFFREY_3] = { -#line 3952 +#line 3962 .trainerName = _("JEFFREY"), -#line 3953 +#line 3963 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3954 +#line 3964 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3956 +#line 3966 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3957 +#line 3967 .doubleBattle = FALSE, -#line 3958 +#line 3968 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3960 +#line 3970 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3962 +#line 3972 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3961 +#line 3971 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3964 +#line 3974 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3966 +#line 3976 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3965 +#line 3975 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3968 +#line 3978 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3970 +#line 3980 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3969 +#line 3979 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3972 +#line 3982 [TRAINER_JEFFREY_4] = { -#line 3973 +#line 3983 .trainerName = _("JEFFREY"), -#line 3974 +#line 3984 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3975 +#line 3985 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3977 +#line 3987 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3978 +#line 3988 .doubleBattle = FALSE, -#line 3979 +#line 3989 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3981 +#line 3991 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3983 +#line 3993 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3982 +#line 3992 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3985 +#line 3995 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3987 +#line 3997 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3986 +#line 3996 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3989 +#line 3999 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3991 +#line 4001 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3990 +#line 4000 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3993 +#line 4003 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3995 +#line 4005 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3994 +#line 4004 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3997 +#line 4007 [TRAINER_JEFFREY_5] = { -#line 3998 +#line 4008 .trainerName = _("JEFFREY"), -#line 3999 +#line 4009 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 4000 +#line 4010 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 4002 +#line 4012 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 4003 +#line 4013 .doubleBattle = FALSE, -#line 4004 +#line 4014 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4006 +#line 4016 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4008 +#line 4018 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4007 +#line 4017 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4010 +#line 4020 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4012 +#line 4022 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4011 +#line 4021 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4014 +#line 4024 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4016 +#line 4026 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4015 +#line 4025 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4018 +#line 4028 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4018 +#line 4028 .heldItem = ITEM_SILVER_POWDER, -#line 4020 +#line 4030 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4019 +#line 4029 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4022 +#line 4032 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4024 +#line 4034 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4023 +#line 4033 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4026 +#line 4036 [TRAINER_EDWARD] = { -#line 4027 +#line 4037 .trainerName = _("EDWARD"), -#line 4028 +#line 4038 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4029 +#line 4039 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4031 +#line 4041 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4032 +#line 4042 .doubleBattle = FALSE, -#line 4033 +#line 4043 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4035 +#line 4045 .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4037 +#line 4047 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4036 +#line 4046 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4038 +#line 4048 MOVE_HIDDEN_POWER, }, }, }, }, -#line 4040 +#line 4050 [TRAINER_PRESTON] = { -#line 4041 +#line 4051 .trainerName = _("PRESTON"), -#line 4042 +#line 4052 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4043 +#line 4053 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4045 +#line 4055 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4046 +#line 4056 .doubleBattle = FALSE, -#line 4047 +#line 4057 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4049 +#line 4059 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4051 +#line 4061 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4050 +#line 4060 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4053 +#line 4063 [TRAINER_VIRGIL] = { -#line 4054 +#line 4064 .trainerName = _("VIRGIL"), -#line 4055 +#line 4065 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4056 +#line 4066 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4058 +#line 4068 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4059 +#line 4069 .doubleBattle = FALSE, -#line 4060 +#line 4070 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4062 +#line 4072 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4064 +#line 4074 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4063 +#line 4073 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4066 +#line 4076 [TRAINER_BLAKE] = { -#line 4067 +#line 4077 .trainerName = _("BLAKE"), -#line 4068 +#line 4078 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4069 +#line 4079 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4071 +#line 4081 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4072 +#line 4082 .doubleBattle = FALSE, -#line 4073 +#line 4083 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4075 +#line 4085 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4077 +#line 4087 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4076 +#line 4086 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4079 +#line 4089 [TRAINER_WILLIAM] = { -#line 4080 +#line 4090 .trainerName = _("WILLIAM"), -#line 4081 +#line 4091 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4082 +#line 4092 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4084 +#line 4094 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4085 +#line 4095 .doubleBattle = FALSE, -#line 4086 +#line 4096 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4088 +#line 4098 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4090 +#line 4100 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4089 +#line 4099 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4092 +#line 4102 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4094 +#line 4104 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4093 +#line 4103 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4096 +#line 4106 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4098 +#line 4108 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4097 +#line 4107 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4100 +#line 4110 [TRAINER_JOSHUA] = { -#line 4101 +#line 4111 .trainerName = _("JOSHUA"), -#line 4102 +#line 4112 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4103 +#line 4113 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4105 +#line 4115 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4106 +#line 4116 .doubleBattle = FALSE, -#line 4107 +#line 4117 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4109 +#line 4119 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4111 +#line 4121 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4110 +#line 4120 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4113 +#line 4123 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4115 +#line 4125 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4114 +#line 4124 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4117 +#line 4127 [TRAINER_CAMERON_1] = { -#line 4118 +#line 4128 .trainerName = _("CAMERON"), -#line 4119 +#line 4129 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4120 +#line 4130 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4122 +#line 4132 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4123 +#line 4133 .doubleBattle = FALSE, -#line 4124 +#line 4134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4126 +#line 4136 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4128 +#line 4138 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4127 +#line 4137 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4130 +#line 4140 [TRAINER_CAMERON_2] = { -#line 4131 +#line 4141 .trainerName = _("CAMERON"), -#line 4132 +#line 4142 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4133 +#line 4143 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4135 +#line 4145 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4136 +#line 4146 .doubleBattle = FALSE, -#line 4137 +#line 4147 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4139 +#line 4149 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4141 +#line 4151 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4140 +#line 4150 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4143 +#line 4153 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4145 +#line 4155 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4144 +#line 4154 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4147 +#line 4157 [TRAINER_CAMERON_3] = { -#line 4148 +#line 4158 .trainerName = _("CAMERON"), -#line 4149 +#line 4159 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4150 +#line 4160 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4152 +#line 4162 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4153 +#line 4163 .doubleBattle = FALSE, -#line 4154 +#line 4164 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4156 +#line 4166 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4158 +#line 4168 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4157 +#line 4167 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4160 +#line 4170 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4162 +#line 4172 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4161 +#line 4171 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4164 +#line 4174 [TRAINER_CAMERON_4] = { -#line 4165 +#line 4175 .trainerName = _("CAMERON"), -#line 4166 +#line 4176 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4167 +#line 4177 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4169 +#line 4179 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4170 +#line 4180 .doubleBattle = FALSE, -#line 4171 +#line 4181 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4173 +#line 4183 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4175 +#line 4185 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4174 +#line 4184 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4177 +#line 4187 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4179 +#line 4189 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4178 +#line 4188 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4181 +#line 4191 [TRAINER_CAMERON_5] = { -#line 4182 +#line 4192 .trainerName = _("CAMERON"), -#line 4183 +#line 4193 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4184 +#line 4194 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4186 +#line 4196 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4187 +#line 4197 .doubleBattle = FALSE, -#line 4188 +#line 4198 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4190 +#line 4200 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4192 +#line 4202 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4191 +#line 4201 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4194 +#line 4204 .species = SPECIES_ALAKAZAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4196 +#line 4206 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4195 +#line 4205 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4198 +#line 4208 [TRAINER_JACLYN] = { -#line 4199 +#line 4209 .trainerName = _("JACLYN"), -#line 4200 +#line 4210 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4201 +#line 4211 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4202 +#line 4212 F_TRAINER_FEMALE | -#line 4203 +#line 4213 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4204 +#line 4214 .doubleBattle = FALSE, -#line 4205 +#line 4215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4207 +#line 4217 .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4209 +#line 4219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4208 +#line 4218 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4210 +#line 4220 MOVE_HIDDEN_POWER, }, }, }, }, -#line 4212 +#line 4222 [TRAINER_HANNAH] = { -#line 4213 +#line 4223 .trainerName = _("HANNAH"), -#line 4214 +#line 4224 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4215 +#line 4225 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4216 +#line 4226 F_TRAINER_FEMALE | -#line 4217 +#line 4227 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4218 +#line 4228 .doubleBattle = FALSE, -#line 4219 +#line 4229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4221 +#line 4231 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4223 +#line 4233 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4222 +#line 4232 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4225 +#line 4235 [TRAINER_SAMANTHA] = { -#line 4226 +#line 4236 .trainerName = _("SAMANTHA"), -#line 4227 +#line 4237 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4228 +#line 4238 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4229 +#line 4239 F_TRAINER_FEMALE | -#line 4230 +#line 4240 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4231 +#line 4241 .doubleBattle = FALSE, -#line 4232 +#line 4242 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4234 +#line 4244 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4236 +#line 4246 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4235 +#line 4245 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4238 +#line 4248 [TRAINER_MAURA] = { -#line 4239 +#line 4249 .trainerName = _("MAURA"), -#line 4240 +#line 4250 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4241 +#line 4251 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4242 +#line 4252 F_TRAINER_FEMALE | -#line 4243 +#line 4253 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4244 +#line 4254 .doubleBattle = FALSE, -#line 4245 +#line 4255 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4247 +#line 4257 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4249 +#line 4259 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4248 +#line 4258 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4251 +#line 4261 [TRAINER_KAYLA] = { -#line 4252 +#line 4262 .trainerName = _("KAYLA"), -#line 4253 +#line 4263 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4254 +#line 4264 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4255 +#line 4265 F_TRAINER_FEMALE | -#line 4256 +#line 4266 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4257 +#line 4267 .doubleBattle = FALSE, -#line 4258 +#line 4268 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4260 +#line 4270 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4262 +#line 4272 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4261 +#line 4271 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4264 +#line 4274 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4266 +#line 4276 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4265 +#line 4275 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4268 +#line 4278 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4270 +#line 4280 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4269 +#line 4279 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4272 +#line 4282 [TRAINER_ALEXIS] = { -#line 4273 +#line 4283 .trainerName = _("ALEXIS"), -#line 4274 +#line 4284 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4275 +#line 4285 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4276 +#line 4286 F_TRAINER_FEMALE | -#line 4277 +#line 4287 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4278 +#line 4288 .doubleBattle = FALSE, -#line 4279 +#line 4289 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4281 +#line 4291 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4283 +#line 4293 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4282 +#line 4292 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4285 +#line 4295 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4287 +#line 4297 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4286 +#line 4296 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4289 +#line 4299 [TRAINER_JACKI_1] = { -#line 4290 +#line 4300 .trainerName = _("JACKI"), -#line 4291 +#line 4301 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4292 +#line 4302 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4293 +#line 4303 F_TRAINER_FEMALE | -#line 4294 +#line 4304 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4295 +#line 4305 .doubleBattle = FALSE, -#line 4296 +#line 4306 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4298 +#line 4308 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4300 +#line 4310 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4299 +#line 4309 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4302 +#line 4312 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4304 +#line 4314 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4303 +#line 4313 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4306 +#line 4316 [TRAINER_JACKI_2] = { -#line 4307 +#line 4317 .trainerName = _("JACKI"), -#line 4308 +#line 4318 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4309 +#line 4319 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4310 +#line 4320 F_TRAINER_FEMALE | -#line 4311 +#line 4321 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4312 +#line 4322 .doubleBattle = FALSE, -#line 4313 +#line 4323 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4315 +#line 4325 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4317 +#line 4327 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4316 +#line 4326 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4319 +#line 4329 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4321 +#line 4331 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4320 +#line 4330 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4323 +#line 4333 [TRAINER_JACKI_3] = { -#line 4324 +#line 4334 .trainerName = _("JACKI"), -#line 4325 +#line 4335 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4326 +#line 4336 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4327 +#line 4337 F_TRAINER_FEMALE | -#line 4328 +#line 4338 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4329 +#line 4339 .doubleBattle = FALSE, -#line 4330 +#line 4340 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4332 +#line 4342 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4334 +#line 4344 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4333 +#line 4343 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4336 +#line 4346 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4338 +#line 4348 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4337 +#line 4347 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4340 +#line 4350 [TRAINER_JACKI_4] = { -#line 4341 +#line 4351 .trainerName = _("JACKI"), -#line 4342 +#line 4352 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4343 +#line 4353 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4344 +#line 4354 F_TRAINER_FEMALE | -#line 4345 +#line 4355 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4346 +#line 4356 .doubleBattle = FALSE, -#line 4347 +#line 4357 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4349 +#line 4359 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4351 +#line 4361 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4350 +#line 4360 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4353 +#line 4363 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4355 +#line 4365 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4354 +#line 4364 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4357 +#line 4367 [TRAINER_JACKI_5] = { -#line 4358 +#line 4368 .trainerName = _("JACKI"), -#line 4359 +#line 4369 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4360 +#line 4370 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4361 +#line 4371 F_TRAINER_FEMALE | -#line 4362 +#line 4372 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4363 +#line 4373 .doubleBattle = FALSE, -#line 4364 +#line 4374 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4366 +#line 4376 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4368 +#line 4378 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4367 +#line 4377 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4370 +#line 4380 .species = SPECIES_ALAKAZAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4372 +#line 4382 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4371 +#line 4381 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4374 +#line 4384 [TRAINER_WALTER_1] = { -#line 4375 +#line 4385 .trainerName = _("WALTER"), -#line 4376 +#line 4386 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4377 +#line 4387 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4379 +#line 4389 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4380 +#line 4390 .doubleBattle = FALSE, -#line 4381 +#line 4391 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4383 +#line 4393 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4385 +#line 4395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4384 +#line 4394 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4387 +#line 4397 [TRAINER_MICAH] = { -#line 4388 +#line 4398 .trainerName = _("MICAH"), -#line 4389 +#line 4399 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4390 +#line 4400 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4392 +#line 4402 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4393 +#line 4403 .doubleBattle = FALSE, -#line 4394 +#line 4404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4396 +#line 4406 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4398 +#line 4408 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4397 +#line 4407 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4400 +#line 4410 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4402 +#line 4412 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4401 +#line 4411 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4404 +#line 4414 [TRAINER_THOMAS] = { -#line 4405 +#line 4415 .trainerName = _("THOMAS"), -#line 4406 +#line 4416 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4407 +#line 4417 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4409 +#line 4419 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4410 +#line 4420 .doubleBattle = FALSE, -#line 4411 +#line 4421 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4413 +#line 4423 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4415 +#line 4425 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4414 +#line 4424 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4417 +#line 4427 [TRAINER_WALTER_2] = { -#line 4418 +#line 4428 .trainerName = _("WALTER"), -#line 4419 +#line 4429 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4420 +#line 4430 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4422 +#line 4432 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4423 +#line 4433 .doubleBattle = FALSE, -#line 4424 +#line 4434 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4426 +#line 4436 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4428 +#line 4438 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4427 +#line 4437 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4430 +#line 4440 [TRAINER_WALTER_3] = { -#line 4431 +#line 4441 .trainerName = _("WALTER"), -#line 4432 +#line 4442 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4433 +#line 4443 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4435 +#line 4445 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4436 +#line 4446 .doubleBattle = FALSE, -#line 4437 +#line 4447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4439 +#line 4449 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4441 +#line 4451 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4440 +#line 4450 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4442 +#line 4452 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11227,17 +11227,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4447 +#line 4457 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4449 +#line 4459 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4448 +#line 4458 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4450 +#line 4460 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11246,37 +11246,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4455 +#line 4465 [TRAINER_WALTER_4] = { -#line 4456 +#line 4466 .trainerName = _("WALTER"), -#line 4457 +#line 4467 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4458 +#line 4468 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4460 +#line 4470 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4461 +#line 4471 .doubleBattle = FALSE, -#line 4462 +#line 4472 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4464 +#line 4474 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4466 +#line 4476 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4465 +#line 4475 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4467 +#line 4477 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11284,17 +11284,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4472 +#line 4482 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4474 +#line 4484 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4473 +#line 4483 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4475 +#line 4485 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11302,37 +11302,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4479 +#line 4489 [TRAINER_WALTER_5] = { -#line 4480 +#line 4490 .trainerName = _("WALTER"), -#line 4481 +#line 4491 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4482 +#line 4492 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4484 +#line 4494 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4485 +#line 4495 .doubleBattle = FALSE, -#line 4486 +#line 4496 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4488 +#line 4498 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4490 +#line 4500 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4489 +#line 4499 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4491 +#line 4501 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11340,17 +11340,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4496 +#line 4506 .species = SPECIES_GOLDUCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4498 +#line 4508 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4497 +#line 4507 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4499 +#line 4509 MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, @@ -11358,17 +11358,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4504 +#line 4514 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4506 +#line 4516 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4505 +#line 4515 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4507 +#line 4517 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11377,42 +11377,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4512 +#line 4522 [TRAINER_SIDNEY] = { -#line 4513 +#line 4523 .trainerName = _("SIDNEY"), -#line 4514 +#line 4524 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4515 +#line 4525 .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY, .encounterMusic_gender = -#line 4517 +#line 4527 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4518 +#line 4528 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4519 +#line 4529 .doubleBattle = FALSE, -#line 4520 +#line 4530 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, -#line 4521 +#line 4531 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PURPLE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4523 +#line 4533 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4525 +#line 4535 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4524 +#line 4534 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4526 +#line 4536 MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, @@ -11420,17 +11420,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4531 +#line 4541 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4533 +#line 4543 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4532 +#line 4542 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4534 +#line 4544 MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, @@ -11438,17 +11438,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4539 +#line 4549 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4541 +#line 4551 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4540 +#line 4550 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4542 +#line 4552 MOVE_LEECH_SEED, MOVE_FEINT_ATTACK, MOVE_NEEDLE_ARM, @@ -11456,17 +11456,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4547 +#line 4557 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4549 +#line 4559 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4548 +#line 4558 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4550 +#line 4560 MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, @@ -11474,19 +11474,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4555 +#line 4565 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4555 +#line 4565 .heldItem = ITEM_SITRUS_BERRY, -#line 4557 +#line 4567 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4556 +#line 4566 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4558 +#line 4568 MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, @@ -11495,44 +11495,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4563 +#line 4573 [TRAINER_PHOEBE] = { -#line 4564 +#line 4574 .trainerName = _("PHOEBE"), -#line 4565 +#line 4575 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4566 +#line 4576 .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, .encounterMusic_gender = -#line 4567 +#line 4577 F_TRAINER_FEMALE | -#line 4568 +#line 4578 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4569 +#line 4579 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4570 +#line 4580 .doubleBattle = FALSE, -#line 4571 +#line 4581 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4572 +#line 4582 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_GREEN, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4574 +#line 4584 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4576 +#line 4586 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4575 +#line 4585 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4577 +#line 4587 MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, @@ -11540,17 +11540,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4582 +#line 4592 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4584 +#line 4594 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4583 +#line 4593 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4585 +#line 4595 MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, @@ -11558,17 +11558,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4590 +#line 4600 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4592 +#line 4602 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4591 +#line 4601 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4593 +#line 4603 MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, @@ -11576,17 +11576,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4598 +#line 4608 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4600 +#line 4610 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4599 +#line 4609 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4601 +#line 4611 MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -11594,19 +11594,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4606 +#line 4616 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4606 +#line 4616 .heldItem = ITEM_SITRUS_BERRY, -#line 4608 +#line 4618 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4607 +#line 4617 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4609 +#line 4619 MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -11615,44 +11615,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4614 +#line 4624 [TRAINER_GLACIA] = { -#line 4615 +#line 4625 .trainerName = _("GLACIA"), -#line 4616 +#line 4626 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4617 +#line 4627 .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, .encounterMusic_gender = -#line 4618 +#line 4628 F_TRAINER_FEMALE | -#line 4619 +#line 4629 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4620 +#line 4630 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4621 +#line 4631 .doubleBattle = FALSE, -#line 4622 +#line 4632 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4623 +#line 4633 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PINK, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4625 +#line 4635 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4627 +#line 4637 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4626 +#line 4636 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4628 +#line 4638 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, @@ -11660,17 +11660,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4633 +#line 4643 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4635 +#line 4645 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4634 +#line 4644 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4636 +#line 4646 MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, @@ -11678,17 +11678,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4641 +#line 4651 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4643 +#line 4653 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4642 +#line 4652 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4644 +#line 4654 MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, @@ -11696,17 +11696,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4649 +#line 4659 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4651 +#line 4661 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4650 +#line 4660 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4652 +#line 4662 MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, @@ -11714,19 +11714,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4657 +#line 4667 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4657 +#line 4667 .heldItem = ITEM_SITRUS_BERRY, -#line 4659 +#line 4669 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4658 +#line 4668 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4660 +#line 4670 MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, @@ -11735,42 +11735,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4665 +#line 4675 [TRAINER_DRAKE] = { -#line 4666 +#line 4676 .trainerName = _("DRAKE"), -#line 4667 +#line 4677 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4668 +#line 4678 .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE, .encounterMusic_gender = -#line 4670 +#line 4680 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4671 +#line 4681 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4672 +#line 4682 .doubleBattle = FALSE, -#line 4673 +#line 4683 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4674 +#line 4684 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_BLUE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4676 +#line 4686 .species = SPECIES_SHELGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4678 +#line 4688 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4677 +#line 4687 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4679 +#line 4689 MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, @@ -11778,17 +11778,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4684 +#line 4694 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4686 +#line 4696 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4685 +#line 4695 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4687 +#line 4697 MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -11796,17 +11796,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4692 +#line 4702 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4694 +#line 4704 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4693 +#line 4703 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4695 +#line 4705 MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, @@ -11814,17 +11814,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4700 +#line 4710 .species = SPECIES_FLYGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4702 +#line 4712 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4701 +#line 4711 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4703 +#line 4713 MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, @@ -11832,19 +11832,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4708 +#line 4718 .species = SPECIES_SALAMENCE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4708 +#line 4718 .heldItem = ITEM_SITRUS_BERRY, -#line 4710 +#line 4720 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4709 +#line 4719 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4711 +#line 4721 MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, @@ -11853,59 +11853,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4716 +#line 4726 [TRAINER_ROXANNE_1] = { -#line 4717 +#line 4727 .trainerName = _("ROXANNE"), -#line 4718 +#line 4728 .trainerClass = TRAINER_CLASS_LEADER, -#line 4719 +#line 4729 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 4720 +#line 4730 F_TRAINER_FEMALE | -#line 4721 +#line 4731 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4722 +#line 4732 .items = { ITEM_POTION, ITEM_POTION }, -#line 4723 +#line 4733 .doubleBattle = FALSE, -#line 4724 +#line 4734 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4726 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4728 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4727 - .lvl = 12, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 4729 - MOVE_TACKLE, - MOVE_DEFENSE_CURL, - MOVE_ROCK_THROW, - MOVE_ROCK_TOMB, - }, - }, - { -#line 4734 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, #line 4736 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4738 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4735 +#line 4737 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4737 +#line 4739 MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, @@ -11913,19 +11895,37 @@ F_TRAINER_FEMALE | }, }, { -#line 4742 +#line 4744 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4746 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 4745 + .lvl = 12, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 4747 + MOVE_TACKLE, + MOVE_DEFENSE_CURL, + MOVE_ROCK_THROW, + MOVE_ROCK_TOMB, + }, + }, + { +#line 4752 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4742 +#line 4752 .heldItem = ITEM_ORAN_BERRY, -#line 4744 +#line 4754 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4743 +#line 4753 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4745 +#line 4755 MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, @@ -11934,39 +11934,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4750 +#line 4760 [TRAINER_BRAWLY_1] = { -#line 4751 +#line 4761 .trainerName = _("BRAWLY"), -#line 4752 +#line 4762 .trainerClass = TRAINER_CLASS_LEADER, -#line 4753 +#line 4763 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 4755 +#line 4765 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4756 +#line 4766 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4757 +#line 4767 .doubleBattle = FALSE, -#line 4758 +#line 4768 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4760 +#line 4770 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4762 +#line 4772 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4761 +#line 4771 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4763 +#line 4773 MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, @@ -11974,17 +11974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4768 +#line 4778 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4770 +#line 4780 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4769 +#line 4779 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4771 +#line 4781 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -11992,19 +11992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4776 +#line 4786 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4776 +#line 4786 .heldItem = ITEM_SITRUS_BERRY, -#line 4778 +#line 4788 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4777 +#line 4787 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4779 +#line 4789 MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, @@ -12013,39 +12013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4784 +#line 4794 [TRAINER_WATTSON_1] = { -#line 4785 +#line 4795 .trainerName = _("WATTSON"), -#line 4786 +#line 4796 .trainerClass = TRAINER_CLASS_LEADER, -#line 4787 +#line 4797 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 4789 +#line 4799 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4790 +#line 4800 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4791 +#line 4801 .doubleBattle = FALSE, -#line 4792 +#line 4802 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4794 +#line 4804 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4796 +#line 4806 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4795 +#line 4805 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4797 +#line 4807 MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, @@ -12053,17 +12053,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4802 +#line 4812 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4804 +#line 4814 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4803 +#line 4813 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4805 +#line 4815 MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, @@ -12071,17 +12071,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4810 +#line 4820 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4812 +#line 4822 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4811 +#line 4821 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4813 +#line 4823 MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, @@ -12089,19 +12089,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4818 +#line 4828 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4818 +#line 4828 .heldItem = ITEM_SITRUS_BERRY, -#line 4820 +#line 4830 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4819 +#line 4829 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4821 +#line 4831 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, @@ -12110,41 +12110,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4826 +#line 4836 [TRAINER_FLANNERY_1] = { -#line 4827 +#line 4837 .trainerName = _("FLANNERY"), -#line 4828 +#line 4838 .trainerClass = TRAINER_CLASS_LEADER, -#line 4829 +#line 4839 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 4830 +#line 4840 F_TRAINER_FEMALE | -#line 4831 +#line 4841 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4832 +#line 4842 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4833 +#line 4843 .doubleBattle = FALSE, -#line 4834 +#line 4844 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4836 +#line 4846 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4838 +#line 4848 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4837 +#line 4847 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4839 +#line 4849 MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -12152,17 +12152,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4844 +#line 4854 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4846 +#line 4856 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4845 +#line 4855 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4847 +#line 4857 MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, @@ -12170,17 +12170,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4852 +#line 4862 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4854 +#line 4864 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4853 +#line 4863 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4855 +#line 4865 MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, @@ -12188,19 +12188,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4860 +#line 4870 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4860 +#line 4870 .heldItem = ITEM_WHITE_HERB, -#line 4862 +#line 4872 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4861 +#line 4871 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4863 +#line 4873 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, @@ -12209,39 +12209,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4868 +#line 4878 [TRAINER_NORMAN_1] = { -#line 4869 +#line 4879 .trainerName = _("NORMAN"), -#line 4870 +#line 4880 .trainerClass = TRAINER_CLASS_LEADER, -#line 4871 +#line 4881 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 4873 +#line 4883 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4874 +#line 4884 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4875 +#line 4885 .doubleBattle = FALSE, -#line 4876 +#line 4886 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4878 +#line 4888 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4880 +#line 4890 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4879 +#line 4889 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4881 +#line 4891 MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, @@ -12249,17 +12249,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4886 +#line 4896 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4888 +#line 4898 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4887 +#line 4897 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4889 +#line 4899 MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, @@ -12267,17 +12267,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4894 +#line 4904 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4896 +#line 4906 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4895 +#line 4905 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4897 +#line 4907 MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, @@ -12285,19 +12285,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4902 +#line 4912 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4902 +#line 4912 .heldItem = ITEM_SITRUS_BERRY, -#line 4904 +#line 4914 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4903 +#line 4913 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4905 +#line 4915 MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, @@ -12306,41 +12306,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4910 +#line 4920 [TRAINER_WINONA_1] = { -#line 4911 +#line 4921 .trainerName = _("WINONA"), -#line 4912 +#line 4922 .trainerClass = TRAINER_CLASS_LEADER, -#line 4913 +#line 4923 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 4914 +#line 4924 F_TRAINER_FEMALE | -#line 4915 +#line 4925 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4916 +#line 4926 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4917 +#line 4927 .doubleBattle = FALSE, -#line 4918 +#line 4928 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4920 +#line 4930 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4922 +#line 4932 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4921 +#line 4931 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4923 +#line 4933 MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, @@ -12348,17 +12348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4928 +#line 4938 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4930 +#line 4940 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4929 +#line 4939 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4931 +#line 4941 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -12366,17 +12366,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4936 +#line 4946 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4938 +#line 4948 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4937 +#line 4947 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4939 +#line 4949 MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -12384,17 +12384,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4944 +#line 4954 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4946 +#line 4956 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4945 +#line 4955 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4947 +#line 4957 MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, @@ -12402,19 +12402,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4952 +#line 4962 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4952 +#line 4962 .heldItem = ITEM_ORAN_BERRY, -#line 4954 +#line 4964 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4953 +#line 4963 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4955 +#line 4965 MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -12423,39 +12423,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4960 +#line 4970 [TRAINER_TATE_AND_LIZA_1] = { -#line 4961 +#line 4971 .trainerName = _("TATE&LIZA"), -#line 4962 +#line 4972 .trainerClass = TRAINER_CLASS_LEADER, -#line 4963 +#line 4973 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 4965 +#line 4975 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4966 +#line 4976 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4967 +#line 4977 .doubleBattle = TRUE, -#line 4968 +#line 4978 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4970 +#line 4980 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4972 +#line 4982 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4971 +#line 4981 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4973 +#line 4983 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -12463,17 +12463,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4978 +#line 4988 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4980 +#line 4990 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4979 +#line 4989 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4981 +#line 4991 MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, @@ -12481,19 +12481,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4986 +#line 4996 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4986 +#line 4996 .heldItem = ITEM_SITRUS_BERRY, -#line 4988 +#line 4998 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4987 +#line 4997 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4989 +#line 4999 MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, @@ -12501,19 +12501,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4994 +#line 5004 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4994 +#line 5004 .heldItem = ITEM_SITRUS_BERRY, -#line 4996 +#line 5006 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4995 +#line 5005 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4997 +#line 5007 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -12522,39 +12522,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5002 +#line 5012 [TRAINER_JUAN_1] = { -#line 5003 +#line 5013 .trainerName = _("JUAN"), -#line 5004 +#line 5014 .trainerClass = TRAINER_CLASS_LEADER, -#line 5005 +#line 5015 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 5007 +#line 5017 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5008 +#line 5018 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 5009 +#line 5019 .doubleBattle = FALSE, -#line 5010 +#line 5020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 5012 +#line 5022 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5014 +#line 5024 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5013 +#line 5023 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5015 +#line 5025 MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, @@ -12562,17 +12562,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5020 +#line 5030 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5022 +#line 5032 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5021 +#line 5031 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5023 +#line 5033 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, @@ -12580,17 +12580,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5028 +#line 5038 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5030 +#line 5040 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5029 +#line 5039 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5031 +#line 5041 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, @@ -12598,17 +12598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5036 +#line 5046 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5038 +#line 5048 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5037 +#line 5047 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5039 +#line 5049 MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -12616,19 +12616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5044 +#line 5054 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5044 +#line 5054 .heldItem = ITEM_CHESTO_BERRY, -#line 5046 +#line 5056 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 5045 +#line 5055 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5047 +#line 5057 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -12637,597 +12637,597 @@ F_TRAINER_FEMALE | }, }, }, -#line 5052 +#line 5062 [TRAINER_JERRY_1] = { -#line 5053 +#line 5063 .trainerName = _("JERRY"), -#line 5054 +#line 5064 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5055 +#line 5065 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5057 +#line 5067 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5058 +#line 5068 .doubleBattle = FALSE, -#line 5059 +#line 5069 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5061 +#line 5071 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5063 +#line 5073 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5062 +#line 5072 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5065 +#line 5075 [TRAINER_TED] = { -#line 5066 +#line 5076 .trainerName = _("TED"), -#line 5067 +#line 5077 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5068 +#line 5078 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5070 +#line 5080 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5071 +#line 5081 .doubleBattle = FALSE, -#line 5072 +#line 5082 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5074 +#line 5084 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5076 +#line 5086 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5075 +#line 5085 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5078 +#line 5088 [TRAINER_PAUL] = { -#line 5079 +#line 5089 .trainerName = _("PAUL"), -#line 5080 +#line 5090 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5081 +#line 5091 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5083 +#line 5093 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5084 +#line 5094 .doubleBattle = FALSE, -#line 5085 +#line 5095 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5087 +#line 5097 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5089 +#line 5099 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5088 +#line 5098 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5091 +#line 5101 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5093 +#line 5103 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5092 +#line 5102 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5095 +#line 5105 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5097 +#line 5107 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5096 +#line 5106 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5099 +#line 5109 [TRAINER_JERRY_2] = { -#line 5100 +#line 5110 .trainerName = _("JERRY"), -#line 5101 +#line 5111 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5102 +#line 5112 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5104 +#line 5114 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5105 +#line 5115 .doubleBattle = FALSE, -#line 5106 +#line 5116 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5108 +#line 5118 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5110 +#line 5120 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5109 +#line 5119 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5112 +#line 5122 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5114 +#line 5124 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5113 +#line 5123 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5116 +#line 5126 [TRAINER_JERRY_3] = { -#line 5117 +#line 5127 .trainerName = _("JERRY"), -#line 5118 +#line 5128 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5119 +#line 5129 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5121 +#line 5131 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5122 +#line 5132 .doubleBattle = FALSE, -#line 5123 +#line 5133 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5125 +#line 5135 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5127 +#line 5137 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5126 +#line 5136 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5129 +#line 5139 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5131 +#line 5141 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5130 +#line 5140 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5133 +#line 5143 [TRAINER_JERRY_4] = { -#line 5134 +#line 5144 .trainerName = _("JERRY"), -#line 5135 +#line 5145 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5136 +#line 5146 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5138 +#line 5148 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5139 +#line 5149 .doubleBattle = FALSE, -#line 5140 +#line 5150 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5142 +#line 5152 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5144 +#line 5154 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5143 +#line 5153 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5146 +#line 5156 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5148 +#line 5158 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5147 +#line 5157 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5150 +#line 5160 [TRAINER_JERRY_5] = { -#line 5151 +#line 5161 .trainerName = _("JERRY"), -#line 5152 +#line 5162 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5153 +#line 5163 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5155 +#line 5165 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5156 +#line 5166 .doubleBattle = FALSE, -#line 5157 +#line 5167 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5159 +#line 5169 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5161 +#line 5171 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5160 +#line 5170 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5163 +#line 5173 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5165 +#line 5175 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5164 +#line 5174 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5167 +#line 5177 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5169 +#line 5179 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5168 +#line 5178 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5171 +#line 5181 [TRAINER_KAREN_1] = { -#line 5172 +#line 5182 .trainerName = _("KAREN"), -#line 5173 +#line 5183 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5174 +#line 5184 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5175 +#line 5185 F_TRAINER_FEMALE | -#line 5176 +#line 5186 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5177 +#line 5187 .doubleBattle = FALSE, -#line 5178 +#line 5188 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5180 +#line 5190 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5182 +#line 5192 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5181 +#line 5191 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5184 +#line 5194 [TRAINER_GEORGIA] = { -#line 5185 +#line 5195 .trainerName = _("GEORGIA"), -#line 5186 +#line 5196 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5187 +#line 5197 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5188 +#line 5198 F_TRAINER_FEMALE | -#line 5189 +#line 5199 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5190 +#line 5200 .doubleBattle = FALSE, -#line 5191 +#line 5201 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5193 +#line 5203 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5195 +#line 5205 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5194 +#line 5204 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5197 +#line 5207 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5199 +#line 5209 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5198 +#line 5208 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5201 +#line 5211 [TRAINER_KAREN_2] = { -#line 5202 +#line 5212 .trainerName = _("KAREN"), -#line 5203 +#line 5213 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5204 +#line 5214 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5205 +#line 5215 F_TRAINER_FEMALE | -#line 5206 +#line 5216 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5207 +#line 5217 .doubleBattle = FALSE, -#line 5208 +#line 5218 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5210 +#line 5220 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5212 +#line 5222 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5211 +#line 5221 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5214 +#line 5224 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5216 +#line 5226 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5215 +#line 5225 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5218 +#line 5228 [TRAINER_KAREN_3] = { -#line 5219 +#line 5229 .trainerName = _("KAREN"), -#line 5220 +#line 5230 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5221 +#line 5231 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5222 +#line 5232 F_TRAINER_FEMALE | -#line 5223 +#line 5233 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5224 +#line 5234 .doubleBattle = FALSE, -#line 5225 +#line 5235 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5227 +#line 5237 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5229 +#line 5239 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5228 +#line 5238 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5231 +#line 5241 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5233 +#line 5243 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5232 +#line 5242 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5235 +#line 5245 [TRAINER_KAREN_4] = { -#line 5236 +#line 5246 .trainerName = _("KAREN"), -#line 5237 +#line 5247 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5238 +#line 5248 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5239 +#line 5249 F_TRAINER_FEMALE | -#line 5240 +#line 5250 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5241 +#line 5251 .doubleBattle = FALSE, -#line 5242 +#line 5252 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5244 +#line 5254 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5246 +#line 5256 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5245 +#line 5255 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5248 +#line 5258 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5250 +#line 5260 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5249 +#line 5259 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5252 +#line 5262 [TRAINER_KAREN_5] = { -#line 5253 +#line 5263 .trainerName = _("KAREN"), -#line 5254 +#line 5264 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5255 +#line 5265 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5256 +#line 5266 F_TRAINER_FEMALE | -#line 5257 +#line 5267 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5258 +#line 5268 .doubleBattle = FALSE, -#line 5259 +#line 5269 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5261 +#line 5271 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5263 +#line 5273 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5262 +#line 5272 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5265 +#line 5275 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5267 +#line 5277 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5266 +#line 5276 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5269 +#line 5279 [TRAINER_KATE_AND_JOY] = { -#line 5270 +#line 5280 .trainerName = _("KATE & JOY"), -#line 5271 +#line 5281 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5272 +#line 5282 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5274 +#line 5284 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5275 +#line 5285 .doubleBattle = TRUE, -#line 5276 +#line 5286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5278 +#line 5288 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5280 +#line 5290 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5279 +#line 5289 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5281 +#line 5291 MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, @@ -13235,17 +13235,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5286 +#line 5296 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5288 +#line 5298 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5287 +#line 5297 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5289 +#line 5299 MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, @@ -13254,37 +13254,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5294 +#line 5304 [TRAINER_ANNA_AND_MEG_1] = { -#line 5295 +#line 5305 .trainerName = _("ANNA & MEG"), -#line 5296 +#line 5306 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5297 +#line 5307 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5299 +#line 5309 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5300 +#line 5310 .doubleBattle = TRUE, -#line 5301 +#line 5311 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5303 +#line 5313 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5305 +#line 5315 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5304 +#line 5314 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5306 +#line 5316 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13292,17 +13292,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5311 +#line 5321 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5313 +#line 5323 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5312 +#line 5322 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5314 +#line 5324 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13310,37 +13310,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5318 +#line 5328 [TRAINER_ANNA_AND_MEG_2] = { -#line 5319 +#line 5329 .trainerName = _("ANNA & MEG"), -#line 5320 +#line 5330 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5321 +#line 5331 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5323 +#line 5333 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5324 +#line 5334 .doubleBattle = TRUE, -#line 5325 +#line 5335 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5327 +#line 5337 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5329 +#line 5339 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5328 +#line 5338 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5330 +#line 5340 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13348,17 +13348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5335 +#line 5345 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5337 +#line 5347 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5336 +#line 5346 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5338 +#line 5348 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13366,37 +13366,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5342 +#line 5352 [TRAINER_ANNA_AND_MEG_3] = { -#line 5343 +#line 5353 .trainerName = _("ANNA & MEG"), -#line 5344 +#line 5354 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5345 +#line 5355 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5347 +#line 5357 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5348 +#line 5358 .doubleBattle = TRUE, -#line 5349 +#line 5359 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5351 +#line 5361 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5353 +#line 5363 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5352 +#line 5362 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5354 +#line 5364 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13404,17 +13404,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5359 +#line 5369 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5361 +#line 5371 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5360 +#line 5370 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5362 +#line 5372 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13422,37 +13422,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5366 +#line 5376 [TRAINER_ANNA_AND_MEG_4] = { -#line 5367 +#line 5377 .trainerName = _("ANNA & MEG"), -#line 5368 +#line 5378 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5369 +#line 5379 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5371 +#line 5381 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5372 +#line 5382 .doubleBattle = TRUE, -#line 5373 +#line 5383 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5375 +#line 5385 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5377 +#line 5387 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5376 +#line 5386 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5378 +#line 5388 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13460,17 +13460,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5383 +#line 5393 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5385 +#line 5395 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5384 +#line 5394 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5386 +#line 5396 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13478,37 +13478,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5390 +#line 5400 [TRAINER_ANNA_AND_MEG_5] = { -#line 5391 +#line 5401 .trainerName = _("ANNA & MEG"), -#line 5392 +#line 5402 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5393 +#line 5403 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5395 +#line 5405 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5396 +#line 5406 .doubleBattle = TRUE, -#line 5397 +#line 5407 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5399 +#line 5409 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5401 +#line 5411 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5400 +#line 5410 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5402 +#line 5412 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13516,17 +13516,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5407 +#line 5417 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5409 +#line 5419 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5408 +#line 5418 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5410 +#line 5420 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13534,120 +13534,120 @@ F_TRAINER_FEMALE | }, }, }, -#line 5414 +#line 5424 [TRAINER_VICTOR] = { -#line 5415 +#line 5425 .trainerName = _("VICTOR"), -#line 5416 +#line 5426 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5417 +#line 5427 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5419 +#line 5429 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5420 +#line 5430 .doubleBattle = FALSE, -#line 5421 +#line 5431 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5423 +#line 5433 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5423 +#line 5433 .heldItem = ITEM_ORAN_BERRY, -#line 5425 +#line 5435 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5424 +#line 5434 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5427 +#line 5437 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5427 +#line 5437 .heldItem = ITEM_ORAN_BERRY, -#line 5429 +#line 5439 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5428 +#line 5438 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5431 +#line 5441 [TRAINER_MIGUEL_1] = { -#line 5432 +#line 5442 .trainerName = _("MIGUEL"), -#line 5433 +#line 5443 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5434 +#line 5444 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5436 +#line 5446 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5437 +#line 5447 .doubleBattle = FALSE, -#line 5438 +#line 5448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5440 +#line 5450 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5440 +#line 5450 .heldItem = ITEM_ORAN_BERRY, -#line 5442 +#line 5452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5441 +#line 5451 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5444 +#line 5454 [TRAINER_COLTON] = { -#line 5445 +#line 5455 .trainerName = _("COLTON"), -#line 5446 +#line 5456 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5447 +#line 5457 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5449 +#line 5459 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5450 +#line 5460 .doubleBattle = FALSE, -#line 5451 +#line 5461 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 5453 +#line 5463 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5453 +#line 5463 .heldItem = ITEM_ORAN_BERRY, -#line 5455 +#line 5465 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5454 +#line 5464 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5456 +#line 5466 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13655,19 +13655,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5461 +#line 5471 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5461 +#line 5471 .heldItem = ITEM_ORAN_BERRY, -#line 5463 +#line 5473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5462 +#line 5472 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5464 +#line 5474 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13675,19 +13675,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5469 +#line 5479 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5469 +#line 5479 .heldItem = ITEM_ORAN_BERRY, -#line 5471 +#line 5481 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5470 +#line 5480 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5472 +#line 5482 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13695,19 +13695,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5477 +#line 5487 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5477 +#line 5487 .heldItem = ITEM_ORAN_BERRY, -#line 5479 +#line 5489 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5478 +#line 5488 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5480 +#line 5490 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13715,19 +13715,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5485 +#line 5495 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5485 +#line 5495 .heldItem = ITEM_ORAN_BERRY, -#line 5487 +#line 5497 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5486 +#line 5496 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5488 +#line 5498 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13735,19 +13735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5493 +#line 5503 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5493 +#line 5503 .heldItem = ITEM_ORAN_BERRY, -#line 5495 +#line 5505 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5494 +#line 5504 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5496 +#line 5506 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13756,584 +13756,584 @@ F_TRAINER_FEMALE | }, }, }, -#line 5501 +#line 5511 [TRAINER_MIGUEL_2] = { -#line 5502 +#line 5512 .trainerName = _("MIGUEL"), -#line 5503 +#line 5513 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5504 +#line 5514 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5506 +#line 5516 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5507 +#line 5517 .doubleBattle = FALSE, -#line 5508 +#line 5518 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5510 +#line 5520 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5510 +#line 5520 .heldItem = ITEM_ORAN_BERRY, -#line 5512 +#line 5522 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5511 +#line 5521 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5514 +#line 5524 [TRAINER_MIGUEL_3] = { -#line 5515 +#line 5525 .trainerName = _("MIGUEL"), -#line 5516 +#line 5526 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5517 +#line 5527 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5519 +#line 5529 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5520 +#line 5530 .doubleBattle = FALSE, -#line 5521 +#line 5531 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5523 +#line 5533 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5523 +#line 5533 .heldItem = ITEM_ORAN_BERRY, -#line 5525 +#line 5535 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5524 +#line 5534 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5527 +#line 5537 [TRAINER_MIGUEL_4] = { -#line 5528 +#line 5538 .trainerName = _("MIGUEL"), -#line 5529 +#line 5539 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5530 +#line 5540 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5532 +#line 5542 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5533 +#line 5543 .doubleBattle = FALSE, -#line 5534 +#line 5544 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5536 +#line 5546 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5536 +#line 5546 .heldItem = ITEM_ORAN_BERRY, -#line 5538 +#line 5548 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5537 +#line 5547 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5540 +#line 5550 [TRAINER_MIGUEL_5] = { -#line 5541 +#line 5551 .trainerName = _("MIGUEL"), -#line 5542 +#line 5552 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5543 +#line 5553 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5545 +#line 5555 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5546 +#line 5556 .doubleBattle = FALSE, -#line 5547 +#line 5557 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5549 +#line 5559 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5549 +#line 5559 .heldItem = ITEM_SITRUS_BERRY, -#line 5551 +#line 5561 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5550 +#line 5560 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5553 +#line 5563 [TRAINER_VICTORIA] = { -#line 5554 +#line 5564 .trainerName = _("VICTORIA"), -#line 5555 +#line 5565 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5556 +#line 5566 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5557 +#line 5567 F_TRAINER_FEMALE | -#line 5558 +#line 5568 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5559 +#line 5569 .doubleBattle = FALSE, -#line 5560 +#line 5570 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5562 +#line 5572 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5562 +#line 5572 .heldItem = ITEM_ORAN_BERRY, -#line 5564 +#line 5574 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5563 +#line 5573 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5566 +#line 5576 [TRAINER_VANESSA] = { -#line 5567 +#line 5577 .trainerName = _("VANESSA"), -#line 5568 +#line 5578 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5569 +#line 5579 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5570 +#line 5580 F_TRAINER_FEMALE | -#line 5571 +#line 5581 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5572 +#line 5582 .doubleBattle = FALSE, -#line 5573 +#line 5583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5575 +#line 5585 .species = SPECIES_PIKACHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5575 +#line 5585 .heldItem = ITEM_ORAN_BERRY, -#line 5577 +#line 5587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5576 +#line 5586 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5579 +#line 5589 [TRAINER_BETHANY] = { -#line 5580 +#line 5590 .trainerName = _("BETHANY"), -#line 5581 +#line 5591 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5582 +#line 5592 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5583 +#line 5593 F_TRAINER_FEMALE | -#line 5584 +#line 5594 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5585 +#line 5595 .doubleBattle = FALSE, -#line 5586 +#line 5596 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5588 +#line 5598 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5588 +#line 5598 .heldItem = ITEM_ORAN_BERRY, -#line 5590 +#line 5600 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5589 +#line 5599 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5592 +#line 5602 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5592 +#line 5602 .heldItem = ITEM_ORAN_BERRY, -#line 5594 +#line 5604 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5593 +#line 5603 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5596 +#line 5606 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5596 +#line 5606 .heldItem = ITEM_ORAN_BERRY, -#line 5598 +#line 5608 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5597 +#line 5607 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5600 +#line 5610 [TRAINER_ISABEL_1] = { -#line 5601 +#line 5611 .trainerName = _("ISABEL"), -#line 5602 +#line 5612 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5603 +#line 5613 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5604 +#line 5614 F_TRAINER_FEMALE | -#line 5605 +#line 5615 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5606 +#line 5616 .doubleBattle = FALSE, -#line 5607 +#line 5617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5609 +#line 5619 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5609 +#line 5619 .heldItem = ITEM_ORAN_BERRY, -#line 5611 +#line 5621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5610 +#line 5620 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5613 +#line 5623 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5613 +#line 5623 .heldItem = ITEM_ORAN_BERRY, -#line 5615 +#line 5625 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5614 +#line 5624 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5617 +#line 5627 [TRAINER_ISABEL_2] = { -#line 5618 +#line 5628 .trainerName = _("ISABEL"), -#line 5619 +#line 5629 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5620 +#line 5630 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5621 +#line 5631 F_TRAINER_FEMALE | -#line 5622 +#line 5632 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5623 +#line 5633 .doubleBattle = FALSE, -#line 5624 +#line 5634 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5626 +#line 5636 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5626 +#line 5636 .heldItem = ITEM_ORAN_BERRY, -#line 5628 +#line 5638 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5627 +#line 5637 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5630 +#line 5640 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5630 +#line 5640 .heldItem = ITEM_ORAN_BERRY, -#line 5632 +#line 5642 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5631 +#line 5641 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5634 +#line 5644 [TRAINER_ISABEL_3] = { -#line 5635 +#line 5645 .trainerName = _("ISABEL"), -#line 5636 +#line 5646 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5637 +#line 5647 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5638 +#line 5648 F_TRAINER_FEMALE | -#line 5639 +#line 5649 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5640 +#line 5650 .doubleBattle = FALSE, -#line 5641 +#line 5651 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5643 +#line 5653 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5643 +#line 5653 .heldItem = ITEM_ORAN_BERRY, -#line 5645 +#line 5655 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5644 +#line 5654 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5647 +#line 5657 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5647 +#line 5657 .heldItem = ITEM_ORAN_BERRY, -#line 5649 +#line 5659 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5648 +#line 5658 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5651 +#line 5661 [TRAINER_ISABEL_4] = { -#line 5652 +#line 5662 .trainerName = _("ISABEL"), -#line 5653 +#line 5663 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5654 +#line 5664 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5655 +#line 5665 F_TRAINER_FEMALE | -#line 5656 +#line 5666 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5657 +#line 5667 .doubleBattle = FALSE, -#line 5658 +#line 5668 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5660 +#line 5670 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5660 +#line 5670 .heldItem = ITEM_ORAN_BERRY, -#line 5662 +#line 5672 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5661 +#line 5671 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5664 +#line 5674 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5664 +#line 5674 .heldItem = ITEM_ORAN_BERRY, -#line 5666 +#line 5676 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5665 +#line 5675 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5668 +#line 5678 [TRAINER_ISABEL_5] = { -#line 5669 +#line 5679 .trainerName = _("ISABEL"), -#line 5670 +#line 5680 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5671 +#line 5681 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5672 +#line 5682 F_TRAINER_FEMALE | -#line 5673 +#line 5683 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5674 +#line 5684 .doubleBattle = FALSE, -#line 5675 +#line 5685 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5677 +#line 5687 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5677 +#line 5687 .heldItem = ITEM_SITRUS_BERRY, -#line 5679 +#line 5689 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5678 +#line 5688 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5681 +#line 5691 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5681 +#line 5691 .heldItem = ITEM_SITRUS_BERRY, -#line 5683 +#line 5693 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5682 +#line 5692 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5685 +#line 5695 [TRAINER_TIMOTHY_1] = { -#line 5686 +#line 5696 .trainerName = _("TIMOTHY"), -#line 5687 +#line 5697 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5688 +#line 5698 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5690 +#line 5700 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5691 +#line 5701 .doubleBattle = FALSE, -#line 5692 +#line 5702 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5694 +#line 5704 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5696 +#line 5706 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5695 +#line 5705 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5698 +#line 5708 [TRAINER_TIMOTHY_2] = { -#line 5699 +#line 5709 .trainerName = _("TIMOTHY"), -#line 5700 +#line 5710 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5701 +#line 5711 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5703 +#line 5713 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5704 +#line 5714 .doubleBattle = FALSE, -#line 5705 +#line 5715 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5707 +#line 5717 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5709 +#line 5719 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5708 +#line 5718 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5710 +#line 5720 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14342,37 +14342,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5715 +#line 5725 [TRAINER_TIMOTHY_3] = { -#line 5716 +#line 5726 .trainerName = _("TIMOTHY"), -#line 5717 +#line 5727 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5718 +#line 5728 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5720 +#line 5730 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5721 +#line 5731 .doubleBattle = FALSE, -#line 5722 +#line 5732 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5724 +#line 5734 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5726 +#line 5736 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5725 +#line 5735 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5727 +#line 5737 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14381,37 +14381,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5732 +#line 5742 [TRAINER_TIMOTHY_4] = { -#line 5733 +#line 5743 .trainerName = _("TIMOTHY"), -#line 5734 +#line 5744 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5735 +#line 5745 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5737 +#line 5747 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5738 +#line 5748 .doubleBattle = FALSE, -#line 5739 +#line 5749 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5741 +#line 5751 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5743 +#line 5753 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5742 +#line 5752 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5744 +#line 5754 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14420,37 +14420,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5749 +#line 5759 [TRAINER_TIMOTHY_5] = { -#line 5750 +#line 5760 .trainerName = _("TIMOTHY"), -#line 5751 +#line 5761 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5752 +#line 5762 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5754 +#line 5764 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5755 +#line 5765 .doubleBattle = FALSE, -#line 5756 +#line 5766 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5758 +#line 5768 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5760 +#line 5770 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5759 +#line 5769 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5761 +#line 5771 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14459,39 +14459,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5766 +#line 5776 [TRAINER_VICKY] = { -#line 5767 +#line 5777 .trainerName = _("VICKY"), -#line 5768 +#line 5778 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5769 +#line 5779 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5770 +#line 5780 F_TRAINER_FEMALE | -#line 5771 +#line 5781 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5772 +#line 5782 .doubleBattle = FALSE, -#line 5773 +#line 5783 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5775 +#line 5785 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5777 +#line 5787 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5776 +#line 5786 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5778 +#line 5788 MOVE_HIGH_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, @@ -14500,448 +14500,448 @@ F_TRAINER_FEMALE | }, }, }, -#line 5783 +#line 5793 [TRAINER_SHELBY_1] = { -#line 5784 +#line 5794 .trainerName = _("SHELBY"), -#line 5785 +#line 5795 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5786 +#line 5796 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5787 +#line 5797 F_TRAINER_FEMALE | -#line 5788 +#line 5798 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5789 +#line 5799 .doubleBattle = FALSE, -#line 5790 +#line 5800 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5792 +#line 5802 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5794 +#line 5804 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5793 +#line 5803 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5796 +#line 5806 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5798 +#line 5808 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5797 +#line 5807 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5800 +#line 5810 [TRAINER_SHELBY_2] = { -#line 5801 +#line 5811 .trainerName = _("SHELBY"), -#line 5802 +#line 5812 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5803 +#line 5813 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5804 +#line 5814 F_TRAINER_FEMALE | -#line 5805 +#line 5815 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5806 +#line 5816 .doubleBattle = FALSE, -#line 5807 +#line 5817 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5809 +#line 5819 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5811 +#line 5821 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5810 +#line 5820 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5813 +#line 5823 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5815 +#line 5825 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5814 +#line 5824 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5817 +#line 5827 [TRAINER_SHELBY_3] = { -#line 5818 +#line 5828 .trainerName = _("SHELBY"), -#line 5819 +#line 5829 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5820 +#line 5830 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5821 +#line 5831 F_TRAINER_FEMALE | -#line 5822 +#line 5832 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5823 +#line 5833 .doubleBattle = FALSE, -#line 5824 +#line 5834 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5826 +#line 5836 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5828 +#line 5838 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5827 +#line 5837 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5830 +#line 5840 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5832 +#line 5842 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5831 +#line 5841 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5834 +#line 5844 [TRAINER_SHELBY_4] = { -#line 5835 +#line 5845 .trainerName = _("SHELBY"), -#line 5836 +#line 5846 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5837 +#line 5847 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5838 +#line 5848 F_TRAINER_FEMALE | -#line 5839 +#line 5849 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5840 +#line 5850 .doubleBattle = FALSE, -#line 5841 +#line 5851 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5843 +#line 5853 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5845 +#line 5855 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5844 +#line 5854 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5847 +#line 5857 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5849 +#line 5859 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5848 +#line 5858 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5851 +#line 5861 [TRAINER_SHELBY_5] = { -#line 5852 +#line 5862 .trainerName = _("SHELBY"), -#line 5853 +#line 5863 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5854 +#line 5864 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5855 +#line 5865 F_TRAINER_FEMALE | -#line 5856 +#line 5866 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5857 +#line 5867 .doubleBattle = FALSE, -#line 5858 +#line 5868 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5860 +#line 5870 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5862 +#line 5872 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5861 +#line 5871 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5864 +#line 5874 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5866 +#line 5876 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5865 +#line 5875 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5868 +#line 5878 [TRAINER_CALVIN_1] = { -#line 5869 +#line 5879 .trainerName = _("CALVIN"), -#line 5870 +#line 5880 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5871 +#line 5881 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5873 +#line 5883 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5874 +#line 5884 .doubleBattle = FALSE, -#line 5875 +#line 5885 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5877 +#line 5887 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5879 +#line 5889 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5878 +#line 5888 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5881 +#line 5891 [TRAINER_BILLY] = { -#line 5882 +#line 5892 .trainerName = _("BILLY"), -#line 5883 +#line 5893 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5884 +#line 5894 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5886 +#line 5896 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5887 +#line 5897 .doubleBattle = FALSE, -#line 5888 +#line 5898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5890 +#line 5900 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5892 +#line 5902 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5891 +#line 5901 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5894 +#line 5904 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5896 +#line 5906 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5895 +#line 5905 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5898 +#line 5908 [TRAINER_JOSH] = { -#line 5899 +#line 5909 .trainerName = _("JOSH"), -#line 5900 +#line 5910 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5901 +#line 5911 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5903 +#line 5913 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5904 +#line 5914 .doubleBattle = FALSE, -#line 5905 +#line 5915 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5907 +#line 5917 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5909 +#line 5919 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5908 +#line 5918 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5910 +#line 5920 MOVE_TACKLE, }, }, }, }, -#line 5912 +#line 5922 [TRAINER_TOMMY] = { -#line 5913 +#line 5923 .trainerName = _("TOMMY"), -#line 5914 +#line 5924 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5915 +#line 5925 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5917 +#line 5927 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5918 +#line 5928 .doubleBattle = FALSE, -#line 5919 +#line 5929 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5921 +#line 5931 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5923 +#line 5933 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 5922 +#line 5932 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5925 +#line 5935 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5927 +#line 5937 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 5926 +#line 5936 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5929 +#line 5939 [TRAINER_JOEY] = { -#line 5930 +#line 5940 .trainerName = _("JOEY"), -#line 5931 +#line 5941 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5932 +#line 5942 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5934 +#line 5944 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5935 +#line 5945 .doubleBattle = FALSE, -#line 5936 +#line 5946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5938 +#line 5948 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5940 +#line 5950 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5939 +#line 5949 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5942 +#line 5952 [TRAINER_BEN] = { -#line 5943 +#line 5953 .trainerName = _("BEN"), -#line 5944 +#line 5954 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5945 +#line 5955 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5947 +#line 5957 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5948 +#line 5958 .doubleBattle = FALSE, -#line 5949 +#line 5959 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5951 +#line 5961 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5953 +#line 5963 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5952 +#line 5962 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5954 +#line 5964 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, @@ -14949,17 +14949,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5959 +#line 5969 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5961 +#line 5971 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5960 +#line 5970 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5962 +#line 5972 MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, @@ -14968,39 +14968,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5967 +#line 5977 [TRAINER_QUINCY] = { -#line 5968 +#line 5978 .trainerName = _("QUINCY"), -#line 5969 +#line 5979 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 5970 +#line 5980 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 5972 +#line 5982 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 5973 +#line 5983 .items = { ITEM_FULL_RESTORE }, -#line 5974 +#line 5984 .doubleBattle = FALSE, -#line 5975 +#line 5985 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5977 +#line 5987 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5979 +#line 5989 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5978 +#line 5988 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5980 +#line 5990 MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, @@ -15008,17 +15008,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5985 +#line 5995 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5987 +#line 5997 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5986 +#line 5996 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5988 +#line 5998 MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, @@ -15027,41 +15027,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 5993 +#line 6003 [TRAINER_KATELYNN] = { -#line 5994 +#line 6004 .trainerName = _("KATELYNN"), -#line 5995 +#line 6005 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 5996 +#line 6006 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 5997 +#line 6007 F_TRAINER_FEMALE | -#line 5998 +#line 6008 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 5999 +#line 6009 .items = { ITEM_FULL_RESTORE }, -#line 6000 +#line 6010 .doubleBattle = FALSE, -#line 6001 +#line 6011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6003 +#line 6013 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6005 +#line 6015 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6004 +#line 6014 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6006 +#line 6016 MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -15069,17 +15069,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6011 +#line 6021 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6013 +#line 6023 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6012 +#line 6022 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6014 +#line 6024 MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, @@ -15088,418 +15088,418 @@ F_TRAINER_FEMALE | }, }, }, -#line 6019 +#line 6029 [TRAINER_JAYLEN] = { -#line 6020 +#line 6030 .trainerName = _("JAYLEN"), -#line 6021 +#line 6031 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6022 +#line 6032 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6024 +#line 6034 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6025 +#line 6035 .doubleBattle = FALSE, -#line 6026 +#line 6036 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6028 +#line 6038 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6030 +#line 6040 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6029 +#line 6039 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6032 +#line 6042 [TRAINER_DILLON] = { -#line 6033 +#line 6043 .trainerName = _("DILLON"), -#line 6034 +#line 6044 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6035 +#line 6045 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6037 +#line 6047 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6038 +#line 6048 .doubleBattle = FALSE, -#line 6039 +#line 6049 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6041 +#line 6051 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6043 +#line 6053 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6042 +#line 6052 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6045 +#line 6055 [TRAINER_CALVIN_2] = { -#line 6046 +#line 6056 .trainerName = _("CALVIN"), -#line 6047 +#line 6057 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6048 +#line 6058 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6050 +#line 6060 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6051 +#line 6061 .doubleBattle = FALSE, -#line 6052 +#line 6062 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6054 +#line 6064 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6056 +#line 6066 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6055 +#line 6065 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6058 +#line 6068 [TRAINER_CALVIN_3] = { -#line 6059 +#line 6069 .trainerName = _("CALVIN"), -#line 6060 +#line 6070 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6061 +#line 6071 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6063 +#line 6073 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6064 +#line 6074 .doubleBattle = FALSE, -#line 6065 +#line 6075 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6067 +#line 6077 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6069 +#line 6079 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6068 +#line 6078 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6071 +#line 6081 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6073 +#line 6083 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6072 +#line 6082 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6075 +#line 6085 [TRAINER_CALVIN_4] = { -#line 6076 +#line 6086 .trainerName = _("CALVIN"), -#line 6077 +#line 6087 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6078 +#line 6088 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6080 +#line 6090 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6081 +#line 6091 .doubleBattle = FALSE, -#line 6082 +#line 6092 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6084 +#line 6094 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6086 +#line 6096 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6085 +#line 6095 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6088 +#line 6098 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6090 +#line 6100 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6089 +#line 6099 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6092 +#line 6102 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6094 +#line 6104 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6093 +#line 6103 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6096 +#line 6106 [TRAINER_CALVIN_5] = { -#line 6097 +#line 6107 .trainerName = _("CALVIN"), -#line 6098 +#line 6108 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6099 +#line 6109 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6101 +#line 6111 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6102 +#line 6112 .doubleBattle = FALSE, -#line 6103 +#line 6113 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6105 +#line 6115 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6107 +#line 6117 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6106 +#line 6116 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6109 +#line 6119 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6111 +#line 6121 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6110 +#line 6120 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6113 +#line 6123 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6115 +#line 6125 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6114 +#line 6124 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6117 +#line 6127 [TRAINER_EDDIE] = { -#line 6118 +#line 6128 .trainerName = _("EDDIE"), -#line 6119 +#line 6129 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6120 +#line 6130 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6122 +#line 6132 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6123 +#line 6133 .doubleBattle = FALSE, -#line 6124 +#line 6134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6126 +#line 6136 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6128 +#line 6138 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6127 +#line 6137 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6130 +#line 6140 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6132 +#line 6142 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6131 +#line 6141 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6134 +#line 6144 [TRAINER_ALLEN] = { -#line 6135 +#line 6145 .trainerName = _("ALLEN"), -#line 6136 +#line 6146 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6137 +#line 6147 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6139 +#line 6149 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6140 +#line 6150 .doubleBattle = FALSE, -#line 6141 +#line 6151 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6143 +#line 6153 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6145 +#line 6155 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6144 +#line 6154 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6147 +#line 6157 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6149 +#line 6159 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6148 +#line 6158 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6151 +#line 6161 [TRAINER_TIMMY] = { -#line 6152 +#line 6162 .trainerName = _("TIMMY"), -#line 6153 +#line 6163 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6154 +#line 6164 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6156 +#line 6166 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6157 +#line 6167 .doubleBattle = FALSE, -#line 6158 +#line 6168 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6160 +#line 6170 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6162 +#line 6172 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6161 +#line 6171 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6164 +#line 6174 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6166 +#line 6176 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6165 +#line 6175 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6168 +#line 6178 [TRAINER_WALLACE] = { -#line 6169 +#line 6179 .trainerName = _("WALLACE"), -#line 6170 +#line 6180 .trainerClass = TRAINER_CLASS_CHAMPION, -#line 6171 +#line 6181 .trainerPic = TRAINER_PIC_CHAMPION_WALLACE, .encounterMusic_gender = -#line 6173 +#line 6183 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6174 +#line 6184 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 6175 +#line 6185 .doubleBattle = FALSE, -#line 6176 +#line 6186 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 6177 +#line 6187 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_YELLOW, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6179 +#line 6189 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6181 +#line 6191 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6180 +#line 6190 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6182 +#line 6192 MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, @@ -15507,17 +15507,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6187 +#line 6197 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6189 +#line 6199 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6188 +#line 6198 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6190 +#line 6200 MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, @@ -15525,17 +15525,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6195 +#line 6205 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6197 +#line 6207 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6196 +#line 6206 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6198 +#line 6208 MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, @@ -15543,17 +15543,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6203 +#line 6213 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6205 +#line 6215 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6204 +#line 6214 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6206 +#line 6216 MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, @@ -15561,17 +15561,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6211 +#line 6221 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6213 +#line 6223 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6212 +#line 6222 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6214 +#line 6224 MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, @@ -15579,19 +15579,19 @@ F_TRAINER_FEMALE | }, }, { -#line 6219 +#line 6229 .species = SPECIES_MILOTIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6219 +#line 6229 .heldItem = ITEM_SITRUS_BERRY, -#line 6221 +#line 6231 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6220 +#line 6230 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6222 +#line 6232 MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, @@ -15600,2548 +15600,2548 @@ F_TRAINER_FEMALE | }, }, }, -#line 6227 +#line 6237 [TRAINER_ANDREW] = { -#line 6228 +#line 6238 .trainerName = _("ANDREW"), -#line 6229 +#line 6239 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6230 +#line 6240 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6232 +#line 6242 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6233 +#line 6243 .doubleBattle = FALSE, -#line 6234 +#line 6244 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6236 +#line 6246 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6238 +#line 6248 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6237 +#line 6247 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6240 +#line 6250 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6242 +#line 6252 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6241 +#line 6251 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6244 +#line 6254 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6246 +#line 6256 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6245 +#line 6255 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6248 +#line 6258 [TRAINER_IVAN] = { -#line 6249 +#line 6259 .trainerName = _("IVAN"), -#line 6250 +#line 6260 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6251 +#line 6261 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6253 +#line 6263 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6254 +#line 6264 .doubleBattle = FALSE, -#line 6255 +#line 6265 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6257 +#line 6267 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6259 +#line 6269 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6258 +#line 6268 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6261 +#line 6271 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6263 +#line 6273 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6262 +#line 6272 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6265 +#line 6275 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6267 +#line 6277 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6266 +#line 6276 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6269 +#line 6279 [TRAINER_CLAUDE] = { -#line 6270 +#line 6280 .trainerName = _("CLAUDE"), -#line 6271 +#line 6281 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6272 +#line 6282 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6274 +#line 6284 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6275 +#line 6285 .doubleBattle = FALSE, -#line 6276 +#line 6286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6278 +#line 6288 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6280 +#line 6290 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6279 +#line 6289 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6282 +#line 6292 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6284 +#line 6294 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6283 +#line 6293 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6286 +#line 6296 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6288 +#line 6298 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6287 +#line 6297 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6290 +#line 6300 [TRAINER_ELLIOT_1] = { -#line 6291 +#line 6301 .trainerName = _("ELLIOT"), -#line 6292 +#line 6302 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6293 +#line 6303 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6295 +#line 6305 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6296 +#line 6306 .doubleBattle = FALSE, -#line 6297 +#line 6307 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6299 +#line 6309 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6301 +#line 6311 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6300 +#line 6310 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6303 +#line 6313 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6305 +#line 6315 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6304 +#line 6314 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6307 +#line 6317 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6309 +#line 6319 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6308 +#line 6318 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6311 +#line 6321 [TRAINER_NED] = { -#line 6312 +#line 6322 .trainerName = _("NED"), -#line 6313 +#line 6323 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6314 +#line 6324 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6316 +#line 6326 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6317 +#line 6327 .doubleBattle = FALSE, -#line 6318 +#line 6328 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6320 +#line 6330 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6322 +#line 6332 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6321 +#line 6331 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6324 +#line 6334 [TRAINER_DALE] = { -#line 6325 +#line 6335 .trainerName = _("DALE"), -#line 6326 +#line 6336 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6327 +#line 6337 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6329 +#line 6339 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6330 +#line 6340 .doubleBattle = FALSE, -#line 6331 +#line 6341 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6333 +#line 6343 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6335 +#line 6345 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6334 +#line 6344 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6337 +#line 6347 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6339 +#line 6349 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6338 +#line 6348 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6341 +#line 6351 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6343 +#line 6353 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6342 +#line 6352 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6345 +#line 6355 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6347 +#line 6357 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6346 +#line 6356 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6349 +#line 6359 [TRAINER_NOLAN] = { -#line 6350 +#line 6360 .trainerName = _("NOLAN"), -#line 6351 +#line 6361 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6352 +#line 6362 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6354 +#line 6364 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6355 +#line 6365 .doubleBattle = FALSE, -#line 6356 +#line 6366 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6358 +#line 6368 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6360 +#line 6370 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6359 +#line 6369 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6362 +#line 6372 [TRAINER_BARNY] = { -#line 6363 +#line 6373 .trainerName = _("BARNY"), -#line 6364 +#line 6374 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6365 +#line 6375 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6367 +#line 6377 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6368 +#line 6378 .doubleBattle = FALSE, -#line 6369 +#line 6379 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6371 +#line 6381 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6373 +#line 6383 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6372 +#line 6382 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6375 +#line 6385 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6377 +#line 6387 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6376 +#line 6386 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6379 +#line 6389 [TRAINER_WADE] = { -#line 6380 +#line 6390 .trainerName = _("WADE"), -#line 6381 +#line 6391 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6382 +#line 6392 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6384 +#line 6394 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6385 +#line 6395 .doubleBattle = FALSE, -#line 6386 +#line 6396 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6388 +#line 6398 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6390 +#line 6400 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6389 +#line 6399 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6392 +#line 6402 [TRAINER_CARTER] = { -#line 6393 +#line 6403 .trainerName = _("CARTER"), -#line 6394 +#line 6404 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6395 +#line 6405 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6397 +#line 6407 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6398 +#line 6408 .doubleBattle = FALSE, -#line 6399 +#line 6409 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6401 +#line 6411 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6403 +#line 6413 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6402 +#line 6412 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6405 +#line 6415 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6407 +#line 6417 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6406 +#line 6416 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6409 +#line 6419 [TRAINER_ELLIOT_2] = { -#line 6410 +#line 6420 .trainerName = _("ELLIOT"), -#line 6411 +#line 6421 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6412 +#line 6422 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6414 +#line 6424 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6415 +#line 6425 .doubleBattle = FALSE, -#line 6416 +#line 6426 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6418 +#line 6428 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6420 +#line 6430 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6419 +#line 6429 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6422 +#line 6432 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6424 +#line 6434 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6423 +#line 6433 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6426 +#line 6436 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6428 +#line 6438 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6427 +#line 6437 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6430 +#line 6440 [TRAINER_ELLIOT_3] = { -#line 6431 +#line 6441 .trainerName = _("ELLIOT"), -#line 6432 +#line 6442 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6433 +#line 6443 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6435 +#line 6445 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6436 +#line 6446 .doubleBattle = FALSE, -#line 6437 +#line 6447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6439 +#line 6449 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6441 +#line 6451 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6440 +#line 6450 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6443 +#line 6453 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6445 +#line 6455 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6444 +#line 6454 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6447 +#line 6457 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6449 +#line 6459 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6448 +#line 6458 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6451 +#line 6461 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6453 +#line 6463 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6452 +#line 6462 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6455 +#line 6465 [TRAINER_ELLIOT_4] = { -#line 6456 +#line 6466 .trainerName = _("ELLIOT"), -#line 6457 +#line 6467 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6458 +#line 6468 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6460 +#line 6470 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6461 +#line 6471 .doubleBattle = FALSE, -#line 6462 +#line 6472 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6464 +#line 6474 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6466 +#line 6476 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6465 +#line 6475 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6468 +#line 6478 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6470 +#line 6480 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6469 +#line 6479 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6472 +#line 6482 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6474 +#line 6484 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6473 +#line 6483 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6476 +#line 6486 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6478 +#line 6488 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6477 +#line 6487 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6480 +#line 6490 [TRAINER_ELLIOT_5] = { -#line 6481 +#line 6491 .trainerName = _("ELLIOT"), -#line 6482 +#line 6492 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6483 +#line 6493 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6485 +#line 6495 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6486 +#line 6496 .doubleBattle = FALSE, -#line 6487 +#line 6497 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6489 +#line 6499 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6491 +#line 6501 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6490 +#line 6500 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6493 +#line 6503 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6495 +#line 6505 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6494 +#line 6504 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6497 +#line 6507 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6499 +#line 6509 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6498 +#line 6508 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6501 +#line 6511 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6503 +#line 6513 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6502 +#line 6512 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6505 +#line 6515 [TRAINER_RONALD] = { -#line 6506 +#line 6516 .trainerName = _("RONALD"), -#line 6507 +#line 6517 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6508 +#line 6518 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6510 +#line 6520 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6511 +#line 6521 .doubleBattle = FALSE, -#line 6512 +#line 6522 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6514 +#line 6524 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6516 +#line 6526 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6515 +#line 6525 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6518 +#line 6528 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6520 +#line 6530 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6519 +#line 6529 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6522 +#line 6532 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6524 +#line 6534 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6523 +#line 6533 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6526 +#line 6536 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6528 +#line 6538 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6527 +#line 6537 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6530 +#line 6540 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6532 +#line 6542 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6531 +#line 6541 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6534 +#line 6544 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6536 +#line 6546 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6535 +#line 6545 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6538 +#line 6548 [TRAINER_JACOB] = { -#line 6539 +#line 6549 .trainerName = _("JACOB"), -#line 6540 +#line 6550 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6541 +#line 6551 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6543 +#line 6553 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6544 +#line 6554 .doubleBattle = FALSE, -#line 6545 +#line 6555 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6547 +#line 6557 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6549 +#line 6559 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6548 +#line 6558 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6551 +#line 6561 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6553 +#line 6563 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6552 +#line 6562 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6555 +#line 6565 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6557 +#line 6567 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 6556 +#line 6566 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6559 +#line 6569 [TRAINER_ANTHONY] = { -#line 6560 +#line 6570 .trainerName = _("ANTHONY"), -#line 6561 +#line 6571 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6562 +#line 6572 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6564 +#line 6574 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6565 +#line 6575 .doubleBattle = FALSE, -#line 6566 +#line 6576 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6568 +#line 6578 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6570 +#line 6580 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6569 +#line 6579 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6572 +#line 6582 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6574 +#line 6584 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6573 +#line 6583 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6576 +#line 6586 [TRAINER_BENJAMIN_1] = { -#line 6577 +#line 6587 .trainerName = _("BENJAMIN"), -#line 6578 +#line 6588 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6579 +#line 6589 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6581 +#line 6591 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6582 +#line 6592 .doubleBattle = FALSE, -#line 6583 +#line 6593 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6585 +#line 6595 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6587 +#line 6597 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6586 +#line 6596 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6589 +#line 6599 [TRAINER_BENJAMIN_2] = { -#line 6590 +#line 6600 .trainerName = _("BENJAMIN"), -#line 6591 +#line 6601 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6592 +#line 6602 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6594 +#line 6604 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6595 +#line 6605 .doubleBattle = FALSE, -#line 6596 +#line 6606 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6598 +#line 6608 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6600 +#line 6610 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6599 +#line 6609 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6602 +#line 6612 [TRAINER_BENJAMIN_3] = { -#line 6603 +#line 6613 .trainerName = _("BENJAMIN"), -#line 6604 +#line 6614 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6605 +#line 6615 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6607 +#line 6617 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6608 +#line 6618 .doubleBattle = FALSE, -#line 6609 +#line 6619 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6611 +#line 6621 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6613 +#line 6623 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6612 +#line 6622 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6615 +#line 6625 [TRAINER_BENJAMIN_4] = { -#line 6616 +#line 6626 .trainerName = _("BENJAMIN"), -#line 6617 +#line 6627 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6618 +#line 6628 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6620 +#line 6630 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6621 +#line 6631 .doubleBattle = FALSE, -#line 6622 +#line 6632 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6624 +#line 6634 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6626 +#line 6636 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6625 +#line 6635 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6628 +#line 6638 [TRAINER_BENJAMIN_5] = { -#line 6629 +#line 6639 .trainerName = _("BENJAMIN"), -#line 6630 +#line 6640 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6631 +#line 6641 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6633 +#line 6643 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6634 +#line 6644 .doubleBattle = FALSE, -#line 6635 +#line 6645 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6637 +#line 6647 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6639 +#line 6649 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6638 +#line 6648 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6641 +#line 6651 [TRAINER_ABIGAIL_1] = { -#line 6642 +#line 6652 .trainerName = _("ABIGAIL"), -#line 6643 +#line 6653 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6644 +#line 6654 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6645 +#line 6655 F_TRAINER_FEMALE | -#line 6646 +#line 6656 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6647 +#line 6657 .doubleBattle = FALSE, -#line 6648 +#line 6658 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6650 +#line 6660 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6652 +#line 6662 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6651 +#line 6661 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6654 +#line 6664 [TRAINER_JASMINE] = { -#line 6655 +#line 6665 .trainerName = _("JASMINE"), -#line 6656 +#line 6666 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6657 +#line 6667 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6658 +#line 6668 F_TRAINER_FEMALE | -#line 6659 +#line 6669 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6660 +#line 6670 .doubleBattle = FALSE, -#line 6661 +#line 6671 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6663 +#line 6673 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6665 +#line 6675 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6664 +#line 6674 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6667 +#line 6677 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6669 +#line 6679 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6668 +#line 6678 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6671 +#line 6681 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6673 +#line 6683 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6672 +#line 6682 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6675 +#line 6685 [TRAINER_ABIGAIL_2] = { -#line 6676 +#line 6686 .trainerName = _("ABIGAIL"), -#line 6677 +#line 6687 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6678 +#line 6688 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6679 +#line 6689 F_TRAINER_FEMALE | -#line 6680 +#line 6690 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6681 +#line 6691 .doubleBattle = FALSE, -#line 6682 +#line 6692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6684 +#line 6694 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6686 +#line 6696 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6685 +#line 6695 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6688 +#line 6698 [TRAINER_ABIGAIL_3] = { -#line 6689 +#line 6699 .trainerName = _("ABIGAIL"), -#line 6690 +#line 6700 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6691 +#line 6701 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6692 +#line 6702 F_TRAINER_FEMALE | -#line 6693 +#line 6703 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6694 +#line 6704 .doubleBattle = FALSE, -#line 6695 +#line 6705 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6697 +#line 6707 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6699 +#line 6709 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6698 +#line 6708 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6701 +#line 6711 [TRAINER_ABIGAIL_4] = { -#line 6702 +#line 6712 .trainerName = _("ABIGAIL"), -#line 6703 +#line 6713 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6704 +#line 6714 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6705 +#line 6715 F_TRAINER_FEMALE | -#line 6706 +#line 6716 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6707 +#line 6717 .doubleBattle = FALSE, -#line 6708 +#line 6718 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6710 +#line 6720 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6712 +#line 6722 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6711 +#line 6721 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6714 +#line 6724 [TRAINER_ABIGAIL_5] = { -#line 6715 +#line 6725 .trainerName = _("ABIGAIL"), -#line 6716 +#line 6726 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6717 +#line 6727 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6718 +#line 6728 F_TRAINER_FEMALE | -#line 6719 +#line 6729 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6720 +#line 6730 .doubleBattle = FALSE, -#line 6721 +#line 6731 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6723 +#line 6733 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6725 +#line 6735 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6724 +#line 6734 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6727 +#line 6737 [TRAINER_DYLAN_1] = { -#line 6728 +#line 6738 .trainerName = _("DYLAN"), -#line 6729 +#line 6739 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6730 +#line 6740 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6732 +#line 6742 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6733 +#line 6743 .doubleBattle = FALSE, -#line 6734 +#line 6744 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6736 +#line 6746 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6738 +#line 6748 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6737 +#line 6747 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6740 +#line 6750 [TRAINER_DYLAN_2] = { -#line 6741 +#line 6751 .trainerName = _("DYLAN"), -#line 6742 +#line 6752 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6743 +#line 6753 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6745 +#line 6755 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6746 +#line 6756 .doubleBattle = FALSE, -#line 6747 +#line 6757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6749 +#line 6759 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6751 +#line 6761 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6750 +#line 6760 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6753 +#line 6763 [TRAINER_DYLAN_3] = { -#line 6754 +#line 6764 .trainerName = _("DYLAN"), -#line 6755 +#line 6765 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6756 +#line 6766 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6758 +#line 6768 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6759 +#line 6769 .doubleBattle = FALSE, -#line 6760 +#line 6770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6762 +#line 6772 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6764 +#line 6774 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6763 +#line 6773 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6766 +#line 6776 [TRAINER_DYLAN_4] = { -#line 6767 +#line 6777 .trainerName = _("DYLAN"), -#line 6768 +#line 6778 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6769 +#line 6779 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6771 +#line 6781 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6772 +#line 6782 .doubleBattle = FALSE, -#line 6773 +#line 6783 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6775 +#line 6785 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6777 +#line 6787 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6776 +#line 6786 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6779 +#line 6789 [TRAINER_DYLAN_5] = { -#line 6780 +#line 6790 .trainerName = _("DYLAN"), -#line 6781 +#line 6791 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6782 +#line 6792 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6784 +#line 6794 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6785 +#line 6795 .doubleBattle = FALSE, -#line 6786 +#line 6796 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6788 +#line 6798 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6790 +#line 6800 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6789 +#line 6799 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6792 +#line 6802 [TRAINER_MARIA_1] = { -#line 6793 +#line 6803 .trainerName = _("MARIA"), -#line 6794 +#line 6804 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6795 +#line 6805 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6796 +#line 6806 F_TRAINER_FEMALE | -#line 6797 +#line 6807 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6798 +#line 6808 .doubleBattle = FALSE, -#line 6799 +#line 6809 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6801 +#line 6811 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6803 +#line 6813 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6802 +#line 6812 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6805 +#line 6815 [TRAINER_MARIA_2] = { -#line 6806 +#line 6816 .trainerName = _("MARIA"), -#line 6807 +#line 6817 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6808 +#line 6818 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6809 +#line 6819 F_TRAINER_FEMALE | -#line 6810 +#line 6820 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6811 +#line 6821 .doubleBattle = FALSE, -#line 6812 +#line 6822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6814 +#line 6824 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6816 +#line 6826 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6815 +#line 6825 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6818 +#line 6828 [TRAINER_MARIA_3] = { -#line 6819 +#line 6829 .trainerName = _("MARIA"), -#line 6820 +#line 6830 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6821 +#line 6831 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6822 +#line 6832 F_TRAINER_FEMALE | -#line 6823 +#line 6833 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6824 +#line 6834 .doubleBattle = FALSE, -#line 6825 +#line 6835 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6827 +#line 6837 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6829 +#line 6839 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6828 +#line 6838 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6831 +#line 6841 [TRAINER_MARIA_4] = { -#line 6832 +#line 6842 .trainerName = _("MARIA"), -#line 6833 +#line 6843 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6834 +#line 6844 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6835 +#line 6845 F_TRAINER_FEMALE | -#line 6836 +#line 6846 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6837 +#line 6847 .doubleBattle = FALSE, -#line 6838 +#line 6848 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6840 +#line 6850 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6842 +#line 6852 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6841 +#line 6851 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6844 +#line 6854 [TRAINER_MARIA_5] = { -#line 6845 +#line 6855 .trainerName = _("MARIA"), -#line 6846 +#line 6856 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6847 +#line 6857 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6848 +#line 6858 F_TRAINER_FEMALE | -#line 6849 +#line 6859 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6850 +#line 6860 .doubleBattle = FALSE, -#line 6851 +#line 6861 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6853 +#line 6863 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6855 +#line 6865 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6854 +#line 6864 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6857 +#line 6867 [TRAINER_CAMDEN] = { -#line 6858 +#line 6868 .trainerName = _("CAMDEN"), -#line 6859 +#line 6869 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6860 +#line 6870 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6862 +#line 6872 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6863 +#line 6873 .doubleBattle = FALSE, -#line 6864 +#line 6874 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6866 +#line 6876 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6868 +#line 6878 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6867 +#line 6877 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6870 +#line 6880 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6872 +#line 6882 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6871 +#line 6881 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6874 +#line 6884 [TRAINER_DEMETRIUS] = { -#line 6875 +#line 6885 .trainerName = _("DEMETRIUS"), -#line 6876 +#line 6886 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6877 +#line 6887 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6879 +#line 6889 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6880 +#line 6890 .doubleBattle = FALSE, -#line 6881 +#line 6891 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6883 +#line 6893 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6885 +#line 6895 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6884 +#line 6894 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6887 +#line 6897 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6889 +#line 6899 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6888 +#line 6898 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6891 +#line 6901 [TRAINER_ISAIAH_1] = { -#line 6892 +#line 6902 .trainerName = _("ISAIAH"), -#line 6893 +#line 6903 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6894 +#line 6904 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6896 +#line 6906 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6897 +#line 6907 .doubleBattle = FALSE, -#line 6898 +#line 6908 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6900 +#line 6910 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6902 +#line 6912 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6901 +#line 6911 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6904 +#line 6914 [TRAINER_PABLO_1] = { -#line 6905 +#line 6915 .trainerName = _("PABLO"), -#line 6906 +#line 6916 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6907 +#line 6917 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6909 +#line 6919 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6910 +#line 6920 .doubleBattle = FALSE, -#line 6911 +#line 6921 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6913 +#line 6923 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6915 +#line 6925 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6914 +#line 6924 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6917 +#line 6927 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6919 +#line 6929 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6918 +#line 6928 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6921 +#line 6931 [TRAINER_CHASE] = { -#line 6922 +#line 6932 .trainerName = _("CHASE"), -#line 6923 +#line 6933 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6924 +#line 6934 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6926 +#line 6936 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6927 +#line 6937 .doubleBattle = FALSE, -#line 6928 +#line 6938 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6930 +#line 6940 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6932 +#line 6942 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6931 +#line 6941 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6934 +#line 6944 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6936 +#line 6946 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6935 +#line 6945 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6938 +#line 6948 [TRAINER_ISAIAH_2] = { -#line 6939 +#line 6949 .trainerName = _("ISAIAH"), -#line 6940 +#line 6950 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6941 +#line 6951 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6943 +#line 6953 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6944 +#line 6954 .doubleBattle = FALSE, -#line 6945 +#line 6955 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6947 +#line 6957 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6949 +#line 6959 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6948 +#line 6958 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6951 +#line 6961 [TRAINER_ISAIAH_3] = { -#line 6952 +#line 6962 .trainerName = _("ISAIAH"), -#line 6953 +#line 6963 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6954 +#line 6964 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6956 +#line 6966 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6957 +#line 6967 .doubleBattle = FALSE, -#line 6958 +#line 6968 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6960 +#line 6970 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6962 +#line 6972 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6961 +#line 6971 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6964 +#line 6974 [TRAINER_ISAIAH_4] = { -#line 6965 +#line 6975 .trainerName = _("ISAIAH"), -#line 6966 +#line 6976 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6967 +#line 6977 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6969 +#line 6979 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6970 +#line 6980 .doubleBattle = FALSE, -#line 6971 +#line 6981 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6973 +#line 6983 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6975 +#line 6985 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6974 +#line 6984 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6977 +#line 6987 [TRAINER_ISAIAH_5] = { -#line 6978 +#line 6988 .trainerName = _("ISAIAH"), -#line 6979 +#line 6989 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6980 +#line 6990 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6982 +#line 6992 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6983 +#line 6993 .doubleBattle = FALSE, -#line 6984 +#line 6994 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6986 +#line 6996 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6988 +#line 6998 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6987 +#line 6997 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6990 +#line 7000 [TRAINER_ISOBEL] = { -#line 6991 +#line 7001 .trainerName = _("ISOBEL"), -#line 6992 +#line 7002 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6993 +#line 7003 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 6994 +#line 7004 F_TRAINER_FEMALE | -#line 6995 +#line 7005 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6996 +#line 7006 .doubleBattle = FALSE, -#line 6997 +#line 7007 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6999 +#line 7009 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7001 +#line 7011 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7000 +#line 7010 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7003 +#line 7013 [TRAINER_DONNY] = { -#line 7004 +#line 7014 .trainerName = _("DONNY"), -#line 7005 +#line 7015 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7006 +#line 7016 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7007 +#line 7017 F_TRAINER_FEMALE | -#line 7008 +#line 7018 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7009 +#line 7019 .doubleBattle = FALSE, -#line 7010 +#line 7020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7012 +#line 7022 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7014 +#line 7024 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7013 +#line 7023 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7016 +#line 7026 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7018 +#line 7028 .iv = TRAINER_PARTY_IVS(19, 19, 19, 19, 19, 19), -#line 7017 +#line 7027 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7020 +#line 7030 [TRAINER_TALIA] = { -#line 7021 +#line 7031 .trainerName = _("TALIA"), -#line 7022 +#line 7032 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7023 +#line 7033 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7024 +#line 7034 F_TRAINER_FEMALE | -#line 7025 +#line 7035 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7026 +#line 7036 .doubleBattle = FALSE, -#line 7027 +#line 7037 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7029 +#line 7039 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7031 +#line 7041 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7030 +#line 7040 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7033 +#line 7043 [TRAINER_KATELYN_1] = { -#line 7034 +#line 7044 .trainerName = _("KATELYN"), -#line 7035 +#line 7045 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7036 +#line 7046 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7037 +#line 7047 F_TRAINER_FEMALE | -#line 7038 +#line 7048 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7039 +#line 7049 .doubleBattle = FALSE, -#line 7040 +#line 7050 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7042 +#line 7052 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7044 +#line 7054 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7043 +#line 7053 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7046 +#line 7056 [TRAINER_ALLISON] = { -#line 7047 +#line 7057 .trainerName = _("ALLISON"), -#line 7048 +#line 7058 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7049 +#line 7059 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7050 +#line 7060 F_TRAINER_FEMALE | -#line 7051 +#line 7061 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7052 +#line 7062 .doubleBattle = FALSE, -#line 7053 +#line 7063 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7055 +#line 7065 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7057 +#line 7067 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7056 +#line 7066 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7059 +#line 7069 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7061 +#line 7071 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 7060 +#line 7070 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7063 +#line 7073 [TRAINER_KATELYN_2] = { -#line 7064 +#line 7074 .trainerName = _("KATELYN"), -#line 7065 +#line 7075 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7066 +#line 7076 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7067 +#line 7077 F_TRAINER_FEMALE | -#line 7068 +#line 7078 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7069 +#line 7079 .doubleBattle = FALSE, -#line 7070 +#line 7080 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7072 +#line 7082 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7074 +#line 7084 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7073 +#line 7083 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7076 +#line 7086 [TRAINER_KATELYN_3] = { -#line 7077 +#line 7087 .trainerName = _("KATELYN"), -#line 7078 +#line 7088 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7079 +#line 7089 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7080 +#line 7090 F_TRAINER_FEMALE | -#line 7081 +#line 7091 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7082 +#line 7092 .doubleBattle = FALSE, -#line 7083 +#line 7093 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7085 +#line 7095 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7087 +#line 7097 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7086 +#line 7096 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7089 +#line 7099 [TRAINER_KATELYN_4] = { -#line 7090 +#line 7100 .trainerName = _("KATELYN"), -#line 7091 +#line 7101 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7092 +#line 7102 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7093 +#line 7103 F_TRAINER_FEMALE | -#line 7094 +#line 7104 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7095 +#line 7105 .doubleBattle = FALSE, -#line 7096 +#line 7106 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7098 +#line 7108 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7100 +#line 7110 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7099 +#line 7109 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7102 +#line 7112 [TRAINER_KATELYN_5] = { -#line 7103 +#line 7113 .trainerName = _("KATELYN"), -#line 7104 +#line 7114 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7105 +#line 7115 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7106 +#line 7116 F_TRAINER_FEMALE | -#line 7107 +#line 7117 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7108 +#line 7118 .doubleBattle = FALSE, -#line 7109 +#line 7119 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7111 +#line 7121 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7113 +#line 7123 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7112 +#line 7122 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7115 +#line 7125 [TRAINER_NICOLAS_1] = { -#line 7116 +#line 7126 .trainerName = _("NICOLAS"), -#line 7117 +#line 7127 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7118 +#line 7128 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7120 +#line 7130 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7121 +#line 7131 .doubleBattle = FALSE, -#line 7122 +#line 7132 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7124 +#line 7134 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7126 +#line 7136 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7125 +#line 7135 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7128 +#line 7138 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7130 +#line 7140 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7129 +#line 7139 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7132 +#line 7142 [TRAINER_NICOLAS_2] = { -#line 7133 +#line 7143 .trainerName = _("NICOLAS"), -#line 7134 +#line 7144 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7135 +#line 7145 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7137 +#line 7147 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7138 +#line 7148 .doubleBattle = FALSE, -#line 7139 +#line 7149 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7141 +#line 7151 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7143 +#line 7153 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7142 +#line 7152 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7145 +#line 7155 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7147 +#line 7157 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7146 +#line 7156 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7149 +#line 7159 [TRAINER_NICOLAS_3] = { -#line 7150 +#line 7160 .trainerName = _("NICOLAS"), -#line 7151 +#line 7161 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7152 +#line 7162 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7154 +#line 7164 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7155 +#line 7165 .doubleBattle = FALSE, -#line 7156 +#line 7166 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7158 +#line 7168 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7160 +#line 7170 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7159 +#line 7169 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7162 +#line 7172 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7164 +#line 7174 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7163 +#line 7173 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7166 +#line 7176 [TRAINER_NICOLAS_4] = { -#line 7167 +#line 7177 .trainerName = _("NICOLAS"), -#line 7168 +#line 7178 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7169 +#line 7179 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7171 +#line 7181 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7172 +#line 7182 .doubleBattle = FALSE, -#line 7173 +#line 7183 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7175 +#line 7185 .species = SPECIES_BAGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7177 +#line 7187 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7176 +#line 7186 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7179 +#line 7189 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7181 +#line 7191 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7180 +#line 7190 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7183 +#line 7193 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7185 +#line 7195 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7184 +#line 7194 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7187 +#line 7197 [TRAINER_NICOLAS_5] = { -#line 7188 +#line 7198 .trainerName = _("NICOLAS"), -#line 7189 +#line 7199 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7190 +#line 7200 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7192 +#line 7202 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7193 +#line 7203 .doubleBattle = FALSE, -#line 7194 +#line 7204 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7196 +#line 7206 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7198 +#line 7208 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7197 +#line 7207 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7200 +#line 7210 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7202 +#line 7212 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7201 +#line 7211 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7204 +#line 7214 .species = SPECIES_SHELGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7204 +#line 7214 .heldItem = ITEM_DRAGON_FANG, -#line 7206 +#line 7216 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7205 +#line 7215 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7208 +#line 7218 [TRAINER_AARON] = { -#line 7209 +#line 7219 .trainerName = _("AARON"), -#line 7210 +#line 7220 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7211 +#line 7221 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7213 +#line 7223 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7214 +#line 7224 .doubleBattle = FALSE, -#line 7215 +#line 7225 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7217 +#line 7227 .species = SPECIES_BAGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7219 +#line 7229 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 7218 +#line 7228 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7220 +#line 7230 MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, @@ -18150,913 +18150,895 @@ F_TRAINER_FEMALE | }, }, }, -#line 7225 +#line 7235 [TRAINER_PERRY] = { -#line 7226 +#line 7236 .trainerName = _("PERRY"), -#line 7227 +#line 7237 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7228 +#line 7238 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7230 +#line 7240 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7231 +#line 7241 .doubleBattle = FALSE, -#line 7232 +#line 7242 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7234 +#line 7244 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7236 +#line 7246 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7235 +#line 7245 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7238 +#line 7248 [TRAINER_HUGH] = { -#line 7239 +#line 7249 .trainerName = _("HUGH"), -#line 7240 +#line 7250 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7241 +#line 7251 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7243 +#line 7253 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7244 +#line 7254 .doubleBattle = FALSE, -#line 7245 +#line 7255 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7247 +#line 7257 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7249 +#line 7259 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7248 +#line 7258 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7251 +#line 7261 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7253 +#line 7263 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7252 +#line 7262 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7255 +#line 7265 [TRAINER_PHIL] = { -#line 7256 +#line 7266 .trainerName = _("PHIL"), -#line 7257 +#line 7267 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7258 +#line 7268 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7260 +#line 7270 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7261 +#line 7271 .doubleBattle = FALSE, -#line 7262 +#line 7272 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7264 +#line 7274 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7266 +#line 7276 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7265 +#line 7275 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7268 +#line 7278 [TRAINER_JARED] = { -#line 7269 +#line 7279 .trainerName = _("JARED"), -#line 7270 +#line 7280 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7271 +#line 7281 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7273 +#line 7283 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7274 +#line 7284 .doubleBattle = FALSE, -#line 7275 +#line 7285 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7277 +#line 7287 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7279 +#line 7289 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7278 +#line 7288 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7281 +#line 7291 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7283 +#line 7293 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7282 +#line 7292 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7285 +#line 7295 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7287 +#line 7297 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7286 +#line 7296 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7289 +#line 7299 [TRAINER_HUMBERTO] = { -#line 7290 +#line 7300 .trainerName = _("HUMBERTO"), -#line 7291 +#line 7301 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7292 +#line 7302 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7294 +#line 7304 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7295 +#line 7305 .doubleBattle = FALSE, -#line 7296 +#line 7306 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7298 +#line 7308 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7300 +#line 7310 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 7299 +#line 7309 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7302 +#line 7312 [TRAINER_PRESLEY] = { -#line 7303 +#line 7313 .trainerName = _("PRESLEY"), -#line 7304 +#line 7314 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7305 +#line 7315 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7307 +#line 7317 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7308 +#line 7318 .doubleBattle = FALSE, -#line 7309 +#line 7319 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7311 +#line 7321 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7313 +#line 7323 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7312 +#line 7322 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7315 +#line 7325 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7317 +#line 7327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7316 +#line 7326 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7319 +#line 7329 [TRAINER_EDWARDO] = { -#line 7320 +#line 7330 .trainerName = _("EDWARDO"), -#line 7321 +#line 7331 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7322 +#line 7332 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7324 +#line 7334 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7325 +#line 7335 .doubleBattle = FALSE, -#line 7326 +#line 7336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7328 +#line 7338 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7330 +#line 7340 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7329 +#line 7339 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7332 +#line 7342 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7334 +#line 7344 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7333 +#line 7343 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7336 +#line 7346 [TRAINER_COLIN] = { -#line 7337 +#line 7347 .trainerName = _("COLIN"), -#line 7338 +#line 7348 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7339 +#line 7349 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7341 +#line 7351 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7342 +#line 7352 .doubleBattle = FALSE, -#line 7343 +#line 7353 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7345 +#line 7355 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7347 +#line 7357 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7346 +#line 7356 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7349 +#line 7359 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7351 +#line 7361 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7350 +#line 7360 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7353 +#line 7363 [TRAINER_ROBERT_1] = { -#line 7354 +#line 7364 .trainerName = _("ROBERT"), -#line 7355 +#line 7365 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7356 +#line 7366 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7358 +#line 7368 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7359 +#line 7369 .doubleBattle = FALSE, -#line 7360 +#line 7370 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7362 +#line 7372 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7364 +#line 7374 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7363 +#line 7373 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7366 +#line 7376 [TRAINER_BENNY] = { -#line 7367 +#line 7377 .trainerName = _("BENNY"), -#line 7368 +#line 7378 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7369 +#line 7379 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7371 +#line 7381 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7372 +#line 7382 .doubleBattle = FALSE, -#line 7373 +#line 7383 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7375 +#line 7385 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7377 +#line 7387 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7376 +#line 7386 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7379 +#line 7389 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7381 +#line 7391 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7380 +#line 7390 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7383 +#line 7393 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7385 +#line 7395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7384 +#line 7394 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7387 +#line 7397 [TRAINER_CHESTER] = { -#line 7388 +#line 7398 .trainerName = _("CHESTER"), -#line 7389 +#line 7399 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7390 +#line 7400 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7392 +#line 7402 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7393 +#line 7403 .doubleBattle = FALSE, -#line 7394 +#line 7404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7396 +#line 7406 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7398 +#line 7408 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7397 +#line 7407 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7400 +#line 7410 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7402 +#line 7412 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7401 +#line 7411 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7404 +#line 7414 [TRAINER_ROBERT_2] = { -#line 7405 +#line 7415 .trainerName = _("ROBERT"), -#line 7406 +#line 7416 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7407 +#line 7417 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7409 +#line 7419 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7410 +#line 7420 .doubleBattle = FALSE, -#line 7411 +#line 7421 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7413 +#line 7423 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7415 +#line 7425 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7414 +#line 7424 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7417 +#line 7427 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7419 +#line 7429 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7418 +#line 7428 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7421 +#line 7431 [TRAINER_ROBERT_3] = { -#line 7422 +#line 7432 .trainerName = _("ROBERT"), -#line 7423 +#line 7433 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7424 +#line 7434 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7426 +#line 7436 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7427 +#line 7437 .doubleBattle = FALSE, -#line 7428 +#line 7438 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7430 +#line 7440 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7432 +#line 7442 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7431 +#line 7441 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7434 +#line 7444 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7436 +#line 7446 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7435 +#line 7445 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7438 +#line 7448 [TRAINER_ROBERT_4] = { -#line 7439 +#line 7449 .trainerName = _("ROBERT"), -#line 7440 +#line 7450 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7441 +#line 7451 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7443 +#line 7453 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7444 +#line 7454 .doubleBattle = FALSE, -#line 7445 +#line 7455 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7447 +#line 7457 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7449 +#line 7459 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7448 +#line 7458 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7451 +#line 7461 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7453 +#line 7463 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7452 +#line 7462 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7455 +#line 7465 [TRAINER_ROBERT_5] = { -#line 7456 +#line 7466 .trainerName = _("ROBERT"), -#line 7457 +#line 7467 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7458 +#line 7468 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7460 +#line 7470 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7461 +#line 7471 .doubleBattle = FALSE, -#line 7462 +#line 7472 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7464 +#line 7474 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7466 +#line 7476 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7465 +#line 7475 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7468 +#line 7478 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7470 +#line 7480 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7469 +#line 7479 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7472 +#line 7482 [TRAINER_ALEX] = { -#line 7473 +#line 7483 .trainerName = _("ALEX"), -#line 7474 +#line 7484 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7475 +#line 7485 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7477 +#line 7487 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7478 +#line 7488 .doubleBattle = FALSE, -#line 7479 +#line 7489 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7481 +#line 7491 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7483 +#line 7493 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7482 +#line 7492 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7485 +#line 7495 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7487 +#line 7497 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7486 +#line 7496 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7489 +#line 7499 [TRAINER_BECK] = { -#line 7490 +#line 7500 .trainerName = _("BECK"), -#line 7491 +#line 7501 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7492 +#line 7502 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7494 +#line 7504 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7495 +#line 7505 .doubleBattle = FALSE, -#line 7496 +#line 7506 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7498 +#line 7508 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7500 +#line 7510 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7499 +#line 7509 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7502 +#line 7512 [TRAINER_YASU] = { -#line 7503 +#line 7513 .trainerName = _("YASU"), -#line 7504 +#line 7514 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7505 +#line 7515 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7507 +#line 7517 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7508 +#line 7518 .doubleBattle = FALSE, -#line 7509 +#line 7519 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7511 +#line 7521 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7513 +#line 7523 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7512 +#line 7522 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7515 +#line 7525 [TRAINER_TAKASHI] = { -#line 7516 +#line 7526 .trainerName = _("TAKASHI"), -#line 7517 +#line 7527 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7518 +#line 7528 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7520 +#line 7530 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7521 +#line 7531 .doubleBattle = FALSE, -#line 7522 +#line 7532 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7524 +#line 7534 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7526 +#line 7536 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7525 +#line 7535 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7528 +#line 7538 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7530 +#line 7540 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7529 +#line 7539 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7532 +#line 7542 [TRAINER_DIANNE] = { -#line 7533 +#line 7543 .trainerName = _("DIANNE"), -#line 7534 +#line 7544 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 7535 +#line 7545 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 7536 +#line 7546 F_TRAINER_FEMALE | -#line 7537 +#line 7547 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7538 +#line 7548 .items = { ITEM_FULL_RESTORE }, -#line 7539 +#line 7549 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7541 +#line 7551 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7543 +#line 7553 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7542 +#line 7552 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7544 +#line 7554 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, { -#line 7547 +#line 7557 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7549 +#line 7559 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7548 +#line 7558 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7550 +#line 7560 MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, }, }, }, }, -#line 7553 +#line 7563 [TRAINER_JANI] = { -#line 7554 +#line 7564 .trainerName = _("JANI"), -#line 7555 +#line 7565 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 7556 +#line 7566 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 7557 +#line 7567 F_TRAINER_FEMALE | -#line 7558 +#line 7568 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 7559 +#line 7569 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7561 +#line 7571 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7563 +#line 7573 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7562 +#line 7572 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7565 +#line 7575 [TRAINER_LAO_1] = { -#line 7566 +#line 7576 .trainerName = _("LAO"), -#line 7567 +#line 7577 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7568 +#line 7578 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7570 +#line 7580 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7571 +#line 7581 .doubleBattle = FALSE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7573 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7575 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7574 - .lvl = 17, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7576 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SMOG, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7581 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, #line 7583 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7585 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7582 +#line 7584 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7584 +#line 7586 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, @@ -19064,17 +19046,35 @@ F_TRAINER_FEMALE | }, }, { -#line 7589 +#line 7591 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7591 +#line 7593 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7590 +#line 7592 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7592 +#line 7594 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SMOG, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7599 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7601 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7600 + .lvl = 17, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7602 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19083,111 +19083,76 @@ F_TRAINER_FEMALE | }, }, }, -#line 7597 +#line 7607 [TRAINER_LUNG] = { -#line 7598 +#line 7608 .trainerName = _("LUNG"), -#line 7599 +#line 7609 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7600 +#line 7610 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7602 +#line 7612 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7603 +#line 7613 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7605 +#line 7615 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7607 +#line 7617 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7606 +#line 7616 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7609 +#line 7619 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7611 +#line 7621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7610 +#line 7620 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7613 +#line 7623 [TRAINER_LAO_2] = { -#line 7614 +#line 7624 .trainerName = _("LAO"), -#line 7615 +#line 7625 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7616 +#line 7626 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7618 +#line 7628 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7619 +#line 7629 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7621 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7623 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7622 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7624 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7629 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, #line 7631 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7630 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7632 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7636 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7638 +#line 7633 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7637 +#line 7632 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7639 +#line 7634 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19195,70 +19160,87 @@ F_TRAINER_FEMALE | }, }, { -#line 7644 +#line 7639 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7646 +#line 7641 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7645 +#line 7640 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7642 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { +#line 7646 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7648 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7647 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7649 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7654 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7656 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7655 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7647 +#line 7657 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7650 +#line 7660 [TRAINER_LAO_3] = { -#line 7651 +#line 7661 .trainerName = _("LAO"), -#line 7652 +#line 7662 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7653 +#line 7663 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7655 +#line 7665 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7656 +#line 7666 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7658 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7660 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7659 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7661 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7666 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, #line 7668 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7670 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7667 +#line 7669 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7669 +#line 7671 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19266,190 +19248,190 @@ F_TRAINER_FEMALE | }, }, { -#line 7674 +#line 7676 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7676 +#line 7678 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7675 +#line 7677 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7677 +#line 7679 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7684 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7686 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7685 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7687 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7681 +#line 7691 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7683 +#line 7693 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7682 +#line 7692 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7684 +#line 7694 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7687 +#line 7697 [TRAINER_LAO_4] = { -#line 7688 +#line 7698 .trainerName = _("LAO"), -#line 7689 +#line 7699 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7690 +#line 7700 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7692 +#line 7702 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7693 +#line 7703 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7695 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7697 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7696 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7698 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7702 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7704 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7703 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { #line 7705 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7709 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7711 +#line 7707 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7710 +#line 7706 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7712 +#line 7708 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7716 +#line 7712 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7718 +#line 7714 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7717 +#line 7713 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7715 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { +#line 7719 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7721 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7720 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7722 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { +#line 7726 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7728 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7727 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7719 +#line 7729 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7722 +#line 7732 [TRAINER_LAO_5] = { -#line 7723 +#line 7733 .trainerName = _("LAO"), -#line 7724 +#line 7734 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7725 +#line 7735 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7727 +#line 7737 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7728 +#line 7738 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7730 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7732 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7731 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7733 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7737 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7739 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7738 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { #line 7740 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7745 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7747 +#line 7742 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7746 +#line 7741 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { +#line 7743 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { +#line 7747 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7749 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), #line 7748 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7750 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19457,419 +19439,437 @@ F_TRAINER_FEMALE | }, }, { -#line 7753 +#line 7755 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7757 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7756 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7758 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7763 .species = SPECIES_WEEZING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7753 +#line 7763 .heldItem = ITEM_SMOKE_BALL, -#line 7755 +#line 7765 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7754 +#line 7764 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7756 +#line 7766 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7759 +#line 7769 [TRAINER_JOCELYN] = { -#line 7760 +#line 7770 .trainerName = _("JOCELYN"), -#line 7761 +#line 7771 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7762 +#line 7772 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7763 +#line 7773 F_TRAINER_FEMALE | -#line 7764 +#line 7774 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7765 +#line 7775 .doubleBattle = FALSE, -#line 7766 +#line 7776 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7768 +#line 7778 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7770 +#line 7780 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7769 +#line 7779 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7772 +#line 7782 [TRAINER_LAURA] = { -#line 7773 +#line 7783 .trainerName = _("LAURA"), -#line 7774 +#line 7784 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7775 +#line 7785 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7776 +#line 7786 F_TRAINER_FEMALE | -#line 7777 +#line 7787 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7778 +#line 7788 .doubleBattle = FALSE, -#line 7779 +#line 7789 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7781 +#line 7791 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7783 +#line 7793 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7782 +#line 7792 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7785 +#line 7795 [TRAINER_CYNDY_1] = { -#line 7786 +#line 7796 .trainerName = _("CYNDY"), -#line 7787 +#line 7797 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7788 +#line 7798 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7789 +#line 7799 F_TRAINER_FEMALE | -#line 7790 +#line 7800 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7791 +#line 7801 .doubleBattle = FALSE, -#line 7792 +#line 7802 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7794 +#line 7804 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7796 +#line 7806 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7795 +#line 7805 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7798 +#line 7808 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7800 +#line 7810 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7799 +#line 7809 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7802 +#line 7812 [TRAINER_CORA] = { -#line 7803 +#line 7813 .trainerName = _("CORA"), -#line 7804 +#line 7814 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7805 +#line 7815 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7806 +#line 7816 F_TRAINER_FEMALE | -#line 7807 +#line 7817 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7808 +#line 7818 .doubleBattle = FALSE, -#line 7809 +#line 7819 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7811 +#line 7821 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7813 +#line 7823 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7812 +#line 7822 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7815 +#line 7825 [TRAINER_PAULA] = { -#line 7816 +#line 7826 .trainerName = _("PAULA"), -#line 7817 +#line 7827 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7818 +#line 7828 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7819 +#line 7829 F_TRAINER_FEMALE | -#line 7820 +#line 7830 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7821 +#line 7831 .doubleBattle = FALSE, -#line 7822 +#line 7832 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7824 +#line 7834 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7826 +#line 7836 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7825 +#line 7835 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7828 +#line 7838 [TRAINER_CYNDY_2] = { -#line 7829 +#line 7839 .trainerName = _("CYNDY"), -#line 7830 +#line 7840 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7831 +#line 7841 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7832 +#line 7842 F_TRAINER_FEMALE | -#line 7833 +#line 7843 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7834 +#line 7844 .doubleBattle = FALSE, -#line 7835 +#line 7845 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7837 +#line 7847 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7839 +#line 7849 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7838 +#line 7848 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7841 +#line 7851 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7843 +#line 7853 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7842 +#line 7852 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7845 +#line 7855 [TRAINER_CYNDY_3] = { -#line 7846 +#line 7856 .trainerName = _("CYNDY"), -#line 7847 +#line 7857 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7848 +#line 7858 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7849 +#line 7859 F_TRAINER_FEMALE | -#line 7850 +#line 7860 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7851 +#line 7861 .doubleBattle = FALSE, -#line 7852 +#line 7862 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7854 +#line 7864 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7856 +#line 7866 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7855 +#line 7865 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7858 +#line 7868 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7860 +#line 7870 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7859 +#line 7869 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7862 +#line 7872 [TRAINER_CYNDY_4] = { -#line 7863 +#line 7873 .trainerName = _("CYNDY"), -#line 7864 +#line 7874 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7865 +#line 7875 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7866 +#line 7876 F_TRAINER_FEMALE | -#line 7867 +#line 7877 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7868 +#line 7878 .doubleBattle = FALSE, -#line 7869 +#line 7879 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7871 +#line 7881 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7873 +#line 7883 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7872 +#line 7882 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7875 +#line 7885 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7877 +#line 7887 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7876 +#line 7886 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7879 +#line 7889 [TRAINER_CYNDY_5] = { -#line 7880 +#line 7890 .trainerName = _("CYNDY"), -#line 7881 +#line 7891 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7882 +#line 7892 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7883 +#line 7893 F_TRAINER_FEMALE | -#line 7884 +#line 7894 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7885 +#line 7895 .doubleBattle = FALSE, -#line 7886 +#line 7896 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7888 +#line 7898 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7890 +#line 7900 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7889 +#line 7899 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7892 +#line 7902 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7894 +#line 7904 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7893 +#line 7903 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7896 +#line 7906 [TRAINER_MADELINE_1] = { -#line 7897 +#line 7907 .trainerName = _("MADELINE"), -#line 7898 +#line 7908 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7899 +#line 7909 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7900 +#line 7910 F_TRAINER_FEMALE | -#line 7901 +#line 7911 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7902 +#line 7912 .doubleBattle = FALSE, -#line 7903 +#line 7913 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7905 +#line 7915 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7907 +#line 7917 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7906 +#line 7916 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7908 +#line 7918 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -19878,84 +19878,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 7913 +#line 7923 [TRAINER_CLARISSA] = { -#line 7914 +#line 7924 .trainerName = _("CLARISSA"), -#line 7915 +#line 7925 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7916 +#line 7926 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7917 +#line 7927 F_TRAINER_FEMALE | -#line 7918 +#line 7928 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7919 +#line 7929 .doubleBattle = FALSE, -#line 7920 +#line 7930 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7922 +#line 7932 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7924 +#line 7934 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7923 +#line 7933 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7926 +#line 7936 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7928 +#line 7938 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7927 +#line 7937 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7930 +#line 7940 [TRAINER_ANGELICA] = { -#line 7931 +#line 7941 .trainerName = _("ANGELICA"), -#line 7932 +#line 7942 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7933 +#line 7943 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7934 +#line 7944 F_TRAINER_FEMALE | -#line 7935 +#line 7945 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7936 +#line 7946 .doubleBattle = FALSE, -#line 7937 +#line 7947 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7939 +#line 7949 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7941 +#line 7951 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 7940 +#line 7950 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7942 +#line 7952 MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, @@ -19964,39 +19964,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7947 +#line 7957 [TRAINER_MADELINE_2] = { -#line 7948 +#line 7958 .trainerName = _("MADELINE"), -#line 7949 +#line 7959 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7950 +#line 7960 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7951 +#line 7961 F_TRAINER_FEMALE | -#line 7952 +#line 7962 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7953 +#line 7963 .doubleBattle = FALSE, -#line 7954 +#line 7964 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7956 +#line 7966 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7958 +#line 7968 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7957 +#line 7967 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7959 +#line 7969 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -20005,39 +20005,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7964 +#line 7974 [TRAINER_MADELINE_3] = { -#line 7965 +#line 7975 .trainerName = _("MADELINE"), -#line 7966 +#line 7976 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7967 +#line 7977 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7968 +#line 7978 F_TRAINER_FEMALE | -#line 7969 +#line 7979 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7970 +#line 7980 .doubleBattle = FALSE, -#line 7971 +#line 7981 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7973 +#line 7983 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7975 +#line 7985 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7974 +#line 7984 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7976 +#line 7986 MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20046,39 +20046,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7981 +#line 7991 [TRAINER_MADELINE_4] = { -#line 7982 +#line 7992 .trainerName = _("MADELINE"), -#line 7983 +#line 7993 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7984 +#line 7994 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7985 +#line 7995 F_TRAINER_FEMALE | -#line 7986 +#line 7996 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7987 +#line 7997 .doubleBattle = FALSE, -#line 7988 +#line 7998 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7990 +#line 8000 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7992 +#line 8002 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7991 +#line 8001 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7993 +#line 8003 MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, @@ -20086,17 +20086,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7998 +#line 8008 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8000 +#line 8010 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7999 +#line 8009 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8001 +#line 8011 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20105,39 +20105,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8006 +#line 8016 [TRAINER_MADELINE_5] = { -#line 8007 +#line 8017 .trainerName = _("MADELINE"), -#line 8008 +#line 8018 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 8009 +#line 8019 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 8010 +#line 8020 F_TRAINER_FEMALE | -#line 8011 +#line 8021 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 8012 +#line 8022 .doubleBattle = FALSE, -#line 8013 +#line 8023 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8015 +#line 8025 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8017 +#line 8027 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8016 +#line 8026 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8018 +#line 8028 MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, @@ -20145,17 +20145,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8023 +#line 8033 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8025 +#line 8035 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8024 +#line 8034 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8026 +#line 8036 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, @@ -20164,1145 +20164,1145 @@ F_TRAINER_FEMALE | }, }, }, -#line 8031 +#line 8041 [TRAINER_BEVERLY] = { -#line 8032 +#line 8042 .trainerName = _("BEVERLY"), -#line 8033 +#line 8043 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8034 +#line 8044 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8035 +#line 8045 F_TRAINER_FEMALE | -#line 8036 +#line 8046 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8037 +#line 8047 .doubleBattle = FALSE, -#line 8038 +#line 8048 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8040 +#line 8050 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8042 +#line 8052 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8041 +#line 8051 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8044 +#line 8054 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8046 +#line 8056 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8045 +#line 8055 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8048 +#line 8058 [TRAINER_IMANI] = { -#line 8049 +#line 8059 .trainerName = _("IMANI"), -#line 8050 +#line 8060 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8051 +#line 8061 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8052 +#line 8062 F_TRAINER_FEMALE | -#line 8053 +#line 8063 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8054 +#line 8064 .doubleBattle = FALSE, -#line 8055 +#line 8065 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8057 +#line 8067 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8059 +#line 8069 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8058 +#line 8068 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8061 +#line 8071 [TRAINER_KYLA] = { -#line 8062 +#line 8072 .trainerName = _("KYLA"), -#line 8063 +#line 8073 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8064 +#line 8074 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8065 +#line 8075 F_TRAINER_FEMALE | -#line 8066 +#line 8076 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8067 +#line 8077 .doubleBattle = FALSE, -#line 8068 +#line 8078 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8070 +#line 8080 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8072 +#line 8082 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8071 +#line 8081 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8074 +#line 8084 [TRAINER_DENISE] = { -#line 8075 +#line 8085 .trainerName = _("DENISE"), -#line 8076 +#line 8086 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8077 +#line 8087 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8078 +#line 8088 F_TRAINER_FEMALE | -#line 8079 +#line 8089 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8080 +#line 8090 .doubleBattle = FALSE, -#line 8081 +#line 8091 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8083 +#line 8093 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8085 +#line 8095 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8084 +#line 8094 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8087 +#line 8097 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8089 +#line 8099 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8088 +#line 8098 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8091 +#line 8101 [TRAINER_BETH] = { -#line 8092 +#line 8102 .trainerName = _("BETH"), -#line 8093 +#line 8103 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8094 +#line 8104 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8095 +#line 8105 F_TRAINER_FEMALE | -#line 8096 +#line 8106 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8097 +#line 8107 .doubleBattle = FALSE, -#line 8098 +#line 8108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8100 +#line 8110 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8102 +#line 8112 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8101 +#line 8111 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8104 +#line 8114 [TRAINER_TARA] = { -#line 8105 +#line 8115 .trainerName = _("TARA"), -#line 8106 +#line 8116 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8107 +#line 8117 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8108 +#line 8118 F_TRAINER_FEMALE | -#line 8109 +#line 8119 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8110 +#line 8120 .doubleBattle = FALSE, -#line 8111 +#line 8121 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8113 +#line 8123 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8115 +#line 8125 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8114 +#line 8124 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8117 +#line 8127 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8119 +#line 8129 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8118 +#line 8128 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8121 +#line 8131 [TRAINER_MISSY] = { -#line 8122 +#line 8132 .trainerName = _("MISSY"), -#line 8123 +#line 8133 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8124 +#line 8134 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8125 +#line 8135 F_TRAINER_FEMALE | -#line 8126 +#line 8136 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8127 +#line 8137 .doubleBattle = FALSE, -#line 8128 +#line 8138 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8130 +#line 8140 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8132 +#line 8142 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8131 +#line 8141 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8134 +#line 8144 [TRAINER_ALICE] = { -#line 8135 +#line 8145 .trainerName = _("ALICE"), -#line 8136 +#line 8146 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8137 +#line 8147 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8138 +#line 8148 F_TRAINER_FEMALE | -#line 8139 +#line 8149 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8140 +#line 8150 .doubleBattle = FALSE, -#line 8141 +#line 8151 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8143 +#line 8153 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8145 +#line 8155 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8144 +#line 8154 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8147 +#line 8157 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8149 +#line 8159 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8148 +#line 8158 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8151 +#line 8161 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8153 +#line 8163 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8152 +#line 8162 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8155 +#line 8165 [TRAINER_JENNY_1] = { -#line 8156 +#line 8166 .trainerName = _("JENNY"), -#line 8157 +#line 8167 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8158 +#line 8168 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8159 +#line 8169 F_TRAINER_FEMALE | -#line 8160 +#line 8170 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8161 +#line 8171 .doubleBattle = FALSE, -#line 8162 +#line 8172 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8164 +#line 8174 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8166 +#line 8176 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8165 +#line 8175 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8168 +#line 8178 [TRAINER_GRACE] = { -#line 8169 +#line 8179 .trainerName = _("GRACE"), -#line 8170 +#line 8180 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8171 +#line 8181 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8172 +#line 8182 F_TRAINER_FEMALE | -#line 8173 +#line 8183 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8174 +#line 8184 .doubleBattle = FALSE, -#line 8175 +#line 8185 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8177 +#line 8187 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8179 +#line 8189 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8178 +#line 8188 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8181 +#line 8191 [TRAINER_TANYA] = { -#line 8182 +#line 8192 .trainerName = _("TANYA"), -#line 8183 +#line 8193 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8184 +#line 8194 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8185 +#line 8195 F_TRAINER_FEMALE | -#line 8186 +#line 8196 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8187 +#line 8197 .doubleBattle = FALSE, -#line 8188 +#line 8198 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8190 +#line 8200 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8192 +#line 8202 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8191 +#line 8201 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8194 +#line 8204 [TRAINER_SHARON] = { -#line 8195 +#line 8205 .trainerName = _("SHARON"), -#line 8196 +#line 8206 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8197 +#line 8207 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8198 +#line 8208 F_TRAINER_FEMALE | -#line 8199 +#line 8209 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8200 +#line 8210 .doubleBattle = FALSE, -#line 8201 +#line 8211 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8203 +#line 8213 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8205 +#line 8215 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8204 +#line 8214 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8207 +#line 8217 [TRAINER_NIKKI] = { -#line 8208 +#line 8218 .trainerName = _("NIKKI"), -#line 8209 +#line 8219 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8210 +#line 8220 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8211 +#line 8221 F_TRAINER_FEMALE | -#line 8212 +#line 8222 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8213 +#line 8223 .doubleBattle = FALSE, -#line 8214 +#line 8224 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8216 +#line 8226 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8218 +#line 8228 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8217 +#line 8227 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8220 +#line 8230 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8222 +#line 8232 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8221 +#line 8231 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8224 +#line 8234 [TRAINER_BRENDA] = { -#line 8225 +#line 8235 .trainerName = _("BRENDA"), -#line 8226 +#line 8236 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8227 +#line 8237 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8228 +#line 8238 F_TRAINER_FEMALE | -#line 8229 +#line 8239 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8230 +#line 8240 .doubleBattle = FALSE, -#line 8231 +#line 8241 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8233 +#line 8243 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8235 +#line 8245 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8234 +#line 8244 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8237 +#line 8247 [TRAINER_KATIE] = { -#line 8238 +#line 8248 .trainerName = _("KATIE"), -#line 8239 +#line 8249 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8240 +#line 8250 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8241 +#line 8251 F_TRAINER_FEMALE | -#line 8242 +#line 8252 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8243 +#line 8253 .doubleBattle = FALSE, -#line 8244 +#line 8254 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8246 +#line 8256 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8248 +#line 8258 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8247 +#line 8257 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8250 +#line 8260 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8252 +#line 8262 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8251 +#line 8261 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8254 +#line 8264 [TRAINER_SUSIE] = { -#line 8255 +#line 8265 .trainerName = _("SUSIE"), -#line 8256 +#line 8266 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8257 +#line 8267 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8258 +#line 8268 F_TRAINER_FEMALE | -#line 8259 +#line 8269 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8260 +#line 8270 .doubleBattle = FALSE, -#line 8261 +#line 8271 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8263 +#line 8273 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8265 +#line 8275 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8264 +#line 8274 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8267 +#line 8277 [TRAINER_KARA] = { -#line 8268 +#line 8278 .trainerName = _("KARA"), -#line 8269 +#line 8279 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8270 +#line 8280 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8271 +#line 8281 F_TRAINER_FEMALE | -#line 8272 +#line 8282 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8273 +#line 8283 .doubleBattle = FALSE, -#line 8274 +#line 8284 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8276 +#line 8286 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8278 +#line 8288 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8277 +#line 8287 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8280 +#line 8290 [TRAINER_DANA] = { -#line 8281 +#line 8291 .trainerName = _("DANA"), -#line 8282 +#line 8292 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8283 +#line 8293 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8284 +#line 8294 F_TRAINER_FEMALE | -#line 8285 +#line 8295 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8286 +#line 8296 .doubleBattle = FALSE, -#line 8287 +#line 8297 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8289 +#line 8299 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8291 +#line 8301 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8290 +#line 8300 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8293 +#line 8303 [TRAINER_SIENNA] = { -#line 8294 +#line 8304 .trainerName = _("SIENNA"), -#line 8295 +#line 8305 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8296 +#line 8306 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8297 +#line 8307 F_TRAINER_FEMALE | -#line 8298 +#line 8308 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8299 +#line 8309 .doubleBattle = FALSE, -#line 8300 +#line 8310 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8302 +#line 8312 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8304 +#line 8314 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8303 +#line 8313 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8306 +#line 8316 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8308 +#line 8318 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8307 +#line 8317 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8310 +#line 8320 [TRAINER_DEBRA] = { -#line 8311 +#line 8321 .trainerName = _("DEBRA"), -#line 8312 +#line 8322 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8313 +#line 8323 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8314 +#line 8324 F_TRAINER_FEMALE | -#line 8315 +#line 8325 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8316 +#line 8326 .doubleBattle = FALSE, -#line 8317 +#line 8327 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8319 +#line 8329 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8321 +#line 8331 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8320 +#line 8330 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8323 +#line 8333 [TRAINER_LINDA] = { -#line 8324 +#line 8334 .trainerName = _("LINDA"), -#line 8325 +#line 8335 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8326 +#line 8336 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8327 +#line 8337 F_TRAINER_FEMALE | -#line 8328 +#line 8338 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8329 +#line 8339 .doubleBattle = FALSE, -#line 8330 +#line 8340 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8332 +#line 8342 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8334 +#line 8344 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8333 +#line 8343 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8336 +#line 8346 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8338 +#line 8348 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8337 +#line 8347 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8340 +#line 8350 [TRAINER_KAYLEE] = { -#line 8341 +#line 8351 .trainerName = _("KAYLEE"), -#line 8342 +#line 8352 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8343 +#line 8353 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8344 +#line 8354 F_TRAINER_FEMALE | -#line 8345 +#line 8355 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8346 +#line 8356 .doubleBattle = FALSE, -#line 8347 +#line 8357 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8349 +#line 8359 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8351 +#line 8361 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8350 +#line 8360 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8353 +#line 8363 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8355 +#line 8365 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8354 +#line 8364 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8357 +#line 8367 [TRAINER_LAUREL] = { -#line 8358 +#line 8368 .trainerName = _("LAUREL"), -#line 8359 +#line 8369 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8360 +#line 8370 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8361 +#line 8371 F_TRAINER_FEMALE | -#line 8362 +#line 8372 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8363 +#line 8373 .doubleBattle = FALSE, -#line 8364 +#line 8374 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8366 +#line 8376 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8368 +#line 8378 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8367 +#line 8377 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8370 +#line 8380 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8372 +#line 8382 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8371 +#line 8381 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8374 +#line 8384 [TRAINER_CARLEE] = { -#line 8375 +#line 8385 .trainerName = _("CARLEE"), -#line 8376 +#line 8386 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8377 +#line 8387 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8378 +#line 8388 F_TRAINER_FEMALE | -#line 8379 +#line 8389 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8380 +#line 8390 .doubleBattle = FALSE, -#line 8381 +#line 8391 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8383 +#line 8393 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8385 +#line 8395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8384 +#line 8394 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8387 +#line 8397 [TRAINER_JENNY_2] = { -#line 8388 +#line 8398 .trainerName = _("JENNY"), -#line 8389 +#line 8399 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8390 +#line 8400 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8391 +#line 8401 F_TRAINER_FEMALE | -#line 8392 +#line 8402 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8393 +#line 8403 .doubleBattle = FALSE, -#line 8394 +#line 8404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8396 +#line 8406 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8398 +#line 8408 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8397 +#line 8407 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8400 +#line 8410 [TRAINER_JENNY_3] = { -#line 8401 +#line 8411 .trainerName = _("JENNY"), -#line 8402 +#line 8412 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8403 +#line 8413 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8404 +#line 8414 F_TRAINER_FEMALE | -#line 8405 +#line 8415 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8406 +#line 8416 .doubleBattle = FALSE, -#line 8407 +#line 8417 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8409 +#line 8419 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8411 +#line 8421 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8410 +#line 8420 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8413 +#line 8423 [TRAINER_JENNY_4] = { -#line 8414 +#line 8424 .trainerName = _("JENNY"), -#line 8415 +#line 8425 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8416 +#line 8426 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8417 +#line 8427 F_TRAINER_FEMALE | -#line 8418 +#line 8428 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8419 +#line 8429 .doubleBattle = FALSE, -#line 8420 +#line 8430 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8422 +#line 8432 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8424 +#line 8434 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8423 +#line 8433 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8426 +#line 8436 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8428 +#line 8438 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8427 +#line 8437 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8430 +#line 8440 [TRAINER_JENNY_5] = { -#line 8431 +#line 8441 .trainerName = _("JENNY"), -#line 8432 +#line 8442 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8433 +#line 8443 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8434 +#line 8444 F_TRAINER_FEMALE | -#line 8435 +#line 8445 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8436 +#line 8446 .doubleBattle = FALSE, -#line 8437 +#line 8447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8439 +#line 8449 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8441 +#line 8451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8440 +#line 8450 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8443 +#line 8453 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8445 +#line 8455 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8444 +#line 8454 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8447 +#line 8457 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8449 +#line 8459 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8448 +#line 8458 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8451 +#line 8461 [TRAINER_HEIDI] = { -#line 8452 +#line 8462 .trainerName = _("HEIDI"), -#line 8453 +#line 8463 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8454 +#line 8464 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8455 +#line 8465 F_TRAINER_FEMALE | -#line 8456 +#line 8466 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8457 +#line 8467 .doubleBattle = FALSE, -#line 8458 +#line 8468 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8460 +#line 8470 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8462 +#line 8472 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8461 +#line 8471 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8463 +#line 8473 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -21310,17 +21310,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8468 +#line 8478 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8470 +#line 8480 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8469 +#line 8479 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8471 +#line 8481 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -21329,39 +21329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8476 +#line 8486 [TRAINER_BECKY] = { -#line 8477 +#line 8487 .trainerName = _("BECKY"), -#line 8478 +#line 8488 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8479 +#line 8489 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8480 +#line 8490 F_TRAINER_FEMALE | -#line 8481 +#line 8491 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8482 +#line 8492 .doubleBattle = FALSE, -#line 8483 +#line 8493 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8485 +#line 8495 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8487 +#line 8497 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8486 +#line 8496 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8488 +#line 8498 MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, @@ -21369,17 +21369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8493 +#line 8503 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8495 +#line 8505 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8494 +#line 8504 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8496 +#line 8506 MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, @@ -21388,228 +21388,228 @@ F_TRAINER_FEMALE | }, }, }, -#line 8501 +#line 8511 [TRAINER_CAROL] = { -#line 8502 +#line 8512 .trainerName = _("CAROL"), -#line 8503 +#line 8513 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8504 +#line 8514 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8505 +#line 8515 F_TRAINER_FEMALE | -#line 8506 +#line 8516 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8507 +#line 8517 .doubleBattle = FALSE, -#line 8508 +#line 8518 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8510 +#line 8520 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8512 +#line 8522 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8511 +#line 8521 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8514 +#line 8524 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8516 +#line 8526 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8515 +#line 8525 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8518 +#line 8528 [TRAINER_NANCY] = { -#line 8519 +#line 8529 .trainerName = _("NANCY"), -#line 8520 +#line 8530 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8521 +#line 8531 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8522 +#line 8532 F_TRAINER_FEMALE | -#line 8523 +#line 8533 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8524 +#line 8534 .doubleBattle = FALSE, -#line 8525 +#line 8535 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8527 +#line 8537 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8529 +#line 8539 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8528 +#line 8538 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8531 +#line 8541 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8533 +#line 8543 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8532 +#line 8542 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8535 +#line 8545 [TRAINER_MARTHA] = { -#line 8536 +#line 8546 .trainerName = _("MARTHA"), -#line 8537 +#line 8547 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8538 +#line 8548 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8539 +#line 8549 F_TRAINER_FEMALE | -#line 8540 +#line 8550 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8541 +#line 8551 .doubleBattle = FALSE, -#line 8542 +#line 8552 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8544 +#line 8554 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8546 +#line 8556 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8545 +#line 8555 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8548 +#line 8558 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8550 +#line 8560 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8549 +#line 8559 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8552 +#line 8562 [TRAINER_DIANA_1] = { -#line 8553 +#line 8563 .trainerName = _("DIANA"), -#line 8554 +#line 8564 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8555 +#line 8565 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8556 +#line 8566 F_TRAINER_FEMALE | -#line 8557 +#line 8567 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8558 +#line 8568 .doubleBattle = FALSE, -#line 8559 +#line 8569 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8561 +#line 8571 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8563 +#line 8573 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8562 +#line 8572 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8565 +#line 8575 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8567 +#line 8577 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8566 +#line 8576 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8569 +#line 8579 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8571 +#line 8581 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8570 +#line 8580 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8573 +#line 8583 [TRAINER_CEDRIC] = { -#line 8574 +#line 8584 .trainerName = _("CEDRIC"), -#line 8575 +#line 8585 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 8576 +#line 8586 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 8578 +#line 8588 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 8579 +#line 8589 .doubleBattle = FALSE, -#line 8580 +#line 8590 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8582 +#line 8592 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8584 +#line 8594 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8583 +#line 8593 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8585 +#line 8595 MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, @@ -21618,617 +21618,617 @@ F_TRAINER_FEMALE | }, }, }, -#line 8590 +#line 8600 [TRAINER_IRENE] = { -#line 8591 +#line 8601 .trainerName = _("IRENE"), -#line 8592 +#line 8602 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8593 +#line 8603 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8594 +#line 8604 F_TRAINER_FEMALE | -#line 8595 +#line 8605 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8596 +#line 8606 .doubleBattle = FALSE, -#line 8597 +#line 8607 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8599 +#line 8609 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8601 +#line 8611 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8600 +#line 8610 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8603 +#line 8613 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8605 +#line 8615 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8604 +#line 8614 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8607 +#line 8617 [TRAINER_DIANA_2] = { -#line 8608 +#line 8618 .trainerName = _("DIANA"), -#line 8609 +#line 8619 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8610 +#line 8620 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8611 +#line 8621 F_TRAINER_FEMALE | -#line 8612 +#line 8622 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8613 +#line 8623 .doubleBattle = FALSE, -#line 8614 +#line 8624 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8616 +#line 8626 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8618 +#line 8628 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8617 +#line 8627 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8620 +#line 8630 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8622 +#line 8632 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8621 +#line 8631 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8624 +#line 8634 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8626 +#line 8636 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8625 +#line 8635 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8628 +#line 8638 [TRAINER_DIANA_3] = { -#line 8629 +#line 8639 .trainerName = _("DIANA"), -#line 8630 +#line 8640 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8631 +#line 8641 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8632 +#line 8642 F_TRAINER_FEMALE | -#line 8633 +#line 8643 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8634 +#line 8644 .doubleBattle = FALSE, -#line 8635 +#line 8645 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8637 +#line 8647 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8639 +#line 8649 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8638 +#line 8648 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8641 +#line 8651 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8643 +#line 8653 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8642 +#line 8652 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8645 +#line 8655 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8647 +#line 8657 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8646 +#line 8656 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8649 +#line 8659 [TRAINER_DIANA_4] = { -#line 8650 +#line 8660 .trainerName = _("DIANA"), -#line 8651 +#line 8661 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8652 +#line 8662 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8653 +#line 8663 F_TRAINER_FEMALE | -#line 8654 +#line 8664 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8655 +#line 8665 .doubleBattle = FALSE, -#line 8656 +#line 8666 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8658 +#line 8668 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8660 +#line 8670 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8659 +#line 8669 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8662 +#line 8672 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8664 +#line 8674 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8663 +#line 8673 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8666 +#line 8676 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8668 +#line 8678 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8667 +#line 8677 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8670 +#line 8680 [TRAINER_DIANA_5] = { -#line 8671 +#line 8681 .trainerName = _("DIANA"), -#line 8672 +#line 8682 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8673 +#line 8683 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8674 +#line 8684 F_TRAINER_FEMALE | -#line 8675 +#line 8685 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8676 +#line 8686 .doubleBattle = FALSE, -#line 8677 +#line 8687 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8679 +#line 8689 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8681 +#line 8691 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8680 +#line 8690 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8683 +#line 8693 .species = SPECIES_VILEPLUME, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8685 +#line 8695 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8684 +#line 8694 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8687 +#line 8697 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8689 +#line 8699 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8688 +#line 8698 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8691 +#line 8701 [TRAINER_AMY_AND_LIV_1] = { -#line 8692 +#line 8702 .trainerName = _("AMY & LIV"), -#line 8693 +#line 8703 .trainerClass = TRAINER_CLASS_TWINS, -#line 8694 +#line 8704 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8696 +#line 8706 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8697 +#line 8707 .doubleBattle = TRUE, -#line 8698 +#line 8708 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8700 +#line 8710 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8702 +#line 8712 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8701 +#line 8711 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8704 +#line 8714 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8706 +#line 8716 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8705 +#line 8715 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8708 +#line 8718 [TRAINER_AMY_AND_LIV_2] = { -#line 8709 +#line 8719 .trainerName = _("AMY & LIV"), -#line 8710 +#line 8720 .trainerClass = TRAINER_CLASS_TWINS, -#line 8711 +#line 8721 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8713 +#line 8723 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8714 +#line 8724 .doubleBattle = TRUE, -#line 8715 +#line 8725 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8717 +#line 8727 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8719 +#line 8729 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8718 +#line 8728 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8721 +#line 8731 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8723 +#line 8733 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8722 +#line 8732 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8725 +#line 8735 [TRAINER_GINA_AND_MIA_1] = { -#line 8726 +#line 8736 .trainerName = _("GINA & MIA"), -#line 8727 +#line 8737 .trainerClass = TRAINER_CLASS_TWINS, -#line 8728 +#line 8738 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8730 +#line 8740 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8731 +#line 8741 .doubleBattle = TRUE, -#line 8732 +#line 8742 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8734 +#line 8744 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8736 +#line 8746 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8735 +#line 8745 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8738 +#line 8748 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8740 +#line 8750 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8739 +#line 8749 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8742 +#line 8752 [TRAINER_MIU_AND_YUKI] = { -#line 8743 +#line 8753 .trainerName = _("MIU & YUKI"), -#line 8744 +#line 8754 .trainerClass = TRAINER_CLASS_TWINS, -#line 8745 +#line 8755 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8747 +#line 8757 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8748 +#line 8758 .doubleBattle = TRUE, -#line 8749 +#line 8759 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8751 +#line 8761 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8753 +#line 8763 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8752 +#line 8762 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8755 +#line 8765 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8757 +#line 8767 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8756 +#line 8766 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8759 +#line 8769 [TRAINER_AMY_AND_LIV_3] = { -#line 8760 +#line 8770 .trainerName = _("AMY & LIV"), -#line 8761 +#line 8771 .trainerClass = TRAINER_CLASS_TWINS, -#line 8762 +#line 8772 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8764 +#line 8774 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8765 +#line 8775 .doubleBattle = TRUE, -#line 8766 +#line 8776 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8768 +#line 8778 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8770 +#line 8780 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8769 +#line 8779 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8772 +#line 8782 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8774 +#line 8784 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8773 +#line 8783 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8776 +#line 8786 [TRAINER_GINA_AND_MIA_2] = { -#line 8777 +#line 8787 .trainerName = _("GINA & MIA"), -#line 8778 +#line 8788 .trainerClass = TRAINER_CLASS_TWINS, -#line 8779 +#line 8789 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8781 +#line 8791 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8782 +#line 8792 .doubleBattle = TRUE, -#line 8783 +#line 8793 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8785 +#line 8795 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8787 +#line 8797 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8786 +#line 8796 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8788 +#line 8798 MOVE_NIGHT_SHADE, MOVE_DISABLE, }, }, { -#line 8791 +#line 8801 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8793 +#line 8803 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8792 +#line 8802 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8794 +#line 8804 MOVE_ABSORB, MOVE_LEECH_SEED, }, }, }, }, -#line 8797 +#line 8807 [TRAINER_AMY_AND_LIV_4] = { -#line 8798 +#line 8808 .trainerName = _("AMY & LIV"), -#line 8799 +#line 8809 .trainerClass = TRAINER_CLASS_TWINS, -#line 8800 +#line 8810 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8802 +#line 8812 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8803 +#line 8813 .doubleBattle = TRUE, -#line 8804 +#line 8814 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8806 +#line 8816 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8808 +#line 8818 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8807 +#line 8817 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8810 +#line 8820 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8812 +#line 8822 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8811 +#line 8821 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8814 +#line 8824 [TRAINER_AMY_AND_LIV_5] = { -#line 8815 +#line 8825 .trainerName = _("AMY & LIV"), -#line 8816 +#line 8826 .trainerClass = TRAINER_CLASS_TWINS, -#line 8817 +#line 8827 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8819 +#line 8829 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8820 +#line 8830 .doubleBattle = TRUE, -#line 8821 +#line 8831 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8823 +#line 8833 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8825 +#line 8835 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8824 +#line 8834 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8826 +#line 8836 MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22236,17 +22236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8831 +#line 8841 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8833 +#line 8843 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8832 +#line 8842 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8834 +#line 8844 MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, @@ -22255,37 +22255,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 8839 +#line 8849 [TRAINER_AMY_AND_LIV_6] = { -#line 8840 +#line 8850 .trainerName = _("AMY & LIV"), -#line 8841 +#line 8851 .trainerClass = TRAINER_CLASS_TWINS, -#line 8842 +#line 8852 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8844 +#line 8854 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8845 +#line 8855 .doubleBattle = TRUE, -#line 8846 +#line 8856 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8848 +#line 8858 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8850 +#line 8860 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8849 +#line 8859 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8851 +#line 8861 MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22293,17 +22293,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8856 +#line 8866 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8858 +#line 8868 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8857 +#line 8867 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8859 +#line 8869 MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, @@ -22312,601 +22312,601 @@ F_TRAINER_FEMALE | }, }, }, -#line 8864 +#line 8874 [TRAINER_HUEY] = { -#line 8865 +#line 8875 .trainerName = _("HUEY"), -#line 8866 +#line 8876 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8867 +#line 8877 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8869 +#line 8879 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8870 +#line 8880 .doubleBattle = FALSE, -#line 8871 +#line 8881 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8873 +#line 8883 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8875 +#line 8885 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8874 +#line 8884 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8877 +#line 8887 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8879 +#line 8889 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8878 +#line 8888 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8881 +#line 8891 [TRAINER_EDMOND] = { -#line 8882 +#line 8892 .trainerName = _("EDMOND"), -#line 8883 +#line 8893 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8884 +#line 8894 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8886 +#line 8896 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8887 +#line 8897 .doubleBattle = FALSE, -#line 8888 +#line 8898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8890 +#line 8900 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8892 +#line 8902 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8891 +#line 8901 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8894 +#line 8904 [TRAINER_ERNEST_1] = { -#line 8895 +#line 8905 .trainerName = _("ERNEST"), -#line 8896 +#line 8906 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8897 +#line 8907 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8899 +#line 8909 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8900 +#line 8910 .doubleBattle = FALSE, -#line 8901 +#line 8911 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8903 +#line 8913 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8905 +#line 8915 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8904 +#line 8914 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8907 +#line 8917 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8909 +#line 8919 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8908 +#line 8918 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8911 +#line 8921 [TRAINER_DWAYNE] = { -#line 8912 +#line 8922 .trainerName = _("DWAYNE"), -#line 8913 +#line 8923 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8914 +#line 8924 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8916 +#line 8926 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8917 +#line 8927 .doubleBattle = FALSE, -#line 8918 +#line 8928 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8920 +#line 8930 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8922 +#line 8932 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8921 +#line 8931 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8924 +#line 8934 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8926 +#line 8936 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8925 +#line 8935 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8928 +#line 8938 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8930 +#line 8940 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8929 +#line 8939 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8932 +#line 8942 [TRAINER_PHILLIP] = { -#line 8933 +#line 8943 .trainerName = _("PHILLIP"), -#line 8934 +#line 8944 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8935 +#line 8945 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8937 +#line 8947 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8938 +#line 8948 .doubleBattle = FALSE, -#line 8939 +#line 8949 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8941 +#line 8951 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8943 +#line 8953 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8942 +#line 8952 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8945 +#line 8955 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8947 +#line 8957 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8946 +#line 8956 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8949 +#line 8959 [TRAINER_LEONARD] = { -#line 8950 +#line 8960 .trainerName = _("LEONARD"), -#line 8951 +#line 8961 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8952 +#line 8962 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8954 +#line 8964 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8955 +#line 8965 .doubleBattle = FALSE, -#line 8956 +#line 8966 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8958 +#line 8968 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8960 +#line 8970 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8959 +#line 8969 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8962 +#line 8972 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8964 +#line 8974 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8963 +#line 8973 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8966 +#line 8976 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8968 +#line 8978 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8967 +#line 8977 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8970 +#line 8980 [TRAINER_DUNCAN] = { -#line 8971 +#line 8981 .trainerName = _("DUNCAN"), -#line 8972 +#line 8982 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8973 +#line 8983 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8975 +#line 8985 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8976 +#line 8986 .doubleBattle = FALSE, -#line 8977 +#line 8987 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8979 +#line 8989 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8981 +#line 8991 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8980 +#line 8990 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8983 +#line 8993 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8985 +#line 8995 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8984 +#line 8994 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8987 +#line 8997 [TRAINER_ERNEST_2] = { -#line 8988 +#line 8998 .trainerName = _("ERNEST"), -#line 8989 +#line 8999 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8990 +#line 9000 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8992 +#line 9002 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8993 +#line 9003 .doubleBattle = FALSE, -#line 8994 +#line 9004 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8996 +#line 9006 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8998 +#line 9008 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8997 +#line 9007 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9000 +#line 9010 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9002 +#line 9012 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9001 +#line 9011 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9004 +#line 9014 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9006 +#line 9016 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9005 +#line 9015 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9008 +#line 9018 [TRAINER_ERNEST_3] = { -#line 9009 +#line 9019 .trainerName = _("ERNEST"), -#line 9010 +#line 9020 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9011 +#line 9021 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9013 +#line 9023 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9014 +#line 9024 .doubleBattle = FALSE, -#line 9015 +#line 9025 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9017 +#line 9027 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9019 +#line 9029 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9018 +#line 9028 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9021 +#line 9031 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9023 +#line 9033 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9022 +#line 9032 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9025 +#line 9035 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9027 +#line 9037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9026 +#line 9036 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9029 +#line 9039 [TRAINER_ERNEST_4] = { -#line 9030 +#line 9040 .trainerName = _("ERNEST"), -#line 9031 +#line 9041 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9032 +#line 9042 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9034 +#line 9044 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9035 +#line 9045 .doubleBattle = FALSE, -#line 9036 +#line 9046 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9038 +#line 9048 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9040 +#line 9050 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9039 +#line 9049 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9042 +#line 9052 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9044 +#line 9054 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9043 +#line 9053 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9046 +#line 9056 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9048 +#line 9058 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9047 +#line 9057 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9050 +#line 9060 [TRAINER_ERNEST_5] = { -#line 9051 +#line 9061 .trainerName = _("ERNEST"), -#line 9052 +#line 9062 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9053 +#line 9063 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9055 +#line 9065 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9056 +#line 9066 .doubleBattle = FALSE, -#line 9057 +#line 9067 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9059 +#line 9069 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9061 +#line 9071 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9060 +#line 9070 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9063 +#line 9073 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9065 +#line 9075 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9064 +#line 9074 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9067 +#line 9077 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9069 +#line 9079 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9068 +#line 9078 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9071 +#line 9081 [TRAINER_ELI] = { -#line 9072 +#line 9082 .trainerName = _("ELI"), -#line 9073 +#line 9083 .trainerClass = TRAINER_CLASS_HIKER, -#line 9074 +#line 9084 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 9076 +#line 9086 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 9077 +#line 9087 .doubleBattle = FALSE, -#line 9078 +#line 9088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9080 +#line 9090 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9082 +#line 9092 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9081 +#line 9091 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9084 +#line 9094 [TRAINER_ANNIKA] = { -#line 9085 +#line 9095 .trainerName = _("ANNIKA"), -#line 9086 +#line 9096 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 9087 +#line 9097 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 9088 +#line 9098 F_TRAINER_FEMALE | -#line 9089 +#line 9099 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 9090 +#line 9100 .doubleBattle = FALSE, -#line 9091 +#line 9101 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9093 +#line 9103 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9093 +#line 9103 .heldItem = ITEM_ORAN_BERRY, -#line 9095 +#line 9105 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9094 +#line 9104 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9096 +#line 9106 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22914,19 +22914,19 @@ F_TRAINER_FEMALE | }, }, { -#line 9101 +#line 9111 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9101 +#line 9111 .heldItem = ITEM_ORAN_BERRY, -#line 9103 +#line 9113 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9102 +#line 9112 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9104 +#line 9114 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22935,73 +22935,73 @@ F_TRAINER_FEMALE | }, }, }, -#line 9109 +#line 9119 [TRAINER_JAZMYN] = { -#line 9110 +#line 9120 .trainerName = _("JAZMYN"), -#line 9111 +#line 9121 .trainerClass = TRAINER_CLASS_COOLTRAINER_2, -#line 9112 +#line 9122 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9113 +#line 9123 F_TRAINER_FEMALE | -#line 9114 +#line 9124 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9115 +#line 9125 .items = { ITEM_HYPER_POTION }, -#line 9116 +#line 9126 .doubleBattle = FALSE, -#line 9117 +#line 9127 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9119 +#line 9129 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9121 +#line 9131 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9120 +#line 9130 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9123 +#line 9133 [TRAINER_JONAS] = { -#line 9124 +#line 9134 .trainerName = _("JONAS"), -#line 9125 +#line 9135 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 9126 +#line 9136 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 9128 +#line 9138 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9129 +#line 9139 .doubleBattle = FALSE, -#line 9130 +#line 9140 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9132 +#line 9142 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9134 +#line 9144 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9133 +#line 9143 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9135 +#line 9145 MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, @@ -23010,39 +23010,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 9140 +#line 9150 [TRAINER_KAYLEY] = { -#line 9141 +#line 9151 .trainerName = _("KAYLEY"), -#line 9142 +#line 9152 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 9143 +#line 9153 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 9144 +#line 9154 F_TRAINER_FEMALE | -#line 9145 +#line 9155 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9146 +#line 9156 .doubleBattle = FALSE, -#line 9147 +#line 9157 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9149 +#line 9159 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9151 +#line 9161 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9150 +#line 9160 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9152 +#line 9162 MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, @@ -23051,127 +23051,127 @@ F_TRAINER_FEMALE | }, }, }, -#line 9157 +#line 9167 [TRAINER_AURON] = { -#line 9158 +#line 9168 .trainerName = _("AURON"), -#line 9159 +#line 9169 .trainerClass = TRAINER_CLASS_EXPERT, -#line 9160 +#line 9170 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 9162 +#line 9172 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9163 +#line 9173 .doubleBattle = FALSE, -#line 9164 +#line 9174 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9166 +#line 9176 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9168 +#line 9178 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9167 +#line 9177 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9170 +#line 9180 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9172 +#line 9182 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9171 +#line 9181 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9174 +#line 9184 [TRAINER_KELVIN] = { -#line 9175 +#line 9185 .trainerName = _("KELVIN"), -#line 9176 +#line 9186 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9177 +#line 9187 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9179 +#line 9189 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9180 +#line 9190 .doubleBattle = FALSE, -#line 9181 +#line 9191 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9183 +#line 9193 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9185 +#line 9195 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9184 +#line 9194 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9187 +#line 9197 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9189 +#line 9199 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9188 +#line 9198 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9191 +#line 9201 [TRAINER_MARLEY] = { -#line 9192 +#line 9202 .trainerName = _("MARLEY"), -#line 9193 +#line 9203 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9194 +#line 9204 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9195 +#line 9205 F_TRAINER_FEMALE | -#line 9196 +#line 9206 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9197 +#line 9207 .items = { ITEM_HYPER_POTION }, -#line 9198 +#line 9208 .doubleBattle = FALSE, -#line 9199 +#line 9209 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9201 +#line 9211 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9203 +#line 9213 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 9202 +#line 9212 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9204 +#line 9214 MOVE_BITE, MOVE_ROAR, MOVE_THUNDER_WAVE, @@ -23180,471 +23180,471 @@ F_TRAINER_FEMALE | }, }, }, -#line 9209 +#line 9219 [TRAINER_REYNA] = { -#line 9210 +#line 9220 .trainerName = _("REYNA"), -#line 9211 +#line 9221 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 9212 +#line 9222 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 9213 +#line 9223 F_TRAINER_FEMALE | -#line 9214 +#line 9224 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9215 +#line 9225 .doubleBattle = FALSE, -#line 9216 +#line 9226 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9218 +#line 9228 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9220 +#line 9230 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9219 +#line 9229 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9222 +#line 9232 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9224 +#line 9234 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 9223 +#line 9233 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9226 +#line 9236 [TRAINER_HUDSON] = { -#line 9227 +#line 9237 .trainerName = _("HUDSON"), -#line 9228 +#line 9238 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9229 +#line 9239 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9231 +#line 9241 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9232 +#line 9242 .doubleBattle = FALSE, -#line 9233 +#line 9243 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9235 +#line 9245 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9237 +#line 9247 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9236 +#line 9246 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9239 +#line 9249 [TRAINER_CONOR] = { -#line 9240 +#line 9250 .trainerName = _("CONOR"), -#line 9241 +#line 9251 .trainerClass = TRAINER_CLASS_EXPERT, -#line 9242 +#line 9252 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 9244 +#line 9254 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9245 +#line 9255 .doubleBattle = FALSE, -#line 9246 +#line 9256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9248 +#line 9258 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9250 +#line 9260 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9249 +#line 9259 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9252 +#line 9262 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9254 +#line 9264 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 9253 +#line 9263 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9256 +#line 9266 [TRAINER_EDWIN_1] = { -#line 9257 +#line 9267 .trainerName = _("EDWIN"), -#line 9258 +#line 9268 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9259 +#line 9269 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9261 +#line 9271 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9262 +#line 9272 .doubleBattle = FALSE, -#line 9263 +#line 9273 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9265 +#line 9275 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9267 +#line 9277 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9266 +#line 9276 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9269 +#line 9279 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9271 +#line 9281 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9270 +#line 9280 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9273 +#line 9283 [TRAINER_HECTOR] = { -#line 9274 +#line 9284 .trainerName = _("HECTOR"), -#line 9275 +#line 9285 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9276 +#line 9286 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9278 +#line 9288 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9279 +#line 9289 .doubleBattle = FALSE, -#line 9280 +#line 9290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9282 +#line 9292 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9284 +#line 9294 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9283 +#line 9293 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9286 +#line 9296 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9288 +#line 9298 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9287 +#line 9297 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9290 +#line 9300 [TRAINER_TABITHA_MOSSDEEP] = { -#line 9291 +#line 9301 .trainerName = _("TABITHA"), -#line 9292 +#line 9302 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 9293 +#line 9303 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 9295 +#line 9305 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 9296 +#line 9306 .doubleBattle = FALSE, -#line 9297 +#line 9307 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9299 +#line 9309 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9301 +#line 9311 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9300 +#line 9310 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9303 +#line 9313 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9305 +#line 9315 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9304 +#line 9314 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9307 +#line 9317 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9309 +#line 9319 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9308 +#line 9318 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9311 +#line 9321 [TRAINER_EDWIN_2] = { -#line 9312 +#line 9322 .trainerName = _("EDWIN"), -#line 9313 +#line 9323 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9314 +#line 9324 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9316 +#line 9326 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9317 +#line 9327 .doubleBattle = FALSE, -#line 9318 +#line 9328 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9320 +#line 9330 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9322 +#line 9332 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9321 +#line 9331 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9324 +#line 9334 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9326 +#line 9336 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9325 +#line 9335 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9328 +#line 9338 [TRAINER_EDWIN_3] = { -#line 9329 +#line 9339 .trainerName = _("EDWIN"), -#line 9330 +#line 9340 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9331 +#line 9341 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9333 +#line 9343 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9334 +#line 9344 .doubleBattle = FALSE, -#line 9335 +#line 9345 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9337 +#line 9347 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9339 +#line 9349 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9338 +#line 9348 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9341 +#line 9351 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9343 +#line 9353 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9342 +#line 9352 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9345 +#line 9355 [TRAINER_EDWIN_4] = { -#line 9346 +#line 9356 .trainerName = _("EDWIN"), -#line 9347 +#line 9357 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9348 +#line 9358 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9350 +#line 9360 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9351 +#line 9361 .doubleBattle = FALSE, -#line 9352 +#line 9362 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9354 +#line 9364 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9356 +#line 9366 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9355 +#line 9365 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9358 +#line 9368 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9360 +#line 9370 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9359 +#line 9369 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9362 +#line 9372 [TRAINER_EDWIN_5] = { -#line 9363 +#line 9373 .trainerName = _("EDWIN"), -#line 9364 +#line 9374 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9365 +#line 9375 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9367 +#line 9377 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9368 +#line 9378 .doubleBattle = FALSE, -#line 9369 +#line 9379 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9371 +#line 9381 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9373 +#line 9383 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9372 +#line 9382 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9375 +#line 9385 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9377 +#line 9387 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9376 +#line 9386 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9379 +#line 9389 [TRAINER_WALLY_VR_1] = { -#line 9380 +#line 9390 .trainerName = _("WALLY"), -#line 9381 +#line 9391 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9382 +#line 9392 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 9384 +#line 9394 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9385 +#line 9395 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 9386 +#line 9396 .doubleBattle = FALSE, -#line 9387 +#line 9397 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 9389 +#line 9399 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9391 +#line 9401 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9390 +#line 9400 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9392 +#line 9402 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -23652,17 +23652,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9397 +#line 9407 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9399 +#line 9409 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9398 +#line 9408 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9400 +#line 9410 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -23670,17 +23670,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9405 +#line 9415 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9407 +#line 9417 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9406 +#line 9416 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9408 +#line 9418 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -23688,17 +23688,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9413 +#line 9423 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9415 +#line 9425 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9414 +#line 9424 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9416 +#line 9426 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -23706,17 +23706,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9421 +#line 9431 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9423 +#line 9433 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 9422 +#line 9432 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9424 +#line 9434 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -23725,1014 +23725,1014 @@ F_TRAINER_FEMALE | }, }, }, -#line 9429 +#line 9439 [TRAINER_BRENDAN_ROUTE_103_MUDKIP] = { -#line 9430 +#line 9440 .trainerName = _("BRENDAN"), -#line 9431 +#line 9441 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9432 +#line 9442 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9434 +#line 9444 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9435 +#line 9445 .doubleBattle = FALSE, -#line 9436 +#line 9446 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9438 +#line 9448 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9440 +#line 9450 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9439 +#line 9449 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9442 +#line 9452 [TRAINER_BRENDAN_ROUTE_110_MUDKIP] = { -#line 9443 +#line 9453 .trainerName = _("BRENDAN"), -#line 9444 +#line 9454 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9445 +#line 9455 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9447 +#line 9457 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9448 +#line 9458 .doubleBattle = FALSE, -#line 9449 +#line 9459 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9451 +#line 9461 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9453 +#line 9463 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9452 +#line 9462 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9455 +#line 9465 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9457 +#line 9467 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9456 +#line 9466 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9459 +#line 9469 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9461 +#line 9471 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9460 +#line 9470 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9463 +#line 9473 [TRAINER_BRENDAN_ROUTE_119_MUDKIP] = { -#line 9464 +#line 9474 .trainerName = _("BRENDAN"), -#line 9465 +#line 9475 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9466 +#line 9476 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9468 +#line 9478 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9469 +#line 9479 .doubleBattle = FALSE, -#line 9470 +#line 9480 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9472 +#line 9482 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9474 +#line 9484 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9473 +#line 9483 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9476 +#line 9486 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9478 +#line 9488 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9477 +#line 9487 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9480 +#line 9490 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9482 +#line 9492 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9481 +#line 9491 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9484 +#line 9494 [TRAINER_BRENDAN_ROUTE_103_TREECKO] = { -#line 9485 +#line 9495 .trainerName = _("BRENDAN"), -#line 9486 +#line 9496 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9487 +#line 9497 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9489 +#line 9499 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9490 +#line 9500 .doubleBattle = FALSE, -#line 9491 +#line 9501 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9493 +#line 9503 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9495 +#line 9505 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9494 +#line 9504 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9497 +#line 9507 [TRAINER_BRENDAN_ROUTE_110_TREECKO] = { -#line 9498 +#line 9508 .trainerName = _("BRENDAN"), -#line 9499 +#line 9509 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9500 +#line 9510 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9502 +#line 9512 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9503 +#line 9513 .doubleBattle = FALSE, -#line 9504 +#line 9514 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9506 +#line 9516 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9508 +#line 9518 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9507 +#line 9517 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9510 +#line 9520 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9512 +#line 9522 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9511 +#line 9521 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9514 +#line 9524 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9516 +#line 9526 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9515 +#line 9525 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9518 +#line 9528 [TRAINER_BRENDAN_ROUTE_119_TREECKO] = { -#line 9519 +#line 9529 .trainerName = _("BRENDAN"), -#line 9520 +#line 9530 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9521 +#line 9531 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9523 +#line 9533 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9524 +#line 9534 .doubleBattle = FALSE, -#line 9525 +#line 9535 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9527 +#line 9537 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9529 +#line 9539 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9528 +#line 9538 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9531 +#line 9541 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9533 +#line 9543 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9532 +#line 9542 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9535 +#line 9545 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9537 +#line 9547 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9536 +#line 9546 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9539 +#line 9549 [TRAINER_BRENDAN_ROUTE_103_TORCHIC] = { -#line 9540 +#line 9550 .trainerName = _("BRENDAN"), -#line 9541 +#line 9551 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9542 +#line 9552 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9544 +#line 9554 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9545 +#line 9555 .doubleBattle = FALSE, -#line 9546 +#line 9556 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9548 +#line 9558 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9550 +#line 9560 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9549 +#line 9559 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9552 +#line 9562 [TRAINER_BRENDAN_ROUTE_110_TORCHIC] = { -#line 9553 +#line 9563 .trainerName = _("BRENDAN"), -#line 9554 +#line 9564 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9555 +#line 9565 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9557 +#line 9567 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9558 +#line 9568 .doubleBattle = FALSE, -#line 9559 +#line 9569 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9561 +#line 9571 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9563 +#line 9573 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9562 +#line 9572 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9565 +#line 9575 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9567 +#line 9577 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9566 +#line 9576 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9569 +#line 9579 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9571 +#line 9581 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9570 +#line 9580 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9573 +#line 9583 [TRAINER_BRENDAN_ROUTE_119_TORCHIC] = { -#line 9574 +#line 9584 .trainerName = _("BRENDAN"), -#line 9575 +#line 9585 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9576 +#line 9586 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9578 +#line 9588 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9579 +#line 9589 .doubleBattle = FALSE, -#line 9580 +#line 9590 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9582 +#line 9592 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9584 +#line 9594 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9583 +#line 9593 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9586 +#line 9596 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9588 +#line 9598 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9587 +#line 9597 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9590 +#line 9600 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9592 +#line 9602 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9591 +#line 9601 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9594 +#line 9604 [TRAINER_MAY_ROUTE_103_MUDKIP] = { -#line 9595 +#line 9605 .trainerName = _("MAY"), -#line 9596 +#line 9606 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9597 +#line 9607 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9598 +#line 9608 F_TRAINER_FEMALE | -#line 9599 +#line 9609 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9600 +#line 9610 .doubleBattle = FALSE, -#line 9601 +#line 9611 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9603 +#line 9613 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9605 +#line 9615 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9604 +#line 9614 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9607 +#line 9617 [TRAINER_MAY_ROUTE_110_MUDKIP] = { -#line 9608 +#line 9618 .trainerName = _("MAY"), -#line 9609 +#line 9619 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9610 +#line 9620 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9611 +#line 9621 F_TRAINER_FEMALE | -#line 9612 +#line 9622 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9613 +#line 9623 .doubleBattle = FALSE, -#line 9614 +#line 9624 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9616 +#line 9626 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9618 +#line 9628 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9617 +#line 9627 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9620 +#line 9630 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9622 +#line 9632 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9621 +#line 9631 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9624 +#line 9634 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9626 +#line 9636 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9625 +#line 9635 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9628 +#line 9638 [TRAINER_MAY_ROUTE_119_MUDKIP] = { -#line 9629 +#line 9639 .trainerName = _("MAY"), -#line 9630 +#line 9640 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9631 +#line 9641 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9632 +#line 9642 F_TRAINER_FEMALE | -#line 9633 +#line 9643 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9634 +#line 9644 .doubleBattle = FALSE, -#line 9635 +#line 9645 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9637 +#line 9647 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9639 +#line 9649 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9638 +#line 9648 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9641 +#line 9651 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9643 +#line 9653 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9642 +#line 9652 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9645 +#line 9655 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9647 +#line 9657 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9646 +#line 9656 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9649 +#line 9659 [TRAINER_MAY_ROUTE_103_TREECKO] = { -#line 9650 +#line 9660 .trainerName = _("MAY"), -#line 9651 +#line 9661 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9652 +#line 9662 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9653 +#line 9663 F_TRAINER_FEMALE | -#line 9654 +#line 9664 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9655 +#line 9665 .doubleBattle = FALSE, -#line 9656 +#line 9666 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9658 +#line 9668 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9660 +#line 9670 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9659 +#line 9669 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9662 +#line 9672 [TRAINER_MAY_ROUTE_110_TREECKO] = { -#line 9663 +#line 9673 .trainerName = _("MAY"), -#line 9664 +#line 9674 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9665 +#line 9675 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9666 +#line 9676 F_TRAINER_FEMALE | -#line 9667 +#line 9677 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9668 +#line 9678 .doubleBattle = FALSE, -#line 9669 +#line 9679 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9671 +#line 9681 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9673 +#line 9683 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9672 +#line 9682 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9675 +#line 9685 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9677 +#line 9687 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9676 +#line 9686 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9679 +#line 9689 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9681 +#line 9691 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9680 +#line 9690 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9683 +#line 9693 [TRAINER_MAY_ROUTE_119_TREECKO] = { -#line 9684 +#line 9694 .trainerName = _("MAY"), -#line 9685 +#line 9695 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9686 +#line 9696 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9687 +#line 9697 F_TRAINER_FEMALE | -#line 9688 +#line 9698 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9689 +#line 9699 .doubleBattle = FALSE, -#line 9690 +#line 9700 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9692 +#line 9702 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9694 +#line 9704 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9693 +#line 9703 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9696 +#line 9706 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9698 +#line 9708 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9697 +#line 9707 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9700 +#line 9710 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9702 +#line 9712 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9701 +#line 9711 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9704 +#line 9714 [TRAINER_MAY_ROUTE_103_TORCHIC] = { -#line 9705 +#line 9715 .trainerName = _("MAY"), -#line 9706 +#line 9716 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9707 +#line 9717 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9708 +#line 9718 F_TRAINER_FEMALE | -#line 9709 +#line 9719 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9710 +#line 9720 .doubleBattle = FALSE, -#line 9711 +#line 9721 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9713 +#line 9723 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9715 +#line 9725 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9714 +#line 9724 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9717 +#line 9727 [TRAINER_MAY_ROUTE_110_TORCHIC] = { -#line 9718 +#line 9728 .trainerName = _("MAY"), -#line 9719 +#line 9729 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9720 +#line 9730 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9721 +#line 9731 F_TRAINER_FEMALE | -#line 9722 +#line 9732 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9723 +#line 9733 .doubleBattle = FALSE, -#line 9724 +#line 9734 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9726 +#line 9736 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9728 +#line 9738 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9727 +#line 9737 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9730 +#line 9740 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9732 +#line 9742 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9731 +#line 9741 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9734 +#line 9744 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9736 +#line 9746 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9735 +#line 9745 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9738 +#line 9748 [TRAINER_MAY_ROUTE_119_TORCHIC] = { -#line 9739 +#line 9749 .trainerName = _("MAY"), -#line 9740 +#line 9750 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9741 +#line 9751 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9742 +#line 9752 F_TRAINER_FEMALE | -#line 9743 +#line 9753 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9744 +#line 9754 .doubleBattle = FALSE, -#line 9745 +#line 9755 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9747 +#line 9757 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9749 +#line 9759 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9748 +#line 9758 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9751 +#line 9761 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9753 +#line 9763 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9752 +#line 9762 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9755 +#line 9765 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9757 +#line 9767 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9756 +#line 9766 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9759 +#line 9769 [TRAINER_ISAAC_1] = { -#line 9760 +#line 9770 .trainerName = _("ISAAC"), -#line 9761 +#line 9771 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9762 +#line 9772 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9764 +#line 9774 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9765 +#line 9775 .doubleBattle = FALSE, -#line 9766 +#line 9776 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9768 +#line 9778 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9770 +#line 9780 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9769 +#line 9779 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9772 +#line 9782 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9774 +#line 9784 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9773 +#line 9783 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9776 +#line 9786 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9778 +#line 9788 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9777 +#line 9787 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9780 +#line 9790 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9782 +#line 9792 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9781 +#line 9791 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9784 +#line 9794 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9786 +#line 9796 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9785 +#line 9795 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9788 +#line 9798 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9790 +#line 9800 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9789 +#line 9799 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9792 +#line 9802 [TRAINER_DAVIS] = { -#line 9793 +#line 9803 .trainerName = _("DAVIS"), -#line 9794 +#line 9804 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 9795 +#line 9805 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 9797 +#line 9807 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9798 +#line 9808 .doubleBattle = FALSE, -#line 9799 +#line 9809 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9801 +#line 9811 .species = SPECIES_PINSIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9803 +#line 9813 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9802 +#line 9812 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9805 +#line 9815 [TRAINER_MITCHELL] = { -#line 9806 +#line 9816 .trainerName = _("MITCHELL"), -#line 9807 +#line 9817 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9808 +#line 9818 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 9810 +#line 9820 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9811 +#line 9821 .doubleBattle = FALSE, -#line 9812 +#line 9822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9814 +#line 9824 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9816 +#line 9826 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9815 +#line 9825 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9817 +#line 9827 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24740,17 +24740,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9822 +#line 9832 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9824 +#line 9834 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9823 +#line 9833 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9825 +#line 9835 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24759,5077 +24759,5077 @@ F_TRAINER_FEMALE | }, }, }, -#line 9830 +#line 9840 [TRAINER_ISAAC_2] = { -#line 9831 +#line 9841 .trainerName = _("ISAAC"), -#line 9832 +#line 9842 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9833 +#line 9843 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9835 +#line 9845 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9836 +#line 9846 .doubleBattle = FALSE, -#line 9837 +#line 9847 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9839 +#line 9849 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9841 +#line 9851 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9840 +#line 9850 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9843 +#line 9853 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9845 +#line 9855 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9844 +#line 9854 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9847 +#line 9857 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9849 +#line 9859 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9848 +#line 9858 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9851 +#line 9861 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9853 +#line 9863 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9852 +#line 9862 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9855 +#line 9865 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9857 +#line 9867 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9856 +#line 9866 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9859 +#line 9869 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9861 +#line 9871 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9860 +#line 9870 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9863 +#line 9873 [TRAINER_ISAAC_3] = { -#line 9864 +#line 9874 .trainerName = _("ISAAC"), -#line 9865 +#line 9875 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9866 +#line 9876 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9868 +#line 9878 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9869 +#line 9879 .doubleBattle = FALSE, -#line 9870 +#line 9880 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9872 +#line 9882 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9874 +#line 9884 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9873 +#line 9883 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9876 +#line 9886 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9878 +#line 9888 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9877 +#line 9887 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9880 +#line 9890 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9882 +#line 9892 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9881 +#line 9891 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9884 +#line 9894 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9886 +#line 9896 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9885 +#line 9895 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9888 +#line 9898 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9890 +#line 9900 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9889 +#line 9899 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9892 +#line 9902 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9894 +#line 9904 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9893 +#line 9903 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9896 +#line 9906 [TRAINER_ISAAC_4] = { -#line 9897 +#line 9907 .trainerName = _("ISAAC"), -#line 9898 +#line 9908 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9899 +#line 9909 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9901 +#line 9911 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9902 +#line 9912 .doubleBattle = FALSE, -#line 9903 +#line 9913 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9905 +#line 9915 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9907 +#line 9917 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9906 +#line 9916 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9909 +#line 9919 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9911 +#line 9921 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9910 +#line 9920 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9913 +#line 9923 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9915 +#line 9925 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9914 +#line 9924 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9917 +#line 9927 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9919 +#line 9929 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9918 +#line 9928 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9921 +#line 9931 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9923 +#line 9933 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9922 +#line 9932 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9925 +#line 9935 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9927 +#line 9937 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9926 +#line 9936 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9929 +#line 9939 [TRAINER_ISAAC_5] = { -#line 9930 +#line 9940 .trainerName = _("ISAAC"), -#line 9931 +#line 9941 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9932 +#line 9942 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9934 +#line 9944 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9935 +#line 9945 .doubleBattle = FALSE, -#line 9936 +#line 9946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9938 +#line 9948 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9940 +#line 9950 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9939 +#line 9949 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9942 +#line 9952 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9944 +#line 9954 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9943 +#line 9953 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9946 +#line 9956 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9948 +#line 9958 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9947 +#line 9957 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9950 +#line 9960 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9952 +#line 9962 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9951 +#line 9961 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9954 +#line 9964 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9956 +#line 9966 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9955 +#line 9965 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9958 +#line 9968 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9960 +#line 9970 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9959 +#line 9969 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9962 +#line 9972 [TRAINER_LYDIA_1] = { -#line 9963 +#line 9973 .trainerName = _("LYDIA"), -#line 9964 +#line 9974 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9965 +#line 9975 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 9966 +#line 9976 F_TRAINER_FEMALE | -#line 9967 +#line 9977 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9968 +#line 9978 .doubleBattle = FALSE, -#line 9969 +#line 9979 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9971 +#line 9981 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9973 +#line 9983 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9972 +#line 9982 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9975 +#line 9985 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9977 +#line 9987 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9976 +#line 9986 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9979 +#line 9989 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9981 +#line 9991 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9980 +#line 9990 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9983 +#line 9993 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9985 +#line 9995 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9984 +#line 9994 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9987 +#line 9997 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9989 +#line 9999 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9988 +#line 9998 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9991 +#line 10001 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9993 +#line 10003 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9992 +#line 10002 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9995 +#line 10005 [TRAINER_HALLE] = { -#line 9996 +#line 10006 .trainerName = _("HALLE"), -#line 9997 +#line 10007 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9998 +#line 10008 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9999 +#line 10009 F_TRAINER_FEMALE | -#line 10000 +#line 10010 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10001 +#line 10011 .items = { ITEM_FULL_RESTORE }, -#line 10002 +#line 10012 .doubleBattle = FALSE, -#line 10003 +#line 10013 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10005 +#line 10015 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10007 +#line 10017 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10006 +#line 10016 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10009 +#line 10019 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10011 +#line 10021 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10010 +#line 10020 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10013 +#line 10023 [TRAINER_GARRISON] = { -#line 10014 +#line 10024 .trainerName = _("GARRISON"), -#line 10015 +#line 10025 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 10016 +#line 10026 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 10018 +#line 10028 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10019 +#line 10029 .doubleBattle = FALSE, -#line 10020 +#line 10030 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10022 +#line 10032 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10024 +#line 10034 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10023 +#line 10033 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10026 +#line 10036 [TRAINER_LYDIA_2] = { -#line 10027 +#line 10037 .trainerName = _("LYDIA"), -#line 10028 +#line 10038 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10029 +#line 10039 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10030 +#line 10040 F_TRAINER_FEMALE | -#line 10031 +#line 10041 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10032 +#line 10042 .doubleBattle = FALSE, -#line 10033 +#line 10043 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10035 +#line 10045 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10037 +#line 10047 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10036 +#line 10046 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10039 +#line 10049 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10041 +#line 10051 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10040 +#line 10050 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10043 +#line 10053 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10045 +#line 10055 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10044 +#line 10054 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10047 +#line 10057 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10049 +#line 10059 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10048 +#line 10058 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10051 +#line 10061 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10053 +#line 10063 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10052 +#line 10062 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10055 +#line 10065 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10057 +#line 10067 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10056 +#line 10066 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10059 +#line 10069 [TRAINER_LYDIA_3] = { -#line 10060 +#line 10070 .trainerName = _("LYDIA"), -#line 10061 +#line 10071 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10062 +#line 10072 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10063 +#line 10073 F_TRAINER_FEMALE | -#line 10064 +#line 10074 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10065 +#line 10075 .doubleBattle = FALSE, -#line 10066 +#line 10076 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10068 +#line 10078 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10070 +#line 10080 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10069 +#line 10079 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10072 +#line 10082 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10074 +#line 10084 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10073 +#line 10083 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10076 +#line 10086 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10078 +#line 10088 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10077 +#line 10087 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10080 +#line 10090 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10082 +#line 10092 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10081 +#line 10091 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10084 +#line 10094 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10086 +#line 10096 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10085 +#line 10095 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10088 +#line 10098 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10090 +#line 10100 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10089 +#line 10099 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10092 +#line 10102 [TRAINER_LYDIA_4] = { -#line 10093 +#line 10103 .trainerName = _("LYDIA"), -#line 10094 +#line 10104 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10095 +#line 10105 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10096 +#line 10106 F_TRAINER_FEMALE | -#line 10097 +#line 10107 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10098 +#line 10108 .doubleBattle = FALSE, -#line 10099 +#line 10109 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10101 +#line 10111 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10103 +#line 10113 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10102 +#line 10112 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10105 +#line 10115 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10107 +#line 10117 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10106 +#line 10116 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10109 +#line 10119 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10111 +#line 10121 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10110 +#line 10120 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10113 +#line 10123 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10115 +#line 10125 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10114 +#line 10124 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10117 +#line 10127 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10119 +#line 10129 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10118 +#line 10128 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10121 +#line 10131 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10123 +#line 10133 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10122 +#line 10132 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10125 +#line 10135 [TRAINER_LYDIA_5] = { -#line 10126 +#line 10136 .trainerName = _("LYDIA"), -#line 10127 +#line 10137 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10128 +#line 10138 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10129 +#line 10139 F_TRAINER_FEMALE | -#line 10130 +#line 10140 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10131 +#line 10141 .doubleBattle = FALSE, -#line 10132 +#line 10142 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10134 +#line 10144 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10136 +#line 10146 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10135 +#line 10145 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10138 +#line 10148 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10140 +#line 10150 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10139 +#line 10149 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10142 +#line 10152 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10144 +#line 10154 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10143 +#line 10153 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10146 +#line 10156 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10148 +#line 10158 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10147 +#line 10157 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10150 +#line 10160 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10152 +#line 10162 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10151 +#line 10161 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10154 +#line 10164 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10156 +#line 10166 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10155 +#line 10165 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10158 +#line 10168 [TRAINER_JACKSON_1] = { -#line 10159 +#line 10169 .trainerName = _("JACKSON"), -#line 10160 +#line 10170 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10161 +#line 10171 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10163 +#line 10173 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10164 +#line 10174 .items = { ITEM_FULL_RESTORE }, -#line 10165 +#line 10175 .doubleBattle = FALSE, -#line 10166 +#line 10176 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10168 +#line 10178 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10170 +#line 10180 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10169 +#line 10179 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10172 +#line 10182 [TRAINER_LORENZO] = { -#line 10173 +#line 10183 .trainerName = _("LORENZO"), -#line 10174 +#line 10184 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10175 +#line 10185 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10177 +#line 10187 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10178 +#line 10188 .items = { ITEM_FULL_RESTORE }, -#line 10179 +#line 10189 .doubleBattle = FALSE, -#line 10180 +#line 10190 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10182 +#line 10192 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10184 +#line 10194 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10183 +#line 10193 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10186 +#line 10196 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10188 +#line 10198 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10187 +#line 10197 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10190 +#line 10200 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10192 +#line 10202 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10191 +#line 10201 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10194 +#line 10204 [TRAINER_SEBASTIAN] = { -#line 10195 +#line 10205 .trainerName = _("SEBASTIAN"), -#line 10196 +#line 10206 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10197 +#line 10207 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10199 +#line 10209 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10200 +#line 10210 .items = { ITEM_FULL_RESTORE }, -#line 10201 +#line 10211 .doubleBattle = FALSE, -#line 10202 +#line 10212 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10204 +#line 10214 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10206 +#line 10216 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10205 +#line 10215 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10208 +#line 10218 [TRAINER_JACKSON_2] = { -#line 10209 +#line 10219 .trainerName = _("JACKSON"), -#line 10210 +#line 10220 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10211 +#line 10221 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10213 +#line 10223 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10214 +#line 10224 .items = { ITEM_FULL_RESTORE }, -#line 10215 +#line 10225 .doubleBattle = FALSE, -#line 10216 +#line 10226 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10218 +#line 10228 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10220 +#line 10230 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10219 +#line 10229 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10222 +#line 10232 [TRAINER_JACKSON_3] = { -#line 10223 +#line 10233 .trainerName = _("JACKSON"), -#line 10224 +#line 10234 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10225 +#line 10235 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10227 +#line 10237 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10228 +#line 10238 .items = { ITEM_FULL_RESTORE }, -#line 10229 +#line 10239 .doubleBattle = FALSE, -#line 10230 +#line 10240 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10232 +#line 10242 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10234 +#line 10244 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10233 +#line 10243 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10236 +#line 10246 [TRAINER_JACKSON_4] = { -#line 10237 +#line 10247 .trainerName = _("JACKSON"), -#line 10238 +#line 10248 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10239 +#line 10249 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10241 +#line 10251 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10242 +#line 10252 .items = { ITEM_FULL_RESTORE }, -#line 10243 +#line 10253 .doubleBattle = FALSE, -#line 10244 +#line 10254 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10246 +#line 10256 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10248 +#line 10258 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10247 +#line 10257 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10250 +#line 10260 [TRAINER_JACKSON_5] = { -#line 10251 +#line 10261 .trainerName = _("JACKSON"), -#line 10252 +#line 10262 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10253 +#line 10263 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10255 +#line 10265 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10256 +#line 10266 .items = { ITEM_FULL_RESTORE }, -#line 10257 +#line 10267 .doubleBattle = FALSE, -#line 10258 +#line 10268 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10260 +#line 10270 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10262 +#line 10272 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10261 +#line 10271 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10264 +#line 10274 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10266 +#line 10276 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10265 +#line 10275 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10268 +#line 10278 [TRAINER_CATHERINE_1] = { -#line 10269 +#line 10279 .trainerName = _("CATHERINE"), -#line 10270 +#line 10280 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10271 +#line 10281 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10272 +#line 10282 F_TRAINER_FEMALE | -#line 10273 +#line 10283 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10274 +#line 10284 .items = { ITEM_FULL_RESTORE }, -#line 10275 +#line 10285 .doubleBattle = FALSE, -#line 10276 +#line 10286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10278 +#line 10288 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10280 +#line 10290 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10279 +#line 10289 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10282 +#line 10292 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10284 +#line 10294 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10283 +#line 10293 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10286 +#line 10296 [TRAINER_JENNA] = { -#line 10287 +#line 10297 .trainerName = _("JENNA"), -#line 10288 +#line 10298 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10289 +#line 10299 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10290 +#line 10300 F_TRAINER_FEMALE | -#line 10291 +#line 10301 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10292 +#line 10302 .items = { ITEM_FULL_RESTORE }, -#line 10293 +#line 10303 .doubleBattle = FALSE, -#line 10294 +#line 10304 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10296 +#line 10306 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10298 +#line 10308 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10297 +#line 10307 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10300 +#line 10310 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10302 +#line 10312 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10301 +#line 10311 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10304 +#line 10314 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10306 +#line 10316 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10305 +#line 10315 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10308 +#line 10318 [TRAINER_SOPHIA] = { -#line 10309 +#line 10319 .trainerName = _("SOPHIA"), -#line 10310 +#line 10320 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10311 +#line 10321 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10312 +#line 10322 F_TRAINER_FEMALE | -#line 10313 +#line 10323 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10314 +#line 10324 .items = { ITEM_FULL_RESTORE }, -#line 10315 +#line 10325 .doubleBattle = FALSE, -#line 10316 +#line 10326 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10318 +#line 10328 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10320 +#line 10330 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10319 +#line 10329 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10322 +#line 10332 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10324 +#line 10334 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10323 +#line 10333 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10326 +#line 10336 [TRAINER_CATHERINE_2] = { -#line 10327 +#line 10337 .trainerName = _("CATHERINE"), -#line 10328 +#line 10338 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10329 +#line 10339 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10330 +#line 10340 F_TRAINER_FEMALE | -#line 10331 +#line 10341 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10332 +#line 10342 .items = { ITEM_FULL_RESTORE }, -#line 10333 +#line 10343 .doubleBattle = FALSE, -#line 10334 +#line 10344 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10336 +#line 10346 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10338 +#line 10348 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10337 +#line 10347 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10340 +#line 10350 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10342 +#line 10352 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10341 +#line 10351 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10344 +#line 10354 [TRAINER_CATHERINE_3] = { -#line 10345 +#line 10355 .trainerName = _("CATHERINE"), -#line 10346 +#line 10356 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10347 +#line 10357 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10348 +#line 10358 F_TRAINER_FEMALE | -#line 10349 +#line 10359 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10350 +#line 10360 .items = { ITEM_FULL_RESTORE }, -#line 10351 +#line 10361 .doubleBattle = FALSE, -#line 10352 +#line 10362 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10354 +#line 10364 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10356 +#line 10366 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10355 +#line 10365 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10358 +#line 10368 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10360 +#line 10370 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10359 +#line 10369 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10362 +#line 10372 [TRAINER_CATHERINE_4] = { -#line 10363 +#line 10373 .trainerName = _("CATHERINE"), -#line 10364 +#line 10374 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10365 +#line 10375 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10366 +#line 10376 F_TRAINER_FEMALE | -#line 10367 +#line 10377 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10368 +#line 10378 .items = { ITEM_FULL_RESTORE }, -#line 10369 +#line 10379 .doubleBattle = FALSE, -#line 10370 +#line 10380 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10372 +#line 10382 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10374 +#line 10384 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10373 +#line 10383 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10376 +#line 10386 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10378 +#line 10388 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10377 +#line 10387 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10380 +#line 10390 [TRAINER_CATHERINE_5] = { -#line 10381 +#line 10391 .trainerName = _("CATHERINE"), -#line 10382 +#line 10392 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10383 +#line 10393 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10384 +#line 10394 F_TRAINER_FEMALE | -#line 10385 +#line 10395 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10386 +#line 10396 .items = { ITEM_FULL_RESTORE }, -#line 10387 +#line 10397 .doubleBattle = FALSE, -#line 10388 +#line 10398 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10390 +#line 10400 .species = SPECIES_BELLOSSOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10392 +#line 10402 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10391 +#line 10401 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10394 +#line 10404 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10396 +#line 10406 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10395 +#line 10405 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10398 +#line 10408 [TRAINER_JULIO] = { -#line 10399 +#line 10409 .trainerName = _("JULIO"), -#line 10400 +#line 10410 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10401 +#line 10411 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 10403 +#line 10413 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10404 +#line 10414 .doubleBattle = FALSE, -#line 10405 +#line 10415 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10407 +#line 10417 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10409 +#line 10419 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10408 +#line 10418 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10411 +#line 10421 [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = { -#line 10412 +#line 10422 .trainerName = _("GRUNT"), -#line 10413 +#line 10423 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10414 +#line 10424 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 10416 +#line 10426 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10417 +#line 10427 .doubleBattle = FALSE, -#line 10418 +#line 10428 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10420 +#line 10430 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10422 +#line 10432 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10421 +#line 10431 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10424 +#line 10434 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10426 +#line 10436 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10425 +#line 10435 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10428 +#line 10438 [TRAINER_GRUNT_UNUSED] = { -#line 10429 +#line 10439 .trainerName = _("GRUNT"), -#line 10430 +#line 10440 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10431 +#line 10441 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10432 +#line 10442 F_TRAINER_FEMALE | -#line 10433 +#line 10443 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10434 +#line 10444 .doubleBattle = FALSE, -#line 10435 +#line 10445 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10437 +#line 10447 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10439 +#line 10449 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10438 +#line 10448 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10441 +#line 10451 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10443 +#line 10453 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10442 +#line 10452 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10445 +#line 10455 [TRAINER_GRUNT_MT_PYRE_4] = { -#line 10446 +#line 10456 .trainerName = _("GRUNT"), -#line 10447 +#line 10457 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10448 +#line 10458 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10449 +#line 10459 F_TRAINER_FEMALE | -#line 10450 +#line 10460 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10451 +#line 10461 .doubleBattle = FALSE, -#line 10452 +#line 10462 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10454 +#line 10464 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10456 +#line 10466 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10455 +#line 10465 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10458 +#line 10468 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10460 +#line 10470 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10459 +#line 10469 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10462 +#line 10472 [TRAINER_GRUNT_JAGGED_PASS] = { -#line 10463 +#line 10473 .trainerName = _("GRUNT"), -#line 10464 +#line 10474 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10465 +#line 10475 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10467 +#line 10477 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10468 +#line 10478 .doubleBattle = FALSE, -#line 10469 +#line 10479 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10471 +#line 10481 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10473 +#line 10483 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10472 +#line 10482 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10475 +#line 10485 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10477 +#line 10487 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10476 +#line 10486 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10479 +#line 10489 [TRAINER_MARC] = { -#line 10480 +#line 10490 .trainerName = _("MARC"), -#line 10481 +#line 10491 .trainerClass = TRAINER_CLASS_HIKER, -#line 10482 +#line 10492 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 10484 +#line 10494 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10485 +#line 10495 .doubleBattle = FALSE, -#line 10486 +#line 10496 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10488 +#line 10498 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10490 +#line 10500 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 10489 +#line 10499 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10492 +#line 10502 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10494 +#line 10504 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 10493 +#line 10503 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10496 +#line 10506 [TRAINER_BRENDEN] = { -#line 10497 +#line 10507 .trainerName = _("BRENDEN"), -#line 10498 +#line 10508 .trainerClass = TRAINER_CLASS_SAILOR, -#line 10499 +#line 10509 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 10501 +#line 10511 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10502 +#line 10512 .doubleBattle = FALSE, -#line 10503 +#line 10513 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10505 +#line 10515 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10507 +#line 10517 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10506 +#line 10516 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10509 +#line 10519 [TRAINER_LILITH] = { -#line 10510 +#line 10520 .trainerName = _("LILITH"), -#line 10511 +#line 10521 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 10512 +#line 10522 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 10513 +#line 10523 F_TRAINER_FEMALE | -#line 10514 +#line 10524 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10515 +#line 10525 .doubleBattle = FALSE, -#line 10516 +#line 10526 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10518 +#line 10528 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10520 +#line 10530 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10519 +#line 10529 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10522 +#line 10532 [TRAINER_CRISTIAN] = { -#line 10523 +#line 10533 .trainerName = _("CRISTIAN"), -#line 10524 +#line 10534 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 10525 +#line 10535 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 10527 +#line 10537 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10528 +#line 10538 .doubleBattle = FALSE, -#line 10529 +#line 10539 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10531 +#line 10541 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10533 +#line 10543 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 10532 +#line 10542 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10535 +#line 10545 [TRAINER_SYLVIA] = { -#line 10536 +#line 10546 .trainerName = _("SYLVIA"), -#line 10537 +#line 10547 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 10538 +#line 10548 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 10539 +#line 10549 F_TRAINER_FEMALE | -#line 10540 +#line 10550 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 10541 +#line 10551 .doubleBattle = FALSE, -#line 10542 +#line 10552 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10544 +#line 10554 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10546 +#line 10556 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10545 +#line 10555 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10548 +#line 10558 [TRAINER_LEONARDO] = { -#line 10549 +#line 10559 .trainerName = _("LEONARDO"), -#line 10550 +#line 10560 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10551 +#line 10561 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10553 +#line 10563 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10554 +#line 10564 .doubleBattle = FALSE, -#line 10555 +#line 10565 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10557 +#line 10567 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10559 +#line 10569 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10558 +#line 10568 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10561 +#line 10571 [TRAINER_ATHENA] = { -#line 10562 +#line 10572 .trainerName = _("ATHENA"), -#line 10563 +#line 10573 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10564 +#line 10574 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 10565 +#line 10575 F_TRAINER_FEMALE | -#line 10566 +#line 10576 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10567 +#line 10577 .items = { ITEM_HYPER_POTION }, -#line 10568 +#line 10578 .doubleBattle = FALSE, -#line 10569 +#line 10579 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10571 +#line 10581 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10573 +#line 10583 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10572 +#line 10582 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 10574 +#line 10584 MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, }, }, { -#line 10578 +#line 10588 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10580 +#line 10590 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10579 +#line 10589 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 10581 +#line 10591 MOVE_SURF, MOVE_THIEF, }, }, }, }, -#line 10584 +#line 10594 [TRAINER_HARRISON] = { -#line 10585 +#line 10595 .trainerName = _("HARRISON"), -#line 10586 +#line 10596 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10587 +#line 10597 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10589 +#line 10599 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10590 +#line 10600 .doubleBattle = FALSE, -#line 10591 +#line 10601 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10593 +#line 10603 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10595 +#line 10605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10594 +#line 10604 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10597 +#line 10607 [TRAINER_GRUNT_MT_CHIMNEY_2] = { -#line 10598 +#line 10608 .trainerName = _("GRUNT"), -#line 10599 +#line 10609 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10600 +#line 10610 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10602 +#line 10612 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10603 +#line 10613 .doubleBattle = FALSE, -#line 10604 +#line 10614 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10606 +#line 10616 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10608 +#line 10618 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10607 +#line 10617 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10610 +#line 10620 [TRAINER_CLARENCE] = { -#line 10611 +#line 10621 .trainerName = _("CLARENCE"), -#line 10612 +#line 10622 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10613 +#line 10623 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10615 +#line 10625 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10616 +#line 10626 .doubleBattle = FALSE, -#line 10617 +#line 10627 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10619 +#line 10629 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10621 +#line 10631 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10620 +#line 10630 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10623 +#line 10633 [TRAINER_TERRY] = { -#line 10624 +#line 10634 .trainerName = _("TERRY"), -#line 10625 +#line 10635 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10626 +#line 10636 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 10627 +#line 10637 F_TRAINER_FEMALE | -#line 10628 +#line 10638 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10629 +#line 10639 .doubleBattle = FALSE, -#line 10630 +#line 10640 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10632 +#line 10642 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10634 +#line 10644 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10633 +#line 10643 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10636 +#line 10646 [TRAINER_NATE] = { -#line 10637 +#line 10647 .trainerName = _("NATE"), -#line 10638 +#line 10648 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 10639 +#line 10649 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 10641 +#line 10651 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 10642 +#line 10652 .doubleBattle = FALSE, -#line 10643 +#line 10653 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10645 +#line 10655 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10647 +#line 10657 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10646 +#line 10656 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10649 +#line 10659 [TRAINER_KATHLEEN] = { -#line 10650 +#line 10660 .trainerName = _("KATHLEEN"), -#line 10651 +#line 10661 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 10652 +#line 10662 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 10653 +#line 10663 F_TRAINER_FEMALE | -#line 10654 +#line 10664 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 10655 +#line 10665 .doubleBattle = FALSE, -#line 10656 +#line 10666 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10658 +#line 10668 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10660 +#line 10670 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10659 +#line 10669 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10662 +#line 10672 [TRAINER_CLIFFORD] = { -#line 10663 +#line 10673 .trainerName = _("CLIFFORD"), -#line 10664 +#line 10674 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 10665 +#line 10675 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 10667 +#line 10677 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 10668 +#line 10678 .doubleBattle = FALSE, -#line 10669 +#line 10679 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10671 +#line 10681 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10673 +#line 10683 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10672 +#line 10682 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10675 +#line 10685 [TRAINER_NICHOLAS] = { -#line 10676 +#line 10686 .trainerName = _("NICHOLAS"), -#line 10677 +#line 10687 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10678 +#line 10688 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 10680 +#line 10690 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10681 +#line 10691 .doubleBattle = FALSE, -#line 10682 +#line 10692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10684 +#line 10694 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10686 +#line 10696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10685 +#line 10695 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10688 +#line 10698 [TRAINER_GRUNT_SPACE_CENTER_3] = { -#line 10689 +#line 10699 .trainerName = _("GRUNT"), -#line 10690 +#line 10700 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10691 +#line 10701 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 10692 +#line 10702 F_TRAINER_FEMALE | -#line 10693 +#line 10703 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10694 +#line 10704 .doubleBattle = FALSE, -#line 10695 +#line 10705 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10697 +#line 10707 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10699 +#line 10709 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10698 +#line 10708 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10701 +#line 10711 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10703 +#line 10713 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10702 +#line 10712 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10705 +#line 10715 [TRAINER_GRUNT_SPACE_CENTER_4] = { -#line 10706 +#line 10716 .trainerName = _("GRUNT"), -#line 10707 +#line 10717 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10708 +#line 10718 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10710 +#line 10720 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10711 +#line 10721 .doubleBattle = FALSE, -#line 10712 +#line 10722 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10714 +#line 10724 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10716 +#line 10726 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10715 +#line 10725 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10718 +#line 10728 [TRAINER_GRUNT_SPACE_CENTER_5] = { -#line 10719 +#line 10729 .trainerName = _("GRUNT"), -#line 10720 +#line 10730 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10721 +#line 10731 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10723 +#line 10733 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10724 +#line 10734 .doubleBattle = FALSE, -#line 10725 +#line 10735 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10727 +#line 10737 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10729 +#line 10739 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10728 +#line 10738 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10731 +#line 10741 [TRAINER_GRUNT_SPACE_CENTER_6] = { -#line 10732 +#line 10742 .trainerName = _("GRUNT"), -#line 10733 +#line 10743 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10734 +#line 10744 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10736 +#line 10746 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10737 +#line 10747 .doubleBattle = FALSE, -#line 10738 +#line 10748 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10740 +#line 10750 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10742 +#line 10752 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10741 +#line 10751 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10744 +#line 10754 [TRAINER_GRUNT_SPACE_CENTER_7] = { -#line 10745 +#line 10755 .trainerName = _("GRUNT"), -#line 10746 +#line 10756 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10747 +#line 10757 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10749 +#line 10759 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10750 +#line 10760 .doubleBattle = FALSE, -#line 10751 +#line 10761 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10753 +#line 10763 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10755 +#line 10765 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10754 +#line 10764 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10757 +#line 10767 [TRAINER_MACEY] = { -#line 10758 +#line 10768 .trainerName = _("MACEY"), -#line 10759 +#line 10769 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10760 +#line 10770 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 10761 +#line 10771 F_TRAINER_FEMALE | -#line 10762 +#line 10772 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10763 +#line 10773 .doubleBattle = FALSE, -#line 10764 +#line 10774 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10766 +#line 10776 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10768 +#line 10778 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10767 +#line 10777 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10770 +#line 10780 [TRAINER_BRENDAN_RUSTBORO_TREECKO] = { -#line 10771 +#line 10781 .trainerName = _("BRENDAN"), -#line 10772 +#line 10782 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10773 +#line 10783 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10775 +#line 10785 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10776 +#line 10786 .doubleBattle = FALSE, -#line 10777 +#line 10787 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10779 +#line 10789 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10781 +#line 10791 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10780 +#line 10790 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10783 +#line 10793 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10785 +#line 10795 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10784 +#line 10794 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10787 +#line 10797 [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = { -#line 10788 +#line 10798 .trainerName = _("BRENDAN"), -#line 10789 +#line 10799 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10790 +#line 10800 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10792 +#line 10802 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10793 +#line 10803 .doubleBattle = FALSE, -#line 10794 +#line 10804 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10796 +#line 10806 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10798 +#line 10808 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10797 +#line 10807 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10800 +#line 10810 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10802 +#line 10812 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10801 +#line 10811 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10804 +#line 10814 [TRAINER_PAXTON] = { -#line 10805 +#line 10815 .trainerName = _("PAXTON"), -#line 10806 +#line 10816 .trainerClass = TRAINER_CLASS_EXPERT, -#line 10807 +#line 10817 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 10809 +#line 10819 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10810 +#line 10820 .doubleBattle = FALSE, -#line 10811 +#line 10821 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10813 +#line 10823 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10815 +#line 10825 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10814 +#line 10824 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10817 +#line 10827 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10819 +#line 10829 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10818 +#line 10828 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10821 +#line 10831 [TRAINER_ISABELLA] = { -#line 10822 +#line 10832 .trainerName = _("ISABELLA"), -#line 10823 +#line 10833 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10824 +#line 10834 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 10825 +#line 10835 F_TRAINER_FEMALE | -#line 10826 +#line 10836 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10827 +#line 10837 .doubleBattle = FALSE, -#line 10828 +#line 10838 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10830 +#line 10840 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10832 +#line 10842 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10831 +#line 10841 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10834 +#line 10844 [TRAINER_GRUNT_WEATHER_INST_5] = { -#line 10835 +#line 10845 .trainerName = _("GRUNT"), -#line 10836 +#line 10846 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10837 +#line 10847 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10838 +#line 10848 F_TRAINER_FEMALE | -#line 10839 +#line 10849 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10840 +#line 10850 .doubleBattle = FALSE, -#line 10841 +#line 10851 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10843 +#line 10853 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10845 +#line 10855 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10844 +#line 10854 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10847 +#line 10857 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10849 +#line 10859 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10848 +#line 10858 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10851 +#line 10861 [TRAINER_TABITHA_MT_CHIMNEY] = { -#line 10852 +#line 10862 .trainerName = _("TABITHA"), -#line 10853 +#line 10863 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 10854 +#line 10864 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 10856 +#line 10866 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10857 +#line 10867 .doubleBattle = FALSE, -#line 10858 +#line 10868 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 10860 +#line 10870 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10862 +#line 10872 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10861 +#line 10871 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10864 +#line 10874 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10866 +#line 10876 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10865 +#line 10875 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10868 +#line 10878 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10870 +#line 10880 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10869 +#line 10879 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10872 +#line 10882 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10874 +#line 10884 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10873 +#line 10883 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10876 +#line 10886 [TRAINER_JONATHAN] = { -#line 10877 +#line 10887 .trainerName = _("JONATHAN"), -#line 10878 +#line 10888 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10879 +#line 10889 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 10881 +#line 10891 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10882 +#line 10892 .items = { ITEM_HYPER_POTION }, -#line 10883 +#line 10893 .doubleBattle = FALSE, -#line 10884 +#line 10894 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10886 +#line 10896 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10888 +#line 10898 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10887 +#line 10897 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10890 +#line 10900 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10892 +#line 10902 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10891 +#line 10901 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10894 +#line 10904 [TRAINER_BRENDAN_RUSTBORO_TORCHIC] = { -#line 10895 +#line 10905 .trainerName = _("BRENDAN"), -#line 10896 +#line 10906 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10897 +#line 10907 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10899 +#line 10909 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10900 +#line 10910 .doubleBattle = FALSE, -#line 10901 +#line 10911 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10903 +#line 10913 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10905 +#line 10915 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10904 +#line 10914 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10907 +#line 10917 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10909 +#line 10919 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10908 +#line 10918 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10911 +#line 10921 [TRAINER_MAY_RUSTBORO_MUDKIP] = { -#line 10912 +#line 10922 .trainerName = _("MAY"), -#line 10913 +#line 10923 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10914 +#line 10924 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 10915 +#line 10925 F_TRAINER_FEMALE | -#line 10916 +#line 10926 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10917 +#line 10927 .doubleBattle = FALSE, -#line 10918 +#line 10928 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10920 +#line 10930 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10922 +#line 10932 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10921 +#line 10931 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10924 +#line 10934 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10926 +#line 10936 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10925 +#line 10935 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10928 +#line 10938 [TRAINER_MAXIE_MAGMA_HIDEOUT] = { -#line 10929 +#line 10939 .trainerName = _("MAXIE"), -#line 10930 +#line 10940 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10931 +#line 10941 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10933 +#line 10943 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10934 +#line 10944 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10935 +#line 10945 .doubleBattle = FALSE, -#line 10936 +#line 10946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10938 +#line 10948 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10940 +#line 10950 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10939 +#line 10949 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10942 +#line 10952 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10944 +#line 10954 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10943 +#line 10953 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10946 +#line 10956 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10948 +#line 10958 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10947 +#line 10957 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10950 +#line 10960 [TRAINER_MAXIE_MT_CHIMNEY] = { -#line 10951 +#line 10961 .trainerName = _("MAXIE"), -#line 10952 +#line 10962 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10953 +#line 10963 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10955 +#line 10965 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10956 +#line 10966 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10957 +#line 10967 .doubleBattle = FALSE, -#line 10958 +#line 10968 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10960 +#line 10970 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10962 +#line 10972 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10961 +#line 10971 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10964 +#line 10974 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10966 +#line 10976 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10965 +#line 10975 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10968 +#line 10978 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10970 +#line 10980 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10969 +#line 10979 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10972 +#line 10982 [TRAINER_TIANA] = { -#line 10973 +#line 10983 .trainerName = _("TIANA"), -#line 10974 +#line 10984 .trainerClass = TRAINER_CLASS_LASS, -#line 10975 +#line 10985 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 10976 +#line 10986 F_TRAINER_FEMALE | -#line 10977 +#line 10987 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10978 +#line 10988 .doubleBattle = FALSE, -#line 10979 +#line 10989 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10981 +#line 10991 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10983 +#line 10993 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10982 +#line 10992 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10985 +#line 10995 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10987 +#line 10997 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10986 +#line 10996 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10989 +#line 10999 [TRAINER_HALEY_1] = { -#line 10990 +#line 11000 .trainerName = _("HALEY"), -#line 10991 +#line 11001 .trainerClass = TRAINER_CLASS_LASS, -#line 10992 +#line 11002 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 10993 +#line 11003 F_TRAINER_FEMALE | -#line 10994 +#line 11004 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10995 +#line 11005 .doubleBattle = FALSE, -#line 10996 +#line 11006 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10998 +#line 11008 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11000 +#line 11010 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10999 +#line 11009 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11002 +#line 11012 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11004 +#line 11014 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11003 +#line 11013 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11006 +#line 11016 [TRAINER_JANICE] = { -#line 11007 +#line 11017 .trainerName = _("JANICE"), -#line 11008 +#line 11018 .trainerClass = TRAINER_CLASS_LASS, -#line 11009 +#line 11019 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11010 +#line 11020 F_TRAINER_FEMALE | -#line 11011 +#line 11021 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11012 +#line 11022 .doubleBattle = FALSE, -#line 11013 +#line 11023 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11015 +#line 11025 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11017 +#line 11027 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11016 +#line 11026 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11019 +#line 11029 [TRAINER_VIVI] = { -#line 11020 +#line 11030 .trainerName = _("VIVI"), -#line 11021 +#line 11031 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 11022 +#line 11032 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11023 +#line 11033 F_TRAINER_FEMALE | -#line 11024 +#line 11034 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11025 +#line 11035 .doubleBattle = FALSE, -#line 11026 +#line 11036 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11028 +#line 11038 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11030 +#line 11040 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11029 +#line 11039 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11032 +#line 11042 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11034 +#line 11044 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11033 +#line 11043 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11036 +#line 11046 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11038 +#line 11048 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11037 +#line 11047 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11040 +#line 11050 [TRAINER_HALEY_2] = { -#line 11041 +#line 11051 .trainerName = _("HALEY"), -#line 11042 +#line 11052 .trainerClass = TRAINER_CLASS_LASS, -#line 11043 +#line 11053 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11044 +#line 11054 F_TRAINER_FEMALE | -#line 11045 +#line 11055 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11046 +#line 11056 .doubleBattle = FALSE, -#line 11047 +#line 11057 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11049 +#line 11059 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11051 +#line 11061 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11050 +#line 11060 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11053 +#line 11063 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11055 +#line 11065 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11054 +#line 11064 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11057 +#line 11067 [TRAINER_HALEY_3] = { -#line 11058 +#line 11068 .trainerName = _("HALEY"), -#line 11059 +#line 11069 .trainerClass = TRAINER_CLASS_LASS, -#line 11060 +#line 11070 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11061 +#line 11071 F_TRAINER_FEMALE | -#line 11062 +#line 11072 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11063 +#line 11073 .doubleBattle = FALSE, -#line 11064 +#line 11074 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11066 +#line 11076 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11068 +#line 11078 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11067 +#line 11077 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11070 +#line 11080 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11072 +#line 11082 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11071 +#line 11081 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11074 +#line 11084 [TRAINER_HALEY_4] = { -#line 11075 +#line 11085 .trainerName = _("HALEY"), -#line 11076 +#line 11086 .trainerClass = TRAINER_CLASS_LASS, -#line 11077 +#line 11087 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11078 +#line 11088 F_TRAINER_FEMALE | -#line 11079 +#line 11089 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11080 +#line 11090 .doubleBattle = FALSE, -#line 11081 +#line 11091 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11083 +#line 11093 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11085 +#line 11095 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11084 +#line 11094 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11087 +#line 11097 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11089 +#line 11099 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11088 +#line 11098 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11091 +#line 11101 [TRAINER_HALEY_5] = { -#line 11092 +#line 11102 .trainerName = _("HALEY"), -#line 11093 +#line 11103 .trainerClass = TRAINER_CLASS_LASS, -#line 11094 +#line 11104 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11095 +#line 11105 F_TRAINER_FEMALE | -#line 11096 +#line 11106 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11097 +#line 11107 .doubleBattle = FALSE, -#line 11098 +#line 11108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11100 +#line 11110 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11102 +#line 11112 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11101 +#line 11111 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11104 +#line 11114 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11106 +#line 11116 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11105 +#line 11115 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11108 +#line 11118 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11110 +#line 11120 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11109 +#line 11119 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11112 +#line 11122 [TRAINER_SALLY] = { -#line 11113 +#line 11123 .trainerName = _("SALLY"), -#line 11114 +#line 11124 .trainerClass = TRAINER_CLASS_LASS, -#line 11115 +#line 11125 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11116 +#line 11126 F_TRAINER_FEMALE | -#line 11117 +#line 11127 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11118 +#line 11128 .doubleBattle = FALSE, -#line 11119 +#line 11129 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11121 +#line 11131 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11123 +#line 11133 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11122 +#line 11132 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11125 +#line 11135 [TRAINER_ROBIN] = { -#line 11126 +#line 11136 .trainerName = _("ROBIN"), -#line 11127 +#line 11137 .trainerClass = TRAINER_CLASS_LASS, -#line 11128 +#line 11138 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11129 +#line 11139 F_TRAINER_FEMALE | -#line 11130 +#line 11140 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11131 +#line 11141 .doubleBattle = FALSE, -#line 11132 +#line 11142 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11134 +#line 11144 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11136 +#line 11146 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11135 +#line 11145 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11138 +#line 11148 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11140 +#line 11150 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11139 +#line 11149 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11142 +#line 11152 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11144 +#line 11154 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11143 +#line 11153 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11146 +#line 11156 [TRAINER_ANDREA] = { -#line 11147 +#line 11157 .trainerName = _("ANDREA"), -#line 11148 +#line 11158 .trainerClass = TRAINER_CLASS_LASS, -#line 11149 +#line 11159 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11150 +#line 11160 F_TRAINER_FEMALE | -#line 11151 +#line 11161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11152 +#line 11162 .doubleBattle = FALSE, -#line 11153 +#line 11163 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11155 +#line 11165 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11157 +#line 11167 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11156 +#line 11166 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11159 +#line 11169 [TRAINER_CRISSY] = { -#line 11160 +#line 11170 .trainerName = _("CRISSY"), -#line 11161 +#line 11171 .trainerClass = TRAINER_CLASS_LASS, -#line 11162 +#line 11172 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11163 +#line 11173 F_TRAINER_FEMALE | -#line 11164 +#line 11174 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11165 +#line 11175 .doubleBattle = FALSE, -#line 11166 +#line 11176 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11168 +#line 11178 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11170 +#line 11180 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11169 +#line 11179 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11172 +#line 11182 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11174 +#line 11184 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11173 +#line 11183 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11176 +#line 11186 [TRAINER_RICK] = { -#line 11177 +#line 11187 .trainerName = _("RICK"), -#line 11178 +#line 11188 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11179 +#line 11189 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11181 +#line 11191 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11182 +#line 11192 .doubleBattle = FALSE, -#line 11183 +#line 11193 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11185 +#line 11195 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11187 +#line 11197 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11186 +#line 11196 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11189 +#line 11199 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11191 +#line 11201 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11190 +#line 11200 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11193 +#line 11203 [TRAINER_LYLE] = { -#line 11194 +#line 11204 .trainerName = _("LYLE"), -#line 11195 +#line 11205 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11196 +#line 11206 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11198 +#line 11208 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11199 +#line 11209 .doubleBattle = FALSE, -#line 11200 +#line 11210 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11202 - .species = SPECIES_WURMPLE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11204 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11203 - .lvl = 3, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11206 - .species = SPECIES_WURMPLE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11208 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11207 - .lvl = 3, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11210 - .species = SPECIES_WURMPLE, - .gender = TRAINER_MON_RANDOM_GENDER, #line 11212 + .species = SPECIES_WURMPLE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11214 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11211 +#line 11213 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11214 +#line 11216 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11216 +#line 11218 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11215 +#line 11217 + .lvl = 3, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11220 + .species = SPECIES_WURMPLE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11222 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 11221 + .lvl = 3, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11224 + .species = SPECIES_WURMPLE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11226 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 11225 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11218 +#line 11228 [TRAINER_JOSE] = { -#line 11219 +#line 11229 .trainerName = _("JOSE"), -#line 11220 +#line 11230 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11221 +#line 11231 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11223 +#line 11233 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11224 +#line 11234 .doubleBattle = FALSE, -#line 11225 +#line 11235 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11227 +#line 11237 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11229 +#line 11239 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11228 +#line 11238 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11231 +#line 11241 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11233 +#line 11243 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11232 +#line 11242 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11235 +#line 11245 [TRAINER_DOUG] = { -#line 11236 +#line 11246 .trainerName = _("DOUG"), -#line 11237 +#line 11247 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11238 +#line 11248 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11240 +#line 11250 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11241 +#line 11251 .doubleBattle = FALSE, -#line 11242 +#line 11252 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11244 +#line 11254 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11246 +#line 11256 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11245 +#line 11255 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11248 +#line 11258 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11250 +#line 11260 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11249 +#line 11259 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11252 +#line 11262 [TRAINER_GREG] = { -#line 11253 +#line 11263 .trainerName = _("GREG"), -#line 11254 +#line 11264 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11255 +#line 11265 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11257 +#line 11267 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11258 +#line 11268 .doubleBattle = FALSE, -#line 11259 +#line 11269 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11261 +#line 11271 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11263 +#line 11273 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11262 +#line 11272 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11265 +#line 11275 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11267 +#line 11277 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11266 +#line 11276 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11269 +#line 11279 [TRAINER_KENT] = { -#line 11270 +#line 11280 .trainerName = _("KENT"), -#line 11271 +#line 11281 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11272 +#line 11282 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11274 +#line 11284 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11275 +#line 11285 .doubleBattle = FALSE, -#line 11276 +#line 11286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11278 +#line 11288 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11280 +#line 11290 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11279 +#line 11289 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11282 +#line 11292 [TRAINER_JAMES_1] = { -#line 11283 +#line 11293 .trainerName = _("JAMES"), -#line 11284 +#line 11294 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11285 +#line 11295 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11287 +#line 11297 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11288 +#line 11298 .doubleBattle = FALSE, -#line 11289 +#line 11299 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11291 +#line 11301 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11293 +#line 11303 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11292 +#line 11302 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11295 +#line 11305 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11297 +#line 11307 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11296 +#line 11306 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11299 +#line 11309 [TRAINER_JAMES_2] = { -#line 11300 +#line 11310 .trainerName = _("JAMES"), -#line 11301 +#line 11311 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11302 +#line 11312 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11304 +#line 11314 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11305 +#line 11315 .doubleBattle = FALSE, -#line 11306 +#line 11316 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11308 +#line 11318 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11310 +#line 11320 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11309 +#line 11319 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11312 +#line 11322 [TRAINER_JAMES_3] = { -#line 11313 +#line 11323 .trainerName = _("JAMES"), -#line 11314 +#line 11324 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11315 +#line 11325 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11317 +#line 11327 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11318 +#line 11328 .doubleBattle = FALSE, -#line 11319 +#line 11329 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11321 +#line 11331 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11323 +#line 11333 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11322 +#line 11332 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11325 +#line 11335 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11327 +#line 11337 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11326 +#line 11336 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11329 +#line 11339 [TRAINER_JAMES_4] = { -#line 11330 +#line 11340 .trainerName = _("JAMES"), -#line 11331 +#line 11341 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11332 +#line 11342 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11334 +#line 11344 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11335 +#line 11345 .doubleBattle = FALSE, -#line 11336 +#line 11346 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11338 +#line 11348 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11340 +#line 11350 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11339 +#line 11349 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11342 +#line 11352 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11344 +#line 11354 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11343 +#line 11353 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11346 +#line 11356 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11348 +#line 11358 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11347 +#line 11357 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11350 +#line 11360 [TRAINER_JAMES_5] = { -#line 11351 +#line 11361 .trainerName = _("JAMES"), -#line 11352 +#line 11362 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11353 +#line 11363 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11355 +#line 11365 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11356 +#line 11366 .doubleBattle = FALSE, -#line 11357 +#line 11367 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11359 +#line 11369 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11361 +#line 11371 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11360 +#line 11370 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11363 +#line 11373 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11365 +#line 11375 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11364 +#line 11374 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11367 +#line 11377 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11369 +#line 11379 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11368 +#line 11378 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11371 +#line 11381 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11373 +#line 11383 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11372 +#line 11382 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11375 +#line 11385 [TRAINER_BRICE] = { -#line 11376 +#line 11386 .trainerName = _("BRICE"), -#line 11377 +#line 11387 .trainerClass = TRAINER_CLASS_HIKER, -#line 11378 +#line 11388 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11380 +#line 11390 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11381 +#line 11391 .doubleBattle = FALSE, -#line 11382 +#line 11392 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11384 +#line 11394 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11386 +#line 11396 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11385 +#line 11395 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11388 +#line 11398 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11390 +#line 11400 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11389 +#line 11399 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11392 +#line 11402 [TRAINER_TRENT_1] = { -#line 11393 +#line 11403 .trainerName = _("TRENT"), -#line 11394 +#line 11404 .trainerClass = TRAINER_CLASS_HIKER, -#line 11395 +#line 11405 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11397 +#line 11407 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11398 +#line 11408 .doubleBattle = FALSE, -#line 11399 +#line 11409 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11401 +#line 11411 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11403 +#line 11413 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11402 +#line 11412 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11405 +#line 11415 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11407 +#line 11417 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11406 +#line 11416 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11409 +#line 11419 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11411 +#line 11421 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11410 +#line 11420 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11413 +#line 11423 [TRAINER_LENNY] = { -#line 11414 +#line 11424 .trainerName = _("LENNY"), -#line 11415 +#line 11425 .trainerClass = TRAINER_CLASS_HIKER, -#line 11416 +#line 11426 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11418 +#line 11428 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11419 +#line 11429 .doubleBattle = FALSE, -#line 11420 +#line 11430 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11422 +#line 11432 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11424 +#line 11434 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11423 +#line 11433 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11426 +#line 11436 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11428 +#line 11438 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11427 +#line 11437 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11430 +#line 11440 [TRAINER_LUCAS_1] = { -#line 11431 +#line 11441 .trainerName = _("LUCAS"), -#line 11432 +#line 11442 .trainerClass = TRAINER_CLASS_HIKER, -#line 11433 +#line 11443 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11435 +#line 11445 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11436 +#line 11446 .doubleBattle = FALSE, -#line 11437 +#line 11447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11439 +#line 11449 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11441 +#line 11451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11440 +#line 11450 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11443 +#line 11453 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11445 +#line 11455 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11444 +#line 11454 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11447 +#line 11457 [TRAINER_ALAN] = { -#line 11448 +#line 11458 .trainerName = _("ALAN"), -#line 11449 +#line 11459 .trainerClass = TRAINER_CLASS_HIKER, -#line 11450 +#line 11460 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11452 +#line 11462 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11453 +#line 11463 .doubleBattle = FALSE, -#line 11454 +#line 11464 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11456 +#line 11466 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11458 +#line 11468 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11457 +#line 11467 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11460 +#line 11470 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11462 +#line 11472 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11461 +#line 11471 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11464 +#line 11474 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11466 +#line 11476 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11465 +#line 11475 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11468 +#line 11478 [TRAINER_CLARK] = { -#line 11469 +#line 11479 .trainerName = _("CLARK"), -#line 11470 +#line 11480 .trainerClass = TRAINER_CLASS_HIKER, -#line 11471 +#line 11481 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11473 +#line 11483 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11474 +#line 11484 .doubleBattle = FALSE, -#line 11475 +#line 11485 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11477 +#line 11487 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11479 +#line 11489 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11478 +#line 11488 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11481 +#line 11491 [TRAINER_ERIC] = { -#line 11482 +#line 11492 .trainerName = _("ERIC"), -#line 11483 +#line 11493 .trainerClass = TRAINER_CLASS_HIKER, -#line 11484 +#line 11494 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11486 +#line 11496 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11487 +#line 11497 .doubleBattle = FALSE, -#line 11488 +#line 11498 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11490 +#line 11500 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11492 +#line 11502 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11491 +#line 11501 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11494 +#line 11504 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11496 +#line 11506 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11495 +#line 11505 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11498 +#line 11508 [TRAINER_LUCAS_2] = { -#line 11499 +#line 11509 .trainerName = _("LUCAS"), -#line 11500 +#line 11510 .trainerClass = TRAINER_CLASS_HIKER, -#line 11501 +#line 11511 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11503 +#line 11513 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11504 +#line 11514 .doubleBattle = FALSE, -#line 11505 +#line 11515 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11507 +#line 11517 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11509 +#line 11519 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11508 +#line 11518 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11510 +#line 11520 MOVE_SPLASH, MOVE_WATER_GUN, }, }, }, }, -#line 11513 +#line 11523 [TRAINER_MIKE_1] = { -#line 11514 +#line 11524 .trainerName = _("MIKE"), -#line 11515 +#line 11525 .trainerClass = TRAINER_CLASS_HIKER, -#line 11516 +#line 11526 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11518 +#line 11528 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11519 +#line 11529 .doubleBattle = FALSE, -#line 11520 +#line 11530 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11522 +#line 11532 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11524 +#line 11534 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11523 +#line 11533 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11525 +#line 11535 MOVE_GUST, MOVE_GROWL, }, }, { -#line 11528 +#line 11538 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11530 +#line 11540 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11529 +#line 11539 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11531 +#line 11541 MOVE_BITE, MOVE_SCARY_FACE, }, }, }, }, -#line 11534 +#line 11544 [TRAINER_MIKE_2] = { -#line 11535 +#line 11545 .trainerName = _("MIKE"), -#line 11536 +#line 11546 .trainerClass = TRAINER_CLASS_HIKER, -#line 11537 +#line 11547 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11539 +#line 11549 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11540 +#line 11550 .doubleBattle = FALSE, -#line 11541 +#line 11551 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11543 +#line 11553 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11545 +#line 11555 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11544 +#line 11554 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11547 +#line 11557 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11549 +#line 11559 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11548 +#line 11558 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11551 +#line 11561 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11553 +#line 11563 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11552 +#line 11562 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11555 +#line 11565 [TRAINER_TRENT_2] = { -#line 11556 +#line 11566 .trainerName = _("TRENT"), -#line 11557 +#line 11567 .trainerClass = TRAINER_CLASS_HIKER, -#line 11558 +#line 11568 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11560 +#line 11570 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11561 +#line 11571 .doubleBattle = FALSE, -#line 11562 +#line 11572 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11564 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11566 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11565 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11568 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11570 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11569 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11572 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, #line 11574 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11576 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11573 +#line 11575 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11576 +#line 11578 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11580 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 11579 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11582 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11584 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 11583 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11586 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11578 +#line 11588 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11577 +#line 11587 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11580 +#line 11590 [TRAINER_TRENT_3] = { -#line 11581 +#line 11591 .trainerName = _("TRENT"), -#line 11582 +#line 11592 .trainerClass = TRAINER_CLASS_HIKER, -#line 11583 +#line 11593 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11585 +#line 11595 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11586 +#line 11596 .doubleBattle = FALSE, -#line 11587 +#line 11597 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11589 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11591 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11590 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11593 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11595 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11594 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11597 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, #line 11599 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11601 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11598 +#line 11600 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11601 +#line 11603 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11605 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 11604 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11607 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11603 +#line 11609 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11602 +#line 11608 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11611 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11613 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 11612 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11605 +#line 11615 [TRAINER_TRENT_4] = { -#line 11606 +#line 11616 .trainerName = _("TRENT"), -#line 11607 +#line 11617 .trainerClass = TRAINER_CLASS_HIKER, -#line 11608 +#line 11618 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11610 +#line 11620 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11611 +#line 11621 .doubleBattle = FALSE, -#line 11612 +#line 11622 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11614 +#line 11624 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11616 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11615 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11618 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11620 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11619 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11622 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11624 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11623 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { #line 11626 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 11625 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11628 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11628 +#line 11630 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11627 +#line 11629 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11632 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11634 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 11633 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11636 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11638 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 11637 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11630 +#line 11640 [TRAINER_TRENT_5] = { -#line 11631 +#line 11641 .trainerName = _("TRENT"), -#line 11632 +#line 11642 .trainerClass = TRAINER_CLASS_HIKER, -#line 11633 +#line 11643 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11635 +#line 11645 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11636 +#line 11646 .doubleBattle = FALSE, -#line 11637 +#line 11647 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11639 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11641 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11640 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11643 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11645 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11644 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11647 - .species = SPECIES_GRAVELER, - .gender = TRAINER_MON_RANDOM_GENDER, #line 11649 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11651 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11648 +#line 11650 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11651 +#line 11653 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11655 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 11654 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11657 + .species = SPECIES_GRAVELER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11659 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 11658 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11661 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11653 +#line 11663 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11652 +#line 11662 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11655 +#line 11665 [TRAINER_DEZ_AND_LUKE] = { -#line 11656 +#line 11666 .trainerName = _("DEZ & LUKE"), -#line 11657 +#line 11667 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11658 +#line 11668 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11660 +#line 11670 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11661 +#line 11671 .doubleBattle = TRUE, -#line 11662 +#line 11672 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11664 +#line 11674 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11666 +#line 11676 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11665 +#line 11675 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11668 +#line 11678 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11670 +#line 11680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11669 +#line 11679 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11672 +#line 11682 [TRAINER_LEA_AND_JED] = { -#line 11673 +#line 11683 .trainerName = _("LEA & JED"), -#line 11674 +#line 11684 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11675 +#line 11685 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11677 +#line 11687 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11678 +#line 11688 .doubleBattle = TRUE, -#line 11679 +#line 11689 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11681 +#line 11691 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11683 +#line 11693 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11682 +#line 11692 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11685 +#line 11695 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11687 +#line 11697 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11686 +#line 11696 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11689 +#line 11699 [TRAINER_KIRA_AND_DAN_1] = { -#line 11690 +#line 11700 .trainerName = _("KIRA & DAN"), -#line 11691 +#line 11701 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11692 +#line 11702 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11694 +#line 11704 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11695 +#line 11705 .doubleBattle = TRUE, -#line 11696 +#line 11706 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11698 +#line 11708 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11700 +#line 11710 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11699 +#line 11709 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11702 +#line 11712 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11704 +#line 11714 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11703 +#line 11713 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11706 +#line 11716 [TRAINER_KIRA_AND_DAN_2] = { -#line 11707 +#line 11717 .trainerName = _("KIRA & DAN"), -#line 11708 +#line 11718 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11709 +#line 11719 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11711 +#line 11721 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11712 +#line 11722 .doubleBattle = TRUE, -#line 11713 +#line 11723 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11715 +#line 11725 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11717 +#line 11727 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11716 +#line 11726 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11719 +#line 11729 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11721 +#line 11731 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11720 +#line 11730 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11723 +#line 11733 [TRAINER_KIRA_AND_DAN_3] = { -#line 11724 +#line 11734 .trainerName = _("KIRA & DAN"), -#line 11725 +#line 11735 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11726 +#line 11736 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11728 +#line 11738 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11729 +#line 11739 .doubleBattle = TRUE, -#line 11730 +#line 11740 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11732 +#line 11742 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11734 +#line 11744 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11733 +#line 11743 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11736 +#line 11746 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11738 +#line 11748 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11737 +#line 11747 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11740 +#line 11750 [TRAINER_KIRA_AND_DAN_4] = { -#line 11741 +#line 11751 .trainerName = _("KIRA & DAN"), -#line 11742 +#line 11752 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11743 +#line 11753 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11745 +#line 11755 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11746 +#line 11756 .doubleBattle = TRUE, -#line 11747 +#line 11757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11749 +#line 11759 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11751 +#line 11761 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11750 +#line 11760 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11753 +#line 11763 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11755 +#line 11765 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11754 +#line 11764 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11757 +#line 11767 [TRAINER_KIRA_AND_DAN_5] = { -#line 11758 +#line 11768 .trainerName = _("KIRA & DAN"), -#line 11759 +#line 11769 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11760 +#line 11770 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11762 +#line 11772 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11763 +#line 11773 .doubleBattle = TRUE, -#line 11764 +#line 11774 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11766 +#line 11776 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11768 +#line 11778 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11767 +#line 11777 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11770 +#line 11780 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11772 +#line 11782 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11771 +#line 11781 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11774 +#line 11784 [TRAINER_JOHANNA] = { -#line 11775 +#line 11785 .trainerName = _("JOHANNA"), -#line 11776 +#line 11786 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 11777 +#line 11787 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 11778 +#line 11788 F_TRAINER_FEMALE | -#line 11779 +#line 11789 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11780 +#line 11790 .doubleBattle = FALSE, -#line 11781 +#line 11791 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11783 +#line 11793 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11785 +#line 11795 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11784 +#line 11794 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11787 +#line 11797 [TRAINER_GERALD] = { -#line 11788 +#line 11798 .trainerName = _("GERALD"), -#line 11789 +#line 11799 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 11790 +#line 11800 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 11792 +#line 11802 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 11793 +#line 11803 .items = { ITEM_HYPER_POTION }, -#line 11794 +#line 11804 .doubleBattle = FALSE, -#line 11795 +#line 11805 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11797 +#line 11807 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11799 +#line 11809 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11798 +#line 11808 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11800 +#line 11810 MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK, @@ -29838,39 +29838,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11805 +#line 11815 [TRAINER_VIVIAN] = { -#line 11806 +#line 11816 .trainerName = _("VIVIAN"), -#line 11807 +#line 11817 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11808 +#line 11818 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11809 +#line 11819 F_TRAINER_FEMALE | -#line 11810 +#line 11820 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11811 +#line 11821 .doubleBattle = FALSE, -#line 11812 +#line 11822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11814 +#line 11824 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11816 +#line 11826 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11815 +#line 11825 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11817 +#line 11827 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29878,17 +29878,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11822 +#line 11832 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11824 +#line 11834 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11823 +#line 11833 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11825 +#line 11835 MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, @@ -29897,39 +29897,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11830 +#line 11840 [TRAINER_DANIELLE] = { -#line 11831 +#line 11841 .trainerName = _("DANIELLE"), -#line 11832 +#line 11842 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11833 +#line 11843 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11834 +#line 11844 F_TRAINER_FEMALE | -#line 11835 +#line 11845 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11836 +#line 11846 .doubleBattle = FALSE, -#line 11837 +#line 11847 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11839 +#line 11849 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11841 +#line 11851 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11840 +#line 11850 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11842 +#line 11852 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29938,37 +29938,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11847 +#line 11857 [TRAINER_HIDEO] = { -#line 11848 +#line 11858 .trainerName = _("HIDEO"), -#line 11849 +#line 11859 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11850 +#line 11860 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11852 +#line 11862 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11853 +#line 11863 .doubleBattle = FALSE, -#line 11854 +#line 11864 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11856 +#line 11866 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11858 +#line 11868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11857 +#line 11867 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11859 +#line 11869 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -29976,17 +29976,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11864 +#line 11874 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11866 +#line 11876 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11865 +#line 11875 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11867 +#line 11877 MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, @@ -29995,37 +29995,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11872 +#line 11882 [TRAINER_KEIGO] = { -#line 11873 +#line 11883 .trainerName = _("KEIGO"), -#line 11874 +#line 11884 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11875 +#line 11885 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11877 +#line 11887 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11878 +#line 11888 .doubleBattle = FALSE, -#line 11879 +#line 11889 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11881 +#line 11891 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11883 +#line 11893 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11882 +#line 11892 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11884 +#line 11894 MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30033,17 +30033,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11889 +#line 11899 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11891 +#line 11901 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11890 +#line 11900 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11892 +#line 11902 MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, @@ -30052,37 +30052,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11897 +#line 11907 [TRAINER_RILEY] = { -#line 11898 +#line 11908 .trainerName = _("RILEY"), -#line 11899 +#line 11909 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11900 +#line 11910 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11902 +#line 11912 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11903 +#line 11913 .doubleBattle = FALSE, -#line 11904 +#line 11914 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11906 +#line 11916 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11908 +#line 11918 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11907 +#line 11917 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11909 +#line 11919 MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, @@ -30090,17 +30090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11914 +#line 11924 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11916 +#line 11926 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11915 +#line 11925 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11917 +#line 11927 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30109,170 +30109,170 @@ F_TRAINER_FEMALE | }, }, }, -#line 11922 +#line 11932 [TRAINER_FLINT] = { -#line 11923 +#line 11933 .trainerName = _("FLINT"), -#line 11924 +#line 11934 .trainerClass = TRAINER_CLASS_CAMPER, -#line 11925 +#line 11935 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 11927 +#line 11937 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11928 +#line 11938 .doubleBattle = FALSE, -#line 11929 +#line 11939 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11931 +#line 11941 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11933 +#line 11943 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11932 +#line 11942 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11935 +#line 11945 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11937 +#line 11947 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11936 +#line 11946 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11939 +#line 11949 [TRAINER_ASHLEY] = { -#line 11940 +#line 11950 .trainerName = _("ASHLEY"), -#line 11941 +#line 11951 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 11942 +#line 11952 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 11943 +#line 11953 F_TRAINER_FEMALE | -#line 11944 +#line 11954 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11945 +#line 11955 .doubleBattle = FALSE, -#line 11946 +#line 11956 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11948 - .species = SPECIES_SWABLU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11950 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11949 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11952 - .species = SPECIES_SWABLU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 11954 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11953 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 11956 - .species = SPECIES_SWABLU, - .gender = TRAINER_MON_RANDOM_GENDER, #line 11958 + .species = SPECIES_SWABLU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11960 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11957 +#line 11959 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11962 + .species = SPECIES_SWABLU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11964 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 11963 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 11966 + .species = SPECIES_SWABLU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 11968 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 11967 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11960 +#line 11970 [TRAINER_WALLY_MAUVILLE] = { -#line 11961 +#line 11971 .trainerName = _("WALLY"), -#line 11962 +#line 11972 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11963 +#line 11973 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11965 +#line 11975 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11966 +#line 11976 .doubleBattle = FALSE, -#line 11967 +#line 11977 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11969 +#line 11979 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11971 +#line 11981 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11970 +#line 11980 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11973 +#line 11983 [TRAINER_WALLY_VR_2] = { -#line 11974 +#line 11984 .trainerName = _("WALLY"), -#line 11975 +#line 11985 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11976 +#line 11986 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11978 +#line 11988 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11979 +#line 11989 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 11980 +#line 11990 .doubleBattle = FALSE, -#line 11981 +#line 11991 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 11983 +#line 11993 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11985 +#line 11995 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11984 +#line 11994 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11986 +#line 11996 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30280,17 +30280,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11991 +#line 12001 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11993 +#line 12003 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11992 +#line 12002 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11994 +#line 12004 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30298,17 +30298,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11999 +#line 12009 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12001 +#line 12011 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12000 +#line 12010 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12002 +#line 12012 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30316,17 +30316,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12007 +#line 12017 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12009 +#line 12019 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12008 +#line 12018 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12010 +#line 12020 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30334,17 +30334,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12015 +#line 12025 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12017 +#line 12027 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12016 +#line 12026 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12018 +#line 12028 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30353,39 +30353,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12023 +#line 12033 [TRAINER_WALLY_VR_3] = { -#line 12024 +#line 12034 .trainerName = _("WALLY"), -#line 12025 +#line 12035 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12026 +#line 12036 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12028 +#line 12038 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12029 +#line 12039 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12030 +#line 12040 .doubleBattle = FALSE, -#line 12031 +#line 12041 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12033 +#line 12043 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12035 +#line 12045 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12034 +#line 12044 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12036 +#line 12046 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30393,17 +30393,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12041 +#line 12051 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12043 +#line 12053 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12042 +#line 12052 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12044 +#line 12054 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30411,17 +30411,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12049 +#line 12059 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12051 +#line 12061 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12050 +#line 12060 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12052 +#line 12062 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30429,17 +30429,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12057 +#line 12067 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12059 +#line 12069 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12058 +#line 12068 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12060 +#line 12070 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30447,17 +30447,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12065 +#line 12075 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12067 +#line 12077 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12066 +#line 12076 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12068 +#line 12078 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30466,39 +30466,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12073 +#line 12083 [TRAINER_WALLY_VR_4] = { -#line 12074 +#line 12084 .trainerName = _("WALLY"), -#line 12075 +#line 12085 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12076 +#line 12086 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12078 +#line 12088 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12079 +#line 12089 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12080 +#line 12090 .doubleBattle = FALSE, -#line 12081 +#line 12091 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12083 +#line 12093 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12085 +#line 12095 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12084 +#line 12094 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12086 +#line 12096 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30506,17 +30506,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12091 +#line 12101 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12093 +#line 12103 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12092 +#line 12102 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12094 +#line 12104 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30524,17 +30524,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12099 +#line 12109 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12101 +#line 12111 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12100 +#line 12110 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12102 +#line 12112 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30542,17 +30542,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12107 +#line 12117 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12109 +#line 12119 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12108 +#line 12118 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12110 +#line 12120 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30560,17 +30560,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12115 +#line 12125 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12117 +#line 12127 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12116 +#line 12126 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12118 +#line 12128 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30579,39 +30579,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12123 +#line 12133 [TRAINER_WALLY_VR_5] = { -#line 12124 +#line 12134 .trainerName = _("WALLY"), -#line 12125 +#line 12135 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12126 +#line 12136 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12128 +#line 12138 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12129 +#line 12139 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12130 +#line 12140 .doubleBattle = FALSE, -#line 12131 +#line 12141 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12133 +#line 12143 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12135 +#line 12145 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12134 +#line 12144 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12136 +#line 12146 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30619,17 +30619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12141 +#line 12151 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12143 +#line 12153 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12142 +#line 12152 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12144 +#line 12154 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30637,17 +30637,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12149 +#line 12159 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12151 +#line 12161 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12150 +#line 12160 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12152 +#line 12162 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30655,17 +30655,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12157 +#line 12167 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12159 +#line 12169 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12158 +#line 12168 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12160 +#line 12170 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30673,17 +30673,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12165 +#line 12175 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12167 +#line 12177 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12166 +#line 12176 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12168 +#line 12178 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30692,925 +30692,925 @@ F_TRAINER_FEMALE | }, }, }, -#line 12173 +#line 12183 [TRAINER_BRENDAN_LILYCOVE_MUDKIP] = { -#line 12174 +#line 12184 .trainerName = _("BRENDAN"), -#line 12175 +#line 12185 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12176 +#line 12186 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12178 +#line 12188 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12179 +#line 12189 .doubleBattle = FALSE, -#line 12180 +#line 12190 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12182 +#line 12192 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12184 +#line 12194 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12183 +#line 12193 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12186 +#line 12196 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12188 +#line 12198 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12187 +#line 12197 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12190 +#line 12200 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12192 +#line 12202 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12191 +#line 12201 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12194 +#line 12204 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12196 +#line 12206 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12195 +#line 12205 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12198 +#line 12208 [TRAINER_BRENDAN_LILYCOVE_TREECKO] = { -#line 12199 +#line 12209 .trainerName = _("BRENDAN"), -#line 12200 +#line 12210 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12201 +#line 12211 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12203 +#line 12213 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12204 +#line 12214 .doubleBattle = FALSE, -#line 12205 +#line 12215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12207 +#line 12217 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12209 +#line 12219 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12208 +#line 12218 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12211 +#line 12221 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12213 +#line 12223 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12212 +#line 12222 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12215 +#line 12225 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12217 +#line 12227 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12216 +#line 12226 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12219 +#line 12229 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12221 +#line 12231 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12220 +#line 12230 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12223 +#line 12233 [TRAINER_BRENDAN_LILYCOVE_TORCHIC] = { -#line 12224 +#line 12234 .trainerName = _("BRENDAN"), -#line 12225 +#line 12235 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12226 +#line 12236 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12228 +#line 12238 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12229 +#line 12239 .doubleBattle = FALSE, -#line 12230 +#line 12240 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12232 +#line 12242 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12234 +#line 12244 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12233 +#line 12243 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12236 +#line 12246 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12238 +#line 12248 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12237 +#line 12247 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12240 +#line 12250 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12242 +#line 12252 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12241 +#line 12251 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12244 +#line 12254 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12246 +#line 12256 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12245 +#line 12255 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12248 +#line 12258 [TRAINER_MAY_LILYCOVE_MUDKIP] = { -#line 12249 +#line 12259 .trainerName = _("MAY"), -#line 12250 +#line 12260 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12251 +#line 12261 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12252 +#line 12262 F_TRAINER_FEMALE | -#line 12253 +#line 12263 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12254 +#line 12264 .doubleBattle = FALSE, -#line 12255 +#line 12265 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12257 +#line 12267 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12259 +#line 12269 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12258 +#line 12268 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12261 +#line 12271 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12263 +#line 12273 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12262 +#line 12272 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12265 +#line 12275 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12267 +#line 12277 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12266 +#line 12276 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12269 +#line 12279 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12271 +#line 12281 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12270 +#line 12280 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12273 +#line 12283 [TRAINER_MAY_LILYCOVE_TREECKO] = { -#line 12274 +#line 12284 .trainerName = _("MAY"), -#line 12275 +#line 12285 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12276 +#line 12286 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12277 +#line 12287 F_TRAINER_FEMALE | -#line 12278 +#line 12288 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12279 +#line 12289 .doubleBattle = FALSE, -#line 12280 +#line 12290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12282 +#line 12292 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12284 +#line 12294 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12283 +#line 12293 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12286 +#line 12296 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12288 +#line 12298 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12287 +#line 12297 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12290 +#line 12300 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12292 +#line 12302 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12291 +#line 12301 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12294 +#line 12304 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12296 +#line 12306 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12295 +#line 12305 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12298 +#line 12308 [TRAINER_MAY_LILYCOVE_TORCHIC] = { -#line 12299 +#line 12309 .trainerName = _("MAY"), -#line 12300 +#line 12310 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12301 +#line 12311 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12302 +#line 12312 F_TRAINER_FEMALE | -#line 12303 +#line 12313 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12304 +#line 12314 .doubleBattle = FALSE, -#line 12305 +#line 12315 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12307 +#line 12317 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12309 +#line 12319 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12308 +#line 12318 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12311 +#line 12321 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12313 +#line 12323 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12312 +#line 12322 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12315 +#line 12325 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12317 +#line 12327 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12316 +#line 12326 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12319 +#line 12329 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12321 +#line 12331 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12320 +#line 12330 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12323 +#line 12333 [TRAINER_JONAH] = { -#line 12324 +#line 12334 .trainerName = _("JONAH"), -#line 12325 +#line 12335 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12326 +#line 12336 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12328 +#line 12338 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12329 +#line 12339 .doubleBattle = FALSE, -#line 12330 +#line 12340 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12332 +#line 12342 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12334 +#line 12344 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12333 +#line 12343 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12336 +#line 12346 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12338 +#line 12348 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12337 +#line 12347 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12340 +#line 12350 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12342 +#line 12352 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12341 +#line 12351 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12344 +#line 12354 [TRAINER_HENRY] = { -#line 12345 +#line 12355 .trainerName = _("HENRY"), -#line 12346 +#line 12356 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12347 +#line 12357 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12349 +#line 12359 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12350 +#line 12360 .doubleBattle = FALSE, -#line 12351 +#line 12361 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12353 +#line 12363 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12355 +#line 12365 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12354 +#line 12364 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12357 +#line 12367 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12359 +#line 12369 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12358 +#line 12368 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12361 +#line 12371 [TRAINER_ROGER] = { -#line 12362 +#line 12372 .trainerName = _("ROGER"), -#line 12363 +#line 12373 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12364 +#line 12374 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12366 +#line 12376 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12367 +#line 12377 .doubleBattle = FALSE, -#line 12368 +#line 12378 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12370 +#line 12380 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12372 +#line 12382 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12371 +#line 12381 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12374 +#line 12384 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12376 +#line 12386 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12375 +#line 12385 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12378 +#line 12388 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12380 +#line 12390 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12379 +#line 12389 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12382 +#line 12392 [TRAINER_ALEXA] = { -#line 12383 +#line 12393 .trainerName = _("ALEXA"), -#line 12384 +#line 12394 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12385 +#line 12395 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 12386 +#line 12396 F_TRAINER_FEMALE | -#line 12387 +#line 12397 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12388 +#line 12398 .items = { ITEM_FULL_RESTORE }, -#line 12389 +#line 12399 .doubleBattle = FALSE, -#line 12390 +#line 12400 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12392 +#line 12402 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12394 +#line 12404 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12393 +#line 12403 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12396 +#line 12406 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12398 +#line 12408 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12397 +#line 12407 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12400 +#line 12410 [TRAINER_RUBEN] = { -#line 12401 +#line 12411 .trainerName = _("RUBEN"), -#line 12402 +#line 12412 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12403 +#line 12413 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 12405 +#line 12415 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12406 +#line 12416 .items = { ITEM_HYPER_POTION }, -#line 12407 +#line 12417 .doubleBattle = FALSE, -#line 12408 +#line 12418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12410 +#line 12420 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12412 +#line 12422 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12411 +#line 12421 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12414 +#line 12424 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12416 +#line 12426 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12415 +#line 12425 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12418 +#line 12428 [TRAINER_KOJI_1] = { -#line 12419 +#line 12429 .trainerName = _("KOJI"), -#line 12420 +#line 12430 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 12421 +#line 12431 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 12423 +#line 12433 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12424 +#line 12434 .doubleBattle = FALSE, -#line 12425 +#line 12435 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12427 +#line 12437 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12429 +#line 12439 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12428 +#line 12438 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12431 +#line 12441 [TRAINER_WAYNE] = { -#line 12432 +#line 12442 .trainerName = _("WAYNE"), -#line 12433 +#line 12443 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12434 +#line 12444 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12436 +#line 12446 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12437 +#line 12447 .doubleBattle = FALSE, -#line 12438 +#line 12448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12440 +#line 12450 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12442 +#line 12452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12441 +#line 12451 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12444 +#line 12454 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12446 +#line 12456 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12445 +#line 12455 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12448 +#line 12458 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12450 +#line 12460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12449 +#line 12459 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12452 +#line 12462 [TRAINER_AIDAN] = { -#line 12453 +#line 12463 .trainerName = _("AIDAN"), -#line 12454 +#line 12464 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 12455 +#line 12465 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 12457 +#line 12467 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12458 +#line 12468 .doubleBattle = FALSE, -#line 12459 +#line 12469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12461 +#line 12471 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12463 +#line 12473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12462 +#line 12472 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12465 +#line 12475 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12467 +#line 12477 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12466 +#line 12476 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12469 +#line 12479 [TRAINER_REED] = { -#line 12470 +#line 12480 .trainerName = _("REED"), -#line 12471 +#line 12481 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 12472 +#line 12482 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 12474 +#line 12484 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12475 +#line 12485 .doubleBattle = FALSE, -#line 12476 +#line 12486 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12478 +#line 12488 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12480 +#line 12490 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12479 +#line 12489 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12482 +#line 12492 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12484 +#line 12494 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12483 +#line 12493 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12486 +#line 12496 [TRAINER_TISHA] = { -#line 12487 +#line 12497 .trainerName = _("TISHA"), -#line 12488 +#line 12498 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 12489 +#line 12499 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 12490 +#line 12500 F_TRAINER_FEMALE | -#line 12491 +#line 12501 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12492 +#line 12502 .doubleBattle = FALSE, -#line 12493 +#line 12503 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12495 +#line 12505 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12497 +#line 12507 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12496 +#line 12506 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12499 +#line 12509 [TRAINER_TORI_AND_TIA] = { -#line 12500 +#line 12510 .trainerName = _("TORI & TIA"), -#line 12501 +#line 12511 .trainerClass = TRAINER_CLASS_TWINS, -#line 12502 +#line 12512 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 12504 +#line 12514 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12505 +#line 12515 .doubleBattle = TRUE, -#line 12506 +#line 12516 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12508 +#line 12518 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12510 +#line 12520 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12509 +#line 12519 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12512 +#line 12522 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12514 +#line 12524 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12513 +#line 12523 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12516 +#line 12526 [TRAINER_KIM_AND_IRIS] = { -#line 12517 +#line 12527 .trainerName = _("KIM & IRIS"), -#line 12518 +#line 12528 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12519 +#line 12529 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12521 +#line 12531 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12522 +#line 12532 .doubleBattle = TRUE, -#line 12523 +#line 12533 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12525 +#line 12535 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12527 +#line 12537 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12526 +#line 12536 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12528 +#line 12538 MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, @@ -31618,17 +31618,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12533 +#line 12543 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12535 +#line 12545 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12534 +#line 12544 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12536 +#line 12546 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, @@ -31637,37 +31637,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12541 +#line 12551 [TRAINER_TYRA_AND_IVY] = { -#line 12542 +#line 12552 .trainerName = _("TYRA & IVY"), -#line 12543 +#line 12553 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12544 +#line 12554 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12546 +#line 12556 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12547 +#line 12557 .doubleBattle = TRUE, -#line 12548 +#line 12558 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12550 +#line 12560 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12552 +#line 12562 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12551 +#line 12561 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12553 +#line 12563 MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, @@ -31675,17 +31675,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12558 +#line 12568 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12560 +#line 12570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12559 +#line 12569 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12561 +#line 12571 MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, @@ -31694,37 +31694,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12566 +#line 12576 [TRAINER_MEL_AND_PAUL] = { -#line 12567 +#line 12577 .trainerName = _("MEL & PAUL"), -#line 12568 +#line 12578 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 12569 +#line 12579 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 12571 +#line 12581 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12572 +#line 12582 .doubleBattle = TRUE, -#line 12573 +#line 12583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12575 +#line 12585 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12577 +#line 12587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12576 +#line 12586 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12578 +#line 12588 MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, @@ -31732,17 +31732,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12583 +#line 12593 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12585 +#line 12595 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12584 +#line 12594 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12586 +#line 12596 MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, @@ -31751,37 +31751,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12591 +#line 12601 [TRAINER_JOHN_AND_JAY_1] = { -#line 12592 +#line 12602 .trainerName = _("JOHN & JAY"), -#line 12593 +#line 12603 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12594 +#line 12604 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12596 +#line 12606 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12597 +#line 12607 .doubleBattle = TRUE, -#line 12598 +#line 12608 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12600 +#line 12610 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12602 +#line 12612 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12601 +#line 12611 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12603 +#line 12613 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31789,17 +31789,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12608 +#line 12618 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12610 +#line 12620 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12609 +#line 12619 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12611 +#line 12621 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31808,37 +31808,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12616 +#line 12626 [TRAINER_JOHN_AND_JAY_2] = { -#line 12617 +#line 12627 .trainerName = _("JOHN & JAY"), -#line 12618 +#line 12628 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12619 +#line 12629 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12621 +#line 12631 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12622 +#line 12632 .doubleBattle = TRUE, -#line 12623 +#line 12633 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12625 +#line 12635 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12627 +#line 12637 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12626 +#line 12636 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12628 +#line 12638 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31846,17 +31846,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12633 +#line 12643 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12635 +#line 12645 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12634 +#line 12644 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12636 +#line 12646 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31865,37 +31865,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12641 +#line 12651 [TRAINER_JOHN_AND_JAY_3] = { -#line 12642 +#line 12652 .trainerName = _("JOHN & JAY"), -#line 12643 +#line 12653 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12644 +#line 12654 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12646 +#line 12656 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12647 +#line 12657 .doubleBattle = TRUE, -#line 12648 +#line 12658 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12650 +#line 12660 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12652 +#line 12662 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12651 +#line 12661 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12653 +#line 12663 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31903,17 +31903,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12658 +#line 12668 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12660 +#line 12670 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12659 +#line 12669 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12661 +#line 12671 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31922,37 +31922,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12666 +#line 12676 [TRAINER_JOHN_AND_JAY_4] = { -#line 12667 +#line 12677 .trainerName = _("JOHN & JAY"), -#line 12668 +#line 12678 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12669 +#line 12679 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12671 +#line 12681 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12672 +#line 12682 .doubleBattle = TRUE, -#line 12673 +#line 12683 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12675 +#line 12685 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12677 +#line 12687 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12676 +#line 12686 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12678 +#line 12688 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31960,17 +31960,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12683 +#line 12693 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12685 +#line 12695 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12684 +#line 12694 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12686 +#line 12696 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31979,37 +31979,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12691 +#line 12701 [TRAINER_JOHN_AND_JAY_5] = { -#line 12692 +#line 12702 .trainerName = _("JOHN & JAY"), -#line 12693 +#line 12703 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12694 +#line 12704 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12696 +#line 12706 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12697 +#line 12707 .doubleBattle = TRUE, -#line 12698 +#line 12708 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12700 +#line 12710 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12702 +#line 12712 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12701 +#line 12711 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12703 +#line 12713 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -32017,17 +32017,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12708 +#line 12718 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12710 +#line 12720 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12709 +#line 12719 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12711 +#line 12721 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -32036,3098 +32036,3098 @@ F_TRAINER_FEMALE | }, }, }, -#line 12716 +#line 12726 [TRAINER_RELI_AND_IAN] = { -#line 12717 +#line 12727 .trainerName = _("RELI & IAN"), -#line 12718 +#line 12728 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12719 +#line 12729 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12721 +#line 12731 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12722 +#line 12732 .doubleBattle = TRUE, -#line 12723 +#line 12733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12725 +#line 12735 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12727 +#line 12737 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12726 +#line 12736 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12729 +#line 12739 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12731 +#line 12741 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12730 +#line 12740 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12733 +#line 12743 [TRAINER_LILA_AND_ROY_1] = { -#line 12734 +#line 12744 .trainerName = _("LILA & ROY"), -#line 12735 +#line 12745 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12736 +#line 12746 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12738 +#line 12748 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12739 +#line 12749 .doubleBattle = TRUE, -#line 12740 +#line 12750 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12742 +#line 12752 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12744 +#line 12754 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12743 +#line 12753 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12746 +#line 12756 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12748 +#line 12758 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12747 +#line 12757 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12750 +#line 12760 [TRAINER_LILA_AND_ROY_2] = { -#line 12751 +#line 12761 .trainerName = _("LILA & ROY"), -#line 12752 +#line 12762 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12753 +#line 12763 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12755 +#line 12765 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12756 +#line 12766 .doubleBattle = TRUE, -#line 12757 +#line 12767 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12759 +#line 12769 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12761 +#line 12771 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12760 +#line 12770 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12763 +#line 12773 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12765 +#line 12775 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12764 +#line 12774 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12767 +#line 12777 [TRAINER_LILA_AND_ROY_3] = { -#line 12768 +#line 12778 .trainerName = _("LILA & ROY"), -#line 12769 +#line 12779 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12770 +#line 12780 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12772 +#line 12782 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12773 +#line 12783 .doubleBattle = TRUE, -#line 12774 +#line 12784 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12776 +#line 12786 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12778 +#line 12788 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12777 +#line 12787 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12780 +#line 12790 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12782 +#line 12792 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12781 +#line 12791 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12784 +#line 12794 [TRAINER_LILA_AND_ROY_4] = { -#line 12785 +#line 12795 .trainerName = _("LILA & ROY"), -#line 12786 +#line 12796 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12787 +#line 12797 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12789 +#line 12799 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12790 +#line 12800 .doubleBattle = TRUE, -#line 12791 +#line 12801 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12793 +#line 12803 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12795 +#line 12805 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12794 +#line 12804 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12797 +#line 12807 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12799 +#line 12809 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12798 +#line 12808 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12801 +#line 12811 [TRAINER_LILA_AND_ROY_5] = { -#line 12802 +#line 12812 .trainerName = _("LILA & ROY"), -#line 12803 +#line 12813 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12804 +#line 12814 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12806 +#line 12816 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12807 +#line 12817 .doubleBattle = TRUE, -#line 12808 +#line 12818 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12810 +#line 12820 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12812 +#line 12822 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12811 +#line 12821 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12814 +#line 12824 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12816 +#line 12826 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12815 +#line 12825 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12818 +#line 12828 [TRAINER_LISA_AND_RAY] = { -#line 12819 +#line 12829 .trainerName = _("LISA & RAY"), -#line 12820 +#line 12830 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12821 +#line 12831 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12823 +#line 12833 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12824 +#line 12834 .doubleBattle = TRUE, -#line 12825 +#line 12835 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12827 +#line 12837 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12829 +#line 12839 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12828 +#line 12838 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12831 +#line 12841 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12833 +#line 12843 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12832 +#line 12842 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12835 +#line 12845 [TRAINER_CHRIS] = { -#line 12836 +#line 12846 .trainerName = _("CHRIS"), -#line 12837 +#line 12847 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12838 +#line 12848 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12840 +#line 12850 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12841 +#line 12851 .doubleBattle = FALSE, -#line 12842 +#line 12852 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12844 +#line 12854 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12846 +#line 12856 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12845 +#line 12855 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12848 +#line 12858 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12850 +#line 12860 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12849 +#line 12859 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12852 +#line 12862 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12854 +#line 12864 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12853 +#line 12863 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12856 +#line 12866 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12858 +#line 12868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12857 +#line 12867 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12860 +#line 12870 [TRAINER_DAWSON] = { -#line 12861 +#line 12871 .trainerName = _("DAWSON"), -#line 12862 +#line 12872 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 12863 +#line 12873 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 12865 +#line 12875 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 12866 +#line 12876 .doubleBattle = FALSE, -#line 12867 +#line 12877 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12869 +#line 12879 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12869 +#line 12879 .heldItem = ITEM_NUGGET, -#line 12871 +#line 12881 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12870 +#line 12880 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12873 +#line 12883 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12875 +#line 12885 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12874 +#line 12884 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12877 +#line 12887 [TRAINER_SARAH] = { -#line 12878 +#line 12888 .trainerName = _("SARAH"), -#line 12879 +#line 12889 .trainerClass = TRAINER_CLASS_LADY, -#line 12880 +#line 12890 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 12881 +#line 12891 F_TRAINER_FEMALE | -#line 12882 +#line 12892 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12883 +#line 12893 .items = { ITEM_FULL_RESTORE }, -#line 12884 +#line 12894 .doubleBattle = FALSE, -#line 12885 +#line 12895 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12887 +#line 12897 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12889 +#line 12899 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12888 +#line 12898 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12891 +#line 12901 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12891 +#line 12901 .heldItem = ITEM_NUGGET, -#line 12893 +#line 12903 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12892 +#line 12902 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12895 +#line 12905 [TRAINER_DARIAN] = { -#line 12896 +#line 12906 .trainerName = _("DARIAN"), -#line 12897 +#line 12907 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12898 +#line 12908 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12900 +#line 12910 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12901 +#line 12911 .doubleBattle = FALSE, -#line 12902 +#line 12912 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12904 +#line 12914 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12906 +#line 12916 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12905 +#line 12915 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12908 +#line 12918 [TRAINER_HAILEY] = { -#line 12909 +#line 12919 .trainerName = _("HAILEY"), -#line 12910 +#line 12920 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 12911 +#line 12921 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 12912 +#line 12922 F_TRAINER_FEMALE | -#line 12913 +#line 12923 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12914 +#line 12924 .doubleBattle = FALSE, -#line 12915 +#line 12925 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12917 +#line 12927 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12919 +#line 12929 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12918 +#line 12928 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12921 +#line 12931 [TRAINER_CHANDLER] = { -#line 12922 +#line 12932 .trainerName = _("CHANDLER"), -#line 12923 +#line 12933 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 12924 +#line 12934 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 12926 +#line 12936 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12927 +#line 12937 .doubleBattle = FALSE, -#line 12928 +#line 12938 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12930 +#line 12940 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12932 +#line 12942 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12931 +#line 12941 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12934 +#line 12944 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12936 +#line 12946 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12935 +#line 12945 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12938 +#line 12948 [TRAINER_KALEB] = { -#line 12939 +#line 12949 .trainerName = _("KALEB"), -#line 12940 +#line 12950 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 12941 +#line 12951 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 12943 +#line 12953 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12944 +#line 12954 .doubleBattle = FALSE, -#line 12945 +#line 12955 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12947 +#line 12957 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12947 +#line 12957 .heldItem = ITEM_ORAN_BERRY, -#line 12949 +#line 12959 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12948 +#line 12958 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12951 +#line 12961 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12951 +#line 12961 .heldItem = ITEM_ORAN_BERRY, -#line 12953 +#line 12963 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12952 +#line 12962 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12955 +#line 12965 [TRAINER_JOSEPH] = { -#line 12956 +#line 12966 .trainerName = _("JOSEPH"), -#line 12957 +#line 12967 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12958 +#line 12968 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 12960 +#line 12970 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12961 +#line 12971 .doubleBattle = FALSE, -#line 12962 +#line 12972 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12964 +#line 12974 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12966 +#line 12976 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12965 +#line 12975 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12968 +#line 12978 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12970 +#line 12980 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12969 +#line 12979 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12972 +#line 12982 [TRAINER_ALYSSA] = { -#line 12973 +#line 12983 .trainerName = _("ALYSSA"), -#line 12974 +#line 12984 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 12975 +#line 12985 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 12976 +#line 12986 F_TRAINER_FEMALE | -#line 12977 +#line 12987 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12978 +#line 12988 .doubleBattle = FALSE, -#line 12979 +#line 12989 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12981 +#line 12991 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12983 +#line 12993 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12982 +#line 12992 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12985 +#line 12995 [TRAINER_MARCOS] = { -#line 12986 +#line 12996 .trainerName = _("MARCOS"), -#line 12987 +#line 12997 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12988 +#line 12998 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 12990 +#line 13000 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12991 +#line 13001 .doubleBattle = FALSE, -#line 12992 +#line 13002 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12994 +#line 13004 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12996 +#line 13006 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12995 +#line 13005 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12998 +#line 13008 [TRAINER_RHETT] = { -#line 12999 +#line 13009 .trainerName = _("RHETT"), -#line 13000 +#line 13010 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 13001 +#line 13011 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 13003 +#line 13013 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13004 +#line 13014 .doubleBattle = FALSE, -#line 13005 +#line 13015 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13007 +#line 13017 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13009 +#line 13019 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13008 +#line 13018 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13011 +#line 13021 [TRAINER_TYRON] = { -#line 13012 +#line 13022 .trainerName = _("TYRON"), -#line 13013 +#line 13023 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13014 +#line 13024 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13016 +#line 13026 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13017 +#line 13027 .doubleBattle = FALSE, -#line 13018 +#line 13028 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13020 +#line 13030 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13022 +#line 13032 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13021 +#line 13031 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13024 +#line 13034 [TRAINER_CELINA] = { -#line 13025 +#line 13035 .trainerName = _("CELINA"), -#line 13026 +#line 13036 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13027 +#line 13037 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13028 +#line 13038 F_TRAINER_FEMALE | -#line 13029 +#line 13039 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13030 +#line 13040 .doubleBattle = FALSE, -#line 13031 +#line 13041 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13033 +#line 13043 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13035 +#line 13045 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13034 +#line 13044 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13037 +#line 13047 [TRAINER_BIANCA] = { -#line 13038 +#line 13048 .trainerName = _("BIANCA"), -#line 13039 +#line 13049 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13040 +#line 13050 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13041 +#line 13051 F_TRAINER_FEMALE | -#line 13042 +#line 13052 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13043 +#line 13053 .doubleBattle = FALSE, -#line 13044 +#line 13054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13046 +#line 13056 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13048 +#line 13058 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13047 +#line 13057 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13050 +#line 13060 [TRAINER_HAYDEN] = { -#line 13051 +#line 13061 .trainerName = _("HAYDEN"), -#line 13052 +#line 13062 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13053 +#line 13063 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13055 +#line 13065 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13056 +#line 13066 .doubleBattle = FALSE, -#line 13057 +#line 13067 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13059 +#line 13069 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13061 +#line 13071 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13060 +#line 13070 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13063 +#line 13073 [TRAINER_SOPHIE] = { -#line 13064 +#line 13074 .trainerName = _("SOPHIE"), -#line 13065 +#line 13075 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13066 +#line 13076 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13067 +#line 13077 F_TRAINER_FEMALE | -#line 13068 +#line 13078 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13069 +#line 13079 .doubleBattle = FALSE, -#line 13070 +#line 13080 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13072 +#line 13082 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13074 +#line 13084 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13073 +#line 13083 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13076 +#line 13086 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13078 +#line 13088 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13077 +#line 13087 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13080 +#line 13090 [TRAINER_COBY] = { -#line 13081 +#line 13091 .trainerName = _("COBY"), -#line 13082 +#line 13092 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13083 +#line 13093 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13085 +#line 13095 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13086 +#line 13096 .doubleBattle = FALSE, -#line 13087 +#line 13097 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13089 +#line 13099 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13091 +#line 13101 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13090 +#line 13100 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13093 +#line 13103 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13095 +#line 13105 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13094 +#line 13104 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13097 +#line 13107 [TRAINER_LAWRENCE] = { -#line 13098 +#line 13108 .trainerName = _("LAWRENCE"), -#line 13099 +#line 13109 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13100 +#line 13110 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13102 +#line 13112 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13103 +#line 13113 .doubleBattle = FALSE, -#line 13104 +#line 13114 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13106 +#line 13116 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13108 +#line 13118 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13107 +#line 13117 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13110 +#line 13120 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13112 +#line 13122 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13111 +#line 13121 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13114 +#line 13124 [TRAINER_WYATT] = { -#line 13115 +#line 13125 .trainerName = _("WYATT"), -#line 13116 +#line 13126 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 13117 +#line 13127 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 13119 +#line 13129 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13120 +#line 13130 .doubleBattle = FALSE, -#line 13121 +#line 13131 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13123 +#line 13133 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13125 +#line 13135 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13124 +#line 13134 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13127 +#line 13137 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13129 +#line 13139 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13128 +#line 13138 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13131 +#line 13141 [TRAINER_ANGELINA] = { -#line 13132 +#line 13142 .trainerName = _("ANGELINA"), -#line 13133 +#line 13143 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13134 +#line 13144 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13135 +#line 13145 F_TRAINER_FEMALE | -#line 13136 +#line 13146 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13137 +#line 13147 .doubleBattle = FALSE, -#line 13138 +#line 13148 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13140 +#line 13150 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13142 +#line 13152 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13141 +#line 13151 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13144 +#line 13154 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13146 +#line 13156 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13145 +#line 13155 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13148 +#line 13158 [TRAINER_KAI] = { -#line 13149 +#line 13159 .trainerName = _("KAI"), -#line 13150 +#line 13160 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 13151 +#line 13161 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 13153 +#line 13163 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13154 +#line 13164 .doubleBattle = FALSE, -#line 13155 +#line 13165 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13157 +#line 13167 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13159 +#line 13169 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13158 +#line 13168 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13161 +#line 13171 [TRAINER_CHARLOTTE] = { -#line 13162 +#line 13172 .trainerName = _("CHARLOTTE"), -#line 13163 +#line 13173 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13164 +#line 13174 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13165 +#line 13175 F_TRAINER_FEMALE | -#line 13166 +#line 13176 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13167 +#line 13177 .doubleBattle = FALSE, -#line 13168 +#line 13178 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13170 +#line 13180 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13172 +#line 13182 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13171 +#line 13181 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13174 +#line 13184 [TRAINER_DEANDRE] = { -#line 13175 +#line 13185 .trainerName = _("DEANDRE"), -#line 13176 +#line 13186 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13177 +#line 13187 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13179 +#line 13189 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13180 +#line 13190 .doubleBattle = FALSE, -#line 13181 +#line 13191 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13183 +#line 13193 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13185 +#line 13195 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13184 +#line 13194 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13187 +#line 13197 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13189 +#line 13199 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13188 +#line 13198 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13191 +#line 13201 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13193 +#line 13203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13192 +#line 13202 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13195 +#line 13205 [TRAINER_GRUNT_MAGMA_HIDEOUT_1] = { -#line 13196 +#line 13206 .trainerName = _("GRUNT"), -#line 13197 +#line 13207 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13198 +#line 13208 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13200 +#line 13210 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13201 +#line 13211 .doubleBattle = FALSE, -#line 13202 +#line 13212 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13204 +#line 13214 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13206 +#line 13216 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13205 +#line 13215 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13208 +#line 13218 [TRAINER_GRUNT_MAGMA_HIDEOUT_2] = { -#line 13209 +#line 13219 .trainerName = _("GRUNT"), -#line 13210 +#line 13220 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13211 +#line 13221 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13213 +#line 13223 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13214 +#line 13224 .doubleBattle = FALSE, -#line 13215 +#line 13225 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13217 +#line 13227 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13219 +#line 13229 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13218 +#line 13228 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13221 +#line 13231 [TRAINER_GRUNT_MAGMA_HIDEOUT_3] = { -#line 13222 +#line 13232 .trainerName = _("GRUNT"), -#line 13223 +#line 13233 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13224 +#line 13234 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13226 +#line 13236 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13227 +#line 13237 .doubleBattle = FALSE, -#line 13228 +#line 13238 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13230 +#line 13240 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13232 +#line 13242 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13231 +#line 13241 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13234 +#line 13244 [TRAINER_GRUNT_MAGMA_HIDEOUT_4] = { -#line 13235 +#line 13245 .trainerName = _("GRUNT"), -#line 13236 +#line 13246 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13237 +#line 13247 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13239 +#line 13249 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13240 +#line 13250 .doubleBattle = FALSE, -#line 13241 +#line 13251 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13243 +#line 13253 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13245 +#line 13255 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13244 +#line 13254 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13247 +#line 13257 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13249 +#line 13259 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13248 +#line 13258 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13251 +#line 13261 [TRAINER_GRUNT_MAGMA_HIDEOUT_5] = { -#line 13252 +#line 13262 .trainerName = _("GRUNT"), -#line 13253 +#line 13263 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13254 +#line 13264 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13256 +#line 13266 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13257 +#line 13267 .doubleBattle = FALSE, -#line 13258 +#line 13268 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13260 +#line 13270 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13262 +#line 13272 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13261 +#line 13271 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13264 +#line 13274 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13266 +#line 13276 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13265 +#line 13275 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13268 +#line 13278 [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = { -#line 13269 +#line 13279 .trainerName = _("GRUNT"), -#line 13270 +#line 13280 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13271 +#line 13281 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13273 +#line 13283 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13274 +#line 13284 .doubleBattle = FALSE, -#line 13275 +#line 13285 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13277 +#line 13287 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13279 +#line 13289 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13278 +#line 13288 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13281 +#line 13291 [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = { -#line 13282 +#line 13292 .trainerName = _("GRUNT"), -#line 13283 +#line 13293 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13284 +#line 13294 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13286 +#line 13296 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13287 +#line 13297 .doubleBattle = FALSE, -#line 13288 +#line 13298 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13290 +#line 13300 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13292 +#line 13302 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13291 +#line 13301 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13294 +#line 13304 [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = { -#line 13295 +#line 13305 .trainerName = _("GRUNT"), -#line 13296 +#line 13306 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13297 +#line 13307 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13299 +#line 13309 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13300 +#line 13310 .doubleBattle = FALSE, -#line 13301 +#line 13311 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13303 +#line 13313 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13305 +#line 13315 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13304 +#line 13314 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13307 +#line 13317 [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = { -#line 13308 +#line 13318 .trainerName = _("GRUNT"), -#line 13309 +#line 13319 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13310 +#line 13320 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13312 +#line 13322 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13313 +#line 13323 .doubleBattle = FALSE, -#line 13314 +#line 13324 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13316 +#line 13326 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13318 +#line 13328 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13317 +#line 13327 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13320 +#line 13330 [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = { -#line 13321 +#line 13331 .trainerName = _("GRUNT"), -#line 13322 +#line 13332 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13323 +#line 13333 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13325 +#line 13335 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13326 +#line 13336 .doubleBattle = FALSE, -#line 13327 +#line 13337 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13329 +#line 13339 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13331 +#line 13341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13330 +#line 13340 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13333 +#line 13343 [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = { -#line 13334 +#line 13344 .trainerName = _("GRUNT"), -#line 13335 +#line 13345 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13336 +#line 13346 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13338 +#line 13348 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13339 +#line 13349 .doubleBattle = FALSE, -#line 13340 +#line 13350 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13342 +#line 13352 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13344 +#line 13354 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13343 +#line 13353 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13346 +#line 13356 [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = { -#line 13347 +#line 13357 .trainerName = _("GRUNT"), -#line 13348 +#line 13358 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13349 +#line 13359 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13351 +#line 13361 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13352 +#line 13362 .doubleBattle = FALSE, -#line 13353 +#line 13363 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13355 +#line 13365 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13357 +#line 13367 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13356 +#line 13366 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13359 +#line 13369 [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = { -#line 13360 +#line 13370 .trainerName = _("GRUNT"), -#line 13361 +#line 13371 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13362 +#line 13372 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13364 +#line 13374 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13365 +#line 13375 .doubleBattle = FALSE, -#line 13366 +#line 13376 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13368 +#line 13378 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13370 +#line 13380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13369 +#line 13379 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13372 +#line 13382 [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = { -#line 13373 +#line 13383 .trainerName = _("GRUNT"), -#line 13374 +#line 13384 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13375 +#line 13385 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13376 +#line 13386 F_TRAINER_FEMALE | -#line 13377 +#line 13387 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13378 +#line 13388 .doubleBattle = FALSE, -#line 13379 +#line 13389 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13381 +#line 13391 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13383 +#line 13393 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13382 +#line 13392 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13385 +#line 13395 [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = { -#line 13386 +#line 13396 .trainerName = _("GRUNT"), -#line 13387 +#line 13397 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13388 +#line 13398 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13389 +#line 13399 F_TRAINER_FEMALE | -#line 13390 +#line 13400 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13391 +#line 13401 .doubleBattle = FALSE, -#line 13392 +#line 13402 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13394 +#line 13404 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13396 +#line 13406 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13395 +#line 13405 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13398 +#line 13408 [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = { -#line 13399 +#line 13409 .trainerName = _("GRUNT"), -#line 13400 +#line 13410 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13401 +#line 13411 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13402 +#line 13412 F_TRAINER_FEMALE | -#line 13403 +#line 13413 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13404 +#line 13414 .doubleBattle = FALSE, -#line 13405 +#line 13415 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13407 +#line 13417 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13409 +#line 13419 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13408 +#line 13418 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13411 +#line 13421 [TRAINER_TABITHA_MAGMA_HIDEOUT] = { -#line 13412 +#line 13422 .trainerName = _("TABITHA"), -#line 13413 +#line 13423 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 13414 +#line 13424 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 13416 +#line 13426 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13417 +#line 13427 .doubleBattle = FALSE, -#line 13418 +#line 13428 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 13420 +#line 13430 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13422 +#line 13432 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13421 +#line 13431 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13424 +#line 13434 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13426 +#line 13436 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13425 +#line 13435 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13428 +#line 13438 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13430 +#line 13440 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13429 +#line 13439 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13432 +#line 13442 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13434 +#line 13444 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13433 +#line 13443 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13436 +#line 13446 [TRAINER_DARCY] = { -#line 13437 +#line 13447 .trainerName = _("DARCY"), -#line 13438 +#line 13448 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13439 +#line 13449 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 13440 +#line 13450 F_TRAINER_FEMALE | -#line 13441 +#line 13451 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13442 +#line 13452 .items = { ITEM_HYPER_POTION }, -#line 13443 +#line 13453 .doubleBattle = FALSE, -#line 13444 +#line 13454 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13446 +#line 13456 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13448 +#line 13458 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13447 +#line 13457 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13450 +#line 13460 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13452 +#line 13462 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13451 +#line 13461 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13454 +#line 13464 [TRAINER_MAXIE_MOSSDEEP] = { -#line 13455 +#line 13465 .trainerName = _("MAXIE"), -#line 13456 +#line 13466 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 13457 +#line 13467 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 13459 +#line 13469 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13460 +#line 13470 .doubleBattle = FALSE, -#line 13461 +#line 13471 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13463 +#line 13473 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13465 +#line 13475 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13464 +#line 13474 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13467 +#line 13477 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13469 +#line 13479 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13468 +#line 13478 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13471 +#line 13481 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13473 +#line 13483 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13472 +#line 13482 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13475 +#line 13485 [TRAINER_PETE] = { -#line 13476 +#line 13486 .trainerName = _("PETE"), -#line 13477 +#line 13487 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 13478 +#line 13488 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 13480 +#line 13490 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13481 +#line 13491 .doubleBattle = FALSE, -#line 13482 +#line 13492 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13484 +#line 13494 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13486 +#line 13496 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13485 +#line 13495 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13488 +#line 13498 [TRAINER_ISABELLE] = { -#line 13489 +#line 13499 .trainerName = _("ISABELLE"), -#line 13490 +#line 13500 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 13491 +#line 13501 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 13492 +#line 13502 F_TRAINER_FEMALE | -#line 13493 +#line 13503 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13494 +#line 13504 .doubleBattle = FALSE, -#line 13495 +#line 13505 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13497 +#line 13507 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13499 +#line 13509 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13498 +#line 13508 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13501 +#line 13511 [TRAINER_ANDRES_1] = { -#line 13502 +#line 13512 .trainerName = _("ANDRES"), -#line 13503 +#line 13513 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 13504 +#line 13514 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 13506 +#line 13516 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13507 +#line 13517 .doubleBattle = FALSE, -#line 13508 +#line 13518 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13510 +#line 13520 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13512 +#line 13522 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13511 +#line 13521 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13514 +#line 13524 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13516 +#line 13526 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13515 +#line 13525 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13518 +#line 13528 [TRAINER_JOSUE] = { -#line 13519 +#line 13529 .trainerName = _("JOSUE"), -#line 13520 +#line 13530 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13521 +#line 13531 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13523 +#line 13533 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13524 +#line 13534 .doubleBattle = FALSE, -#line 13525 +#line 13535 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13527 +#line 13537 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13529 +#line 13539 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13528 +#line 13538 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13531 +#line 13541 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13533 +#line 13543 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13532 +#line 13542 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13535 +#line 13545 [TRAINER_CAMRON] = { -#line 13536 +#line 13546 .trainerName = _("CAMRON"), -#line 13537 +#line 13547 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13538 +#line 13548 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 13540 +#line 13550 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13541 +#line 13551 .doubleBattle = FALSE, -#line 13542 +#line 13552 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13544 +#line 13554 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13546 +#line 13556 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13545 +#line 13555 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13548 +#line 13558 [TRAINER_CORY_1] = { -#line 13549 +#line 13559 .trainerName = _("CORY"), -#line 13550 +#line 13560 .trainerClass = TRAINER_CLASS_SAILOR, -#line 13551 +#line 13561 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 13553 +#line 13563 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13554 +#line 13564 .doubleBattle = FALSE, -#line 13555 +#line 13565 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13557 +#line 13567 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13559 +#line 13569 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13558 +#line 13568 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13561 +#line 13571 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13563 +#line 13573 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13562 +#line 13572 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13565 +#line 13575 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13567 +#line 13577 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13566 +#line 13576 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13569 +#line 13579 [TRAINER_CAROLINA] = { -#line 13570 +#line 13580 .trainerName = _("CAROLINA"), -#line 13571 +#line 13581 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13572 +#line 13582 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 13573 +#line 13583 F_TRAINER_FEMALE | -#line 13574 +#line 13584 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13575 +#line 13585 .items = { ITEM_HYPER_POTION }, -#line 13576 +#line 13586 .doubleBattle = FALSE, -#line 13577 +#line 13587 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13579 +#line 13589 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13581 +#line 13591 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13580 +#line 13590 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13583 +#line 13593 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13585 +#line 13595 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13584 +#line 13594 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13587 +#line 13597 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13589 +#line 13599 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13588 +#line 13598 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13591 +#line 13601 [TRAINER_ELIJAH] = { -#line 13592 +#line 13602 .trainerName = _("ELIJAH"), -#line 13593 +#line 13603 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13594 +#line 13604 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13596 +#line 13606 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13597 +#line 13607 .doubleBattle = FALSE, -#line 13598 +#line 13608 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13600 +#line 13610 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13602 +#line 13612 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13601 +#line 13611 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13604 +#line 13614 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13606 +#line 13616 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13605 +#line 13615 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13608 +#line 13618 [TRAINER_CELIA] = { -#line 13609 +#line 13619 .trainerName = _("CELIA"), -#line 13610 +#line 13620 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13611 +#line 13621 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13612 +#line 13622 F_TRAINER_FEMALE | -#line 13613 +#line 13623 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13614 +#line 13624 .doubleBattle = FALSE, -#line 13615 +#line 13625 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13617 +#line 13627 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13619 +#line 13629 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13618 +#line 13628 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13621 +#line 13631 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13623 +#line 13633 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13622 +#line 13632 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13625 +#line 13635 [TRAINER_BRYAN] = { -#line 13626 +#line 13636 .trainerName = _("BRYAN"), -#line 13627 +#line 13637 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 13628 +#line 13638 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 13630 +#line 13640 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13631 +#line 13641 .doubleBattle = FALSE, -#line 13632 +#line 13642 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13634 +#line 13644 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13636 +#line 13646 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13635 +#line 13645 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13638 +#line 13648 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13640 +#line 13650 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13639 +#line 13649 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13642 +#line 13652 [TRAINER_BRANDEN] = { -#line 13643 +#line 13653 .trainerName = _("BRANDEN"), -#line 13644 +#line 13654 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13645 +#line 13655 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13647 +#line 13657 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13648 +#line 13658 .doubleBattle = FALSE, -#line 13649 +#line 13659 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13651 +#line 13661 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13653 +#line 13663 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13652 +#line 13662 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13655 +#line 13665 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13657 +#line 13667 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13656 +#line 13666 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13659 +#line 13669 [TRAINER_BRYANT] = { -#line 13660 +#line 13670 .trainerName = _("BRYANT"), -#line 13661 +#line 13671 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13662 +#line 13672 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13664 +#line 13674 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13665 +#line 13675 .doubleBattle = FALSE, -#line 13666 +#line 13676 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13668 +#line 13678 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13670 +#line 13680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13669 +#line 13679 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13672 +#line 13682 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13674 +#line 13684 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13673 +#line 13683 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13676 +#line 13686 [TRAINER_SHAYLA] = { -#line 13677 +#line 13687 .trainerName = _("SHAYLA"), -#line 13678 +#line 13688 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13679 +#line 13689 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13680 +#line 13690 F_TRAINER_FEMALE | -#line 13681 +#line 13691 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13682 +#line 13692 .doubleBattle = FALSE, -#line 13683 +#line 13693 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13685 +#line 13695 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13687 +#line 13697 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13686 +#line 13696 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13689 +#line 13699 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13691 +#line 13701 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13690 +#line 13700 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13693 +#line 13703 [TRAINER_KYRA] = { -#line 13694 +#line 13704 .trainerName = _("KYRA"), -#line 13695 +#line 13705 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13696 +#line 13706 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13697 +#line 13707 F_TRAINER_FEMALE | -#line 13698 +#line 13708 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13699 +#line 13709 .doubleBattle = FALSE, -#line 13700 +#line 13710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13702 +#line 13712 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13704 +#line 13714 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13703 +#line 13713 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13706 +#line 13716 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13708 +#line 13718 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13707 +#line 13717 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13710 +#line 13720 [TRAINER_JAIDEN] = { -#line 13711 +#line 13721 .trainerName = _("JAIDEN"), -#line 13712 +#line 13722 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 13713 +#line 13723 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 13715 +#line 13725 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13716 +#line 13726 .doubleBattle = FALSE, -#line 13717 +#line 13727 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13719 +#line 13729 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13721 +#line 13731 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13720 +#line 13730 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13723 +#line 13733 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13725 +#line 13735 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13724 +#line 13734 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13727 +#line 13737 [TRAINER_ALIX] = { -#line 13728 +#line 13738 .trainerName = _("ALIX"), -#line 13729 +#line 13739 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13730 +#line 13740 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13731 +#line 13741 F_TRAINER_FEMALE | -#line 13732 +#line 13742 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13733 +#line 13743 .doubleBattle = FALSE, -#line 13734 +#line 13744 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13736 +#line 13746 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13738 +#line 13748 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13737 +#line 13747 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13740 +#line 13750 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13742 +#line 13752 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13741 +#line 13751 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13744 +#line 13754 [TRAINER_HELENE] = { -#line 13745 +#line 13755 .trainerName = _("HELENE"), -#line 13746 +#line 13756 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13747 +#line 13757 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13748 +#line 13758 F_TRAINER_FEMALE | -#line 13749 +#line 13759 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13750 +#line 13760 .doubleBattle = FALSE, -#line 13751 +#line 13761 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13753 +#line 13763 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13755 +#line 13765 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13754 +#line 13764 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13757 +#line 13767 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13759 +#line 13769 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13758 +#line 13768 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13761 +#line 13771 [TRAINER_MARLENE] = { -#line 13762 +#line 13772 .trainerName = _("MARLENE"), -#line 13763 +#line 13773 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13764 +#line 13774 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13765 +#line 13775 F_TRAINER_FEMALE | -#line 13766 +#line 13776 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13767 +#line 13777 .doubleBattle = FALSE, -#line 13768 +#line 13778 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13770 +#line 13780 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13772 +#line 13782 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13771 +#line 13781 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13774 +#line 13784 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13776 +#line 13786 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13775 +#line 13785 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13778 +#line 13788 [TRAINER_DEVAN] = { -#line 13779 +#line 13789 .trainerName = _("DEVAN"), -#line 13780 +#line 13790 .trainerClass = TRAINER_CLASS_HIKER, -#line 13781 +#line 13791 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 13783 +#line 13793 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13784 +#line 13794 .doubleBattle = FALSE, -#line 13785 +#line 13795 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13787 +#line 13797 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13789 +#line 13799 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13788 +#line 13798 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13791 +#line 13801 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13793 +#line 13803 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13792 +#line 13802 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13795 +#line 13805 [TRAINER_JOHNSON] = { -#line 13796 +#line 13806 .trainerName = _("JOHNSON"), -#line 13797 +#line 13807 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13798 +#line 13808 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13800 +#line 13810 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13801 +#line 13811 .doubleBattle = FALSE, -#line 13802 +#line 13812 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13804 +#line 13814 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13806 +#line 13816 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13805 +#line 13815 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13808 +#line 13818 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13810 +#line 13820 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13809 +#line 13819 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13812 +#line 13822 [TRAINER_MELINA] = { -#line 13813 +#line 13823 .trainerName = _("MELINA"), -#line 13814 +#line 13824 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13815 +#line 13825 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13816 +#line 13826 F_TRAINER_FEMALE | -#line 13817 +#line 13827 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13818 +#line 13828 .doubleBattle = FALSE, -#line 13819 +#line 13829 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13821 +#line 13831 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13823 +#line 13833 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13822 +#line 13832 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13825 +#line 13835 [TRAINER_BRANDI] = { -#line 13826 +#line 13836 .trainerName = _("BRANDI"), -#line 13827 +#line 13837 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13828 +#line 13838 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13829 +#line 13839 F_TRAINER_FEMALE | -#line 13830 +#line 13840 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13831 +#line 13841 .doubleBattle = FALSE, -#line 13832 +#line 13842 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13834 +#line 13844 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13836 +#line 13846 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13835 +#line 13845 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13838 +#line 13848 [TRAINER_AISHA] = { -#line 13839 +#line 13849 .trainerName = _("AISHA"), -#line 13840 +#line 13850 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13841 +#line 13851 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13842 +#line 13852 F_TRAINER_FEMALE | -#line 13843 +#line 13853 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13844 +#line 13854 .doubleBattle = FALSE, -#line 13845 +#line 13855 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13847 +#line 13857 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13849 +#line 13859 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13848 +#line 13858 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13851 +#line 13861 [TRAINER_MAKAYLA] = { -#line 13852 +#line 13862 .trainerName = _("MAKAYLA"), -#line 13853 +#line 13863 .trainerClass = TRAINER_CLASS_EXPERT, -#line 13854 +#line 13864 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 13855 +#line 13865 F_TRAINER_FEMALE | -#line 13856 +#line 13866 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13857 +#line 13867 .items = { ITEM_HYPER_POTION }, -#line 13858 +#line 13868 .doubleBattle = FALSE, -#line 13859 +#line 13869 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13861 +#line 13871 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13863 +#line 13873 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13862 +#line 13872 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13865 +#line 13875 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13867 +#line 13877 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13866 +#line 13876 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13869 +#line 13879 [TRAINER_FABIAN] = { -#line 13870 +#line 13880 .trainerName = _("FABIAN"), -#line 13871 +#line 13881 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 13872 +#line 13882 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 13874 +#line 13884 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13875 +#line 13885 .doubleBattle = FALSE, -#line 13876 +#line 13886 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13878 +#line 13888 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13880 +#line 13890 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13879 +#line 13889 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13882 +#line 13892 [TRAINER_DAYTON] = { -#line 13883 +#line 13893 .trainerName = _("DAYTON"), -#line 13884 +#line 13894 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13885 +#line 13895 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13887 +#line 13897 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13888 +#line 13898 .doubleBattle = FALSE, -#line 13889 +#line 13899 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13891 +#line 13901 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13893 +#line 13903 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13892 +#line 13902 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13895 +#line 13905 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13897 +#line 13907 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13896 +#line 13906 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13899 +#line 13909 [TRAINER_RACHEL] = { -#line 13900 +#line 13910 .trainerName = _("RACHEL"), -#line 13901 +#line 13911 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 13902 +#line 13912 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 13903 +#line 13913 F_TRAINER_FEMALE | -#line 13904 +#line 13914 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13905 +#line 13915 .doubleBattle = FALSE, -#line 13906 +#line 13916 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13908 +#line 13918 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13910 +#line 13920 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13909 +#line 13919 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13912 +#line 13922 [TRAINER_LEONEL] = { -#line 13913 +#line 13923 .trainerName = _("LEONEL"), -#line 13914 +#line 13924 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13915 +#line 13925 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 13917 +#line 13927 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13918 +#line 13928 .items = { ITEM_HYPER_POTION }, -#line 13919 +#line 13929 .doubleBattle = FALSE, -#line 13920 +#line 13930 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13922 +#line 13932 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13924 +#line 13934 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13923 +#line 13933 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 13925 +#line 13935 MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, @@ -35135,442 +35135,442 @@ F_TRAINER_FEMALE | }, }, }, -#line 13929 +#line 13939 [TRAINER_CALLIE] = { -#line 13930 +#line 13940 .trainerName = _("CALLIE"), -#line 13931 +#line 13941 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13932 +#line 13942 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13933 +#line 13943 F_TRAINER_FEMALE | -#line 13934 +#line 13944 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13935 +#line 13945 .doubleBattle = FALSE, -#line 13936 +#line 13946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13938 +#line 13948 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13940 +#line 13950 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13939 +#line 13949 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13942 +#line 13952 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13944 +#line 13954 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13943 +#line 13953 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13946 +#line 13956 [TRAINER_CALE] = { -#line 13947 +#line 13957 .trainerName = _("CALE"), -#line 13948 +#line 13958 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 13949 +#line 13959 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 13951 +#line 13961 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13952 +#line 13962 .doubleBattle = FALSE, -#line 13953 +#line 13963 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13955 +#line 13965 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13957 +#line 13967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13956 +#line 13966 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13959 +#line 13969 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13961 +#line 13971 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13960 +#line 13970 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13963 +#line 13973 [TRAINER_MYLES] = { -#line 13964 +#line 13974 .trainerName = _("MYLES"), -#line 13965 +#line 13975 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 13966 +#line 13976 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 13968 +#line 13978 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13969 +#line 13979 .doubleBattle = FALSE, -#line 13970 +#line 13980 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 13972 +#line 13982 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13974 +#line 13984 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13973 +#line 13983 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13976 +#line 13986 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13978 +#line 13988 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13977 +#line 13987 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13980 +#line 13990 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13982 +#line 13992 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13981 +#line 13991 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13984 +#line 13994 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13986 +#line 13996 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13985 +#line 13995 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13988 +#line 13998 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13990 +#line 14000 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13989 +#line 13999 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13992 +#line 14002 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13994 +#line 14004 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13993 +#line 14003 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13996 +#line 14006 [TRAINER_PAT] = { -#line 13997 +#line 14007 .trainerName = _("PAT"), -#line 13998 +#line 14008 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 13999 +#line 14009 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 14000 +#line 14010 F_TRAINER_FEMALE | -#line 14001 +#line 14011 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14002 +#line 14012 .doubleBattle = FALSE, -#line 14003 +#line 14013 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14005 +#line 14015 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14007 +#line 14017 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14006 +#line 14016 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14009 +#line 14019 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14011 +#line 14021 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14010 +#line 14020 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14013 +#line 14023 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14015 +#line 14025 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14014 +#line 14024 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14017 +#line 14027 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14019 +#line 14029 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14018 +#line 14028 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14021 +#line 14031 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14023 +#line 14033 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14022 +#line 14032 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14025 +#line 14035 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14027 +#line 14037 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14026 +#line 14036 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14029 +#line 14039 [TRAINER_CRISTIN_1] = { -#line 14030 +#line 14040 .trainerName = _("CRISTIN"), -#line 14031 +#line 14041 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 14032 +#line 14042 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 14033 +#line 14043 F_TRAINER_FEMALE | -#line 14034 +#line 14044 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 14035 +#line 14045 .items = { ITEM_HYPER_POTION }, -#line 14036 +#line 14046 .doubleBattle = FALSE, -#line 14037 +#line 14047 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14039 +#line 14049 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14041 +#line 14051 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14040 +#line 14050 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14043 +#line 14053 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14045 +#line 14055 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14044 +#line 14054 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14047 +#line 14057 [TRAINER_MAY_RUSTBORO_TREECKO] = { -#line 14048 +#line 14058 .trainerName = _("MAY"), -#line 14049 +#line 14059 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14050 +#line 14060 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14051 +#line 14061 F_TRAINER_FEMALE | -#line 14052 +#line 14062 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14053 +#line 14063 .doubleBattle = FALSE, -#line 14054 +#line 14064 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14056 +#line 14066 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14058 +#line 14068 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14057 +#line 14067 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14060 +#line 14070 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14062 +#line 14072 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14061 +#line 14071 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14064 +#line 14074 [TRAINER_MAY_RUSTBORO_TORCHIC] = { -#line 14065 +#line 14075 .trainerName = _("MAY"), -#line 14066 +#line 14076 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14067 +#line 14077 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14068 +#line 14078 F_TRAINER_FEMALE | -#line 14069 +#line 14079 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14070 +#line 14080 .doubleBattle = FALSE, -#line 14071 +#line 14081 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14073 +#line 14083 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14075 +#line 14085 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14074 +#line 14084 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14077 +#line 14087 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14079 +#line 14089 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14078 +#line 14088 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14081 +#line 14091 [TRAINER_ROXANNE_2] = { -#line 14082 +#line 14092 .trainerName = _("ROXANNE"), -#line 14083 +#line 14093 .trainerClass = TRAINER_CLASS_LEADER, -#line 14084 +#line 14094 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14085 +#line 14095 F_TRAINER_FEMALE | -#line 14086 +#line 14096 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14087 +#line 14097 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14088 +#line 14098 .doubleBattle = TRUE, -#line 14089 +#line 14099 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14091 +#line 14101 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14093 +#line 14103 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14092 +#line 14102 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14094 +#line 14104 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35578,19 +35578,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14099 +#line 14109 .species = SPECIES_KABUTO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14099 +#line 14109 .heldItem = ITEM_SITRUS_BERRY, -#line 14101 +#line 14111 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14100 +#line 14110 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14102 +#line 14112 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35598,17 +35598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14107 +#line 14117 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14109 +#line 14119 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14108 +#line 14118 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14110 +#line 14120 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35616,19 +35616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14115 +#line 14125 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14115 +#line 14125 .heldItem = ITEM_SITRUS_BERRY, -#line 14117 +#line 14127 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14116 +#line 14126 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14118 +#line 14128 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35637,41 +35637,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14123 +#line 14133 [TRAINER_ROXANNE_3] = { -#line 14124 +#line 14134 .trainerName = _("ROXANNE"), -#line 14125 +#line 14135 .trainerClass = TRAINER_CLASS_LEADER, -#line 14126 +#line 14136 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14127 +#line 14137 F_TRAINER_FEMALE | -#line 14128 +#line 14138 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14129 +#line 14139 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14130 +#line 14140 .doubleBattle = TRUE, -#line 14131 +#line 14141 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14133 +#line 14143 .species = SPECIES_OMANYTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14135 +#line 14145 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14134 +#line 14144 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14136 +#line 14146 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35679,17 +35679,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14141 +#line 14151 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14143 +#line 14153 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14142 +#line 14152 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14144 +#line 14154 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35697,19 +35697,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14149 +#line 14159 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14149 +#line 14159 .heldItem = ITEM_SITRUS_BERRY, -#line 14151 +#line 14161 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14150 +#line 14160 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14152 +#line 14162 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35717,17 +35717,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14157 +#line 14167 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14159 +#line 14169 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14158 +#line 14168 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14160 +#line 14170 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35735,19 +35735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14165 +#line 14175 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14165 +#line 14175 .heldItem = ITEM_SITRUS_BERRY, -#line 14167 +#line 14177 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14166 +#line 14176 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14168 +#line 14178 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35756,41 +35756,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14173 +#line 14183 [TRAINER_ROXANNE_4] = { -#line 14174 +#line 14184 .trainerName = _("ROXANNE"), -#line 14175 +#line 14185 .trainerClass = TRAINER_CLASS_LEADER, -#line 14176 +#line 14186 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14177 +#line 14187 F_TRAINER_FEMALE | -#line 14178 +#line 14188 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14179 +#line 14189 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14180 +#line 14190 .doubleBattle = TRUE, -#line 14181 +#line 14191 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14183 +#line 14193 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14185 +#line 14195 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14184 +#line 14194 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14186 +#line 14196 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35798,17 +35798,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14191 +#line 14201 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14193 +#line 14203 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14192 +#line 14202 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14194 +#line 14204 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35816,19 +35816,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14199 +#line 14209 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14199 +#line 14209 .heldItem = ITEM_SITRUS_BERRY, -#line 14201 +#line 14211 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14200 +#line 14210 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14202 +#line 14212 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35836,17 +35836,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14207 +#line 14217 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14209 +#line 14219 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14208 +#line 14218 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14210 +#line 14220 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35854,19 +35854,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14215 +#line 14225 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14215 +#line 14225 .heldItem = ITEM_SITRUS_BERRY, -#line 14217 +#line 14227 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14216 +#line 14226 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14218 +#line 14228 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35875,41 +35875,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14223 +#line 14233 [TRAINER_ROXANNE_5] = { -#line 14224 +#line 14234 .trainerName = _("ROXANNE"), -#line 14225 +#line 14235 .trainerClass = TRAINER_CLASS_LEADER, -#line 14226 +#line 14236 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14227 +#line 14237 F_TRAINER_FEMALE | -#line 14228 +#line 14238 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14229 +#line 14239 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14230 +#line 14240 .doubleBattle = TRUE, -#line 14231 +#line 14241 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14233 +#line 14243 .species = SPECIES_AERODACTYL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14235 +#line 14245 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14234 +#line 14244 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14236 +#line 14246 MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, @@ -35917,17 +35917,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14241 +#line 14251 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14243 +#line 14253 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14242 +#line 14252 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14244 +#line 14254 MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35935,17 +35935,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14249 +#line 14259 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14251 +#line 14261 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14250 +#line 14260 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14252 +#line 14262 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35953,19 +35953,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14257 +#line 14267 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14257 +#line 14267 .heldItem = ITEM_SITRUS_BERRY, -#line 14259 +#line 14269 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14258 +#line 14268 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14260 +#line 14270 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35973,17 +35973,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14265 +#line 14275 .species = SPECIES_STEELIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14267 +#line 14277 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14266 +#line 14276 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14268 +#line 14278 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35991,19 +35991,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14273 +#line 14283 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14273 +#line 14283 .heldItem = ITEM_SITRUS_BERRY, -#line 14275 +#line 14285 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14274 +#line 14284 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14276 +#line 14286 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -36012,41 +36012,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14281 +#line 14291 [TRAINER_BRAWLY_2] = { -#line 14282 +#line 14292 .trainerName = _("BRAWLY"), -#line 14283 +#line 14293 .trainerClass = TRAINER_CLASS_LEADER, -#line 14284 +#line 14294 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14286 +#line 14296 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14287 +#line 14297 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14288 +#line 14298 .doubleBattle = TRUE, -#line 14289 +#line 14299 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14291 +#line 14301 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14291 +#line 14301 .heldItem = ITEM_SITRUS_BERRY, -#line 14293 +#line 14303 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14292 +#line 14302 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14294 +#line 14304 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36054,17 +36054,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14299 +#line 14309 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14301 +#line 14311 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14300 +#line 14310 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14302 +#line 14312 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36072,17 +36072,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14307 +#line 14317 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14309 +#line 14319 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14308 +#line 14318 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14310 +#line 14320 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36090,19 +36090,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14315 +#line 14325 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14315 +#line 14325 .heldItem = ITEM_SITRUS_BERRY, -#line 14317 +#line 14327 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14316 +#line 14326 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14318 +#line 14328 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36111,41 +36111,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14323 +#line 14333 [TRAINER_BRAWLY_3] = { -#line 14324 +#line 14334 .trainerName = _("BRAWLY"), -#line 14325 +#line 14335 .trainerClass = TRAINER_CLASS_LEADER, -#line 14326 +#line 14336 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14328 +#line 14338 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14329 +#line 14339 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14330 +#line 14340 .doubleBattle = TRUE, -#line 14331 +#line 14341 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14333 +#line 14343 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14333 +#line 14343 .heldItem = ITEM_SITRUS_BERRY, -#line 14335 +#line 14345 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14334 +#line 14344 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14336 +#line 14346 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36153,17 +36153,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14341 +#line 14351 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14343 +#line 14353 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14342 +#line 14352 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14344 +#line 14354 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36171,17 +36171,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14349 +#line 14359 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14351 +#line 14361 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14350 +#line 14360 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14352 +#line 14362 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36189,19 +36189,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14357 +#line 14367 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14357 +#line 14367 .heldItem = ITEM_SITRUS_BERRY, -#line 14359 +#line 14369 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14358 +#line 14368 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14360 +#line 14370 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36210,39 +36210,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14365 +#line 14375 [TRAINER_BRAWLY_4] = { -#line 14366 +#line 14376 .trainerName = _("BRAWLY"), -#line 14367 +#line 14377 .trainerClass = TRAINER_CLASS_LEADER, -#line 14368 +#line 14378 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14370 +#line 14380 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14371 +#line 14381 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14372 +#line 14382 .doubleBattle = TRUE, -#line 14373 +#line 14383 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14375 +#line 14385 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14377 +#line 14387 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14376 +#line 14386 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14378 +#line 14388 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36250,19 +36250,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14383 +#line 14393 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14383 +#line 14393 .heldItem = ITEM_SITRUS_BERRY, -#line 14385 +#line 14395 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14384 +#line 14394 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14386 +#line 14396 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36270,17 +36270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14391 +#line 14401 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14393 +#line 14403 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14392 +#line 14402 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14394 +#line 14404 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36288,17 +36288,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14399 +#line 14409 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14401 +#line 14411 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14400 +#line 14410 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14402 +#line 14412 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36306,19 +36306,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14407 +#line 14417 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14407 +#line 14417 .heldItem = ITEM_SITRUS_BERRY, -#line 14409 +#line 14419 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14408 +#line 14418 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14410 +#line 14420 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36327,39 +36327,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14415 +#line 14425 [TRAINER_BRAWLY_5] = { -#line 14416 +#line 14426 .trainerName = _("BRAWLY"), -#line 14417 +#line 14427 .trainerClass = TRAINER_CLASS_LEADER, -#line 14418 +#line 14428 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14420 +#line 14430 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14421 +#line 14431 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14422 +#line 14432 .doubleBattle = TRUE, -#line 14423 +#line 14433 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14425 +#line 14435 .species = SPECIES_HITMONLEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14427 +#line 14437 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14426 +#line 14436 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14428 +#line 14438 MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, @@ -36367,17 +36367,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14433 +#line 14443 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14435 +#line 14445 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14434 +#line 14444 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14436 +#line 14446 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36385,19 +36385,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14441 +#line 14451 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14441 +#line 14451 .heldItem = ITEM_SITRUS_BERRY, -#line 14443 +#line 14453 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14442 +#line 14452 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14444 +#line 14454 MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36405,17 +36405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14449 +#line 14459 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14451 +#line 14461 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14450 +#line 14460 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14452 +#line 14462 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36423,17 +36423,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14457 +#line 14467 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14459 +#line 14469 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14458 +#line 14468 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14460 +#line 14470 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36441,19 +36441,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14465 +#line 14475 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14465 +#line 14475 .heldItem = ITEM_SITRUS_BERRY, -#line 14467 +#line 14477 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14466 +#line 14476 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14468 +#line 14478 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36462,39 +36462,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14473 +#line 14483 [TRAINER_WATTSON_2] = { -#line 14474 +#line 14484 .trainerName = _("WATTSON"), -#line 14475 +#line 14485 .trainerClass = TRAINER_CLASS_LEADER, -#line 14476 +#line 14486 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14478 +#line 14488 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14479 +#line 14489 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14480 +#line 14490 .doubleBattle = TRUE, -#line 14481 +#line 14491 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14483 +#line 14493 .species = SPECIES_MAREEP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14485 +#line 14495 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14484 +#line 14494 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14486 +#line 14496 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36502,17 +36502,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14491 +#line 14501 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14493 +#line 14503 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14492 +#line 14502 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14494 +#line 14504 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36520,19 +36520,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14499 +#line 14509 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14499 +#line 14509 .heldItem = ITEM_SITRUS_BERRY, -#line 14501 +#line 14511 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14500 +#line 14510 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14502 +#line 14512 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36540,19 +36540,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14507 +#line 14517 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14507 +#line 14517 .heldItem = ITEM_SITRUS_BERRY, -#line 14509 +#line 14519 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14508 +#line 14518 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14510 +#line 14520 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36561,39 +36561,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14515 +#line 14525 [TRAINER_WATTSON_3] = { -#line 14516 +#line 14526 .trainerName = _("WATTSON"), -#line 14517 +#line 14527 .trainerClass = TRAINER_CLASS_LEADER, -#line 14518 +#line 14528 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14520 +#line 14530 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14521 +#line 14531 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14522 +#line 14532 .doubleBattle = TRUE, -#line 14523 +#line 14533 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14525 +#line 14535 .species = SPECIES_PIKACHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14527 +#line 14537 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14526 +#line 14536 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14528 +#line 14538 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36601,17 +36601,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14533 +#line 14543 .species = SPECIES_FLAAFFY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14535 +#line 14545 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14534 +#line 14544 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14536 +#line 14546 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36619,17 +36619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14541 +#line 14551 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14543 +#line 14553 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14542 +#line 14552 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14544 +#line 14554 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36637,19 +36637,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14549 +#line 14559 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14549 +#line 14559 .heldItem = ITEM_SITRUS_BERRY, -#line 14551 +#line 14561 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14550 +#line 14560 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14552 +#line 14562 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36657,19 +36657,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14557 +#line 14567 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14557 +#line 14567 .heldItem = ITEM_SITRUS_BERRY, -#line 14559 +#line 14569 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14558 +#line 14568 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14560 +#line 14570 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36678,39 +36678,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14565 +#line 14575 [TRAINER_WATTSON_4] = { -#line 14566 +#line 14576 .trainerName = _("WATTSON"), -#line 14567 +#line 14577 .trainerClass = TRAINER_CLASS_LEADER, -#line 14568 +#line 14578 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14570 +#line 14580 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14571 +#line 14581 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14572 +#line 14582 .doubleBattle = TRUE, -#line 14573 +#line 14583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14575 +#line 14585 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14577 +#line 14587 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14576 +#line 14586 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14578 +#line 14588 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36718,17 +36718,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14583 +#line 14593 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14585 +#line 14595 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14584 +#line 14594 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14586 +#line 14596 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36736,17 +36736,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14591 +#line 14601 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14593 +#line 14603 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14592 +#line 14602 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14594 +#line 14604 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36754,19 +36754,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14599 +#line 14609 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14599 +#line 14609 .heldItem = ITEM_SITRUS_BERRY, -#line 14601 +#line 14611 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14600 +#line 14610 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14602 +#line 14612 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36774,19 +36774,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14607 +#line 14617 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14607 +#line 14617 .heldItem = ITEM_SITRUS_BERRY, -#line 14609 +#line 14619 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14608 +#line 14618 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14610 +#line 14620 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36795,39 +36795,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14615 +#line 14625 [TRAINER_WATTSON_5] = { -#line 14616 +#line 14626 .trainerName = _("WATTSON"), -#line 14617 +#line 14627 .trainerClass = TRAINER_CLASS_LEADER, -#line 14618 +#line 14628 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14620 +#line 14630 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14621 +#line 14631 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14622 +#line 14632 .doubleBattle = TRUE, -#line 14623 +#line 14633 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14625 +#line 14635 .species = SPECIES_ELECTABUZZ, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14627 +#line 14637 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14626 +#line 14636 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14628 +#line 14638 MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, @@ -36835,17 +36835,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14633 +#line 14643 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14635 +#line 14645 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14634 +#line 14644 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14636 +#line 14646 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36853,17 +36853,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14641 +#line 14651 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14643 +#line 14653 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14642 +#line 14652 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14644 +#line 14654 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36871,17 +36871,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14649 +#line 14659 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14651 +#line 14661 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14650 +#line 14660 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14652 +#line 14662 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36889,19 +36889,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14657 +#line 14667 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14657 +#line 14667 .heldItem = ITEM_SITRUS_BERRY, -#line 14659 +#line 14669 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14658 +#line 14668 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14660 +#line 14670 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36909,19 +36909,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14665 +#line 14675 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14665 +#line 14675 .heldItem = ITEM_SITRUS_BERRY, -#line 14667 +#line 14677 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14666 +#line 14676 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14668 +#line 14678 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36930,43 +36930,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 14673 +#line 14683 [TRAINER_FLANNERY_2] = { -#line 14674 +#line 14684 .trainerName = _("FLANNERY"), -#line 14675 +#line 14685 .trainerClass = TRAINER_CLASS_LEADER, -#line 14676 +#line 14686 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14677 +#line 14687 F_TRAINER_FEMALE | -#line 14678 +#line 14688 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14679 +#line 14689 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14680 +#line 14690 .doubleBattle = TRUE, -#line 14681 +#line 14691 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14683 +#line 14693 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14683 +#line 14693 .heldItem = ITEM_WHITE_HERB, -#line 14685 +#line 14695 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14684 +#line 14694 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14686 +#line 14696 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -36974,17 +36974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14691 +#line 14701 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14693 +#line 14703 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14692 +#line 14702 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14694 +#line 14704 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -36992,19 +36992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14699 +#line 14709 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14699 +#line 14709 .heldItem = ITEM_WHITE_HERB, -#line 14701 +#line 14711 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14700 +#line 14710 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14702 +#line 14712 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37012,19 +37012,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14707 +#line 14717 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14707 +#line 14717 .heldItem = ITEM_WHITE_HERB, -#line 14709 +#line 14719 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14708 +#line 14718 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14710 +#line 14720 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37033,41 +37033,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14715 +#line 14725 [TRAINER_FLANNERY_3] = { -#line 14716 +#line 14726 .trainerName = _("FLANNERY"), -#line 14717 +#line 14727 .trainerClass = TRAINER_CLASS_LEADER, -#line 14718 +#line 14728 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14719 +#line 14729 F_TRAINER_FEMALE | -#line 14720 +#line 14730 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14721 +#line 14731 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14722 +#line 14732 .doubleBattle = TRUE, -#line 14723 +#line 14733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14725 +#line 14735 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14727 +#line 14737 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14726 +#line 14736 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14728 +#line 14738 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, @@ -37075,19 +37075,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14733 +#line 14743 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14733 +#line 14743 .heldItem = ITEM_WHITE_HERB, -#line 14735 +#line 14745 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14734 +#line 14744 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14736 +#line 14746 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37095,17 +37095,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14741 +#line 14751 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14743 +#line 14753 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14742 +#line 14752 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14744 +#line 14754 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37113,19 +37113,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14749 +#line 14759 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14749 +#line 14759 .heldItem = ITEM_WHITE_HERB, -#line 14751 +#line 14761 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14750 +#line 14760 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14752 +#line 14762 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37133,19 +37133,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14757 +#line 14767 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14757 +#line 14767 .heldItem = ITEM_WHITE_HERB, -#line 14759 +#line 14769 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14758 +#line 14768 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14760 +#line 14770 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37154,41 +37154,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14765 +#line 14775 [TRAINER_FLANNERY_4] = { -#line 14766 +#line 14776 .trainerName = _("FLANNERY"), -#line 14767 +#line 14777 .trainerClass = TRAINER_CLASS_LEADER, -#line 14768 +#line 14778 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14769 +#line 14779 F_TRAINER_FEMALE | -#line 14770 +#line 14780 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14771 +#line 14781 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14772 +#line 14782 .doubleBattle = TRUE, -#line 14773 +#line 14783 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14775 +#line 14785 .species = SPECIES_HOUNDOUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14777 +#line 14787 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14776 +#line 14786 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14778 +#line 14788 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37196,17 +37196,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14783 +#line 14793 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14785 +#line 14795 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14784 +#line 14794 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14786 +#line 14796 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37214,19 +37214,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14791 +#line 14801 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14791 +#line 14801 .heldItem = ITEM_WHITE_HERB, -#line 14793 +#line 14803 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14792 +#line 14802 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14794 +#line 14804 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37234,17 +37234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14799 +#line 14809 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14801 +#line 14811 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14800 +#line 14810 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14802 +#line 14812 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37252,19 +37252,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14807 +#line 14817 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14807 +#line 14817 .heldItem = ITEM_WHITE_HERB, -#line 14809 +#line 14819 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14808 +#line 14818 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14810 +#line 14820 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37272,19 +37272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14815 +#line 14825 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14815 +#line 14825 .heldItem = ITEM_WHITE_HERB, -#line 14817 +#line 14827 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14816 +#line 14826 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14818 +#line 14828 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37293,41 +37293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14823 +#line 14833 [TRAINER_FLANNERY_5] = { -#line 14824 +#line 14834 .trainerName = _("FLANNERY"), -#line 14825 +#line 14835 .trainerClass = TRAINER_CLASS_LEADER, -#line 14826 +#line 14836 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14827 +#line 14837 F_TRAINER_FEMALE | -#line 14828 +#line 14838 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14829 +#line 14839 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14830 +#line 14840 .doubleBattle = TRUE, -#line 14831 +#line 14841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14833 +#line 14843 .species = SPECIES_ARCANINE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14835 +#line 14845 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14834 +#line 14844 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14836 +#line 14846 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37335,19 +37335,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14841 +#line 14851 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14841 +#line 14851 .heldItem = ITEM_WHITE_HERB, -#line 14843 +#line 14853 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14842 +#line 14852 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14844 +#line 14854 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37355,17 +37355,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14849 +#line 14859 .species = SPECIES_HOUNDOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14851 +#line 14861 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14850 +#line 14860 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14852 +#line 14862 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37373,17 +37373,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14857 +#line 14867 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14859 +#line 14869 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14858 +#line 14868 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14860 +#line 14870 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37391,19 +37391,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14865 +#line 14875 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14865 +#line 14875 .heldItem = ITEM_WHITE_HERB, -#line 14867 +#line 14877 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14866 +#line 14876 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14868 +#line 14878 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37411,19 +37411,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14873 +#line 14883 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14873 +#line 14883 .heldItem = ITEM_WHITE_HERB, -#line 14875 +#line 14885 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14874 +#line 14884 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14876 +#line 14886 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37432,39 +37432,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14881 +#line 14891 [TRAINER_NORMAN_2] = { -#line 14882 +#line 14892 .trainerName = _("NORMAN"), -#line 14883 +#line 14893 .trainerClass = TRAINER_CLASS_LEADER, -#line 14884 +#line 14894 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14886 +#line 14896 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14887 +#line 14897 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14888 +#line 14898 .doubleBattle = TRUE, -#line 14889 +#line 14899 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14891 +#line 14901 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14893 +#line 14903 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14892 +#line 14902 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14894 +#line 14904 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37472,19 +37472,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14899 +#line 14909 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14899 +#line 14909 .heldItem = ITEM_SITRUS_BERRY, -#line 14901 +#line 14911 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14900 +#line 14910 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14902 +#line 14912 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37492,17 +37492,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14907 +#line 14917 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14909 +#line 14919 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14908 +#line 14918 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14910 +#line 14920 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37510,19 +37510,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14915 +#line 14925 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14915 +#line 14925 .heldItem = ITEM_SITRUS_BERRY, -#line 14917 +#line 14927 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14916 +#line 14926 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14918 +#line 14928 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37531,41 +37531,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14923 +#line 14933 [TRAINER_NORMAN_3] = { -#line 14924 +#line 14934 .trainerName = _("NORMAN"), -#line 14925 +#line 14935 .trainerClass = TRAINER_CLASS_LEADER, -#line 14926 +#line 14936 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14928 +#line 14938 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14929 +#line 14939 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14930 +#line 14940 .doubleBattle = TRUE, -#line 14931 +#line 14941 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14933 +#line 14943 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14933 +#line 14943 .heldItem = ITEM_SITRUS_BERRY, -#line 14935 +#line 14945 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14934 +#line 14944 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14936 +#line 14946 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37573,17 +37573,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14941 +#line 14951 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14943 +#line 14953 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14942 +#line 14952 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14944 +#line 14954 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37591,17 +37591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14949 +#line 14959 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14951 +#line 14961 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14950 +#line 14960 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14952 +#line 14962 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37609,17 +37609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14957 +#line 14967 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14959 +#line 14969 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14958 +#line 14968 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14960 +#line 14970 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37627,19 +37627,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14965 +#line 14975 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14965 +#line 14975 .heldItem = ITEM_SITRUS_BERRY, -#line 14967 +#line 14977 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14966 +#line 14976 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14968 +#line 14978 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37648,41 +37648,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14973 +#line 14983 [TRAINER_NORMAN_4] = { -#line 14974 +#line 14984 .trainerName = _("NORMAN"), -#line 14975 +#line 14985 .trainerClass = TRAINER_CLASS_LEADER, -#line 14976 +#line 14986 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14978 +#line 14988 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14979 +#line 14989 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14980 +#line 14990 .doubleBattle = TRUE, -#line 14981 +#line 14991 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14983 +#line 14993 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14983 +#line 14993 .heldItem = ITEM_SITRUS_BERRY, -#line 14985 +#line 14995 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14984 +#line 14994 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14986 +#line 14996 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37690,17 +37690,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14991 +#line 15001 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14993 +#line 15003 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14992 +#line 15002 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14994 +#line 15004 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37708,17 +37708,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14999 +#line 15009 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15001 +#line 15011 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15000 +#line 15010 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15002 +#line 15012 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37726,17 +37726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15007 +#line 15017 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15009 +#line 15019 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15008 +#line 15018 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15010 +#line 15020 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37744,19 +37744,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15015 +#line 15025 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15015 +#line 15025 .heldItem = ITEM_SITRUS_BERRY, -#line 15017 +#line 15027 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15016 +#line 15026 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15018 +#line 15028 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37765,41 +37765,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15023 +#line 15033 [TRAINER_NORMAN_5] = { -#line 15024 +#line 15034 .trainerName = _("NORMAN"), -#line 15025 +#line 15035 .trainerClass = TRAINER_CLASS_LEADER, -#line 15026 +#line 15036 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 15028 +#line 15038 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15029 +#line 15039 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15030 +#line 15040 .doubleBattle = TRUE, -#line 15031 +#line 15041 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15033 +#line 15043 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15033 +#line 15043 .heldItem = ITEM_SITRUS_BERRY, -#line 15035 +#line 15045 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15034 +#line 15044 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15036 +#line 15046 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37807,17 +37807,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15041 +#line 15051 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15043 +#line 15053 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15042 +#line 15052 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15044 +#line 15054 MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, @@ -37825,17 +37825,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15049 +#line 15059 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15051 +#line 15061 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15050 +#line 15060 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15052 +#line 15062 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37843,17 +37843,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15057 +#line 15067 .species = SPECIES_TAUROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15059 +#line 15069 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15058 +#line 15068 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15060 +#line 15070 MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, @@ -37861,17 +37861,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15065 +#line 15075 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15067 +#line 15077 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15066 +#line 15076 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15068 +#line 15078 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37879,19 +37879,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15073 +#line 15083 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15073 +#line 15083 .heldItem = ITEM_SITRUS_BERRY, -#line 15075 +#line 15085 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15074 +#line 15084 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15076 +#line 15086 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37900,43 +37900,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 15081 +#line 15091 [TRAINER_WINONA_2] = { -#line 15082 +#line 15092 .trainerName = _("WINONA"), -#line 15083 +#line 15093 .trainerClass = TRAINER_CLASS_LEADER, -#line 15084 +#line 15094 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15085 +#line 15095 F_TRAINER_FEMALE | -#line 15086 +#line 15096 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15087 +#line 15097 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15088 +#line 15098 .doubleBattle = TRUE, -#line 15089 +#line 15099 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15091 +#line 15101 .species = SPECIES_DRATINI, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15091 +#line 15101 .heldItem = ITEM_SITRUS_BERRY, -#line 15093 +#line 15103 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15092 +#line 15102 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15094 +#line 15104 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -37944,17 +37944,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15099 +#line 15109 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15101 +#line 15111 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15100 +#line 15110 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15102 +#line 15112 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -37962,17 +37962,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15107 +#line 15117 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15109 +#line 15119 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15108 +#line 15118 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15110 +#line 15120 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -37980,17 +37980,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15115 +#line 15125 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15117 +#line 15127 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15116 +#line 15126 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15118 +#line 15128 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -37998,19 +37998,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15123 +#line 15133 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15123 +#line 15133 .heldItem = ITEM_CHESTO_BERRY, -#line 15125 +#line 15135 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15124 +#line 15134 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15126 +#line 15136 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38019,41 +38019,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15131 +#line 15141 [TRAINER_WINONA_3] = { -#line 15132 +#line 15142 .trainerName = _("WINONA"), -#line 15133 +#line 15143 .trainerClass = TRAINER_CLASS_LEADER, -#line 15134 +#line 15144 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15135 +#line 15145 F_TRAINER_FEMALE | -#line 15136 +#line 15146 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15137 +#line 15147 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15138 +#line 15148 .doubleBattle = TRUE, -#line 15139 +#line 15149 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15141 +#line 15151 .species = SPECIES_HOOTHOOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15143 +#line 15153 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15142 +#line 15152 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15144 +#line 15154 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38061,17 +38061,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15149 +#line 15159 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15151 +#line 15161 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15150 +#line 15160 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15152 +#line 15162 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38079,19 +38079,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15157 +#line 15167 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15157 +#line 15167 .heldItem = ITEM_SITRUS_BERRY, -#line 15159 +#line 15169 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15158 +#line 15168 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15160 +#line 15170 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38099,17 +38099,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15165 +#line 15175 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15167 +#line 15177 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15166 +#line 15176 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15168 +#line 15178 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38117,17 +38117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15173 +#line 15183 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15175 +#line 15185 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15174 +#line 15184 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15176 +#line 15186 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38135,19 +38135,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15181 +#line 15191 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15181 +#line 15191 .heldItem = ITEM_CHESTO_BERRY, -#line 15183 +#line 15193 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15182 +#line 15192 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15184 +#line 15194 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38156,41 +38156,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15189 +#line 15199 [TRAINER_WINONA_4] = { -#line 15190 +#line 15200 .trainerName = _("WINONA"), -#line 15191 +#line 15201 .trainerClass = TRAINER_CLASS_LEADER, -#line 15192 +#line 15202 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15193 +#line 15203 F_TRAINER_FEMALE | -#line 15194 +#line 15204 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15195 +#line 15205 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15196 +#line 15206 .doubleBattle = TRUE, -#line 15197 +#line 15207 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15199 +#line 15209 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15201 +#line 15211 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15200 +#line 15210 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15202 +#line 15212 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38198,17 +38198,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15207 +#line 15217 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15209 +#line 15219 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15208 +#line 15218 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15210 +#line 15220 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38216,19 +38216,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15215 +#line 15225 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15215 +#line 15225 .heldItem = ITEM_SITRUS_BERRY, -#line 15217 +#line 15227 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15216 +#line 15226 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15218 +#line 15228 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38236,17 +38236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15223 +#line 15233 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15225 +#line 15235 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15224 +#line 15234 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15226 +#line 15236 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38254,17 +38254,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15231 +#line 15241 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15233 +#line 15243 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15232 +#line 15242 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15234 +#line 15244 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38272,19 +38272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15239 +#line 15249 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15239 +#line 15249 .heldItem = ITEM_CHESTO_BERRY, -#line 15241 +#line 15251 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15240 +#line 15250 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15242 +#line 15252 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38293,41 +38293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15247 +#line 15257 [TRAINER_WINONA_5] = { -#line 15248 +#line 15258 .trainerName = _("WINONA"), -#line 15249 +#line 15259 .trainerClass = TRAINER_CLASS_LEADER, -#line 15250 +#line 15260 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15251 +#line 15261 F_TRAINER_FEMALE | -#line 15252 +#line 15262 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15253 +#line 15263 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15254 +#line 15264 .doubleBattle = TRUE, -#line 15255 +#line 15265 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15257 +#line 15267 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15259 +#line 15269 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15258 +#line 15268 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15260 +#line 15270 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38335,17 +38335,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15265 +#line 15275 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15267 +#line 15277 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15266 +#line 15276 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15268 +#line 15278 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38353,17 +38353,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15273 +#line 15283 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15275 +#line 15285 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15274 +#line 15284 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15276 +#line 15286 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38371,19 +38371,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15281 +#line 15291 .species = SPECIES_DRAGONITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15281 +#line 15291 .heldItem = ITEM_SITRUS_BERRY, -#line 15283 +#line 15293 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15282 +#line 15292 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15284 +#line 15294 MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, @@ -38391,17 +38391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15289 +#line 15299 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15291 +#line 15301 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15290 +#line 15300 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15292 +#line 15302 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38409,19 +38409,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15297 +#line 15307 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15297 +#line 15307 .heldItem = ITEM_CHESTO_BERRY, -#line 15299 +#line 15309 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15298 +#line 15308 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15300 +#line 15310 MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38430,39 +38430,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15305 +#line 15315 [TRAINER_TATE_AND_LIZA_2] = { -#line 15306 +#line 15316 .trainerName = _("TATE&LIZA"), -#line 15307 +#line 15317 .trainerClass = TRAINER_CLASS_LEADER, -#line 15308 +#line 15318 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15310 +#line 15320 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15311 +#line 15321 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15312 +#line 15322 .doubleBattle = TRUE, -#line 15313 +#line 15323 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15315 +#line 15325 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15317 +#line 15327 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15316 +#line 15326 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15318 +#line 15328 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38470,17 +38470,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15323 +#line 15333 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15325 +#line 15335 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15324 +#line 15334 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15326 +#line 15336 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -38488,19 +38488,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15331 +#line 15341 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15331 +#line 15341 .heldItem = ITEM_CHESTO_BERRY, -#line 15333 +#line 15343 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15332 +#line 15342 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15334 +#line 15344 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38508,19 +38508,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15339 +#line 15349 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15339 +#line 15349 .heldItem = ITEM_CHESTO_BERRY, -#line 15341 +#line 15351 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15340 +#line 15350 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15342 +#line 15352 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38528,19 +38528,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15347 +#line 15357 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15347 +#line 15357 .heldItem = ITEM_SITRUS_BERRY, -#line 15349 +#line 15359 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15348 +#line 15358 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15350 +#line 15360 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38549,39 +38549,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15355 +#line 15365 [TRAINER_TATE_AND_LIZA_3] = { -#line 15356 +#line 15366 .trainerName = _("TATE&LIZA"), -#line 15357 +#line 15367 .trainerClass = TRAINER_CLASS_LEADER, -#line 15358 +#line 15368 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15360 +#line 15370 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15361 +#line 15371 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15362 +#line 15372 .doubleBattle = TRUE, -#line 15363 +#line 15373 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15365 +#line 15375 .species = SPECIES_DROWZEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15367 +#line 15377 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15366 +#line 15376 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15368 +#line 15378 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38589,17 +38589,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15373 +#line 15383 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15375 +#line 15385 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15374 +#line 15384 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15376 +#line 15386 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38607,17 +38607,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15381 +#line 15391 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15383 +#line 15393 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15382 +#line 15392 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15384 +#line 15394 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38625,19 +38625,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15389 +#line 15399 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15389 +#line 15399 .heldItem = ITEM_CHESTO_BERRY, -#line 15391 +#line 15401 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15390 +#line 15400 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15392 +#line 15402 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38645,19 +38645,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15397 +#line 15407 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15397 +#line 15407 .heldItem = ITEM_CHESTO_BERRY, -#line 15399 +#line 15409 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15398 +#line 15408 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15400 +#line 15410 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38665,19 +38665,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15405 +#line 15415 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15405 +#line 15415 .heldItem = ITEM_SITRUS_BERRY, -#line 15407 +#line 15417 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15406 +#line 15416 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15408 +#line 15418 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38686,39 +38686,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15413 +#line 15423 [TRAINER_TATE_AND_LIZA_4] = { -#line 15414 +#line 15424 .trainerName = _("TATE&LIZA"), -#line 15415 +#line 15425 .trainerClass = TRAINER_CLASS_LEADER, -#line 15416 +#line 15426 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15418 +#line 15428 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15419 +#line 15429 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15420 +#line 15430 .doubleBattle = TRUE, -#line 15421 +#line 15431 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15423 +#line 15433 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15425 +#line 15435 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15424 +#line 15434 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15426 +#line 15436 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38726,17 +38726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15431 +#line 15441 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15433 +#line 15443 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15432 +#line 15442 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15434 +#line 15444 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38744,17 +38744,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15439 +#line 15449 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15441 +#line 15451 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15440 +#line 15450 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15442 +#line 15452 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38762,19 +38762,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15447 +#line 15457 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15447 +#line 15457 .heldItem = ITEM_CHESTO_BERRY, -#line 15449 +#line 15459 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15448 +#line 15458 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15450 +#line 15460 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38782,19 +38782,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15455 +#line 15465 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15455 +#line 15465 .heldItem = ITEM_CHESTO_BERRY, -#line 15457 +#line 15467 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15456 +#line 15466 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15458 +#line 15468 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38802,19 +38802,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15463 +#line 15473 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15463 +#line 15473 .heldItem = ITEM_SITRUS_BERRY, -#line 15465 +#line 15475 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15464 +#line 15474 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15466 +#line 15476 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38823,39 +38823,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15471 +#line 15481 [TRAINER_TATE_AND_LIZA_5] = { -#line 15472 +#line 15482 .trainerName = _("TATE&LIZA"), -#line 15473 +#line 15483 .trainerClass = TRAINER_CLASS_LEADER, -#line 15474 +#line 15484 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15476 +#line 15486 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15477 +#line 15487 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15478 +#line 15488 .doubleBattle = TRUE, -#line 15479 +#line 15489 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15481 +#line 15491 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15483 +#line 15493 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15482 +#line 15492 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15484 +#line 15494 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38863,17 +38863,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15489 +#line 15499 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15491 +#line 15501 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15490 +#line 15500 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15492 +#line 15502 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38881,17 +38881,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15497 +#line 15507 .species = SPECIES_SLOWKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15499 +#line 15509 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15498 +#line 15508 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15500 +#line 15510 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38899,19 +38899,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15505 +#line 15515 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15505 +#line 15515 .heldItem = ITEM_CHESTO_BERRY, -#line 15507 +#line 15517 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15506 +#line 15516 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15508 +#line 15518 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38919,19 +38919,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15513 +#line 15523 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15513 +#line 15523 .heldItem = ITEM_CHESTO_BERRY, -#line 15515 +#line 15525 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15514 +#line 15524 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15516 +#line 15526 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38939,19 +38939,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15521 +#line 15531 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15521 +#line 15531 .heldItem = ITEM_SITRUS_BERRY, -#line 15523 +#line 15533 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15522 +#line 15532 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15524 +#line 15534 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38960,39 +38960,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15529 +#line 15539 [TRAINER_JUAN_2] = { -#line 15530 +#line 15540 .trainerName = _("JUAN"), -#line 15531 +#line 15541 .trainerClass = TRAINER_CLASS_LEADER, -#line 15532 +#line 15542 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15534 +#line 15544 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15535 +#line 15545 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15536 +#line 15546 .doubleBattle = TRUE, -#line 15537 +#line 15547 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15539 +#line 15549 .species = SPECIES_POLIWAG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15541 +#line 15551 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15540 +#line 15550 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15542 +#line 15552 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39000,17 +39000,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15547 +#line 15557 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15549 +#line 15559 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15548 +#line 15558 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15550 +#line 15560 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39018,17 +39018,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15555 +#line 15565 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15557 +#line 15567 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15556 +#line 15566 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15558 +#line 15568 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39036,19 +39036,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15563 +#line 15573 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15563 +#line 15573 .heldItem = ITEM_CHESTO_BERRY, -#line 15565 +#line 15575 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15564 +#line 15574 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15566 +#line 15576 MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -39056,19 +39056,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15571 +#line 15581 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15571 +#line 15581 .heldItem = ITEM_CHESTO_BERRY, -#line 15573 +#line 15583 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15572 +#line 15582 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15574 +#line 15584 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39077,39 +39077,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15579 +#line 15589 [TRAINER_JUAN_3] = { -#line 15580 +#line 15590 .trainerName = _("JUAN"), -#line 15581 +#line 15591 .trainerClass = TRAINER_CLASS_LEADER, -#line 15582 +#line 15592 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15584 +#line 15594 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15585 +#line 15595 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15586 +#line 15596 .doubleBattle = TRUE, -#line 15587 +#line 15597 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15589 +#line 15599 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15591 +#line 15601 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15590 +#line 15600 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15592 +#line 15602 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39117,17 +39117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15597 +#line 15607 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15599 +#line 15609 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15598 +#line 15608 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15600 +#line 15610 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39135,17 +39135,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15605 +#line 15615 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15607 +#line 15617 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15606 +#line 15616 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15608 +#line 15618 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39153,19 +39153,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15613 +#line 15623 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15613 +#line 15623 .heldItem = ITEM_CHESTO_BERRY, -#line 15615 +#line 15625 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15614 +#line 15624 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15616 +#line 15626 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39173,19 +39173,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15621 +#line 15631 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15621 +#line 15631 .heldItem = ITEM_CHESTO_BERRY, -#line 15623 +#line 15633 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15622 +#line 15632 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15624 +#line 15634 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39194,39 +39194,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15629 +#line 15639 [TRAINER_JUAN_4] = { -#line 15630 +#line 15640 .trainerName = _("JUAN"), -#line 15631 +#line 15641 .trainerClass = TRAINER_CLASS_LEADER, -#line 15632 +#line 15642 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15634 +#line 15644 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15635 +#line 15645 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15636 +#line 15646 .doubleBattle = TRUE, -#line 15637 +#line 15647 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15639 +#line 15649 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15641 +#line 15651 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15640 +#line 15650 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15642 +#line 15652 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39234,17 +39234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15647 +#line 15657 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15649 +#line 15659 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15648 +#line 15658 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15650 +#line 15660 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39252,17 +39252,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15655 +#line 15665 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15657 +#line 15667 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15656 +#line 15666 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15658 +#line 15668 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39270,17 +39270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15663 +#line 15673 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15665 +#line 15675 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15664 +#line 15674 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15666 +#line 15676 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39288,19 +39288,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15671 +#line 15681 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15671 +#line 15681 .heldItem = ITEM_CHESTO_BERRY, -#line 15673 +#line 15683 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15672 +#line 15682 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15674 +#line 15684 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39308,19 +39308,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15679 +#line 15689 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15679 +#line 15689 .heldItem = ITEM_CHESTO_BERRY, -#line 15681 +#line 15691 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15680 +#line 15690 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15682 +#line 15692 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39329,39 +39329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15687 +#line 15697 [TRAINER_JUAN_5] = { -#line 15688 +#line 15698 .trainerName = _("JUAN"), -#line 15689 +#line 15699 .trainerClass = TRAINER_CLASS_LEADER, -#line 15690 +#line 15700 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15692 +#line 15702 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15693 +#line 15703 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15694 +#line 15704 .doubleBattle = TRUE, -#line 15695 +#line 15705 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15697 +#line 15707 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15699 +#line 15709 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15698 +#line 15708 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15700 +#line 15710 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39369,17 +39369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15705 +#line 15715 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15707 +#line 15717 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15706 +#line 15716 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15708 +#line 15718 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39387,17 +39387,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15713 +#line 15723 .species = SPECIES_POLITOED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15715 +#line 15725 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15714 +#line 15724 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15716 +#line 15726 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, @@ -39405,17 +39405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15721 +#line 15731 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15723 +#line 15733 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15722 +#line 15732 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15724 +#line 15734 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39423,19 +39423,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15729 +#line 15739 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15729 +#line 15739 .heldItem = ITEM_CHESTO_BERRY, -#line 15731 +#line 15741 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15730 +#line 15740 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15732 +#line 15742 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39443,19 +39443,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15737 +#line 15747 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15737 +#line 15747 .heldItem = ITEM_CHESTO_BERRY, -#line 15739 +#line 15749 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15738 +#line 15748 .lvl = 66, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15740 +#line 15750 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39464,54 +39464,54 @@ F_TRAINER_FEMALE | }, }, }, -#line 15745 +#line 15755 [TRAINER_ANGELO] = { -#line 15746 +#line 15756 .trainerName = _("ANGELO"), -#line 15747 +#line 15757 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 15748 +#line 15758 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 15750 +#line 15760 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 15751 +#line 15761 .doubleBattle = FALSE, -#line 15752 +#line 15762 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 15754 +#line 15764 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15756 +#line 15766 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15755 +#line 15765 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15757 +#line 15767 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, }, }, { -#line 15761 +#line 15771 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15763 +#line 15773 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15762 +#line 15772 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15764 +#line 15774 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, @@ -39519,71 +39519,71 @@ F_TRAINER_FEMALE | }, }, }, -#line 15768 +#line 15778 [TRAINER_DARIUS] = { -#line 15769 +#line 15779 .trainerName = _("DARIUS"), -#line 15770 +#line 15780 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 15771 +#line 15781 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 15773 +#line 15783 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 15774 +#line 15784 .doubleBattle = FALSE, -#line 15775 +#line 15785 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15777 +#line 15787 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15779 +#line 15789 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 15778 +#line 15788 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15781 +#line 15791 [TRAINER_STEVEN] = { -#line 15782 +#line 15792 .trainerName = _("STEVEN"), -#line 15783 +#line 15793 .trainerClass = TRAINER_CLASS_RIVAL, -#line 15784 +#line 15794 .trainerPic = TRAINER_PIC_STEVEN, .encounterMusic_gender = -#line 15786 +#line 15796 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15787 +#line 15797 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15788 +#line 15798 .doubleBattle = FALSE, -#line 15789 +#line 15799 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15791 +#line 15801 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15793 +#line 15803 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15792 +#line 15802 .lvl = 77, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15794 +#line 15804 MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, @@ -39591,17 +39591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15799 +#line 15809 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15801 +#line 15811 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15800 +#line 15810 .lvl = 75, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15802 +#line 15812 MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, @@ -39609,17 +39609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15807 +#line 15817 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15809 +#line 15819 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15808 +#line 15818 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15810 +#line 15820 MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, @@ -39627,17 +39627,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15815 +#line 15825 .species = SPECIES_CRADILY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15817 +#line 15827 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15816 +#line 15826 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15818 +#line 15828 MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, @@ -39645,17 +39645,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15823 +#line 15833 .species = SPECIES_ARMALDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15825 +#line 15835 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15824 +#line 15834 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15826 +#line 15836 MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, @@ -39663,19 +39663,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15831 +#line 15841 .species = SPECIES_METAGROSS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15831 +#line 15841 .heldItem = ITEM_SITRUS_BERRY, -#line 15833 +#line 15843 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15832 +#line 15842 .lvl = 78, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15834 +#line 15844 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, @@ -39684,2499 +39684,2499 @@ F_TRAINER_FEMALE | }, }, }, -#line 15839 +#line 15849 [TRAINER_ANABEL] = { -#line 15840 +#line 15850 .trainerName = _("ANABEL"), -#line 15841 +#line 15851 .trainerClass = TRAINER_CLASS_SALON_MAIDEN, -#line 15842 +#line 15852 .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, .encounterMusic_gender = -#line 15843 +#line 15853 F_TRAINER_FEMALE | -#line 15844 +#line 15854 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15845 +#line 15855 .doubleBattle = FALSE, -#line 15846 +#line 15856 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15848 +#line 15858 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15850 +#line 15860 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15849 +#line 15859 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15852 +#line 15862 [TRAINER_TUCKER] = { -#line 15853 +#line 15863 .trainerName = _("TUCKER"), -#line 15854 +#line 15864 .trainerClass = TRAINER_CLASS_DOME_ACE, -#line 15855 +#line 15865 .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER, .encounterMusic_gender = -#line 15857 +#line 15867 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15858 +#line 15868 .doubleBattle = FALSE, -#line 15859 +#line 15869 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15861 +#line 15871 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15863 +#line 15873 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15862 +#line 15872 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15865 +#line 15875 [TRAINER_SPENSER] = { -#line 15866 +#line 15876 .trainerName = _("SPENSER"), -#line 15867 +#line 15877 .trainerClass = TRAINER_CLASS_PALACE_MAVEN, -#line 15868 +#line 15878 .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER, .encounterMusic_gender = -#line 15870 +#line 15880 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15871 +#line 15881 .doubleBattle = FALSE, -#line 15872 +#line 15882 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15874 +#line 15884 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15876 +#line 15886 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15875 +#line 15885 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15878 +#line 15888 [TRAINER_GRETA] = { -#line 15879 +#line 15889 .trainerName = _("GRETA"), -#line 15880 +#line 15890 .trainerClass = TRAINER_CLASS_ARENA_TYCOON, -#line 15881 +#line 15891 .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, .encounterMusic_gender = -#line 15882 +#line 15892 F_TRAINER_FEMALE | -#line 15883 +#line 15893 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15884 +#line 15894 .doubleBattle = FALSE, -#line 15885 +#line 15895 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15887 +#line 15897 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15889 +#line 15899 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15888 +#line 15898 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15891 +#line 15901 [TRAINER_NOLAND] = { -#line 15892 +#line 15902 .trainerName = _("NOLAND"), -#line 15893 +#line 15903 .trainerClass = TRAINER_CLASS_FACTORY_HEAD, -#line 15894 +#line 15904 .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND, .encounterMusic_gender = -#line 15896 +#line 15906 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15897 +#line 15907 .doubleBattle = FALSE, -#line 15898 +#line 15908 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15900 +#line 15910 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15902 +#line 15912 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15901 +#line 15911 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15904 +#line 15914 [TRAINER_LUCY] = { -#line 15905 +#line 15915 .trainerName = _("LUCY"), -#line 15906 +#line 15916 .trainerClass = TRAINER_CLASS_PIKE_QUEEN, -#line 15907 +#line 15917 .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, .encounterMusic_gender = -#line 15908 +#line 15918 F_TRAINER_FEMALE | -#line 15909 +#line 15919 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15910 +#line 15920 .doubleBattle = FALSE, -#line 15911 +#line 15921 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15913 +#line 15923 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15915 +#line 15925 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15914 +#line 15924 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15917 +#line 15927 [TRAINER_BRANDON] = { -#line 15918 +#line 15928 .trainerName = _("BRANDON"), -#line 15919 +#line 15929 .trainerClass = TRAINER_CLASS_PYRAMID_KING, -#line 15920 +#line 15930 .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON, .encounterMusic_gender = -#line 15922 +#line 15932 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15923 +#line 15933 .doubleBattle = FALSE, -#line 15924 +#line 15934 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15926 +#line 15936 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15928 +#line 15938 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15927 +#line 15937 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15930 +#line 15940 [TRAINER_ANDRES_2] = { -#line 15931 +#line 15941 .trainerName = _("ANDRES"), -#line 15932 +#line 15942 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15933 +#line 15943 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15935 +#line 15945 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15936 +#line 15946 .doubleBattle = FALSE, -#line 15937 +#line 15947 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 15939 +#line 15949 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15941 +#line 15951 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 15940 +#line 15950 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15943 +#line 15953 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15945 +#line 15955 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 15944 +#line 15954 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15947 +#line 15957 [TRAINER_ANDRES_3] = { -#line 15948 +#line 15958 .trainerName = _("ANDRES"), -#line 15949 +#line 15959 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15950 +#line 15960 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15952 +#line 15962 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15953 +#line 15963 .doubleBattle = FALSE, -#line 15954 +#line 15964 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 15956 +#line 15966 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15958 +#line 15968 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15957 +#line 15967 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15960 +#line 15970 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15962 +#line 15972 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15961 +#line 15971 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15964 +#line 15974 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15966 +#line 15976 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15965 +#line 15975 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15968 +#line 15978 [TRAINER_ANDRES_4] = { -#line 15969 +#line 15979 .trainerName = _("ANDRES"), -#line 15970 +#line 15980 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15971 +#line 15981 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15973 +#line 15983 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15974 +#line 15984 .doubleBattle = FALSE, -#line 15975 +#line 15985 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 15977 +#line 15987 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15979 +#line 15989 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15978 +#line 15988 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15981 +#line 15991 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15983 +#line 15993 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15982 +#line 15992 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15985 +#line 15995 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15987 +#line 15997 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15986 +#line 15996 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15989 +#line 15999 [TRAINER_ANDRES_5] = { -#line 15990 +#line 16000 .trainerName = _("ANDRES"), -#line 15991 +#line 16001 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15992 +#line 16002 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15994 +#line 16004 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15995 +#line 16005 .doubleBattle = FALSE, -#line 15996 +#line 16006 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 15998 +#line 16008 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16000 +#line 16010 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 15999 +#line 16009 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16002 +#line 16012 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16004 +#line 16014 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16003 +#line 16013 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16006 +#line 16016 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16008 +#line 16018 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16007 +#line 16017 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16010 +#line 16020 [TRAINER_CORY_2] = { -#line 16011 +#line 16021 .trainerName = _("CORY"), -#line 16012 +#line 16022 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16013 +#line 16023 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16015 +#line 16025 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16016 +#line 16026 .doubleBattle = FALSE, -#line 16017 +#line 16027 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16019 +#line 16029 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16021 +#line 16031 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16020 +#line 16030 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16023 +#line 16033 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16025 +#line 16035 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16024 +#line 16034 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16027 +#line 16037 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16029 +#line 16039 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16028 +#line 16038 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16031 +#line 16041 [TRAINER_CORY_3] = { -#line 16032 +#line 16042 .trainerName = _("CORY"), -#line 16033 +#line 16043 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16034 +#line 16044 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16036 +#line 16046 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16037 +#line 16047 .doubleBattle = FALSE, -#line 16038 +#line 16048 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16040 +#line 16050 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16042 +#line 16052 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16041 +#line 16051 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16044 +#line 16054 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16046 +#line 16056 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16045 +#line 16055 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16048 +#line 16058 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16050 +#line 16060 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16049 +#line 16059 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16052 +#line 16062 [TRAINER_CORY_4] = { -#line 16053 +#line 16063 .trainerName = _("CORY"), -#line 16054 +#line 16064 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16055 +#line 16065 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16057 +#line 16067 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16058 +#line 16068 .doubleBattle = FALSE, -#line 16059 +#line 16069 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16061 +#line 16071 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16063 +#line 16073 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16062 +#line 16072 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16065 +#line 16075 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16067 +#line 16077 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16066 +#line 16076 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16069 +#line 16079 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16071 +#line 16081 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16070 +#line 16080 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16073 +#line 16083 [TRAINER_CORY_5] = { -#line 16074 +#line 16084 .trainerName = _("CORY"), -#line 16075 +#line 16085 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16076 +#line 16086 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16078 +#line 16088 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16079 +#line 16089 .doubleBattle = FALSE, -#line 16080 +#line 16090 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16082 +#line 16092 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16084 +#line 16094 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16083 +#line 16093 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16086 +#line 16096 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16088 +#line 16098 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16087 +#line 16097 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16090 +#line 16100 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16092 +#line 16102 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16091 +#line 16101 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16094 +#line 16104 [TRAINER_PABLO_2] = { -#line 16095 +#line 16105 .trainerName = _("PABLO"), -#line 16096 +#line 16106 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16097 +#line 16107 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16099 +#line 16109 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16100 +#line 16110 .doubleBattle = FALSE, -#line 16101 +#line 16111 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16103 +#line 16113 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16105 +#line 16115 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16104 +#line 16114 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16107 +#line 16117 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16109 +#line 16119 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16108 +#line 16118 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16111 +#line 16121 [TRAINER_PABLO_3] = { -#line 16112 +#line 16122 .trainerName = _("PABLO"), -#line 16113 +#line 16123 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16114 +#line 16124 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16116 +#line 16126 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16117 +#line 16127 .doubleBattle = FALSE, -#line 16118 +#line 16128 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16120 +#line 16130 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16122 +#line 16132 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16121 +#line 16131 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16124 +#line 16134 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16126 +#line 16136 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16125 +#line 16135 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16128 +#line 16138 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16130 +#line 16140 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16129 +#line 16139 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16132 +#line 16142 [TRAINER_PABLO_4] = { -#line 16133 +#line 16143 .trainerName = _("PABLO"), -#line 16134 +#line 16144 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16135 +#line 16145 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16137 +#line 16147 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16138 +#line 16148 .doubleBattle = FALSE, -#line 16139 +#line 16149 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16141 +#line 16151 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16143 +#line 16153 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16142 +#line 16152 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16145 +#line 16155 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16147 +#line 16157 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16146 +#line 16156 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16149 +#line 16159 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16151 +#line 16161 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16150 +#line 16160 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16153 +#line 16163 [TRAINER_PABLO_5] = { -#line 16154 +#line 16164 .trainerName = _("PABLO"), -#line 16155 +#line 16165 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16156 +#line 16166 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16158 +#line 16168 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16159 +#line 16169 .doubleBattle = FALSE, -#line 16160 +#line 16170 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16162 +#line 16172 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16164 +#line 16174 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16163 +#line 16173 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16166 +#line 16176 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16168 +#line 16178 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16167 +#line 16177 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16170 +#line 16180 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16172 +#line 16182 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16171 +#line 16181 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16174 +#line 16184 [TRAINER_KOJI_2] = { -#line 16175 +#line 16185 .trainerName = _("KOJI"), -#line 16176 +#line 16186 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16177 +#line 16187 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16179 +#line 16189 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16180 +#line 16190 .doubleBattle = FALSE, -#line 16181 +#line 16191 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16183 +#line 16193 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16185 +#line 16195 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16184 +#line 16194 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16187 +#line 16197 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16189 +#line 16199 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16188 +#line 16198 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16191 +#line 16201 [TRAINER_KOJI_3] = { -#line 16192 +#line 16202 .trainerName = _("KOJI"), -#line 16193 +#line 16203 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16194 +#line 16204 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16196 +#line 16206 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16197 +#line 16207 .doubleBattle = FALSE, -#line 16198 +#line 16208 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16200 +#line 16210 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16202 +#line 16212 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16201 +#line 16211 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16204 +#line 16214 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16206 +#line 16216 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16205 +#line 16215 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16208 +#line 16218 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16210 +#line 16220 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16209 +#line 16219 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16212 +#line 16222 [TRAINER_KOJI_4] = { -#line 16213 +#line 16223 .trainerName = _("KOJI"), -#line 16214 +#line 16224 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16215 +#line 16225 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16217 +#line 16227 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16218 +#line 16228 .doubleBattle = FALSE, -#line 16219 +#line 16229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16221 +#line 16231 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16223 +#line 16233 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16222 +#line 16232 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16225 +#line 16235 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16227 +#line 16237 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16226 +#line 16236 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16229 +#line 16239 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16231 +#line 16241 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16230 +#line 16240 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16233 +#line 16243 [TRAINER_KOJI_5] = { -#line 16234 +#line 16244 .trainerName = _("KOJI"), -#line 16235 +#line 16245 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16236 +#line 16246 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16238 +#line 16248 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16239 +#line 16249 .doubleBattle = FALSE, -#line 16240 +#line 16250 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16242 +#line 16252 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16244 +#line 16254 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16243 +#line 16253 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16246 +#line 16256 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16248 +#line 16258 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16247 +#line 16257 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16250 +#line 16260 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16252 +#line 16262 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16251 +#line 16261 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16254 +#line 16264 [TRAINER_CRISTIN_2] = { -#line 16255 +#line 16265 .trainerName = _("CRISTIN"), -#line 16256 +#line 16266 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16257 +#line 16267 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16258 +#line 16268 F_TRAINER_FEMALE | -#line 16259 +#line 16269 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16260 +#line 16270 .items = { ITEM_HYPER_POTION }, -#line 16261 +#line 16271 .doubleBattle = FALSE, -#line 16262 +#line 16272 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16264 +#line 16274 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16266 +#line 16276 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16265 +#line 16275 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16268 +#line 16278 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16270 +#line 16280 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16269 +#line 16279 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16272 +#line 16282 [TRAINER_CRISTIN_3] = { -#line 16273 +#line 16283 .trainerName = _("CRISTIN"), -#line 16274 +#line 16284 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16275 +#line 16285 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16276 +#line 16286 F_TRAINER_FEMALE | -#line 16277 +#line 16287 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16278 +#line 16288 .items = { ITEM_HYPER_POTION }, -#line 16279 +#line 16289 .doubleBattle = FALSE, -#line 16280 +#line 16290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16282 +#line 16292 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16284 +#line 16294 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16283 +#line 16293 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16286 +#line 16296 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16288 +#line 16298 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16287 +#line 16297 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16290 +#line 16300 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16292 +#line 16302 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16291 +#line 16301 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16294 +#line 16304 [TRAINER_CRISTIN_4] = { -#line 16295 +#line 16305 .trainerName = _("CRISTIN"), -#line 16296 +#line 16306 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16297 +#line 16307 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16298 +#line 16308 F_TRAINER_FEMALE | -#line 16299 +#line 16309 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16300 +#line 16310 .items = { ITEM_HYPER_POTION }, -#line 16301 +#line 16311 .doubleBattle = FALSE, -#line 16302 +#line 16312 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16304 +#line 16314 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16306 +#line 16316 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16305 +#line 16315 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16308 +#line 16318 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16310 +#line 16320 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16309 +#line 16319 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16312 +#line 16322 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16314 +#line 16324 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 16313 +#line 16323 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16316 +#line 16326 [TRAINER_CRISTIN_5] = { -#line 16317 +#line 16327 .trainerName = _("CRISTIN"), -#line 16318 +#line 16328 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16319 +#line 16329 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16320 +#line 16330 F_TRAINER_FEMALE | -#line 16321 +#line 16331 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16322 +#line 16332 .items = { ITEM_HYPER_POTION }, -#line 16323 +#line 16333 .doubleBattle = FALSE, -#line 16324 +#line 16334 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16326 +#line 16336 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16328 +#line 16338 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16327 +#line 16337 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16330 +#line 16340 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16332 +#line 16342 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16331 +#line 16341 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16334 +#line 16344 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16336 +#line 16346 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16335 +#line 16345 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16338 +#line 16348 [TRAINER_FERNANDO_2] = { -#line 16339 +#line 16349 .trainerName = _("FERNANDO"), -#line 16340 +#line 16350 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16341 +#line 16351 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16343 +#line 16353 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16344 +#line 16354 .doubleBattle = FALSE, -#line 16345 +#line 16355 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16347 +#line 16357 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16349 +#line 16359 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16348 +#line 16358 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16351 +#line 16361 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16353 +#line 16363 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16352 +#line 16362 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16355 +#line 16365 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16357 +#line 16367 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16356 +#line 16366 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16359 +#line 16369 [TRAINER_FERNANDO_3] = { -#line 16360 +#line 16370 .trainerName = _("FERNANDO"), -#line 16361 +#line 16371 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16362 +#line 16372 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16364 +#line 16374 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16365 +#line 16375 .doubleBattle = FALSE, -#line 16366 +#line 16376 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16368 +#line 16378 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16370 +#line 16380 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16369 +#line 16379 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16372 +#line 16382 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16374 +#line 16384 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16373 +#line 16383 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16376 +#line 16386 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16378 +#line 16388 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16377 +#line 16387 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16380 +#line 16390 [TRAINER_FERNANDO_4] = { -#line 16381 +#line 16391 .trainerName = _("FERNANDO"), -#line 16382 +#line 16392 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16383 +#line 16393 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16385 +#line 16395 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16386 +#line 16396 .doubleBattle = FALSE, -#line 16387 +#line 16397 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16389 +#line 16399 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16391 +#line 16401 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16390 +#line 16400 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16393 +#line 16403 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16395 +#line 16405 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16394 +#line 16404 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16397 +#line 16407 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16399 +#line 16409 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16398 +#line 16408 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16401 +#line 16411 [TRAINER_FERNANDO_5] = { -#line 16402 +#line 16412 .trainerName = _("FERNANDO"), -#line 16403 +#line 16413 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16404 +#line 16414 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16406 +#line 16416 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16407 +#line 16417 .doubleBattle = FALSE, -#line 16408 +#line 16418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16410 +#line 16420 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16412 +#line 16422 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16411 +#line 16421 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16414 +#line 16424 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16416 +#line 16426 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16415 +#line 16425 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16418 +#line 16428 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16420 +#line 16430 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16419 +#line 16429 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16422 +#line 16432 [TRAINER_SAWYER_2] = { -#line 16423 +#line 16433 .trainerName = _("SAWYER"), -#line 16424 +#line 16434 .trainerClass = TRAINER_CLASS_HIKER, -#line 16425 +#line 16435 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16427 +#line 16437 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16428 +#line 16438 .doubleBattle = FALSE, -#line 16429 +#line 16439 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16431 +#line 16441 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16433 +#line 16443 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16432 +#line 16442 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16435 +#line 16445 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16437 +#line 16447 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16436 +#line 16446 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16439 +#line 16449 [TRAINER_SAWYER_3] = { -#line 16440 +#line 16450 .trainerName = _("SAWYER"), -#line 16441 +#line 16451 .trainerClass = TRAINER_CLASS_HIKER, -#line 16442 +#line 16452 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16444 +#line 16454 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16445 +#line 16455 .doubleBattle = FALSE, -#line 16446 +#line 16456 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16448 +#line 16458 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16450 +#line 16460 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16449 +#line 16459 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16452 +#line 16462 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16454 +#line 16464 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16453 +#line 16463 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16456 +#line 16466 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16458 +#line 16468 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16457 +#line 16467 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16460 +#line 16470 [TRAINER_SAWYER_4] = { -#line 16461 +#line 16471 .trainerName = _("SAWYER"), -#line 16462 +#line 16472 .trainerClass = TRAINER_CLASS_HIKER, -#line 16463 +#line 16473 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16465 +#line 16475 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16466 +#line 16476 .doubleBattle = FALSE, -#line 16467 +#line 16477 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16469 +#line 16479 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16471 +#line 16481 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16470 +#line 16480 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16473 +#line 16483 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16475 +#line 16485 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16474 +#line 16484 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16477 +#line 16487 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16479 +#line 16489 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16478 +#line 16488 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16481 +#line 16491 [TRAINER_SAWYER_5] = { -#line 16482 +#line 16492 .trainerName = _("SAWYER"), -#line 16483 +#line 16493 .trainerClass = TRAINER_CLASS_HIKER, -#line 16484 +#line 16494 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16486 +#line 16496 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16487 +#line 16497 .doubleBattle = FALSE, -#line 16488 +#line 16498 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16490 +#line 16500 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16492 +#line 16502 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16491 +#line 16501 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16494 +#line 16504 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16496 +#line 16506 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16495 +#line 16505 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16498 +#line 16508 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16500 +#line 16510 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16499 +#line 16509 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16502 +#line 16512 [TRAINER_GABRIELLE_2] = { -#line 16503 +#line 16513 .trainerName = _("GABRIELLE"), -#line 16504 +#line 16514 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16505 +#line 16515 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16506 +#line 16516 F_TRAINER_FEMALE | -#line 16507 +#line 16517 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16508 +#line 16518 .doubleBattle = FALSE, -#line 16509 +#line 16519 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16511 +#line 16521 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16513 +#line 16523 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16512 +#line 16522 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16515 +#line 16525 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16517 +#line 16527 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16516 +#line 16526 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16519 +#line 16529 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16521 +#line 16531 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16520 +#line 16530 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16523 +#line 16533 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16525 +#line 16535 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16524 +#line 16534 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16527 +#line 16537 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16529 +#line 16539 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16528 +#line 16538 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16531 +#line 16541 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16533 +#line 16543 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16532 +#line 16542 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16535 +#line 16545 [TRAINER_GABRIELLE_3] = { -#line 16536 +#line 16546 .trainerName = _("GABRIELLE"), -#line 16537 +#line 16547 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16538 +#line 16548 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16539 +#line 16549 F_TRAINER_FEMALE | -#line 16540 +#line 16550 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16541 +#line 16551 .doubleBattle = FALSE, -#line 16542 +#line 16552 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16544 +#line 16554 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16546 +#line 16556 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16545 +#line 16555 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16548 +#line 16558 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16550 +#line 16560 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16549 +#line 16559 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16552 +#line 16562 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16554 +#line 16564 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16553 +#line 16563 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16556 +#line 16566 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16558 +#line 16568 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16557 +#line 16567 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16560 +#line 16570 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16562 +#line 16572 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16561 +#line 16571 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16564 +#line 16574 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16566 +#line 16576 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16565 +#line 16575 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16568 +#line 16578 [TRAINER_GABRIELLE_4] = { -#line 16569 +#line 16579 .trainerName = _("GABRIELLE"), -#line 16570 +#line 16580 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16571 +#line 16581 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16572 +#line 16582 F_TRAINER_FEMALE | -#line 16573 +#line 16583 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16574 +#line 16584 .doubleBattle = FALSE, -#line 16575 +#line 16585 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16577 +#line 16587 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16579 +#line 16589 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16578 +#line 16588 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16581 +#line 16591 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16583 +#line 16593 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16582 +#line 16592 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16585 +#line 16595 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16587 +#line 16597 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16586 +#line 16596 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16589 +#line 16599 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16591 +#line 16601 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16590 +#line 16600 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16593 +#line 16603 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16595 +#line 16605 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16594 +#line 16604 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16597 +#line 16607 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16599 +#line 16609 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16598 +#line 16608 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16601 +#line 16611 [TRAINER_GABRIELLE_5] = { -#line 16602 +#line 16612 .trainerName = _("GABRIELLE"), -#line 16603 +#line 16613 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16604 +#line 16614 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16605 +#line 16615 F_TRAINER_FEMALE | -#line 16606 +#line 16616 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16607 +#line 16617 .doubleBattle = FALSE, -#line 16608 +#line 16618 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16610 +#line 16620 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16612 +#line 16622 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16611 +#line 16621 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16614 +#line 16624 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16616 +#line 16626 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16615 +#line 16625 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16618 +#line 16628 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16620 +#line 16630 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16619 +#line 16629 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16622 +#line 16632 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16624 +#line 16634 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16623 +#line 16633 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16626 +#line 16636 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16628 +#line 16638 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16627 +#line 16637 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16630 +#line 16640 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16632 +#line 16642 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16631 +#line 16641 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16634 +#line 16644 [TRAINER_THALIA_2] = { -#line 16635 +#line 16645 .trainerName = _("THALIA"), -#line 16636 +#line 16646 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16637 +#line 16647 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16638 +#line 16648 F_TRAINER_FEMALE | -#line 16639 +#line 16649 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16640 +#line 16650 .doubleBattle = FALSE, -#line 16641 +#line 16651 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16643 +#line 16653 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16645 +#line 16655 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16644 +#line 16654 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16647 +#line 16657 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16649 +#line 16659 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16648 +#line 16658 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16651 +#line 16661 [TRAINER_THALIA_3] = { -#line 16652 +#line 16662 .trainerName = _("THALIA"), -#line 16653 +#line 16663 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16654 +#line 16664 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16655 +#line 16665 F_TRAINER_FEMALE | -#line 16656 +#line 16666 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16657 +#line 16667 .doubleBattle = FALSE, -#line 16658 +#line 16668 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16660 +#line 16670 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16662 +#line 16672 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16661 +#line 16671 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16664 +#line 16674 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16666 +#line 16676 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16665 +#line 16675 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16668 +#line 16678 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16670 +#line 16680 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16669 +#line 16679 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16672 +#line 16682 [TRAINER_THALIA_4] = { -#line 16673 +#line 16683 .trainerName = _("THALIA"), -#line 16674 +#line 16684 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16675 +#line 16685 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16676 +#line 16686 F_TRAINER_FEMALE | -#line 16677 +#line 16687 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16678 +#line 16688 .doubleBattle = FALSE, -#line 16679 +#line 16689 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16681 +#line 16691 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16683 +#line 16693 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16682 +#line 16692 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16685 +#line 16695 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16687 +#line 16697 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16686 +#line 16696 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16689 +#line 16699 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16691 +#line 16701 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16690 +#line 16700 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16693 +#line 16703 [TRAINER_THALIA_5] = { -#line 16694 +#line 16704 .trainerName = _("THALIA"), -#line 16695 +#line 16705 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16696 +#line 16706 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16697 +#line 16707 F_TRAINER_FEMALE | -#line 16698 +#line 16708 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16699 +#line 16709 .doubleBattle = FALSE, -#line 16700 +#line 16710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16702 +#line 16712 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16704 +#line 16714 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16703 +#line 16713 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16706 +#line 16716 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16708 +#line 16718 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16707 +#line 16717 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16710 +#line 16720 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16712 +#line 16722 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16711 +#line 16721 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16714 +#line 16724 [TRAINER_MARIELA] = { -#line 16715 +#line 16725 .trainerName = _("MARIELA"), -#line 16716 +#line 16726 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16717 +#line 16727 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 16718 +#line 16728 F_TRAINER_FEMALE | -#line 16719 +#line 16729 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16720 +#line 16730 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16722 +#line 16732 .species = SPECIES_CHIMECHO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16724 +#line 16734 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16723 +#line 16733 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16726 +#line 16736 [TRAINER_ALVARO] = { -#line 16727 +#line 16737 .trainerName = _("ALVARO"), -#line 16728 +#line 16738 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16729 +#line 16739 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 16731 +#line 16741 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16732 +#line 16742 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16734 +#line 16744 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16736 +#line 16746 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16735 +#line 16745 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16738 +#line 16748 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16740 +#line 16750 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16739 +#line 16749 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16742 +#line 16752 [TRAINER_EVERETT] = { -#line 16743 +#line 16753 .trainerName = _("EVERETT"), -#line 16744 +#line 16754 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 16745 +#line 16755 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 16747 +#line 16757 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 16748 +#line 16758 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16750 +#line 16760 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16752 +#line 16762 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16751 +#line 16761 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16754 +#line 16764 [TRAINER_RED] = { -#line 16755 +#line 16765 .trainerName = _("RED"), -#line 16756 +#line 16766 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16757 +#line 16767 .trainerPic = TRAINER_PIC_RED, .encounterMusic_gender = -#line 16759 +#line 16769 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16760 +#line 16770 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16762 +#line 16772 .species = SPECIES_CHARMANDER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16764 +#line 16774 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16763 +#line 16773 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16766 +#line 16776 [TRAINER_LEAF] = { -#line 16767 +#line 16777 .trainerName = _("LEAF"), -#line 16768 +#line 16778 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16769 +#line 16779 .trainerPic = TRAINER_PIC_LEAF, .encounterMusic_gender = -#line 16770 +#line 16780 F_TRAINER_FEMALE | -#line 16771 +#line 16781 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16772 +#line 16782 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16774 +#line 16784 .species = SPECIES_BULBASAUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16776 +#line 16786 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16775 +#line 16785 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16778 +#line 16788 [TRAINER_BRENDAN_PLACEHOLDER] = { -#line 16779 +#line 16789 .trainerName = _("BRENDAN"), -#line 16780 +#line 16790 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16781 +#line 16791 .trainerPic = TRAINER_PIC_RS_BRENDAN, .encounterMusic_gender = -#line 16783 +#line 16793 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16784 +#line 16794 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16786 +#line 16796 .species = SPECIES_GROUDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16788 +#line 16798 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16787 +#line 16797 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16790 +#line 16800 [TRAINER_MAY_PLACEHOLDER] = { -#line 16791 +#line 16801 .trainerName = _("MAY"), -#line 16792 +#line 16802 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16793 +#line 16803 .trainerPic = TRAINER_PIC_RS_MAY, .encounterMusic_gender = -#line 16794 +#line 16804 F_TRAINER_FEMALE | -#line 16795 +#line 16805 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16796 +#line 16806 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16798 +#line 16808 .species = SPECIES_KYOGRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16800 +#line 16810 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16799 +#line 16809 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, diff --git a/src/data/trainers.party b/src/data/trainers.party index 74a981ad1a..c5d2626b3d 100644 --- a/src/data/trainers.party +++ b/src/data/trainers.party @@ -1,3 +1,78 @@ +/* +Trainers and their parties defined with Competetive Syntax. +Compatible with Pokemon Showdown exports. +https://github.com/smogon/pokemon-showdown/blob/master/sim/TEAMS.md + +A trainer specification starts with "=== TRAINER_XXXX ===" +and includes everything until the next line that starts with "===" +or the file ends. +A blank line is required between the trainer and their Pokemon +and between their Pokemon. +TRAINER_XXXX is how the trainer is referred to within code. + +Fields with description and/or example of usage +Required fields for trainers: + - Name + - Pic +Optional (but still recommended) fields for trainers: + - Class (if not specified, PkMn Trainer will be used) + - Gender (Male/Female, affects random gender weights of party if not specified) + - Music + - Items (Some Item / Another Item / Third Item) + (Can also be specified with ITEM_SOME_ITEM) + - Double Battle (Yes/No, defaults to No) + - AI (Ai Flag / Another Flag / Third Flag / ... + see "constants/battle_ai.h" for all flags) + - Mugshot (enable Mugshots during battle transition + set to one of Purple, Green, Pink, Blue or Yellow) + - Starting Status (see include/constants/battle.h for values) + +Pokemon are then specified using the Showdown Export format. +If a field is not specified, it will use it's default value. + +Required fields for Pokemon: + - Species (Either as SPECIES_ABRA or Abra) + This line also specifies Gender, Nickname and Held item. + Alfred (Abra) (M) @ Eviolite + Roberta (SPECIES_ABRA) (F) @ ITEM_CHOICE_SPECS + Both lines are valid. Gender (M) or (F) must use a capital letter. + Nickname length is limited to 10 characters using standard letters. + With narrow font it's increased to 12. Longer strings will be silently shortened. + +Optional fields for Pokemon: + - Level (Number between 1 and 100, defaults to 100) + - Ability (Ability Name or ABILITY_ABILITY_NAME) + - IVs (0 HP / 1 Atk / 2 Def / 3 SpA / 4 SpD / 5 Spe, defaults to all 31) + (Order does not matter) + - EVs (252 HP / 128 Spe / 48 Def, defaults to all 0, is not capped at 512 total) + (Order does not matter) + - Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball + - Happiness (Number between 1 and 255) + - Nature (Rash or NATURE_RASH, defaults to Hardy) + - Shiny (Yes/No, defaults to No) + - Dynamax Level (Number between 0 and 10, default 10, also sets "shouldDynamax" to True) + - Gigantamax (Yes/No, sets to Gigantamax factor) + (doesn't do anything to Pokemon without a Gigantamax form, also sets "shouldDynamax" to True) + - Tera Type (Set to a Type, either Fire or TYPE_FIRE, also sets "shouldTerastal" to True) +Moves are defined with a - (dash) followed by a single space, then the move name. +Either "- Tackle" or "- MOVE_TACKLE" works. One move per line. +Moves have to be the last lines of a Pokemon. +If no moves are specified, the Pokemon will use the last 4 moves it learns +through levelup at its level. + +Default IVs and Level can be changed in the "main" function of tools/trainerproc/main.c + +This file is processed with a custom preprocessor. +*/ + +/* +Comments can be added as C comment blocks +// cannot be used as comments +*/ + +/*Comments can also be on a single line*/ + + === TRAINER_NONE === Name: Class: Pkmn Trainer 1 diff --git a/src/daycare.c b/src/daycare.c index 5d24015f8b..e13f993c3f 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1000,8 +1000,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent { u16 i; u16 species[DAYCARE_MON_COUNT]; - u16 eggSpecies, parentSpecies; - bool8 hasMotherEverstone, hasFatherEverstone; + u16 eggSpecies; for (i = 0; i < DAYCARE_MON_COUNT; i++) { @@ -1018,18 +1017,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent } } - 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); - + eggSpecies = GetEggSpecies(species[parentSlots[0]]); if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) eggSpecies = SPECIES_NIDORAN_M; else if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) diff --git a/src/debug.c b/src/debug.c index 049e2f0ed8..f4b6f68840 100644 --- a/src/debug.c +++ b/src/debug.c @@ -99,6 +99,7 @@ enum UtilDebugMenu DEBUG_UTIL_MENU_ITEM_CHEAT, DEBUG_UTIL_MENU_ITEM_EXPANSION_VER, DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS, + DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS, }; enum GivePCBagDebugMenu @@ -374,6 +375,7 @@ static void DebugAction_Util_Player_Id(u8 taskId); static void DebugAction_Util_CheatStart(u8 taskId); static void DebugAction_Util_ExpansionVersion(u8 taskId); static void DebugAction_Util_BerryFunctions(u8 taskId); +static void DebugAction_Util_CheckEWRAMCounters(u8 taskId); static void DebugAction_OpenPCBagFillMenu(u8 taskId); static void DebugAction_PCBag_Fill_PCBoxes_Fast(u8 taskId); @@ -476,6 +478,7 @@ extern const u8 Debug_CheckSaveBlock[]; extern const u8 Debug_CheckROMSpace[]; extern const u8 Debug_BoxFilledMessage[]; extern const u8 Debug_ShowExpansionVersion[]; +extern const u8 Debug_EventScript_EWRAMCounters[]; extern const u8 Debug_BerryPestsDisabled[]; extern const u8 Debug_BerryWeedsDisabled[]; @@ -532,6 +535,7 @@ static const u8 sDebugText_Util_Player_Id[] = _("New Trainer ID") static const u8 sDebugText_Util_CheatStart[] = _("Cheat start"); static const u8 sDebugText_Util_ExpansionVersion[] = _("Expansion Version"); static const u8 sDebugText_Util_BerryFunctions[] = _("Berry Functions…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_EWRAMCounters[] = _("EWRAM Counters…{CLEAR_TO 110}{RIGHT_ARROW}"); // PC/Bag Menu static const u8 sDebugText_PCBag_Fill[] = _("Fill…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_PCBag_Fill_Pc_Fast[] = _("Fill PC Boxes Fast"); @@ -720,6 +724,7 @@ static const struct ListMenuItem sDebugMenu_Items_Utilities[] = [DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT}, [DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = {sDebugText_Util_ExpansionVersion, DEBUG_UTIL_MENU_ITEM_EXPANSION_VER}, [DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS] = {sDebugText_Util_BerryFunctions, DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS}, + [DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS] = {sDebugText_Util_EWRAMCounters, DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS}, }; static const struct ListMenuItem sDebugMenu_Items_PCBag[] = @@ -889,6 +894,7 @@ static void (*const sDebugMenu_Actions_Utilities[])(u8) = [DEBUG_UTIL_MENU_ITEM_CHEAT] = DebugAction_Util_CheatStart, [DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = DebugAction_Util_ExpansionVersion, [DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS] = DebugAction_Util_BerryFunctions, + [DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS] = DebugAction_Util_CheckEWRAMCounters, }; static void (*const sDebugMenu_Actions_PCBag[])(u8) = @@ -5113,4 +5119,15 @@ static void DebugAction_Party_ClearParty(u8 taskId) Debug_DestroyMenu_Full(taskId); } +void CheckEWRAMCounters(struct ScriptContext *ctx) +{ + ConvertIntToDecimalStringN(gStringVar1, gFollowerSteps, STR_CONV_MODE_LEFT_ALIGN, 5); + ConvertIntToDecimalStringN(gStringVar2, gChainFishingDexNavStreak, STR_CONV_MODE_LEFT_ALIGN, 5); +} + +static void DebugAction_Util_CheckEWRAMCounters(u8 taskId) +{ + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_EWRAMCounters); +} + #endif //DEBUG_OVERWORLD_MENU == TRUE diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 212280d7b8..bba833f888 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1677,6 +1677,12 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven if (OW_GFX_COMPRESS) spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, NULL); + if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) + { + objectEvent->shiny = TRUE; + objectEvent->graphicsId -= SPECIES_SHINY_TAG; + } + spriteId = CreateSprite(spriteTemplate, 0, 0, 0); if (spriteId == MAX_SPRITES) { @@ -2829,6 +2835,8 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F) graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); + if (graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) + graphicsId -= SPECIES_SHINY_TAG; // graphicsId may contain mon form info if (graphicsId > OBJ_EVENT_GFX_SPECIES_MASK) { diff --git a/src/fake_rtc.c b/src/fake_rtc.c new file mode 100644 index 0000000000..f3f3b74c39 --- /dev/null +++ b/src/fake_rtc.c @@ -0,0 +1,104 @@ +#include "global.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "rtc.h" +#include "fake_rtc.h" +#include "event_data.h" + +struct Time *FakeRtc_GetCurrentTime(void) +{ +#if OW_USE_FAKE_RTC + return &gSaveBlock3Ptr->fakeRTC; +#else + return NULL; +#endif +} + +void FakeRtc_GetRawInfo(struct SiiRtcInfo *rtc) +{ + struct Time* time = FakeRtc_GetCurrentTime(); + rtc->second = time->seconds; + rtc->minute = time->minutes; + rtc->hour = time->hours; + rtc->day = time->days; +} + +void FakeRtc_TickTimeForward(void) +{ + if (!OW_USE_FAKE_RTC) + return; + + if (FlagGet(OW_FLAG_PAUSE_TIME)) + return; + + FakeRtc_AdvanceTimeBy(0, 0, FakeRtc_GetSecondsRatio()); +} + +void FakeRtc_AdvanceTimeBy(u32 hours, u32 minutes, u32 seconds) +{ + struct Time* time = FakeRtc_GetCurrentTime(); + seconds += time->seconds; + minutes += time->minutes; + hours += time->hours; + + while(seconds >= SECONDS_PER_MINUTE) + { + minutes++; + seconds -= SECONDS_PER_MINUTE; + } + + while(minutes >= MINUTES_PER_HOUR) + { + hours++; + minutes -= MINUTES_PER_HOUR; + } + + while(hours >= HOURS_PER_DAY) + { + time->days++; + hours -= HOURS_PER_DAY; + } + + time->seconds = seconds; + time->minutes = minutes; + time->hours = hours; +} + +void FakeRtc_ManuallySetTime(u32 hour, u32 minute, u32 second) +{ + struct Time diff, target; + RtcCalcLocalTime(); + + target.hours = hour; + target.minutes = minute; + target.seconds = second; + target.days = gLocalTime.days; + + CalcTimeDifference(&diff, &gLocalTime, &target); + FakeRtc_AdvanceTimeBy(diff.hours, diff.minutes, diff.seconds); +} + +u32 FakeRtc_GetSecondsRatio(void) +{ + return (OW_ALTERED_TIME_RATIO == GEN_8_PLA) ? 60 : + (OW_ALTERED_TIME_RATIO == GEN_9) ? 20 : + 1; +} + +STATIC_ASSERT((OW_FLAG_PAUSE_TIME == 0 || OW_USE_FAKE_RTC == TRUE), FakeRtcMustBeTrueToPauseTime); + +void Script_PauseFakeRtc(void) +{ + FlagSet(OW_FLAG_PAUSE_TIME); +} + +void Script_ResumeFakeRtc(void) +{ + FlagClear(OW_FLAG_PAUSE_TIME); +} + +void Script_ToggleFakeRtc(void) +{ + FlagToggle(OW_FLAG_PAUSE_TIME); +} diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 0a1fcf7e33..42062f08c7 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -69,7 +69,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *, u16); static bool8 TryStartMiscWalkingScripts(u16); static bool8 TryStartStepCountScript(u16); static void UpdateFriendshipStepCounter(void); -static void UpdateLetsGoEvolutionTracker(void); +static void UpdateFollowerStepCounter(void); #if OW_POISON_DAMAGE < GEN_5 static bool8 UpdatePoisonStepCounter(void); #endif // OW_POISON_DAMAGE @@ -597,7 +597,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) IncrementRematchStepCounter(); UpdateFriendshipStepCounter(); UpdateFarawayIslandStepCounter(); - UpdateLetsGoEvolutionTracker(); + UpdateFollowerStepCounter(); if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { @@ -691,26 +691,10 @@ static void UpdateFriendshipStepCounter(void) } } -static void UpdateLetsGoEvolutionTracker(void) +static void UpdateFollowerStepCounter(void) { - u32 i; - u16 count; - struct Pokemon *followingMon = GetFirstLiveMon(); - const struct Evolution *evolutions = GetSpeciesEvolutions(GetMonData(followingMon, MON_DATA_SPECIES)); - - if (evolutions == NULL) - return; - - for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) - { - if (evolutions[i].method != EVO_OVERWORLD_STEPS || SanitizeSpeciesId(evolutions[i].targetSpecies) == SPECIES_NONE) - continue; - - // We only have 10 bits to use - count = min(1023, GetMonData(followingMon, MON_DATA_EVOLUTION_TRACKER) + 1); - SetMonData(followingMon, MON_DATA_EVOLUTION_TRACKER, &count); - return; - } + if (gPlayerPartyCount > 0 && gFollowerSteps < (u16)-1) + gFollowerSteps++; } void ClearPoisonStepCounter(void) @@ -963,6 +947,16 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e return WARP_ID_NONE; } +static bool32 ShouldTriggerScriptRun(const struct CoordEvent *coordEvent) +{ + u16 *varPtr = GetVarPointer(coordEvent->trigger); + // Treat non Vars as flags + if (varPtr == NULL) + return (FlagGet(coordEvent->trigger) == coordEvent->index); + else + return (*varPtr == coordEvent->index); +} + static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent) { if (coordEvent != NULL) @@ -977,7 +971,7 @@ static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent) RunScriptImmediately(coordEvent->script); return NULL; } - if (VarGet(coordEvent->trigger) == (u8)coordEvent->index) + if (ShouldTriggerScriptRun(coordEvent)) return coordEvent->script; } return NULL; diff --git a/src/field_effect.c b/src/field_effect.c index 1bd9ece5aa..898f19c291 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -20,6 +20,7 @@ #include "palette.h" #include "party_menu.h" #include "pokemon.h" +#include "pokemon_storage_system.h" #include "script.h" #include "sound.h" #include "sprite.h" @@ -1015,10 +1016,10 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) bool8 FldEff_PokecenterHeal(void) { - u8 nPokemon; + u32 nPokemon; struct Task *task; - nPokemon = CalculatePlayerPartyCount(); + nPokemon = (OW_IGNORE_EGGS_ON_HEAL <= GEN_3) ? CalculatePlayerPartyCount() : CountPartyNonEggMons(); task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; task->tNumMons = nPokemon; task->tFirstBallX = 93; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 8e7c47b89e..0b9ec8aa24 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -124,24 +124,24 @@ static void Task_StopSurfingInit(u8); static void Task_WaitStopSurfing(u8); static void Task_Fishing(u8); -static u8 Fishing_Init(struct Task *); -static u8 Fishing_GetRodOut(struct Task *); -static u8 Fishing_WaitBeforeDots(struct Task *); -static u8 Fishing_InitDots(struct Task *); -static u8 Fishing_ShowDots(struct Task *); -static u8 Fishing_CheckForBite(struct Task *); -static u8 Fishing_GotBite(struct Task *); -static u8 Fishing_ChangeMinigame(struct Task *); -static u8 Fishing_WaitForA(struct Task *); -static u8 Fishing_APressNoMinigame(struct Task *); -static u8 Fishing_CheckMoreDots(struct Task *); -static u8 Fishing_MonOnHook(struct Task *); -static u8 Fishing_StartEncounter(struct Task *); -static u8 Fishing_NotEvenNibble(struct Task *); -static u8 Fishing_GotAway(struct Task *); -static u8 Fishing_NoMon(struct Task *); -static u8 Fishing_PutRodAway(struct Task *); -static u8 Fishing_EndNoMon(struct Task *); +static bool32 Fishing_Init(struct Task *); +static bool32 Fishing_GetRodOut(struct Task *); +static bool32 Fishing_WaitBeforeDots(struct Task *); +static bool32 Fishing_InitDots(struct Task *); +static bool32 Fishing_ShowDots(struct Task *); +static bool32 Fishing_CheckForBite(struct Task *); +static bool32 Fishing_GotBite(struct Task *); +static bool32 Fishing_ChangeMinigame(struct Task *); +static bool32 Fishing_WaitForA(struct Task *); +static bool32 Fishing_APressNoMinigame(struct Task *); +static bool32 Fishing_CheckMoreDots(struct Task *); +static bool32 Fishing_MonOnHook(struct Task *); +static bool32 Fishing_StartEncounter(struct Task *); +static bool32 Fishing_NotEvenNibble(struct Task *); +static bool32 Fishing_GotAway(struct Task *); +static bool32 Fishing_NoMon(struct Task *); +static bool32 Fishing_PutRodAway(struct Task *); +static bool32 Fishing_EndNoMon(struct Task *); static void AlignFishingAnimationFrames(void); static bool32 DoesFishingMinigameAllowCancel(void); static bool32 Fishing_DoesFirstMonInPartyHaveSuctionCupsOrStickyHold(void); @@ -1725,7 +1725,7 @@ enum FISHING_INIT, FISHING_GET_ROD_OUT, FISHING_WAIT_BEFORE_DOTS, - FISHING_START_ROUND, + FISHING_INIT_DOTS, FISHING_SHOW_DOTS, FISHING_CHECK_FOR_BITE, FISHING_GOT_BITE, @@ -1733,35 +1733,35 @@ enum FISHING_WAIT_FOR_A, FISHING_A_PRESS_NO_MINIGAME, FISHING_CHECK_MORE_DOTS, - FISHING_ON_HOOK, + FISHING_MON_ON_HOOK, FISHING_START_ENCOUNTER, - FISHING_NO_BITE, + FISHING_NOT_EVEN_NIBBLE, FISHING_GOT_AWAY, - FISHING_SHOW_RESULT, + FISHING_NO_MON, FISHING_PUT_ROD_AWAY, FISHING_END_NO_MON, }; -static bool8 (*const sFishingStateFuncs[])(struct Task *) = +static bool32 (*const sFishingStateFuncs[])(struct Task *) = { - Fishing_Init, // FISHING_INIT, - Fishing_GetRodOut, // FISHING_GET_ROD_OUT, - Fishing_WaitBeforeDots, // FISHING_WAIT_BEFORE_DOTS, - Fishing_InitDots, // FISHING_START_ROUND, - Fishing_ShowDots, // FISHING_SHOW_DOTS, - Fishing_CheckForBite, // FISHING_CHECK_FOR_BITE, - Fishing_GotBite, // FISHING_GOT_BITE, - Fishing_ChangeMinigame, // FISHING_CHANGE_MINIGAME, - Fishing_WaitForA, // FISHING_WAIT_FOR_A, - Fishing_APressNoMinigame, // FISHING_A_PRESS_NO_MINIGAME, - Fishing_CheckMoreDots, // FISHING_CHECK_MORE_DOTS, - Fishing_MonOnHook, // FISHING_ON_HOOK, - Fishing_StartEncounter, // FISHING_START_ENCOUNTER, - Fishing_NotEvenNibble, // FISHING_NO_BITE, - Fishing_GotAway, // FISHING_GOT_AWAY, - Fishing_NoMon, // FISHING_SHOW_RESULT, - Fishing_PutRodAway, // FISHING_PUT_ROD_AWAY, - Fishing_EndNoMon, // FISHING_END_NO_MON, + [FISHING_INIT] = Fishing_Init, + [FISHING_GET_ROD_OUT] = Fishing_GetRodOut, + [FISHING_WAIT_BEFORE_DOTS] = Fishing_WaitBeforeDots, + [FISHING_INIT_DOTS] = Fishing_InitDots, + [FISHING_SHOW_DOTS] = Fishing_ShowDots, + [FISHING_CHECK_FOR_BITE] = Fishing_CheckForBite, + [FISHING_GOT_BITE] = Fishing_GotBite, + [FISHING_CHANGE_MINIGAME] = Fishing_ChangeMinigame, + [FISHING_WAIT_FOR_A] = Fishing_WaitForA, + [FISHING_A_PRESS_NO_MINIGAME] = Fishing_APressNoMinigame, + [FISHING_CHECK_MORE_DOTS] = Fishing_CheckMoreDots, + [FISHING_MON_ON_HOOK] = Fishing_MonOnHook, + [FISHING_START_ENCOUNTER] = Fishing_StartEncounter, + [FISHING_NOT_EVEN_NIBBLE] = Fishing_NotEvenNibble, + [FISHING_GOT_AWAY] = Fishing_GotAway, + [FISHING_NO_MON] = Fishing_NoMon, + [FISHING_PUT_ROD_AWAY] = Fishing_PutRodAway, + [FISHING_END_NO_MON] = Fishing_EndNoMon, }; void StartFishing(u8 rod) @@ -1778,15 +1778,15 @@ static void Task_Fishing(u8 taskId) ; } -static bool8 Fishing_Init(struct Task *task) +static bool32 Fishing_Init(struct Task *task) { LockPlayerFieldControls(); gPlayerAvatar.preventStep = TRUE; - task->tStep++; + task->tStep = FISHING_GET_ROD_OUT; return FALSE; } -static bool8 Fishing_GetRodOut(struct Task *task) +static bool32 Fishing_GetRodOut(struct Task *task) { struct ObjectEvent *playerObjEvent; const s16 minRounds1[] = { @@ -1807,27 +1807,27 @@ static bool8 Fishing_GetRodOut(struct Task *task) ObjectEventClearHeldMovementIfActive(playerObjEvent); playerObjEvent->enableAnim = TRUE; SetPlayerAvatarFishing(playerObjEvent->facingDirection); - task->tStep++; + task->tStep = FISHING_WAIT_BEFORE_DOTS; return FALSE; } -static bool8 Fishing_WaitBeforeDots(struct Task *task) +static bool32 Fishing_WaitBeforeDots(struct Task *task) { AlignFishingAnimationFrames(); // Wait one second task->tFrameCounter++; if (task->tFrameCounter >= 60) - task->tStep++; + task->tStep = FISHING_INIT_DOTS; return FALSE; } -static bool8 Fishing_InitDots(struct Task *task) +static bool32 Fishing_InitDots(struct Task *task) { u32 randVal; LoadMessageBoxAndFrameGfx(0, TRUE); - task->tStep++; + task->tStep = FISHING_SHOW_DOTS; task->tFrameCounter = 0; task->tNumDots = 0; randVal = Random(); @@ -1840,7 +1840,7 @@ static bool8 Fishing_InitDots(struct Task *task) return TRUE; } -static bool8 Fishing_ShowDots(struct Task *task) +static bool32 Fishing_ShowDots(struct Task *task) { const u8 dot[] = _("·"); @@ -1851,7 +1851,7 @@ static bool8 Fishing_ShowDots(struct Task *task) if (!DoesFishingMinigameAllowCancel()) return FALSE; - task->tStep = FISHING_NO_BITE; + task->tStep = FISHING_NOT_EVEN_NIBBLE; if (task->tRoundsPlayed != 0) task->tStep = FISHING_GOT_AWAY; return TRUE; @@ -1863,9 +1863,9 @@ static bool8 Fishing_ShowDots(struct Task *task) task->tFrameCounter = 0; if (task->tNumDots >= task->tDotsRequired) { - task->tStep++; + task->tStep = FISHING_CHECK_FOR_BITE; if (task->tRoundsPlayed != 0) - task->tStep++; + task->tStep = FISHING_GOT_BITE; task->tRoundsPlayed++; } else @@ -1878,17 +1878,17 @@ static bool8 Fishing_ShowDots(struct Task *task) } } -static bool8 Fishing_CheckForBite(struct Task *task) +static bool32 Fishing_CheckForBite(struct Task *task) { bool32 bite, firstMonHasSuctionOrSticky; AlignFishingAnimationFrames(); - task->tStep++; + task->tStep = FISHING_GOT_BITE; bite = FALSE; if (!DoesCurrentMapHaveFishingMons()) { - task->tStep = FISHING_NO_BITE; + task->tStep = FISHING_NOT_EVEN_NIBBLE; return TRUE; } @@ -1901,7 +1901,7 @@ static bool8 Fishing_CheckForBite(struct Task *task) bite = Fishing_RollForBite(FALSE); if (!bite) - task->tStep = FISHING_NO_BITE; + task->tStep = FISHING_NOT_EVEN_NIBBLE; if (bite) StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection())); @@ -1909,16 +1909,16 @@ static bool8 Fishing_CheckForBite(struct Task *task) return TRUE; } -static bool8 Fishing_GotBite(struct Task *task) +static bool32 Fishing_GotBite(struct Task *task) { AlignFishingAnimationFrames(); AddTextPrinterParameterized(0, FONT_NORMAL, gText_OhABite, 0, 17, 0, NULL); - task->tStep++; + task->tStep = FISHING_CHANGE_MINIGAME; task->tFrameCounter = 0; return FALSE; } -static u8 Fishing_ChangeMinigame(struct Task *task) +static bool32 Fishing_ChangeMinigame(struct Task *task) { switch (I_FISHING_MINIGAME) { @@ -1935,7 +1935,7 @@ static u8 Fishing_ChangeMinigame(struct Task *task) } // We have a bite. Now, wait for the player to press A, or the timer to expire. -static bool8 Fishing_WaitForA(struct Task *task) +static bool32 Fishing_WaitForA(struct Task *task) { const s16 reelTimeouts[3] = { [OLD_ROD] = 36, @@ -1948,20 +1948,20 @@ static bool8 Fishing_WaitForA(struct Task *task) if (task->tFrameCounter >= reelTimeouts[task->tFishingRod]) task->tStep = FISHING_GOT_AWAY; else if (JOY_NEW(A_BUTTON)) - task->tStep++; + task->tStep = FISHING_CHECK_MORE_DOTS; return FALSE; } -static bool8 Fishing_APressNoMinigame(struct Task *task) +static bool32 Fishing_APressNoMinigame(struct Task *task) { AlignFishingAnimationFrames(); if (JOY_NEW(A_BUTTON)) - task->tStep = FISHING_ON_HOOK; + task->tStep = FISHING_MON_ON_HOOK; return FALSE; } // Determine if we're going to play the dot game again -static bool8 Fishing_CheckMoreDots(struct Task *task) +static bool32 Fishing_CheckMoreDots(struct Task *task) { const s16 moreDotsChance[][2] = { @@ -1971,10 +1971,10 @@ static bool8 Fishing_CheckMoreDots(struct Task *task) }; AlignFishingAnimationFrames(); - task->tStep++; + task->tStep = FISHING_MON_ON_HOOK; if (task->tRoundsPlayed < task->tMinRoundsRequired) { - task->tStep = FISHING_START_ROUND; + task->tStep = FISHING_INIT_DOTS; } else if (task->tRoundsPlayed < 2) { @@ -1982,22 +1982,22 @@ static bool8 Fishing_CheckMoreDots(struct Task *task) s16 probability = Random() % 100; if (moreDotsChance[task->tFishingRod][task->tRoundsPlayed] > probability) - task->tStep = FISHING_START_ROUND; + task->tStep = FISHING_INIT_DOTS; } return FALSE; } -static bool8 Fishing_MonOnHook(struct Task *task) +static bool32 Fishing_MonOnHook(struct Task *task) { AlignFishingAnimationFrames(); FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); - task->tStep++; + task->tStep = FISHING_START_ENCOUNTER; task->tFrameCounter = 0; return FALSE; } -static bool8 Fishing_StartEncounter(struct Task *task) +static bool32 Fishing_StartEncounter(struct Task *task) { if (task->tFrameCounter == 0) AlignFishingAnimationFrames(); @@ -2033,36 +2033,36 @@ static bool8 Fishing_StartEncounter(struct Task *task) return FALSE; } -static bool8 Fishing_NotEvenNibble(struct Task *task) +static bool32 Fishing_NotEvenNibble(struct Task *task) { - ResetChainFishingDexNavStreak(); + gChainFishingDexNavStreak = 0; AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); - task->tStep = FISHING_SHOW_RESULT; + task->tStep = FISHING_NO_MON; return TRUE; } -static bool8 Fishing_GotAway(struct Task *task) +static bool32 Fishing_GotAway(struct Task *task) { - ResetChainFishingDexNavStreak(); + gChainFishingDexNavStreak = 0; AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); - task->tStep++; + task->tStep = FISHING_NO_MON; return TRUE; } -static bool8 Fishing_NoMon(struct Task *task) +static bool32 Fishing_NoMon(struct Task *task) { AlignFishingAnimationFrames(); - task->tStep++; + task->tStep = FISHING_PUT_ROD_AWAY; return FALSE; } -static bool8 Fishing_PutRodAway(struct Task *task) +static bool32 Fishing_PutRodAway(struct Task *task) { AlignFishingAnimationFrames(); if (gSprites[gPlayerAvatar.spriteId].animEnded) @@ -2075,12 +2075,12 @@ static bool8 Fishing_PutRodAway(struct Task *task) SetSurfBlob_PlayerOffset(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, FALSE, 0); gSprites[gPlayerAvatar.spriteId].x2 = 0; gSprites[gPlayerAvatar.spriteId].y2 = 0; - task->tStep++; + task->tStep = FISHING_END_NO_MON; } return FALSE; } -static bool8 Fishing_EndNoMon(struct Task *task) +static bool32 Fishing_EndNoMon(struct Task *task) { RunTextPrinters(); if (!IsTextPrinterActive(0)) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9338fe183d..e39a0c6c1f 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -7,11 +7,13 @@ #include "field_effect.h" #include "event_object_lock.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "field_player_avatar.h" #include "field_screen_effect.h" #include "field_special_scene.h" #include "field_weather.h" #include "gpu_regs.h" +#include "heal_location.h" #include "io_reg.h" #include "link.h" #include "link_rfu.h" @@ -26,10 +28,13 @@ #include "script.h" #include "sound.h" #include "start_menu.h" +#include "strings.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" +#include "constants/heal_locations.h" #include "constants/songs.h" #include "constants/rgb.h" #include "trainer_hill.h" @@ -1274,3 +1279,112 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId) ScriptContext_Enable(); } } + +static const struct WindowTemplate sWindowTemplate_WhiteoutText = +{ + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 30, + .height = 11, + .paletteNum = 15, + .baseBlock = 1, +}; + +static const u8 sWhiteoutTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; + +#define tState data[0] +#define tWindowId data[1] +#define tPrintState data[2] +#define tIsPlayerHouse data[3] + +static bool32 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u32 x, u32 y) +{ + u32 windowId = gTasks[taskId].tWindowId; + + switch (gTasks[taskId].tPrintState) + { + case 0: + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + StringExpandPlaceholders(gStringVar4, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); + gTextFlags.canABSpeedUpPrint = FALSE; + gTasks[taskId].tPrintState = 1; + break; + case 1: + RunTextPrinters(); + if (!IsTextPrinterActive(windowId)) + { + gTasks[taskId].tPrintState = 0; + return TRUE; + } + break; + } + return FALSE; +} + +enum { + FRLG_WHITEOUT_ENTER_MSG_SCREEN, + FRLG_WHITEOUT_PRINT_MSG, + FRLG_WHITEOUT_LEAVE_MSG_SCREEN, + FRLG_WHITEOUT_HEAL_SCRIPT, +}; + +static void Task_RushInjuredPokemonToCenter(u8 taskId) +{ + u32 windowId; + + switch (gTasks[taskId].tState) + { + case FRLG_WHITEOUT_ENTER_MSG_SCREEN: + windowId = AddWindow(&sWindowTemplate_WhiteoutText); + gTasks[taskId].tWindowId = windowId; + Menu_LoadStdPalAt(BG_PLTT_ID(15)); + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, COPYWIN_FULL); + + gTasks[taskId].tIsPlayerHouse = IsLastHealLocationPlayerHouse(); + gTasks[taskId].tState = FRLG_WHITEOUT_PRINT_MSG; + break; + case FRLG_WHITEOUT_PRINT_MSG: + { + const u8 *recoveryMessage = gTasks[taskId].tIsPlayerHouse == TRUE ? gText_PlayerScurriedBackHome : gText_PlayerScurriedToCenter; + if (PrintWhiteOutRecoveryMessage(taskId, recoveryMessage, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_NORTH); + gTasks[taskId].tState = FRLG_WHITEOUT_LEAVE_MSG_SCREEN; + } + break; + } + case FRLG_WHITEOUT_LEAVE_MSG_SCREEN: + windowId = gTasks[taskId].tWindowId; + ClearWindowTilemap(windowId); + CopyWindowToVram(windowId, COPYWIN_MAP); + RemoveWindow(windowId); + FillPalBufferBlack(); + FadeInFromBlack(); + gTasks[taskId].tState = FRLG_WHITEOUT_HEAL_SCRIPT; + break; + case FRLG_WHITEOUT_HEAL_SCRIPT: + if (WaitForWeatherFadeIn() == TRUE) + { + DestroyTask(taskId); + if (gTasks[taskId].tIsPlayerHouse) + ScriptContext_SetupScript(EventScript_AfterWhiteOutMomHeal); + else + ScriptContext_SetupScript(EventScript_AfterWhiteOutHeal); + } + break; + } +} + +void FieldCB_RushInjuredPokemonToCenter(void) +{ + u8 taskId; + + LockPlayerFieldControls(); + FillPalBufferBlack(); + taskId = CreateTask(Task_RushInjuredPokemonToCenter, 10); + gTasks[taskId].tState = FRLG_WHITEOUT_ENTER_MSG_SCREEN; +} diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 3b9d8f9f9e..cf31e862c3 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -771,7 +771,7 @@ void Snow_InitVars(void) gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->targetColorMapIndex = 0; gWeatherPtr->colorMapStepDelay = 20; - gWeatherPtr->targetSnowflakeSpriteCount = 16; + gWeatherPtr->targetSnowflakeSpriteCount = NUM_SNOWFLAKE_SPRITES; gWeatherPtr->snowflakeVisibleCounter = 0; } diff --git a/src/fieldmap.c b/src/fieldmap.c index 28c9602688..30daae49ca 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -67,7 +67,6 @@ const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnect void InitMap(void) { - ResetChainFishingDexNavStreak(); InitMapLayoutData(&gMapHeader); SetOccupiedSecretBaseEntranceMetatiles(gMapHeader.events); RunOnLoadMapScript(); diff --git a/src/graphics.c b/src/graphics.c index 58c629fbc9..c35cec3467 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -465,6 +465,12 @@ const u32 gBattleAnimSpriteGfx_SyrupSplat[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpritePal_SyrupRed[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_red.gbapal.lz"); const u32 gBattleAnimSpritePal_SyrupYellow[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_yellow.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_IvyCudgel[] = INCBIN_U32("graphics/battle_anims/sprites/cudgel.4bpp.lz"); +const u32 gBattleAnimSpritePal_IvyCudgelGrass[] = INCBIN_U32("graphics/pokemon/ogerpon/normal.gbapal.lz"); +const u32 gBattleAnimSpritePal_IvyCudgelFire[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/normal.gbapal.lz"); +const u32 gBattleAnimSpritePal_IvyCudgelRock[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/normal.gbapal.lz"); +const u32 gBattleAnimSpritePal_IvyCudgelWater[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/normal.gbapal.lz"); + // old battle interface data, unused const u32 gOldBattleInterfaceGfx[] = INCBIN_U32("graphics/unused/obi1.4bpp.lz"); diff --git a/src/heal_location.c b/src/heal_location.c index 0ab5540346..7193ea338e 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -1,8 +1,11 @@ #include "global.h" +#include "event_data.h" #include "heal_location.h" #include "constants/heal_locations.h" +#include "constants/maps.h" #include "data/heal_locations.h" +#include "data/heal_locations_pkm_center.h" u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) { @@ -26,6 +29,20 @@ const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum) return &sHealLocations[index - 1]; } +u32 GetHealLocationIndexByWarpData(struct WarpData *warp) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sHealLocations); i++) + { + if (sHealLocations[i].group == warp->mapGroup + && sHealLocations[i].map == warp->mapNum + && sHealLocations[i].x == warp->x + && sHealLocations[i].y == warp->y) + return i + 1; + } + return HEAL_LOCATION_NONE; +} + const struct HealLocation *GetHealLocation(u32 index) { if (index == HEAL_LOCATION_NONE) @@ -35,3 +52,55 @@ const struct HealLocation *GetHealLocation(u32 index) else return &sHealLocations[index - 1]; } + +static bool32 IsLastHealLocation(u32 healLocation) +{ + const struct HealLocation *loc = GetHealLocation(healLocation); + const struct WarpData *warpData = &gSaveBlock1Ptr->lastHealLocation; + + return warpData->mapGroup == loc->group + && warpData->mapNum == loc->map + && warpData->warpId == WARP_ID_NONE + && warpData->x == loc->x + && warpData->y == loc->y; +} + +bool32 IsLastHealLocationPlayerHouse() +{ + if (IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F)) + return TRUE; + + return FALSE; +} + +u32 GetHealNpcLocalId(u32 healLocationId) +{ + if (healLocationId == HEAL_LOCATION_NONE || healLocationId >= HEAL_LOCATION_COUNT) + return 0; + + return sHealNpcLocalId[healLocationId - 1]; +} + +void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData *warp) +{ + u32 healLocationId = GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation); + u32 healNpcLocalId = GetHealNpcLocalId(healLocationId); + struct HealLocation pkmCenterHealLocation; + + if (!healNpcLocalId) + { + *(warp) = gSaveBlock1Ptr->lastHealLocation; + return; + } + + pkmCenterHealLocation = sHealLocationsPokemonCenter[healLocationId - 1]; + warp->mapGroup = pkmCenterHealLocation.group; + warp->mapNum = pkmCenterHealLocation.map; + warp->warpId = WARP_ID_NONE; + warp->x = pkmCenterHealLocation.x; + warp->y = pkmCenterHealLocation.y; + gSpecialVar_LastTalked = healNpcLocalId; +} diff --git a/src/item.c b/src/item.c index 205719fb53..6c3742fd76 100644 --- a/src/item.c +++ b/src/item.c @@ -164,6 +164,18 @@ bool8 HasAtLeastOneBerry(void) return FALSE; } +bool8 HasAtLeastOnePokeBall(void) +{ + u16 i; + + for (i = FIRST_BALL; i <= LAST_BALL; i++) + { + if (CheckBagHasItem(i, 1) == TRUE) + return TRUE; + } + return FALSE; +} + bool8 CheckBagHasSpace(u16 itemId, u16 count) { if (ItemId_GetPocket(itemId) == POCKET_NONE) diff --git a/src/item_menu.c b/src/item_menu.c index ad9fc6f4bc..d885f0a8ec 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1225,7 +1225,7 @@ static void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, 0); - PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0); + PrintMoneyAmount(windowId, CalculateMoneyTextHorizontalPosition(moneyEarned), 1, moneyEarned, 0); } static void Task_BagMenu_HandleInput(u8 taskId) @@ -2129,7 +2129,7 @@ static void DisplaySellItemPriceAndConfirm(u8 taskId) { s16 *data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems); } @@ -2189,7 +2189,7 @@ static void ConfirmSell(u8 taskId) s16 *data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar2); - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem); } diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c index e7a5862f07..5acb9d3a40 100644 --- a/src/lilycove_lady.c +++ b/src/lilycove_lady.c @@ -49,7 +49,7 @@ void SetLilycoveLadyGfx(void) if (GetLilycoveLadyId() == LILYCOVE_LADY_CONTEST) { lilycoveLady = &gSaveBlock1Ptr->lilycoveLady; - VarSet(VAR_OBJ_GFX_ID_1, sContestLadyMonGfxId[lilycoveLady->contest.category]); + VarSet(VAR_OBJ_GFX_ID_1, sContestLadyValues[lilycoveLady->contest.category].monGfxId); gSpecialVar_Result = TRUE; } else @@ -396,7 +396,7 @@ static u8 BufferQuizAuthorName(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; if (sQuizLadyPtr->playerName[0] == EOS) { - StringCopy_PlayerName(gStringVar1, gText_QuizLady_Lady); + StringCopy_PlayerName(gStringVar1, COMPOUND_STRING("Lady")); authorNameId = QUIZ_AUTHOR_NAME_LADY; } else @@ -695,15 +695,15 @@ bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock) static void BufferContestLadyCategoryAndMonName(u8 *category, u8 *nickname) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; - StringCopy(category, sContestLadyCategoryNames[sContestLadyPtr->category]); - StringCopy_Nickname(nickname, sContestLadyMonNames[sContestLadyPtr->category]); + StringCopy(category, sContestLadyValues[sContestLadyPtr->category].categoryName); + StringCopy_Nickname(nickname, sContestLadyValues[sContestLadyPtr->category].monName); } void BufferContestLadyMonName(u8 *category, u8 *nickname) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; *category = sContestLadyPtr->category; - StringCopy(nickname, sContestLadyMonNames[sContestLadyPtr->category]); + StringCopy(nickname, sContestLadyValues[sContestLadyPtr->category].monName); } void BufferContestLadyPlayerName(u8 *dest) @@ -720,7 +720,7 @@ void BufferContestLadyLanguage(u8 *dest) void BufferContestName(u8 *dest, u8 category) { - StringCopy(dest, sContestNames[category]); + StringCopy(dest, sContestLadyValues[category].contestName); } // Used by the Contest Lady's TV show to determine how well she performed @@ -775,7 +775,7 @@ void SetContestLadyGivenPokeblock(void) void GetContestLadyMonSpecies(void) { sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; - gSpecialVar_0x8005 = sContestLadyMonSpecies[sContestLadyPtr->category]; + gSpecialVar_0x8005 = sContestLadyValues[sContestLadyPtr->category].monSpecies; } u8 GetContestLadyCategory(void) diff --git a/src/money.c b/src/money.c index 321f882ff6..0a5129c934 100644 --- a/src/money.c +++ b/src/money.c @@ -9,6 +9,7 @@ #include "sprite.h" #include "strings.h" #include "decompress.h" +#include "tv.h" EWRAM_DATA static u8 sMoneyBoxWindowId = 0; EWRAM_DATA static u8 sMoneyLabelSpriteId = 0; @@ -130,23 +131,33 @@ void SubtractMoneyFromVar0x8005(void) void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed) { - PrintMoneyAmount(windowId, 38, 1, amount, speed); + PrintMoneyAmount(windowId, CalculateMoneyTextHorizontalPosition(amount), 1, amount, speed); +} + +static u32 CalculateLeadingSpacesForMoney(u32 numDigits) +{ + u32 leadingSpaces = CountDigits(INT_MAX) - StringLength(gStringVar1); + return (numDigits > 8) ? leadingSpaces : leadingSpaces - 2; } void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) { - u8 *txtPtr; - s32 strLength; + u8 *txtPtr = gStringVar4; + u32 numDigits = CountDigits(amount); + u32 maxDigits = (numDigits > 6) ? MAX_MONEY_DIGITS: 6; + u32 leadingSpaces; - ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, maxDigits); - strLength = 6 - StringLength(gStringVar1); - txtPtr = gStringVar4; + leadingSpaces = CalculateLeadingSpacesForMoney(numDigits); - while (strLength-- > 0) + while (leadingSpaces-- > 0) *(txtPtr++) = CHAR_SPACER; StringExpandPlaceholders(txtPtr, gText_PokedollarVar1); + + if (numDigits > 8) + PrependFontIdToFit(gStringVar4, txtPtr + 1 + numDigits, FONT_NORMAL, 54); AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, speed, NULL); } @@ -161,6 +172,11 @@ void ChangeAmountInMoneyBox(int amount) PrintMoneyAmountInMoneyBox(sMoneyBoxWindowId, amount, 0); } +u32 CalculateMoneyTextHorizontalPosition(u32 amount) +{ + return (CountDigits(amount) > 8) ? 34 : 26; +} + void DrawMoneyBox(int amount, u8 x, u8 y) { struct WindowTemplate template; diff --git a/src/naming_screen.c b/src/naming_screen.c index cd6105dce9..118d91cfb4 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1436,6 +1436,7 @@ static void NamingScreen_CreateWaldaDadIcon(void) //-------------------------------------------------- static bool8 KeyboardKeyHandler_Character(u8); +static void SwapKeyboardToLowerAfterFirstCapitalLetter(void); static bool8 KeyboardKeyHandler_Page(u8); static bool8 KeyboardKeyHandler_Backspace(u8); static bool8 KeyboardKeyHandler_OK(u8); @@ -1480,6 +1481,8 @@ static bool8 KeyboardKeyHandler_Character(u8 input) { bool8 textFull = AddTextCharacter(); + SwapKeyboardToLowerAfterFirstCapitalLetter(); + SquishCursor(); if (textFull) { @@ -1490,6 +1493,20 @@ static bool8 KeyboardKeyHandler_Character(u8 input) return FALSE; } +static void SwapKeyboardToLowerAfterFirstCapitalLetter(void) +{ + if (AUTO_LOWERCASE_KEYBOARD < GEN_6) + return; + + if (sNamingScreen->currentPage != KBPAGE_LETTERS_UPPER) + return; + + if (GetTextEntryPosition() != 1) + return; + + MainState_StartPageSwap(); +} + static bool8 KeyboardKeyHandler_Page(u8 input) { TryStartButtonFlash(BUTTON_PAGE, TRUE, FALSE); diff --git a/src/overworld.c b/src/overworld.c index ca5a268a82..babdfad7b6 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -689,9 +689,19 @@ void SetWarpDestinationToHealLocation(u8 healLocationId) SetWarpDestination(healLocation->group, healLocation->map, WARP_ID_NONE, healLocation->x, healLocation->y); } +static bool32 IsFRLGWhiteout(void) +{ + if (!OW_FRLG_WHITEOUT) + return FALSE; + return GetHealNpcLocalId(GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation)) > 0; +} + void SetWarpDestinationToLastHealLocation(void) { - sWarpDestination = gSaveBlock1Ptr->lastHealLocation; + if (IsFRLGWhiteout()) + SetWhiteoutRespawnWarpAndHealerNPC(&sWarpDestination); + else + sWarpDestination = gSaveBlock1Ptr->lastHealLocation; } void SetLastHealLocationWarp(u8 healLocationId) @@ -907,6 +917,7 @@ if (I_VS_SEEKER_CHARGING != 0) RunOnTransitionMapScript(); UpdateLocationHistoryForRoamer(); MoveAllRoamersToOtherLocationSets(); + gChainFishingDexNavStreak = 0; if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) InitBattlePyramidMap(FALSE); else if (InTrainerHill()) @@ -1610,7 +1621,10 @@ void CB2_WhiteOut(void) ResetInitialPlayerAvatarState(); ScriptContext_Init(); UnlockPlayerFieldControls(); - gFieldCallback = FieldCB_WarpExitFadeFromBlack; + if (IsFRLGWhiteout()) + gFieldCallback = FieldCB_RushInjuredPokemonToCenter; + else + gFieldCallback = FieldCB_WarpExitFadeFromBlack; state = 0; DoMapLoadLoop(&state); SetFieldVBlankCallback(); diff --git a/src/party_menu.c b/src/party_menu.c index 2b80361141..5214ddc2be 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -2987,6 +2987,9 @@ static void CB2_ReturnToPartyMenuFromSummaryScreen(void) static void CursorCb_Switch(u8 taskId) { + // Reset follower steps when the party leader is changed + if (gPartyMenu.slotId == 0 || gPartyMenu.slotId2 == 0) + gFollowerSteps = 0; PlaySE(SE_SELECT); gPartyMenu.action = PARTY_ACTION_SWITCH; PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); @@ -4016,7 +4019,7 @@ bool8 FieldCallback_PrepareFadeInFromMenu(void) // Same as above, but removes follower pokemon bool8 FieldCallback_PrepareFadeInForTeleport(void) -{ +{ RemoveFollowingPokemon(); return FieldCallback_PrepareFadeInFromMenu(); } @@ -6361,6 +6364,7 @@ static void Task_TryItemUseFormChange(u8 taskId) case 0: targetSpecies = gTasks[taskId].tTargetSpecies; SetMonData(mon, MON_DATA_SPECIES, &targetSpecies); + TrySetDayLimitToFormChange(mon); CalculateMonStats(mon); gTasks[taskId].tState++; break; @@ -7761,6 +7765,6 @@ void IsLastMonThatKnowsSurf(void) } } if (AnyStorageMonWithMove(move) != TRUE) - gSpecialVar_Result = TRUE; + gSpecialVar_Result = !P_CAN_FORGET_HIDDEN_MOVE; } } diff --git a/src/play_time.c b/src/play_time.c index 97f4ac22f9..197b1fbac9 100644 --- a/src/play_time.c +++ b/src/play_time.c @@ -1,5 +1,6 @@ #include "global.h" #include "play_time.h" +#include "fake_rtc.h" enum { @@ -45,6 +46,7 @@ void PlayTimeCounter_Update(void) gSaveBlock2Ptr->playTimeVBlanks = 0; gSaveBlock2Ptr->playTimeSeconds++; + FakeRtc_TickTimeForward(); if (gSaveBlock2Ptr->playTimeSeconds < 60) return; diff --git a/src/pokeball.c b/src/pokeball.c index f15d7663c7..914455af5a 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -16,8 +16,11 @@ #include "constants/songs.h" static void Task_DoPokeballSendOutAnim(u8 taskId); -static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite); -static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite); +static inline void DoPokeballSendOutSoundEffect(u32 battler); +static inline void *GetOpponentMonSendOutCallback(void); +static inline bool32 IsBattlerPlayer(u32 battler); +static void SpriteCB_MonSendOut_1(struct Sprite *sprite); +static void SpriteCB_MonSendOut_2(struct Sprite *sprite); static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite); static void SpriteCB_BallThrow(struct Sprite *sprite); static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite); @@ -548,6 +551,8 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) { u32 throwCaseId, ballId, battlerId, ballSpriteId; bool32 notSendOut = FALSE; + u32 throwXoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? 24 : 0; + s32 throwYoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? -16 : 24; if (gTasks[taskId].tFrames == 0) { @@ -575,14 +580,16 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) gBattlerTarget = battlerId; gSprites[ballSpriteId].x = 24; gSprites[ballSpriteId].y = 68; - gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; + gSprites[ballSpriteId].callback = SpriteCB_MonSendOut_1; + DoPokeballSendOutSoundEffect(battlerId); break; case POKEBALL_OPPONENT_SENDOUT: - gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X); - gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 24; + gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X) + throwXoffset; + gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + throwYoffset; gBattlerTarget = battlerId; gSprites[ballSpriteId].data[0] = 0; - gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut; + gSprites[ballSpriteId].callback = GetOpponentMonSendOutCallback(); + DoPokeballSendOutSoundEffect(battlerId); break; default: gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); @@ -609,6 +616,22 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) PlaySE(SE_BALL_THROW); } +static inline void DoPokeballSendOutSoundEffect(u32 battler) +{ + if (IsBattlerPlayer(battler) && B_PLAYER_THROW_BALLS_SOUND < GEN_5) + return; + + if (!IsBattlerPlayer(battler) && B_ENEMY_THROW_BALLS_SOUND < GEN_5) + return; + + PlaySE(SE_BALL_THROW); +} + +static inline void *GetOpponentMonSendOutCallback(void) +{ + return (B_ENEMY_THROW_BALLS >= GEN_6) ? SpriteCB_MonSendOut_1 : SpriteCB_OpponentMonSendOut; +} + // This sequence of functions is very similar to those that get run when // a Pokéball gets thrown at a wild Pokémon, starting at SpriteCB_Ball_Arc. // These do not seem to get run. @@ -1110,23 +1133,33 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite) } } -static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) +static inline bool32 IsBattlerPlayer(u32 battler) { + return (battler % B_POSITION_PLAYER_RIGHT) ? FALSE : TRUE; +} + +static void SpriteCB_MonSendOut_1(struct Sprite *sprite) +{ + bool32 isPlayer = IsBattlerPlayer(sprite->sBattler); + u32 coordX = (isPlayer) ? BATTLER_COORD_X_2 : BATTLER_COORD_X; + u32 coordY = (isPlayer) ? BATTLER_COORD_Y_PIC_OFFSET : BATTLER_COORD_Y; + sprite->data[0] = 25; - sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, coordX); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, coordY) + 24; sprite->data[5] = -30; sprite->oam.affineParam = sprite->sBattler; InitAnimArcTranslation(sprite); - sprite->callback = SpriteCB_PlayerMonSendOut_2; + sprite->callback = SpriteCB_MonSendOut_2; } #define HIBYTE(x) (((x) >> 8) & 0xFF) -static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) +static void SpriteCB_MonSendOut_2(struct Sprite *sprite) { u32 r6; u32 r7; + bool32 rightPosition = (IsBattlerPlayer(sprite->sBattler)) ? B_POSITION_PLAYER_RIGHT : B_POSITION_OPPONENT_RIGHT; if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80) { @@ -1169,7 +1202,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) sprite->data[0] = 0; if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive - && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) + && sprite->sBattler == GetBattlerAtPosition(rightPosition)) sprite->callback = SpriteCB_ReleaseMon2FromBall; else sprite->callback = SpriteCB_ReleaseMonFromBall; diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 3788ea4c44..fa5279441b 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -249,7 +249,7 @@ static const u8 sText_EVO_USE_MOVE_TWENTY_TIMES[] = _("{LV}{UP_ARROW} after 20x static const u8 sText_EVO_RECOIL_DAMAGE_MALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, male"); static const u8 sText_EVO_RECOIL_DAMAGE_FEMALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, female"); static const u8 sText_EVO_ITEM_COUNT_999[] = _("{LV}{UP_ARROW} with 999 {STR_VAR_2} in bag"); -static const u8 sText_EVO_DEFEAT_WITH_ITEM[] = _("{LV}{UP_ARROW} defeating {STR_VAR_3} holding {STR_VAR_2}"); +static const u8 sText_EVO_DEFEAT_THREE_WITH_ITEM[] = _("{LV}{UP_ARROW} defeating 3 {STR_VAR_3} holding {STR_VAR_2}"); static const u8 sText_EVO_OVERWORLD_STEPS[] = _("{LV}{UP_ARROW} after {STR_VAR_2} steps"); static const u8 sText_EVO_UNKNOWN[] = _("Method unknown"); static const u8 sText_EVO_NONE[] = _("{STR_VAR_1} has no evolution."); @@ -6629,11 +6629,11 @@ static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 dept CopyItemName(item, gStringVar2); StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_COUNT_999); break; - case EVO_DEFEAT_WITH_ITEM: + case EVO_DEFEAT_THREE_WITH_ITEM: item = evolutions[i].param; CopyItemName(item, gStringVar2); StringCopy(gStringVar3, GetSpeciesName(species)); - StringExpandPlaceholders(gStringVar4, sText_EVO_DEFEAT_WITH_ITEM); + StringExpandPlaceholders(gStringVar4, sText_EVO_DEFEAT_THREE_WITH_ITEM); break; case EVO_OVERWORLD_STEPS: ConvertIntToDecimalStringN(gStringVar2, evolutions[i].param, STR_CONV_MODE_LEADING_ZEROS, 4); diff --git a/src/pokemon.c b/src/pokemon.c index 8c6a5fcce6..2b731ef13c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -85,6 +85,7 @@ EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; EWRAM_DATA static struct MonSpritesGfxManager *sMonSpritesGfxManagers[MON_SPR_GFX_MANAGERS_COUNT] = {NULL}; EWRAM_DATA static u8 sTriedEvolving = 0; +EWRAM_DATA u16 gFollowerSteps = 0; #include "data/moves_info.h" #include "data/abilities.h" @@ -1143,6 +1144,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, { isShiny = TRUE; } + else if (P_ONLY_OBTAINABLE_SHINIES && InBattlePyramid()) + { + isShiny = FALSE; + } + else if (P_NO_SHINIES_WITHOUT_POKEBALLS && !HasAtLeastOnePokeBall()) + { + isShiny = FALSE; + } else { u32 totalRerolls = 0; @@ -1150,7 +1159,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, totalRerolls += I_SHINY_CHARM_ADDITIONAL_ROLLS; if (LURE_STEP_COUNT != 0) totalRerolls += 1; - if (IsCurrentEncounterFishing()) + if (I_FISHING_CHAIN && gIsFishingEncounter) totalRerolls += CalculateChainFishingShinyRolls(); while (GET_SHINY_VALUE(value, personality) >= SHINY_ODDS && totalRerolls > 0) @@ -1197,7 +1206,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, else { u32 iv; - value = Random(); + u32 ivRandom = Random32(); + value = (u16)ivRandom; iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); @@ -1206,7 +1216,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); - value = Random(); + value = (u16)(ivRandom >> 16); iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); @@ -2856,6 +2866,9 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal = nature ^ boxMon->hiddenNatureModifier; break; } + case MON_DATA_DAYS_SINCE_FORM_CHANGE: + retVal = boxMon->daysSinceFormChange; + break; default: break; } @@ -3290,6 +3303,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) boxMon->hiddenNatureModifier = nature ^ hiddenNature; break; } + case MON_DATA_DAYS_SINCE_FORM_CHANGE: + SET8(boxMon->daysSinceFormChange); + break; } } @@ -3392,6 +3408,9 @@ u8 GetMonsStateToDoubles(void) s32 i; CalculatePlayerPartyCount(); + if (OW_DOUBLE_APPROACH_WITH_ONE_MON) + return PLAYER_HAS_TWO_USABLE_MONS; + if (gPlayerPartyCount == 1) return gPlayerPartyCount; // PLAYER_HAS_ONE_MON @@ -4686,12 +4705,12 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s if (evolutionTracker >= evolutions[i].param && GetMonGender(mon) == MON_FEMALE) targetSpecies = evolutions[i].targetSpecies; break; - case EVO_DEFEAT_WITH_ITEM: + case EVO_DEFEAT_THREE_WITH_ITEM: if (evolutionTracker >= 3) targetSpecies = evolutions[i].targetSpecies; break; case EVO_OVERWORLD_STEPS: - if (evolutionTracker >= evolutions[i].param) + if (mon == GetFirstLiveMon() && gFollowerSteps >= evolutions[i].param) targetSpecies = evolutions[i].targetSpecies; break; } @@ -5822,6 +5841,10 @@ const u32 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFema bool8 IsMoveHM(u16 move) { int i = 0; + + if (P_CAN_FORGET_HIDDEN_MOVE) + return FALSE; + while (sHMMoves[i] != HM_MOVES_END) { if (sHMMoves[i++] == move) @@ -6523,6 +6546,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 break; case FORM_CHANGE_WITHDRAW: case FORM_CHANGE_FAINT: + case FORM_CHANGE_DAYS_PASSED: targetSpecies = formChanges[i].targetSpecies; break; case FORM_CHANGE_STATUS: @@ -6550,6 +6574,22 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 return targetSpecies; } +void TrySetDayLimitToFormChange(struct Pokemon *mon) +{ + u32 i; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + const struct FormChange *formChanges = GetSpeciesFormChanges(species); + + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) + { + if (formChanges[i].method == FORM_CHANGE_DAYS_PASSED && species != formChanges[i].targetSpecies) + { + SetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, &formChanges[i].param1); + break; + } + } +} + bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method) { u32 i; @@ -6866,3 +6906,38 @@ const u8 *GetMoveAnimationScript(u16 moveId) } return gMovesInfo[moveId].battleAnimScript; } + +void UpdateDaysPassedSinceFormChange(u16 days) +{ + u32 i; + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + u8 daysSinceFormChange; + + if (!GetMonData(mon, MON_DATA_SPECIES, 0)) + continue; + + daysSinceFormChange = GetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, 0); + if (daysSinceFormChange == 0) + continue; + + if (daysSinceFormChange > days) + daysSinceFormChange -= days; + else + daysSinceFormChange = 0; + + SetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, &daysSinceFormChange); + + if (daysSinceFormChange == 0) + { + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_DAYS_PASSED, 0); + + if (targetSpecies != SPECIES_NONE) + { + SetMonData(mon, MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(mon); + } + } + } +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index a3c7324e0e..fe65df0114 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6,6 +6,7 @@ #include "dma3.h" #include "dynamic_placeholder_text_util.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_screen_effect.h" #include "field_weather.h" #include "fldeff_misc.h" @@ -1436,9 +1437,9 @@ s16 GetFirstFreeBoxSpot(u8 boxId) return -1; // all spots are taken } -u8 CountPartyNonEggMons(void) +u32 CountPartyNonEggMons(void) { - u16 i, count; + u32 i, count; for (i = 0, count = 0; i < PARTY_SIZE; i++) { @@ -6412,9 +6413,15 @@ static void RefreshDisplayMon(void) static void SetMovingMonData(u8 boxId, u8 position) { if (boxId == TOTAL_BOXES_COUNT) + { sStorage->movingMon = gPlayerParty[sCursorPosition]; + if (&gPlayerParty[sCursorPosition] == GetFirstLiveMon()) + gFollowerSteps = 0; + } else + { BoxMonAtToMon(boxId, position, &sStorage->movingMon); + } PurgeMonOrBoxMon(boxId, position); sMovingMonOrigBoxId = boxId; @@ -6427,30 +6434,23 @@ static void SetPlacedMonData(u8 boxId, u8 position) HealPokemon(&sStorage->movingMon); if (boxId == TOTAL_BOXES_COUNT) + { gPlayerParty[position] = sStorage->movingMon; + if (&gPlayerParty[position] == GetFirstLiveMon()) + gFollowerSteps = 0; + } else + { SetBoxMonAt(boxId, position, &sStorage->movingMon.box); + } } static void PurgeMonOrBoxMon(u8 boxId, u8 position) { - u16 item = ITEM_NONE; - if (boxId == TOTAL_BOXES_COUNT) - { - if (OW_PC_RELEASE_ITEM >= GEN_8) - item = GetMonData(&gPlayerParty[position], MON_DATA_HELD_ITEM); ZeroMonData(&gPlayerParty[position]); - } else - { - if (OW_PC_RELEASE_ITEM >= GEN_8) - item = GetBoxMonDataAt(boxId, position, MON_DATA_HELD_ITEM); ZeroBoxMonAt(boxId, position); - } - - if (item != ITEM_NONE) - AddBagItem(item, 1); } static void SetShiftedMonData(u8 boxId, u8 position) @@ -6530,6 +6530,7 @@ static bool8 TryHideReleaseMon(void) static void ReleaseMon(void) { u8 boxId; + u16 item = ITEM_NONE; DestroyReleaseMonIcon(); if (sIsMonBeingMoved) @@ -6539,11 +6540,21 @@ static void ReleaseMon(void) else { if (sCursorArea == CURSOR_AREA_IN_PARTY) + { boxId = TOTAL_BOXES_COUNT; + if (OW_PC_RELEASE_ITEM >= GEN_8) + item = GetMonData(&gPlayerParty[sCursorPosition], MON_DATA_HELD_ITEM); + } else + { boxId = StorageGetCurrentBox(); + if (OW_PC_RELEASE_ITEM >= GEN_8) + item = GetBoxMonDataAt(boxId, sCursorPosition, MON_DATA_HELD_ITEM); + } PurgeMonOrBoxMon(boxId, sCursorPosition); + if (item != ITEM_NONE) + AddBagItem(item, 1); } TryRefreshDisplayMon(); } diff --git a/src/rtc.c b/src/rtc.c index a53d5e1fd8..5ccafec621 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -3,6 +3,7 @@ #include "string_util.h" #include "strings.h" #include "text.h" +#include "fake_rtc.h" // iwram bss static u16 sErrorStatus; @@ -46,6 +47,9 @@ void RtcRestoreInterrupts(void) u32 ConvertBcdToBinary(u8 bcd) { + if (OW_USE_FAKE_RTC) + return bcd; + if (bcd > 0x9F) return 0xFF; @@ -89,14 +93,22 @@ u16 ConvertDateToDayCount(u8 year, u8 month, u8 day) u16 RtcGetDayCount(struct SiiRtcInfo *rtc) { - u8 year = ConvertBcdToBinary(rtc->year); - u8 month = ConvertBcdToBinary(rtc->month); - u8 day = ConvertBcdToBinary(rtc->day); + u8 year, month, day; + + if (OW_USE_FAKE_RTC) + return rtc->day; + + year = ConvertBcdToBinary(rtc->year); + month = ConvertBcdToBinary(rtc->month); + day = ConvertBcdToBinary(rtc->day); return ConvertDateToDayCount(year, month, day); } void RtcInit(void) { + if (OW_USE_FAKE_RTC) + return; + sErrorStatus = 0; RtcDisableInterrupts(); @@ -121,12 +133,14 @@ void RtcInit(void) u16 RtcGetErrorStatus(void) { - return sErrorStatus; + return (OW_USE_FAKE_RTC) ? 0 : sErrorStatus; } void RtcGetInfo(struct SiiRtcInfo *rtc) { - if (sErrorStatus & RTC_ERR_FLAG_MASK) + if (OW_USE_FAKE_RTC) + FakeRtc_GetRawInfo(rtc); + else if (sErrorStatus & RTC_ERR_FLAG_MASK) *rtc = sRtcDummy; else RtcGetRawInfo(rtc); @@ -159,6 +173,9 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc) s32 month; s32 value; + if (OW_USE_FAKE_RTC) + return 0; + if (rtc->status & SIIRTCINFO_POWER) errorFlags |= RTC_ERR_POWER_FAILURE; @@ -211,6 +228,12 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc) void RtcReset(void) { + if (OW_USE_FAKE_RTC) + { + memset(FakeRtc_GetCurrentTime(), 0, sizeof(struct Time)); + return; + } + RtcDisableInterrupts(); SiiRtcReset(); RtcRestoreInterrupts(); diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index dba872543a..e732dc7aa2 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -396,7 +396,7 @@ static u32 ScriptGiveMonParameterized(u8 side, u8 slot, u16 species, u8 level, u SetMonData(&mon, MON_DATA_ABILITY_NUM, &abilityNum); // ball - if (ball >= POKEBALL_COUNT) + if (ball > LAST_BALL) ball = ITEM_POKE_BALL; SetMonData(&mon, MON_DATA_POKEBALL, &ball); @@ -487,12 +487,12 @@ void ScrCmd_createmon(struct ScriptContext *ctx) u8 speedEv = PARSE_FLAG(8, 0); u8 spAtkEv = PARSE_FLAG(9, 0); u8 spDefEv = PARSE_FLAG(10, 0); - u8 hpIv = PARSE_FLAG(11, Random() % MAX_PER_STAT_IVS + 1); - u8 atkIv = PARSE_FLAG(12, Random() % MAX_PER_STAT_IVS + 1); - u8 defIv = PARSE_FLAG(13, Random() % MAX_PER_STAT_IVS + 1); - u8 speedIv = PARSE_FLAG(14, Random() % MAX_PER_STAT_IVS + 1); - u8 spAtkIv = PARSE_FLAG(15, Random() % MAX_PER_STAT_IVS + 1); - u8 spDefIv = PARSE_FLAG(16, Random() % MAX_PER_STAT_IVS + 1); + u8 hpIv = PARSE_FLAG(11, Random() % (MAX_PER_STAT_IVS + 1)); + u8 atkIv = PARSE_FLAG(12, Random() % (MAX_PER_STAT_IVS + 1)); + u8 defIv = PARSE_FLAG(13, Random() % (MAX_PER_STAT_IVS + 1)); + u8 speedIv = PARSE_FLAG(14, Random() % (MAX_PER_STAT_IVS + 1)); + u8 spAtkIv = PARSE_FLAG(15, Random() % (MAX_PER_STAT_IVS + 1)); + u8 spDefIv = PARSE_FLAG(16, Random() % (MAX_PER_STAT_IVS + 1)); u16 move1 = PARSE_FLAG(17, MOVE_NONE); u16 move2 = PARSE_FLAG(18, MOVE_NONE); u16 move3 = PARSE_FLAG(19, MOVE_NONE); diff --git a/src/shop.c b/src/shop.c index 620a49394d..77f2039e3b 100644 --- a/src/shop.c +++ b/src/shop.c @@ -630,7 +630,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 { @@ -638,7 +638,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))) @@ -1035,7 +1035,7 @@ static void Task_BuyMenu(u8 taskId) else { StringCopy(gStringVar1, gDecorations[itemId].name); - ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS); if (sMartInfo.martType == MART_TYPE_DECOR) StringExpandPlaceholders(gStringVar4, gText_Var1IsItThatllBeVar2); @@ -1097,7 +1097,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) PutWindowTilemap(WIN_ITEM_LIST); CopyItemName(tItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); - ConvertIntToDecimalStringN(gStringVar3, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase); } else if (JOY_NEW(B_BUTTON)) @@ -1226,7 +1226,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) s16 *data = gTasks[taskId].data; FillWindowPixelBuffer(WIN_QUANTITY_PRICE, PIXEL_FILL(1)); - PrintMoneyAmount(WIN_QUANTITY_PRICE, 38, 1, sShopData->totalCost, TEXT_SKIP_DRAW); + PrintMoneyAmount(WIN_QUANTITY_PRICE, CalculateMoneyTextHorizontalPosition(sShopData->totalCost), 1, sShopData->totalCost, TEXT_SKIP_DRAW); ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); BuyMenuPrint(WIN_QUANTITY_PRICE, gStringVar4, 0, 1, 0, COLORID_NORMAL); diff --git a/src/strings.c b/src/strings.c index 4b577bb963..28ed992d43 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1295,6 +1295,8 @@ const u8 gText_Sorry[] = _("SORRY"); const u8 gText_YaySmileEmoji[] = _("YAY{EMOJI_BIGSMILE}"); const u8 gText_ThankYou[] = _("THANK YOU"); const u8 gText_ByeBye[] = _("BYE-BYE!"); +const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm…\p"); +const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm…\p"); const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls"); @@ -1609,23 +1611,6 @@ const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?"); const u8 gText_TellHimTheWords[] = _("Tell him the words."); const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK"); const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); -const u8 gText_ContestLady_Handsome[] = _("HANDSOME"); -const u8 gText_ContestLady_Vinny[] = _("VINNY"); -const u8 gText_ContestLady_Moreme[] = _("MOREME"); -const u8 gText_ContestLady_Ironhard[] = _("IRONHARD"); -const u8 gText_ContestLady_Muscle[] = _("MUSCLE"); -const u8 gText_ContestLady_Coolness[] = _("coolness"); -const u8 gText_ContestLady_Beauty[] = _("beauty"); -const u8 gText_ContestLady_Cuteness[] = _("cuteness"); -const u8 gText_ContestLady_Smartness[] = _("smartness"); -const u8 gText_ContestLady_Toughness[] = _("toughness"); -const u8 gText_QuizLady_Lady[] = _("Lady"); -const u8 gText_FavorLady_Slippery[] = _("slippery"); -const u8 gText_FavorLady_Roundish[] = _("roundish"); -const u8 gText_FavorLady_Whamish[] = _("wham-ish"); -const u8 gText_FavorLady_Shiny[] = _("shiny"); -const u8 gText_FavorLady_Sticky[] = _("sticky"); -const u8 gText_FavorLady_Pointy[] = _("pointy"); const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON"); const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON."); const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON."); diff --git a/src/trainer_card.c b/src/trainer_card.c index 225e8241ac..29e94bfe9f 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1045,7 +1045,7 @@ static void PrintMoneyOnCard(void) else AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); if (!sData->isHoenn) { diff --git a/src/tv.c b/src/tv.c index 5530e519f6..e0f910eaaf 100644 --- a/src/tv.c +++ b/src/tv.c @@ -2760,16 +2760,14 @@ void ConvertIntToDecimalString(u8 varIdx, int value) size_t CountDigits(int value) { - if (value / 10 == 0) return 1; - if (value / 100 == 0) return 2; - if (value / 1000 == 0) return 3; - if (value / 10000 == 0) return 4; - if (value / 100000 == 0) return 5; - if (value / 1000000 == 0) return 6; - if (value / 10000000 == 0) return 7; - if (value / 100000000 == 0) return 8; + u32 count = 0; - return 1; + while (value > 0) + { + value /= 10; + count++; + } + return count; } static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 63b6c6f9d5..30dcb74ce0 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/src/wild_encounter.c b/src/wild_encounter.c index 273f9f312a..ae7770aa3a 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -51,15 +51,7 @@ enum { static u16 FeebasRandom(void); static void FeebasSeedRng(u16 seed); -static u32 GetLastFishingSpecies(void); -static bool32 DoesSpeciesMatchLastFishingSpecies(u32 species); -static u32 GetCurrentChainFishingDexNavStreak(void); -static bool32 IsChainFishingStreakAtMax(void); -static void IncrementChainFishingDexNavStreak(void); -static void SetEncounterFishing(void); -static void SetLastFishingSpecies(u32 species); -static void HandleChainFishingStreak(u32 species); -static void UpdateChainFishingSpeciesAndStreak(u32 species); +static void UpdateChainFishingStreak(); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); static void ApplyCleanseTagEncounterRateMod(u32 *encRate); @@ -76,7 +68,6 @@ EWRAM_DATA static u32 sFeebasRngValue = 0; EWRAM_DATA bool8 gIsFishingEncounter = 0; EWRAM_DATA bool8 gIsSurfingEncounter = 0; EWRAM_DATA u8 gChainFishingDexNavStreak = 0; -EWRAM_DATA static u16 sLastFishingSpecies = 0; #include "data/wild_encounters.h" @@ -528,7 +519,7 @@ static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 u16 wildMonSpecies = wildMonInfo->wildPokemon[wildMonIndex].species; u8 level = ChooseWildMonLevel(wildMonInfo->wildPokemon, wildMonIndex, WILD_AREA_FISHING); - UpdateChainFishingSpeciesAndStreak(wildMonSpecies); + UpdateChainFishingStreak(); CreateWildMon(wildMonSpecies, level); return wildMonSpecies; } @@ -877,84 +868,27 @@ bool8 DoesCurrentMapHaveFishingMons(void) return FALSE; } -static u32 GetLastFishingSpecies(void) -{ - return sLastFishingSpecies; -} - -static bool32 DoesSpeciesMatchLastFishingSpecies(u32 species) -{ - return (species == GetLastFishingSpecies()); -} - -static u32 GetCurrentChainFishingDexNavStreak(void) -{ - return gChainFishingDexNavStreak; -} - -static bool32 IsChainFishingStreakAtMax(void) -{ - return (GetCurrentChainFishingDexNavStreak() >= FISHING_CHAIN_LENGTH_MAX); -} - -static void IncrementChainFishingDexNavStreak(void) -{ - gChainFishingDexNavStreak++; -} - -void ResetChainFishingDexNavStreak(void) -{ - gChainFishingDexNavStreak = 0; -} - -bool32 IsCurrentEncounterFishing(void) -{ - return gIsFishingEncounter; -} - -static void SetEncounterFishing(void) -{ - gIsFishingEncounter = TRUE; -} - u32 CalculateChainFishingShinyRolls(void) { - return (1 + (2 * GetCurrentChainFishingDexNavStreak())); + return (2 * min(gChainFishingDexNavStreak, FISHING_CHAIN_SHINY_STREAK_MAX)); } -static void SetLastFishingSpecies(u32 species) -{ - sLastFishingSpecies = species; -} - -static void HandleChainFishingStreak(u32 species) -{ - if (!DoesSpeciesMatchLastFishingSpecies(species)) - { - ResetChainFishingDexNavStreak(); - return; - } - - if (IsChainFishingStreakAtMax()) - return; - - IncrementChainFishingDexNavStreak(); -} - -static void UpdateChainFishingSpeciesAndStreak(u32 species) +static void UpdateChainFishingStreak() { if (!I_FISHING_CHAIN) return; - HandleChainFishingStreak(species); - SetLastFishingSpecies(species); + if (gChainFishingDexNavStreak >= FISHING_CHAIN_LENGTH_MAX) + return; + + gChainFishingDexNavStreak++; } void FishingWildEncounter(u8 rod) { u16 species; - SetEncounterFishing(); + gIsFishingEncounter = TRUE; if (CheckFeebas() == TRUE) { u8 level = ChooseWildMonLevel(&sWildFeebas, 0, WILD_AREA_FISHING); diff --git a/test/battle/ability/ate_abilities.c b/test/battle/ability/ate_abilities.c index 12ee75722a..203452cc01 100644 --- a/test/battle/ability/ate_abilities.c +++ b/test/battle/ability/ate_abilities.c @@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Pixilate turns a normal type move into Fairy") PLAYER(SPECIES_DRAGONITE); OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -62,9 +62,8 @@ SINGLE_BATTLE_TEST("Refrigerate turns a normal type move into Ice") PLAYER(SPECIES_MEGANIUM); OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); } @@ -76,7 +75,7 @@ SINGLE_BATTLE_TEST("Aerilate turns a normal type move into Flying") PLAYER(SPECIES_MEGANIUM); OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index a58297a58b..bb05031fe3 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/comatose.c b/test/battle/ability/comatose.c new file mode 100644 index 0000000000..cc65e9afac --- /dev/null +++ b/test/battle/ability/comatose.c @@ -0,0 +1,57 @@ +#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 { + // FIXME: Explicit moves currently required here because Ditto + // expects to find Celebrate in slot 1 during the second turn + // (after transforming). + PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); Speed(30); Moves(MOVE_CELEBRATE, MOVE_GASTRO_ACID, move); } + 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 87477ddbcc..8addbd90fa 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); } } } -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 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); + } + } +} + +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 0000000000..20fe659d21 --- /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/disguise.c b/test/battle/ability/disguise.c index 7d3e36bf78..c4f79d8fe3 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -121,3 +121,16 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rough Skin without break EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED); } } + +SINGLE_BATTLE_TEST("Disguised Mimikyu is ignored by Mold Breaker") +{ + GIVEN { + PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } + OPPONENT(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + } WHEN { + TURN { MOVE(opponent, MOVE_AERIAL_ACE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AERIAL_ACE, opponent); + NOT ABILITY_POPUP(player, ABILITY_DISGUISE); + } +} diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index 2d9f8f466e..9fecda400d 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. SEND_IN_MESSAGE("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 new file mode 100644 index 0000000000..3b36f2d1f2 --- /dev/null +++ b/test/battle/ability/full_metal_body.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Full Metal Body are handled in test/battle/ability/clear_body.c diff --git a/test/battle/ability/ice_body.c b/test/battle/ability/ice_body.c index aca84532a4..1aa7c80a4d 100644 --- a/test/battle/ability/ice_body.c +++ b/test/battle/ability/ice_body.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Ice Body recovers 1/16th of Max HP in hail.") TURN { MOVE(opponent, MOVE_HAIL); } } SCENE { ABILITY_POPUP(player, ABILITY_ICE_BODY); - MESSAGE("Glalie's Ice Body healed it a little bit!"); HP_BAR(player, damage: -(100 / 16)); + MESSAGE("Glalie's Ice Body healed it a little bit!"); } } diff --git a/test/battle/ability/illusion.c b/test/battle/ability/illusion.c new file mode 100644 index 0000000000..ca3bcb2ee0 --- /dev/null +++ b/test/battle/ability/illusion.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +// This test is eyes on only +SINGLE_BATTLE_TEST("Illusion can only imitate Normal Form terapagos") +{ + GIVEN { + PLAYER(SPECIES_ZOROARK) { Moves(MOVE_CELEBRATE); } + PLAYER(SPECIES_TERAPAGOS) { Moves(MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + // Zoroark is out, should be normal form Terapagos + // Switch to Terapagos which enters Terastal Form + TURN { SWITCH(player, 1); } + // Switch back to Zoroark, should not be Terastal Terapagos + TURN { SWITCH(player, 0); MOVE(opponent, MOVE_TACKLE);} + // Switch back to Terapagos + TURN { SWITCH(player, 1); } + // Terapagos Stellar, Zoroark gets Roared in, should not be Stellar Terapagos + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROAR); } + // Reveal the Zoroark + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + } +} diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index f4c5395723..d2d7bc4af7 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. SEND_IN_MESSAGE("Ekans"); - MESSAGE("2 sent out Arbok!"); - SEND_IN_MESSAGE("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!"); } + SEND_IN_MESSAGE("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!"); } } @@ -211,6 +217,35 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is } } +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); + } +} + SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas") { GIVEN { diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c new file mode 100644 index 0000000000..33dd27a6fb --- /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/minds_eye.c b/test/battle/ability/minds_eye.c index 6498f9f098..7799735ee2 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/opportunist.c b/test/battle/ability/opportunist.c index f2a9f5a37a..b627b8ec6e 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -16,16 +16,16 @@ SINGLE_BATTLE_TEST("Opportunist only copies foe's positive stat changes in a tur OPPONENT(SPECIES_ESPATHRA) { Speed(5); Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_SHELL_SMASH); } - TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { if (ability == ABILITY_FRISK) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SMASH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SMASH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); } } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); @@ -78,12 +78,10 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) || (abilityLeft != ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY)) { ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); - MESSAGE("Espathra copied its opponent's stat changes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Espathra's Attack rose!"); } else if (abilityLeft == ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); - MESSAGE("Espathra copied its opponent's stat changes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Espathra's Attack sharply rose!"); } @@ -124,6 +122,177 @@ SINGLE_BATTLE_TEST("Opportunist does not accumulate opposing mon's stat changes" } } -TO_DO_BATTLE_TEST("Opportunist doesn't copy ally stat increases"); -TO_DO_BATTLE_TEST("Opportunist doesn't copy foe stat increases gained via Opportunist"); -TO_DO_BATTLE_TEST("Opportunist copies foe stat increased gained via Swagger and Flatter"); +SINGLE_BATTLE_TEST("Opportunist copies each stat increase individually from ability and move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + } WHEN { + TURN { SWITCH(player, 1); } + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 3); + } +} + +SINGLE_BATTLE_TEST("Opportunist doesn't copy foe stat increases gained via Opportunist") +{ + GIVEN { + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + NOT ABILITY_POPUP(player, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], player->statStages[STAT_ATK]); + } +} + +SINGLE_BATTLE_TEST("Opportunist copies foe stat increase gained via Swagger and Flatter") +{ + GIVEN { + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + } WHEN { + TURN { MOVE(opponent, MOVE_FLATTER); } + TURN { MOVE(opponent, MOVE_SWAGGER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLATTER, opponent); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWAGGER, opponent); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} + +DOUBLE_BATTLE_TEST("Opportunist doesn't copy ally stat increases") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_SWORDS_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, playerLeft); + NOT ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE ); + } +} + +DOUBLE_BATTLE_TEST("Opportunist copies the stat increase of each opposing mon") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_SWORDS_DANCE); MOVE(opponentLeft, MOVE_SWORDS_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponentLeft); + ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 4); + } +} + + +DOUBLE_BATTLE_TEST("Opportunist copies the stat of each pokemon that were raised at the same time") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_INTREPID_SWORD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ABILITY_POPUP(opponentRight, ABILITY_INTREPID_SWORD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); + MESSAGE("Espathra's Attack sharply rose!"); + } THEN { + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Opportunist copies the increase not the stages") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + } WHEN { + TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_CHARM); } + TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_CHARM); } + TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_GROWL); } + TURN { MOVE(player, MOVE_BELLY_DRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent); + + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 5); // + 11 + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 6); // + 11 + } +} + +SINGLE_BATTLE_TEST("Opportunist copies the stat increase from the incoming mon") +{ + GIVEN { + PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); + ABILITY_POPUP(player, ABILITY_OPPORTUNIST); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Opportunist and Mirror Herb stack stat increases") +{ + GIVEN { + PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); + ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index d5a6f58a72..a37bc0024a 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 46e71096de..945e975b77 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Parental Bond converts Tackle into a two-strike move") PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Parental Bond does not convert a move with three or more str PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TRIPLE_KICK, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_TRIPLE_KICK, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Parental Bond converts multi-target moves into a two-strike PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, move, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, move, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -86,7 +86,7 @@ DOUBLE_BATTLE_TEST("Parental Bond does not convert multi-target moves into a two OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIDGEY); } WHEN { - TURN { MOVE(playerLeft, MOVE_EARTHQUAKE, megaEvolve: TRUE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE, gimmick: GIMMICK_MEGA); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Parental Bond-converted moves only hit once on Lightning Rod PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(species) { Ability(ability); } } WHEN { - TURN { MOVE(player, move, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, move, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -195,7 +195,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -223,7 +223,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); @@ -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, gimmick: GIMMICK_MEGA); } + } 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 0000000000..b69fa20444 --- /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 8c5feaee43..d5fae3edb7 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -196,7 +196,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by a Dark PLAYER(SPECIES_ABSOL) { Item(ITEM_ABSOLITE); } OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { MESSAGE("Foe Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); @@ -209,7 +209,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Boun PLAYER(SPECIES_ABSOL) { Item(ITEM_ABSOLITE); } OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { MESSAGE("Foe Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index 25ab1a5c75..d1785bd69e 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -164,3 +164,15 @@ SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles") } } } + +SINGLE_BATTLE_TEST("Shield Dust does not prevent ability stat changes") +{ + GIVEN { + PLAYER(SPECIES_VIVILLON) { Ability(ABILITY_SHIELD_DUST); } + OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Vivillon's Speed fell!"); + } +} diff --git a/test/battle/ability/stalwart.c b/test/battle/ability/stalwart.c new file mode 100644 index 0000000000..289f25dd1c --- /dev/null +++ b/test/battle/ability/stalwart.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Stalwart ignores redirection from Follow-Me") +{ + GIVEN { + PLAYER(SPECIES_ARCHALUDON) { Ability(ABILITY_STALWART); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FOLLOW_ME); MOVE(playerLeft, MOVE_DRACO_METEOR, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOLLOW_ME, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRACO_METEOR, playerLeft); + HP_BAR(opponentRight); + NOT HP_BAR(opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Stalwart stops Lightning Rod and Storm Drain from redirecting moves") +{ + u32 ability, species; + PARAMETRIZE { ability = ABILITY_STORM_DRAIN; species = SPECIES_LUMINEON; } + PARAMETRIZE { ability = ABILITY_LIGHTNING_ROD; species = SPECIES_RAICHU; } + GIVEN { + ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC); + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STALWART); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + if (ability == ABILITY_LIGHTNING_ROD) + MOVE(playerLeft, MOVE_SPARK, target: opponentRight); + else + MOVE(playerLeft, MOVE_WATER_GUN, target: opponentRight); + } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + HP_BAR(opponentRight); + NONE_OF { + ABILITY_POPUP(opponentLeft, ability); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + } + } else { + HP_BAR(opponentRight); + NONE_OF { + HP_BAR(opponentLeft); + } + } + } +} diff --git a/test/battle/ability/sticky_hold.c b/test/battle/ability/sticky_hold.c new file mode 100644 index 0000000000..2c7cc09535 --- /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 0000000000..38d4a9be75 --- /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 fcaca96685..dcaaa494a0 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. SEND_IN_MESSAGE("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 0000000000..79cf2b2dc9 --- /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 ae3e4c73a9..02eec69ed8 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 c8d24f5d92..7862a0bb8c 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/teraform_zero.c b/test/battle/ability/teraform_zero.c new file mode 100644 index 0000000000..6540515322 --- /dev/null +++ b/test/battle/ability/teraform_zero.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Teraform Zero clears weather and terrain upon activation") +{ + GIVEN { + PLAYER(SPECIES_TERAPAGOS_TERASTAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_TERAFORM_ZERO); + MESSAGE("The rain stopped."); + MESSAGE("The electricity disappeared from the battlefield."); + } +} + +DOUBLE_BATTLE_TEST("Teraform Zero can be supressed") +{ + GIVEN { + PLAYER(SPECIES_TERAPAGOS_TERASTAL); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + } WHEN { + TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_NEUTRALIZING_GAS); + NONE_OF { + MESSAGE("The rain stopped."); + MESSAGE("The electricity disappeared from the battlefield."); + } + } +} + +SINGLE_BATTLE_TEST("Teraform Zero can be replaced") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WORRY_SEED].effect == EFFECT_WORRY_SEED); + ASSUME(gMovesInfo[MOVE_REST].effect == EFFECT_REST); + PLAYER(SPECIES_TERAPAGOS); + OPPONENT(SPECIES_WHIMSICOTT) { Ability(ABILITY_PRANKSTER); } + } WHEN { + TURN { MOVE(opponent, MOVE_WORRY_SEED); MOVE(player, MOVE_REST, gimmick: GIMMICK_TERA); } + } SCENE { + MESSAGE("Foe Whimsicott used Worry Seed!"); + MESSAGE("Terapagos acquired Insomnia!"); + MESSAGE("Terapagos used Rest!"); + ABILITY_POPUP(player, ABILITY_INSOMNIA); + MESSAGE("Terapagos stayed awake using its Insomnia!"); + } +} + +SINGLE_BATTLE_TEST("Teraform Zero cannot be swapped") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); + PLAYER(SPECIES_TERAPAGOS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_SKILL_SWAP); } + } SCENE { + MESSAGE("Foe Wobbuffet used Skill Swap!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Teraform Zero cannot be copied") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ROLE_PLAY].effect == EFFECT_ROLE_PLAY); + PLAYER(SPECIES_TERAPAGOS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROLE_PLAY); } + } SCENE { + MESSAGE("Foe Wobbuffet used Role Play!"); + MESSAGE("But it failed!"); + } +} + +DOUBLE_BATTLE_TEST("Teraform Zero shouldn't cause Neutralizing Gas to show it's popup when trying to activate") +{ + KNOWN_FAILING; // #5010 + GIVEN { + PLAYER(SPECIES_TERAPAGOS_TERASTAL); + PLAYER(SPECIES_ABSOL) {Ability(ABILITY_PRESSURE); } + PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + } WHEN { + TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } SCENE { + MESSAGE("Terapagos is storing energy!"); + MESSAGE("Terapagos terastalized into the Stellar type!"); + NOT ABILITY_POPUP(playerRight, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Terapagos used Celebreate!"); + } +} diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c index d6aba06f70..2c29770f52 100644 --- a/test/battle/ability/toxic_chain.c +++ b/test/battle/ability/toxic_chain.c @@ -1,112 +1,112 @@ -#include "global.h" -#include "test/battle.h" - -SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking") -{ - PASSES_RANDOMLY(3, 10, RNG_TOXIC_CHAIN); - GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].category != DAMAGE_CATEGORY_STATUS); - ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); - PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - } SCENE { - ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); - STATUS_ICON(opponent, badPoison: TRUE); - } THEN { - EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); - } -} - -SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit move") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].category != DAMAGE_CATEGORY_STATUS); - ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT); - ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].power > 0); - ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); - PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); } - } WHEN { - TURN { MOVE(player, MOVE_DOUBLE_SLAP); } - } SCENE { - ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); - STATUS_ICON(opponent, badPoison: TRUE); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - STATUS_ICON(opponent, badPoison: FALSE); - ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); - STATUS_ICON(opponent, badPoison: TRUE); - } THEN { - EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); - } -} - -DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].category != DAMAGE_CATEGORY_STATUS); - ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].target == MOVE_TARGET_BOTH); - ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].power > 0); - PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(playerLeft, MOVE_RAZOR_LEAF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); } - } SCENE { - HP_BAR(opponentLeft); - ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft); - MESSAGE("Foe Wobbuffet is badly poisoned!"); - STATUS_ICON(opponentLeft, badPoison: TRUE); - HP_BAR(opponentRight); - ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight); - MESSAGE("Foe Wynaut is badly poisoned!"); - STATUS_ICON(opponentRight, badPoison: TRUE); - } THEN { - EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON); - EXPECT(opponentRight->status1 & STATUS1_TOXIC_POISON); - } -} - -SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knocked off") -{ - u16 item = 0; - - PARAMETRIZE { item = ITEM_PECHA_BERRY; } - PARAMETRIZE { item = ITEM_LUM_BERRY; } - - GIVEN { - ASSUME(gMovesInfo[MOVE_KNOCK_OFF].category != DAMAGE_CATEGORY_STATUS); - ASSUME(gMovesInfo[MOVE_KNOCK_OFF].effect == EFFECT_KNOCK_OFF); - ASSUME(gMovesInfo[MOVE_KNOCK_OFF].power > 0); - ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); - ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); - PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } - OPPONENT(SPECIES_WOBBUFFET) { Item(item); } - } WHEN { - TURN { MOVE(player, MOVE_KNOCK_OFF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); } - } SCENE { - ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); - STATUS_ICON(opponent, badPoison: TRUE); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - STATUS_ICON(opponent, badPoison: FALSE); - NONE_OF { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Pecha Berry!"); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Lum Berry!"); - } - } THEN { - EXPECT(opponent->status1 == 0); - } -} +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking") +{ + PASSES_RANDOMLY(3, 10, RNG_TOXIC_CHAIN); + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); + PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet is badly poisoned!"); + STATUS_ICON(opponent, badPoison: TRUE); + } THEN { + EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); + } +} + +SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT); + ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].power > 0); + ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); + PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SLAP); } + } SCENE { + ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet is badly poisoned!"); + STATUS_ICON(opponent, badPoison: TRUE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + STATUS_ICON(opponent, badPoison: FALSE); + ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet is badly poisoned!"); + STATUS_ICON(opponent, badPoison: TRUE); + } THEN { + EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); + } +} + +DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].target == MOVE_TARGET_BOTH); + ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].power > 0); + PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_RAZOR_LEAF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); } + } SCENE { + HP_BAR(opponentLeft); + ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft); + MESSAGE("Foe Wobbuffet is badly poisoned!"); + STATUS_ICON(opponentLeft, badPoison: TRUE); + HP_BAR(opponentRight); + ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight); + MESSAGE("Foe Wynaut is badly poisoned!"); + STATUS_ICON(opponentRight, badPoison: TRUE); + } THEN { + EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON); + EXPECT(opponentRight->status1 & STATUS1_TOXIC_POISON); + } +} + +SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knocked off") +{ + u16 item = 0; + + PARAMETRIZE { item = ITEM_PECHA_BERRY; } + PARAMETRIZE { item = ITEM_LUM_BERRY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_KNOCK_OFF].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_KNOCK_OFF].effect == EFFECT_KNOCK_OFF); + ASSUME(gMovesInfo[MOVE_KNOCK_OFF].power > 0); + ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); + ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); + PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); } + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); } + } SCENE { + ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + MESSAGE("Foe Wobbuffet is badly poisoned!"); + STATUS_ICON(opponent, badPoison: TRUE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + STATUS_ICON(opponent, badPoison: FALSE); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); + MESSAGE("Okidogi knocked off Foe Wobbuffet's Pecha Berry!"); + MESSAGE("Okidogi knocked off Foe Wobbuffet's Lum Berry!"); + } + } THEN { + EXPECT(opponent->status1 == 0); + } +} diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index bb72f38860..acc49bcf13 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 723c83bdf9..362b44c003 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 new file mode 100644 index 0000000000..4cb1687141 --- /dev/null +++ b/test/battle/ability/white_smoke.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// 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 1fd8e9c7e1..be72a55a7e 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. SEND_IN_MESSAGE("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/ai.c similarity index 99% rename from test/battle/ai.c rename to test/battle/ai/ai.c index 48eee5c051..a19481c7ed 100644 --- a/test/battle/ai.c +++ b/test/battle/ai/ai.c @@ -402,9 +402,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); @@ -431,7 +431,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; } } } diff --git a/test/battle/ai_calc_best_move_score.c b/test/battle/ai/ai_calc_best_move_score.c similarity index 100% rename from test/battle/ai_calc_best_move_score.c rename to test/battle/ai/ai_calc_best_move_score.c diff --git a/test/battle/ai_check_viability.c b/test/battle/ai/ai_check_viability.c similarity index 99% rename from test/battle/ai_check_viability.c rename to test/battle/ai/ai_check_viability.c index 2e75f31903..fa921e8674 100644 --- a/test/battle/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -203,7 +203,7 @@ AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") GIVEN { ASSUME(gMovesInfo[MOVE_HEAL_BELL].effect == EFFECT_HEAL_BELL); - ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_9); + ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_8); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c new file mode 100644 index 0000000000..c9992d2cab --- /dev/null +++ b/test/battle/ai/ai_choice.c @@ -0,0 +1,181 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_CHOICE_SPECS].holdEffect == HOLD_EFFECT_CHOICE_SPECS); + ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); + ASSUME(gItemsInfo[ITEM_CHOICE_SCARF].holdEffect == HOLD_EFFECT_CHOICE_SCARF); +} + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon switch out after using a status move once") +{ + u32 j, ability = ABILITY_NONE, heldItem = ITEM_NONE; + + static const u32 choiceItems[] = { + ITEM_CHOICE_SPECS, + ITEM_CHOICE_BAND, + ITEM_CHOICE_SCARF, + }; + + for (j = 0; j < ARRAY_COUNT(choiceItems); j++) + { + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_RHYDON) + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); } + OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_YAWN); } + if (ability == ABILITY_KLUTZ) { // Klutz ignores item + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + } + else { + TURN { EXPECT_SWITCH(opponent, 1); } + } + } +} + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use stat boosting moves") +{ + // Moves defined by MOVE_TARGET_USER (with exceptions?) + u32 j, ability = ABILITY_NONE, heldItem = ITEM_NONE; + + static const u32 choiceItems[] = { + ITEM_CHOICE_SPECS, + ITEM_CHOICE_BAND, + ITEM_CHOICE_SCARF, + }; + + for (j = 0; j < ARRAY_COUNT(choiceItems); j++) + { + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].target == MOVE_TARGET_USER); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_RHYDON) + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_SWORDS_DANCE, MOVE_TACKLE); Item(heldItem); Ability(ability); } + OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); } + } WHEN { + if (ability == ABILITY_KLUTZ) { // Klutz ignores item + TURN { EXPECT_MOVE(opponent, MOVE_SWORDS_DANCE); } + } + else { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + } + } +} + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are the only party member") +{ + u32 j, ability = ABILITY_NONE, isAlive = 0, heldItem = ITEM_NONE; + + static const u32 choiceItems[] = { + ITEM_CHOICE_SPECS, + ITEM_CHOICE_BAND, + ITEM_CHOICE_SCARF, + }; + + for (j = 0; j < ARRAY_COUNT(choiceItems); j++) + { + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; isAlive = 0; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; isAlive = 0; } + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; isAlive = 1; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; isAlive = 1; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_RHYDON) + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); } + OPPONENT(SPECIES_SWAMPERT) { HP(isAlive); Moves(MOVE_WATERFALL); } + } WHEN { + if (isAlive == 1 || ability == ABILITY_KLUTZ) { + TURN { EXPECT_MOVE(opponent, MOVE_YAWN); } + } + else { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + } + } +} + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they don't have a good switchin") +{ + u32 j, ability = ABILITY_NONE, move = MOVE_NONE, species = SPECIES_NONE, heldItem = ITEM_NONE; + + static const u32 choiceItems[] = { + ITEM_CHOICE_SPECS, + ITEM_CHOICE_BAND, + ITEM_CHOICE_SCARF, + }; + + for (j = 0; j < ARRAY_COUNT(choiceItems); j++) + { + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_SWAMPERT; move = MOVE_WATERFALL; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_SWAMPERT; move = MOVE_WATERFALL; } + PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_ELEKID; move = MOVE_THUNDER_WAVE; } + PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_ELEKID; move = MOVE_THUNDER_WAVE; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_RHYDON) + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); } + OPPONENT(species) { Moves(move); } + } WHEN { + if (species == SPECIES_SWAMPERT || ability == ABILITY_KLUTZ) { + TURN { EXPECT_MOVE(opponent, MOVE_YAWN); } + } + else { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + } + } +} + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are trapped") +{ + u32 j, aiAbility = ABILITY_NONE, playerAbility = MOVE_NONE, species = SPECIES_NONE, heldItem = ITEM_NONE; + + static const u32 choiceItems[] = { + ITEM_CHOICE_SPECS, + ITEM_CHOICE_BAND, + ITEM_CHOICE_SCARF, + }; + + for (j = 0; j < ARRAY_COUNT(choiceItems); j++) + { + PARAMETRIZE { aiAbility = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_RHYDON; playerAbility = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { aiAbility = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_RHYDON; playerAbility = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { aiAbility = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_DUGTRIO; playerAbility = ABILITY_ARENA_TRAP; } + PARAMETRIZE { aiAbility = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_DUGTRIO; playerAbility = ABILITY_ARENA_TRAP; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(species) { Ability(playerAbility); } + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(aiAbility); } + OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); } + } WHEN { + if (playerAbility != ABILITY_ARENA_TRAP || aiAbility == ABILITY_KLUTZ) { + TURN { EXPECT_MOVE(opponent, MOVE_YAWN); } + } + else { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + } + } +} diff --git a/test/battle/ai_flag_risky.c b/test/battle/ai/ai_flag_risky.c similarity index 89% rename from test/battle/ai_flag_risky.c rename to test/battle/ai/ai_flag_risky.c index 4c5d89205a..e6156de5a0 100644 --- a/test/battle/ai_flag_risky.c +++ b/test/battle/ai/ai_flag_risky.c @@ -5,8 +5,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Mirror Coat against specia { u32 aiRiskyFlag = 0; - PARAMETRIZE{ aiRiskyFlag = 0; } - PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + PARAMETRIZE { aiRiskyFlag = 0; } + PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; } GIVEN { ASSUME(gMovesInfo[MOVE_MIRROR_COAT].effect == EFFECT_MIRROR_COAT); @@ -24,8 +24,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Counter against physical a { u32 aiRiskyFlag = 0; - PARAMETRIZE{ aiRiskyFlag = 0; } - PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + PARAMETRIZE { aiRiskyFlag = 0; } + PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; } GIVEN { ASSUME(gMovesInfo[MOVE_COUNTER].effect == EFFECT_COUNTER); @@ -43,8 +43,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will prioritize Revenge if slower") { u32 aiRiskyFlag = 0; - PARAMETRIZE{ aiRiskyFlag = 0; } - PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + PARAMETRIZE { aiRiskyFlag = 0; } + PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; } GIVEN { ASSUME(gMovesInfo[MOVE_REVENGE].effect == EFFECT_REVENGE); @@ -60,8 +60,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive o { u32 aiRiskyFlag = 0; - PARAMETRIZE{ aiRiskyFlag = 0; } - PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + PARAMETRIZE { aiRiskyFlag = 0; } + PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | aiRiskyFlag); @@ -78,8 +78,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI prefers high damage moves at the expens { u32 aiRiskyFlag = 0; - PARAMETRIZE{ aiRiskyFlag = 0; } - PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + PARAMETRIZE { aiRiskyFlag = 0; } + PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c new file mode 100644 index 0000000000..1b4a264a24 --- /dev/null +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -0,0 +1,129 @@ +#include "global.h" +#include "test/battle.h" + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch after a KO in exactly party order") +{ + u32 aiSequenceSwitchingFlag = 0; + + PARAMETRIZE { aiSequenceSwitchingFlag = 0; } + PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag); + PLAYER(SPECIES_SWELLOW) { Level (50); } + OPPONENT(SPECIES_MACHOP) { Level(5); } + OPPONENT(SPECIES_MACHOKE) { Level(5); } + OPPONENT(SPECIES_MACHAMP) { Level(5); } + OPPONENT(SPECIES_MANKEY) { Level(5); } + OPPONENT(SPECIES_PRIMEAPE) { Level(5); } + OPPONENT(SPECIES_MAGNEZONE) { Level(100); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); } + if (aiSequenceSwitchingFlag) { + TURN { MOVE(player, MOVE_WING_ATTACK); } + TURN { MOVE(player, MOVE_WING_ATTACK); } + TURN { MOVE(player, MOVE_WING_ATTACK); } + TURN { MOVE(player, MOVE_WING_ATTACK); } + } + } SCENE { + if (aiSequenceSwitchingFlag) { + MESSAGE("{PKMN} TRAINER LEAF sent out Machoke!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Machamp!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Mankey!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Primeape!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!"); + } + else { + MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!"); + } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still force switch to random party member") +{ + u32 move; + + PARAMETRIZE { move = MOVE_ROAR; } + PARAMETRIZE {move = MOVE_DRAGON_TAIL; } + + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); + GIVEN { + ASSUME(gMovesInfo[MOVE_ROAR].effect == EFFECT_ROAR); + ASSUME(gMovesInfo[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + AI_FLAGS(AI_FLAG_SEQUENCE_SWITCHING); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, and Baton Pass") +{ + u32 j, aiSequenceSwitchingFlag = 0, move = MOVE_NONE; + + static const u32 switchMoves[] = { + MOVE_U_TURN, + MOVE_PARTING_SHOT, + MOVE_BATON_PASS, + }; + + for (j = 0; j < ARRAY_COUNT(switchMoves); j++) + { + PARAMETRIZE { aiSequenceSwitchingFlag = 0; move = switchMoves[j]; } + PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; move = switchMoves[j]; } + } + + GIVEN { + ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); + ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT); + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag); + PLAYER(SPECIES_SWELLOW) { Level (50); } + OPPONENT(SPECIES_MACHOP) { Level(1); Moves(move); } + OPPONENT(SPECIES_MACHOP) { Level(2); Moves(move); } + OPPONENT(SPECIES_MACHOP) { Level(3); Moves(move); } + OPPONENT(SPECIES_MACHOP) { Level(4); Moves(move); } + OPPONENT(SPECIES_MACHOP) { Level(5); Moves(move); } + OPPONENT(SPECIES_MAGNEZONE) { Level(100); Moves(move); } + } WHEN { + if (aiSequenceSwitchingFlag) { + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); } + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); } + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); } + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); } + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); } + } + else { + TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 5); } + } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will not switch mid-battle") +{ + u32 aiSequenceSwitchingFlag = 0; + + PARAMETRIZE { aiSequenceSwitchingFlag = 0; } + PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_LICK); } + OPPONENT(SPECIES_GASTLY) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_KARATE_CHOP); } + } WHEN { + if (aiSequenceSwitchingFlag == AI_FLAG_SEQUENCE_SWITCHING) { + TURN { MOVE(player, MOVE_LICK) ; EXPECT_MOVE(opponent, MOVE_SHADOW_BALL); } + } + else { + TURN { MOVE(player, MOVE_LICK) ; EXPECT_SWITCH(opponent, 1); } + } + } +} diff --git a/test/battle/ai_powerful_status.c b/test/battle/ai/ai_powerful_status.c similarity index 100% rename from test/battle/ai_powerful_status.c rename to test/battle/ai/ai_powerful_status.c diff --git a/test/battle/ai_switching.c b/test/battle/ai/ai_switching.c similarity index 89% rename from test/battle/ai_switching.c rename to test/battle/ai/ai_switching.c index 50b59f66d1..fcc8e322ca 100644 --- a/test/battle/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -67,6 +67,19 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot } } +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: U-Turn will send out Ace Mon if it's the only one remaining") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_ACE_POKEMON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 1); } + } +} + // General AI_FLAG_SMART_MON_CHOICES behaviour AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") { @@ -127,9 +140,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); @@ -159,8 +172,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); @@ -181,10 +194,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); @@ -257,8 +270,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); diff --git a/test/battle/ai_trytofaint.c b/test/battle/ai/ai_trytofaint.c similarity index 100% rename from test/battle/ai_trytofaint.c rename to test/battle/ai/ai_trytofaint.c diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c index d89fb7e7fd..473f631b11 100644 --- a/test/battle/damage_formula.c +++ b/test/battle/damage_formula.c @@ -116,3 +116,37 @@ SINGLE_BATTLE_TEST("Damage calculation matches Gen5+ (Marshadow vs Mawile)") EXPECT_EQ(expectedDamage, dmg); } } + +DOUBLE_BATTLE_TEST("A spread move will do correct damage to the second mon if the first target faints from first hit of the spread move") +{ + s16 damage[6]; + GIVEN { + PLAYER(SPECIES_REGIROCK); + PLAYER(SPECIES_REGIROCK); + OPPONENT(SPECIES_WOBBUFFET) { HP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); } + TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); MOVE(playerRight, MOVE_ROCK_SLIDE); } + TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damage[0]); + HP_BAR(opponentRight, captureDamage: &damage[1]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damage[2]); + HP_BAR(opponentRight, captureDamage: &damage[3]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerRight); + HP_BAR(opponentRight, captureDamage: &damage[4]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft); + HP_BAR(opponentRight, captureDamage: &damage[5]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + EXPECT_EQ(damage[1], damage[3]); + EXPECT_MUL_EQ(damage[5], UQ_4_12(0.75), damage[3]); + EXPECT_EQ(damage[4], damage[5]); + } +} diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index b2426933f7..ffab6af18b 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite") PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -25,7 +25,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent fas OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(3); } OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); @@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faste OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); } OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent") PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("1's fervent wish has reached Rayquaza!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Gardevoir used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(44); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Sableye used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); @@ -115,7 +115,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution happens after switching, but before Focus Pun OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, megaEvolve: TRUE, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); } + TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, gimmick: GIMMICK_MEGA, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); } TURN {} } SCENE { MESSAGE("2 withdrew Wobbuffet!"); @@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can h PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); Speed(3); } OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("1's fervent wish has reached Rayquaza!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); @@ -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, gimmick: GIMMICK_MEGA); } + } 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/form_change/status.c b/test/battle/form_change/status.c index f0d5a9f3f0..0b94202bbd 100644 --- a/test/battle/form_change/status.c +++ b/test/battle/form_change/status.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitt } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (move == MOVE_POWDER_SNOW) { - STATUS_ICON(player, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(player, TRUE); NOT HP_BAR(player); // Regression caused by Mimikyu form change MESSAGE("Shaymin transformed!"); } else { diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index f2c7b1da2b..5c6f4a2ce4 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Dusk Mane Necrozma can Ultra Burst holding Ultranecrozium Z" PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); @@ -25,7 +25,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); } OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); } + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { MESSAGE("Bright light is about to burst out of Foe Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); @@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(2); } OPPONENT(SPECIES_WOBBUFFET) { Speed(4); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); } + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { MESSAGE("Necrozma used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); @@ -81,7 +81,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst happens after switching, but before Focus Punch- OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, ultraBurst: TRUE, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); } + TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, gimmick: GIMMICK_ULTRA_BURST, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); } TURN {} } SCENE { MESSAGE("2 withdrew Wobbuffet!"); @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn") PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); } OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 4892e3ce47..56fd2e25ea 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -4,14 +4,14 @@ // ============= DYNAMAX AND MAX MOVE INTERACTIONS =================== SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) { - bool32 dynamax; - PARAMETRIZE { dynamax = FALSE; } - PARAMETRIZE { dynamax = TRUE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { // TODO: Dynamax level PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { if (dynamax) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); @@ -27,14 +27,14 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) { - bool32 dynamax; - PARAMETRIZE { dynamax = FALSE; } - PARAMETRIZE { dynamax = TRUE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); } // 1st max move + TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); } // 1st max move TURN { MOVE(player, MOVE_TACKLE); } // 2nd max move TURN { MOVE(player, MOVE_TACKLE); } // 3rd max move } SCENE { @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Foe Wobbuffet used Fake Out!"); NONE_OF { MESSAGE("Wobbuffet flinched!"); } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_HEAVY_SLAM); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_HEAVY_SLAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Heavy Slam!"); @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_MACHAMP) { Ability(ABILITY_NO_GUARD); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_FISSURE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FISSURE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Machamp used Fissure!"); @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Foe Wobbuffet used Destiny Bond!"); MESSAGE("Wobbuffet used Max Strike!"); @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Foe Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); @@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); SEND_OUT(player, 1); } + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Dragon Tail!"); @@ -181,7 +181,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); @@ -195,11 +195,12 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject Button") { GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Tackle!"); @@ -216,7 +217,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe PLAYER(SPECIES_MILTANK) { Ability(ABILITY_SCRAPPY); } OPPONENT(SPECIES_RUNERIGUS) { Ability(ABILITY_WANDERING_SPIRIT); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SKILL_SWAP); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { MESSAGE("Miltank used Max Strike!"); MESSAGE("Foe Runerigus used Skill Swap!"); @@ -232,7 +233,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SIMPLE_BEAM); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SIMPLE_BEAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Simple Beam!"); @@ -248,7 +249,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_ENCORE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_ENCORE); } TURN { MOVE(player, MOVE_EMBER); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); @@ -264,7 +265,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; } WHEN { - TURN { MOVE(player, MOVE_ARM_THRUST, dynamax: TRUE); } + TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(player, MOVE_ARM_THRUST); } TURN { MOVE(player, MOVE_ARM_THRUST); } TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_TACKLE); } @@ -284,7 +285,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_DISABLE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_DISABLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Disable!"); @@ -300,7 +301,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TACKLE); } - TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } TURN {} TURN {} TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } @@ -319,7 +320,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TORMENT); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TORMENT); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Torment!"); @@ -334,7 +335,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POTION); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_KNOCK_OFF); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_KNOCK_OFF); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet used Knock Off!"); @@ -351,7 +352,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_CELEBRATE); } - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Substitute!"); MESSAGE("Wobbuffet made a SUBSTITUTE!"); @@ -369,7 +370,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_TRICK_ROOM, dynamax: TRUE, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TRICK_ROOM, gimmick: GIMMICK_DYNAMAX, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); MESSAGE("Wynaut used Trick Room!"); @@ -378,15 +379,15 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon take double damage from Dynamax Cannon", s16 damage) { - bool32 dynamaxed; - PARAMETRIZE { dynamaxed = FALSE; } - PARAMETRIZE { dynamaxed = TRUE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(gMovesInfo[MOVE_DYNAMAX_CANNON].effect == EFFECT_DYNAMAX_DOUBLE_DMG); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamaxed); MOVE(opponent, MOVE_DYNAMAX_CANNON); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_DYNAMAX_CANNON); } } SCENE { HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -404,9 +405,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 da OPPONENT(SPECIES_WOBBUFFET); } WHEN { if (protected) - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_PROTECT); } else - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -420,7 +421,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); } } SCENE { NONE_OF { HP_BAR(opponent); } } @@ -434,7 +435,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE); + TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); MOVE(opponentLeft, MOVE_FEINT, target: playerLeft); MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } @@ -455,7 +456,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Instruct") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_TACKLE, dynamax: TRUE, target: opponentLeft); + TURN { MOVE(playerLeft, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX, target: opponentLeft); MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); } } SCENE { @@ -475,7 +476,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxi PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } THEN { EXPECT_EQ(player->species, species); } @@ -488,7 +489,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms revert upon switchin PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } TURN { SWITCH(player, 1); } TURN { SWITCH(player, 0); } } THEN { @@ -506,8 +507,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Choice items PLAYER(SPECIES_WOBBUFFET) { Item(item); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } - TURN { MOVE(player, MOVE_ARM_THRUST, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } + TURN { MOVE(player, MOVE_ARM_THRUST); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -524,7 +525,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holdi PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(player, MOVE_PROTECT, allowed: FALSE); MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); @@ -540,15 +541,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holdi SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 damage) { - bool32 dynamax; - PARAMETRIZE { dynamax = TRUE; } - PARAMETRIZE { dynamax = FALSE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(gMovesInfo[MOVE_ENDEAVOR].effect == EFFECT_ENDEAVOR); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } + TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { MESSAGE("Foe Wobbuffet used Endeavor!"); HP_BAR(player, captureDamage: &results[i].damage); @@ -559,15 +560,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 damage) { - bool32 dynamax; - PARAMETRIZE { dynamax = TRUE; } - PARAMETRIZE { dynamax = FALSE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } + TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { MESSAGE("Foe Wobbuffet used Super Fang!"); HP_BAR(player, captureDamage: &results[i].damage); @@ -578,15 +579,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 damage) { - bool32 dynamax; - PARAMETRIZE { dynamax = TRUE; } - PARAMETRIZE { dynamax = FALSE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(gMovesInfo[MOVE_PAIN_SPLIT].effect == EFFECT_PAIN_SPLIT); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } + TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { MESSAGE("Foe Wobbuffet used Pain Split!"); HP_BAR(player, captureDamage: &results[i].damage); @@ -597,16 +598,16 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynamax HP", s16 damage) { - bool32 dynamax; - PARAMETRIZE { dynamax = TRUE; } - PARAMETRIZE { dynamax = FALSE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(I_SITRUS_BERRY_HEAL >= GEN_4); ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } } WHEN { - TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } + TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { MESSAGE("Wobbuffet's Sitrus Berry restored health!"); HP_BAR(player, captureDamage: &results[i].damage); @@ -617,15 +618,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynam SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax HP", s16 damage) { - bool32 dynamax; - PARAMETRIZE { dynamax = TRUE; } - PARAMETRIZE { dynamax = FALSE; } + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } GIVEN { ASSUME(gMovesInfo[MOVE_HEAL_PULSE].effect == EFFECT_HEAL_PULSE); PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); Speed(100); } } WHEN { - TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } + TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { MESSAGE("Foe Wobbuffet used Heal Pulse!"); HP_BAR(player, captureDamage: &results[i].damage); @@ -643,7 +644,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } PLAYER(SPECIES_WOBBUFFET) { Speed(80); } } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } } SCENE { // turn 1 @@ -669,7 +670,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") OPPONENT(SPECIES_WOBBUFFET) {Speed(100); } OPPONENT(SPECIES_WOBBUFFET) { Speed(99); } } WHEN { - TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); \ + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \ MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); \ @@ -708,7 +709,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft, dynamax: TRUE); \ + TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft); \ MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } @@ -746,7 +747,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_EMBER, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_EMBER, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Flare!"); MESSAGE("The sunlight got bright!"); @@ -762,7 +763,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_WATER_GUN, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_WATER_GUN, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Geyser!"); MESSAGE("It started to rain!"); @@ -778,7 +779,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_POWDER_SNOW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_POWDER_SNOW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Hailstorm!"); MESSAGE("It started to hail!"); @@ -794,7 +795,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_ROCK_THROW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_ROCK_THROW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Rockfall!"); MESSAGE("A sandstorm brewed!"); @@ -812,7 +813,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; } WHEN { - TURN { MOVE(player, MOVE_VINE_WHIP, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_VINE_WHIP); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Overgrowth!"); @@ -831,7 +832,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC); } } SCENE { MESSAGE("Foe Wobbuffet used Extreme Speed!"); @@ -848,7 +849,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_THUNDERBOLT, dynamax: TRUE); MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Max Lightning!"); MESSAGE("Foe Wobbuffet used Spore!"); @@ -863,7 +864,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") OPPONENT(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_MOONBLAST, dynamax: TRUE); MOVE(opponent, MOVE_TOXIC); } + TURN { MOVE(player, MOVE_MOONBLAST, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Max Starfall!"); MESSAGE("Foe Wobbuffet used Toxic!"); @@ -879,7 +880,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_LIQUIDATION, dynamax: TRUE); } + TURN { MOVE(player, MOVE_LIQUIDATION, gimmick: GIMMICK_DYNAMAX); } TURN { SWITCH(opponent, 1); } } SCENE { // turn 1 @@ -899,7 +900,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_HATTERENE); } WHEN { - TURN { MOVE(player, MOVE_IRON_HEAD, dynamax: TRUE); } + TURN { MOVE(player, MOVE_IRON_HEAD, gimmick: GIMMICK_DYNAMAX); } TURN { SWITCH(opponent, 1); } TURN { } // wait out Dynamax TURN { MOVE(opponent, MOVE_DEFOG); } @@ -929,7 +930,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili PLAYER(SPECIES_INTELEON) { GigantamaxFactor(TRUE); } OPPONENT(SPECIES_ARCTOVISH) { Ability(ABILITY_WATER_ABSORB); } } WHEN { - TURN { MOVE(player, move, dynamax: TRUE); } + TURN { MOVE(player, move, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Inteleon used G-Max Hydrosnipe!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -947,7 +948,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Pikachu used G-Max Volt Crash!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); @@ -974,7 +975,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE, \ + TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX, \ WITH_RNG(RNG_G_MAX_STUN_SHOCK, rng)); } } SCENE { MESSAGE("Toxtricity used G-Max Stun Shock!"); @@ -1011,7 +1012,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri OPPONENT(SPECIES_GARBODOR); OPPONENT(SPECIES_TRUBBISH); } WHEN { - TURN { MOVE(playerLeft, MOVE_NUZZLE, target: opponentLeft, dynamax: TRUE, \ + TURN { MOVE(playerLeft, MOVE_NUZZLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX, \ WITH_RNG(RNG_G_MAX_STUN_SHOCK, STATUS1_POISON)); } } SCENE { MESSAGE("Toxtricity used G-Max Stun Shock!"); @@ -1044,7 +1045,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_BUG_BITE, target: opponentLeft, dynamax: TRUE, + TURN { MOVE(playerLeft, MOVE_BUG_BITE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX, WITH_RNG(RNG_G_MAX_BEFUDDLE, rng)); } } SCENE { MESSAGE("Butterfree used G-Max Befuddle!"); @@ -1088,7 +1089,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Meowth used G-Max Gold Rush!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); @@ -1108,7 +1109,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Hatterene used G-Max Smite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); @@ -1127,7 +1128,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); } OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_MALE); } } WHEN { - TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Eevee used G-Max Cuddle!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft); @@ -1148,7 +1149,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Gengar used G-Max Terror!"); MESSAGE("Foe Wobbuffet can't escape now!"); @@ -1169,7 +1170,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); } OPPONENT(SPECIES_WYNAUT) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); } } WHEN { - TURN { MOVE(playerLeft, MOVE_IRON_HEAD, target: opponentLeft, dynamax: TRUE); \ + TURN { MOVE(playerLeft, MOVE_IRON_HEAD, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); } TURN { MOVE(playerLeft, MOVE_CELEBRATE, target: opponentLeft); \ MOVE(opponentLeft, MOVE_SPLASH, allowed: FALSE); \ @@ -1207,7 +1208,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_ARCANINE); } WHEN { - TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } TURN { } TURN { SWITCH(opponentLeft, 2); } TURN { } @@ -1256,7 +1257,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t MOVE(playerRight, MOVE_STUFF_CHEEKS); \ MOVE(opponentLeft, MOVE_STUFF_CHEEKS); \ MOVE(opponentRight, MOVE_STUFF_CHEEKS); } - TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { // turn 1 MESSAGE("Using Apicot Berry, the Sp. Def of Snorlax rose!"); @@ -1281,7 +1282,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") OPPONENT(SPECIES_BLISSEY); OPPONENT(SPECIES_CHANSEY); } WHEN { - TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } TURN { } } SCENE { // turn 1 @@ -1304,7 +1305,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Alcremie used G-Max Finale!"); HP_BAR(playerLeft, captureDamage: &damage1); @@ -1324,7 +1325,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_VINE_WHIP, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_VINE_WHIP, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Appletun used G-Max Sweetness!"); STATUS_ICON(playerLeft, none: TRUE); @@ -1345,7 +1346,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_FLAME_CHARGE, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_FLAME_CHARGE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } TURN { SWITCH(playerLeft, 2); } } SCENE { // turn 1 @@ -1373,7 +1374,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft); } TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft); \ MOVE(playerRight, MOVE_FOCUS_ENERGY); } @@ -1406,7 +1407,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's OPPONENT(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Foe Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); @@ -1428,11 +1429,11 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" OPPONENT(SPECIES_WYNAUT); } WHEN { if (protect) - TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \ - MOVE(opponentLeft, MOVE_PROTECT, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ + MOVE(opponentLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); } else - TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \ - MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, dynamax: TRUE); } + TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ + MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { if (protect) MESSAGE("Foe Wobbuffet used Max Guard!"); @@ -1453,8 +1454,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Flare doesn't softlock the game when fainting OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE); - MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, dynamax: TRUE); + TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); + MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, gimmick: GIMMICK_DYNAMAX); SEND_OUT(playerRight, 2); } TURN { } } @@ -1466,7 +1467,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; } WHEN { - TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); @@ -1483,7 +1484,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, dynamax: TRUE); SEND_OUT(opponent, 1); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, gimmick: GIMMICK_DYNAMAX); SEND_OUT(opponent, 1); } } SCENE { MESSAGE("Foe Wobbuffet fainted!"); ABILITY_POPUP(player, ABILITY_MOXIE); diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 5b53eb6373..f14c398b64 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -6,13 +6,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type preserves other STAB boosts", s16 damage1, s16 damage2) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_BULBASAUR) { TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_VINE_WHIP, tera: tera); } + TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: tera); } TURN { MOVE(player, MOVE_SLUDGE_BOMB); } } SCENE { MESSAGE("Bulbasaur used Vine Whip!"); @@ -30,13 +30,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type preserves other SINGLE_BATTLE_TEST("(TERA) Terastallizing does not affect the power of non-STAB moves", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HEADBUTT, tera: tera); } + TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Headbutt!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); @@ -49,13 +49,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing does not affect the power of non-STAB SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type gives that type 1.5x STAB", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HEADBUTT, tera: tera); } + TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Headbutt!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); @@ -69,13 +69,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type gives that type SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type gives that type 2x STAB", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_PSYCHIC, tera: tera); } + TURN { MOVE(player, MOVE_PSYCHIC, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Psychic!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, player); @@ -89,13 +89,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type gives that type 2x SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptability gives 2.0x STAB", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HEADBUTT, tera: tera); } + TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } } SCENE { MESSAGE("Crawdaunt used Headbutt!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); @@ -109,13 +109,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptabilit SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability gives 2.25x STAB", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_WATER); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_WATER_PULSE, tera: tera); } + TURN { MOVE(player, MOVE_WATER_PULSE, gimmick: tera); } } SCENE { MESSAGE("Crawdaunt used Water Pulse!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player); @@ -129,14 +129,14 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability g SINGLE_BATTLE_TEST("(TERA) Terastallizing boosts moves of the same type to 60 BP", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { ASSUME(gMovesInfo[MOVE_ABSORB].power == 20); PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_ABSORB, tera: tera); } + TURN { MOVE(player, MOVE_ABSORB, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Absorb!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); @@ -150,14 +150,14 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing boosts moves of the same type to 60 BP SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technician", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { ASSUME(gMovesInfo[MOVE_MEGA_DRAIN].power == 40); PLAYER(SPECIES_MR_MIME) { Ability(ABILITY_TECHNICIAN); TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_MEGA_DRAIN, tera: tera); } + TURN { MOVE(player, MOVE_MEGA_DRAIN, gimmick: tera); } } SCENE { MESSAGE("Mr. Mime used Mega Drain!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_DRAIN, player); @@ -171,13 +171,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technicia SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technician", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_MR_MIME) { Ability(ABILITY_TECHNICIAN); TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_STORED_POWER, tera: tera); } + TURN { MOVE(player, MOVE_STORED_POWER, gimmick: tera); } } SCENE { MESSAGE("Mr. Mime used Stored Power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STORED_POWER, player); @@ -191,13 +191,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technicia SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to multi-hit moves", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_FURY_SWIPES, tera: tera); } + TURN { MOVE(player, MOVE_FURY_SWIPES, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Fury Swipes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, player); @@ -210,13 +210,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to mult SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to priority moves", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_QUICK_ATTACK, tera: tera); } + TURN { MOVE(player, MOVE_QUICK_ATTACK, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Quick Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); @@ -231,13 +231,13 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to prio SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: tera); MOVE(opponent, MOVE_WATER_GUN); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_WATER_GUN); } } SCENE { MESSAGE("Foe Wobbuffet used Water Gun!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); @@ -253,7 +253,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness") PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_FLYING); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { MESSAGE("Foe Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); @@ -268,7 +268,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization persists across switches") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); } TURN { SWITCH(player, 1); } TURN { SWITCH(player, 0); } TURN { MOVE(opponent, MOVE_EARTHQUAKE); } @@ -292,7 +292,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes the effect of Curse") PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CURSE, tera: TRUE); } + TURN { MOVE(player, MOVE_CURSE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Curse!"); HP_BAR(player); @@ -307,7 +307,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove the user's Flying type while Te PLAYER(SPECIES_ZAPDOS) { HP(1); TeraType(TYPE_FLYING); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_ROOST, tera: TRUE); MOVE(opponent, MOVE_ICE_BEAM); } + TURN { MOVE(player, MOVE_ROOST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ICE_BEAM); } } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); @@ -327,7 +327,7 @@ SINGLE_BATTLE_TEST("(TERA) Type-changing moves fail against a Terastallized Poke PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, move); } } SCENE { if (move != MOVE_SOAK) NOT { ANIMATION(ANIM_TYPE_MOVE, move, opponent); } @@ -341,7 +341,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type fails if used by a Terastallized Pokemon PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_REFLECT_TYPE, tera: TRUE); } + TURN { MOVE(player, MOVE_REFLECT_TYPE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Reflect Type!"); MESSAGE("But it failed!"); @@ -354,7 +354,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion fails if used by a Terastallized Pokemon") PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CONVERSION, tera: TRUE); } + TURN { MOVE(player, MOVE_CONVERSION, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Conversion!"); MESSAGE("But it failed!"); @@ -368,7 +368,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if used by a Terastallized Pokemon" OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_CONVERSION_2, tera: TRUE); } + TURN { MOVE(player, MOVE_CONVERSION_2, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); @@ -381,7 +381,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Terastallized Pokemon's Tera Ty PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, tera: TRUE); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } TURN { MOVE(opponent, MOVE_REFLECT_TYPE); } TURN { MOVE(player, MOVE_TACKLE); } } SCENE { @@ -401,8 +401,8 @@ SINGLE_BATTLE_TEST("(TERA) Synchronoise uses a Terastallized Pokemon's Tera Type PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } OPPONENT(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } } WHEN { - TURN { MOVE(opponent, MOVE_SYNCHRONOISE); MOVE(player, MOVE_CELEBRATE, tera: TRUE); } - TURN { MOVE(opponent, MOVE_SYNCHRONOISE, tera: TRUE); } + TURN { MOVE(opponent, MOVE_SYNCHRONOISE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + TURN { MOVE(opponent, MOVE_SYNCHRONOISE, gimmick: GIMMICK_TERA); } } SCENE { // turn 1 MESSAGE("Foe Wobbuffet used Synchronoise!"); @@ -420,7 +420,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Terastallized Pokemon's Tera PLAYER(SPECIES_ORICORIO) { TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_GENGAR); } WHEN { - TURN { MOVE(player, MOVE_REVELATION_DANCE, tera: TRUE); } + TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); MESSAGE("It doesn't affect Foe Gengar…"); @@ -439,7 +439,7 @@ SINGLE_BATTLE_TEST("(TERA) Double Shock does not remove the user's Electric type OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); } - TURN { MOVE(player, MOVE_DOUBLE_SHOCK, tera: TRUE); MOVE(opponent, MOVE_RECOVER); } + TURN { MOVE(player, MOVE_DOUBLE_SHOCK, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_RECOVER); } TURN { SWITCH(player, 0); MOVE(opponent, MOVE_RECOVER); } @@ -479,9 +479,9 @@ SINGLE_BATTLE_TEST("(TERA) Transform does not copy the target's Tera Type, and i PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_TACKLE, MOVE_EARTHQUAKE); TeraType(TYPE_GHOST); } OPPONENT(SPECIES_DITTO) { TeraType(TYPE_FLYING); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); MOVE(opponent, MOVE_TRANSFORM); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_TRANSFORM); } TURN { MOVE(player, MOVE_EARTHQUAKE); } - // TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE, target: player, tera: TRUE); } + // TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE, target: player, gimmick: GIMMICK_TERA); } } SCENE { // turn 2 MESSAGE("Wobbuffet used Earthquake!"); @@ -498,13 +498,13 @@ SINGLE_BATTLE_TEST("(TERA) Transform does not copy the target's Tera Type, and i SINGLE_BATTLE_TEST("(TERA) Stellar type does not change the user's defensive profile", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: tera); MOVE(opponent, MOVE_PSYCHIC); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_PSYCHIC); } } SCENE { MESSAGE("Foe Wobbuffet used Psychic!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, opponent); @@ -520,7 +520,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Stellar-type Pokemon's base typ PLAYER(SPECIES_BANETTE) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, tera: TRUE); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } TURN { MOVE(opponent, MOVE_REFLECT_TYPE); } TURN { MOVE(player, MOVE_TACKLE); } } SCENE { @@ -541,7 +541,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Stellar-type Pokemon's base t PLAYER(SPECIES_ORICORIO_SENSU) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_GUMSHOOS); } WHEN { - TURN { MOVE(player, MOVE_REVELATION_DANCE, tera: TRUE); } + TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); MESSAGE("It doesn't affect Foe Gumshoos…"); @@ -555,7 +555,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move" PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } TURN { MOVE(opponent, MOVE_CONVERSION_2); } } SCENE { // turn 1 @@ -573,7 +573,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove Flying-type ground immunity whe PLAYER(SPECIES_ZAPDOS) { HP(1); TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_ROOST, tera: TRUE); MOVE(opponent, MOVE_ICE_BEAM); } + TURN { MOVE(player, MOVE_ROOST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ICE_BEAM); } } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); @@ -591,7 +591,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar-type provides a one-t OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_EXTRASENSORY); } - TURN { MOVE(player, MOVE_EXTRASENSORY, tera: TRUE); } + TURN { MOVE(player, MOVE_EXTRASENSORY, gimmick: GIMMICK_TERA); } TURN { MOVE(player, MOVE_EXTRASENSORY); } } SCENE { // turn 1 @@ -621,7 +621,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar-type provides a one-t OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TAKE_DOWN); } - TURN { MOVE(player, MOVE_TAKE_DOWN, tera: TRUE); } + TURN { MOVE(player, MOVE_TAKE_DOWN, gimmick: GIMMICK_TERA); } TURN { MOVE(player, MOVE_TAKE_DOWN); } } SCENE { // turn 1 @@ -652,7 +652,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar type boosts all moves OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_MEGA_DRAIN); } - TURN { MOVE(player, MOVE_MEGA_DRAIN, tera: TRUE); } + TURN { MOVE(player, MOVE_MEGA_DRAIN, gimmick: GIMMICK_TERA); } TURN { MOVE(player, MOVE_MEGA_DRAIN); } TURN { MOVE(player, MOVE_BUBBLE); } } SCENE { @@ -686,7 +686,7 @@ SINGLE_BATTLE_TEST("(TERA) Protean cannot change the type of a Terastallized Pok PLAYER(SPECIES_GRENINJA) { Ability(ABILITY_PROTEAN); TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_BUBBLE, tera: TRUE); + TURN { MOVE(player, MOVE_BUBBLE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EMBER); } } SCENE { MESSAGE("Greninja used Bubble!"); @@ -702,7 +702,7 @@ SINGLE_BATTLE_TEST("(TERA) Status moves don't expend Stellar's one-time type boo PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_GROWL, tera: TRUE); } + TURN { MOVE(player, MOVE_GROWL, gimmick: GIMMICK_TERA); } TURN { MOVE(player, MOVE_TAKE_DOWN); } TURN { MOVE(player, MOVE_TAKE_DOWN); } } SCENE { @@ -730,7 +730,7 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type's one-time boost factors in dynamically- PLAYER(SPECIES_PELIPPER) { Ability(ABILITY_DRIZZLE); TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_WEATHER_BALL, tera: TRUE); MOVE(opponent, MOVE_RECOVER); } + TURN { MOVE(player, MOVE_WEATHER_BALL, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_TAKE_DOWN); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_TAKE_DOWN); MOVE(opponent, MOVE_RECOVER); } TURN { MOVE(player, MOVE_WATER_PULSE); MOVE(opponent, MOVE_RECOVER); } @@ -762,6 +762,89 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type's one-time boost factors in dynamically- } } +SINGLE_BATTLE_TEST("(TERA) Terapagos retains the Stellar type boost at all times") +{ + s16 damage[2]; + u32 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_MACH_PUNCH; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_MACH_PUNCH].type != TYPE_NORMAL); + PLAYER(SPECIES_TERAPAGOS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move, gimmick: GIMMICK_TERA); } + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("(TERA) Terapagos retains its base defensive profile when Terastalizing") +{ + GIVEN { + PLAYER(SPECIES_TERAPAGOS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_BRICK_BREAK); } + } SCENE { + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("(TERA) Illusion breaks if the pokemon Terastalizes") +{ + KNOWN_FAILING; // #5015 + u32 species; + PARAMETRIZE { species = SPECIES_TERAPAGOS; } + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + GIVEN { + PLAYER(SPECIES_ZOROARK) { TeraType(TYPE_DARK); } + PLAYER(species); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } SCENE { + MESSAGE("Zoroark's Illusion wore off!"); + } +} + +/* +// This test freezes the emulator +SINGLE_BATTLE_TEST("(TERA) Transformed pokemon can't Terastalize") +{ + GIVEN { + PLAYER(SPECIES_DITTO); + OPPONENT(SPECIES_TERAPAGOS) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_TRANSFORM); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } +} +*/ + +SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing") +{ + u32 species, targetSpecies; + PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; targetSpecies = SPECIES_OGERPON_TEAL_MASK_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; targetSpecies = SPECIES_OGERPON_WELLSPRING_MASK_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; targetSpecies = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; } + PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; } + GIVEN { + PLAYER(species); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } THEN { + EXPECT_EQ(player->species, targetSpecies); + } +} + SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly") { u32 type; @@ -790,24 +873,38 @@ SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly") PLAYER(SPECIES_WOBBUFFET) { TeraType(type); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } } -SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing") +SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly - Opponent") { - u32 species, targetSpecies; - PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; targetSpecies = SPECIES_OGERPON_TEAL_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; targetSpecies = SPECIES_OGERPON_WELLSPRING_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; targetSpecies = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; } - PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; } + u32 type; + PARAMETRIZE { type = TYPE_NONE; } + PARAMETRIZE { type = TYPE_NORMAL; } + PARAMETRIZE { type = TYPE_FIGHTING; } + PARAMETRIZE { type = TYPE_FLYING; } + PARAMETRIZE { type = TYPE_POISON; } + PARAMETRIZE { type = TYPE_GROUND; } + PARAMETRIZE { type = TYPE_ROCK; } + PARAMETRIZE { type = TYPE_BUG; } + PARAMETRIZE { type = TYPE_GHOST; } + PARAMETRIZE { type = TYPE_STEEL; } + PARAMETRIZE { type = TYPE_MYSTERY; } + PARAMETRIZE { type = TYPE_FIRE; } + PARAMETRIZE { type = TYPE_WATER; } + PARAMETRIZE { type = TYPE_GRASS; } + PARAMETRIZE { type = TYPE_ELECTRIC; } + PARAMETRIZE { type = TYPE_PSYCHIC; } + PARAMETRIZE { type = TYPE_ICE; } + PARAMETRIZE { type = TYPE_DRAGON; } + PARAMETRIZE { type = TYPE_DARK; } + PARAMETRIZE { type = TYPE_FAIRY; } + PARAMETRIZE { type = TYPE_STELLAR; } GIVEN { - PLAYER(species); - OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { TeraType(type); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, tera: TRUE); } - } THEN { - EXPECT_EQ(player->species, targetSpecies); + TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } } diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c new file mode 100644 index 0000000000..bde241bfd7 --- /dev/null +++ b/test/battle/gimmick/zmove.c @@ -0,0 +1,601 @@ +#include "global.h" +#include "test/battle.h" +#include "constants/battle_z_move_effects.h" + +// Basic Functionality +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves do not retain priority") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); + MOVE(player, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves are not affected by -ate abilities") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[1] == TYPE_FLYING); + PLAYER(SPECIES_AURORUS) { Ability(ABILITY_REFRIGERATE); Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_SWELLOW); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + NOT { MESSAGE("It's super effective!"); } + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves are affected by Ion Deluge") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_ION_DELUGE].effect == EFFECT_ION_DELUGE); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_SWELLOW); + } WHEN { + TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves deal 1/4 damage through protect", s16 damage) +{ + bool32 protected; + PARAMETRIZE { protected = TRUE; } + PARAMETRIZE { protected = FALSE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_PROTECT].effect == EFFECT_PROTECT); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (protected) + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); MOVE(opponent, MOVE_PROTECT); } + else + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4), results[1].damage); + } +} + +// Status Z-Effects +SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_RESET_STATS clears a battler's negative stat stages") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_LEECH_SEED].zMove.effect == Z_EFFECT_RESET_STATS); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(player, MOVE_LEECH_SEED, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_ALL_STATS_UP raises all of a battler's stat stages by one") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CELEBRATE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_CELEBRATE].zMove.effect == Z_EFFECT_ALL_STATS_UP_1); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_BOOST_CRITS raises a battler's critical hit ratio") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gMovesInfo[MOVE_FORESIGHT].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_FORESIGHT].zMove.effect == Z_EFFECT_BOOST_CRITS); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FORESIGHT, gimmick: GIMMICK_Z_MOVE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESIGHT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +DOUBLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_FOLLOW_ME redirects attacks to the user") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DESTINY_BOND].type == TYPE_GHOST); + ASSUME(gMovesInfo[MOVE_DESTINY_BOND].zMove.effect == Z_EFFECT_FOLLOW_ME); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GHOSTIUM_Z); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DESTINY_BOND, gimmick: GIMMICK_Z_MOVE); + MOVE(opponentLeft, MOVE_TACKLE, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + NOT { HP_BAR(playerRight); } + HP_BAR(playerLeft); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_RESTORE_REPLACEMENT_HP fully heals the replacement battler's HP") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_PARTING_SHOT].type == TYPE_DARK); + ASSUME(gMovesInfo[MOVE_PARTING_SHOT].zMove.effect == Z_EFFECT_RESTORE_REPLACEMENT_HP); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_DARKINIUM_Z); } + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PARTING_SHOT, gimmick: GIMMICK_Z_MOVE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PARTING_SHOT, player); + HP_BAR(player); + } THEN { + EXPECT_EQ(player->species, SPECIES_WYNAUT); + EXPECT_EQ(player->hp, player->maxHP); + } +} + +// This tests the functionality of Z_EFFECT_RECOVER_HP and Z_EFFECT_ATK_UP_1 (and thus by extension all stat-up Z-effects) +SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_CURSE activates Z_EFFECT_RECOVER_HP or Z_EFFECT_ATK_UP_1 depending on the type of the battler") +{ + u32 species; + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + PARAMETRIZE { species = SPECIES_DUSCLOPS; } + GIVEN { + ASSUME(gMovesInfo[MOVE_CURSE].type == TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_DUSCLOPS].types[0] == TYPE_GHOST); + ASSUME(gMovesInfo[MOVE_CURSE].zMove.effect == Z_EFFECT_CURSE); + PLAYER(species) { Item(ITEM_GHOSTIUM_Z); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CURSE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + if (species == SPECIES_DUSCLOPS) { + HP_BAR(player); + NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player); + HP_BAR(player); + } else { + NOT { HP_BAR(player); } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player); + NOT { HP_BAR(player); } + } + } THEN { + if (species == SPECIES_DUSCLOPS) { + EXPECT_MUL_EQ(player->maxHP, UQ_4_12(0.50), player->hp); // heal to full HP then cut by half + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } else { + EXPECT_EQ(player->hp, 1); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); // +1 from Curse, +1 from Z-Effect + } + } +} + +// Specific Z-Move Interactions +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Mirror Move raises the user's attack by two stages and copies the last used non-status move as a Z-Move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].type == TYPE_FLYING); + ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].zMove.effect == Z_EFFECT_ATK_UP_2); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_FLYINIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_MIRROR_MOVE, gimmick: GIMMICK_Z_MOVE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + // extra turn to make sure that everything resets properly + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Mirror Move raises the user's attack by two stages and copies the last used status move regularly") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].type == TYPE_FLYING); + ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].zMove.effect == Z_EFFECT_ATK_UP_2); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_FLYINIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SCREECH); MOVE(player, MOVE_MIRROR_MOVE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); // Z-Screech would cause an additional attack stat stage (reaching +3) + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Copycat raises the user's accuracy by one stage and copies the last used non-status move as a Z-Move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_COPYCAT].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_COPYCAT].zMove.effect == Z_EFFECT_ACC_UP_1); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_COPYCAT, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ACC], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Me First raises the user's speed by two stages and copies the last used non-status move as a Z-Move with boosted damage", s16 damage) +{ + u32 meFirst; + PARAMETRIZE { meFirst = TRUE; } + PARAMETRIZE { meFirst = FALSE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_ME_FIRST].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_ME_FIRST].zMove.effect == Z_EFFECT_SPD_UP_2); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (meFirst) + TURN { MOVE(player, MOVE_ME_FIRST, gimmick: GIMMICK_Z_MOVE); MOVE(opponent, MOVE_TACKLE); } + else + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + if (meFirst) + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (meFirst) + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, UQ_4_12(1.50), results[0].damage); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Nature Power transforms into different Z-Moves based on the current terrain") +{ + u32 terrainMove = MOVE_NONE; + u32 zMove = MOVE_NONE; + PARAMETRIZE { terrainMove = MOVE_ELECTRIC_TERRAIN; zMove = gTypesInfo[TYPE_ELECTRIC].zMove; } + PARAMETRIZE { terrainMove = MOVE_PSYCHIC_TERRAIN; zMove = gTypesInfo[TYPE_PSYCHIC].zMove; } + PARAMETRIZE { terrainMove = MOVE_GRASSY_TERRAIN; zMove = gTypesInfo[TYPE_GRASS].zMove; } + PARAMETRIZE { terrainMove = MOVE_MISTY_TERRAIN; zMove = gTypesInfo[TYPE_FAIRY].zMove; } + GIVEN { + ASSUME(gMovesInfo[MOVE_NATURE_POWER].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, terrainMove); } + TURN { MOVE(player, MOVE_NATURE_POWER, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, terrainMove, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, zMove, player); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Hidden Power always transforms into Breakneck Blitz") +{ + u8 iv; + PARAMETRIZE { iv = 0; } // test different Hidden Power types + PARAMETRIZE { iv = 10; } + PARAMETRIZE { iv = 21; } + PARAMETRIZE { iv = 31; } + GIVEN { + ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); AttackIV(iv); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HIDDEN_POWER, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Weather Ball transforms into different Z-Moves based on current weather") +{ + u32 weatherMove = MOVE_NONE; + u32 zMove = MOVE_NONE; + PARAMETRIZE { weatherMove = MOVE_RAIN_DANCE; zMove = gTypesInfo[TYPE_WATER].zMove; } + PARAMETRIZE { weatherMove = MOVE_SUNNY_DAY; zMove = gTypesInfo[TYPE_FIRE].zMove; } + PARAMETRIZE { weatherMove = MOVE_SANDSTORM; zMove = gTypesInfo[TYPE_ROCK].zMove; } + PARAMETRIZE { weatherMove = MOVE_HAIL; zMove = gTypesInfo[TYPE_ICE].zMove; } + GIVEN { + ASSUME(gMovesInfo[MOVE_WEATHER_BALL].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, weatherMove); } + TURN { MOVE(player, MOVE_WEATHER_BALL, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, weatherMove, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, zMove, player); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Sleep Talk transforms a used non-status move into a Z-Move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SLEEP_TALK].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_ABSORB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK, gimmick: GIMMICK_Z_MOVE); } + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BLOOM_DOOM, player); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Sleep Talk turns Weather Ball into Breakneck Blitz even under rain") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SLEEP_TALK].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_WEATHER_BALL); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_SLEEP_TALK, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } +} + +// Miscellaneous Interactions +DOUBLE_BATTLE_TEST("(Z-MOVE) Instruct fails if the target last used a Z-Move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_Z_MOVE); + MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, playerLeft); + MESSAGE("Wynaut used Instruct!"); + MESSAGE("But it failed!"); + } +} + +DOUBLE_BATTLE_TEST("(Z-MOVE) Dancer does not use a Z-Move if the battler has used a Z-Move the same turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Item(ITEM_NORMALIUM_Z); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_Z_MOVE); + MOVE(playerRight, MOVE_FIERY_DANCE, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); + ABILITY_POPUP(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); + } +} + +// Signature Z-Moves +SINGLE_BATTLE_TEST("(Z-MOVE) Light That Burns the Sky uses the battler's highest attacking stat", s16 damage) +{ + bool32 useSwordsDance; + PARAMETRIZE { useSwordsDance = FALSE; } + PARAMETRIZE { useSwordsDance = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1000); MaxHP(1000); }; // hits hard lol + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_ULTRA_BURST); } + if (useSwordsDance) + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_PHOTON_GEYSER, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); // implicitly testing double gimmicks :^) + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_THAT_BURNS_THE_SKY, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) 10,000,000 Volt Thunderbolt has an increased critical hit ratio") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_6); + ASSUME(gMovesInfo[MOVE_10_000_000_VOLT_THUNDERBOLT].criticalHitStage == 2); + PLAYER(SPECIES_PIKACHU_PARTNER_CAP) { Item(ITEM_PIKASHUNIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_10_000_000_VOLT_THUNDERBOLT, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Stoked Sparksurfer paralyzes the target") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STOKED_SPARKSURFER].additionalEffects[0].moveEffect == MOVE_EFFECT_PARALYSIS); + PLAYER(SPECIES_RAICHU_ALOLA) { Item(ITEM_ALORAICHIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOKED_SPARKSURFER, player); + STATUS_ICON(opponent, STATUS1_PARALYSIS); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Extreme Evoboost boosts all the user's stats by two stages") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXTREME_EVOBOOST].effect == EFFECT_EXTREME_EVOBOOST); + PLAYER(SPECIES_EEVEE) { Item(ITEM_EEVIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_EVOBOOST, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Genesis Supernova sets up psychic terrain") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_GENESIS_SUPERNOVA].effect == EFFECT_HIT_SET_REMOVE_TERRAIN); + PLAYER(SPECIES_MEW) { Item(ITEM_MEWNIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_Z_MOVE); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GENESIS_SUPERNOVA, player); + NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); } + MESSAGE("Mew cannot use Quick Attack!"); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Splintered Stormshards removes terrain") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SPLINTERED_STORMSHARDS].effect == EFFECT_HIT_SET_REMOVE_TERRAIN); + PLAYER(SPECIES_LYCANROC_DUSK) { Item(ITEM_LYCANIUM_Z); } + OPPONENT(SPECIES_TAPU_LELE) { Ability(ABILITY_PSYCHIC_SURGE); HP(1000); MaxHP(1000); } + } WHEN { + TURN { MOVE(player, MOVE_STONE_EDGE, gimmick: GIMMICK_Z_MOVE); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLINTERED_STORMSHARDS, player); + MESSAGE("The weirdness disappeared from the battlefield."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Clangorous Soulblaze boosts all the user's stats by one stage") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CLANGOROUS_SOULBLAZE].additionalEffects[0].moveEffect == MOVE_EFFECT_ALL_STATS_UP); + PLAYER(SPECIES_KOMMO_O) { Item(ITEM_KOMMONIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CLANGING_SCALES, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CLANGOROUS_SOULBLAZE, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Guardian of Alola deals 75\% of the target's current HP") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_GUARDIAN_OF_ALOLA].effect == EFFECT_GUARDIAN_OF_ALOLA); + PLAYER(SPECIES_TAPU_FINI) { Item(ITEM_TAPUNIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_NATURES_MADNESS, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUARDIAN_OF_ALOLA, player); + } THEN { + EXPECT_MUL_EQ(opponent->maxHP, UQ_4_12(0.25), opponent->hp); + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Searing Sunraze Smash ignores the target's abilities") +{ + GIVEN { + PLAYER(SPECIES_SOLGALEO) { Item(ITEM_SOLGANIUM_Z); } + OPPONENT(SPECIES_LAPRAS) { Ability(ABILITY_BATTLE_ARMOR); } + } WHEN { + TURN { MOVE(player, MOVE_SUNSTEEL_STRIKE, gimmick: GIMMICK_Z_MOVE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SEARING_SUNRAZE_SMASH, player); + HP_BAR(opponent); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/item_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c similarity index 93% rename from test/battle/item_effect/covert_cloak.c rename to test/battle/hold_effect/covert_cloak.c index 4e00ece8f5..e15bca3b9f 100644 --- a/test/battle/item_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -1,6 +1,11 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_COVERT_CLOAK].holdEffect == HOLD_EFFECT_COVERT_CLOAK); +} + SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects") { u16 move; @@ -162,3 +167,15 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles") } } } + +SINGLE_BATTLE_TEST("Covert Cloak does not prevent ability stat changes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); } + OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet's Speed fell!"); + } +} diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 93921ce9c1..d00d891e26 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Rawst and Lum Berries cure burn") } } -SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze") +SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze or frostbite") { u16 item; @@ -88,9 +88,9 @@ SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_PUNCH, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - STATUS_ICON(opponent, freeze: FALSE); + FREEZE_OR_FROSTBURN_STATUS(opponent, FALSE); } } @@ -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 135ec270b3..52326cc60f 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -73,3 +73,18 @@ DOUBLE_BATTLE_TEST("Mirror Herb does not trigger for Ally's Soul Heart's stat ra EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); } } + +SINGLE_BATTLE_TEST("Mirror Herb copies the boost gained by an ability") +{ + GIVEN { + PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index f73bbae327..6c7cc2e64d 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 80719cf231..70dc8322db 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/move.c b/test/battle/move.c index 936a821081..228a09a7c6 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -66,10 +66,9 @@ SINGLE_BATTLE_TEST("Turn order is determined by Speed if priority ties") } } -SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie") +SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [singles]") { - KNOWN_FAILING; // The algorithm is significantly biased. - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_SPEED_TIE); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } @@ -81,6 +80,60 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie" } } +DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]") +{ + struct BattlePokemon *order[4] = { NULL, NULL, NULL, NULL }; + u32 a, b, c, d; + + // TODO: Test all of these in a single PASSES_RANDOMLY pass rather + // than 24 PARAMETRIZEd passes. + PARAMETRIZE { a = 0; b = 1; c = 2; d = 3; } + PARAMETRIZE { a = 0; b = 1; c = 3; d = 2; } + PARAMETRIZE { a = 0; b = 2; c = 1; d = 3; } + PARAMETRIZE { a = 0; b = 2; c = 3; d = 1; } + PARAMETRIZE { a = 0; b = 3; c = 1; d = 2; } + PARAMETRIZE { a = 0; b = 3; c = 2; d = 1; } + PARAMETRIZE { a = 1; b = 0; c = 2; d = 3; } + PARAMETRIZE { a = 1; b = 0; c = 3; d = 2; } + PARAMETRIZE { a = 1; b = 2; c = 0; d = 3; } + PARAMETRIZE { a = 1; b = 2; c = 3; d = 0; } + PARAMETRIZE { a = 1; b = 3; c = 0; d = 2; } + PARAMETRIZE { a = 1; b = 3; c = 2; d = 0; } + PARAMETRIZE { a = 2; b = 0; c = 1; d = 3; } + PARAMETRIZE { a = 2; b = 0; c = 3; d = 1; } + PARAMETRIZE { a = 2; b = 1; c = 0; d = 3; } + PARAMETRIZE { a = 2; b = 1; c = 3; d = 0; } + PARAMETRIZE { a = 2; b = 3; c = 0; d = 1; } + PARAMETRIZE { a = 2; b = 3; c = 1; d = 0; } + PARAMETRIZE { a = 3; b = 0; c = 1; d = 2; } + PARAMETRIZE { a = 3; b = 0; c = 2; d = 1; } + PARAMETRIZE { a = 3; b = 1; c = 0; d = 2; } + PARAMETRIZE { a = 3; b = 1; c = 2; d = 0; } + PARAMETRIZE { a = 3; b = 2; c = 0; d = 1; } + PARAMETRIZE { a = 3; b = 2; c = 1; d = 0; } + + order[a] = playerLeft; + order[b] = playerRight; + order[c] = opponentLeft; + order[d] = opponentRight; + + PASSES_RANDOMLY(1, 24, RNG_SPEED_TIE); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WYNAUT) { Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SPLASH); MOVE(playerRight, MOVE_SPLASH); MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[1]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[2]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[3]); + } +} + SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") { ASSUME(B_CRIT_CHANCE >= GEN_7); diff --git a/test/battle/move_effect/acrobatics.c b/test/battle/move_effect/acrobatics.c index bc34719a42..70953d0958 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 025a0cb86f..102f4d4d21 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 fa4190dbdf..3d601f3583 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/embargo.c b/test/battle/move_effect/embargo.c index f25c88b827..11e4069d80 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); @@ -342,7 +342,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") } WHEN { TURN { MOVE(player, MOVE_EMBARGO); } TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } - TURN { MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c new file mode 100644 index 0000000000..d222325a7b --- /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/focus_punch.c b/test/battle/move_effect/focus_punch.c index 5bfb606b0f..355c071a94 100644 --- a/test/battle/move_effect/focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -74,3 +74,28 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") MESSAGE("Foe Wobbuffet lost its focus and couldn't move!"); } } + +AI_SINGLE_BATTLE_TEST("AI won't use Focus Punch if it predicts a damaging move") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MAGNEZONE) { Moves(MOVE_THUNDER_WAVE, MOVE_FLASH_CANNON, MOVE_DISCHARGE, MOVE_TRI_ATTACK); } + OPPONENT(SPECIES_BRELOOM) { Moves(MOVE_FOCUS_PUNCH, MOVE_SEED_BOMB); } + } WHEN { + TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_FOCUS_PUNCH); } + TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SEED_BOMB); } + } +} + +AI_SINGLE_BATTLE_TEST("AI will Incapacitate -> Substitute -> Focus Punch if able") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MAGNEZONE) { Moves(MOVE_THUNDER_WAVE, MOVE_FLASH_CANNON, MOVE_DISCHARGE, MOVE_TRI_ATTACK); } + OPPONENT(SPECIES_BRELOOM) { Moves(MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_SEED_BOMB); } + } WHEN { + TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); } + TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_FOCUS_PUNCH); } + } +} diff --git a/test/battle/move_effect/fury_cutter.c b/test/battle/move_effect/fury_cutter.c new file mode 100644 index 0000000000..b193882d37 --- /dev/null +++ b/test/battle/move_effect/fury_cutter.c @@ -0,0 +1,62 @@ +#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]); + } +} + +SINGLE_BATTLE_TEST("Fury Cutter counter is the same for both hits of Parental Bond") +{ + s16 damage[4]; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PARENTAL_BOND); } + OPPONENT(SPECIES_REGIROCK); + } WHEN { + TURN { MOVE(player, MOVE_FURY_CUTTER); } + TURN { MOVE(player, MOVE_FURY_CUTTER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_CUTTER, player); + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_CUTTER, player); + HP_BAR(opponent, captureDamage: &damage[2]); + HP_BAR(opponent, captureDamage: &damage[3]); + } THEN { + EXPECT_MUL_EQ(damage[0], B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5), damage[1]); + EXPECT_MUL_EQ(damage[2], B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5), damage[3]); + EXPECT_NE(damage[0], damage[2]); + } +} diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index 7c01d0cfd3..8bd6c1f456 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -88,7 +88,7 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user") { - ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_9); + ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8); GIVEN { PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_POISON); } diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index dd1372a017..0c96bd4e75 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!"); @@ -137,7 +138,6 @@ SINGLE_BATTLE_TEST("Held items are consumed immediately after a mon switched in SINGLE_BATTLE_TEST("Held items are consumed immediately after a mon switched in by U-turn and Intimidate activates after it: opposing side") { - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } @@ -149,7 +149,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 ab64667b06..93e147e07d 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/photon_geyser.c b/test/battle/move_effect/photon_geyser.c index 3f46547ee1..986d3865aa 100644 --- a/test/battle/move_effect/photon_geyser.c +++ b/test/battle/move_effect/photon_geyser.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Photon Geyser can be mirror coated if it is a special move") } } -SINGLE_BATTLE_TEST("Photon Geyser can be countered if it is a physcal move") +SINGLE_BATTLE_TEST("Photon Geyser can be countered if it is a physical move") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Attack(110); SpAttack(100); } diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c index a7b1ac5f6a..bdd3ed4f41 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!"); } } @@ -88,7 +87,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric t PLAYER(SPECIES_KRABBY) { Speed(100); } OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } } WHEN { - TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index 1ae84dd088..b4c0186bf0 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 index f0b3dd74dc..13458e39ae 100644 --- a/test/battle/move_effect/shell_side_arm.c +++ b/test/battle/move_effect/shell_side_arm.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Shell Side Arm can be mirror coated if it is special") } } -SINGLE_BATTLE_TEST("Shell Side Arm does not change catogory mid-turn") +SINGLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn") { s16 damage[3]; @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Shell Side Arm does not change catogory mid-turn") } } -DOUBLE_BATTLE_TEST("Shell Side Arm is choosing it's type for each battler on the field") +DOUBLE_BATTLE_TEST("Shell Side Arm chooses its category for each battler on the field") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_SHELL_SIDE_ARM); } diff --git a/test/battle/move_effect/sleep_talk.c b/test/battle/move_effect/sleep_talk.c new file mode 100644 index 0000000000..0a42eb90e9 --- /dev/null +++ b/test/battle/move_effect/sleep_talk.c @@ -0,0 +1,93 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK); + ASSUME(gMovesInfo[MOVE_RAZOR_WIND].sleepTalkBanned == TRUE); + ASSUME(gMovesInfo[MOVE_FLY].sleepTalkBanned == TRUE); + ASSUME(gMovesInfo[MOVE_DIG].sleepTalkBanned == TRUE); +} + +SINGLE_BATTLE_TEST("Sleep Talk fails if not asleep") +{ + u32 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_NONE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(status); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + if (status == STATUS1_SLEEP) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + NOT MESSAGE("But it failed!"); + } + else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + MESSAGE("But it failed!"); + } + } +} + + +SINGLE_BATTLE_TEST("Sleep Talk works if user has Comatose") +{ + + GIVEN { + PLAYER(SPECIES_KOMALA) { Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + NOT MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Sleep Talk fails if no moves work") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_RAZOR_WIND, MOVE_FLY, MOVE_DIG); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Sleep Talk can still use moves with no PP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); MovesWithPP({MOVE_SLEEP_TALK, 10}, {MOVE_TACKLE, 0}, {MOVE_FLY, 10}, {MOVE_DIG, 10}); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + NOT MESSAGE("But it failed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE); + } +} + +SINGLE_BATTLE_TEST("Sleep Talk can use moves while choiced into Sleep Talk") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHOICE_BAND); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_FLY, MOVE_DIG); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + NOT MESSAGE("But it failed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player); + NOT MESSAGE("But it failed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE); + } +} diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index 3642bf936c..8a66003ec7 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -170,7 +170,6 @@ AI_DOUBLE_BATTLE_TEST("Spicy Extract user will use it if partner holds Clear Amu PARAMETRIZE { move = MOVE_TACKLE; } PARAMETRIZE { move = MOVE_SWIFT;} - AI_LOG; GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET) { Speed(10); } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index f0017c3ca7..035568dd75 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 ef8ef3259f..4747074270 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/tera_blast.c b/test/battle/move_effect/tera_blast.c index ca1413d2e8..4fcb52be3a 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Tera Blast changes from Normal-type to the user's Tera Type" PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_DARK); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") PLAYER(SPECIES_WOBBUFFET) { TeraType(type); } OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } } SCENE { if (species == SPECIES_GASTLY && type == TYPE_NORMAL) MESSAGE("It doesn't affect Foe Gastly…"); @@ -75,13 +75,13 @@ SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") SINGLE_BATTLE_TEST("Tera Blast becomes a physical move if the user is Terastallized and has a higher Attack stat", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); Attack(100); SpAttack(50); } OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(200); } } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: tera); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: tera); } } SCENE { MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Stellar-type Tera Blast lowers both offensive stats") PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Stellar-type Tera Blast has 100 BP and a one-time 1.2x boost OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TERA_BLAST); MOVE(opponent, MOVE_RECOVER); } - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } TURN { MOVE(player, MOVE_WORK_UP); } TURN { MOVE(player, MOVE_TERA_BLAST); } } SCENE { @@ -149,7 +149,7 @@ SINGLE_BATTLE_TEST("Stellar-type Tera Blast is super-effective on Stellar-type P PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); MOVE(opponent, MOVE_CELEBRATE, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); @@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Stellar-type Tera Blast activates a Stellar-type Pokemon's W PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_WEAKNESS_POLICY); TeraType(TYPE_NORMAL); } } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); MOVE(opponent, MOVE_CELEBRATE, tera: TRUE); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); @@ -178,7 +178,7 @@ SINGLE_BATTLE_TEST("Flying-type Tera Blast does not have its priority boosted by PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); TeraType(TYPE_FLYING); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); MOVE(opponent, MOVE_QUICK_ATTACK); } + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_QUICK_ATTACK); } } SCENE { MESSAGE("Foe Wobbuffet used Quick Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); diff --git a/test/battle/move_effect/tera_starstorm.c b/test/battle/move_effect/tera_starstorm.c index cad4f9a015..8b1ff41c75 100644 --- a/test/battle/move_effect/tera_starstorm.c +++ b/test/battle/move_effect/tera_starstorm.c @@ -43,14 +43,14 @@ DOUBLE_BATTLE_TEST("Tera Starstorm targets both opponents in a double battle if SINGLE_BATTLE_TEST("Tera Starstorm becomes a physical move if the user is Terapagos-Stellar, is Terastallized, and has a higher Attack stat", s16 damage) { bool32 tera; - PARAMETRIZE { tera = FALSE; } - PARAMETRIZE { tera = TRUE; } + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].category == DAMAGE_CATEGORY_SPECIAL); PLAYER(SPECIES_TERAPAGOS_STELLAR) { Attack(100); SpAttack(50); } OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(200); } } WHEN { - TURN { MOVE(player, MOVE_TERA_STARSTORM, tera: tera); } + TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: tera); } } SCENE { MESSAGE("Terapagos used Tera Starstorm!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player); @@ -59,3 +59,18 @@ SINGLE_BATTLE_TEST("Tera Starstorm becomes a physical move if the user is Terapa EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("Tera Starstorm remains Normal-type if used by Pokemon other than Terapagos") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].type == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_MISDREAVUS].types[0] == TYPE_GHOST); + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } + OPPONENT(SPECIES_MISDREAVUS); + } WHEN { + TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: GIMMICK_TERA); } + } SCENE { + MESSAGE("Wobbuffet used Tera Starstorm!"); + MESSAGE("It doesn't affect Foe Misdreavus…"); + } +} diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index 463fb65af8..338ba90dc0 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -74,13 +74,14 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute") } } -AI_SINGLE_BATTLE_TEST("AI prefers to keep it's substitute over removing hazards if target is slower") +AI_SINGLE_BATTLE_TEST("AI prefers to keep its substitute over removing hazards if target is slower") { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET) { Speed(50); Status1(STATUS1_PARALYSIS); Moves(MOVE_SLEEP_POWDER, MOVE_STEALTH_ROCK, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(MOVE_BITE, MOVE_TACKLE, MOVE_SUBSTITUTE, MOVE_TIDY_UP); } } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_TIDY_UP); } TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); } TURN { EXPECT_MOVE(opponent, MOVE_BITE); } } @@ -93,6 +94,7 @@ AI_SINGLE_BATTLE_TEST("AI will try to remove hazards if slower then target even PLAYER(SPECIES_WOBBUFFET) { Speed(100); Status1(STATUS1_BURN); Moves(MOVE_SLEEP_POWDER, MOVE_STEALTH_ROCK, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_BITE, MOVE_TACKLE, MOVE_SUBSTITUTE, MOVE_TIDY_UP); } } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_TIDY_UP); } TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); } TURN { EXPECT_MOVE(opponent, MOVE_TIDY_UP); } } diff --git a/test/battle/move_effect/toxic.c b/test/battle/move_effect/toxic.c index 35bfaa0644..804ed56b8f 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 9225afb48e..4b7adc6f81 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/upper_hand.c b/test/battle/move_effect/upper_hand.c index 04f2b85225..6a041182fe 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -116,3 +116,19 @@ SINGLE_BATTLE_TEST("Upper Hand is boosted by Sheer Force") HP_BAR(player); } } + +AI_SINGLE_BATTLE_TEST("AI won't use Upper Hand unless it has seen a priority move") +{ + u16 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_QUICK_ATTACK; } + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority == 1); + PLAYER(SPECIES_WOBBUFFET) {Moves(move); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_UPPER_HAND, MOVE_KARATE_CHOP); } + } WHEN { + TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_KARATE_CHOP); } + TURN { MOVE(player, move); EXPECT_MOVE(opponent, move == MOVE_QUICK_ATTACK ? MOVE_UPPER_HAND : MOVE_KARATE_CHOP); } + } +} diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c index 38c902f507..1656b60d87 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 67c361bac0..35c6e73d94 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/freeze.c b/test/battle/move_effect_secondary/freeze.c index d7a182b3d9..1539c8a25b 100644 --- a/test/battle/move_effect_secondary/freeze.c +++ b/test/battle/move_effect_secondary/freeze.c @@ -7,7 +7,11 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_BLIZZARD].accuracy == 70); } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Powder Snow inflicts frostbite") +#else SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") +#endif { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -18,11 +22,15 @@ SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Powder Snow cannot frostbite an Ice-type Pokémon") +#else SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon") +#endif { GIVEN { ASSUME(gSpeciesInfo[SPECIES_SNORUNT].types[0] == TYPE_ICE); @@ -35,7 +43,7 @@ SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon") HP_BAR(opponent); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } } } @@ -68,10 +76,18 @@ SINGLE_BATTLE_TEST("Blizzard bypasses accuracy checks in Hail and Snow") } #if B_STATUS_TYPE_IMMUNITY > GEN_1 +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Freezing Glare should frostbite Psychic-types") +#else SINGLE_BATTLE_TEST("Freezing Glare should freeze Psychic-types") +#endif +#else +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types") #else SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types") #endif +#endif { GIVEN { ASSUME(gSpeciesInfo[SPECIES_ARTICUNO_GALARIAN].types[0] == TYPE_PSYCHIC); @@ -86,11 +102,11 @@ SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types") HP_BAR(opponent); #if B_STATUS_TYPE_IMMUNITY > GEN_1 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); #else NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } #endif } diff --git a/test/battle/move_effect_secondary/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c index 97eaa76ad8..e84573dcdf 100644 --- a/test/battle/move_effect_secondary/tri_attack.c +++ b/test/battle/move_effect_secondary/tri_attack.c @@ -6,7 +6,11 @@ ASSUMPTIONS ASSUME(MoveHasAdditionalEffect(MOVE_TRI_ATTACK, MOVE_EFFECT_TRI_ATTACK) == TRUE); } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or frostbite") +#else SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") +#endif { u8 statusAnim; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } @@ -26,14 +30,18 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); } else if (statusAnim == B_ANIM_STATUS_FRZ) { - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); } } } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite electric/fire/ice types respectively") +#else SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice types respectively") +#endif { u8 statusAnim; u16 species; @@ -42,7 +50,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; } #endif // B_PARALYZE_ELECTRIC PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_GLALIE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_GLALIE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); @@ -57,7 +65,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); } else if (statusAnim == B_ANIM_STATUS_FRZ) { - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); } @@ -65,7 +73,11 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ } } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite pokemon with abilities preventing respective statuses") +#else SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses") +#endif { u8 statusAnim; u16 species, ability; @@ -75,8 +87,8 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -92,7 +104,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); } else if (statusAnim == B_ANIM_STATUS_FRZ) { - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); } @@ -100,13 +112,17 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie } } +#if B_USE_FROSTBITE == TRUE +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite a mon which is already statused") +#else SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is already statused") +#endif { u8 statusAnim; u32 rng; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } @@ -121,7 +137,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); } else if (statusAnim == B_ANIM_STATUS_FRZ) { - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); } diff --git a/test/battle/move_effects_combined/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c index 6ef9e09bf1..bad28eac4e 100644 --- a/test/battle/move_effects_combined/flinch_status.c +++ b/test/battle/move_effects_combined/flinch_status.c @@ -5,7 +5,7 @@ ASSUMPTIONS { ASSUME(MoveHasAdditionalEffect(MOVE_THUNDER_FANG, MOVE_EFFECT_PARALYSIS) == TRUE); ASSUME(MoveHasAdditionalEffect(MOVE_THUNDER_FANG, MOVE_EFFECT_FLINCH) == TRUE); - ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FREEZE) == TRUE); + ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FREEZE_OR_FROSTBITE) == TRUE); ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FLINCH) == TRUE); ASSUME(MoveHasAdditionalEffect(MOVE_FIRE_FANG, MOVE_EFFECT_BURN) == TRUE); ASSUME(MoveHasAdditionalEffect(MOVE_FIRE_FANG, MOVE_EFFECT_FLINCH) == TRUE); @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang inflict status 10% of the time") STATUS_ICON(opponent, paralysis: TRUE); } if (move == MOVE_ICE_FANG) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - STATUS_ICON(opponent, freeze: TRUE); + FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } if (move == MOVE_FIRE_FANG) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); STATUS_ICON(opponent, burn: TRUE); diff --git a/test/battle/move_effects_combined/hurricane.c b/test/battle/move_effects_combined/hurricane.c index eab843e720..61acac6649 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 0000000000..2836f4838e --- /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 c49bd7a3f2..4da40589fb 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 b6edaf2635..558ce4fc37 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 b3dd403eb1..f42f4bd714 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 0000000000..3c86e5d555 --- /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 678352dc5e..862c9052fd 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/test_runner_features.c b/test/battle/test_runner_features.c new file mode 100644 index 0000000000..6b84c4fc2d --- /dev/null +++ b/test/battle/test_runner_features.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS { + int i; + for (i = 0; i < NUM_ABILITY_SLOTS; i++) { + ASSUME(gSpeciesInfo[SPECIES_KADABRA].abilities[i] != ABILITY_QUARK_DRIVE); + ASSUME(gSpeciesInfo[SPECIES_ALAKAZAM].abilities[i] != ABILITY_ELECTRIC_SURGE); + } +} + +SINGLE_BATTLE_TEST("Forced abilities activate on switch-in") +{ + GIVEN { + PLAYER(SPECIES_ALAKAZAM); + PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400);} + OPPONENT(SPECIES_ARON); + OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); }; + } WHEN { + TURN { SWITCH(player, 1); SWITCH(opponent, 1);} + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + MESSAGE("The Electric Terrain activated Kadabra's Quark Drive!"); + MESSAGE("Kadabra's Sp. Atk was heightened!"); + } +} diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c index 231de3ad8c..e31d281efe 100644 --- a/test/battle/trainer_control.c +++ b/test/battle/trainer_control.c @@ -113,3 +113,50 @@ TEST("ModifyPersonalityForNature can set any nature") ModifyPersonalityForNature(&personality, nature); EXPECT_EQ(GetNatureFromPersonality(personality), nature); } + +static const struct TrainerMon sTestParty2[] = +{ + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, + { + .species = SPECIES_WYNAUT, + .lvl = 5, + }, +}; + +static const struct Trainer sTestTrainer2 = +{ + .trainerName = _("Test2"), + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .party = TRAINER_PARTY(sTestParty2), +}; + +TEST("Trainer Class Balls apply to the entire party") +{ + u32 j; + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER); + for(j = 0; j < 6; j++) + { + EXPECT(GetMonData(&testParty[j], MON_DATA_POKEBALL, 0) == gTrainerClasses[sTestTrainer2.trainerClass].ball); + } + Free(testParty); +} diff --git a/test/battle/trainer_control.h b/test/battle/trainer_control.h index 125a19d46f..72db458de7 100644 --- a/test/battle/trainer_control.h +++ b/test/battle/trainer_control.h @@ -2,7 +2,7 @@ // DO NOT MODIFY THIS FILE! It is auto-generated from test/battle/trainer_control.party // // If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE -// in include/config.h and remove this notice. +// in include/config/general.h and remove this notice. // Use sed -i '/^#line/d' 'test/battle/trainer_control.h' to remove #line markers. // @@ -52,7 +52,7 @@ .isShiny = TRUE, #line 18 .dynamaxLevel = 5, - .shouldDynamax = TRUE, + .shouldUseDynamax = TRUE, .moves = { #line 19 MOVE_AIR_SLASH, diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 567037ccaa..5caeb84891 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -53,3 +53,20 @@ SINGLE_BATTLE_TEST("Hail fails if Desolate Land or Primordial Sea are active") } } } + +DOUBLE_BATTLE_TEST("Hail deals damage based on turn order") +{ + GIVEN { + PLAYER(SPECIES_GLALIE); + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WYNAUT) { Speed(3); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_HAIL); } + } SCENE { + NOT HP_BAR(playerLeft); + HP_BAR(opponentRight); + HP_BAR(opponentLeft); + HP_BAR(playerRight); + } +} diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 5d7a6f1713..63b24afd7e 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) ; @@ -65,3 +65,20 @@ SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type } } } + +DOUBLE_BATTLE_TEST("Sandstorm deals damage based on turn order") +{ + GIVEN { + PLAYER(SPECIES_PHANPY); + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WYNAUT) { Speed(3); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SANDSTORM); } + } SCENE { + NOT HP_BAR(playerLeft); + HP_BAR(opponentRight); + HP_BAR(opponentLeft); + HP_BAR(playerRight); + } +} diff --git a/test/battle/weather/snow.c b/test/battle/weather/snow.c index 3aceaf2f85..6c084f6b7a 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 d4f0b4027e..2d702b6c45 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" @@ -115,12 +116,7 @@ TEST("No species has two evolutions that use the evolution tracker") for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) { if (evolutions[i].method == EVO_USE_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 + || evolutions[i].method == EVO_DEFEAT_THREE_WITH_ITEM ) evolutionTrackerEvolutions++; @@ -138,3 +134,18 @@ TEST("No species has two evolutions that use the evolution tracker") 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 c1a5d33b41..3e8ef696d8 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -181,6 +181,7 @@ top: } Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); + Test_MgbaPrintf(":L%s:%d", gTestRunnerState.test->filename); gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; gTestRunnerState.expectLeaks = FALSE; @@ -218,6 +219,7 @@ top: // NOTE: Assumes that the compiler interns __FILE__. if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) // Assumption fails for tests in this file. { + Test_MgbaPrintf(":L%s:%d", gTestRunnerState.test->filename, gTestRunnerState.failedAssumptionsBlockLine); gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; return; } @@ -482,9 +484,10 @@ static void Intr_Timer2(void) } } -void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) +void Test_ExitWithResult(enum TestResult result, u32 stopLine, const char *fmt, ...) { gTestRunnerState.result = result; + gTestRunnerState.failedAssumptionsBlockLine = stopLine; ReinitCallbacks(); if (gTestRunnerState.state == STATE_REPORT_RESULT && gTestRunnerState.result != gTestRunnerState.expectedResult) @@ -692,3 +695,24 @@ void DACSHandle(void) ReinitCallbacks(); DACS_LR = ((uintptr_t)JumpToAgbMainLoop & ~1) + 4; } + +static const struct Test *GetTest(void) +{ + const struct Test *test = gTestRunnerState.test; + return test; +} + +u32 SourceLine(u32 sourceLineOffset) +{ + const struct Test *test = GetTest(); + return test->sourceLine + sourceLineOffset; +} + +u32 SourceLineOffset(u32 sourceLine) +{ + const struct Test *test = GetTest(); + if (sourceLine - test->sourceLine > 0xFF) + return 0; + else + return sourceLine - test->sourceLine; +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 23433502fe..11432bd12b 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -3,6 +3,8 @@ #include "battle_ai_util.h" #include "battle_anim.h" #include "battle_controllers.h" +#include "battle_gimmick.h" +#include "battle_z_move.h" #include "characters.h" #include "event_data.h" #include "fieldmap.h" @@ -25,10 +27,10 @@ #undef TestRunner_Battle_GetForcedAbility #endif -#define INVALID(fmt, ...) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__) -#define INVALID_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0) +#define INVALID(fmt, ...) Test_ExitWithResult(TEST_RESULT_INVALID, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__) +#define INVALID_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_INVALID, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0) -#define ASSUMPTION_FAIL_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0) +#define ASSUMPTION_FAIL_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0) #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data @@ -145,21 +147,6 @@ static bool32 IsAITest(void) return FALSE; } -static u32 SourceLine(u32 sourceLineOffset) -{ - const struct BattleTest *test = GetBattleTest(); - return test->sourceLine + sourceLineOffset; -} - -static u32 SourceLineOffset(u32 sourceLine) -{ - const struct BattleTest *test = GetBattleTest(); - if (sourceLine - test->sourceLine > 0xFF) - return 0; - else - return sourceLine - test->sourceLine; -} - static u32 BattleTest_EstimateCost(void *data) { u32 cost; @@ -184,9 +171,9 @@ static void BattleTest_SetUp(void *data) InvokeTestFunction(test); STATE->parameters = STATE->parametersCount; if (STATE->parametersCount == 0 && test->resultsSize > 0) - Test_ExitWithResult(TEST_RESULT_INVALID, "results without PARAMETRIZE"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":Lresults without PARAMETRIZE"); if (sizeof(*STATE) + test->resultsSize * STATE->parameters > sizeof(sBackupMapData)) - Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE (%d) + STATE->results (%d) too big for sBackupMapData (%d)", sizeof(*STATE), test->resultsSize * STATE->parameters, sizeof(sBackupMapData)); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LOOM: STATE (%d) + STATE->results (%d) too big for sBackupMapData (%d)", sizeof(*STATE), test->resultsSize * STATE->parameters, sizeof(sBackupMapData)); STATE->results = (void *)((char *)sBackupMapData + sizeof(struct BattleTestRunnerState)); memset(STATE->results, 0, test->resultsSize * STATE->parameters); switch (test->type) @@ -260,7 +247,7 @@ static void SetImplicitSpeeds(void) } } if (!madeProgress) - Test_ExitWithResult(TEST_RESULT_INVALID, "TURNs have contradictory speeds"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LTURNs have contradictory speeds"); } } @@ -334,9 +321,9 @@ static void BattleTest_Run(void *data) requiredOpponentPartySize = DATA.currentMonIndexes[i] + 1; } if (DATA.playerPartySize < requiredPlayerPartySize) - Test_ExitWithResult(TEST_RESULT_INVALID, "%d PLAYER Pokemon required", requiredPlayerPartySize); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%d PLAYER Pokemon required", requiredPlayerPartySize); if (DATA.opponentPartySize < requiredOpponentPartySize) - Test_ExitWithResult(TEST_RESULT_INVALID, "%d OPPONENT Pokemon required", requiredOpponentPartySize); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%d OPPONENT Pokemon required", requiredOpponentPartySize); for (i = 0; i < STATE->battlersCount; i++) PushBattlerAction(0, i, RECORDED_BYTE, 0xFF); @@ -346,7 +333,7 @@ static void BattleTest_Run(void *data) if (DATA.explicitSpeeds[B_SIDE_PLAYER] != (1 << DATA.playerPartySize) - 1 && DATA.explicitSpeeds[B_SIDE_OPPONENT] != (1 << DATA.opponentPartySize) - 1) { - Test_ExitWithResult(TEST_RESULT_INVALID, "Speed required for all PLAYERs and OPPONENTs"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LSpeed required for all PLAYERs and OPPONENTs"); } } else @@ -392,7 +379,7 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) } else if (STATE->trials != n) { - Test_ExitWithResult(TEST_RESULT_ERROR, "RandomUniform called with inconsistent trials %d and %d", STATE->trials, n); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomUniform called with inconsistent trials %d and %d", STATE->trials, n); } STATE->trialRatio = Q_4_12(1) / STATE->trials; return STATE->runTrial + lo; @@ -413,7 +400,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32 if (turn && turn->rng.tag == tag) { if (reject(turn->rng.value)) - Test_ExitWithResult(TEST_RESULT_INVALID, "WITH_RNG specified a rejected value (%d)", turn->rng.value); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LWITH_RNG specified a rejected value (%d)", turn->rng.value); return turn->rng.value; } } @@ -434,7 +421,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32 while (reject(STATE->runTrial + lo + STATE->rngTrialOffset)) { if (STATE->runTrial + lo + STATE->rngTrialOffset > hi) - Test_ExitWithResult(TEST_RESULT_INVALID, "RandomUniformExcept called with inconsistent reject"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LRandomUniformExcept called with inconsistent reject"); STATE->rngTrialOffset++; } @@ -445,7 +432,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32 while (reject(default_)) { if (default_ == lo) - Test_ExitWithResult(TEST_RESULT_INVALID, "RandomUniformExcept rejected all values"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LRandomUniformExcept rejected all values"); default_--; } return default_; @@ -456,7 +443,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) const struct BattlerTurn *turn = NULL; if (sum == 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeightedArray called with zero sum"); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeightedArray called with zero sum"); if (gCurrentTurnActionNumber < gBattlersCount) { @@ -475,7 +462,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) } else if (STATE->trials != n) { - Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeighted called with inconsistent trials %d and %d", STATE->trials, n); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeighted called with inconsistent trials %d and %d", STATE->trials, n); } // TODO: Detect inconsistent sum. STATE->trialRatio = Q_4_12(weights[STATE->runTrial]) / sum; @@ -509,7 +496,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) while (weights[n-1] == 0) { if (n == 1) - Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeightedArray called with all zero weights"); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeightedArray called with all zero weights"); n--; } return n-1; @@ -535,7 +522,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz return (const u8 *)array + size * index; } // TODO: Incorporate the line number. - Test_ExitWithResult(TEST_RESULT_ERROR, "%s: RandomElement illegal value requested: %d", gTestRunnerState.test->filename, turn->rng.value); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":L%s: RandomElement illegal value requested: %d", gTestRunnerState.test->filename, turn->rng.value); } } @@ -548,7 +535,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz } else if (STATE->trials != count) { - Test_ExitWithResult(TEST_RESULT_ERROR, "RandomElement called with inconsistent trials %d and %d", STATE->trials, count); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomElement called with inconsistent trials %d and %d", STATE->trials, count); } STATE->trialRatio = Q_4_12(1) / count; return (const u8 *)array + size * STATE->runTrial; @@ -599,7 +586,7 @@ void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ABILITY_POPUP", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched ABILITY_POPUP", filename, line); } queuedEvent += event->groupSize; @@ -662,7 +649,7 @@ void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ANIMATION", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched ANIMATION", filename, line); } queuedEvent += event->groupSize; @@ -752,7 +739,7 @@ void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched HP_BAR", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched HP_BAR", filename, line); } queuedEvent += event->groupSize; @@ -807,10 +794,10 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) bool32 movePasses = FALSE; if (expectedAction->type != B_ACTION_USE_MOVE) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected %s, got MOVE", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %s, got MOVE", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]); if (expectedAction->explicitTarget && expectedAction->target != target) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected target %s, got %s", filename, expectedAction->sourceLine, BattlerIdentifier(expectedAction->target), BattlerIdentifier(target)); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected target %s, got %s", filename, expectedAction->sourceLine, BattlerIdentifier(expectedAction->target), BattlerIdentifier(target)); for (i = 0; i < MAX_MON_MOVES; i++) { @@ -844,16 +831,16 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) u32 moveSlot = GetMoveSlot(gBattleMons[battlerId].moves, moveId); PrintAiMoveLog(battlerId, moveSlot, moveId, gBattleStruct->aiFinalScore[battlerId][expectedAction->target][moveSlot]); if (countExpected > 1) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched EXPECT_MOVES %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId)); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched EXPECT_MOVES %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId)); else - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched EXPECT_MOVE %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId)); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched EXPECT_MOVE %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId)); } if (expectedAction->notMove && !movePasses) { if (countExpected > 1) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVES %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId)); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched NOT_EXPECT_MOVES %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId)); else - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVE %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId)); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched NOT_EXPECT_MOVE %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId)); } } // Turn passed, clear logs from the turn @@ -873,17 +860,17 @@ void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex) if (!expectedAction->pass) { if (expectedAction->type != B_ACTION_SWITCH) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected %s, got SWITCH/SEND_OUT", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %s, got SWITCH/SEND_OUT", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]); if (expectedAction->target != partyIndex) - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected partyIndex %d, got %d", filename, expectedAction->sourceLine, expectedAction->target, partyIndex); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected partyIndex %d, got %d", filename, expectedAction->sourceLine, expectedAction->target, partyIndex); } DATA.aiActionsPlayed[battlerId]++; } void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex) { - Test_ExitWithResult(TEST_RESULT_INVALID, "%s: INVALID: %s trying to send out a mon(id: %d) with 0 HP.", + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%s: INVALID: %s trying to send out a mon(id: %d) with 0 HP.", gTestRunnerState.test->filename, BattlerIdentifier(battlerId), gBattlerPartyIndexes[battlerId]); } @@ -933,7 +920,7 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp && (aiAction->moveSlots & gBitTable[i]) && !(aiAction->moveSlots & gBitTable[bestScoreId])) { - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename, + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); } // We DO NOT expect move 'i', but it has the same best score as another move. @@ -942,7 +929,7 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp && (aiAction->moveSlots & gBitTable[i]) && !(aiAction->moveSlots & gBitTable[bestScoreId])) { - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename, + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); } } @@ -985,7 +972,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco } if (scoreFromLogs != totalScore) { - Test_ExitWithResult(TEST_RESULT_ERROR, "Warning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LWarning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore); } Test_MgbaPrintf("Total: %d\n", totalScore); } @@ -1023,7 +1010,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId) PrintAiMoveLog(battlerId, scoreCtx->moveSlot1, moveId1, scores[scoreCtx->moveSlot1]); if (!CheckComparision(scores[scoreCtx->moveSlot1], scoreCtx->value, scoreCtx->cmp)) { - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched SCORE_%s_VAL %S %d, got %d", + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched SCORE_%s_VAL %S %d, got %d", filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], GetMoveName(moveId1), scoreCtx->value, scores[scoreCtx->moveSlot1]); } } @@ -1034,7 +1021,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId) PrintAiMoveLog(battlerId, scoreCtx->moveSlot2, moveId2, scores[scoreCtx->moveSlot2]); if (!CheckComparision(scores[scoreCtx->moveSlot1], scores[scoreCtx->moveSlot2], scoreCtx->cmp)) { - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched SCORE_%s, got %S: %d, %S: %d", + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched SCORE_%s, got %S: %d, %S: %d", filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], GetMoveName(moveId1), scores[scoreCtx->moveSlot1], GetMoveName(moveId2), scores[scoreCtx->moveSlot2]); } } @@ -1134,7 +1121,7 @@ void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched EXPERIENCE_BAR", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched EXPERIENCE_BAR", filename, line); } queuedEvent += event->groupSize; @@ -1223,7 +1210,7 @@ void TestRunner_Battle_RecordMessage(const u8 *string) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched MESSAGE", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched MESSAGE", filename, line); } queuedEvent += event->groupSize; @@ -1288,7 +1275,7 @@ void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) { const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched STATUS_ICON", filename, line); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched STATUS_ICON", filename, line); } queuedEvent += event->groupSize; @@ -1323,7 +1310,7 @@ void TestRunner_Battle_AfterLastTurn(void) if (DATA.turns - 1 != DATA.lastActionTurn) { const char *filename = gTestRunnerState.test->filename; - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1); } while (DATA.queuedEvent < DATA.queuedEventsCount @@ -1336,7 +1323,7 @@ void TestRunner_Battle_AfterLastTurn(void) const char *filename = gTestRunnerState.test->filename; u32 line = SourceLine(DATA.queuedEvents[DATA.queuedEvent].sourceLineOffset); const char *macro = sEventTypeMacros[DATA.queuedEvents[DATA.queuedEvent].type]; - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched %s", filename, line, macro); + Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Unmatched %s", filename, line, macro); } STATE->runThen = TRUE; @@ -1418,7 +1405,7 @@ static void CB2_BattleTest_NextTrial(void) if (abs(STATE->observedRatio - STATE->expectedRatio) <= Q_4_12(0.02)) gTestRunnerState.result = TEST_RESULT_PASS; else - Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %q passes/successes, observed %q", STATE->expectedRatio, STATE->observedRatio); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %q passes/successes, observed %q", gTestRunnerState.test->filename, SourceLine(0), STATE->expectedRatio, STATE->observedRatio); } } @@ -1637,6 +1624,7 @@ void Ability_(u32 sourceLine, u32 ability) u32 species; const struct SpeciesInfo *info; INVALID_IF(!DATA.currentMon, "Ability outside of PLAYER/OPPONENT"); + INVALID_IF(ability >= ABILITIES_COUNT, "Illegal ability id: %d", ability); species = GetMonData(DATA.currentMon, MON_DATA_SPECIES); info = &gSpeciesInfo[species]; for (i = 0; i < NUM_ABILITY_SLOTS; i++) @@ -1873,7 +1861,7 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 { u32 recordIndex = DATA.recordIndexes[battlerId]++; if (recordIndex >= BATTLER_RECORD_SIZE) - Test_ExitWithResult(TEST_RESULT_INVALID, "Too many actions"); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LToo many actions"); DATA.battleRecordTypes[battlerId][recordIndex] = actionType; DATA.battleRecordSourceLineOffsets[battlerId][recordIndex] = SourceLineOffset(sourceLine); DATA.recordedBattle.battleRecord[battlerId][recordIndex] = byte; @@ -1895,10 +1883,10 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde && DATA.recordedBattle.battleRecord[battlerId][i-1] == B_ACTION_USE_MOVE) { u32 line = SourceLine(DATA.battleRecordSourceLineOffsets[battlerId][i-1]); - Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, line); + Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Illegal MOVE", filename, line); } } - Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, SourceLine(0)); + Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%s:%d: Illegal MOVE", filename, SourceLine(0)); } if (DATA.battleRecordTypes[battlerId][recordIndex] != RECORDED_BYTE) @@ -1926,13 +1914,13 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde switch (actionType) { case RECORDED_ACTION_TYPE: - Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected MOVE/SWITCH, got %s", filename, line, actualMacro); + Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Expected MOVE/SWITCH, got %s", filename, line, actualMacro); case RECORDED_PARTY_INDEX: - Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected SEND_OUT, got %s", filename, line, actualMacro); + Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Expected SEND_OUT, got %s", filename, line, actualMacro); } } - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: Illegal battle record", filename, line); + Test_ExitWithResult(TEST_RESULT_ERROR, line, ":L%s:%d: Illegal battle record", filename, line); } } else @@ -1940,7 +1928,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde if (DATA.lastActionTurn == gBattleResults.battleTurnCounter) { const char *filename = gTestRunnerState.test->filename; - Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1); } } } @@ -1949,7 +1937,7 @@ void OpenTurn(u32 sourceLine) { INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN"); if (DATA.turns == MAX_TURNS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine); DATA.turnState = TURN_OPEN; DATA.actionBattlers = 0x00; DATA.moveBattlers = 0x00; @@ -2101,17 +2089,31 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 * INVALID("No move or moveSlot"); } - if (ctx->explicitMegaEvolve && ctx->megaEvolve) - *moveSlot |= RET_MEGA_EVOLUTION; + if (ctx->explicitGimmick && ctx->gimmick != GIMMICK_NONE) + { + u32 item = GetMonData(mon, MON_DATA_HELD_ITEM); + u32 holdEffect = ItemId_GetHoldEffect(item); + u32 species = GetMonData(mon, MON_DATA_SPECIES); + u32 side = GetBattlerSide(battlerId); - if (ctx->explicitUltraBurst && ctx->ultraBurst) - *moveSlot |= RET_ULTRA_BURST; + // Check invalid item usage. + INVALID_IF(ctx->gimmick == GIMMICK_MEGA && holdEffect != HOLD_EFFECT_MEGA_STONE && species != SPECIES_RAYQUAZA, "Cannot Mega Evolve without a Mega Stone"); + INVALID_IF(ctx->gimmick == GIMMICK_Z_MOVE && holdEffect != HOLD_EFFECT_Z_CRYSTAL, "Cannot use a Z-Move without a Z-Crystal"); + INVALID_IF(ctx->gimmick == GIMMICK_Z_MOVE && ItemId_GetSecondaryId(item) != gMovesInfo[*moveId].type + && GetSignatureZMove(*moveId, species, item) == MOVE_NONE + && *moveId != MOVE_PHOTON_GEYSER, // exception because test won't recognize Ultra Necrozma pre-Burst + "Cannot turn %S into a Z-Move with %S", GetMoveName(ctx->move), ItemId_GetName(item)); + INVALID_IF(ctx->gimmick != GIMMICK_MEGA && holdEffect == HOLD_EFFECT_MEGA_STONE, "Cannot use another gimmick while holding a Mega Stone"); + INVALID_IF(ctx->gimmick != GIMMICK_Z_MOVE && ctx->gimmick != GIMMICK_ULTRA_BURST && holdEffect == HOLD_EFFECT_Z_CRYSTAL, "Cannot use another gimmick while holding a Z-Crystal"); - if (ctx->explicitDynamax && ctx->dynamax) - *moveSlot |= RET_DYNAMAX; - - if (ctx->explicitTera && ctx->tera) - *moveSlot |= RET_TERASTAL; + // Check multiple gimmick use. + INVALID_IF(DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] != GIMMICK_NONE + && !(DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] == GIMMICK_ULTRA_BURST + && ctx->gimmick == GIMMICK_Z_MOVE), "Cannot use multiple gimmicks on the same battler"); + + DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] = ctx->gimmick; + *moveSlot |= RET_GIMMICK; + } } void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) @@ -2467,7 +2469,7 @@ void QueueAbility(u32 sourceLine, struct BattlePokemon *battler, struct AbilityE s32 battlerId = battler - gBattleMons; INVALID_IF(!STATE->runScene, "ABILITY_POPUP outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ABILITY exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: ABILITY exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { .type = QUEUED_ABILITY_POPUP_EVENT, .sourceLineOffset = SourceLineOffset(sourceLine), @@ -2487,7 +2489,7 @@ void QueueAnimation(u32 sourceLine, u32 type, u32 id, struct AnimationEventConte INVALID_IF(!STATE->runScene, "ANIMATION outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ANIMATION exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: ANIMATION exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); attackerId = ctx.attacker ? ctx.attacker - gBattleMons : 0xF; if (type == ANIM_TYPE_MOVE) @@ -2522,7 +2524,7 @@ void QueueHP(u32 sourceLine, struct BattlePokemon *battler, struct HPEventContex INVALID_IF(!STATE->runScene, "HP_BAR outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: HP_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: HP_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); if (ctx.explicitHP) { @@ -2575,7 +2577,7 @@ void QueueExp(u32 sourceLine, struct BattlePokemon *battler, struct ExpEventCont INVALID_IF(!STATE->runScene, "EXPERIENCE_BAR outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: EXPERIENCE_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: EXPERIENCE_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); if (ctx.explicitExp) { @@ -2612,7 +2614,7 @@ void QueueMessage(u32 sourceLine, const u8 *pattern) { INVALID_IF(!STATE->runScene, "MESSAGE outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: MESSAGE exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: MESSAGE exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { .type = QUEUED_MESSAGE_EVENT, .sourceLineOffset = SourceLineOffset(sourceLine), @@ -2631,7 +2633,7 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve INVALID_IF(!STATE->runScene, "STATUS_ICON outside of SCENE"); if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: STATUS_ICON exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: STATUS_ICON exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); if (ctx.none) mask = 0; @@ -2675,6 +2677,11 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex) return DATA.forcedAbilities[side][partyIndex]; } +u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex) +{ + return DATA.chosenGimmick[side][partyIndex]; +} + // TODO: Consider storing the last successful i and searching from i+1 // to improve performance. struct AILogLine *GetLogLine(u32 battlerId, u32 moveIndex) @@ -2690,7 +2697,7 @@ struct AILogLine *GetLogLine(u32 battlerId, u32 moveIndex) } } - Test_ExitWithResult(TEST_RESULT_ERROR, "Too many AI log lines"); + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LToo many AI log lines"); return NULL; } diff --git a/test/text.c b/test/text.c index e8eb4f7f24..0e6900edad 100644 --- a/test/text.c +++ b/test/text.c @@ -275,7 +275,7 @@ TEST("Item names fit on Shop Screen") TEST("Species names fit on Battle Screen HP box") { u32 i, genderWidthPx; - const u32 fontId = FONT_SMALL_NARROWER, widthPx = 54; + const u32 fontId = FONT_SMALL_NARROWER, widthPx = 55; u32 species = SPECIES_NONE; genderWidthPx = GetStringWidth(fontId, COMPOUND_STRING("♂"), 0); for (i = 1; i < NUM_SPECIES; i++) @@ -501,6 +501,25 @@ TEST("Species names fit on PokeNav Ribbon List Screen") EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } +TEST("Species names fit on Battle Screen HP box for vanilla mons with the default font") +{ + u32 i, genderWidthPx; + const u32 fontId = FONT_SMALL, widthPx = 55; + u32 species = SPECIES_NONE; + genderWidthPx = GetStringWidth(fontId, COMPOUND_STRING("♂"), 0); + for (i = 1; i < SPECIES_TURTWIG; i++) + { + if (IsSpeciesEnabled(i)) + { + PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; } + } + } + if (gSpeciesInfo[i].genderRatio != MON_GENDERLESS) + EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0) - genderWidthPx, widthPx); + else + EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); +} + TEST("Ability names fit on Pokemon Summary Screen") { u32 i; diff --git a/tools/gbagfx/jasc_pal.c b/tools/gbagfx/jasc_pal.c index e5ba9c3c2f..8d4bb137d5 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"); diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index d4f39feb73..d9d8417e18 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -8,6 +8,7 @@ * * COMMANDS * N: Sets the test name to the remainder of the line. + * L: Sets the filename to the remainder of the line. * R: Sets the result to the remainder of the line, and flushes any * output buffered since the previous R. * P/K/F/A: Sets the result to the remaining of the line, flushes any @@ -46,6 +47,7 @@ struct Runner int outfd; char rom_path[FILENAME_MAX]; char test_name[256]; + char filename_line[256]; size_t input_buffer_size; size_t input_buffer_capacity; char *input_buffer; @@ -59,8 +61,12 @@ struct Runner int assumptionFails; int fails; int results; - char failedTestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; - char knownFailingPassedTestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char failed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char failed_TestFilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char knownFailingPassed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char knownFailingPassed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; }; static unsigned nrunners = 0; @@ -102,6 +108,16 @@ static void handle_read(int i, struct Runner *runner) strncpy(runner->test_name, soc, eol - soc - 1); runner->test_name[eol - soc - 1] = '\0'; break; + case 'L': + soc += 2; + if (sizeof(runner->filename_line) <= eol - soc - 1) + { + fprintf(stderr, "filename_line too long\n"); + exit(2); + } + strncpy(runner->filename_line, soc, eol - soc - 1); + runner->filename_line[eol - soc - 1] = '\0'; + break; case 'P': runner->passes++; @@ -111,18 +127,29 @@ static void handle_read(int i, struct Runner *runner) goto add_to_results; case 'U': if (runner->knownFailsPassing < MAX_SUMMARY_TESTS_TO_LIST) - strcpy(runner->knownFailingPassedTestNames[runner->knownFailsPassing], runner->test_name); + { + strcpy(runner->knownFailingPassed_TestNames[runner->knownFailsPassing], runner->test_name); + strcpy(runner->knownFailingPassed_FilenameLine[runner->knownFailsPassing], runner->filename_line); + } runner->knownFailsPassing++; goto add_to_results; case 'T': runner->todos++; goto add_to_results; case 'A': + if (runner->assumptionFails < MAX_SUMMARY_TESTS_TO_LIST) + { + strcpy(runner->assumeFailed_TestNames[runner->assumptionFails], runner->test_name); + strcpy(runner->assumeFailed_FilenameLine[runner->assumptionFails], runner->filename_line); + } runner->assumptionFails++; goto add_to_results; case 'F': if (runner->fails < MAX_SUMMARY_TESTS_TO_LIST) - strcpy(runner->failedTestNames[runner->fails], runner->test_name); + { + strcpy(runner->failed_TestNames[runner->fails], runner->test_name); + strcpy(runner->failed_TestFilenameLine[runner->fails], runner->filename_line); + } runner->fails++; add_to_results: runner->results++; @@ -532,8 +559,14 @@ int main(int argc, char *argv[]) int fails = 0; int results = 0; - char failedTestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; - char knownFailingPassedTestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char failed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char failed_TestFilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + + char knownFailingPassed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char knownFailingPassed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + + char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; for (int i = 0; i < nrunners; i++) { @@ -552,33 +585,43 @@ int main(int argc, char *argv[]) for (int j = 0; j < runners[i].knownFailsPassing; j++) { if (j < MAX_SUMMARY_TESTS_TO_LIST) - strcpy(knownFailingPassedTestNames[fails], runners[i].knownFailingPassedTestNames[j]); + { + strcpy(knownFailingPassed_TestNames[knownFailsPassing], runners[i].knownFailingPassed_TestNames[j]); + strcpy(knownFailingPassed_FilenameLine[knownFailsPassing], runners[i].knownFailingPassed_FilenameLine[j]); + } knownFailsPassing++; } todos += runners[i].todos; - assumptionFails += runners[i].assumptionFails; + for (int j = 0; j < runners[i].assumptionFails; j++) + { + if (j < MAX_SUMMARY_TESTS_TO_LIST) + { + strcpy(assumeFailed_TestNames[assumptionFails], runners[i].assumeFailed_TestNames[j]); + strcpy(assumeFailed_FilenameLine[assumptionFails], runners[i].assumeFailed_FilenameLine[j]); + } + assumptionFails++; + } for (int j = 0; j < runners[i].fails; j++) { if (j < MAX_SUMMARY_TESTS_TO_LIST) - strcpy(failedTestNames[fails], runners[i].failedTestNames[j]); + { + strcpy(failed_TestNames[fails], runners[i].failed_TestNames[j]); + strcpy(failed_TestFilenameLine[fails], runners[i].failed_TestFilenameLine[j]); + } fails++; } results += runners[i].results; } - qsort(failedTestNames, min(fails, MAX_SUMMARY_TESTS_TO_LIST), sizeof(char) * MAX_TEST_LIST_BUFFER_LENGTH, compare_strings); - qsort(knownFailingPassedTestNames, min(fails, MAX_SUMMARY_TESTS_TO_LIST), sizeof(char) * MAX_TEST_LIST_BUFFER_LENGTH, compare_strings); - if (results == 0) { fprintf(stdout, "\nNo tests found.\n"); } else { - fprintf(stdout, "\n"); if (fails > 0) { - fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d Add TESTS='X' to run tests with the defined prefix.\n", fails); + fprintf(stdout, "\n \e[31mFAILED\e[0m tests:\n"); for (int i = 0; i < fails; i++) { if (i >= MAX_SUMMARY_TESTS_TO_LIST) @@ -586,31 +629,51 @@ int main(int argc, char *argv[]) fprintf(stdout, " - \e[31mand %d more...\e[0m\n", fails - MAX_SUMMARY_TESTS_TO_LIST); break; } - fprintf(stdout, " - \e[31m%s\e[0m.\n", failedTestNames[i]); + fprintf(stdout, " - \e[31m%s\e[0m - %s.\n", failed_TestFilenameLine[i], failed_TestNames[i]); } } + + if (assumptionFails > 0) + { + fprintf(stdout, "\n Tests with \e[33mASSUMPTIONS_FAILED\e[0m:\n"); + for (int i = 0; i < assumptionFails; i++) + { + if (i >= MAX_SUMMARY_TESTS_TO_LIST) + { + fprintf(stdout, " - \e[33mand %d more...\e[0m\n", assumptionFails - MAX_SUMMARY_TESTS_TO_LIST); + break; + } + fprintf(stdout, " - \e[33m%s\e[0m - %s.\n", assumeFailed_FilenameLine[i], assumeFailed_TestNames[i]); + } + } + if (knownFailsPassing > 0) { - fprintf(stdout, "- \e[31mKNOWN_FAILING_PASSED\e[0m: %d \e[31mPlease remove KNOWN_FAILING if these tests intentionally PASS\e[0m\n", knownFailsPassing); + fprintf(stdout, "\n \e[33mKNOWN_FAILING\e[0m tests \e[32mPASSING\e[0m:\n"); for (int i = 0; i < knownFailsPassing; i++) { if (i >= MAX_SUMMARY_TESTS_TO_LIST) { - fprintf(stdout, " - \e[31mand %d more...\e[0m\n", knownFailsPassing - MAX_SUMMARY_TESTS_TO_LIST); + fprintf(stdout, " - \e[32mand %d more...\e[0m\n", knownFailsPassing - MAX_SUMMARY_TESTS_TO_LIST); break; } - fprintf(stdout, " - \e[31m%s\e[0m.\n", knownFailingPassedTestNames[i]); + fprintf(stdout, " - \e[32m%s\e[0m - %s.\n", knownFailingPassed_FilenameLine[i], knownFailingPassed_TestNames[i]); } } - fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); - if (knownFails > 0) - fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); - if (todos > 0) - fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos); - if (assumptionFails > 0) - fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails); - fprintf(stdout, "- Tests \e[34mTOTAL\e[0m: %d\n", results); + fprintf(stdout, "\n"); + if (fails > 0) + fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d Add TESTS='X' to run tests with the defined prefix.\n", fails); + if (knownFails > 0) + fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (assumptionFails > 0) + fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails); + if (todos > 0) + fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos); + if (knownFailsPassing > 0) + fprintf(stdout, "- \e[32mKNOWN_FAILING_PASSING\e[0m: %d \e[33mPlease remove KNOWN_FAILING if these tests intentionally PASS\e[0m\n", knownFailsPassing); + fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); + fprintf(stdout, "- Tests \e[34mTOTAL\e[0m: %d\n", results); } fprintf(stdout, "\n"); diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 1507c973f2..606318944c 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -3,10 +3,10 @@ CXX ?= g++ CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ - utf8.cpp + utf8.cpp io.cpp HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ - utf8.h + utf8.h io.h ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 04a7410e00..ca8b8cc4ae 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -27,33 +27,12 @@ #include "utf8.h" #include "string_parser.h" #include "../../gflib/characters.h" +#include "io.h" -AsmFile::AsmFile(std::string filename) : m_filename(filename) +AsmFile::AsmFile(std::string filename, bool isStdin, bool doEnum) : m_filename(filename) { - FILE *fp = std::fopen(filename.c_str(), "rb"); - - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); - - std::fseek(fp, 0, SEEK_END); - - m_size = std::ftell(fp); - - if (m_size < 0) - FATAL_ERROR("File size of \"%s\" is less than zero.\n", filename.c_str()); - else if (m_size == 0) - return; // Empty file - - m_buffer = new char[m_size + 1]; - - std::rewind(fp); - - if (std::fread(m_buffer, m_size, 1, fp) != 1) - FATAL_ERROR("Failed to read \"%s\".\n", filename.c_str()); - - m_buffer[m_size] = 0; - - std::fclose(fp); + m_buffer = ReadFileToBuffer(filename.c_str(), isStdin, &m_size); + m_doEnum = doEnum; m_pos = 0; m_lineNum = 1; @@ -65,6 +44,7 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename) AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) { m_buffer = other.m_buffer; + m_doEnum = other.m_doEnum; m_pos = other.m_pos; m_size = other.m_size; m_lineNum = other.m_lineNum; @@ -174,6 +154,8 @@ Directive AsmFile::GetDirective() return Directive::String; else if (CheckForDirective(".braille")) return Directive::Braille; + else if (CheckForDirective("enum")) + return Directive::Enum; else return Directive::Unknown; } @@ -527,6 +509,70 @@ void AsmFile::OutputLine() } } +// parses an assumed C `enum`. Returns false if `enum { ...` is not matched +bool AsmFile::ParseEnum() +{ + if (!m_doEnum) + return false; + + long fallbackPosition = m_pos; + std::string headerFilename = ""; + long currentHeaderLine = SkipWhitespaceAndEol(); + std::string enumName = ReadIdentifier(); + currentHeaderLine += SkipWhitespaceAndEol(); + long enumCounter = 0; + long symbolCount = 0; + + if (m_buffer[m_pos] != '{') // assume assembly macro, otherwise assume enum and report errors accordingly + { + m_pos = fallbackPosition - 4; + return false; + } + + currentHeaderLine += FindLastLineNumber(headerFilename); + m_pos++; + for (;;) + { + currentHeaderLine += SkipWhitespaceAndEol(); + std::string currentIdentName = ReadIdentifier(); + if (!currentIdentName.empty()) + { + std::printf("# %ld \"%s\"\n", currentHeaderLine, headerFilename.c_str()); + currentHeaderLine += SkipWhitespaceAndEol(); + if (m_buffer[m_pos] == '=') + { + m_pos++; + currentHeaderLine += SkipWhitespaceAndEol(); + enumCounter = ReadInteger(headerFilename, currentHeaderLine); + currentHeaderLine += SkipWhitespaceAndEol(); + } + std::printf(".equiv %s, %ld\n", currentIdentName.c_str(), enumCounter); + enumCounter++; + symbolCount++; + } + else if (symbolCount == 0) + { + RaiseError("%s:%ld: empty enum is invalid", headerFilename.c_str(), currentHeaderLine); + } + + if (m_buffer[m_pos] != ',') + { + currentHeaderLine += SkipWhitespaceAndEol(); + if (m_buffer[m_pos++] == '}' && m_buffer[m_pos++] == ';') + { + ExpectEmptyRestOfLine(); + break; + } + else + { + RaiseError("unterminated enum from included file %s:%ld", headerFilename.c_str(), currentHeaderLine); + } + } + m_pos++; + } + return true; +} + // Asserts that the rest of the line is empty and moves to the next one. void AsmFile::ExpectEmptyRestOfLine() { @@ -599,3 +645,130 @@ void AsmFile::RaiseWarning(const char* format, ...) { DO_REPORT("warning"); } + +// Skips Whitespace including newlines and returns the amount of newlines skipped +int AsmFile::SkipWhitespaceAndEol() +{ + int newlines = 0; + while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\n') + { + if (m_buffer[m_pos] == '\n') + newlines++; + m_pos++; + } + return newlines; +} + +// returns the last line indicator and its corresponding file name without modifying the token index +int AsmFile::FindLastLineNumber(std::string& filename) +{ + long pos = m_pos; + long linebreaks = 0; + while (m_buffer[pos] != '#' && pos >= 0) + { + if (m_buffer[pos] == '\n') + linebreaks++; + pos--; + } + + if (pos < 0) + RaiseError("line indicator for header file not found before `enum`"); + + pos++; + while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') + pos++; + + if (!IsAsciiDigit(m_buffer[pos])) + RaiseError("malformatted line indicator found before `enum`, expected line number"); + + unsigned n = 0; + int digit = 0; + while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1) + n = 10 * n + digit; + + while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') + pos++; + + if (m_buffer[pos++] != '"') + RaiseError("malformatted line indicator found before `enum`, expected filename"); + + while (m_buffer[pos] != '"') + { + unsigned char c = m_buffer[pos++]; + + if (c == 0) + { + if (pos >= m_size) + RaiseError("unexpected EOF in line indicator"); + else + RaiseError("unexpected null character in line indicator"); + } + + if (!IsAsciiPrintable(c)) + RaiseError("unexpected character '\\x%02X' in line indicator", c); + + if (c == '\\') + { + c = m_buffer[pos]; + RaiseError("unexpected escape '\\%c' in line indicator", c); + } + + filename += c; + } + + return n + linebreaks - 1; +} + +std::string AsmFile::ReadIdentifier() +{ + long start = m_pos; + if (!IsIdentifierStartingChar(m_buffer[m_pos])) + return std::string(); + + m_pos++; + + while (IsIdentifierChar(m_buffer[m_pos])) + m_pos++; + + return std::string(&m_buffer[start], m_pos - start); +} + +long AsmFile::ReadInteger(std::string filename, long line) +{ + bool negate = false; + int radix = 10; + if (!IsAsciiDigit(m_buffer[m_pos])) + { + if (m_buffer[m_pos++] == '-') + negate = true; + else + RaiseError("expected number in included file %s:%ld", filename.c_str(), line); + } + + if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') + { + radix = 16; + m_pos += 2; + } + else if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'b') + { + radix = 2; + m_pos += 2; + } + else if (m_buffer[m_pos] == '0' && IsAsciiDigit(m_buffer[m_pos+1])) + { + radix = 8; + m_pos++; + } + + long n = 0; + int digit; + + while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) + { + n = n * radix + digit; + m_pos++; + } + + return negate ? -n : n; +} diff --git a/tools/preproc/asm_file.h b/tools/preproc/asm_file.h index 29435f76a4..33e6ce5c49 100644 --- a/tools/preproc/asm_file.h +++ b/tools/preproc/asm_file.h @@ -31,13 +31,14 @@ enum class Directive Include, String, Braille, + Enum, Unknown }; class AsmFile { public: - AsmFile(std::string filename); + AsmFile(std::string filename, bool isStdin, bool doEnum); AsmFile(AsmFile&& other); AsmFile(const AsmFile&) = delete; ~AsmFile(); @@ -49,9 +50,11 @@ public: bool IsAtEnd(); void OutputLine(); void OutputLocation(); + bool ParseEnum(); private: char* m_buffer; + bool m_doEnum; long m_pos; long m_size; long m_lineNum; @@ -68,6 +71,10 @@ private: void RaiseError(const char* format, ...); void RaiseWarning(const char* format, ...); void VerifyStringLength(int length); + int SkipWhitespaceAndEol(); + int FindLastLineNumber(std::string& filename); + std::string ReadIdentifier(); + long ReadInteger(std::string filename, long line); }; #endif // ASM_FILE_H diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp index 3aabf38a72..4b40d18bc8 100644 --- a/tools/preproc/c_file.cpp +++ b/tools/preproc/c_file.cpp @@ -30,56 +30,16 @@ #include "char_util.h" #include "utf8.h" #include "string_parser.h" +#include "io.h" CFile::CFile(const char * filenameCStr, bool isStdin) { - FILE *fp; - - if (isStdin) { - fp = stdin; + if (isStdin) m_filename = std::string{"/"}.append(filenameCStr); - } else { - fp = std::fopen(filenameCStr, "rb"); + else m_filename = std::string(filenameCStr); - } - std::string& filename = m_filename; - - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); - - m_size = 0; - m_buffer = (char *)malloc(CHUNK_SIZE + 1); - if (m_buffer == NULL) { - FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str()); - } - - std::size_t numAllocatedBytes = CHUNK_SIZE + 1; - std::size_t bufferOffset = 0; - std::size_t count; - - while ((count = std::fread(m_buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) { - if (!std::ferror(fp)) { - m_size += count; - - if (std::feof(fp)) { - break; - } - - numAllocatedBytes += CHUNK_SIZE; - bufferOffset += CHUNK_SIZE; - m_buffer = (char *)realloc(m_buffer, numAllocatedBytes); - if (m_buffer == NULL) { - FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str()); - } - } else { - FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename.c_str(), std::strerror(errno)); - } - } - - m_buffer[m_size] = 0; - - std::fclose(fp); + m_buffer = ReadFileToBuffer(filenameCStr, isStdin, &m_size); m_pos = 0; m_lineNum = 1; diff --git a/tools/preproc/c_file.h b/tools/preproc/c_file.h index 49e633a18d..c40c33c962 100644 --- a/tools/preproc/c_file.h +++ b/tools/preproc/c_file.h @@ -56,6 +56,4 @@ private: void RaiseWarning(const char* format, ...); }; -#define CHUNK_SIZE 4096 - #endif // C_FILE_H diff --git a/tools/preproc/io.cpp b/tools/preproc/io.cpp new file mode 100644 index 0000000000..321676180d --- /dev/null +++ b/tools/preproc/io.cpp @@ -0,0 +1,51 @@ +#include "preproc.h" +#include "io.h" +#include +#include +#include + +char *ReadFileToBuffer(const char *filename, bool isStdin, long *size) +{ + FILE *fp; + if (isStdin) + fp = stdin; + else + fp = std::fopen(filename, "rb"); + + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename); + + *size = 0; + char *buffer = (char *)malloc(CHUNK_SIZE + 1); + if (buffer == NULL) { + FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename); + } + + std::size_t numAllocatedBytes = CHUNK_SIZE + 1; + std::size_t bufferOffset = 0; + std::size_t count; + + while ((count = std::fread(buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) { + if (!std::ferror(fp)) { + *size += count; + + if (std::feof(fp)) { + break; + } + + numAllocatedBytes += CHUNK_SIZE; + bufferOffset += CHUNK_SIZE; + buffer = (char *)realloc(buffer, numAllocatedBytes); + if (buffer == NULL) { + FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename); + } + } else { + FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename, std::strerror(errno)); + } + } + + buffer[*size] = 0; + + std::fclose(fp); + return buffer; +} diff --git a/tools/preproc/io.h b/tools/preproc/io.h new file mode 100644 index 0000000000..ac4e91051f --- /dev/null +++ b/tools/preproc/io.h @@ -0,0 +1,8 @@ +#ifndef IO_H_ +#define IO_H_ + +#define CHUNK_SIZE 4096 + +char *ReadFileToBuffer(const char *filename, bool isStdin, long *size); + +#endif // IO_H_ diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp index eb2d4c8a23..20c2de51b6 100644 --- a/tools/preproc/preproc.cpp +++ b/tools/preproc/preproc.cpp @@ -20,11 +20,14 @@ #include #include +#include #include "preproc.h" #include "asm_file.h" #include "c_file.h" #include "charmap.h" +static void UsageAndExit(const char *program); + Charmap* g_charmap; void PrintAsmBytes(unsigned char *s, int length) @@ -43,11 +46,12 @@ void PrintAsmBytes(unsigned char *s, int length) } } -void PreprocAsmFile(std::string filename) +void PreprocAsmFile(std::string filename, bool isStdin, bool doEnum) { std::stack stack; - stack.push(AsmFile(filename)); + stack.push(AsmFile(filename, isStdin, doEnum)); + std::printf("# 1 \"%s\"\n", filename.c_str()); for (;;) { @@ -66,7 +70,7 @@ void PreprocAsmFile(std::string filename) switch (directive) { case Directive::Include: - stack.push(AsmFile(stack.top().ReadPath())); + stack.push(AsmFile(stack.top().ReadPath(), false, doEnum)); stack.top().OutputLocation(); break; case Directive::String: @@ -83,6 +87,12 @@ void PreprocAsmFile(std::string filename) PrintAsmBytes(s, length); break; } + case Directive::Enum: + { + if (!stack.top().ParseEnum()) + stack.top().OutputLine(); + break; + } case Directive::Unknown: { std::string globalLabel = stack.top().GetGlobalLabel(); @@ -109,9 +119,9 @@ void PreprocCFile(const char * filename, bool isStdin) cFile.Preproc(); } -char* GetFileExtension(char* filename) +const char* GetFileExtension(const char* filename) { - char* extension = filename; + const char* extension = filename; while (*extension != 0) extension++; @@ -130,35 +140,64 @@ char* GetFileExtension(char* filename) return extension; } +static void UsageAndExit(const char *program) +{ + std::fprintf(stderr, "Usage: %s [-i] [-e] SRC_FILE CHARMAP_FILE\nwhere -i denotes if input is from stdin\n -e enables enum handling\n", program); + std::exit(EXIT_FAILURE); +} + int main(int argc, char **argv) { - if (argc < 3 || argc > 4) + int opt; + const char *source = NULL; + const char *charmap = NULL; + bool isStdin = false; + bool doEnum = false; + + /* preproc [-i] [-e] SRC_FILE CHARMAP_FILE */ + while ((opt = getopt(argc, argv, "ie")) != -1) { - std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE [-i]\nwhere -i denotes if input is from stdin\n", argv[0]); - return 1; + switch (opt) + { + case 'i': + isStdin = true; + break; + case 'e': + doEnum = true; + break; + default: + UsageAndExit(argv[0]); + break; + } } - g_charmap = new Charmap(argv[2]); + if (optind + 2 != argc) + UsageAndExit(argv[0]); - char* extension = GetFileExtension(argv[1]); + source = argv[optind + 0]; + charmap = argv[optind + 1]; + + g_charmap = new Charmap(charmap); + + const char* extension = GetFileExtension(source); if (!extension) FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]); if ((extension[0] == 's') && extension[1] == 0) - PreprocAsmFile(argv[1]); - else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) { - if (argc == 4) { - if (argv[3][0] == '-' && argv[3][1] == 'i' && argv[3][2] == '\0') { - PreprocCFile(argv[1], true); - } else { - FATAL_ERROR("unknown argument flag \"%s\".\n", argv[3]); - } - } else { - PreprocCFile(argv[1], false); - } - } else + { + PreprocAsmFile(source, isStdin, doEnum); + } + else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) + { + if (doEnum) + FATAL_ERROR("-e is invalid for C sources\n"); + PreprocCFile(source, isStdin); + } + else + { FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension); + } return 0; } diff --git a/tools/preproc/string_parser.cpp b/tools/preproc/string_parser.cpp index dd5196a444..9f39baa497 100644 --- a/tools/preproc/string_parser.cpp +++ b/tools/preproc/string_parser.cpp @@ -87,7 +87,7 @@ std::string StringParser::ReadCharOrEscape() if (isEscape) RaiseError("unknown escape '\\%c'", code); else - RaiseError("unknown character U+%X", code); + RaiseError("unknown character U+%X\nIf this character is intended to be used, it needs to be implemented", code); } return sequence; diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index de8b7786c4..bd18995a2e 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -1057,6 +1057,9 @@ static const struct { { "Genesect-Chill", "Genesect", "Chill Drive" }, { "Genesect-Douse", "Genesect", "Douse Drive" }, { "Genesect-Shock", "Genesect", "Shock Drive" }, + { "Ogerpon-Cornerstone", "Ogerpon", "Cornerstone Mask" }, + { "Ogerpon-Hearthflame", "Ogerpon", "Hearthflame Mask" }, + { "Ogerpon-Wellspring", "Ogerpon", "Wellspring Mask" }, { "Silvally-Bug", "Silvally", "Bug Memory" }, { "Silvally-Dark", "Silvally", "Dark Memory" }, { "Silvally-Dragon", "Silvally", "Dragon Memory" }, @@ -1583,7 +1586,7 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par fprintf(f, "// DO NOT MODIFY THIS FILE! It is auto-generated from %s\n", parsed->source->path); fprintf(f, "//\n"); fprintf(f, "// If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE\n"); - fprintf(f, "// in include/config.h and remove this notice.\n"); + fprintf(f, "// in include/config/general.h and remove this notice.\n"); fprintf(f, "// Use sed -i '/^#line/d' '%s' to remove #line markers.\n", output_path); fprintf(f, "//\n"); fprintf(f, "\n"); @@ -1824,16 +1827,14 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par if (pokemon->dynamax_level_line || pokemon->gigantamax_factor_line) { - fprintf(f, " .shouldDynamax = TRUE,\n"); + fprintf(f, " .shouldUseDynamax = TRUE,\n"); } - - if (pokemon->tera_type_line) + else if (pokemon->tera_type_line) { fprintf(f, "#line %d\n", pokemon->tera_type_line); fprintf(f, " .teraType = "); fprint_constant(f, "TYPE", pokemon->tera_type); fprintf(f, ",\n"); - fprintf(f, " .shouldTerastal = TRUE,\n"); } if (pokemon->moves_n > 0)