diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index e838ba1f88..d7a4516d2a 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -11,7 +11,7 @@ body: attributes: label: Description description: | - Describe the issue you are experiencing. + Describe the issue you are experiencing. Attach images/videos if possible. placeholder: | Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video @@ -23,16 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.3 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 + - 1.6.0 + - 1.5.3 - 1.5.2 - 1.5.1 - 1.5.0 - - 1.4.3 - - 1.4.2 - - 1.4.1 - - 1.4.0 - - pre-1.4.0 + - pre-1.5.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 d0653094cd..0c3378eb3f 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -11,7 +11,7 @@ body: attributes: label: Description description: | - Describe the issue you are experiencing. + Describe the issue you are experiencing. Attach images/videos if possible. placeholder: | Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video @@ -23,16 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.3 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 + - 1.6.0 + - 1.5.3 - 1.5.2 - 1.5.1 - 1.5.0 - - 1.4.3 - - 1.4.2 - - 1.4.1 - - 1.4.0 - - pre-1.4.0 + - pre-1.5.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/03_feature_requests.yaml b/.github/ISSUE_TEMPLATE/03_feature_requests.yaml index 682f0dc098..8d56216265 100644 --- a/.github/ISSUE_TEMPLATE/03_feature_requests.yaml +++ b/.github/ISSUE_TEMPLATE/03_feature_requests.yaml @@ -11,7 +11,7 @@ body: attributes: label: Description description: | - Describe the issue you are experiencing. + Describe the issue you are experiencing. Attach images/videos if possible. placeholder: | Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 51998d7306..538dae0383 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -11,7 +11,7 @@ body: attributes: label: Description description: | - Describe the issue you are experiencing. + Describe the issue you are experiencing. Attach images/videos if possible. placeholder: | Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video @@ -23,16 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.5.3 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 + - 1.6.0 + - 1.5.3 - 1.5.2 - 1.5.1 - 1.5.0 - - 1.4.3 - - 1.4.2 - - 1.4.1 - - 1.4.0 - - pre-1.4.0 + - pre-1.5.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9dc46b6e3f..9a6dfeadd9 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false -contact_links: +contact_links: - name: Rom-Hacking Hideout's Discord server! url: https://discord.gg/6CzjAG6GZk about: You can follow the development of pokeemerald-expansion and be notified of new releases :) \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 02d7e22b6c..8c5bcb7ed8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,6 +10,7 @@ on: jobs: build: runs-on: ubuntu-latest + container: devkitpro/devkitarm env: GAME_VERSION: EMERALD GAME_REVISION: 0 @@ -27,7 +28,9 @@ jobs: repository: pret/agbcc - name: Install binutils - run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi libelf-dev + run: | + sudo apt update + sudo apt install -y build-essential libpng-dev libelf-dev # build-essential, git, and libpng-dev are already installed # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP @@ -39,6 +42,9 @@ jobs: working-directory: agbcc - name: Agbcc + env: + MODERN: 0 + COMPARE: 0 run: make -j${nproc} -O all - name: Modern @@ -49,6 +55,7 @@ jobs: - name: Test env: + MODERN: 1 TEST: 1 run: | make -j${nproc} -O pokeemerald-test.elf diff --git a/.gitignore b/.gitignore index 082430d794..fa01e7526f 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ prefabs.json *.diff *.sym *.js +src/data/map_group_count.h diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..9d599aaf3f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,122 @@ +# Pokeemerald-Expansion Changelog + +# Version 1.6.2 + +## 🌋 *IMPORTANT CHANGES* 🌋 +### Battle changes +* Battler Types are now obtained via `GetBattlerType` instead of `gBattleMons[battlerId].type1/2/3` to better consider Roost. Be sure to update your custom battle effects to account for this change. + +## 🧬 General 🧬 +### Fixed +* Fixed Cheat Start not initiating time-based events by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3446 + +## 🐉 Pokémon 🐉 +### Changed +* Updated Cresselia's base stats to Gen 9 by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3419 +* Updated Zacian/Zamazenta base stats to Gen 9 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3421 +### Fixed +* Fixed Kleavor, Hisuian Sneasel and Sneasler missing their SV abilities by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3391 +* Fixed Bergmite/Avalugg old and updated egg groups being switched by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3380 + +## 🤹 Moves 🤹 +### Changed +* Quick Draw now uses weighted RNG by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 +* Added `IS_BATTLER_TYPELESS` macro that checks if the specified battler has no valid type by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303 +### Fixed +* Fixed Protect failing if the user flinched on the previous turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345 +* Fixed entry hazards not working properly being cleared on switch-in by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316 + * This includes Toxic Spikes not working if Pecha Berry actived on the previous turn. +* Fixed Roost overwriting other type changing at the end of the turn (Soak, Forest's Curse, Color Change, etc.) by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 + * Now it suppresses the user's Flying-type rather than remove and re-add it. +* Fixes Salt Cure visual bug if mon fainted by direct attack by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3388 +* Fixed Purifying Salt not preventing the use of Rest by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 +* Fixed Make it Rain lowering Sp. Attack twice if hitting 2 targets in double battles by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3441 +* Fixed Reflect Type not properly handle 3rd types by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303 +* Fixed form change triggered by switching not occuring when using moves like U-Turn or Baton Pass by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3463 +* Fixed Last Resort not counting Sleep Talk as used for its effect by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 + +## 🎭 Abilities 🎭 +### Changed +* Removed unused `STATUS3_CANT_SCORE_A_CRIT` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Moved Beads of Ruin and Sword of Ruin damage to the appropiate damage modifier functions by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +### Fixed +* Fixed Intimidate increasing the attack of both opponents if one of them has Contrary in double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365 +* Fixed Battle/Shell Armor not preventing critical hits by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Fixed Rivalry's effect being reversed by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Fixed Rivalry lowering attack if either attacker or target were genderless by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Fixed missing Poison Heal Ability Popup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385 +* Fixed Parental Bond not working at all by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417 +* Fixed Beads of Ruin and Sword of Ruin damage modifiers by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +* Fixed Sheer Force not negating effects that benefit the user (eg. Flame Charge, Power-Up Punch) by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 +* Fixed Strength Sap not healing the user when used on a Substitute by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486 +* Fixed Substitute showing the "took damage for" message if Strength Sap was used on it by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486 +* Fixed Weak Armor interrupting Multi Hit moves by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3497 + +## 🧶 Items 🧶 +### Fixed +* Fixed Shiny Charm doing too many rerolls by default by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3327 +* Fixed Berserk Gene activating for the wrong Pokémon double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363 +* Fixed Red Card not being consumed after opponent Sticky Web activation by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Fixed implementation of Gen6 that didn't allow for the Exp Share flag to be set via script without setting the item to the Gen 6+ version by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3384 +* Fixed Kee Berry raising defense by 1 stage instead of 2 by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 +* Fixed Kee Berry incorrect stat raise message by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 +* Fixed Razor Fang not being able to be used directly even if `I_USE_EVO_HELD_ITEMS_FROM_BAG` was set to `TRUE` by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/3456 + +## 🧹 Cleanup 🧹 +* `AbilityBattleEffects` uses `B_MSG_TERRAIN` constants for field terrain intro text by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3410 +* Removed all trailing whitespace by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3472 + +## 🧪 Test Runner 🧪 +### Added +* Flinch tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345 +* Berserk Gene double battle tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363 +* More specific Toxic Spikes tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316 +* Red Card/Sticky Web test @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Intimidate/Contrary double battle test by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365 +* Critical Hit tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Roost tests by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 +* Rivalry tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385 + * Defeatist, Dragon's Maw, Earth Eater, Gale Wings, Poison Heal, Rocky Payload, Sap Sipper, Steelworker and Transistor. +* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 + * Beast Boost, Ice Scales, Neuroforce, Purifying Salt, Quick Draw and Sharpness. +* Berry tests @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 + * Full: Apicot, Custap, Ganlon, Jaboca, Kee, Lansat, Liechi, Maranga, Micle, Petaya, Rowap and Salac Berries. + * TODO: Starf Berry. +* Weather and type-specific tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260 + * Full: Freezing, Hail, Moonlight, Morning Sun, Sandstorm, Snow, Solar Beam/Blade, Steel poisoning, Synthesis, Thunder and Weather Ball. + * Partial: Prankster, Safety Goggles, Aurora Veil, Hurricane, Leech Seed and OHKO moves. + * TODO: Harvest. +* Single Parental Bond test by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417 +* Several tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 + * Full: Weak Armor, Last Resort, Stealth Rock. + * Completed Weak Armor tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3493 + * Partial: Defiant, Sheer Force, White Herb, Strength Sap. +### Changed +* Red Card tests now check if the item was consumed by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Tests now cannot use `i` in their cycles to avoid messing with `PARAMETRIZE` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408 +* Moved battle tests off the heap by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3414 +* Moved Powder/Grass test to `move_flags` folder by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260 +* Continuous `NOT x; NOT y;` are now not allowed in tests due to them not acting as one would expect by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3459 + * Test writers should use `NONE_OF { x; y; }` instead. +### Fixed +* Fixed CreateNPCTrainerPartyForTrainer test failing on modern by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3367 +* Fixed `RNG_CRITICAL_HIT` by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Fixed `ASSUMPTIONS` block not working by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3368 + * Fixup by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408 +* Fixed Beads of Ruin and Sword of Ruin damage tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +* Fixes test RNG by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3433 +* Fixed battle test estimateCost bug by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3448 +* Test cleanup and improvements by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3449 + * Removed duplicated Prankster TO_DO test. + * Corrected Multi-hit test names (4 and 5 hits stated 35% instead of 15%). + * Grouped Maranga Berry's Physical vs Special tests using PARAMETRIZE. + * Improved Jaboca, Kee and Rowap tests by @AlexOn1ine +* Fixed `ModifyPersonalityForNature` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3452 +* Fixed test_runner.c modern warning by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3451 + +## New Contributors +* @BLourenco made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 + +## Full Changelog +https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.1...expansion/1.6.2 diff --git a/INSTALL.md b/INSTALL.md index e74706d6aa..f82649d7e2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -82,7 +82,7 @@ Some tips before proceeding: 4. Certain packages are required to build pokeemerald. Install these packages by running the following command: ```bash - sudo apt install build-essential binutils-arm-none-eabi git libpng-dev + sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev ```
Note... @@ -150,9 +150,9 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert.
Notes... - > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. - > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. - > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. + > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. + > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there.
@@ -329,28 +329,28 @@ Open Terminal and enter the following commands, depending on which distro you're ### Debian/Ubuntu-based distributions Run the following command to install the necessary packages: ```bash -sudo apt install build-essential binutils-arm-none-eabi git libpng-dev +sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev ``` Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux).
Note for legacy repos... > If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, -> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to +> then you will have to install devkitARM. Install all the above packages except for the arm-none-eabi packages, and follow the instructions to > [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions).
### Arch Linux Run this command as root to install the necessary packages: ```bash -pacman -S base-devel arm-none-eabi-binutils git libpng +pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng ``` Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux).
Note for legacy repos... > If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, -> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to +> then you will have to install devkitARM. Install all the above packages except for the arm-none-eabi packages, and follow the instructions to > [install devkitARM on Arch Linux](#installing-devkitarm-on-arch-linux).
diff --git a/Makefile b/Makefile index 80ee5303d3..443ea1bb20 100644 --- a/Makefile +++ b/Makefile @@ -40,12 +40,12 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 -MODERN ?= 0 +MODERN ?= 1 TEST ?= 0 ANALYZE ?= 0 -ifeq (modern,$(MAKECMDGOALS)) - MODERN := 1 +ifeq (agbcc,$(MAKECMDGOALS)) + MODERN := 0 endif ifeq (check,$(MAKECMDGOALS)) @@ -69,12 +69,12 @@ else CPP := $(PREFIX)cpp endif -ROM_NAME := pokeemerald.gba +ROM_NAME := pokeemerald_agbcc.gba ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) OBJ_DIR_NAME := build/emerald -MODERN_ROM_NAME := pokeemerald_modern.gba +MODERN_ROM_NAME := pokeemerald.gba MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) MODERN_OBJ_DIR_NAME := build/modern @@ -85,7 +85,11 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) +ifeq ($(MODERN),0) TEST_OBJ_DIR_NAME := build/test +else +TEST_OBJ_DIR_NAME := build/modern-test +endif TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -119,7 +123,7 @@ LIBPATH := -L ../../tools/agbcc/lib LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall else CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer endif @@ -178,7 +182,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall modern tidymodern tidynonmodern check +.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall agbcc modern tidymodern tidynonmodern check infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -186,7 +190,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Disable dependency scanning for clean/tidy/tools # Use a separate minimal makefile for speed # Since we don't need to reload most of this makefile -ifeq (,$(filter-out all rom compare modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare agbcc modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -345,6 +349,7 @@ $(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast +$(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init endif ifeq ($(DINFO),1) @@ -480,6 +485,8 @@ $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ $(FIX) $@ -p --silent +agbcc: all + modern: all LD_SCRIPT_TEST := ld_script_test.txt diff --git a/README.md b/README.md index 6f87572467..fc2a012780 100644 --- a/README.md +++ b/README.md @@ -108,11 +108,17 @@ The pokeemerald Expansion is a feature branch meant to be integrated into existi - Feature branches incorporated: - [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by Xhyzi. - A small signature from all of us to show the collective effort in the project :) - - [Overworld debug]() by TheXaman + - [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by TheXaman + - May be disabled. - Accesible by pressing `R + Start` in the overworld by default. - **Additional features**: - *Clear Boxes*: cleans every Pokémon from the Boxes. - *Hatch an Egg*: lets you choose an Egg in your party and immediatly hatch it. + - [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by TheXaman + - May be disabled. + - **Additional features**: + - *Support for new evolution methods*. + - *Dark Mode*. - Other features - Pressing B while holding a Pokémon drops them like in modern games (configurable). - Running indoors (configurable). @@ -139,7 +145,7 @@ With this, you'll get the latest version of the Expansion, plus a couple of bugf ## **How do I update my version of the pokeemerald Expansion?** - If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Once you have your remote set up, run the command `git pull RHH expansion/1.6.0`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.6.2`. ### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 866831c462..cc06b4bf41 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1366,6 +1366,20 @@ .byte \battler .endm + .macro trysetoctolock battler:req, failInstr:req + callnative BS_TrySetOctolock + .byte \battler + .4byte \failInstr + .endm + + .macro setglaiverush + callnative BS_SetGlaiveRush + .endm + + .macro tryrelicsong + callnative BS_TryRelicSong + .endm + .macro setzeffect callnative BS_SetZEffect .endm @@ -1456,6 +1470,54 @@ .4byte \jumpInstr .endm + .macro tryreflecttype failInstr:req + callnative BS_TryReflectType + .4byte \failInstr + .endm + + @ Used to active a different Max Move effects. + .macro setmaxmoveeffect + callnative BS_SetMaxMoveEffect + .endm + + .macro setsteelsurge, failInstr:req + callnative BS_SetSteelsurge + .4byte \failInstr + .endm + + .macro damagenontypes + callnative BS_DamageNonTypes + .endm + + .macro trysetstatus1, ptr:req + callnative BS_TrySetStatus1 + .4byte \ptr + .endm + + .macro trysetstatus2, ptr:req + callnative BS_TrySetStatus2 + .4byte \ptr + .endm + + .macro tryhealsixthhealth, ptr:req + callnative BS_HealOneSixth + .4byte \ptr + .endm + + .macro tryrecycleberry, ptr:req + callnative BS_TryRecycleBerry + .4byte \ptr + .endm + + .macro updatedynamax + callnative BS_UpdateDynamax + .endm + + .macro jumpiftargetdynamaxed, ptr:req + callnative BS_JumpIfDynamaxed + .4byte \ptr + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES @@ -1686,11 +1748,6 @@ .4byte \failInstr .endm - .macro tryreflecttype failInstr:req - various BS_ATTACKER, VARIOUS_TRY_REFLECT_TYPE - .4byte \failInstr - .endm - .macro trysoak failInstr:req various BS_ATTACKER, VARIOUS_TRY_SOAK .4byte \failInstr @@ -2004,10 +2061,6 @@ .4byte \jumpInstr .endm - .macro applyplasmafists - various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS - .endm - .macro jumpifweatheraffected battler:req, flags:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED .4byte \flags @@ -2044,11 +2097,6 @@ .4byte \failInstr .endm - .macro setoctolock battler:req, failInstr:req - various \battler, VARIOUS_SET_OCTOLOCK - .4byte \failInstr - .endm - .macro cutonethirdhpraisestats failInstr:req various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS .4byte \failInstr @@ -2340,3 +2388,8 @@ getbattlerfainted \battler jumpifbyte CMP_EQUAL, gBattleCommunication, \value, \ptr .endm + + .macro flushtextbox + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 0b72e1cf98..be0ae0adbb 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -780,7 +780,7 @@ gBattleAnims_Moves:: .4byte Move_GLACIAL_LANCE .4byte Move_ASTRAL_BARRAGE .4byte Move_EERIE_SPELL -@@@@LA MOVES +@@@@ LA MOVES .4byte Move_DIRE_CLAW .4byte Move_PSYSHIELD_BASH .4byte Move_POWER_SHIFT @@ -856,6 +856,10 @@ gBattleAnims_Moves:: .4byte Move_MAGICAL_TORQUE .4byte Move_PSYBLADE .4byte Move_HYDRO_STEAM + .4byte Move_BLOOD_MOON + .4byte Move_MATCHA_GOTCHA + .4byte Move_SYRUP_BOMB + .4byte Move_IVY_CUDGEL @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -892,6 +896,60 @@ gBattleAnims_Moves:: .4byte Move_MENACING_MOONRAZE_MAELSTROM .4byte Move_LIGHT_THAT_BURNS_THE_SKY .4byte Move_SOUL_STEALING_7_STAR_STRIKE +@@@@ MAX MOVES + .4byte Move_MAX_GUARD + .4byte Move_MAX_STRIKE + .4byte Move_MAX_KNUCKLE + .4byte Move_MAX_AIRSTREAM + .4byte Move_MAX_OOZE + .4byte Move_MAX_QUAKE + .4byte Move_MAX_ROCKFALL + .4byte Move_MAX_FLUTTERBY + .4byte Move_MAX_PHANTASM + .4byte Move_MAX_STEELSPIKE + .4byte Move_MAX_FLARE + .4byte Move_MAX_GEYSER + .4byte Move_MAX_OVERGROWTH + .4byte Move_MAX_LIGHTNING + .4byte Move_MAX_MINDSTORM + .4byte Move_MAX_HAILSTORM + .4byte Move_MAX_WYRMWIND + .4byte Move_MAX_DARKNESS + .4byte Move_MAX_STARFALL +@@@@ G-MAX MOVES + .4byte Move_G_MAX_VINE_LASH + .4byte Move_G_MAX_WILDFIRE + .4byte Move_G_MAX_CANNONADE + .4byte Move_G_MAX_BEFUDDLE + .4byte Move_G_MAX_VOLT_CRASH + .4byte Move_G_MAX_GOLD_RUSH + .4byte Move_G_MAX_CHI_STRIKE + .4byte Move_G_MAX_TERROR + .4byte Move_G_MAX_FOAM_BURST + .4byte Move_G_MAX_RESONANCE + .4byte Move_G_MAX_CUDDLE + .4byte Move_G_MAX_REPLENISH + .4byte Move_G_MAX_MALODOR + .4byte Move_G_MAX_MELTDOWN + .4byte Move_G_MAX_DRUM_SOLO + .4byte Move_G_MAX_FIREBALL + .4byte Move_G_MAX_HYDROSNIPE + .4byte Move_G_MAX_WIND_RAGE + .4byte Move_G_MAX_GRAVITAS + .4byte Move_G_MAX_STONESURGE + .4byte Move_G_MAX_VOLCALITH + .4byte Move_G_MAX_TARTNESS + .4byte Move_G_MAX_SWEETNESS + .4byte Move_G_MAX_SANDBLAST + .4byte Move_G_MAX_STUN_SHOCK + .4byte Move_G_MAX_CENTIFERNO + .4byte Move_G_MAX_SMITE + .4byte Move_G_MAX_SNOOZE + .4byte Move_G_MAX_FINALE + .4byte Move_G_MAX_STEELSURGE + .4byte Move_G_MAX_DEPLETION + .4byte Move_G_MAX_ONE_BLOW + .4byte Move_G_MAX_RAPID_FLOW @@@ Last Move - cannot be reached .4byte Move_COUNT @@ -949,6 +1007,9 @@ gBattleAnims_General:: .4byte General_Snow @ B_ANIM_SNOW_CONTINUES .4byte General_UltraBurst @ B_ANIM_ULTRA_BURST .4byte General_SaltCureDamage @ B_ANIM_SALT_CURE_DAMAGE + .4byte General_DynamaxGrowth @ B_ANIM_DYNAMAX_GROWTH + .4byte General_SetWeather @ B_ANIM_MAX_SET_WEATHER + .4byte General_SyrupBombSpeedDrop @ B_ANIM_SYRUP_BOMB_SPEED_DROP .align 2 gBattleAnims_Special:: @@ -4000,58 +4061,57 @@ Move_BUG_BITE: end Move_CHARGE_BEAM: - loadspritegfx ANIM_TAG_BLACK_BALL_2 + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRICITY loadspritegfx ANIM_TAG_SPARK_2 - delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) - playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 - delay 0 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1 - delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) - delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) - playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1 - delay 0 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1 - delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 12 + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, RGB(31, 31, 22) + delay 50 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 16, 0, 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 11, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(31, 31, 22) + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam + call SparkBeam delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 7, 7, RGB(31, 31, 22) - playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 - delay 4 - waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) - playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER - createsprite gZapCannonBallSpriteTemplate, ANIM_TARGET, 3, 10, 0, 0, 0, 30, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 64, 40, 1 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 128, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 192, 40, 2 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 32, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 96, 40, 1 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 160, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 224, 40, 2 - waitforvisualfinish - createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 - delay 15 - waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 - call ElectricityEffect + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(31, 31, 22) waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + blendoff end +SparkBeam: + createsprite gSparkBeamSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 + delay 1 + createsprite gSparkBeamSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 + delay 1 + return + Move_WOOD_HAMMER: loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER @@ -4236,22 +4296,22 @@ Move_HEAL_ORDER: Move_HEAD_SMASH: loadspritegfx ANIM_TAG_IMPACT - call SetImpactBackground - createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + loadspritegfx ANIM_TAG_ROCKS + createvisualtask AnimTask_SkullBashPosition, 2, 0 playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish - delay 2 - createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + playse SE_BANG + call SetImpactBackground + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 0 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 28, 2, 3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 waitforvisualfinish - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 - loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 8, 3 - waitforvisualfinish - clearmonbg ANIM_TARGET - blendoff - delay 2 + createvisualtask AnimTask_SkullBashPosition, 2, 1 restorebg waitbgfadein end @@ -4800,19 +4860,82 @@ Move_WONDER_ROOM:: end Move_PSYSHOCK: + loadspritegfx ANIM_TAG_RED_ORB_2 + loadspritegfx ANIM_TAG_POISON_JAB + loadspritegfx ANIM_TAG_GRAY_SMOKE + loadspritegfx ANIM_TAG_WISP_FIRE monbg ANIM_TARGET setalpha 8, 8 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(31, 23, 0) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE waitforvisualfinish - loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 - createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1 + delay 10 + call PsyshockConverge waitforvisualfinish clearmonbg ANIM_TARGET blendoff end +PsyshockConverge: + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 40, 40, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -40, -40, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 0, 40, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 0, -40, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 40, -20, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 40, 20, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -40, -20, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -40, 20, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -20, 30, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 20, -30, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -20, -30, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 20, 30, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, -40, 0, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockOrbSpriteTemplate, ANIM_TARGET, 2, 40, 0, 16 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + delay 6 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_WHITE, 12, 0, 1 + createsprite gPsyshockSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 2 + createsprite gPsyshockSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + delay 2 + return + Move_VENOSHOCK: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_TOXIC_BUBBLE @@ -5741,23 +5864,79 @@ Move_QUASH: Move_ACROBATICS: loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 waitforvisualfinish - playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 - delay 7 - playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 - createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 + call SetSkyBg + call AcrobaticsSlashes waitforvisualfinish clearmonbg ANIM_TARGET - blendoff + visible ANIM_ATTACKER + call UnsetSkyBg end +AcrobaticsSlashes: + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 40, 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -10, 3 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 24, -19 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -28, -15 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -6, -30 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -20, 6 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 28, 2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -14, -25 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 9, -2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -1, 0 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 21, 4 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 28, 20 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -7, 24 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -11, 1 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 12, -18 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -21, -14 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -29, 7 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 15, 28 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -21, -16 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + delay 2 + return + Move_REFLECT_TYPE: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color @@ -8252,17 +8431,99 @@ Move_FELL_STINGER: end Move_PHANTOM_FORCE: - choosetwoturnanim PhantomForceSetUp, PhantomForceUnleash -PhantomForceEnd: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + choosetwoturnanim PhantomForcePrep PhantomForceAttack +PhantomForceWaitEnd: + waitforvisualfinish + restorebg + waitbgfadein end -PhantomForceSetUp: +PhantomForcePrep: + monbg ANIM_ATTACKER + fadetobg BG_GHOST + waitbgfadein + delay 0 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 + createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER - goto PhantomForceEnd -PhantomForceUnleash: - visible ANIM_ATTACKER - goto PhantomForceEnd + delay 1 + goto PhantomForceWaitEnd +PhantomForceAttack: + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + fadetobg BG_GHOST + waitbgfadein + delay 1 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) + setalpha 12, 8 + waitforvisualfinish + delay 10 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createvisualtask AnimTask_PurpleFlamesOnTarget, 0x3 + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 + delay 30 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) + waitforvisualfinish + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_PURPLE + waitforvisualfinish + delay 1 + playsewithpan SOUND_PAN_ATTACKER, 192 + createvisualtask AnimTask_NightShadeClone, 5, 10 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 1 + goto PhantomForceWaitEnd +PhantomForceBg: + fadetobg BG_DARK + waitbgfadeout + createvisualtask AnimTask_FadeScreenToWhite, 5 + waitbgfadein + return Move_TRICK_OR_TREAT: + loadspritegfx ANIM_TAG_EYE_SPARKLE + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + fadetobg BG_NIGHTMARE + waitbgfadein + delay 10 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(10, 2, 19) + waitforvisualfinish + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ScaryFace, 5 + delay 13 + waitforvisualfinish + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(10, 2, 19) @;Deep purple + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + restorebg + waitbgfadein end Move_NOBLE_ROAR: @@ -15101,16 +15362,21 @@ Move_SILK_TRAP:: clearmonbg ANIM_ATK_PARTNER end -@ Also used by Snow weather. Currently identical with Move_HAIL +@ Also used by Snow weather. Credits to Dat.H A Move_SNOWSCAPE:: - loadspritegfx ANIM_TAG_HAIL - loadspritegfx ANIM_TAG_ICE_CRYSTALS - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK + loadspritegfx ANIM_TAG_SNOWFLAKES + playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB(11, 18, 22) waitforvisualfinish - createvisualtask AnimTask_Hail, 5 - loopsewithpan SE_M_HAIL, 0, 8, 10 + createvisualtask AnimTask_CreateSnowflakes, 2, 0, 3, 120 + createvisualtask AnimTask_CreateSnowflakes, 2, 0, 3, 120 + createvisualtask AnimTask_CreateSnowflakes, 2, 0, 3, 120 + delay 120 + playsewithpan SE_M_GUST2, SOUND_PAN_ATTACKER + delay 30 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB(11, 18, 22) waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end @Credits to Skeli @@ -16459,6 +16725,113 @@ Move_DOUBLE_SHOCK:: blendoff end +Move_SYRUP_BOMB:: + createvisualtask AnimTask_SyrupBomb, 0x5 + jumpargeq 0x0, FALSE, Move_SYRUP_BOMB_RED + jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW + +@ Credits to Dat.H A +Move_SYRUP_BOMB_RED: + loadspritegfx ANIM_TAG_SYRUP_BLOB_RED + loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED + loadspritegfx ANIM_TAG_SYRUP_SHELL_RED + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + call SyrupBombProjectileRed + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(20, 3, 3) + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + delay 5 + createsprite gSyrupBombRedShellSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 100 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 0, 40, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, -8, -44, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, -46, -28, 20 + createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 46, 9, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + delay 5 + waitsound + waitforvisualfinish + end +SyrupBombProjectileRed: + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gSyrupRedProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 + delay 3 + return + +Move_SYRUP_BOMB_YELLOW: + loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW + loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW + loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + call SyrupBombProjectileYellow + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(23, 13, 1) + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + delay 5 + createsprite gSyrupBombYellowShellSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 100 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 0, 40, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, -8, -44, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, -46, -28, 20 + createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 46, 9, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + delay 5 + waitsound + waitforvisualfinish + end +SyrupBombProjectileYellow: + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gSyrupYellowProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 + delay 3 + return + +General_SyrupBombSpeedDrop:: + createvisualtask AnimTask_StickySyrup, 0x5 + jumpargeq 0x0, FALSE, SyrupBombSpeedDropRed + jumpargeq 0x0, TRUE, SyrupBombSpeedDropYellow + +SyrupBombSpeedDropRed: + loadspritegfx ANIM_TAG_SYRUP_BLOB_RED + loadspritegfx ANIM_TAG_SYRUP_SHELL_RED + loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(20, 3, 3) + createsprite gSyrupBombRedShellBSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 60 + waitforvisualfinish + end + +SyrupBombSpeedDropYellow: + loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW + loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW + loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(23, 13, 1) + createsprite gSyrupBombYellowShellBSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 60 + waitforvisualfinish + end + Move_TERA_BLAST:: Move_AXE_KICK:: Move_LAST_RESPECTS:: @@ -16505,6 +16878,9 @@ Move_COMBAT_TORQUE:: Move_MAGICAL_TORQUE:: Move_PSYBLADE:: Move_HYDRO_STEAM:: +Move_BLOOD_MOON:: +Move_MATCHA_GOTCHA:: +Move_IVY_CUDGEL:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ @@ -19418,8 +19794,8 @@ Move_MILK_DRINK: Move_MAGNITUDE: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish - jumpargeq 15, FALSE, MagnitudeRegular - jumpargeq 15, TRUE, MagnitudeIntense + jumpreteq FALSE, MagnitudeRegular + jumpreteq TRUE, MagnitudeIntense MagnitudeEnd: end MagnitudeRegular: @@ -27121,9 +27497,9 @@ General_AffectionHangedOn:: createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER delay 15 createvisualtask AnimTask_AffectionHangedOn, 0x5 - jumpargeq 0x0, FRIENDSHIP_100_TO_149, General_AffectionHangedOn_3Hearts - jumpargeq 0x0, FRIENDSHIP_150_TO_199, General_AffectionHangedOn_4Hearts - jumpargeq 0x0, FRIENDSHIP_200_TO_254, General_AffectionHangedOn_5Hearts + jumpargeq 0x0, AFFECTION_THREE_HEARTS, General_AffectionHangedOn_3Hearts + jumpargeq 0x0, AFFECTION_FOUR_HEARTS, General_AffectionHangedOn_4Hearts + jumpargeq 0x0, AFFECTION_FIVE_HEARTS, General_AffectionHangedOn_5Hearts createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, -384, -31 General_AffectionHangedOn_5Hearts: createsprite gRedHeartBurstSpriteTemplate, ANIM_ATTACKER, 3, -128, -22 @@ -32860,3 +33236,182 @@ SoulStealingSevenStarStrikeExplosion: createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return + +@@@@@@@@@@ MAX MOVES @@@@@@@@@@ +General_SetWeather:: + createvisualtask AnimTask_GetWeatherToSet, 2 + jumpreteq 1, General_Sun + jumpreteq 2, General_Rain + jumpreteq 3, General_Sandstorm + jumpreteq 4, General_Hail + end + +Move_MAX_GUARD: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_PROTECT + end + +Move_MAX_STRIKE: +Move_G_MAX_REPLENISH: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_GIGA_IMPACT + end + +Move_MAX_AIRSTREAM: +Move_G_MAX_WIND_RAGE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_AEROBLAST + end + +Move_MAX_OOZE: +Move_G_MAX_MALODOR: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_GUNK_SHOT + end + +Move_G_MAX_WILDFIRE: +Move_G_MAX_FIREBALL: +Move_G_MAX_CENTIFERNO: +Move_MAX_FLARE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_BLAST_BURN + end + +Move_G_MAX_CANNONADE: +Move_G_MAX_HYDROSNIPE: +Move_G_MAX_FOAM_BURST: +Move_MAX_GEYSER: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_HYDRO_CANNON + end + +Move_G_MAX_VINE_LASH: +Move_G_MAX_DRUM_SOLO: +Move_G_MAX_TARTNESS: +Move_G_MAX_SWEETNESS: +Move_MAX_OVERGROWTH: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_FRENZY_PLANT + end + +Move_MAX_LIGHTNING: +Move_G_MAX_STUN_SHOCK: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_ZAP_CANNON + end + +Move_G_MAX_CHI_STRIKE: +Move_G_MAX_ONE_BLOW: +Move_G_MAX_RAPID_FLOW: +Move_MAX_KNUCKLE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_CLOSE_COMBAT + end + +Move_G_MAX_RESONANCE: +Move_MAX_HAILSTORM: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_SHEER_COLD + end + +Move_G_MAX_SANDBLAST: +Move_MAX_QUAKE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_FISSURE + end + +Move_G_MAX_BEFUDDLE: +Move_MAX_FLUTTERBY: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_BUG_BUZZ + end + +Move_G_MAX_STEELSURGE: +Move_G_MAX_MELTDOWN: +Move_MAX_STEELSPIKE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_HEAVY_SLAM + end + +Move_G_MAX_TERROR: +Move_MAX_PHANTASM: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_PHANTOM_FORCE + end + +Move_G_MAX_GRAVITAS: +Move_MAX_MINDSTORM: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_PSYCHO_BOOST + end + +Move_G_MAX_SMITE: +Move_G_MAX_FINALE: +Move_MAX_STARFALL: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_MOONBLAST + end + +Move_G_MAX_STONESURGE: +Move_G_MAX_VOLCALITH: +Move_MAX_ROCKFALL: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_ROCK_WRECKER + end + +Move_G_MAX_DEPLETION: +Move_MAX_WYRMWIND: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_SPACIAL_REND + end + +Move_G_MAX_SNOOZE: +Move_MAX_DARKNESS: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_DARK_PULSE + end + +Move_G_MAX_CUDDLE: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_COVET + end + +Move_G_MAX_VOLT_CRASH: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_VOLT_TACKLE + end + +Move_G_MAX_GOLD_RUSH: + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 + waitforvisualfinish + goto Move_PAY_DAY + end + +@@@ DYNAMAX AND MAX RAIDS +General_DynamaxGrowth:: @ PORTED FROM CFRU + createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 + delay 8 + createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x0 + waitforvisualfinish + end diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a1ccf6f2b1..a61a0e3ede 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -188,7 +188,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO .4byte BattleScript_EffectHit @ EFFECT_FACADE .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH - .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT + .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLING_SALTS .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER .4byte BattleScript_EffectCharge @ EFFECT_CHARGE @@ -435,11 +435,46 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectCorrosiveGas @ EFFECT_CORROSIVE_GAS .4byte BattleScript_EffectHit @ EFFECT_POPULATION_BOMB .4byte BattleScript_EffectMortalSpin @ EFFECT_MORTAL_SPIN - .4byte BattleScript_EffectHit @ EFFECT_GIGATON_HAMMER .4byte BattleScript_EffectSaltCure @ EFFECT_SALT_CURE + .4byte BattleScript_EffectMatchaGotcha @ EFFECT_MATCHA_GOTCHA + .4byte BattleScript_EffectSyrupBomb @ EFFECT_SYRUP_BOMB + .4byte BattleScript_EffectHit @ EFFECT_IVY_CUDGEL + .4byte BattleScript_EffectMaxMove @ EFFECT_MAX_MOVE + .4byte BattleScript_EffectGlaiveRush @ EFFECT_GLAIVE_RUSH + .4byte BattleScript_EffectBrickBreak @ EFFECT_RAGING_BULL + +BattleScript_EffectGlaiveRush:: + call BattleScript_EffectHit_Ret + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TryFaintMon + setglaiverush + goto BattleScript_TryFaintMon + +BattleScript_EffectSyrupBomb:: + setmoveeffect MOVE_EFFECT_SYRUP_BOMB + goto BattleScript_EffectHit + +BattleScript_SyrupBombActivates:: + printstring STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SyrupBombEndTurn:: + flushtextbox + playanimation BS_ATTACKER, B_ANIM_SYRUP_BOMB_SPEED_DROP + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_SyrupBombTurnDmgEnd: + end2 + +BattleScript_EffectMatchaGotcha:: + setmoveeffect MOVE_EFFECT_BURN + goto BattleScript_EffectAbsorb BattleScript_EffectSaltCure: call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET jumpiffainted BS_TARGET, TRUE, BattleScript_EffectSaltCure_End applysaltcure BS_TARGET printstring STRINGID_TARGETISBEINGSALTCURED @@ -495,13 +530,17 @@ BattleScript_CorrosiveGasFail: goto BattleScript_MoveEnd BattleScript_EffectMakeItRain: + jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_MakeItRainDoubles +BattleScript_MakeItRainContinuous: setmoveeffect MOVE_EFFECT_PAYDAY call BattleScript_EffectHit_Ret - seteffectwithchance tryfaintmon BS_TARGET setmoveeffect MOVE_EFFECT_SP_ATK_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN seteffectprimary goto BattleScript_MoveEnd +BattleScript_MakeItRainDoubles: + jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_NoMoveEffect + goto BattleScript_MakeItRainContinuous BattleScript_EffectSpinOut:: setmoveeffect MOVE_EFFECT_SPD_MINUS_2 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN @@ -715,8 +754,7 @@ BattleScript_AffectionBasedStatusHeal_Continue: end2 BattleScript_ShellTrapSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 0x1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL printstring STRINGID_PREPARESHELLTRAP waitmessage B_WAIT_TIME_LONG @@ -789,8 +827,7 @@ BattleScript_EffectCourtChange:: BattleScript_BeakBlastSetUp:: setbeakblast BS_ATTACKER - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL printstring STRINGID_HEATUPBEAK waitmessage B_WAIT_TIME_LONG @@ -814,7 +851,7 @@ BattleScript_EffectMeteorBeam:: BattleScript_FirstChargingTurnMeteorBeam:: attackcanceler - printstring STRINGID_EMPTYSTRING3 + flushtextbox ppreduce attackanimation waitanimation @@ -1005,7 +1042,7 @@ BattleScript_EffectPhotonGeyser: goto BattleScript_MoveEnd BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko - jumpifspecies BS_ATTACKER, SPECIES_MORPEKO, BattleScript_EffectSpeedUpHit + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectSpeedUpHit jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit goto BattleScript_PokemonCantUseTheMove @@ -1028,7 +1065,7 @@ BattleScript_EffectOctolock: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce - setoctolock BS_TARGET, BattleScript_ButItFailed + trysetoctolock BS_TARGET, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE @@ -1036,29 +1073,19 @@ BattleScript_EffectOctolock: goto BattleScript_MoveEnd BattleScript_OctolockEndTurn:: - setbyte sSTAT_ANIM_PLAYED, FALSE - jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_OctolockLowerDef - jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_OctolockTryLowerSpDef - goto BattleScript_OctolockEnd2 -BattleScript_OctolockLowerDef: - jumpifability BS_TARGET, ABILITY_BIG_PECKS, BattleScript_OctolockTryLowerSpDef playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE - setbyte sSTAT_ANIM_PLAYED, TRUE setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockTryLowerSpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockTryLowerSpDef - printfromtable gStatUpStringIds + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef +BattleScript_OctolockTryLowerDef: + printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_OctolockTryLowerSpDef: - jumpifbyte CMP_EQUAL, sSTAT_ANIM_PLAYED, TRUE, BattleScript_OctolockSkipSpDefAnim - playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_NEGATIVE -BattleScript_OctolockSkipSpDefAnim: setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockEnd2 - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockEnd2 - printfromtable gStatUpStringIds + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd +BattleScript_OctolockTurnDmgPrintMsg: + printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_OctolockEnd2:: +BattleScript_OctlockTurnDmgEnd: end2 BattleScript_EffectPoltergeist: @@ -1118,7 +1145,7 @@ BattleScript_BothCanNoLongerEscape:: BattleScript_EffectHyperspaceFury: jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound - jumpifspecies BS_ATTACKER, SPECIES_HOOPA, BattleScript_ButHoopaCantUseIt + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_CONFINED, BattleScript_ButHoopaCantUseIt goto BattleScript_PokemonCantUseTheMove BattleScript_EffectHyperspaceFuryUnbound:: @@ -1144,9 +1171,8 @@ BattleScript_HyperspaceFuryRemoveProtect:: BattleScript_EffectPlasmaFists: call BattleScript_EffectHit_Ret - seteffectwithchance tryfaintmon BS_TARGET - applyplasmafists + orword gFieldStatuses, STATUS_FIELD_ION_DELUGE printstring STRINGID_IONDELUGEON waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1322,12 +1348,12 @@ BattleScript_NoMoveEffect: goto BattleScript_EffectHit BattleScript_EffectRelicSong: - setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + setmoveeffect MOVE_EFFECT_SLEEP call BattleScript_EffectHit_Ret - seteffectwithchance - argumentstatuseffect tryfaintmon BS_TARGET - goto BattleScript_MoveEnd + moveendall + tryrelicsong + end BattleScript_EffectAllySwitch: attackcanceler @@ -1446,6 +1472,7 @@ BattleScript_StrengthSapHp: jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd manipulatedamage DMG_BIG_ROOT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNENERGYDRAINED @@ -1494,8 +1521,7 @@ BattleScript_MoveEffectCoreEnforcer:: waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox BattleScript_CoreEnforcerRet: return @@ -1589,8 +1615,7 @@ BattleScript_EffectPartingShotSwitch: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate @@ -1945,8 +1970,7 @@ BattleScript_SynchronoiseLoop: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox tryfaintmon BS_TARGET BattleScript_SynchronoiseMoveTargetEnd: moveendto MOVEEND_NEXT_TARGET @@ -2092,13 +2116,17 @@ BattleScript_EffectFinalGambit: BattleScript_EffectHitSwitchTarget: call BattleScript_EffectHit_Ret tryfaintmon BS_TARGET - moveendall + jumpiffainted BS_TARGET, TRUE, BattleScript_MoveEnd jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpiftargetdynamaxed BattleScript_HitSwitchTargetDynamaxed tryhitswitchtarget BattleScript_MoveEnd forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed goto BattleScript_MoveEnd +BattleScript_HitSwitchTargetDynamaxed: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG BattleScript_HitSwitchTargetForceRandomSwitchFailed: hitswitchtargetfailed setbyte sSWITCH_CASE, B_SWITCH_NORMAL @@ -2626,8 +2654,7 @@ BattleScript_EffectSimpleBeam: waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox tryendneutralizinggas BS_TARGET goto BattleScript_MoveEnd @@ -2680,8 +2707,7 @@ BattleScript_EffectHealingWish: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate @@ -2726,8 +2752,7 @@ BattleScript_EffectWorrySeed: waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox goto BattleScript_MoveEnd BattleScript_EffectPowerSplit: @@ -2858,8 +2883,7 @@ BattleScript_EffectGastroAcid: waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox tryendneutralizinggas BS_TARGET goto BattleScript_MoveEnd @@ -2994,6 +3018,7 @@ BattleScript_EffectGravity: setgravity BattleScript_ButItFailed attackanimation waitanimation +BattleScript_EffectGravitySuccess:: printstring STRINGID_GRAVITYINTENSIFIED waitmessage B_WAIT_TIME_LONG selectfirstvalidtarget @@ -3068,8 +3093,7 @@ BattleScript_EffectHitEscape: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate @@ -3114,6 +3138,7 @@ BattleScript_HitFromAtkAnimation:: resultmessage waitmessage B_WAIT_TIME_LONG seteffectwithchance +BattleScript_TryFaintMon:: tryfaintmon BS_TARGET BattleScript_MoveEnd:: moveendall @@ -3138,6 +3163,7 @@ BattleScript_EffectHit_Ret:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG + seteffectwithchance return BattleScript_EffectNaturalGift: @@ -3683,11 +3709,17 @@ BattleScript_EffectRoar:: jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpiftargetdynamaxed BattleScript_RoarBlockedByDynamax accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed forcerandomswitch BattleScript_ButItFailed +BattleScript_RoarBlockedByDynamax: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectMultiHit:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -3718,8 +3750,7 @@ BattleScript_DoMultiHit:: critmessage waitmessage B_WAIT_TIME_LONG multihitresultmessage - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox addbyte sMULTIHIT_STRING + 4, 1 moveendto MOVEEND_NEXT_TARGET jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_MultiHitPrintStrings @@ -3761,7 +3792,6 @@ BattleScript_EffectFlinchHit:: BattleScript_EffectFlinchStatus: setmoveeffect MOVE_EFFECT_FLINCH call BattleScript_EffectHit_Ret - seteffectwithchance argumentstatuseffect tryfaintmon BS_TARGET goto BattleScript_MoveEnd @@ -3852,6 +3882,7 @@ BattleScript_EffectRest:: jumpifuproarwakes BattleScript_RestCantSleep jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects + jumpifability BS_ATTACKER, ABILITY_PURIFYING_SALT, BattleScript_InsomniaProtects .if B_LEAF_GUARD_PREVENTS_REST >= GEN_5 jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardPreventsRest .endif @@ -3909,7 +3940,7 @@ BattleScript_TwoTurnMovesSecondTurn:: BattleScriptFirstChargingTurn:: attackcanceler - printstring STRINGID_EMPTYSTRING3 + flushtextbox ppreduce attackstring BattleScriptFirstChargingTurnAfterAttackString: @@ -4084,8 +4115,7 @@ BattleScript_EffectTransform:: attackstring ppreduce trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox transformdataexecution attackanimation waitanimation @@ -4129,6 +4159,7 @@ BattleScript_EffectReflect:: BattleScript_PrintReflectLightScreenSafeguardString:: attackanimation waitanimation +BattleScript_EffectAuroraVeilSuccess:: printfromtable gReflectLightScreenSafeguardStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -4985,8 +5016,7 @@ BattleScript_EffectBatonPass:: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate @@ -5881,6 +5911,7 @@ BattleScript_EffectYawn:: setyawn BattleScript_ButItFailed attackanimation waitanimation + BattleScript_EffectYawnSuccess:: printstring STRINGID_PKMNWASMADEDROWSY waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -6312,8 +6343,7 @@ BattleScript_FaintedMonTryChoose: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON hidepartystatussummary BS_ATTACKER switchinanim BS_ATTACKER, 0 @@ -6325,8 +6355,7 @@ BattleScript_FaintedMonSendOutNew: switchindataupdate BS_FAINTED hpthresholds BS_FAINTED trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE @@ -6360,8 +6389,7 @@ BattleScript_LinkHandleFaintedMonLoop:: switchindataupdate BS_FAINTED hpthresholds BS_FAINTED trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE @@ -6575,6 +6603,7 @@ BattleScript_PursuitSwitchDmgLoop:: BattleScript_DoSwitchOut:: decrementmultihit BattleScript_PursuitSwitchDmgLoop switchoutabilities BS_ATTACKER + updatedynamax waitstate returnatktoball waitstate @@ -6584,8 +6613,7 @@ BattleScript_DoSwitchOut:: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring STRINGID_SWITCHINMON hidepartystatussummary BS_ATTACKER switchinanim BS_ATTACKER, FALSE @@ -6880,8 +6908,7 @@ BattleScript_RoarSuccessSwitch:: getswitchedmondata BS_TARGET switchindataupdate BS_TARGET trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox switchinanim BS_TARGET, FALSE waitstate printstring STRINGID_PKMNWASDRAGGEDOUT @@ -7323,6 +7350,11 @@ BattleScript_StealthRockFree:: waitmessage B_WAIT_TIME_LONG return +BattleScript_SteelsurgeFree:: + printstring STRINGID_PKMNBLEWAWAYSHARPSTEEL + waitmessage B_WAIT_TIME_LONG + return + BattleScript_SpikesDefog:: printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM waitmessage B_WAIT_TIME_LONG @@ -7343,6 +7375,11 @@ BattleScript_StealthRockDefog:: waitmessage B_WAIT_TIME_LONG return +BattleScript_SteelsurgeDefog:: + printstring STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + BattleScript_MonTookFutureAttack:: printstring STRINGID_PKMNTOOKATTACK waitmessage B_WAIT_TIME_LONG @@ -7697,15 +7734,14 @@ BattleScript_MoveEffectClearSmog:: return BattleScript_FocusPunchSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP printstring STRINGID_PKMNTIGHTENINGFOCUS waitmessage B_WAIT_TIME_LONG end3 BattleScript_MegaEvolution:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox trytrainerslidemegaevolutionmsg BS_ATTACKER printstring STRINGID_MEGAEVOREACTING BattleScript_MegaEvolutionAfterString: @@ -7721,7 +7757,7 @@ BattleScript_MegaEvolutionAfterString: end3 BattleScript_WishMegaEvolution:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox trytrainerslidemegaevolutionmsg BS_ATTACKER printstring STRINGID_FERVENTWISHREACHED goto BattleScript_MegaEvolutionAfterString @@ -7736,8 +7772,7 @@ BattleScript_PrimalReversionRestoreAttacker:: end2 BattleScript_PrimalReversionRet:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox setbyte gIsCriticalHit, 0 handleprimalreversion BS_ATTACKER, 0 handleprimalreversion BS_ATTACKER, 1 @@ -7750,7 +7785,7 @@ BattleScript_PrimalReversionRet:: return BattleScript_UltraBurst:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox trytrainerslidezmovemsg BS_ATTACKER printstring STRINGID_ULTRABURSTREACTING waitmessage B_WAIT_TIME_LONG @@ -7768,8 +7803,7 @@ BattleScript_AttackerFormChange:: pause 5 copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox BattleScript_AttackerFormChangeNoPopup:: handleformchange BS_ATTACKER, 0 handleformchange BS_ATTACKER, 1 @@ -7796,7 +7830,7 @@ BattleScript_AttackerFormChangeMoveEffect:: printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG handleformchange BS_ATTACKER, 2 - end3 + return BattleScript_BallFetch:: call BattleScript_AbilityPopUp @@ -7816,8 +7850,7 @@ BattleScript_CudChewActivates:: end3 BattleScript_TargetFormChangeNoPopup: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox handleformchange BS_TARGET, 0 handleformchange BS_TARGET, 1 playanimation BS_TARGET, B_ANIM_FORM_CHANGE @@ -7848,8 +7881,7 @@ BattleScript_TargetFormChangeWithStringNoPopup:: BattleScript_BattlerFormChangeWithStringEnd3:: pause 5 call BattleScript_AbilityPopUp - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox handleformchange BS_SCRIPTING, 0 handleformchange BS_SCRIPTING, 1 playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE, NULL @@ -7959,9 +7991,10 @@ BattleScript_DoTurnDmgEnd: end2 BattleScript_PoisonHealActivates:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp printstring STRINGID_POISONHEALHPUP waitmessage B_WAIT_TIME_LONG - recordability BS_ATTACKER statusanimation BS_ATTACKER orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER @@ -8527,13 +8560,6 @@ BattleScript_IntimidateLoop: jumpiftargetally BattleScript_IntimidateLoopIncrement jumpifabsent BS_TARGET, BattleScript_IntimidateLoopIncrement jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement - jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented -.if B_UPDATED_INTIMIDATE >= GEN_8 - jumpifability BS_TARGET, ABILITY_INNER_FOCUS, BattleScript_IntimidatePrevented - jumpifability BS_TARGET, ABILITY_SCRAPPY, BattleScript_IntimidatePrevented - jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_IntimidatePrevented - jumpifability BS_TARGET, ABILITY_OBLIVIOUS, BattleScript_IntimidatePrevented -.endif jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_IntimidateInReverse BattleScript_IntimidateEffect: copybyte sBATTLER, gBattlerAttacker @@ -8566,16 +8592,6 @@ BattleScript_IntimidateContrary_WontIncrease: printstring STRINGID_TARGETSTATWONTGOHIGHER goto BattleScript_IntimidateEffect_WaitString -BattleScript_IntimidatePrevented: - call BattleScript_AbilityPopUp - pause B_WAIT_TIME_LONG - setbyte gBattleCommunication STAT_ATK - stattextbuffer BS_TARGET - printstring STRINGID_STATWASNOTLOWERED - waitmessage B_WAIT_TIME_LONG - call BattleScript_TryAdrenalineOrb - goto BattleScript_IntimidateLoopIncrement - BattleScript_IntimidateInReverse: copybyte sBATTLER, gBattlerTarget call BattleScript_AbilityPopUpTarget @@ -8665,6 +8681,13 @@ BattleScript_CostarActivates:: waitmessage B_WAIT_TIME_LONG end3 +BattleScript_ZeroToHeroActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ZEROTOHEROTRANSFORMATION + waitmessage B_WAIT_TIME_LONG + end3 + BattleScript_AttackWeakenedByStrongWinds:: pause B_WAIT_TIME_SHORT printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS @@ -8711,28 +8734,6 @@ BattleScript_ActivateTerrainEffects_Increment: restoretarget return -BattleScript_ActivateSwitchInAbilities: - copybyte sBATTLER, gBattlerAttacker - setbyte gBattlerAttacker, 0 -BattleScript_ActivateSwitchInAbilities_Loop: - switchinabilities BS_ATTACKER -BattleScript_ActivateSwitchInAbilities_Increment: - addbyte gBattlerAttacker, 1 - jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateSwitchInAbilities_Loop - copybyte gBattlerAttacker, sBATTLER - return - -BattleScript_ActivateTerrainAbilities: - savetarget - setbyte gBattlerTarget, 0 -BattleScript_ActivateTerrainAbilities_Loop: - activateterrainchangeabilities BS_ATTACKER -BattleScript_ActivateTerrainAbilities_Increment: - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainAbilities_Loop - restoretarget - return - BattleScript_ElectricSurgeActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -8904,7 +8905,7 @@ BattleScript_AbilityNoStatLoss:: BattleScript_ItemNoStatLoss:: pause B_WAIT_TIME_SHORT - printstring STRINGID_STATWASNOTLOWERED + printstring STRINGID_CLEARAMULETWONTLOWERSTATS waitmessage B_WAIT_TIME_LONG return @@ -9113,6 +9114,7 @@ BattleScript_WeakArmorActivates:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed pause B_WAIT_TIME_SHORTEST printfromtable gStatDownStringIds + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @ Set by statbuffchange when stat can't be decreased waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesSpeed BattleScript_WeakArmorDefAnim: @@ -9121,12 +9123,17 @@ BattleScript_WeakArmorDefAnim: printstring STRINGID_TARGETABILITYSTATLOWER waitmessage B_WAIT_TIME_LONG BattleScript_WeakArmorActivatesSpeed: +.if B_WEAK_ARMOR_SPEED >= GEN_7 setstatchanger STAT_SPEED, 2, FALSE +.else + setstatchanger STAT_SPEED, 1, FALSE +.endif statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd pause B_WAIT_TIME_SHORTEST printstring STRINGID_TARGETSTATWONTGOHIGHER + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesEnd BattleScript_WeakArmorSpeedAnim: @@ -9747,7 +9754,7 @@ BattleScript_ActionSelectionItemsCantBeUsed:: endselectionscript BattleScript_FlushMessageBox:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox return BattleScript_PalacePrintFlavorText:: @@ -9901,6 +9908,14 @@ BattleScript_MirrorHerbCopyStatChange:: copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe return +BattleScript_OpportunistCopyStatChange:: + call BattleScript_AbilityPopUp + printstring STRINGID_OPPORTUNISTCOPIED + waitmessage B_WAIT_TIME_LONG + call BattleScript_TotemVar_Ret + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + end3 + BattleScript_TotemVar:: call BattleScript_TotemVar_Ret end2 @@ -9926,8 +9941,7 @@ BattleScript_AnnounceAirLockCloudNine:: end3 BattleScript_QuickClawActivation:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT waitanimation printstring STRINGID_CANACTFASTERTHANKSTO @@ -9935,16 +9949,14 @@ BattleScript_QuickClawActivation:: end2 BattleScript_QuickDrawActivation:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox call BattleScript_AbilityPopUp printstring STRINGID_CANACTFASTERTHANKSTO waitmessage B_WAIT_TIME_LONG end2 BattleScript_CustapBerryActivation:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT waitanimation printstring STRINGID_CANACTFASTERTHANKSTO @@ -9992,7 +10004,7 @@ BattleScript_JabocaRowapBerryActivate_Dmg: @ z moves / effects BattleScript_ZMoveActivateDamaging:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox trytrainerslidezmovemsg BS_ATTACKER printstring STRINGID_ZPOWERSURROUNDS playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL @@ -10001,7 +10013,7 @@ BattleScript_ZMoveActivateDamaging:: return BattleScript_ZMoveActivateStatus:: - printstring STRINGID_EMPTYSTRING3 + flushtextbox trytrainerslidezmovemsg BS_ATTACKER savetarget printstring STRINGID_ZPOWERSURROUNDS @@ -10170,6 +10182,7 @@ BattleScript_RedCardActivates:: swapattackerwithtarget jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups + jumpiftargetdynamaxed BattleScript_RedCardDynamaxed removeitem BS_SCRIPTING setbyte sSWITCH_CASE, B_SWITCH_RED_CARD forcerandomswitch BattleScript_RedCardEnd @@ -10188,6 +10201,12 @@ BattleScript_RedCardSuctionCups: removeitem BS_SCRIPTING swapattackerwithtarget return +BattleScript_RedCardDynamaxed: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return BattleScript_EjectButtonActivates:: makevisible BS_ATTACKER @@ -10205,8 +10224,7 @@ BattleScript_EjectButtonActivates:: switchindataupdate BS_SCRIPTING hpthresholds BS_SCRIPTING trytoclearprimalweather - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox printstring 0x3 switchinanim BS_SCRIPTING 0x1 waitstate @@ -10326,6 +10344,294 @@ BattleScript_TargetAbilityStatRaiseRet_End: copybyte gBattlerAttacker, sSAVED_BATTLER return +@@@ MAX MOVES @@@ +BattleScript_EffectMaxMove:: + attackcanceler + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + setmaxmoveeffect + moveendall + end + +BattleScript_EffectRaiseStatAllies:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RaiseSideStatsLoop: + jumpifabsent BS_TARGET, BattleScript_RaiseSideStatsIncrement + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RaiseSideStatsIncrement + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_RaiseSideStatsIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseSideStatsEnd + setallytonexttarget BattleScript_RaiseSideStatsLoop +BattleScript_RaiseSideStatsEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectLowerStatFoes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_LowerSideStatsLoop: + jumpifabsent BS_TARGET, BattleScript_LowerSideStatsIncrement + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_LowerSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerSideStatsIncrement + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_LowerSideStatsIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_LowerSideStatsEnd + setallytonexttarget BattleScript_LowerSideStatsLoop +BattleScript_LowerSideStatsEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectSetWeather:: + playanimation 0, B_ANIM_MAX_SET_WEATHER + printfromtable gMoveWeatherChangeStringIds + waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities + goto BattleScript_MoveEnd + +BattleScript_EffectSetTerrain:: + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + goto BattleScript_MoveEnd + +BattleScript_DamageNonTypesStarts:: + printfromtable gDamageNonTypesStartStringIds + waitmessage B_WAIT_TIME_LONG + 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_SKIP_DMG_TRACK | 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_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE + end2 + +BattleScript_EffectTryReducePP:: + tryspiteppreduce BattleScript_MoveEnd + printstring STRINGID_PKMNREDUCEDPP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStatus1Foes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_Status1FoesLoop: + jumpifabsent BS_TARGET, BattleScript_Status1FoesIncrement + trysetstatus1 BattleScript_Status1FoesIncrement + statusanimation BS_TARGET + updatestatusicon BS_TARGET + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_EFFECT_BATTLER + waitstate +BattleScript_Status1FoesIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status1FoesEnd + setallytonexttarget BattleScript_Status1FoesLoop +BattleScript_Status1FoesEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectStatus2Foes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_Status2FoesLoop: + jumpifabsent BS_TARGET, BattleScript_Status2FoesIncrement + trysetstatus2 BattleScript_Status2FoesIncrement + jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_DoConfuseAnim + jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_DoInfatuationAnim +BattleScript_Status2FoesPrintMessage: + printfromtable gStatus2StringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_Status2FoesIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status2FoesEnd + setallytonexttarget BattleScript_Status2FoesLoop +BattleScript_Status2FoesEnd: + restoretarget + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_PrintCoinsScattered @ Gold Rush + goto BattleScript_MoveEnd + +BattleScript_DoConfuseAnim: + status2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION + goto BattleScript_Status2FoesPrintMessage + +BattleScript_DoInfatuationAnim: + status2animation BS_EFFECT_BATTLER, STATUS2_INFATUATION + goto BattleScript_Status2FoesPrintMessage + +BattleScript_PrintCoinsScattered: + printstring STRINGID_COINSSCATTERED + goto BattleScript_MoveEnd + +BattleScript_TormentEnds:: + printstring STRINGID_TORMENTEDNOMORE + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectRaiseCritAlliesAnim:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RaiseCritAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_RaiseCritAlliesIncrement + setstatchanger STAT_ATK, 0, FALSE @ for animation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + swapattackerwithtarget + printstring STRINGID_PKMNGETTINGPUMPED + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget +BattleScript_RaiseCritAlliesIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseCritAlliesEnd + setallytonexttarget BattleScript_RaiseCritAlliesLoop +BattleScript_RaiseCritAlliesEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectHealOneSixthAllies:: + jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_HealOneSixthAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_HealOneSixthAlliesIncrement + tryhealsixthhealth BattleScript_HealOneSixthAlliesIncrement + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_HealOneSixthAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_HealOneSixthAlliesEnd + setallytonexttarget BattleScript_HealOneSixthAlliesLoop +BattleScript_HealOneSixthAlliesEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectCureStatusAllies:: + jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_CureStatusAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_CureStatusAlliesIncrement + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_CureStatusActivate +BattleScript_CureStatusAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_CureStatusAlliesEnd + setallytonexttarget BattleScript_CureStatusAlliesLoop +BattleScript_CureStatusAlliesEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_CureStatusActivate: + curestatus BS_TARGET + updatestatusicon BS_TARGET + swapattackerwithtarget + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget + goto BattleScript_CureStatusAlliesIncrement + +BattleScript_EffectRecycleBerriesAllies:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RecycleBerriesAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_RecycleBerriesAlliesIncrement + tryrecycleberry BattleScript_RecycleBerriesAlliesIncrement + swapattackerwithtarget + printstring STRINGID_XFOUNDONEY + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget +BattleScript_RecycleBerriesAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RecycleBerriesAlliesEnd + setallytonexttarget BattleScript_RecycleBerriesAlliesLoop +BattleScript_RecycleBerriesAlliesEnd: + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectStonesurge:: + setstealthrock BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSteelsurge:: + setsteelsurge BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +@@@ END MAX MOVES @@@ + +BattleScript_DynamaxBegins:: + flushtextbox + returnatktoball + pause B_WAIT_TIME_SHORT + returntoball BS_SCRIPTING + switchinanim BS_SCRIPTING, TRUE + updatedynamax + playanimation BS_SCRIPTING, B_ANIM_DYNAMAX_GROWTH + waitanimation + end3 + +BattleScript_DynamaxEnds:: + flushtextbox + updatedynamax + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE + waitanimation + end2 + +BattleScript_MoveBlockedByDynamax:: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_SHORT + ppreduce + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_STRING_PRINTED + goto BattleScript_MoveEnd + BattleScript_PokemonCantUseTheMove:: attackstring ppreduce diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index e8e9358771..46d4d195ea 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -245,7 +245,7 @@ BattleScript_TrainerASlideMsgRet:: BattleScript_TrainerASlideMsgEnd2:: call BattleScript_TrainerASlideMsgRet end2 - + BattleScript_TrainerBSlideMsgRet:: handletrainerslidemsg BS_SCRIPTING, 0 trainerslidein B_POSITION_OPPONENT_RIGHT diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index ecd3103ae2..affaf31d6d 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -1,3 +1,4 @@ +#include "config.h" #include "constants/global.h" #include "constants/contest.h" .include "asm/macros.inc" @@ -435,11 +436,11 @@ AI_CGM_BetterWhenAudienceExcited: AI_CGM_BetterWhenAudienceExcited_1stUp: @ BUG: Should be if_appeal_num_eq 0 @ 1st up on 1st appeal excitement will always be 0 -.ifdef BUGFIX +#ifdef BUGFIX if_appeal_num_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal -.else +#else if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal -.endif +#endif if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax end @@ -546,11 +547,11 @@ AI_CGM_TargetMonWithJudgesAttention: end AI_CGM_TargetMonWithJudgesAttention_CheckMon1: if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.else +#else if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.endif +#endif if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 score +2 if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 @@ -559,11 +560,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon1: AI_CGM_TargetMonWithJudgesAttention_CheckMon2: if_user_order_eq MON_2, AI_CGM_End if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.else +#else if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.endif +#endif if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 score +2 if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 @@ -572,11 +573,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon2: AI_CGM_TargetMonWithJudgesAttention_CheckMon3: if_user_order_eq MON_3, AI_CGM_End if_cannot_participate MON_3, AI_CGM_End -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_3, AI_CGM_End -.else +#else if_used_combo_starter MON_3, AI_CGM_End -.endif +#endif if_random_less_than 125, AI_CGM_End score +2 if_not_completed_combo MON_3, AI_CGM_End diff --git a/data/event_scripts.s b/data/event_scripts.s index 35d0cae2f9..a376866181 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,3 +1,4 @@ +#include "config.h" #include "config/battle.h" #include "config/item.h" #include "constants/global.h" diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 6162d0ada6..a216055b5b 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -415,18 +415,18 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: @ to the flash, but not data in PokemonStorage. The SaveGame script that follows asks the player to do a full save, @ which they can opt out of. As a result the player can save their party and quit without having saved the PC. @ This allows players to clone pokemon and their held items by withdrawing them (or erase them by despositing). -.ifndef BUGFIX +#ifndef BUGFIX tower_save 0 -.endif +#endif call Common_EventScript_SaveGame setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed @ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons: @ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful -@ 2. If the player tries to save, but fails, the counter will still be incremented even if the player never enters the tower. -.ifndef BUGFIX +@ 2. If the player tries to connect, but fails, the counter will still be incremented even if the player never enters the tower. +#ifndef BUGFIX incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER -.endif +#endif specialvar VAR_RESULT, IsWirelessAdapterConnected goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index d2174eee99..644001c6e7 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -81,11 +81,11 @@ BirthIsland_Exterior_EventScript_Deoxys:: applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach waitmovement 0 waitse - playmoncry SPECIES_DEOXYS, CRY_MODE_ENCOUNTER + playmoncry SPECIES_DEOXYS_NORMAL, CRY_MODE_ENCOUNTER delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - seteventmon SPECIES_DEOXYS, 30 + seteventmon SPECIES_DEOXYS_NORMAL, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate @@ -100,12 +100,12 @@ BirthIsland_Exterior_EventScript_Deoxys:: BirthIsland_Exterior_EventScript_DefeatedDeoxys:: setflag FLAG_DEFEATED_DEOXYS - setvar VAR_0x8004, SPECIES_DEOXYS + setvar VAR_0x8004, SPECIES_DEOXYS_NORMAL goto Common_EventScript_LegendaryFlewAway end BirthIsland_Exterior_EventScript_RanFromDeoxys:: - setvar VAR_0x8004, SPECIES_DEOXYS + setvar VAR_0x8004, SPECIES_DEOXYS_NORMAL goto Common_EventScript_LegendaryFlewAway end diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 263b071056..e17af35724 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -229,11 +229,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_Grunt2:: copyobjectxytoperm LOCALID_STAIR_GRUNT switch VAR_FACING case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsWest - #ifdef BUGFIX +#ifdef BUGFIX case DIR_EAST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast - #else +#else case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast - #endif +#endif applymovement LOCALID_STAIR_GRUNT, MossdeepCity_SpaceCenter_1F_Movement_MoveGruntFromStairs waitmovement 0 setvar VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2 diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index e5df03d4a1..2dfec9bffe 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -88,8 +88,8 @@ Route119_WeatherInstitute_2F_EventScript_ShellyDefeated:: Route119_WeatherInstitute_2F_EventScript_ReceiveCastform:: msgbox Route119_WeatherInstitute_2F_Text_ThanksPleaseTakePokemon, MSGBOX_DEFAULT - setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CASTFORM - givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CASTFORM_NORMAL + givemon SPECIES_CASTFORM_NORMAL, 25, ITEM_MYSTIC_WATER goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC goto Common_EventScript_NoMoreRoomForPokemon @@ -122,7 +122,7 @@ Route119_WeatherInstitute_2F_EventScript_ReceivedCastformFanfare:: message Route119_WeatherInstitute_2F_Text_PlayerReceivedCastform waitmessage waitfanfare - bufferspeciesname STR_VAR_1, SPECIES_CASTFORM + bufferspeciesname STR_VAR_1, SPECIES_CASTFORM_NORMAL return Route119_WeatherInstitute_2F_EventScript_ExplainCastform:: diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index b29291a7f9..3e482c8391 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -39,6 +39,32 @@ Debug_CheatStart:: setvar VAR_BRINEY_HOUSE_STATE, 1 setvar VAR_ROUTE116_STATE, 2 setflag FLAG_HIDE_ROUTE_116_MR_BRINEY + setflag FLAG_BADGE01_GET + setflag FLAG_BADGE02_GET + setflag FLAG_BADGE03_GET + setflag FLAG_BADGE04_GET + setflag FLAG_BADGE05_GET + setflag FLAG_BADGE06_GET + setflag FLAG_BADGE07_GET + setflag FLAG_BADGE08_GET + setflag FLAG_VISITED_LITTLEROOT_TOWN + setflag FLAG_VISITED_OLDALE_TOWN + setflag FLAG_VISITED_DEWFORD_TOWN + setflag FLAG_VISITED_LAVARIDGE_TOWN + setflag FLAG_VISITED_FALLARBOR_TOWN + setflag FLAG_VISITED_VERDANTURF_TOWN + setflag FLAG_VISITED_PACIFIDLOG_TOWN + setflag FLAG_VISITED_PETALBURG_CITY + setflag FLAG_VISITED_SLATEPORT_CITY + setflag FLAG_VISITED_MAUVILLE_CITY + setflag FLAG_VISITED_RUSTBORO_CITY + setflag FLAG_VISITED_FORTREE_CITY + setflag FLAG_VISITED_LILYCOVE_CITY + setflag FLAG_VISITED_MOSSDEEP_CITY + setflag FLAG_VISITED_SOOTOPOLIS_CITY + setflag FLAG_VISITED_EVER_GRANDE_CITY + setflag FLAG_LANDMARK_POKEMON_LEAGUE + setflag FLAG_LANDMARK_BATTLE_FRONTIER clearflag FLAG_HIDE_BRINEYS_HOUSE_MR_BRINEY clearflag FLAG_HIDE_BRINEYS_HOUSE_PEEKO release @@ -69,28 +95,28 @@ Debug_BoxFilledMessage:: Debug_BoxFilledMessage_Text: .string "Storage boxes filled!$" -Debug_Script_1:: +Debug_EventScript_Script_1:: end -Debug_Script_2:: +Debug_EventScript_Script_2:: end -Debug_Script_3:: +Debug_EventScript_Script_3:: end -Debug_Script_4:: +Debug_EventScript_Script_4:: end -Debug_Script_5:: +Debug_EventScript_Script_5:: end -Debug_Script_6:: +Debug_EventScript_Script_6:: end -Debug_Script_7:: +Debug_EventScript_Script_7:: end -Debug_Script_8:: +Debug_EventScript_Script_8:: end Debug_CheckSaveBlock:: @@ -104,13 +130,26 @@ Debug_CheckSaveBlock:: end Debug_SaveBlock1Size:: - .string "SaveBlock1 size: {STR_VAR_1}/{STR_VAR_2}.$" + .string "SaveBlock1 size: {STR_VAR_1}b/{STR_VAR_2}b.\n" + .string "Free space: {STR_VAR_3}b.$" Debug_SaveBlock2Size:: - .string "SaveBlock2 size: {STR_VAR_1}/{STR_VAR_2}.$" + .string "SaveBlock2 size: {STR_VAR_1}b/{STR_VAR_2}b.\n" + .string "Free space: {STR_VAR_3}b.$" Debug_PokemonStorageSize:: - .string "{PKMN}Storage size: {STR_VAR_1}/{STR_VAR_2}.$" + .string "{PKMN}Storage size: {STR_VAR_1}b/{STR_VAR_2}b.\n" + .string "Free space: {STR_VAR_3}b.$" + +Debug_CheckROMSpace:: + callnative CheckROMSize + msgbox Debug_ROMSize, MSGBOX_DEFAULT + release + end + +Debug_ROMSize:: + .string "ROM size: {STR_VAR_1}MB/32MB.\n" + .string "Free space: {STR_VAR_2}MB.$" Debug_HatchAnEgg:: lockall @@ -142,29 +181,38 @@ DebugScript_HatchAnEgg_Text_EmptyParty:: DebugScript_HatchAnEgg_Text_NotAnEgg:: .string "That's not a Pokémon Egg.$" - + DebugScript_ZeroDaycareMons:: msgbox DebugText_DaycareNoPokemon, MSGBOX_DEFAULT releaseall end - + DebugScript_OneDaycareMons:: msgbox DebugText_DaycareOnePokemon, MSGBOX_DEFAULT releaseall end - + DebugScript_DaycareMonsNotCompatible:: msgbox DebugText_DaycarePokemonNotCompatible, MSGBOX_DEFAULT releaseall end - + DebugText_DaycareNoPokemon: .string "You have no Pokémon at Daycare.$" - + DebugText_DaycareOnePokemon: .string "You have only one Pokémon at Daycare.$" - + DebugText_DaycarePokemonNotCompatible: .string "Your Pokémon at Daycare can't\nhave babies together!$" +Debug_ShowExpansionVersion:: + callnative BufferExpansionVersion + msgbox Debug_ExpansionVersion, MSGBOX_DEFAULT + release + end + +Debug_ExpansionVersion: + .string "pokeemerald-expansion {STR_VAR_1}$" + .endif diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index b7f8153514..04bbe05e5a 100644 --- a/data/scripts/trainer_hill.inc +++ b/data/scripts/trainer_hill.inc @@ -13,9 +13,9 @@ TrainerHill_OnWarp: TrainerHill_1F_EventScript_DummyOnWarp:: setvar VAR_TEMP_3, 1 -.ifdef BUGFIX +#ifdef BUGFIX end @ Missing end. By chance, the next byte (0x02 of VAR_TEMP_2) is also the id for the end cmd -.endif +#endif TrainerHill_OnFrame: map_script_2 VAR_TEMP_2, 0, TrainerHill_1F_EventScript_DummyWarpToEntranceCounter diff --git a/gflib/bg.c b/gflib/bg.c index f363233a85..4e426b762b 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -377,6 +377,9 @@ u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset) u16 tileOffset; u8 cursor; + if (bg > 3) + return -1; + if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0) { tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x20; diff --git a/gflib/malloc.c b/gflib/malloc.c index dcfac6ee81..b3191e30b6 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -1,5 +1,8 @@ #include "global.h" #include "malloc.h" +#if TESTING +#include "test/test.h" +#endif static void *sHeapStart; static u32 sHeapSize; @@ -71,7 +74,27 @@ void *AllocInternal(void *heapStart, u32 size, const char *location) } if (pos->next == head) + { +#if TESTING + const struct MemBlock *head = HeapHead(); + const struct MemBlock *block = head; + do + { + if (block->allocated) + { + const char *location = MemBlockLocation(block); + if (location) + MgbaPrintf_("%s: %d bytes allocated", location, block->size); + else + MgbaPrintf_(": %d bytes allocated", block->size); + } + block = block->next; + } + while (block != head); + Test_ExitWithResult(TEST_RESULT_ERROR, "%s: OOM allocating %d bytes", location, size); +#endif return NULL; + } pos = pos->next; } diff --git a/gflib/sprite.c b/gflib/sprite.c index d75f6f7271..ee20ab675b 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -324,7 +324,7 @@ void AnimateSprites(void) void BuildOamBuffer(void) { bool32 oamLoadDisabled; - u32 i, stride; + u32 i; u8 oamIndex; // All attributes which affect sorting packed into a single u32: diff --git a/graphics/battle_anims/sprites/snowflakes.png b/graphics/battle_anims/sprites/snowflakes.png new file mode 100644 index 0000000000..4f4334b3b9 Binary files /dev/null and b/graphics/battle_anims/sprites/snowflakes.png differ diff --git a/graphics/battle_anims/sprites/syrup_bomb_blob.png b/graphics/battle_anims/sprites/syrup_bomb_blob.png new file mode 100644 index 0000000000..b04b361756 Binary files /dev/null and b/graphics/battle_anims/sprites/syrup_bomb_blob.png differ diff --git a/graphics/battle_anims/sprites/syrup_bomb_shell.png b/graphics/battle_anims/sprites/syrup_bomb_shell.png new file mode 100644 index 0000000000..de592c54e6 Binary files /dev/null and b/graphics/battle_anims/sprites/syrup_bomb_shell.png differ diff --git a/graphics/battle_anims/sprites/syrup_bomb_splat.png b/graphics/battle_anims/sprites/syrup_bomb_splat.png new file mode 100644 index 0000000000..ac873086a0 Binary files /dev/null and b/graphics/battle_anims/sprites/syrup_bomb_splat.png differ diff --git a/graphics/battle_anims/sprites/syrup_red.pal b/graphics/battle_anims/sprites/syrup_red.pal new file mode 100644 index 0000000000..2224ce0c84 --- /dev/null +++ b/graphics/battle_anims/sprites/syrup_red.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +30 255 0 +242 242 242 +255 194 173 +255 129 110 +224 51 38 +161 24 26 +110 30 36 +13 2 4 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 diff --git a/graphics/battle_anims/sprites/syrup_yellow.pal b/graphics/battle_anims/sprites/syrup_yellow.pal new file mode 100644 index 0000000000..ff5ac37331 --- /dev/null +++ b/graphics/battle_anims/sprites/syrup_yellow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +30 255 0 +242 242 242 +255 255 168 +255 235 82 +255 192 0 +185 104 4 +107 59 19 +13 2 4 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 +200 224 240 diff --git a/graphics/battle_interface/dynamax_indicator.png b/graphics/battle_interface/dynamax_indicator.png new file mode 100644 index 0000000000..ebfbe86da6 Binary files /dev/null and b/graphics/battle_interface/dynamax_indicator.png differ diff --git a/graphics/battle_interface/dynamax_trigger.png b/graphics/battle_interface/dynamax_trigger.png new file mode 100644 index 0000000000..18f3a84cff Binary files /dev/null and b/graphics/battle_interface/dynamax_trigger.png differ diff --git a/graphics/battle_interface/misc_indicator.pal b/graphics/battle_interface/misc_indicator.pal new file mode 100644 index 0000000000..1128418200 --- /dev/null +++ b/graphics/battle_interface/misc_indicator.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +224 74 106 +236 234 108 +154 45 48 +244 162 132 +32 127 216 +16 75 156 +184 224 240 +136 184 224 +213 207 207 +246 246 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/clever_mochi.pal b/graphics/items/icon_palettes/clever_mochi.pal new file mode 100644 index 0000000000..dfb6467f26 --- /dev/null +++ b/graphics/items/icon_palettes/clever_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +112 104 24 +72 64 32 +192 184 8 +216 208 8 +240 240 96 +248 248 0 +248 248 160 +248 248 216 diff --git a/graphics/items/icon_palettes/cornerstone_mask.pal b/graphics/items/icon_palettes/cornerstone_mask.pal new file mode 100644 index 0000000000..06affcc19b --- /dev/null +++ b/graphics/items/icon_palettes/cornerstone_mask.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +0 49 0 +32 24 24 +48 48 48 +72 72 80 +104 88 56 +16 112 160 +32 112 128 +112 104 112 +32 152 192 +136 144 144 +168 168 168 +48 208 240 +208 184 120 +240 240 240 diff --git a/graphics/items/icon_palettes/fairy_feather.pal b/graphics/items/icon_palettes/fairy_feather.pal new file mode 100644 index 0000000000..a20a702b74 --- /dev/null +++ b/graphics/items/icon_palettes/fairy_feather.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +11 15 16 +33 19 27 +59 38 38 +102 90 92 +200 124 124 +182 116 141 +255 124 189 +227 140 140 +253 155 155 +222 173 189 +255 175 175 +195 191 192 +252 161 206 +225 221 223 +245 245 245 diff --git a/graphics/items/icon_palettes/fresh_start_mochi.pal b/graphics/items/icon_palettes/fresh_start_mochi.pal new file mode 100644 index 0000000000..55eeac0ce3 --- /dev/null +++ b/graphics/items/icon_palettes/fresh_start_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +128 120 128 +63 63 63 +176 168 168 +216 208 216 +192 192 192 +224 232 224 +240 232 240 +248 248 248 diff --git a/graphics/items/icon_palettes/genius_mochi.pal b/graphics/items/icon_palettes/genius_mochi.pal new file mode 100644 index 0000000000..7a91b8fbf9 --- /dev/null +++ b/graphics/items/icon_palettes/genius_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +72 40 88 +72 40 88 +96 40 128 +96 40 120 +88 40 112 +112 48 160 +128 72 176 +128 80 176 diff --git a/graphics/items/icon_palettes/glimmering_charm.pal b/graphics/items/icon_palettes/glimmering_charm.pal new file mode 100644 index 0000000000..813886d85a --- /dev/null +++ b/graphics/items/icon_palettes/glimmering_charm.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +114 109 97 +0 0 0 +115 62 231 +57 95 90 +52 103 15 +48 101 216 +225 59 159 +136 154 143 +60 195 171 +76 204 74 +202 150 255 +142 191 235 +242 193 215 +238 219 161 +255 255 255 diff --git a/graphics/items/icon_palettes/health_mochi.pal b/graphics/items/icon_palettes/health_mochi.pal new file mode 100644 index 0000000000..930e98ebfb --- /dev/null +++ b/graphics/items/icon_palettes/health_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +32 64 86 +32 96 128 +16 128 176 +0 144 208 +0 176 240 +0 192 248 +72 200 248 +88 208 240 diff --git a/graphics/items/icon_palettes/hearthflame_mask.pal b/graphics/items/icon_palettes/hearthflame_mask.pal new file mode 100644 index 0000000000..1df0621797 --- /dev/null +++ b/graphics/items/icon_palettes/hearthflame_mask.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +110 101 110 +0 0 0 +40 40 40 +72 40 40 +136 48 48 +184 48 48 +72 88 88 +104 88 48 +232 64 48 +224 128 128 +192 144 64 +168 160 152 +32 200 232 +224 160 64 +248 200 72 +248 248 248 diff --git a/graphics/items/icon_palettes/masterpiece_teacup.pal b/graphics/items/icon_palettes/masterpiece_teacup.pal new file mode 100644 index 0000000000..9c37a09d7b --- /dev/null +++ b/graphics/items/icon_palettes/masterpiece_teacup.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +56 48 48 +64 48 56 +80 48 32 +56 56 56 +72 64 72 +80 64 48 +96 64 40 +104 98 96 +174 163 155 +208 200 192 +224 224 208 diff --git a/graphics/items/icon_palettes/muscle_mochi.pal b/graphics/items/icon_palettes/muscle_mochi.pal new file mode 100644 index 0000000000..6198ef6e9d --- /dev/null +++ b/graphics/items/icon_palettes/muscle_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +80 32 32 +128 32 32 +192 0 8 +248 40 48 +248 32 32 +248 0 0 +248 64 64 +248 80 80 diff --git a/graphics/items/icon_palettes/oaks_parcel.pal b/graphics/items/icon_palettes/parcel.pal similarity index 100% rename from graphics/items/icon_palettes/oaks_parcel.pal rename to graphics/items/icon_palettes/parcel.pal diff --git a/graphics/items/icon_palettes/resist_mochi.pal b/graphics/items/icon_palettes/resist_mochi.pal new file mode 100644 index 0000000000..87da8140dd --- /dev/null +++ b/graphics/items/icon_palettes/resist_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +48 32 32 +40 40 40 +56 48 56 +48 48 48 +48 48 48 +64 64 64 +72 72 72 +88 88 88 diff --git a/graphics/items/icon_palettes/swift_mochi.pal b/graphics/items/icon_palettes/swift_mochi.pal new file mode 100644 index 0000000000..90fb43493b --- /dev/null +++ b/graphics/items/icon_palettes/swift_mochi.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +0 0 0 +0 0 0 +32 32 32 +40 40 40 +24 88 56 +24 48 40 +8 128 64 +8 152 72 +32 120 96 +0 176 80 +48 192 112 +80 200 144 diff --git a/graphics/items/icon_palettes/syrupy_apple.pal b/graphics/items/icon_palettes/syrupy_apple.pal new file mode 100644 index 0000000000..2243d3df3e --- /dev/null +++ b/graphics/items/icon_palettes/syrupy_apple.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +0 97 0 +36 39 38 +78 40 38 +192 24 40 +100 72 55 +240 48 40 +192 114 31 +248 112 48 +248 112 104 +248 135 16 +248 135 20 +248 144 120 +242 159 28 +216 192 184 diff --git a/graphics/items/icon_palettes/unremarkable_teacup.pal b/graphics/items/icon_palettes/unremarkable_teacup.pal new file mode 100644 index 0000000000..c70426f432 --- /dev/null +++ b/graphics/items/icon_palettes/unremarkable_teacup.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +0 0 0 +56 48 48 +64 48 56 +56 56 56 +72 64 72 +80 64 48 +96 64 40 +104 98 96 +174 163 155 +208 200 192 +224 224 208 diff --git a/graphics/items/icon_palettes/wellspring_mask.pal b/graphics/items/icon_palettes/wellspring_mask.pal new file mode 100644 index 0000000000..8e64a3ffcf --- /dev/null +++ b/graphics/items/icon_palettes/wellspring_mask.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +0 0 0 +16 16 16 +40 40 40 +32 48 56 +24 80 128 +80 88 88 +32 104 112 +0 128 232 +56 144 176 +152 160 160 +56 200 232 +192 208 216 +248 248 248 diff --git a/graphics/items/icons/cornerstone_mask.png b/graphics/items/icons/cornerstone_mask.png new file mode 100644 index 0000000000..dcca6725d4 Binary files /dev/null and b/graphics/items/icons/cornerstone_mask.png differ diff --git a/graphics/items/icons/fairy_feather.png b/graphics/items/icons/fairy_feather.png new file mode 100644 index 0000000000..26446886a8 Binary files /dev/null and b/graphics/items/icons/fairy_feather.png differ diff --git a/graphics/items/icons/glimmering_charm.png b/graphics/items/icons/glimmering_charm.png new file mode 100644 index 0000000000..bbed0dcb04 Binary files /dev/null and b/graphics/items/icons/glimmering_charm.png differ diff --git a/graphics/items/icons/hearthflame_mask.png b/graphics/items/icons/hearthflame_mask.png new file mode 100644 index 0000000000..accb5a8077 Binary files /dev/null and b/graphics/items/icons/hearthflame_mask.png differ diff --git a/graphics/items/icons/masterpiece_teacup.png b/graphics/items/icons/masterpiece_teacup.png new file mode 100644 index 0000000000..1633168251 Binary files /dev/null and b/graphics/items/icons/masterpiece_teacup.png differ diff --git a/graphics/items/icons/mochi.png b/graphics/items/icons/mochi.png new file mode 100644 index 0000000000..9d033b1bd8 Binary files /dev/null and b/graphics/items/icons/mochi.png differ diff --git a/graphics/items/icons/oaks_parcel.png b/graphics/items/icons/parcel.png similarity index 100% rename from graphics/items/icons/oaks_parcel.png rename to graphics/items/icons/parcel.png diff --git a/graphics/items/icons/syrupy_apple.png b/graphics/items/icons/syrupy_apple.png new file mode 100644 index 0000000000..e5c4efdfa6 Binary files /dev/null and b/graphics/items/icons/syrupy_apple.png differ diff --git a/graphics/items/icons/unremarkable_teacup.png b/graphics/items/icons/unremarkable_teacup.png new file mode 100644 index 0000000000..98ac030893 Binary files /dev/null and b/graphics/items/icons/unremarkable_teacup.png differ diff --git a/graphics/items/icons/wellspring_mask.png b/graphics/items/icons/wellspring_mask.png new file mode 100644 index 0000000000..f52804d1b8 Binary files /dev/null and b/graphics/items/icons/wellspring_mask.png differ diff --git a/graphics/pokedex/bg_hoenn.pal b/graphics/pokedex/bg_hoenn.pal index 5889ede7ac..569c7821a9 100644 --- a/graphics/pokedex/bg_hoenn.pal +++ b/graphics/pokedex/bg_hoenn.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -193 33 177 -249 249 249 -225 225 225 -201 201 201 -169 169 169 -129 129 129 -249 153 161 -233 49 49 -193 33 41 -145 17 33 -249 153 161 -193 33 41 -141 251 184 -52 66 162 -194 181 66 +123 131 0 +255 255 255 +222 222 222 +189 189 189 +164 164 164 +98 98 115 +41 57 65 +41 57 106 +0 0 41 +255 255 255 +238 246 57 +255 0 189 +49 213 74 +24 131 32 +189 156 90 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/caught_screen.pal b/graphics/pokedex/caught_screen.pal index 7b855bfc66..26da98a84c 100644 --- a/graphics/pokedex/caught_screen.pal +++ b/graphics/pokedex/caught_screen.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -193 33 177 -249 249 249 -225 225 225 -201 201 201 -169 169 169 -129 129 129 -249 153 161 -233 49 49 -193 33 41 -145 17 33 -249 153 161 -193 33 41 -141 251 184 -52 66 162 -194 181 66 +123 131 0 +255 255 255 +255 238 0 +255 189 0 +255 115 0 +98 98 115 +41 57 65 +41 57 106 +0 0 41 +255 255 255 +238 246 57 +255 0 189 +49 213 74 +24 131 32 +189 156 90 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/hgss/palette_default_dark.pal b/graphics/pokedex/hgss/palette_default_dark.pal index 5889ede7ac..1523b7d25f 100644 --- a/graphics/pokedex/hgss/palette_default_dark.pal +++ b/graphics/pokedex/hgss/palette_default_dark.pal @@ -7,11 +7,11 @@ JASC-PAL 201 201 201 169 169 169 129 129 129 -249 153 161 -233 49 49 -193 33 41 -145 17 33 -249 153 161 +106 106 106 +37 37 37 +106 106 106 +0 0 0 +106 106 106 193 33 41 141 251 184 52 66 162 diff --git a/graphics/pokedex/hgss/tilemap_list_screen.bin b/graphics/pokedex/hgss/tilemap_list_screen.bin index be59b03594..ab4ce179a4 100644 Binary files a/graphics/pokedex/hgss/tilemap_list_screen.bin and b/graphics/pokedex/hgss/tilemap_list_screen.bin differ diff --git a/graphics/pokedex/hgss/tileset_interface.png b/graphics/pokedex/hgss/tileset_interface.png index 8b4e944417..528176f36d 100644 Binary files a/graphics/pokedex/hgss/tileset_interface.png and b/graphics/pokedex/hgss/tileset_interface.png differ diff --git a/graphics/pokedex/hgss/tileset_menu_list.png b/graphics/pokedex/hgss/tileset_menu_list.png index 9492805e84..91bf31eae9 100644 Binary files a/graphics/pokedex/hgss/tileset_menu_list.png and b/graphics/pokedex/hgss/tileset_menu_list.png differ diff --git a/graphics/pokemon/alcremie/berry/back.png b/graphics/pokemon/alcremie/berry/back.png new file mode 100644 index 0000000000..a2236a94f4 Binary files /dev/null and b/graphics/pokemon/alcremie/berry/back.png differ diff --git a/graphics/pokemon/alcremie/berry/berry_caramel_swirl.pal b/graphics/pokemon/alcremie/berry/berry_caramel_swirl.pal new file mode 100644 index 0000000000..5a19b7c4c7 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_default.pal b/graphics/pokemon/alcremie/berry/berry_default.pal new file mode 100644 index 0000000000..118df4edd1 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_lemon_cream.pal b/graphics/pokemon/alcremie/berry/berry_lemon_cream.pal new file mode 100644 index 0000000000..17fd451a87 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_matcha_cream.pal b/graphics/pokemon/alcremie/berry/berry_matcha_cream.pal new file mode 100644 index 0000000000..edb69b6883 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_mint_cream.pal b/graphics/pokemon/alcremie/berry/berry_mint_cream.pal new file mode 100644 index 0000000000..3a21681b21 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_rainbow_swirl.pal b/graphics/pokemon/alcremie/berry/berry_rainbow_swirl.pal new file mode 100644 index 0000000000..37a0a40498 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_ruby_cream.pal b/graphics/pokemon/alcremie/berry/berry_ruby_cream.pal new file mode 100644 index 0000000000..350cfeb22f --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_ruby_swirl.pal b/graphics/pokemon/alcremie/berry/berry_ruby_swirl.pal new file mode 100644 index 0000000000..e0c66e7fc1 --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/berry/berry_salted_cream.pal b/graphics/pokemon/alcremie/berry/berry_salted_cream.pal new file mode 100644 index 0000000000..eca511097a --- /dev/null +++ b/graphics/pokemon/alcremie/berry/berry_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +0 120 200 +0 80 144 +0 40 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/mint_cream/shiny.pal b/graphics/pokemon/alcremie/berry/berry_shiny.pal similarity index 66% rename from graphics/pokemon/alcremie/mint_cream/shiny.pal rename to graphics/pokemon/alcremie/berry/berry_shiny.pal index f71c66c01e..1fb826a870 100644 --- a/graphics/pokemon/alcremie/mint_cream/shiny.pal +++ b/graphics/pokemon/alcremie/berry/berry_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 72 80 72 248 248 248 -88 88 96 -128 128 128 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +0 120 200 +0 80 144 +0 40 104 16 16 16 -152 152 152 -136 32 56 -248 88 112 -192 48 72 -168 176 176 -168 176 176 -216 216 216 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/alcremie/berry/front.png b/graphics/pokemon/alcremie/berry/front.png new file mode 100644 index 0000000000..4bbc456c3e Binary files /dev/null and b/graphics/pokemon/alcremie/berry/front.png differ diff --git a/graphics/pokemon/alcremie/clover/back.png b/graphics/pokemon/alcremie/clover/back.png new file mode 100644 index 0000000000..8a8efe5677 Binary files /dev/null and b/graphics/pokemon/alcremie/clover/back.png differ diff --git a/graphics/pokemon/alcremie/clover/clover_caramel_swirl.pal b/graphics/pokemon/alcremie/clover/clover_caramel_swirl.pal new file mode 100644 index 0000000000..a8b5968386 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_default.pal b/graphics/pokemon/alcremie/clover/clover_default.pal new file mode 100644 index 0000000000..17fe8cc6b4 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_lemon_cream.pal b/graphics/pokemon/alcremie/clover/clover_lemon_cream.pal new file mode 100644 index 0000000000..bd199e2bc4 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_matcha_cream.pal b/graphics/pokemon/alcremie/clover/clover_matcha_cream.pal new file mode 100644 index 0000000000..0f4f393f43 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_mint_cream.pal b/graphics/pokemon/alcremie/clover/clover_mint_cream.pal new file mode 100644 index 0000000000..08b8f83461 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_rainbow_swirl.pal b/graphics/pokemon/alcremie/clover/clover_rainbow_swirl.pal new file mode 100644 index 0000000000..4d6514f51e --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_ruby_cream.pal b/graphics/pokemon/alcremie/clover/clover_ruby_cream.pal new file mode 100644 index 0000000000..3243fea802 --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_ruby_swirl.pal b/graphics/pokemon/alcremie/clover/clover_ruby_swirl.pal new file mode 100644 index 0000000000..fd68b6c2cd --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/clover/clover_salted_cream.pal b/graphics/pokemon/alcremie/clover/clover_salted_cream.pal new file mode 100644 index 0000000000..a5c5bc10fc --- /dev/null +++ b/graphics/pokemon/alcremie/clover/clover_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +136 216 64 +24 144 36 +24 80 36 +0 0 0 diff --git a/graphics/pokemon/alcremie/matcha_cream/shiny.pal b/graphics/pokemon/alcremie/clover/clover_shiny.pal similarity index 65% rename from graphics/pokemon/alcremie/matcha_cream/shiny.pal rename to graphics/pokemon/alcremie/clover/clover_shiny.pal index eb171da47c..6329ca1ecd 100644 --- a/graphics/pokemon/alcremie/matcha_cream/shiny.pal +++ b/graphics/pokemon/alcremie/clover/clover_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 72 80 72 248 248 248 -88 88 96 -128 128 128 -16 16 16 -152 152 152 -216 216 216 -136 32 56 -248 88 112 -192 48 72 +168 176 176 248 248 248 168 176 176 -0 0 0 -0 0 0 -0 0 0 +248 248 248 +168 176 176 +136 216 64 +24 144 36 +24 80 36 +16 16 16 diff --git a/graphics/pokemon/alcremie/clover/front.png b/graphics/pokemon/alcremie/clover/front.png new file mode 100644 index 0000000000..dd30853ee3 Binary files /dev/null and b/graphics/pokemon/alcremie/clover/front.png differ diff --git a/graphics/pokemon/alcremie/flower/back.png b/graphics/pokemon/alcremie/flower/back.png new file mode 100644 index 0000000000..2d018bdabc Binary files /dev/null and b/graphics/pokemon/alcremie/flower/back.png differ diff --git a/graphics/pokemon/alcremie/flower/flower_caramel_swirl.pal b/graphics/pokemon/alcremie/flower/flower_caramel_swirl.pal new file mode 100644 index 0000000000..33bc209d7a --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_default.pal b/graphics/pokemon/alcremie/flower/flower_default.pal new file mode 100644 index 0000000000..a3184e016f --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_lemon_cream.pal b/graphics/pokemon/alcremie/flower/flower_lemon_cream.pal new file mode 100644 index 0000000000..df85ea6b88 --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_matcha_cream.pal b/graphics/pokemon/alcremie/flower/flower_matcha_cream.pal new file mode 100644 index 0000000000..f3b35677c5 --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_mint_cream.pal b/graphics/pokemon/alcremie/flower/flower_mint_cream.pal new file mode 100644 index 0000000000..b32cc3bb2f --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_rainbow_swirl.pal b/graphics/pokemon/alcremie/flower/flower_rainbow_swirl.pal new file mode 100644 index 0000000000..2b7736025f --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_ruby_cream.pal b/graphics/pokemon/alcremie/flower/flower_ruby_cream.pal new file mode 100644 index 0000000000..6de39b5a3e --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_ruby_swirl.pal b/graphics/pokemon/alcremie/flower/flower_ruby_swirl.pal new file mode 100644 index 0000000000..fce8994bef --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/flower/flower_salted_cream.pal b/graphics/pokemon/alcremie/flower/flower_salted_cream.pal new file mode 100644 index 0000000000..a9c50d230e --- /dev/null +++ b/graphics/pokemon/alcremie/flower/flower_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +248 248 0 +248 104 40 +152 56 24 +0 0 0 diff --git a/graphics/pokemon/alcremie/ruby_swirl/shiny.pal b/graphics/pokemon/alcremie/flower/flower_shiny.pal similarity index 65% rename from graphics/pokemon/alcremie/ruby_swirl/shiny.pal rename to graphics/pokemon/alcremie/flower/flower_shiny.pal index eb171da47c..ee7ae0fbaa 100644 --- a/graphics/pokemon/alcremie/ruby_swirl/shiny.pal +++ b/graphics/pokemon/alcremie/flower/flower_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 72 80 72 248 248 248 -88 88 96 -128 128 128 -16 16 16 -152 152 152 -216 216 216 -136 32 56 -248 88 112 -192 48 72 +168 176 176 248 248 248 168 176 176 -0 0 0 -0 0 0 -0 0 0 +248 248 248 +168 176 176 +248 248 0 +248 104 40 +152 56 24 +16 16 16 diff --git a/graphics/pokemon/alcremie/flower/front.png b/graphics/pokemon/alcremie/flower/front.png new file mode 100644 index 0000000000..20c9af2f46 Binary files /dev/null and b/graphics/pokemon/alcremie/flower/front.png differ diff --git a/graphics/pokemon/alcremie/gigantamax/back.png b/graphics/pokemon/alcremie/gigantamax/back.png new file mode 100644 index 0000000000..8c3a12e19e Binary files /dev/null and b/graphics/pokemon/alcremie/gigantamax/back.png differ diff --git a/graphics/pokemon/alcremie/gigantamax/front.png b/graphics/pokemon/alcremie/gigantamax/front.png new file mode 100644 index 0000000000..30d6ee4e8f Binary files /dev/null and b/graphics/pokemon/alcremie/gigantamax/front.png differ diff --git a/graphics/pokemon/alcremie/gigantamax/icon.png b/graphics/pokemon/alcremie/gigantamax/icon.png new file mode 100644 index 0000000000..10ba520d1c Binary files /dev/null and b/graphics/pokemon/alcremie/gigantamax/icon.png differ diff --git a/graphics/pokemon/alcremie/gigantamax/normal.pal b/graphics/pokemon/alcremie/gigantamax/normal.pal new file mode 100644 index 0000000000..dcc78ed923 --- /dev/null +++ b/graphics/pokemon/alcremie/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +147 116 87 +16 16 16 +214 191 164 +253 241 208 +217 194 40 +254 255 112 +185 119 190 +164 153 183 +240 189 195 +254 109 38 +232 254 23 +86 225 210 +247 86 144 +28 151 140 +226 122 129 diff --git a/graphics/pokemon/alcremie/gigantamax/shiny.pal b/graphics/pokemon/alcremie/gigantamax/shiny.pal new file mode 100644 index 0000000000..092c301bad --- /dev/null +++ b/graphics/pokemon/alcremie/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +108 127 125 +16 16 16 +184 203 202 +240 253 255 +35 36 35 +66 69 66 +185 119 190 +91 69 73 +139 113 119 +254 109 38 +232 254 23 +187 157 165 +247 86 144 +28 151 140 +75 79 75 diff --git a/graphics/pokemon/alcremie/lemon_cream/back.png b/graphics/pokemon/alcremie/lemon_cream/back.png deleted file mode 100644 index d5a073b54b..0000000000 Binary files a/graphics/pokemon/alcremie/lemon_cream/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/lemon_cream/front.png b/graphics/pokemon/alcremie/lemon_cream/front.png deleted file mode 100644 index fefb952fd4..0000000000 Binary files a/graphics/pokemon/alcremie/lemon_cream/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/lemon_cream/shiny.pal b/graphics/pokemon/alcremie/lemon_cream/shiny.pal deleted file mode 100644 index d19dc335d5..0000000000 --- a/graphics/pokemon/alcremie/lemon_cream/shiny.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -72 80 72 -248 248 248 -88 88 96 -128 128 128 -16 16 16 -152 152 152 -136 32 56 -248 88 112 -192 48 72 -168 176 176 -216 216 216 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/alcremie/love/back.png b/graphics/pokemon/alcremie/love/back.png new file mode 100644 index 0000000000..6c3dd94363 Binary files /dev/null and b/graphics/pokemon/alcremie/love/back.png differ diff --git a/graphics/pokemon/alcremie/love/front.png b/graphics/pokemon/alcremie/love/front.png new file mode 100644 index 0000000000..36cef02d8b Binary files /dev/null and b/graphics/pokemon/alcremie/love/front.png differ diff --git a/graphics/pokemon/alcremie/love/love_caramel_swirl.pal b/graphics/pokemon/alcremie/love/love_caramel_swirl.pal new file mode 100644 index 0000000000..86f59a8d62 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_default.pal b/graphics/pokemon/alcremie/love/love_default.pal new file mode 100644 index 0000000000..9f965e53b0 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_lemon_cream.pal b/graphics/pokemon/alcremie/love/love_lemon_cream.pal new file mode 100644 index 0000000000..34d9c0dfef --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_matcha_cream.pal b/graphics/pokemon/alcremie/love/love_matcha_cream.pal new file mode 100644 index 0000000000..3d33c04aba --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_mint_cream.pal b/graphics/pokemon/alcremie/love/love_mint_cream.pal new file mode 100644 index 0000000000..2344ddcf82 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_rainbow_swirl.pal b/graphics/pokemon/alcremie/love/love_rainbow_swirl.pal new file mode 100644 index 0000000000..3bb1f61ee8 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_ruby_cream.pal b/graphics/pokemon/alcremie/love/love_ruby_cream.pal new file mode 100644 index 0000000000..0d37782db5 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_ruby_swirl.pal b/graphics/pokemon/alcremie/love/love_ruby_swirl.pal new file mode 100644 index 0000000000..ad18466c8b --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_salted_cream.pal b/graphics/pokemon/alcremie/love/love_salted_cream.pal new file mode 100644 index 0000000000..9bb17bbcfd --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +248 152 200 +248 112 120 +216 56 104 +0 0 0 diff --git a/graphics/pokemon/alcremie/love/love_shiny.pal b/graphics/pokemon/alcremie/love/love_shiny.pal new file mode 100644 index 0000000000..8489043934 --- /dev/null +++ b/graphics/pokemon/alcremie/love/love_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 +72 80 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 152 200 +248 112 120 +216 56 104 +16 16 16 diff --git a/graphics/pokemon/alcremie/matcha_cream/back.png b/graphics/pokemon/alcremie/matcha_cream/back.png deleted file mode 100644 index 7a422730b9..0000000000 Binary files a/graphics/pokemon/alcremie/matcha_cream/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/matcha_cream/front.png b/graphics/pokemon/alcremie/matcha_cream/front.png deleted file mode 100644 index 28225df1a0..0000000000 Binary files a/graphics/pokemon/alcremie/matcha_cream/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/mint_cream/back.png b/graphics/pokemon/alcremie/mint_cream/back.png deleted file mode 100644 index 481ce9c78c..0000000000 Binary files a/graphics/pokemon/alcremie/mint_cream/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/mint_cream/front.png b/graphics/pokemon/alcremie/mint_cream/front.png deleted file mode 100644 index 9d525253fa..0000000000 Binary files a/graphics/pokemon/alcremie/mint_cream/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/ribbon/back.png b/graphics/pokemon/alcremie/ribbon/back.png new file mode 100644 index 0000000000..3b595ebb62 Binary files /dev/null and b/graphics/pokemon/alcremie/ribbon/back.png differ diff --git a/graphics/pokemon/alcremie/ribbon/front.png b/graphics/pokemon/alcremie/ribbon/front.png new file mode 100644 index 0000000000..2f1b913cb7 Binary files /dev/null and b/graphics/pokemon/alcremie/ribbon/front.png differ diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.pal new file mode 100644 index 0000000000..c4fce2c7c6 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_default.pal b/graphics/pokemon/alcremie/ribbon/ribbon_default.pal new file mode 100644 index 0000000000..b0ad7cdf74 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.pal new file mode 100644 index 0000000000..b022d03006 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.pal new file mode 100644 index 0000000000..4999acd248 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.pal new file mode 100644 index 0000000000..2349810b7e --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.pal new file mode 100644 index 0000000000..8c17769478 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.pal new file mode 100644 index 0000000000..6384296180 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.pal new file mode 100644 index 0000000000..e1f9ce61dc --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.pal new file mode 100644 index 0000000000..cdf85d28b5 --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +176 136 176 +144 96 168 +112 72 136 +0 0 0 diff --git a/graphics/pokemon/alcremie/ribbon/ribbon_shiny.pal b/graphics/pokemon/alcremie/ribbon/ribbon_shiny.pal new file mode 100644 index 0000000000..b60e7632fe --- /dev/null +++ b/graphics/pokemon/alcremie/ribbon/ribbon_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 +72 80 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +176 136 176 +144 96 168 +112 72 136 +16 16 16 diff --git a/graphics/pokemon/alcremie/ruby_cream/back.png b/graphics/pokemon/alcremie/ruby_cream/back.png deleted file mode 100644 index 45fc28a0e6..0000000000 Binary files a/graphics/pokemon/alcremie/ruby_cream/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/ruby_cream/front.png b/graphics/pokemon/alcremie/ruby_cream/front.png deleted file mode 100644 index e64880a8cf..0000000000 Binary files a/graphics/pokemon/alcremie/ruby_cream/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/ruby_swirl/back.png b/graphics/pokemon/alcremie/ruby_swirl/back.png deleted file mode 100644 index ae275b897d..0000000000 Binary files a/graphics/pokemon/alcremie/ruby_swirl/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/ruby_swirl/front.png b/graphics/pokemon/alcremie/ruby_swirl/front.png deleted file mode 100644 index cb99b49fa2..0000000000 Binary files a/graphics/pokemon/alcremie/ruby_swirl/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/salted_cream/back.png b/graphics/pokemon/alcremie/salted_cream/back.png deleted file mode 100644 index f32932d95c..0000000000 Binary files a/graphics/pokemon/alcremie/salted_cream/back.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/salted_cream/front.png b/graphics/pokemon/alcremie/salted_cream/front.png deleted file mode 100644 index 7958715bcc..0000000000 Binary files a/graphics/pokemon/alcremie/salted_cream/front.png and /dev/null differ diff --git a/graphics/pokemon/alcremie/salted_cream/shiny.pal b/graphics/pokemon/alcremie/salted_cream/shiny.pal deleted file mode 100644 index 953c50e5ee..0000000000 --- a/graphics/pokemon/alcremie/salted_cream/shiny.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -72 80 72 -248 248 248 -88 88 96 -128 128 128 -16 16 16 -136 32 56 -248 88 112 -192 48 72 -168 176 176 -152 152 152 -216 216 216 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon/alcremie/star/back.png b/graphics/pokemon/alcremie/star/back.png new file mode 100644 index 0000000000..38d32ca657 Binary files /dev/null and b/graphics/pokemon/alcremie/star/back.png differ diff --git a/graphics/pokemon/alcremie/star/front.png b/graphics/pokemon/alcremie/star/front.png new file mode 100644 index 0000000000..41f042229b Binary files /dev/null and b/graphics/pokemon/alcremie/star/front.png differ diff --git a/graphics/pokemon/alcremie/star/star_caramel_swirl.pal b/graphics/pokemon/alcremie/star/star_caramel_swirl.pal new file mode 100644 index 0000000000..254db99d41 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_caramel_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_default.pal b/graphics/pokemon/alcremie/star/star_default.pal new file mode 100644 index 0000000000..d99429510a --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_lemon_cream.pal b/graphics/pokemon/alcremie/star/star_lemon_cream.pal new file mode 100644 index 0000000000..ec776c4d90 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_lemon_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 +112 120 24 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_matcha_cream.pal b/graphics/pokemon/alcremie/star/star_matcha_cream.pal new file mode 100644 index 0000000000..b642f11786 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_matcha_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 +104 128 80 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +232 248 200 +176 208 152 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_mint_cream.pal b/graphics/pokemon/alcremie/star/star_mint_cream.pal new file mode 100644 index 0000000000..f4fb9991f8 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_mint_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 +72 112 128 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_rainbow_swirl.pal b/graphics/pokemon/alcremie/star/star_rainbow_swirl.pal new file mode 100644 index 0000000000..a0aa5334c4 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_ruby_cream.pal b/graphics/pokemon/alcremie/star/star_ruby_cream.pal new file mode 100644 index 0000000000..1f66460fb6 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_ruby_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_ruby_swirl.pal b/graphics/pokemon/alcremie/star/star_ruby_swirl.pal new file mode 100644 index 0000000000..1f00d36c9c --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_ruby_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 +128 96 80 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_salted_cream.pal b/graphics/pokemon/alcremie/star/star_salted_cream.pal new file mode 100644 index 0000000000..2b0c72d8f6 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +248 224 48 +200 176 24 +192 112 16 +0 0 0 diff --git a/graphics/pokemon/alcremie/star/star_shiny.pal b/graphics/pokemon/alcremie/star/star_shiny.pal new file mode 100644 index 0000000000..6fb3e1d923 --- /dev/null +++ b/graphics/pokemon/alcremie/star/star_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 +72 80 72 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 +248 224 48 +200 176 24 +192 112 16 +16 16 16 diff --git a/graphics/pokemon/alcremie/strawberry/back.png b/graphics/pokemon/alcremie/strawberry/back.png new file mode 100644 index 0000000000..2f3ce5007a Binary files /dev/null and b/graphics/pokemon/alcremie/strawberry/back.png differ diff --git a/graphics/pokemon/alcremie/strawberry/front.png b/graphics/pokemon/alcremie/strawberry/front.png new file mode 100644 index 0000000000..fe7872d2d3 Binary files /dev/null and b/graphics/pokemon/alcremie/strawberry/front.png differ diff --git a/graphics/pokemon/alcremie/salted_cream/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.pal similarity index 58% rename from graphics/pokemon/alcremie/salted_cream/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.pal index adfd376dc3..78cea9164c 100644 --- a/graphics/pokemon/alcremie/salted_cream/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 88 88 248 248 248 -112 208 200 -176 176 176 -16 16 16 -136 32 56 -248 88 112 -192 48 72 +248 232 184 +200 168 120 +232 168 96 +144 112 72 +248 248 248 168 176 176 248 248 248 +168 176 176 248 248 248 -0 0 0 -0 0 0 -0 0 0 +168 176 176 +248 88 112 +192 48 72 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/strawberry/strawberry_default.pal b/graphics/pokemon/alcremie/strawberry/strawberry_default.pal new file mode 100644 index 0000000000..b9cb001f7a --- /dev/null +++ b/graphics/pokemon/alcremie/strawberry/strawberry_default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 224 208 +208 160 168 +240 136 144 +128 80 88 +248 224 200 +208 128 136 +248 224 200 +208 160 168 +248 224 200 +208 160 168 +248 88 112 +192 48 72 +136 32 56 +0 0 0 diff --git a/graphics/pokemon/alcremie/lemon_cream/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.pal similarity index 75% rename from graphics/pokemon/alcremie/lemon_cream/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.pal index c69c0376e8..0cbfae8eec 100644 --- a/graphics/pokemon/alcremie/lemon_cream/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +248 248 248 +248 248 152 +208 184 72 +232 224 0 112 120 24 248 248 248 -232 224 0 -208 184 72 -16 16 16 -248 248 152 -136 32 56 -248 88 112 -192 48 72 168 176 176 248 248 248 -0 0 0 -0 0 0 -0 0 0 +168 176 176 +248 248 248 +168 176 176 +248 88 112 +192 48 72 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/matcha_cream/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.pal similarity index 75% rename from graphics/pokemon/alcremie/matcha_cream/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.pal index a5bbc02bc2..918955f1aa 100644 --- a/graphics/pokemon/alcremie/matcha_cream/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +248 248 248 +232 248 208 +176 208 152 +192 224 96 104 128 80 232 248 200 -192 224 96 176 208 152 -16 16 16 -232 248 208 -248 248 248 -136 32 56 +232 248 200 +176 208 152 +232 248 200 +176 208 152 248 88 112 192 48 72 -224 248 200 -176 208 152 -0 0 0 -0 0 0 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/mint_cream/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.pal similarity index 75% rename from graphics/pokemon/alcremie/mint_cream/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.pal index 7b56dfdc3e..3978acb218 100644 --- a/graphics/pokemon/alcremie/mint_cream/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +248 248 248 +208 240 232 +152 168 176 +112 208 200 72 112 128 248 248 248 -112 208 200 -152 168 176 -16 16 16 -208 240 232 -136 32 56 +168 176 176 +248 248 248 +168 176 176 +248 248 248 +168 176 176 248 88 112 192 48 72 -168 176 176 -176 176 176 -248 248 248 -0 0 0 -0 0 0 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.pal b/graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.pal new file mode 100644 index 0000000000..10bfc24d1f --- /dev/null +++ b/graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +248 248 184 +208 192 120 +216 144 88 +120 88 64 +240 160 168 +208 128 136 +176 232 224 +128 160 168 +248 248 112 +216 192 40 +248 88 112 +192 48 72 +136 32 56 +0 0 0 diff --git a/graphics/pokemon/alcremie/ruby_cream/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.pal similarity index 57% rename from graphics/pokemon/alcremie/ruby_cream/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.pal index 873d673e1b..e95929cab7 100644 --- a/graphics/pokemon/alcremie/ruby_cream/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 80 112 -240 200 208 -232 112 192 -200 152 184 -16 16 16 248 248 248 -136 32 56 +248 208 208 +200 152 184 +232 112 192 +128 80 112 +248 208 208 +200 152 184 +248 208 208 +200 152 184 +248 208 208 +200 152 184 248 88 112 192 48 72 -240 200 200 -200 144 184 -200 152 192 -240 200 208 -0 0 0 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/ruby_swirl/normal.pal b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.pal similarity index 75% rename from graphics/pokemon/alcremie/ruby_swirl/normal.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.pal index 5208a45f8f..59e711dd22 100644 --- a/graphics/pokemon/alcremie/ruby_swirl/normal.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +248 248 248 +248 240 208 +208 184 160 +240 192 128 128 96 80 248 176 192 -240 192 128 -208 184 160 -16 16 16 -248 240 208 -248 248 248 -136 32 56 +224 120 128 +248 176 192 +224 120 128 +248 176 192 +224 120 128 248 88 112 192 48 72 -248 176 184 -224 120 128 -0 0 0 -0 0 0 +136 32 56 0 0 0 diff --git a/graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.pal new file mode 100644 index 0000000000..af57499a4c --- /dev/null +++ b/graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 248 248 +232 232 248 +176 176 184 +112 208 200 +88 88 96 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +232 232 248 +176 176 184 +248 88 112 +192 48 72 +136 32 56 +0 0 0 diff --git a/graphics/pokemon/alcremie/ruby_cream/shiny.pal b/graphics/pokemon/alcremie/strawberry/strawberry_shiny.pal similarity index 87% rename from graphics/pokemon/alcremie/ruby_cream/shiny.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_shiny.pal index 454ec33ff4..6ae9aa96af 100644 --- a/graphics/pokemon/alcremie/ruby_cream/shiny.pal +++ b/graphics/pokemon/alcremie/strawberry/strawberry_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 +216 216 216 +152 152 152 +128 128 128 +88 88 96 72 80 72 248 248 248 -88 88 96 -128 128 128 -16 16 16 -216 216 216 -136 32 56 -248 88 112 -192 48 72 +168 176 176 248 248 248 168 176 176 +248 248 248 168 176 176 -152 152 152 -0 0 0 -0 0 0 +248 88 112 +192 48 72 +136 32 56 +16 16 16 diff --git a/graphics/pokemon/amaura/anim_front.png b/graphics/pokemon/amaura/anim_front.png index 63c7d94cbd..b619f704f9 100644 Binary files a/graphics/pokemon/amaura/anim_front.png and b/graphics/pokemon/amaura/anim_front.png differ diff --git a/graphics/pokemon/annihilape/back.png b/graphics/pokemon/annihilape/back.png new file mode 100755 index 0000000000..8be9853505 Binary files /dev/null and b/graphics/pokemon/annihilape/back.png differ diff --git a/graphics/pokemon/annihilape/front.png b/graphics/pokemon/annihilape/front.png new file mode 100755 index 0000000000..2e8a893ce3 Binary files /dev/null and b/graphics/pokemon/annihilape/front.png differ diff --git a/graphics/pokemon/annihilape/icon.png b/graphics/pokemon/annihilape/icon.png new file mode 100755 index 0000000000..a516d2d5e9 Binary files /dev/null and b/graphics/pokemon/annihilape/icon.png differ diff --git a/graphics/pokemon/annihilape/normal.pal b/graphics/pokemon/annihilape/normal.pal new file mode 100755 index 0000000000..dc7b242085 --- /dev/null +++ b/graphics/pokemon/annihilape/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 112 120 +16 16 16 +248 248 248 +64 64 64 +192 192 208 +160 160 176 +224 24 24 +240 152 168 +144 48 72 +32 40 40 +192 72 96 +88 104 112 +64 72 80 +40 40 40 +80 80 80 diff --git a/graphics/pokemon/annihilape/shiny.pal b/graphics/pokemon/annihilape/shiny.pal new file mode 100755 index 0000000000..c19578eeb4 --- /dev/null +++ b/graphics/pokemon/annihilape/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +80 80 128 +16 16 16 +240 232 232 +40 40 72 +168 168 192 +128 136 176 +224 24 24 +240 152 168 +144 48 72 +24 40 56 +192 72 96 +88 128 168 +56 80 104 +40 40 40 +80 80 80 diff --git a/graphics/pokemon/appletun/gigantamax/back.png b/graphics/pokemon/appletun/gigantamax/back.png new file mode 100644 index 0000000000..610d98112b Binary files /dev/null and b/graphics/pokemon/appletun/gigantamax/back.png differ diff --git a/graphics/pokemon/appletun/gigantamax/front.png b/graphics/pokemon/appletun/gigantamax/front.png new file mode 100644 index 0000000000..65c716e9e8 Binary files /dev/null and b/graphics/pokemon/appletun/gigantamax/front.png differ diff --git a/graphics/pokemon/appletun/gigantamax/icon.png b/graphics/pokemon/appletun/gigantamax/icon.png new file mode 100644 index 0000000000..b7ecabd469 Binary files /dev/null and b/graphics/pokemon/appletun/gigantamax/icon.png differ diff --git a/graphics/pokemon/appletun/gigantamax/normal.pal b/graphics/pokemon/appletun/gigantamax/normal.pal new file mode 100644 index 0000000000..2d5dabef1e --- /dev/null +++ b/graphics/pokemon/appletun/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +166 49 57 +119 38 40 +198 138 72 +141 66 41 +233 197 88 +66 118 56 +210 57 77 +179 172 98 +249 249 249 +44 72 40 +218 208 139 +57 164 61 +213 68 86 +15 15 15 diff --git a/graphics/pokemon/appletun/gigantamax/shiny.pal b/graphics/pokemon/appletun/gigantamax/shiny.pal new file mode 100644 index 0000000000..4514eb418d --- /dev/null +++ b/graphics/pokemon/appletun/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +55 143 41 +35 91 27 +198 138 72 +141 66 41 +233 197 88 +66 118 56 +75 183 48 +179 172 98 +249 249 249 +44 72 40 +218 208 139 +57 164 61 +213 68 86 +15 15 15 diff --git a/graphics/pokemon/arboliva/back.png b/graphics/pokemon/arboliva/back.png new file mode 100644 index 0000000000..a1383390e1 Binary files /dev/null and b/graphics/pokemon/arboliva/back.png differ diff --git a/graphics/pokemon/arboliva/front.png b/graphics/pokemon/arboliva/front.png new file mode 100644 index 0000000000..13521182f1 Binary files /dev/null and b/graphics/pokemon/arboliva/front.png differ diff --git a/graphics/pokemon/arboliva/icon.png b/graphics/pokemon/arboliva/icon.png new file mode 100755 index 0000000000..039efb5489 Binary files /dev/null and b/graphics/pokemon/arboliva/icon.png differ diff --git a/graphics/pokemon/arboliva/normal.pal b/graphics/pokemon/arboliva/normal.pal new file mode 100644 index 0000000000..c343903ef1 --- /dev/null +++ b/graphics/pokemon/arboliva/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +0 128 32 +152 224 56 +0 56 16 +0 200 32 +0 0 0 +248 248 240 +184 192 168 +72 96 72 +224 128 72 +192 72 40 +104 32 56 +160 56 80 +56 8 24 +80 32 24 +0 0 0 diff --git a/graphics/pokemon/arboliva/shiny.pal b/graphics/pokemon/arboliva/shiny.pal new file mode 100644 index 0000000000..796aeec5be --- /dev/null +++ b/graphics/pokemon/arboliva/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +8 48 16 +112 144 64 +0 56 16 +24 120 40 +0 0 0 +248 248 240 +184 192 168 +72 96 72 +200 112 64 +168 64 40 +56 16 24 +104 32 48 +56 8 24 +80 32 24 +0 0 0 diff --git a/graphics/pokemon/arctibax/back.png b/graphics/pokemon/arctibax/back.png new file mode 100644 index 0000000000..ff061dece4 Binary files /dev/null and b/graphics/pokemon/arctibax/back.png differ diff --git a/graphics/pokemon/arctibax/front.png b/graphics/pokemon/arctibax/front.png new file mode 100644 index 0000000000..6b1350e892 Binary files /dev/null and b/graphics/pokemon/arctibax/front.png differ diff --git a/graphics/pokemon/arctibax/icon.png b/graphics/pokemon/arctibax/icon.png new file mode 100755 index 0000000000..f9fcaecf43 Binary files /dev/null and b/graphics/pokemon/arctibax/icon.png differ diff --git a/graphics/pokemon/arctibax/normal.pal b/graphics/pokemon/arctibax/normal.pal new file mode 100644 index 0000000000..0a9a427117 --- /dev/null +++ b/graphics/pokemon/arctibax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +92 131 133 +65 69 90 +188 239 248 +91 111 138 +125 166 166 +102 149 227 +15 15 15 +0 0 0 +255 209 74 +218 145 35 +75 122 154 +58 99 126 +100 54 32 +244 125 47 +168 96 47 diff --git a/graphics/pokemon/arctibax/shiny.pal b/graphics/pokemon/arctibax/shiny.pal new file mode 100644 index 0000000000..0c46ae6982 --- /dev/null +++ b/graphics/pokemon/arctibax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +74 168 123 +65 69 90 +227 255 253 +78 133 139 +140 221 192 +134 249 249 +15 15 15 +0 0 0 +255 209 74 +218 145 35 +67 194 175 +63 152 138 +137 39 73 +252 142 179 +201 100 144 diff --git a/graphics/pokemon/armarouge/back.png b/graphics/pokemon/armarouge/back.png new file mode 100644 index 0000000000..905c5e53f0 Binary files /dev/null and b/graphics/pokemon/armarouge/back.png differ diff --git a/graphics/pokemon/armarouge/front.png b/graphics/pokemon/armarouge/front.png new file mode 100644 index 0000000000..b50aec353b Binary files /dev/null and b/graphics/pokemon/armarouge/front.png differ diff --git a/graphics/pokemon/armarouge/icon.png b/graphics/pokemon/armarouge/icon.png new file mode 100755 index 0000000000..a1b9e9b90f Binary files /dev/null and b/graphics/pokemon/armarouge/icon.png differ diff --git a/graphics/pokemon/armarouge/normal.pal b/graphics/pokemon/armarouge/normal.pal new file mode 100644 index 0000000000..39e1c828a8 --- /dev/null +++ b/graphics/pokemon/armarouge/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +147 50 48 +226 60 27 +255 119 178 +236 183 34 +237 230 62 +12 12 12 +84 40 41 +237 230 63 +54 52 52 +94 86 82 +150 91 14 +255 255 255 +226 60 28 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/armarouge/shiny.pal b/graphics/pokemon/armarouge/shiny.pal new file mode 100644 index 0000000000..d9c256423c --- /dev/null +++ b/graphics/pokemon/armarouge/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +147 50 48 +226 60 27 +255 119 178 +236 183 34 +237 230 62 +12 12 12 +84 40 41 +33 174 217 +54 52 52 +94 86 82 +150 91 14 +255 255 255 +33 174 217 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/baxcalibur/back.png b/graphics/pokemon/baxcalibur/back.png new file mode 100755 index 0000000000..241e048d7a Binary files /dev/null and b/graphics/pokemon/baxcalibur/back.png differ diff --git a/graphics/pokemon/baxcalibur/front.png b/graphics/pokemon/baxcalibur/front.png new file mode 100755 index 0000000000..e706fa393c Binary files /dev/null and b/graphics/pokemon/baxcalibur/front.png differ diff --git a/graphics/pokemon/baxcalibur/icon.png b/graphics/pokemon/baxcalibur/icon.png new file mode 100755 index 0000000000..1aee317d5c Binary files /dev/null and b/graphics/pokemon/baxcalibur/icon.png differ diff --git a/graphics/pokemon/baxcalibur/normal.pal b/graphics/pokemon/baxcalibur/normal.pal new file mode 100755 index 0000000000..6abbb8785d --- /dev/null +++ b/graphics/pokemon/baxcalibur/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +80 112 112 +224 252 248 +184 224 224 +32 40 48 +48 64 80 +120 180 200 +136 100 24 +240 212 72 +40 44 40 +64 96 112 +96 16 32 +144 24 48 +216 36 72 +0 0 0 diff --git a/graphics/pokemon/baxcalibur/shiny.pal b/graphics/pokemon/baxcalibur/shiny.pal new file mode 100755 index 0000000000..0a0c6145df --- /dev/null +++ b/graphics/pokemon/baxcalibur/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +46 95 110 +224 252 248 +187 230 226 +45 76 85 +64 109 121 +100 192 198 +136 100 24 +240 212 72 +40 44 40 +72 154 164 +128 44 98 +144 24 48 +255 104 209 +0 0 0 diff --git a/graphics/pokemon/bellibolt/back.png b/graphics/pokemon/bellibolt/back.png new file mode 100644 index 0000000000..487953dce7 Binary files /dev/null and b/graphics/pokemon/bellibolt/back.png differ diff --git a/graphics/pokemon/bellibolt/front.png b/graphics/pokemon/bellibolt/front.png new file mode 100644 index 0000000000..9264c3fcbc Binary files /dev/null and b/graphics/pokemon/bellibolt/front.png differ diff --git a/graphics/pokemon/bellibolt/icon.png b/graphics/pokemon/bellibolt/icon.png new file mode 100755 index 0000000000..865c18ad0e Binary files /dev/null and b/graphics/pokemon/bellibolt/icon.png differ diff --git a/graphics/pokemon/bellibolt/normal.pal b/graphics/pokemon/bellibolt/normal.pal new file mode 100644 index 0000000000..293a2f0522 --- /dev/null +++ b/graphics/pokemon/bellibolt/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +184 88 64 +120 48 40 +248 152 72 +112 104 104 +248 208 128 +248 248 248 +168 168 160 +56 176 152 +16 112 112 +112 216 184 +248 216 24 +16 16 16 +8 64 72 +80 72 64 +184 160 64 diff --git a/graphics/pokemon/bellibolt/shiny.pal b/graphics/pokemon/bellibolt/shiny.pal new file mode 100644 index 0000000000..3f55dc1096 --- /dev/null +++ b/graphics/pokemon/bellibolt/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +184 88 64 +120 48 40 +248 152 72 +112 104 104 +248 208 128 +248 248 248 +168 168 160 +248 248 136 +200 168 72 +248 248 200 +248 216 24 +16 16 16 +120 80 24 +80 72 64 +184 160 64 diff --git a/graphics/pokemon/blastoise/gigantamax/back.png b/graphics/pokemon/blastoise/gigantamax/back.png new file mode 100644 index 0000000000..cd9d607f55 Binary files /dev/null and b/graphics/pokemon/blastoise/gigantamax/back.png differ diff --git a/graphics/pokemon/blastoise/gigantamax/front.png b/graphics/pokemon/blastoise/gigantamax/front.png new file mode 100644 index 0000000000..c4608e67dd Binary files /dev/null and b/graphics/pokemon/blastoise/gigantamax/front.png differ diff --git a/graphics/pokemon/blastoise/gigantamax/icon.png b/graphics/pokemon/blastoise/gigantamax/icon.png new file mode 100644 index 0000000000..9761dfbe53 Binary files /dev/null and b/graphics/pokemon/blastoise/gigantamax/icon.png differ diff --git a/graphics/pokemon/blastoise/gigantamax/normal.pal b/graphics/pokemon/blastoise/gigantamax/normal.pal new file mode 100644 index 0000000000..2b7f1254f5 --- /dev/null +++ b/graphics/pokemon/blastoise/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +8 58 99 +16 16 16 +90 140 206 +33 99 173 +205 205 213 +74 74 74 +53 46 39 +199 84 53 +148 148 148 +253 253 253 +108 232 214 +73 65 54 +95 86 71 +148 173 230 +206 206 214 diff --git a/graphics/pokemon/blastoise/gigantamax/shiny.pal b/graphics/pokemon/blastoise/gigantamax/shiny.pal new file mode 100644 index 0000000000..f7906a9da8 --- /dev/null +++ b/graphics/pokemon/blastoise/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +115 82 148 +16 16 16 +213 180 246 +164 123 189 +205 205 213 +74 74 74 +66 53 42 +199 84 53 +148 148 148 +253 253 253 +108 232 214 +92 75 62 +140 126 83 +238 222 255 +206 206 214 diff --git a/graphics/pokemon/bombirdier/back.png b/graphics/pokemon/bombirdier/back.png new file mode 100644 index 0000000000..eb45117013 Binary files /dev/null and b/graphics/pokemon/bombirdier/back.png differ diff --git a/graphics/pokemon/bombirdier/front.png b/graphics/pokemon/bombirdier/front.png new file mode 100644 index 0000000000..97159715f2 Binary files /dev/null and b/graphics/pokemon/bombirdier/front.png differ diff --git a/graphics/pokemon/bombirdier/icon.png b/graphics/pokemon/bombirdier/icon.png new file mode 100755 index 0000000000..06bcf71c86 Binary files /dev/null and b/graphics/pokemon/bombirdier/icon.png differ diff --git a/graphics/pokemon/bombirdier/normal.pal b/graphics/pokemon/bombirdier/normal.pal new file mode 100644 index 0000000000..21129ad828 --- /dev/null +++ b/graphics/pokemon/bombirdier/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +52 41 48 +74 57 66 +15 15 15 +38 210 161 +102 91 96 +185 170 175 +239 227 225 +147 125 133 +80 29 37 +77 74 75 +230 76 98 +255 251 255 +153 62 73 +167 171 167 +123 130 123 diff --git a/graphics/pokemon/bombirdier/shiny.pal b/graphics/pokemon/bombirdier/shiny.pal new file mode 100644 index 0000000000..7c57659ed5 --- /dev/null +++ b/graphics/pokemon/bombirdier/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +52 41 48 +74 57 66 +15 15 15 +38 210 161 +102 91 96 +185 170 175 +239 227 225 +147 125 133 +80 29 37 +160 74 85 +171 167 168 +255 251 255 +136 134 133 +167 171 167 +123 130 123 diff --git a/graphics/pokemon/brambleghast/back.png b/graphics/pokemon/brambleghast/back.png new file mode 100644 index 0000000000..fca81b275e Binary files /dev/null and b/graphics/pokemon/brambleghast/back.png differ diff --git a/graphics/pokemon/brambleghast/front.png b/graphics/pokemon/brambleghast/front.png new file mode 100644 index 0000000000..f1715a6f06 Binary files /dev/null and b/graphics/pokemon/brambleghast/front.png differ diff --git a/graphics/pokemon/brambleghast/icon.png b/graphics/pokemon/brambleghast/icon.png new file mode 100755 index 0000000000..e8f273b095 Binary files /dev/null and b/graphics/pokemon/brambleghast/icon.png differ diff --git a/graphics/pokemon/brambleghast/normal.pal b/graphics/pokemon/brambleghast/normal.pal new file mode 100644 index 0000000000..759a5f138f --- /dev/null +++ b/graphics/pokemon/brambleghast/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 72 88 +192 152 184 +112 88 56 +64 40 32 +16 16 16 +128 104 128 +200 176 104 +152 120 80 +168 104 64 +128 72 48 +96 40 48 +32 32 40 +248 72 32 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/brambleghast/shiny.pal b/graphics/pokemon/brambleghast/shiny.pal new file mode 100644 index 0000000000..f10cd2c257 --- /dev/null +++ b/graphics/pokemon/brambleghast/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 72 88 +192 152 184 +128 120 96 +56 48 32 +16 16 16 +128 104 128 +216 216 176 +160 152 120 +184 160 104 +128 104 72 +64 56 32 +32 32 40 +240 176 136 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/bramblin/back.png b/graphics/pokemon/bramblin/back.png new file mode 100644 index 0000000000..67bf858c39 Binary files /dev/null and b/graphics/pokemon/bramblin/back.png differ diff --git a/graphics/pokemon/bramblin/front.png b/graphics/pokemon/bramblin/front.png new file mode 100644 index 0000000000..80fde28367 Binary files /dev/null and b/graphics/pokemon/bramblin/front.png differ diff --git a/graphics/pokemon/bramblin/icon.png b/graphics/pokemon/bramblin/icon.png new file mode 100755 index 0000000000..ff2d15599e Binary files /dev/null and b/graphics/pokemon/bramblin/icon.png differ diff --git a/graphics/pokemon/bramblin/normal.pal b/graphics/pokemon/bramblin/normal.pal new file mode 100644 index 0000000000..941b8ef20f --- /dev/null +++ b/graphics/pokemon/bramblin/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +144 104 64 +96 64 32 +176 136 80 +200 160 96 +128 80 56 +16 16 16 +208 112 80 +184 88 56 +136 96 80 +72 56 48 +104 80 72 +128 80 56 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/bramblin/shiny.pal b/graphics/pokemon/bramblin/shiny.pal new file mode 100644 index 0000000000..8d65eaa1b0 --- /dev/null +++ b/graphics/pokemon/bramblin/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +120 112 72 +80 72 56 +152 152 104 +208 208 152 +168 96 56 +16 16 16 +208 112 80 +224 128 80 +112 120 72 +48 48 24 +80 96 56 +128 80 56 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/brute_bonnet/back.png b/graphics/pokemon/brute_bonnet/back.png new file mode 100644 index 0000000000..b73cb1589e Binary files /dev/null and b/graphics/pokemon/brute_bonnet/back.png differ diff --git a/graphics/pokemon/brute_bonnet/front.png b/graphics/pokemon/brute_bonnet/front.png new file mode 100644 index 0000000000..46347100a2 Binary files /dev/null and b/graphics/pokemon/brute_bonnet/front.png differ diff --git a/graphics/pokemon/brute_bonnet/icon.png b/graphics/pokemon/brute_bonnet/icon.png new file mode 100755 index 0000000000..052517c12d Binary files /dev/null and b/graphics/pokemon/brute_bonnet/icon.png differ diff --git a/graphics/pokemon/brute_bonnet/normal.pal b/graphics/pokemon/brute_bonnet/normal.pal new file mode 100644 index 0000000000..951da388b7 --- /dev/null +++ b/graphics/pokemon/brute_bonnet/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +227 45 45 +98 72 65 +57 105 65 +213 105 139 +139 242 139 +65 48 49 +255 220 100 +106 153 115 +0 0 0 +238 182 205 +115 36 32 +32 32 32 +156 149 131 +41 24 24 +205 198 197 diff --git a/graphics/pokemon/brute_bonnet/shiny.pal b/graphics/pokemon/brute_bonnet/shiny.pal new file mode 100644 index 0000000000..e0702cf002 --- /dev/null +++ b/graphics/pokemon/brute_bonnet/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +115 82 222 +82 74 65 +57 105 65 +213 105 139 +139 242 139 +49 49 49 +255 220 100 +106 153 115 +0 0 0 +238 182 205 +82 65 164 +32 32 32 +164 156 123 +41 24 24 +213 205 172 diff --git a/graphics/pokemon/bunnelby/anim_front.png b/graphics/pokemon/bunnelby/anim_front.png index 128653b687..f84baa06dd 100644 Binary files a/graphics/pokemon/bunnelby/anim_front.png and b/graphics/pokemon/bunnelby/anim_front.png differ diff --git a/graphics/pokemon/bunnelby/back.png b/graphics/pokemon/bunnelby/back.png index 2b7cc3b850..cabd2fa425 100644 Binary files a/graphics/pokemon/bunnelby/back.png and b/graphics/pokemon/bunnelby/back.png differ diff --git a/graphics/pokemon/bunnelby/normal.pal b/graphics/pokemon/bunnelby/normal.pal index ea42a0cff6..493d820fcb 100644 --- a/graphics/pokemon/bunnelby/normal.pal +++ b/graphics/pokemon/bunnelby/normal.pal @@ -13,7 +13,7 @@ JASC-PAL 136 136 120 200 192 192 248 248 248 -80 40 16 +8 8 8 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bunnelby/shiny.pal b/graphics/pokemon/bunnelby/shiny.pal index 2c2491ab6a..19eec650e1 100644 --- a/graphics/pokemon/bunnelby/shiny.pal +++ b/graphics/pokemon/bunnelby/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 80 96 +153 153 153 +230 230 230 +199 199 199 +8 8 8 +66 66 66 +125 125 125 +152 73 37 +214 111 60 +97 97 97 +186 186 186 248 248 248 -200 200 200 -0 0 0 -56 56 56 -160 160 144 -144 104 80 -240 184 168 -120 120 112 -200 192 192 -248 248 248 -160 152 152 -88 24 32 -0 0 0 -0 0 0 +158 0 0 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/butterfree/gigantamax/back.png b/graphics/pokemon/butterfree/gigantamax/back.png new file mode 100644 index 0000000000..a9bce5aaf1 Binary files /dev/null and b/graphics/pokemon/butterfree/gigantamax/back.png differ diff --git a/graphics/pokemon/butterfree/gigantamax/front.png b/graphics/pokemon/butterfree/gigantamax/front.png new file mode 100644 index 0000000000..0fc4c4c70f Binary files /dev/null and b/graphics/pokemon/butterfree/gigantamax/front.png differ diff --git a/graphics/pokemon/butterfree/gigantamax/icon.png b/graphics/pokemon/butterfree/gigantamax/icon.png new file mode 100644 index 0000000000..9b18cd6e8d Binary files /dev/null and b/graphics/pokemon/butterfree/gigantamax/icon.png differ diff --git a/graphics/pokemon/butterfree/gigantamax/normal.pal b/graphics/pokemon/butterfree/gigantamax/normal.pal new file mode 100644 index 0000000000..17ad51006f --- /dev/null +++ b/graphics/pokemon/butterfree/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 194 14 +134 122 150 +100 87 122 +70 52 92 +106 189 205 +82 123 197 +179 242 219 +238 238 255 +189 189 230 +140 206 188 +146 233 150 +39 167 119 +255 156 180 +230 98 131 +222 49 49 +16 16 16 diff --git a/graphics/pokemon/butterfree/gigantamax/shiny.pal b/graphics/pokemon/butterfree/gigantamax/shiny.pal new file mode 100644 index 0000000000..3d3e6ed267 --- /dev/null +++ b/graphics/pokemon/butterfree/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 194 14 +131 131 189 +115 98 172 +90 74 115 +246 139 131 +222 82 98 +179 242 219 +238 238 255 +189 189 230 +140 206 188 +146 233 150 +39 167 119 +156 255 156 +115 238 115 +32 213 24 +16 16 16 diff --git a/graphics/pokemon/capsakid/back.png b/graphics/pokemon/capsakid/back.png new file mode 100755 index 0000000000..8b04dd8245 Binary files /dev/null and b/graphics/pokemon/capsakid/back.png differ diff --git a/graphics/pokemon/capsakid/front.png b/graphics/pokemon/capsakid/front.png new file mode 100755 index 0000000000..011ba881ad Binary files /dev/null and b/graphics/pokemon/capsakid/front.png differ diff --git a/graphics/pokemon/capsakid/icon.png b/graphics/pokemon/capsakid/icon.png new file mode 100755 index 0000000000..ede6dc9c0c Binary files /dev/null and b/graphics/pokemon/capsakid/icon.png differ diff --git a/graphics/pokemon/capsakid/normal.pal b/graphics/pokemon/capsakid/normal.pal new file mode 100755 index 0000000000..adde45a7b2 --- /dev/null +++ b/graphics/pokemon/capsakid/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 72 56 +112 116 112 +176 168 152 +80 152 104 +208 220 192 +16 16 16 +120 184 120 +48 76 56 +88 132 96 +144 196 144 +40 48 40 +240 152 0 +64 104 80 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/capsakid/shiny.pal b/graphics/pokemon/capsakid/shiny.pal new file mode 100755 index 0000000000..094a57803b --- /dev/null +++ b/graphics/pokemon/capsakid/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 72 56 +110 126 114 +170 184 176 +119 164 198 +232 244 246 +16 16 16 +217 216 147 +104 97 60 +158 154 87 +144 196 144 +40 48 40 +224 135 8 +66 115 147 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/centiskorch/gigantamax/back.png b/graphics/pokemon/centiskorch/gigantamax/back.png new file mode 100644 index 0000000000..2279b3a065 Binary files /dev/null and b/graphics/pokemon/centiskorch/gigantamax/back.png differ diff --git a/graphics/pokemon/centiskorch/gigantamax/front.png b/graphics/pokemon/centiskorch/gigantamax/front.png new file mode 100644 index 0000000000..a35501c2bb Binary files /dev/null and b/graphics/pokemon/centiskorch/gigantamax/front.png differ diff --git a/graphics/pokemon/centiskorch/gigantamax/icon.png b/graphics/pokemon/centiskorch/gigantamax/icon.png new file mode 100644 index 0000000000..811a3c4991 Binary files /dev/null and b/graphics/pokemon/centiskorch/gigantamax/icon.png differ diff --git a/graphics/pokemon/centiskorch/gigantamax/normal.pal b/graphics/pokemon/centiskorch/gigantamax/normal.pal new file mode 100644 index 0000000000..5ce935aa18 --- /dev/null +++ b/graphics/pokemon/centiskorch/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +215 44 0 +255 155 27 +64 30 33 +255 247 0 +16 16 16 +85 19 7 +115 66 57 +82 40 41 +205 45 26 +255 90 66 +255 213 0 +156 27 15 +251 251 251 +148 21 40 +15 15 15 diff --git a/graphics/pokemon/centiskorch/gigantamax/shiny.pal b/graphics/pokemon/centiskorch/gigantamax/shiny.pal new file mode 100644 index 0000000000..26404703ab --- /dev/null +++ b/graphics/pokemon/centiskorch/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +215 44 0 +255 155 27 +6 31 51 +255 247 0 +16 16 16 +85 19 7 +43 94 109 +20 54 73 +205 45 26 +255 90 66 +255 213 0 +156 27 15 +251 251 251 +148 21 40 +15 15 15 diff --git a/graphics/pokemon/ceruledge/back.png b/graphics/pokemon/ceruledge/back.png new file mode 100644 index 0000000000..ca1e76e694 Binary files /dev/null and b/graphics/pokemon/ceruledge/back.png differ diff --git a/graphics/pokemon/ceruledge/front.png b/graphics/pokemon/ceruledge/front.png new file mode 100644 index 0000000000..34f056e16a Binary files /dev/null and b/graphics/pokemon/ceruledge/front.png differ diff --git a/graphics/pokemon/ceruledge/icon.png b/graphics/pokemon/ceruledge/icon.png new file mode 100755 index 0000000000..7687030bd7 Binary files /dev/null and b/graphics/pokemon/ceruledge/icon.png differ diff --git a/graphics/pokemon/ceruledge/normal.pal b/graphics/pokemon/ceruledge/normal.pal new file mode 100644 index 0000000000..c3d8c407c5 --- /dev/null +++ b/graphics/pokemon/ceruledge/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +101 145 217 +201 134 218 +127 200 223 +169 160 226 +104 90 167 +49 49 105 +106 117 188 +38 32 35 +6 6 6 +52 105 191 +240 255 255 +67 67 140 +23 23 52 +70 59 65 +0 0 0 diff --git a/graphics/pokemon/ceruledge/shiny.pal b/graphics/pokemon/ceruledge/shiny.pal new file mode 100644 index 0000000000..5ae0e1d485 --- /dev/null +++ b/graphics/pokemon/ceruledge/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +101 145 217 +201 134 218 +127 200 223 +169 160 226 +104 90 167 +49 49 105 +106 117 188 +38 32 35 +6 6 6 +52 105 191 +255 242 0 +67 67 140 +23 23 52 +70 59 65 +0 0 0 diff --git a/graphics/pokemon/cetitan/back.png b/graphics/pokemon/cetitan/back.png new file mode 100644 index 0000000000..45e6478c17 Binary files /dev/null and b/graphics/pokemon/cetitan/back.png differ diff --git a/graphics/pokemon/cetitan/front.png b/graphics/pokemon/cetitan/front.png new file mode 100644 index 0000000000..20fe0f0dd1 Binary files /dev/null and b/graphics/pokemon/cetitan/front.png differ diff --git a/graphics/pokemon/cetitan/icon.png b/graphics/pokemon/cetitan/icon.png new file mode 100755 index 0000000000..81cf0a3e24 Binary files /dev/null and b/graphics/pokemon/cetitan/icon.png differ diff --git a/graphics/pokemon/cetitan/normal.pal b/graphics/pokemon/cetitan/normal.pal new file mode 100644 index 0000000000..c84f2f8d43 --- /dev/null +++ b/graphics/pokemon/cetitan/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 120 120 +248 248 248 +80 64 72 +240 144 200 +184 184 184 +192 96 152 +160 64 96 +16 16 16 +120 112 128 +56 56 64 +208 208 216 +160 160 168 +128 120 136 +88 88 96 +248 248 248 diff --git a/graphics/pokemon/cetitan/shiny.pal b/graphics/pokemon/cetitan/shiny.pal new file mode 100644 index 0000000000..16e5456b3e --- /dev/null +++ b/graphics/pokemon/cetitan/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 56 64 +88 104 112 +32 40 48 +240 128 80 +72 80 88 +176 72 48 +128 40 40 +16 16 16 +120 112 128 +56 56 64 +208 208 216 +160 160 168 +160 160 168 +120 112 128 +248 248 248 diff --git a/graphics/pokemon/cetoddle/back.png b/graphics/pokemon/cetoddle/back.png new file mode 100644 index 0000000000..007fbfb426 Binary files /dev/null and b/graphics/pokemon/cetoddle/back.png differ diff --git a/graphics/pokemon/cetoddle/front.png b/graphics/pokemon/cetoddle/front.png new file mode 100644 index 0000000000..5f15a6a857 Binary files /dev/null and b/graphics/pokemon/cetoddle/front.png differ diff --git a/graphics/pokemon/cetoddle/icon.png b/graphics/pokemon/cetoddle/icon.png new file mode 100755 index 0000000000..330b5c56d2 Binary files /dev/null and b/graphics/pokemon/cetoddle/icon.png differ diff --git a/graphics/pokemon/cetoddle/normal.pal b/graphics/pokemon/cetoddle/normal.pal new file mode 100644 index 0000000000..340803e0a2 --- /dev/null +++ b/graphics/pokemon/cetoddle/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 88 128 +48 48 80 +240 240 240 +200 200 216 +152 152 184 +232 136 176 +152 80 120 +248 248 248 +16 16 16 +72 72 72 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/cetoddle/shiny.pal b/graphics/pokemon/cetoddle/shiny.pal new file mode 100644 index 0000000000..bd3f3bec79 --- /dev/null +++ b/graphics/pokemon/cetoddle/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +72 72 88 +40 40 56 +152 152 160 +136 136 152 +112 112 144 +240 128 80 +184 80 56 +248 248 248 +16 16 16 +72 72 72 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/charcadet/back.png b/graphics/pokemon/charcadet/back.png new file mode 100644 index 0000000000..c9a91f9467 Binary files /dev/null and b/graphics/pokemon/charcadet/back.png differ diff --git a/graphics/pokemon/charcadet/front.png b/graphics/pokemon/charcadet/front.png new file mode 100644 index 0000000000..90d14e4cdb Binary files /dev/null and b/graphics/pokemon/charcadet/front.png differ diff --git a/graphics/pokemon/charcadet/icon.png b/graphics/pokemon/charcadet/icon.png new file mode 100755 index 0000000000..f62d09e918 Binary files /dev/null and b/graphics/pokemon/charcadet/icon.png differ diff --git a/graphics/pokemon/charcadet/normal.pal b/graphics/pokemon/charcadet/normal.pal new file mode 100644 index 0000000000..49a00d6302 --- /dev/null +++ b/graphics/pokemon/charcadet/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +179 54 48 +255 119 178 +238 13 35 +128 19 19 +15 15 15 +70 68 68 +99 97 97 +243 143 7 +27 33 35 +199 117 5 +255 255 255 +243 189 3 +153 211 165 +238 13 36 +0 0 0 diff --git a/graphics/pokemon/charcadet/shiny.pal b/graphics/pokemon/charcadet/shiny.pal new file mode 100644 index 0000000000..cf3a77e993 --- /dev/null +++ b/graphics/pokemon/charcadet/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +179 54 48 +255 119 178 +238 13 35 +128 19 19 +15 15 15 +70 68 68 +99 97 97 +243 143 7 +27 33 35 +199 117 5 +255 255 255 +243 189 3 +153 211 165 +33 174 217 +0 0 0 diff --git a/graphics/pokemon/charizard/gigantamax/back.png b/graphics/pokemon/charizard/gigantamax/back.png new file mode 100644 index 0000000000..508e18c549 Binary files /dev/null and b/graphics/pokemon/charizard/gigantamax/back.png differ diff --git a/graphics/pokemon/charizard/gigantamax/front.png b/graphics/pokemon/charizard/gigantamax/front.png new file mode 100644 index 0000000000..c1f43003ac Binary files /dev/null and b/graphics/pokemon/charizard/gigantamax/front.png differ diff --git a/graphics/pokemon/charizard/gigantamax/icon.png b/graphics/pokemon/charizard/gigantamax/icon.png new file mode 100644 index 0000000000..68461c5032 Binary files /dev/null and b/graphics/pokemon/charizard/gigantamax/icon.png differ diff --git a/graphics/pokemon/charizard/gigantamax/normal.pal b/graphics/pokemon/charizard/gigantamax/normal.pal new file mode 100644 index 0000000000..533e9772e0 --- /dev/null +++ b/graphics/pokemon/charizard/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +255 66 0 +255 214 16 +247 165 16 +255 232 119 +16 16 16 +132 49 25 +239 132 41 +206 82 66 +252 252 252 +214 41 44 +239 181 90 +213 207 174 +162 54 43 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/charizard/gigantamax/shiny.pal b/graphics/pokemon/charizard/gigantamax/shiny.pal new file mode 100644 index 0000000000..bae527ee2e --- /dev/null +++ b/graphics/pokemon/charizard/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +255 66 0 +255 214 16 +247 165 16 +255 232 119 +16 16 16 +49 57 65 +131 123 148 +90 90 106 +252 252 252 +214 41 44 +169 163 183 +213 207 174 +66 66 82 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/cherrim/normal/anim_front.png b/graphics/pokemon/cherrim/anim_front.png similarity index 100% rename from graphics/pokemon/cherrim/normal/anim_front.png rename to graphics/pokemon/cherrim/anim_front.png diff --git a/graphics/pokemon/cherrim/normal/back.png b/graphics/pokemon/cherrim/back.png similarity index 100% rename from graphics/pokemon/cherrim/normal/back.png rename to graphics/pokemon/cherrim/back.png diff --git a/graphics/pokemon/cherrim/normal/normal.pal b/graphics/pokemon/cherrim/normal.pal similarity index 100% rename from graphics/pokemon/cherrim/normal/normal.pal rename to graphics/pokemon/cherrim/normal.pal diff --git a/graphics/pokemon/cherrim/normal/shiny.pal b/graphics/pokemon/cherrim/shiny.pal similarity index 100% rename from graphics/pokemon/cherrim/normal/shiny.pal rename to graphics/pokemon/cherrim/shiny.pal diff --git a/graphics/pokemon/chespin/anim_front.png b/graphics/pokemon/chespin/anim_front.png index 172c75ec20..319bf4de44 100644 Binary files a/graphics/pokemon/chespin/anim_front.png and b/graphics/pokemon/chespin/anim_front.png differ diff --git a/graphics/pokemon/chespin/back.png b/graphics/pokemon/chespin/back.png index 1cf511302f..27cbeab62a 100644 Binary files a/graphics/pokemon/chespin/back.png and b/graphics/pokemon/chespin/back.png differ diff --git a/graphics/pokemon/chespin/normal.pal b/graphics/pokemon/chespin/normal.pal index e3f7d17fb5..090aa15645 100644 --- a/graphics/pokemon/chespin/normal.pal +++ b/graphics/pokemon/chespin/normal.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -0 181 239 +152 208 160 74 99 25 16 16 16 165 214 74 diff --git a/graphics/pokemon/chespin/shiny.pal b/graphics/pokemon/chespin/shiny.pal index 58c22e9619..f0abc0c1b5 100644 --- a/graphics/pokemon/chespin/shiny.pal +++ b/graphics/pokemon/chespin/shiny.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -0 181 239 +152 208 160 99 8 8 16 16 16 222 41 58 diff --git a/graphics/pokemon/chi_yu/back.png b/graphics/pokemon/chi_yu/back.png new file mode 100644 index 0000000000..ff1f7c3729 Binary files /dev/null and b/graphics/pokemon/chi_yu/back.png differ diff --git a/graphics/pokemon/chi_yu/front.png b/graphics/pokemon/chi_yu/front.png new file mode 100644 index 0000000000..6a41c507a5 Binary files /dev/null and b/graphics/pokemon/chi_yu/front.png differ diff --git a/graphics/pokemon/chi_yu/icon.png b/graphics/pokemon/chi_yu/icon.png new file mode 100755 index 0000000000..1b922e696e Binary files /dev/null and b/graphics/pokemon/chi_yu/icon.png differ diff --git a/graphics/pokemon/chi_yu/normal.pal b/graphics/pokemon/chi_yu/normal.pal new file mode 100644 index 0000000000..368ffd90e6 --- /dev/null +++ b/graphics/pokemon/chi_yu/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +162 55 36 +244 52 47 +15 15 15 +243 94 56 +249 130 79 +240 167 85 +177 82 54 +252 245 155 +28 64 33 +193 196 189 +91 152 90 +131 184 132 +60 63 58 +72 116 71 +248 248 240 diff --git a/graphics/pokemon/chi_yu/shiny.pal b/graphics/pokemon/chi_yu/shiny.pal new file mode 100644 index 0000000000..e041f9654d --- /dev/null +++ b/graphics/pokemon/chi_yu/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +69 67 68 +94 94 94 +15 15 15 +89 128 162 +0 192 249 +124 197 231 +70 123 128 +186 254 253 +28 64 33 +193 196 189 +91 152 90 +131 184 132 +60 63 58 +72 116 71 +248 248 240 diff --git a/graphics/pokemon/chien_pao/back.png b/graphics/pokemon/chien_pao/back.png new file mode 100644 index 0000000000..045e2c214a Binary files /dev/null and b/graphics/pokemon/chien_pao/back.png differ diff --git a/graphics/pokemon/chien_pao/front.png b/graphics/pokemon/chien_pao/front.png new file mode 100644 index 0000000000..b871128b41 Binary files /dev/null and b/graphics/pokemon/chien_pao/front.png differ diff --git a/graphics/pokemon/chien_pao/icon.png b/graphics/pokemon/chien_pao/icon.png new file mode 100755 index 0000000000..02d7bbe93d Binary files /dev/null and b/graphics/pokemon/chien_pao/icon.png differ diff --git a/graphics/pokemon/chien_pao/normal.pal b/graphics/pokemon/chien_pao/normal.pal new file mode 100644 index 0000000000..e5dca7fc5c --- /dev/null +++ b/graphics/pokemon/chien_pao/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +114 89 64 +40 56 56 +248 248 248 +185 198 216 +227 227 227 +168 168 168 +0 0 0 +80 96 96 +84 84 84 +112 128 128 +122 122 122 +168 208 248 +248 248 248 +112 176 232 +141 152 168 diff --git a/graphics/pokemon/chien_pao/shiny.pal b/graphics/pokemon/chien_pao/shiny.pal new file mode 100644 index 0000000000..a0e08cb821 --- /dev/null +++ b/graphics/pokemon/chien_pao/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +114 89 64 +40 56 56 +187 155 118 +135 102 64 +227 227 227 +168 168 168 +0 0 0 +80 96 96 +84 84 84 +112 128 128 +122 122 122 +168 208 248 +248 248 248 +112 176 232 +103 69 29 diff --git a/graphics/pokemon/cinderace/gigantamax/back.png b/graphics/pokemon/cinderace/gigantamax/back.png new file mode 100644 index 0000000000..b9e6b813de Binary files /dev/null and b/graphics/pokemon/cinderace/gigantamax/back.png differ diff --git a/graphics/pokemon/cinderace/gigantamax/front.png b/graphics/pokemon/cinderace/gigantamax/front.png new file mode 100644 index 0000000000..e3739d9062 Binary files /dev/null and b/graphics/pokemon/cinderace/gigantamax/front.png differ diff --git a/graphics/pokemon/cinderace/gigantamax/icon.png b/graphics/pokemon/cinderace/gigantamax/icon.png new file mode 100644 index 0000000000..3d1f1e4237 Binary files /dev/null and b/graphics/pokemon/cinderace/gigantamax/icon.png differ diff --git a/graphics/pokemon/cinderace/gigantamax/normal.pal b/graphics/pokemon/cinderace/gigantamax/normal.pal new file mode 100644 index 0000000000..a1782790ab --- /dev/null +++ b/graphics/pokemon/cinderace/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +125 118 121 +16 16 16 +190 182 183 +115 26 13 +175 39 20 +254 226 90 +235 93 36 +254 238 160 +237 151 35 +244 201 28 +104 85 25 +7 33 69 +0 65 148 +248 248 248 +252 252 252 diff --git a/graphics/pokemon/cinderace/gigantamax/shiny.pal b/graphics/pokemon/cinderace/gigantamax/shiny.pal new file mode 100644 index 0000000000..e4454df011 --- /dev/null +++ b/graphics/pokemon/cinderace/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +80 77 73 +16 16 16 +136 133 128 +118 50 8 +180 75 12 +254 226 90 +228 119 19 +254 238 160 +237 151 35 +244 201 28 +104 85 25 +132 120 120 +252 252 252 +179 186 175 +254 254 254 diff --git a/graphics/pokemon/clodsire/back.png b/graphics/pokemon/clodsire/back.png new file mode 100755 index 0000000000..64132a060f Binary files /dev/null and b/graphics/pokemon/clodsire/back.png differ diff --git a/graphics/pokemon/clodsire/front.png b/graphics/pokemon/clodsire/front.png new file mode 100755 index 0000000000..2722b7eb70 Binary files /dev/null and b/graphics/pokemon/clodsire/front.png differ diff --git a/graphics/pokemon/clodsire/icon.png b/graphics/pokemon/clodsire/icon.png new file mode 100755 index 0000000000..09fa007c68 Binary files /dev/null and b/graphics/pokemon/clodsire/icon.png differ diff --git a/graphics/pokemon/clodsire/normal.pal b/graphics/pokemon/clodsire/normal.pal new file mode 100755 index 0000000000..c7d36df32c --- /dev/null +++ b/graphics/pokemon/clodsire/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +64 60 48 +128 108 96 +96 80 72 +48 40 32 +16 16 16 +184 160 160 +208 208 208 +40 36 32 +152 120 120 +80 68 72 +104 52 56 +176 88 104 +248 140 160 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/clodsire/shiny.pal b/graphics/pokemon/clodsire/shiny.pal new file mode 100755 index 0000000000..fcf3c9dc23 --- /dev/null +++ b/graphics/pokemon/clodsire/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +74 67 90 +127 116 143 +107 97 124 +46 40 44 +16 16 16 +160 158 197 +205 180 170 +40 36 32 +127 127 157 +87 85 112 +104 52 56 +176 88 104 +248 140 160 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/coalossal/gigantamax/back.png b/graphics/pokemon/coalossal/gigantamax/back.png new file mode 100644 index 0000000000..907768dc81 Binary files /dev/null and b/graphics/pokemon/coalossal/gigantamax/back.png differ diff --git a/graphics/pokemon/coalossal/gigantamax/front.png b/graphics/pokemon/coalossal/gigantamax/front.png new file mode 100644 index 0000000000..efd49d97e4 Binary files /dev/null and b/graphics/pokemon/coalossal/gigantamax/front.png differ diff --git a/graphics/pokemon/coalossal/gigantamax/icon.png b/graphics/pokemon/coalossal/gigantamax/icon.png new file mode 100644 index 0000000000..82a769dd95 Binary files /dev/null and b/graphics/pokemon/coalossal/gigantamax/icon.png differ diff --git a/graphics/pokemon/coalossal/gigantamax/normal.pal b/graphics/pokemon/coalossal/gigantamax/normal.pal new file mode 100644 index 0000000000..7c8a54041a --- /dev/null +++ b/graphics/pokemon/coalossal/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +31 20 24 +47 36 39 +16 16 16 +55 51 55 +37 35 37 +88 71 74 +69 50 51 +66 64 60 +84 81 76 +103 99 92 +120 55 59 +89 40 43 +243 120 67 +236 225 13 +234 70 73 diff --git a/graphics/pokemon/coalossal/gigantamax/shiny.pal b/graphics/pokemon/coalossal/gigantamax/shiny.pal new file mode 100644 index 0000000000..ef46ff2c3f --- /dev/null +++ b/graphics/pokemon/coalossal/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +31 20 24 +47 36 39 +16 16 16 +50 58 63 +34 36 38 +88 71 74 +69 50 51 +71 82 88 +88 112 124 +103 132 140 +120 55 59 +89 40 43 +243 120 67 +236 225 13 +234 70 73 diff --git a/graphics/pokemon/copperajah/gigantamax/back.png b/graphics/pokemon/copperajah/gigantamax/back.png new file mode 100644 index 0000000000..b42d0d32d1 Binary files /dev/null and b/graphics/pokemon/copperajah/gigantamax/back.png differ diff --git a/graphics/pokemon/copperajah/gigantamax/front.png b/graphics/pokemon/copperajah/gigantamax/front.png new file mode 100644 index 0000000000..9ba3497ae0 Binary files /dev/null and b/graphics/pokemon/copperajah/gigantamax/front.png differ diff --git a/graphics/pokemon/copperajah/gigantamax/icon.png b/graphics/pokemon/copperajah/gigantamax/icon.png new file mode 100644 index 0000000000..1da37e2463 Binary files /dev/null and b/graphics/pokemon/copperajah/gigantamax/icon.png differ diff --git a/graphics/pokemon/copperajah/gigantamax/normal.pal b/graphics/pokemon/copperajah/gigantamax/normal.pal new file mode 100644 index 0000000000..0a7db22185 --- /dev/null +++ b/graphics/pokemon/copperajah/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +135 67 44 +16 16 16 +192 106 49 +34 66 54 +23 47 38 +95 101 89 +238 230 233 +159 147 149 +57 110 99 +34 83 72 +242 143 58 +24 88 79 +53 193 167 +242 91 0 +26 140 120 diff --git a/graphics/pokemon/copperajah/gigantamax/shiny.pal b/graphics/pokemon/copperajah/gigantamax/shiny.pal new file mode 100644 index 0000000000..f80600011c --- /dev/null +++ b/graphics/pokemon/copperajah/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +141 100 46 +16 16 16 +198 155 50 +37 63 44 +25 45 30 +95 101 89 +238 230 233 +159 147 149 +62 105 80 +39 78 55 +243 202 62 +52 90 85 +100 166 154 +242 91 0 +65 127 116 diff --git a/graphics/pokemon/corviknight/gigantamax/back.png b/graphics/pokemon/corviknight/gigantamax/back.png new file mode 100644 index 0000000000..99ba005f37 Binary files /dev/null and b/graphics/pokemon/corviknight/gigantamax/back.png differ diff --git a/graphics/pokemon/corviknight/gigantamax/front.png b/graphics/pokemon/corviknight/gigantamax/front.png new file mode 100644 index 0000000000..63c05fb7ab Binary files /dev/null and b/graphics/pokemon/corviknight/gigantamax/front.png differ diff --git a/graphics/pokemon/corviknight/gigantamax/icon.png b/graphics/pokemon/corviknight/gigantamax/icon.png new file mode 100644 index 0000000000..8104a49ba6 Binary files /dev/null and b/graphics/pokemon/corviknight/gigantamax/icon.png differ diff --git a/graphics/pokemon/corviknight/gigantamax/normal.pal b/graphics/pokemon/corviknight/gigantamax/normal.pal new file mode 100644 index 0000000000..1edbbecf93 --- /dev/null +++ b/graphics/pokemon/corviknight/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +37 29 78 +16 16 16 +67 68 117 +122 24 95 +215 0 67 +48 51 96 +24 23 61 +62 61 109 +77 84 136 +44 43 88 +100 108 168 +78 65 80 +46 38 47 +255 118 160 +152 27 117 diff --git a/graphics/pokemon/corviknight/gigantamax/shiny.pal b/graphics/pokemon/corviknight/gigantamax/shiny.pal new file mode 100644 index 0000000000..94086e3215 --- /dev/null +++ b/graphics/pokemon/corviknight/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +53 53 53 +16 16 16 +131 131 131 +139 121 31 +238 214 0 +77 77 77 +21 21 23 +65 64 68 +144 144 144 +41 41 44 +188 188 188 +35 34 34 +8 8 8 +255 247 153 +179 166 107 diff --git a/graphics/pokemon/crocalor/back.png b/graphics/pokemon/crocalor/back.png new file mode 100644 index 0000000000..5821ac9089 Binary files /dev/null and b/graphics/pokemon/crocalor/back.png differ diff --git a/graphics/pokemon/crocalor/front.png b/graphics/pokemon/crocalor/front.png new file mode 100644 index 0000000000..b2794debcf Binary files /dev/null and b/graphics/pokemon/crocalor/front.png differ diff --git a/graphics/pokemon/crocalor/icon.png b/graphics/pokemon/crocalor/icon.png new file mode 100755 index 0000000000..5ca0ee3f46 Binary files /dev/null and b/graphics/pokemon/crocalor/icon.png differ diff --git a/graphics/pokemon/crocalor/normal.pal b/graphics/pokemon/crocalor/normal.pal new file mode 100644 index 0000000000..f238c0cac2 --- /dev/null +++ b/graphics/pokemon/crocalor/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +255 60 60 +255 211 35 +255 247 222 +242 162 25 +255 153 10 +53 53 53 +173 145 135 +204 49 49 +118 39 25 +109 82 58 +79 79 79 +255 60 60 +10 10 10 +238 125 82 +0 0 0 diff --git a/graphics/pokemon/crocalor/normal.png b/graphics/pokemon/crocalor/normal.png new file mode 100644 index 0000000000..531e2b211d Binary files /dev/null and b/graphics/pokemon/crocalor/normal.png differ diff --git a/graphics/pokemon/crocalor/shiny.pal b/graphics/pokemon/crocalor/shiny.pal new file mode 100644 index 0000000000..18320d602f --- /dev/null +++ b/graphics/pokemon/crocalor/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +255 60 60 +255 211 35 +255 247 222 +242 162 25 +255 153 10 +104 33 45 +173 145 135 +204 51 135 +128 32 84 +109 82 58 +149 62 73 +255 64 168 +10 10 10 +238 125 82 +0 0 0 diff --git a/graphics/pokemon/cutiefly/anim_front.png b/graphics/pokemon/cutiefly/anim_front.png new file mode 100644 index 0000000000..3a3a17092f Binary files /dev/null and b/graphics/pokemon/cutiefly/anim_front.png differ diff --git a/graphics/pokemon/cutiefly/front.png b/graphics/pokemon/cutiefly/front.png deleted file mode 100644 index 9e57565222..0000000000 Binary files a/graphics/pokemon/cutiefly/front.png and /dev/null differ diff --git a/graphics/pokemon/cyclizar/back.png b/graphics/pokemon/cyclizar/back.png new file mode 100644 index 0000000000..73c2babe02 Binary files /dev/null and b/graphics/pokemon/cyclizar/back.png differ diff --git a/graphics/pokemon/cyclizar/front.png b/graphics/pokemon/cyclizar/front.png new file mode 100644 index 0000000000..f01984e5cc Binary files /dev/null and b/graphics/pokemon/cyclizar/front.png differ diff --git a/graphics/pokemon/cyclizar/icon.png b/graphics/pokemon/cyclizar/icon.png new file mode 100755 index 0000000000..64eba81963 Binary files /dev/null and b/graphics/pokemon/cyclizar/icon.png differ diff --git a/graphics/pokemon/cyclizar/normal.pal b/graphics/pokemon/cyclizar/normal.pal new file mode 100644 index 0000000000..538a25e05a --- /dev/null +++ b/graphics/pokemon/cyclizar/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +64 100 181 +48 59 57 +33 37 33 +64 77 67 +93 121 106 +15 15 15 +230 112 62 +206 206 206 +127 167 133 +255 255 255 +34 35 40 +50 57 67 +75 86 92 +93 121 107 diff --git a/graphics/pokemon/cyclizar/shiny.pal b/graphics/pokemon/cyclizar/shiny.pal new file mode 100644 index 0000000000..9641a7498f --- /dev/null +++ b/graphics/pokemon/cyclizar/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +64 100 181 +48 59 57 +33 37 33 +248 238 187 +97 95 71 +15 15 15 +85 215 253 +206 206 206 +138 138 112 +255 255 255 +34 35 40 +50 57 67 +75 86 92 +250 241 235 diff --git a/graphics/pokemon/dachsbun/back.png b/graphics/pokemon/dachsbun/back.png new file mode 100644 index 0000000000..b9187f43a4 Binary files /dev/null and b/graphics/pokemon/dachsbun/back.png differ diff --git a/graphics/pokemon/dachsbun/front.png b/graphics/pokemon/dachsbun/front.png new file mode 100644 index 0000000000..d745afdf84 Binary files /dev/null and b/graphics/pokemon/dachsbun/front.png differ diff --git a/graphics/pokemon/dachsbun/icon.png b/graphics/pokemon/dachsbun/icon.png new file mode 100644 index 0000000000..fe1caf375d Binary files /dev/null and b/graphics/pokemon/dachsbun/icon.png differ diff --git a/graphics/pokemon/dachsbun/normal.pal b/graphics/pokemon/dachsbun/normal.pal new file mode 100644 index 0000000000..d65c0def10 --- /dev/null +++ b/graphics/pokemon/dachsbun/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 56 24 +248 232 120 +80 32 24 +224 152 88 +16 16 16 +48 16 8 +200 88 40 +160 56 32 +248 176 80 +200 120 56 +216 144 112 +248 248 248 +200 128 96 +64 64 64 +0 0 0 diff --git a/graphics/pokemon/dachsbun/shiny.pal b/graphics/pokemon/dachsbun/shiny.pal new file mode 100644 index 0000000000..6ca0a88437 --- /dev/null +++ b/graphics/pokemon/dachsbun/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +136 72 48 +248 216 200 +96 40 24 +208 144 128 +16 16 16 +64 16 16 +216 128 104 +168 88 72 +248 200 160 +216 152 120 +216 144 112 +248 248 248 +200 128 96 +64 64 64 +0 0 0 diff --git a/graphics/pokemon/dartrix/anim_front.png b/graphics/pokemon/dartrix/anim_front.png new file mode 100644 index 0000000000..6adf234065 Binary files /dev/null and b/graphics/pokemon/dartrix/anim_front.png differ diff --git a/graphics/pokemon/dartrix/front.png b/graphics/pokemon/dartrix/front.png deleted file mode 100644 index 004fa43bdf..0000000000 Binary files a/graphics/pokemon/dartrix/front.png and /dev/null differ diff --git a/graphics/pokemon/decidueye/anim_front.png b/graphics/pokemon/decidueye/anim_front.png new file mode 100644 index 0000000000..f0d7e46bb1 Binary files /dev/null and b/graphics/pokemon/decidueye/anim_front.png differ diff --git a/graphics/pokemon/decidueye/front.png b/graphics/pokemon/decidueye/front.png deleted file mode 100644 index a13a33a2ae..0000000000 Binary files a/graphics/pokemon/decidueye/front.png and /dev/null differ diff --git a/graphics/pokemon/dipplin/back.png b/graphics/pokemon/dipplin/back.png new file mode 100644 index 0000000000..81821ede25 Binary files /dev/null and b/graphics/pokemon/dipplin/back.png differ diff --git a/graphics/pokemon/dipplin/front.png b/graphics/pokemon/dipplin/front.png new file mode 100644 index 0000000000..5e9a2554e8 Binary files /dev/null and b/graphics/pokemon/dipplin/front.png differ diff --git a/graphics/pokemon/dipplin/icon.png b/graphics/pokemon/dipplin/icon.png new file mode 100644 index 0000000000..5fab863bd9 Binary files /dev/null and b/graphics/pokemon/dipplin/icon.png differ diff --git a/graphics/pokemon/dipplin/normal.pal b/graphics/pokemon/dipplin/normal.pal new file mode 100644 index 0000000000..4e4a27deec --- /dev/null +++ b/graphics/pokemon/dipplin/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +119 103 74 +196 173 122 +249 229 150 +237 206 93 +79 107 71 +104 140 84 +181 206 80 +130 173 84 +51 76 54 +0 0 0 +250 250 250 +94 9 13 +167 29 38 +220 109 82 +214 59 52 diff --git a/graphics/pokemon/dipplin/shiny.pal b/graphics/pokemon/dipplin/shiny.pal new file mode 100644 index 0000000000..7123a2ca0b --- /dev/null +++ b/graphics/pokemon/dipplin/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +119 103 74 +196 173 122 +249 229 150 +237 206 93 +79 107 71 +104 140 84 +181 206 80 +130 173 84 +51 76 54 +0 0 0 +250 250 250 +94 9 13 +198 113 15 +237 206 93 +250 173 35 diff --git a/graphics/pokemon/dolliv/back.png b/graphics/pokemon/dolliv/back.png new file mode 100644 index 0000000000..9a179e325e Binary files /dev/null and b/graphics/pokemon/dolliv/back.png differ diff --git a/graphics/pokemon/dolliv/front.png b/graphics/pokemon/dolliv/front.png new file mode 100644 index 0000000000..0d707db8df Binary files /dev/null and b/graphics/pokemon/dolliv/front.png differ diff --git a/graphics/pokemon/dolliv/icon.png b/graphics/pokemon/dolliv/icon.png new file mode 100755 index 0000000000..37bd0eb19f Binary files /dev/null and b/graphics/pokemon/dolliv/icon.png differ diff --git a/graphics/pokemon/dolliv/normal.pal b/graphics/pokemon/dolliv/normal.pal new file mode 100644 index 0000000000..f2e41f0ac7 --- /dev/null +++ b/graphics/pokemon/dolliv/normal.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +153 210 164 +16 16 16 +47 108 46 +118 94 33 +132 193 54 +222 214 109 +182 165 81 +100 153 64 +205 193 124 +255 250 185 +242 242 242 diff --git a/graphics/pokemon/dolliv/shiny.pal b/graphics/pokemon/dolliv/shiny.pal new file mode 100644 index 0000000000..d462805715 --- /dev/null +++ b/graphics/pokemon/dolliv/shiny.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +153 210 164 +16 16 16 +45 82 12 +40 25 54 +102 209 86 +89 77 95 +57 45 65 +91 160 71 +198 201 130 +251 255 178 +242 242 242 diff --git a/graphics/pokemon/dondozo/back.png b/graphics/pokemon/dondozo/back.png new file mode 100755 index 0000000000..d0d6ce3fd6 Binary files /dev/null and b/graphics/pokemon/dondozo/back.png differ diff --git a/graphics/pokemon/dondozo/front.png b/graphics/pokemon/dondozo/front.png new file mode 100755 index 0000000000..c49c250348 Binary files /dev/null and b/graphics/pokemon/dondozo/front.png differ diff --git a/graphics/pokemon/dondozo/icon.png b/graphics/pokemon/dondozo/icon.png new file mode 100755 index 0000000000..066128e0d4 Binary files /dev/null and b/graphics/pokemon/dondozo/icon.png differ diff --git a/graphics/pokemon/dondozo/normal.pal b/graphics/pokemon/dondozo/normal.pal new file mode 100755 index 0000000000..1e2e39c1a2 --- /dev/null +++ b/graphics/pokemon/dondozo/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +80 92 104 +224 224 224 +192 180 184 +16 16 16 +8 76 120 +16 176 248 +16 124 184 +8 36 72 +16 64 104 +88 204 248 +16 88 144 +56 144 200 +248 252 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/dondozo/shiny.pal b/graphics/pokemon/dondozo/shiny.pal new file mode 100755 index 0000000000..45eca3b135 --- /dev/null +++ b/graphics/pokemon/dondozo/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +80 92 104 +224 224 224 +192 180 184 +16 16 16 +86 78 50 +252 239 105 +177 170 72 +103 103 103 +165 165 165 +255 252 201 +222 223 221 +56 144 200 +248 252 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/drampa/anim_front.png b/graphics/pokemon/drampa/anim_front.png new file mode 100644 index 0000000000..c263a15727 Binary files /dev/null and b/graphics/pokemon/drampa/anim_front.png differ diff --git a/graphics/pokemon/drampa/back.png b/graphics/pokemon/drampa/back.png index b3460057ef..be44b000bc 100644 Binary files a/graphics/pokemon/drampa/back.png and b/graphics/pokemon/drampa/back.png differ diff --git a/graphics/pokemon/drampa/front.png b/graphics/pokemon/drampa/front.png deleted file mode 100644 index 6aecba6949..0000000000 Binary files a/graphics/pokemon/drampa/front.png and /dev/null differ diff --git a/graphics/pokemon/drampa/normal.pal b/graphics/pokemon/drampa/normal.pal index 7030346278..5639299f95 100644 --- a/graphics/pokemon/drampa/normal.pal +++ b/graphics/pokemon/drampa/normal.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -0 176 232 +152 208 160 16 80 96 16 16 16 88 160 160 diff --git a/graphics/pokemon/drampa/shiny.pal b/graphics/pokemon/drampa/shiny.pal index ecfd998780..1422a88ff1 100644 --- a/graphics/pokemon/drampa/shiny.pal +++ b/graphics/pokemon/drampa/shiny.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -0 176 232 +152 208 160 152 96 56 16 16 16 224 176 112 diff --git a/graphics/pokemon/drednaw/gigantamax/back.png b/graphics/pokemon/drednaw/gigantamax/back.png new file mode 100644 index 0000000000..f5e79c0a38 Binary files /dev/null and b/graphics/pokemon/drednaw/gigantamax/back.png differ diff --git a/graphics/pokemon/drednaw/gigantamax/front.png b/graphics/pokemon/drednaw/gigantamax/front.png new file mode 100644 index 0000000000..a86a9474cb Binary files /dev/null and b/graphics/pokemon/drednaw/gigantamax/front.png differ diff --git a/graphics/pokemon/drednaw/gigantamax/icon.png b/graphics/pokemon/drednaw/gigantamax/icon.png new file mode 100644 index 0000000000..2e8fdf7658 Binary files /dev/null and b/graphics/pokemon/drednaw/gigantamax/icon.png differ diff --git a/graphics/pokemon/drednaw/gigantamax/normal.pal b/graphics/pokemon/drednaw/gigantamax/normal.pal new file mode 100644 index 0000000000..8e0dc8ff0e --- /dev/null +++ b/graphics/pokemon/drednaw/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +62 115 115 +100 38 32 +168 83 26 +252 252 252 +101 208 188 +77 164 155 +152 67 52 +246 190 19 +183 236 230 +214 132 20 +186 90 58 +250 230 184 +230 196 125 +202 152 96 diff --git a/graphics/pokemon/drednaw/gigantamax/shiny.pal b/graphics/pokemon/drednaw/gigantamax/shiny.pal new file mode 100644 index 0000000000..2fa3812077 --- /dev/null +++ b/graphics/pokemon/drednaw/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +31 60 40 +43 34 34 +162 51 32 +252 252 252 +70 113 84 +49 87 61 +77 63 60 +236 132 29 +122 160 135 +206 85 28 +99 83 77 +255 178 119 +242 200 113 +185 132 73 diff --git a/graphics/pokemon/dudunsparce/back.png b/graphics/pokemon/dudunsparce/back.png new file mode 100755 index 0000000000..29889b389c Binary files /dev/null and b/graphics/pokemon/dudunsparce/back.png differ diff --git a/graphics/pokemon/dudunsparce/front.png b/graphics/pokemon/dudunsparce/front.png new file mode 100755 index 0000000000..074897d10e Binary files /dev/null and b/graphics/pokemon/dudunsparce/front.png differ diff --git a/graphics/pokemon/dudunsparce/icon.png b/graphics/pokemon/dudunsparce/icon.png new file mode 100755 index 0000000000..e2a375ebf8 Binary files /dev/null and b/graphics/pokemon/dudunsparce/icon.png differ diff --git a/graphics/pokemon/dudunsparce/normal.pal b/graphics/pokemon/dudunsparce/normal.pal new file mode 100755 index 0000000000..5279094f2f --- /dev/null +++ b/graphics/pokemon/dudunsparce/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 96 112 +248 248 248 +16 16 16 +144 128 56 +24 88 88 +232 224 112 +112 88 56 +56 184 192 +248 240 192 +184 176 176 +40 136 136 +176 160 72 +136 64 72 +184 104 96 +56 64 128 diff --git a/graphics/pokemon/dudunsparce/shiny.pal b/graphics/pokemon/dudunsparce/shiny.pal new file mode 100755 index 0000000000..949042c626 --- /dev/null +++ b/graphics/pokemon/dudunsparce/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +88 96 112 +248 248 248 +16 16 16 +144 128 56 +120 56 96 +232 224 112 +112 88 56 +232 128 176 +248 240 192 +184 176 176 +176 88 120 +176 160 72 +136 64 72 +184 104 96 +128 16 40 diff --git a/graphics/pokemon/dudunsparce/three_segment/back.png b/graphics/pokemon/dudunsparce/three_segment/back.png new file mode 100644 index 0000000000..1094f3e1c3 Binary files /dev/null and b/graphics/pokemon/dudunsparce/three_segment/back.png differ diff --git a/graphics/pokemon/dudunsparce/three_segment/front.png b/graphics/pokemon/dudunsparce/three_segment/front.png new file mode 100644 index 0000000000..7aab77f28e Binary files /dev/null and b/graphics/pokemon/dudunsparce/three_segment/front.png differ diff --git a/graphics/pokemon/dunsparce/icon.png b/graphics/pokemon/dunsparce/icon.png old mode 100644 new mode 100755 diff --git a/graphics/pokemon/duraludon/gigantamax/back.png b/graphics/pokemon/duraludon/gigantamax/back.png new file mode 100644 index 0000000000..ed052cc0bb Binary files /dev/null and b/graphics/pokemon/duraludon/gigantamax/back.png differ diff --git a/graphics/pokemon/duraludon/gigantamax/front.png b/graphics/pokemon/duraludon/gigantamax/front.png new file mode 100644 index 0000000000..7fd2b21986 Binary files /dev/null and b/graphics/pokemon/duraludon/gigantamax/front.png differ diff --git a/graphics/pokemon/duraludon/gigantamax/icon.png b/graphics/pokemon/duraludon/gigantamax/icon.png new file mode 100644 index 0000000000..74118eb778 Binary files /dev/null and b/graphics/pokemon/duraludon/gigantamax/icon.png differ diff --git a/graphics/pokemon/duraludon/gigantamax/normal.pal b/graphics/pokemon/duraludon/gigantamax/normal.pal new file mode 100644 index 0000000000..eb23403c98 --- /dev/null +++ b/graphics/pokemon/duraludon/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +40 39 45 +168 147 168 +131 112 128 +112 112 134 +57 58 65 +228 229 241 +78 79 95 +56 173 186 +196 186 197 +254 254 254 +46 105 118 +56 139 156 +79 203 217 +255 222 89 diff --git a/graphics/pokemon/duraludon/gigantamax/shiny.pal b/graphics/pokemon/duraludon/gigantamax/shiny.pal new file mode 100644 index 0000000000..856918e1aa --- /dev/null +++ b/graphics/pokemon/duraludon/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +37 42 57 +143 165 151 +109 128 119 +94 116 158 +54 65 77 +232 237 220 +66 85 116 +219 89 40 +181 193 184 +254 254 254 +139 55 24 +183 73 31 +226 122 84 +255 164 48 diff --git a/graphics/pokemon/eevee/gigantamax/back.png b/graphics/pokemon/eevee/gigantamax/back.png new file mode 100644 index 0000000000..1e104f833b Binary files /dev/null and b/graphics/pokemon/eevee/gigantamax/back.png differ diff --git a/graphics/pokemon/eevee/gigantamax/front.png b/graphics/pokemon/eevee/gigantamax/front.png new file mode 100644 index 0000000000..315b69a2f3 Binary files /dev/null and b/graphics/pokemon/eevee/gigantamax/front.png differ diff --git a/graphics/pokemon/eevee/gigantamax/icon.png b/graphics/pokemon/eevee/gigantamax/icon.png new file mode 100644 index 0000000000..7b4698a0c2 Binary files /dev/null and b/graphics/pokemon/eevee/gigantamax/icon.png differ diff --git a/graphics/pokemon/eevee/gigantamax/normal.pal b/graphics/pokemon/eevee/gigantamax/normal.pal new file mode 100644 index 0000000000..5a1b6a1c9f --- /dev/null +++ b/graphics/pokemon/eevee/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +82 49 32 +16 16 16 +115 74 74 +189 156 123 +164 98 74 +230 197 148 +255 230 172 +213 156 74 +253 253 253 +230 189 123 +11 11 11 +12 12 12 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/eevee/gigantamax/shiny.pal b/graphics/pokemon/eevee/gigantamax/shiny.pal new file mode 100644 index 0000000000..b554023321 --- /dev/null +++ b/graphics/pokemon/eevee/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +90 82 74 +16 16 16 +131 115 115 +189 197 255 +172 164 156 +213 222 255 +222 230 255 +213 213 197 +253 253 253 +246 246 238 +11 11 11 +12 12 12 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/espathra/back.png b/graphics/pokemon/espathra/back.png new file mode 100644 index 0000000000..bc66b9fa98 Binary files /dev/null and b/graphics/pokemon/espathra/back.png differ diff --git a/graphics/pokemon/espathra/front.png b/graphics/pokemon/espathra/front.png new file mode 100644 index 0000000000..7d3d405e2d Binary files /dev/null and b/graphics/pokemon/espathra/front.png differ diff --git a/graphics/pokemon/espathra/icon.png b/graphics/pokemon/espathra/icon.png new file mode 100755 index 0000000000..b82af0c6e2 Binary files /dev/null and b/graphics/pokemon/espathra/icon.png differ diff --git a/graphics/pokemon/espathra/normal.pal b/graphics/pokemon/espathra/normal.pal new file mode 100644 index 0000000000..6101d88550 --- /dev/null +++ b/graphics/pokemon/espathra/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 211 165 +100 89 115 +249 249 249 +211 196 208 +15 15 15 +0 236 184 +170 144 162 +255 189 99 +197 138 82 +109 84 27 +188 166 20 +255 252 96 diff --git a/graphics/pokemon/espathra/shiny.pal b/graphics/pokemon/espathra/shiny.pal new file mode 100644 index 0000000000..2fb2eb4182 --- /dev/null +++ b/graphics/pokemon/espathra/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 211 165 +100 89 115 +249 249 249 +211 196 208 +15 15 15 +0 236 184 +170 144 162 +123 103 98 +106 86 81 +80 64 58 +123 103 98 +170 144 162 diff --git a/graphics/pokemon/farigiraf/back.png b/graphics/pokemon/farigiraf/back.png new file mode 100644 index 0000000000..8e7a8a75e0 Binary files /dev/null and b/graphics/pokemon/farigiraf/back.png differ diff --git a/graphics/pokemon/farigiraf/front.png b/graphics/pokemon/farigiraf/front.png new file mode 100644 index 0000000000..60c060ba7b Binary files /dev/null and b/graphics/pokemon/farigiraf/front.png differ diff --git a/graphics/pokemon/farigiraf/icon.png b/graphics/pokemon/farigiraf/icon.png new file mode 100755 index 0000000000..0ef8b01ae8 Binary files /dev/null and b/graphics/pokemon/farigiraf/icon.png differ diff --git a/graphics/pokemon/farigiraf/normal.pal b/graphics/pokemon/farigiraf/normal.pal new file mode 100644 index 0000000000..8d2b044683 --- /dev/null +++ b/graphics/pokemon/farigiraf/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 167 +36 34 36 +52 58 60 +68 54 28 +108 110 116 +108 86 52 +180 166 92 +8 8 8 +252 246 44 +252 254 252 +172 170 180 +236 118 116 +252 238 140 +204 86 68 +244 142 76 +244 170 116 diff --git a/graphics/pokemon/farigiraf/shiny.pal b/graphics/pokemon/farigiraf/shiny.pal new file mode 100644 index 0000000000..47499eff16 --- /dev/null +++ b/graphics/pokemon/farigiraf/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 167 +36 34 36 +52 58 60 +68 54 28 +108 110 116 +108 86 52 +138 196 167 +8 8 8 +252 246 44 +252 254 252 +172 170 180 +85 160 224 +186 243 240 +204 86 68 +236 101 77 +236 101 77 diff --git a/graphics/pokemon/fezandipiti/back.png b/graphics/pokemon/fezandipiti/back.png new file mode 100644 index 0000000000..4583405047 Binary files /dev/null and b/graphics/pokemon/fezandipiti/back.png differ diff --git a/graphics/pokemon/fezandipiti/front.png b/graphics/pokemon/fezandipiti/front.png new file mode 100644 index 0000000000..fc841ec395 Binary files /dev/null and b/graphics/pokemon/fezandipiti/front.png differ diff --git a/graphics/pokemon/fezandipiti/icon.png b/graphics/pokemon/fezandipiti/icon.png new file mode 100644 index 0000000000..1bd6d0bf31 Binary files /dev/null and b/graphics/pokemon/fezandipiti/icon.png differ diff --git a/graphics/pokemon/fezandipiti/normal.pal b/graphics/pokemon/fezandipiti/normal.pal new file mode 100644 index 0000000000..ac9c005324 --- /dev/null +++ b/graphics/pokemon/fezandipiti/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +167 135 48 +118 61 41 +238 204 45 +26 29 28 +78 73 71 +45 45 45 +146 57 119 +202 103 162 +90 33 73 +192 78 22 +254 254 254 +164 175 176 +16 16 16 +69 37 29 diff --git a/graphics/pokemon/fezandipiti/shiny.pal b/graphics/pokemon/fezandipiti/shiny.pal new file mode 100644 index 0000000000..673473f5c0 --- /dev/null +++ b/graphics/pokemon/fezandipiti/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +167 135 48 +118 61 41 +238 204 45 +26 29 28 +59 63 133 +36 40 99 +146 57 119 +202 103 162 +90 33 73 +192 78 22 +254 254 254 +164 175 176 +16 16 16 +69 37 29 diff --git a/graphics/pokemon/fidough/back.png b/graphics/pokemon/fidough/back.png new file mode 100644 index 0000000000..a3eb31b308 Binary files /dev/null and b/graphics/pokemon/fidough/back.png differ diff --git a/graphics/pokemon/fidough/front.png b/graphics/pokemon/fidough/front.png new file mode 100644 index 0000000000..3809eaf726 Binary files /dev/null and b/graphics/pokemon/fidough/front.png differ diff --git a/graphics/pokemon/fidough/icon.png b/graphics/pokemon/fidough/icon.png new file mode 100755 index 0000000000..2a6c4b15f5 Binary files /dev/null and b/graphics/pokemon/fidough/icon.png differ diff --git a/graphics/pokemon/fidough/normal.pal b/graphics/pokemon/fidough/normal.pal new file mode 100644 index 0000000000..9fc647ec61 --- /dev/null +++ b/graphics/pokemon/fidough/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +144 112 88 +128 88 56 +240 240 208 +192 152 72 +240 216 88 +88 56 40 +96 72 56 +200 184 128 +16 16 16 +248 248 248 +80 88 96 +160 88 96 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/fidough/shiny.pal b/graphics/pokemon/fidough/shiny.pal new file mode 100644 index 0000000000..08c90f1346 --- /dev/null +++ b/graphics/pokemon/fidough/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +104 64 56 +128 88 56 +184 144 120 +192 152 72 +240 216 88 +88 56 40 +64 40 40 +136 104 80 +16 16 16 +248 248 248 +80 88 96 +160 88 96 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/finizen/back.png b/graphics/pokemon/finizen/back.png new file mode 100755 index 0000000000..77432e6367 Binary files /dev/null and b/graphics/pokemon/finizen/back.png differ diff --git a/graphics/pokemon/finizen/front.png b/graphics/pokemon/finizen/front.png new file mode 100755 index 0000000000..ea547fbe51 Binary files /dev/null and b/graphics/pokemon/finizen/front.png differ diff --git a/graphics/pokemon/finizen/icon.png b/graphics/pokemon/finizen/icon.png new file mode 100755 index 0000000000..b82b4c673f Binary files /dev/null and b/graphics/pokemon/finizen/icon.png differ diff --git a/graphics/pokemon/finizen/normal.pal b/graphics/pokemon/finizen/normal.pal new file mode 100755 index 0000000000..cf7dae9337 --- /dev/null +++ b/graphics/pokemon/finizen/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 96 112 +80 200 216 +136 216 224 +64 156 176 +176 192 200 +208 236 240 +24 160 248 +16 16 16 +248 252 248 +248 164 184 +176 128 160 +240 164 216 +24 104 136 +128 212 240 +64 160 200 diff --git a/graphics/pokemon/finizen/shiny.pal b/graphics/pokemon/finizen/shiny.pal new file mode 100755 index 0000000000..ebdbf83aa9 --- /dev/null +++ b/graphics/pokemon/finizen/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +61 77 167 +118 138 252 +136 216 224 +79 100 235 +170 181 211 +208 236 240 +24 160 248 +16 16 16 +248 252 248 +74 229 145 +176 128 160 +240 164 216 +24 104 136 +128 212 240 +64 160 200 diff --git a/graphics/pokemon/flabebe/anim_front.png b/graphics/pokemon/flabebe/anim_front.png index 6677d4137a..e872a6dc8e 100644 Binary files a/graphics/pokemon/flabebe/anim_front.png and b/graphics/pokemon/flabebe/anim_front.png differ diff --git a/graphics/pokemon/flabebe/back.png b/graphics/pokemon/flabebe/back.png index 088f00af5a..345740b30a 100644 Binary files a/graphics/pokemon/flabebe/back.png and b/graphics/pokemon/flabebe/back.png differ diff --git a/graphics/pokemon/flamigo/back.png b/graphics/pokemon/flamigo/back.png new file mode 100755 index 0000000000..0fa825aae0 Binary files /dev/null and b/graphics/pokemon/flamigo/back.png differ diff --git a/graphics/pokemon/flamigo/front.png b/graphics/pokemon/flamigo/front.png new file mode 100755 index 0000000000..d8033f368f Binary files /dev/null and b/graphics/pokemon/flamigo/front.png differ diff --git a/graphics/pokemon/flamigo/icon.png b/graphics/pokemon/flamigo/icon.png new file mode 100755 index 0000000000..0f0381579c Binary files /dev/null and b/graphics/pokemon/flamigo/icon.png differ diff --git a/graphics/pokemon/flamigo/normal.pal b/graphics/pokemon/flamigo/normal.pal new file mode 100755 index 0000000000..170246a305 --- /dev/null +++ b/graphics/pokemon/flamigo/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 52 64 +216 48 120 +240 232 232 +240 192 208 +240 120 152 +16 16 16 +40 40 40 +232 220 88 +176 168 168 +72 64 64 +168 28 88 +104 104 104 +200 160 16 +184 84 112 +0 0 0 diff --git a/graphics/pokemon/flamigo/shiny.pal b/graphics/pokemon/flamigo/shiny.pal new file mode 100755 index 0000000000..e51a06e039 --- /dev/null +++ b/graphics/pokemon/flamigo/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +124 76 81 +237 106 132 +240 232 232 +240 192 208 +240 188 188 +16 16 16 +40 40 40 +232 220 88 +176 168 168 +72 64 64 +168 28 88 +104 104 104 +200 160 16 +165 119 124 +0 0 0 diff --git a/graphics/pokemon/flapple/gigantamax/back.png b/graphics/pokemon/flapple/gigantamax/back.png new file mode 100644 index 0000000000..610d98112b Binary files /dev/null and b/graphics/pokemon/flapple/gigantamax/back.png differ diff --git a/graphics/pokemon/flapple/gigantamax/front.png b/graphics/pokemon/flapple/gigantamax/front.png new file mode 100644 index 0000000000..65c716e9e8 Binary files /dev/null and b/graphics/pokemon/flapple/gigantamax/front.png differ diff --git a/graphics/pokemon/flapple/gigantamax/icon.png b/graphics/pokemon/flapple/gigantamax/icon.png new file mode 100644 index 0000000000..b7ecabd469 Binary files /dev/null and b/graphics/pokemon/flapple/gigantamax/icon.png differ diff --git a/graphics/pokemon/flapple/gigantamax/normal.pal b/graphics/pokemon/flapple/gigantamax/normal.pal new file mode 100644 index 0000000000..2d5dabef1e --- /dev/null +++ b/graphics/pokemon/flapple/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +166 49 57 +119 38 40 +198 138 72 +141 66 41 +233 197 88 +66 118 56 +210 57 77 +179 172 98 +249 249 249 +44 72 40 +218 208 139 +57 164 61 +213 68 86 +15 15 15 diff --git a/graphics/pokemon/flapple/gigantamax/shiny.pal b/graphics/pokemon/flapple/gigantamax/shiny.pal new file mode 100644 index 0000000000..4514eb418d --- /dev/null +++ b/graphics/pokemon/flapple/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +55 143 41 +35 91 27 +198 138 72 +141 66 41 +233 197 88 +66 118 56 +75 183 48 +179 172 98 +249 249 249 +44 72 40 +218 208 139 +57 164 61 +213 68 86 +15 15 15 diff --git a/graphics/pokemon/fletchling/anim_front.png b/graphics/pokemon/fletchling/anim_front.png index 87f110df95..5163b130da 100644 Binary files a/graphics/pokemon/fletchling/anim_front.png and b/graphics/pokemon/fletchling/anim_front.png differ diff --git a/graphics/pokemon/fletchling/back.png b/graphics/pokemon/fletchling/back.png index 880ec9548c..3307fbfe97 100644 Binary files a/graphics/pokemon/fletchling/back.png and b/graphics/pokemon/fletchling/back.png differ diff --git a/graphics/pokemon/fletchling/normal.pal b/graphics/pokemon/fletchling/normal.pal index 01d1e3fe2f..b18b705ef0 100644 --- a/graphics/pokemon/fletchling/normal.pal +++ b/graphics/pokemon/fletchling/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 120 184 168 -128 24 0 -248 112 80 -8 8 8 -208 72 40 -32 32 32 -64 56 48 -128 112 104 -248 248 248 -248 200 64 -208 208 208 -56 96 120 -160 208 248 -120 160 200 -32 32 32 0 0 0 +35 35 34 +68 67 65 +138 52 18 +174 69 27 +91 96 109 +228 90 35 +140 147 169 +197 197 197 +192 201 230 +255 212 39 +255 255 255 +250 250 250 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/fletchling/shiny.pal b/graphics/pokemon/fletchling/shiny.pal index 3761dfe625..f17e0db230 100644 --- a/graphics/pokemon/fletchling/shiny.pal +++ b/graphics/pokemon/fletchling/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -120 184 168 -104 72 0 -248 184 56 +152 208 160 8 8 8 -200 144 16 -40 32 32 -72 48 72 -120 104 120 -248 248 248 -232 248 72 -208 208 208 -104 80 64 -232 192 144 -176 144 104 -32 32 32 -0 0 0 +87 51 51 +154 90 90 +118 45 14 +219 115 66 +124 103 74 +255 152 86 +191 158 121 +240 212 0 +255 218 166 +255 255 134 +255 255 255 +247 227 77 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/flittle/back.png b/graphics/pokemon/flittle/back.png new file mode 100644 index 0000000000..87d517ebeb Binary files /dev/null and b/graphics/pokemon/flittle/back.png differ diff --git a/graphics/pokemon/flittle/front.png b/graphics/pokemon/flittle/front.png new file mode 100644 index 0000000000..c0d7054a06 Binary files /dev/null and b/graphics/pokemon/flittle/front.png differ diff --git a/graphics/pokemon/flittle/icon.png b/graphics/pokemon/flittle/icon.png new file mode 100755 index 0000000000..f588d537ef Binary files /dev/null and b/graphics/pokemon/flittle/icon.png differ diff --git a/graphics/pokemon/flittle/normal.pal b/graphics/pokemon/flittle/normal.pal new file mode 100644 index 0000000000..1918bb79c6 --- /dev/null +++ b/graphics/pokemon/flittle/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +120 120 120 +255 255 255 +183 185 186 +15 15 15 +141 121 50 +255 247 147 +210 187 104 +126 110 198 +159 120 0 +169 200 243 +192 85 122 +242 138 165 +138 54 90 +217 112 6 diff --git a/graphics/pokemon/flittle/shiny.pal b/graphics/pokemon/flittle/shiny.pal new file mode 100644 index 0000000000..1636e312ad --- /dev/null +++ b/graphics/pokemon/flittle/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +120 120 120 +255 255 255 +183 185 186 +15 15 15 +141 121 50 +255 247 147 +210 187 104 +126 110 198 +159 120 0 +169 200 243 +48 169 112 +73 224 149 +36 115 71 +126 92 72 diff --git a/graphics/pokemon/floette/anim_front.png b/graphics/pokemon/floette/anim_front.png index 43eae1911a..59b7fb9b73 100644 Binary files a/graphics/pokemon/floette/anim_front.png and b/graphics/pokemon/floette/anim_front.png differ diff --git a/graphics/pokemon/floette/eternal_flower/anim_front.png b/graphics/pokemon/floette/eternal_flower/anim_front.png new file mode 100644 index 0000000000..b77c538dea Binary files /dev/null and b/graphics/pokemon/floette/eternal_flower/anim_front.png differ diff --git a/graphics/pokemon/floette/eternal_flower/front.png b/graphics/pokemon/floette/eternal_flower/front.png deleted file mode 100644 index 61b4419b7e..0000000000 Binary files a/graphics/pokemon/floette/eternal_flower/front.png and /dev/null differ diff --git a/graphics/pokemon/floragato/back.png b/graphics/pokemon/floragato/back.png new file mode 100755 index 0000000000..e6788d364d Binary files /dev/null and b/graphics/pokemon/floragato/back.png differ diff --git a/graphics/pokemon/floragato/front.png b/graphics/pokemon/floragato/front.png new file mode 100755 index 0000000000..44145f25fd Binary files /dev/null and b/graphics/pokemon/floragato/front.png differ diff --git a/graphics/pokemon/floragato/icon.png b/graphics/pokemon/floragato/icon.png new file mode 100644 index 0000000000..aaf9a3b10d Binary files /dev/null and b/graphics/pokemon/floragato/icon.png differ diff --git a/graphics/pokemon/floragato/normal.pal b/graphics/pokemon/floragato/normal.pal new file mode 100755 index 0000000000..020d32c3ed --- /dev/null +++ b/graphics/pokemon/floragato/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +154 212 167 +55 91 50 +66 129 57 +8 8 8 +212 232 187 +172 185 144 +63 69 53 +125 142 107 +111 177 51 +253 253 253 +223 91 126 +240 169 184 +147 52 77 diff --git a/graphics/pokemon/floragato/shiny.pal b/graphics/pokemon/floragato/shiny.pal new file mode 100755 index 0000000000..e8aad4366f --- /dev/null +++ b/graphics/pokemon/floragato/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +154 212 167 +50 80 65 +58 118 90 +8 8 8 +188 232 187 +149 185 144 +51 60 52 +107 142 108 +51 167 103 +253 253 253 +174 132 218 +222 203 240 +118 79 158 diff --git a/graphics/pokemon/flutter_mane/back.png b/graphics/pokemon/flutter_mane/back.png new file mode 100644 index 0000000000..8052cafc19 Binary files /dev/null and b/graphics/pokemon/flutter_mane/back.png differ diff --git a/graphics/pokemon/flutter_mane/front.png b/graphics/pokemon/flutter_mane/front.png new file mode 100644 index 0000000000..ce45a4b923 Binary files /dev/null and b/graphics/pokemon/flutter_mane/front.png differ diff --git a/graphics/pokemon/flutter_mane/icon.png b/graphics/pokemon/flutter_mane/icon.png new file mode 100755 index 0000000000..2b65fc048f Binary files /dev/null and b/graphics/pokemon/flutter_mane/icon.png differ diff --git a/graphics/pokemon/flutter_mane/normal.pal b/graphics/pokemon/flutter_mane/normal.pal new file mode 100644 index 0000000000..a2b19738a6 --- /dev/null +++ b/graphics/pokemon/flutter_mane/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +148 30 104 +16 16 16 +196 102 161 +230 162 205 +56 73 80 +109 149 164 +90 116 117 +136 56 24 +92 172 142 +255 162 162 +255 68 68 +136 214 185 +148 184 177 +180 26 65 +248 216 96 diff --git a/graphics/pokemon/flutter_mane/shiny.pal b/graphics/pokemon/flutter_mane/shiny.pal new file mode 100644 index 0000000000..2db4e621e2 --- /dev/null +++ b/graphics/pokemon/flutter_mane/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +180 79 0 +16 16 16 +216 152 64 +248 184 64 +56 73 80 +181 203 123 +105 141 69 +136 56 24 +200 200 200 +255 162 162 +255 68 68 +248 248 248 +222 232 154 +180 26 65 +248 216 96 diff --git a/graphics/pokemon/frigibax/anim_front.png b/graphics/pokemon/frigibax/anim_front.png new file mode 100644 index 0000000000..cfdaf7de70 Binary files /dev/null and b/graphics/pokemon/frigibax/anim_front.png differ diff --git a/graphics/pokemon/frigibax/back.png b/graphics/pokemon/frigibax/back.png new file mode 100644 index 0000000000..15026f4bf8 Binary files /dev/null and b/graphics/pokemon/frigibax/back.png differ diff --git a/graphics/pokemon/frigibax/icon.png b/graphics/pokemon/frigibax/icon.png new file mode 100755 index 0000000000..b50575cd47 Binary files /dev/null and b/graphics/pokemon/frigibax/icon.png differ diff --git a/graphics/pokemon/frigibax/normal.pal b/graphics/pokemon/frigibax/normal.pal new file mode 100644 index 0000000000..7b65763603 --- /dev/null +++ b/graphics/pokemon/frigibax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +102 104 113 +65 73 73 +170 177 183 +143 153 163 +175 155 10 +249 216 0 +222 223 222 +15 15 15 +156 151 156 +142 187 183 +194 231 233 +114 94 22 +255 181 9 +209 147 16 +118 152 148 diff --git a/graphics/pokemon/frigibax/shiny.pal b/graphics/pokemon/frigibax/shiny.pal new file mode 100644 index 0000000000..9c9d46e860 --- /dev/null +++ b/graphics/pokemon/frigibax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +114 133 134 +63 103 103 +191 220 223 +150 185 190 +175 155 10 +249 216 0 +222 223 222 +15 15 15 +156 151 156 +100 145 142 +146 180 177 +114 94 22 +255 181 9 +209 147 16 +118 152 148 diff --git a/graphics/pokemon/fuecoco/back.png b/graphics/pokemon/fuecoco/back.png new file mode 100644 index 0000000000..a7fb5e5628 Binary files /dev/null and b/graphics/pokemon/fuecoco/back.png differ diff --git a/graphics/pokemon/fuecoco/front.png b/graphics/pokemon/fuecoco/front.png new file mode 100644 index 0000000000..d78818b22b Binary files /dev/null and b/graphics/pokemon/fuecoco/front.png differ diff --git a/graphics/pokemon/fuecoco/icon.png b/graphics/pokemon/fuecoco/icon.png new file mode 100755 index 0000000000..923e5f03fd Binary files /dev/null and b/graphics/pokemon/fuecoco/icon.png differ diff --git a/graphics/pokemon/fuecoco/normal.pal b/graphics/pokemon/fuecoco/normal.pal new file mode 100644 index 0000000000..85f78e488a --- /dev/null +++ b/graphics/pokemon/fuecoco/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 88 40 +248 208 56 +216 160 40 +104 40 32 +112 88 64 +232 136 120 +248 248 216 +232 72 56 +168 160 144 +48 56 64 +168 64 32 +16 16 16 +152 104 16 +248 248 248 +80 88 96 diff --git a/graphics/pokemon/fuecoco/shiny.pal b/graphics/pokemon/fuecoco/shiny.pal new file mode 100644 index 0000000000..9e353d26be --- /dev/null +++ b/graphics/pokemon/fuecoco/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +248 88 40 +248 208 56 +216 160 40 +104 16 64 +112 88 64 +232 176 176 +248 248 216 +216 104 136 +168 160 144 +88 32 48 +168 64 88 +16 16 16 +152 104 16 +248 248 248 +128 64 72 diff --git a/graphics/pokemon/garbodor/gigantamax/back.png b/graphics/pokemon/garbodor/gigantamax/back.png new file mode 100644 index 0000000000..645dae3c01 Binary files /dev/null and b/graphics/pokemon/garbodor/gigantamax/back.png differ diff --git a/graphics/pokemon/garbodor/gigantamax/front.png b/graphics/pokemon/garbodor/gigantamax/front.png new file mode 100644 index 0000000000..9856f28763 Binary files /dev/null and b/graphics/pokemon/garbodor/gigantamax/front.png differ diff --git a/graphics/pokemon/garbodor/gigantamax/icon.png b/graphics/pokemon/garbodor/gigantamax/icon.png new file mode 100644 index 0000000000..f929b577ce Binary files /dev/null and b/graphics/pokemon/garbodor/gigantamax/icon.png differ diff --git a/graphics/pokemon/garbodor/gigantamax/normal.pal b/graphics/pokemon/garbodor/gigantamax/normal.pal new file mode 100644 index 0000000000..5d365044cf --- /dev/null +++ b/graphics/pokemon/garbodor/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +123 106 90 +189 189 189 +90 74 65 +164 139 115 +24 57 41 +0 172 213 +107 220 39 +41 106 74 +253 253 253 +254 188 164 +235 73 78 +230 218 0 +184 41 45 +239 143 255 diff --git a/graphics/pokemon/garbodor/gigantamax/shiny.pal b/graphics/pokemon/garbodor/gigantamax/shiny.pal new file mode 100644 index 0000000000..a70820775d --- /dev/null +++ b/graphics/pokemon/garbodor/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +106 106 98 +189 189 189 +82 74 74 +148 139 131 +16 65 74 +82 238 106 +255 189 90 +41 164 164 +253 253 253 +255 134 134 +255 133 35 +178 86 230 +184 41 45 +75 86 255 diff --git a/graphics/pokemon/garganacl/back.png b/graphics/pokemon/garganacl/back.png new file mode 100644 index 0000000000..d8590c6ce0 Binary files /dev/null and b/graphics/pokemon/garganacl/back.png differ diff --git a/graphics/pokemon/garganacl/front.png b/graphics/pokemon/garganacl/front.png new file mode 100644 index 0000000000..416f535b35 Binary files /dev/null and b/graphics/pokemon/garganacl/front.png differ diff --git a/graphics/pokemon/garganacl/icon.png b/graphics/pokemon/garganacl/icon.png new file mode 100755 index 0000000000..bc2d038478 Binary files /dev/null and b/graphics/pokemon/garganacl/icon.png differ diff --git a/graphics/pokemon/garganacl/normal.pal b/graphics/pokemon/garganacl/normal.pal new file mode 100644 index 0000000000..2acd11e3b9 --- /dev/null +++ b/graphics/pokemon/garganacl/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +179 179 179 +217 217 217 +242 242 242 +138 138 138 +77 50 38 +148 104 90 +0 0 0 +102 61 44 +195 146 123 +245 147 45 +251 242 54 +46 43 40 +93 86 80 +220 191 179 +145 131 122 diff --git a/graphics/pokemon/garganacl/shiny.pal b/graphics/pokemon/garganacl/shiny.pal new file mode 100644 index 0000000000..0b0979dd27 --- /dev/null +++ b/graphics/pokemon/garganacl/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +161 104 55 +214 153 99 +237 173 116 +128 81 41 +77 50 38 +148 104 90 +0 0 0 +102 61 44 +195 146 123 +245 147 45 +251 242 54 +46 43 40 +93 86 80 +220 191 179 +145 131 122 diff --git a/graphics/pokemon/gengar/gigantamax/back.png b/graphics/pokemon/gengar/gigantamax/back.png new file mode 100644 index 0000000000..67f5bc6070 Binary files /dev/null and b/graphics/pokemon/gengar/gigantamax/back.png differ diff --git a/graphics/pokemon/gengar/gigantamax/front.png b/graphics/pokemon/gengar/gigantamax/front.png new file mode 100644 index 0000000000..bbcd1756a4 Binary files /dev/null and b/graphics/pokemon/gengar/gigantamax/front.png differ diff --git a/graphics/pokemon/gengar/gigantamax/icon.png b/graphics/pokemon/gengar/gigantamax/icon.png new file mode 100644 index 0000000000..31b59d5370 Binary files /dev/null and b/graphics/pokemon/gengar/gigantamax/icon.png differ diff --git a/graphics/pokemon/gengar/gigantamax/normal.pal b/graphics/pokemon/gengar/gigantamax/normal.pal new file mode 100644 index 0000000000..963348184c --- /dev/null +++ b/graphics/pokemon/gengar/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +74 41 74 +16 16 16 +90 74 156 +148 115 180 +123 98 164 +150 62 128 +116 58 91 +204 30 91 +146 6 52 +180 139 189 +186 50 90 +255 246 255 +255 131 55 +255 255 0 +189 172 189 diff --git a/graphics/pokemon/gengar/gigantamax/shiny.pal b/graphics/pokemon/gengar/gigantamax/shiny.pal new file mode 100644 index 0000000000..b69ff97992 --- /dev/null +++ b/graphics/pokemon/gengar/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +99 75 99 +16 16 16 +168 157 196 +252 244 252 +209 188 214 +221 144 195 +183 142 184 +204 30 91 +146 6 52 +254 254 254 +84 84 84 +255 246 255 +95 95 95 +140 140 140 +189 172 189 diff --git a/graphics/pokemon/gholdengo/back.png b/graphics/pokemon/gholdengo/back.png new file mode 100644 index 0000000000..7968235e2e Binary files /dev/null and b/graphics/pokemon/gholdengo/back.png differ diff --git a/graphics/pokemon/gholdengo/front.png b/graphics/pokemon/gholdengo/front.png new file mode 100644 index 0000000000..410d23e6d0 Binary files /dev/null and b/graphics/pokemon/gholdengo/front.png differ diff --git a/graphics/pokemon/gholdengo/icon.png b/graphics/pokemon/gholdengo/icon.png new file mode 100755 index 0000000000..99d0e122f2 Binary files /dev/null and b/graphics/pokemon/gholdengo/icon.png differ diff --git a/graphics/pokemon/gholdengo/normal.pal b/graphics/pokemon/gholdengo/normal.pal new file mode 100644 index 0000000000..cb9c6fdf7c --- /dev/null +++ b/graphics/pokemon/gholdengo/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 210 164 +112 92 40 +252 210 82 +255 255 255 +207 129 60 +197 154 66 +0 0 0 +134 120 80 +37 37 45 +189 166 99 +66 73 74 +181 194 222 diff --git a/graphics/pokemon/gholdengo/shiny.pal b/graphics/pokemon/gholdengo/shiny.pal new file mode 100644 index 0000000000..4823e4a57d --- /dev/null +++ b/graphics/pokemon/gholdengo/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 210 164 +112 92 40 +252 210 82 +255 255 255 +127 147 167 +197 154 66 +0 0 0 +134 120 80 +37 37 45 +189 166 99 +66 73 74 +181 194 222 diff --git a/graphics/pokemon/gimmighoul/back.png b/graphics/pokemon/gimmighoul/back.png new file mode 100644 index 0000000000..c6a6342407 Binary files /dev/null and b/graphics/pokemon/gimmighoul/back.png differ diff --git a/graphics/pokemon/gimmighoul/front.png b/graphics/pokemon/gimmighoul/front.png new file mode 100644 index 0000000000..19b1f7b252 Binary files /dev/null and b/graphics/pokemon/gimmighoul/front.png differ diff --git a/graphics/pokemon/gimmighoul/icon.png b/graphics/pokemon/gimmighoul/icon.png new file mode 100644 index 0000000000..9191406326 Binary files /dev/null and b/graphics/pokemon/gimmighoul/icon.png differ diff --git a/graphics/pokemon/gimmighoul/normal.pal b/graphics/pokemon/gimmighoul/normal.pal new file mode 100644 index 0000000000..f3317456b1 --- /dev/null +++ b/graphics/pokemon/gimmighoul/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +50 52 55 +138 98 57 +90 71 41 +84 91 107 +255 218 89 +221 193 38 +120 58 82 +15 15 15 +172 68 84 +173 147 56 +133 139 162 +194 198 202 +165 146 39 +133 139 163 +194 198 203 diff --git a/graphics/pokemon/gimmighoul/roaming/back.png b/graphics/pokemon/gimmighoul/roaming/back.png new file mode 100644 index 0000000000..ad90dc8a10 Binary files /dev/null and b/graphics/pokemon/gimmighoul/roaming/back.png differ diff --git a/graphics/pokemon/gimmighoul/roaming/front.png b/graphics/pokemon/gimmighoul/roaming/front.png new file mode 100644 index 0000000000..c8f6f3a935 Binary files /dev/null and b/graphics/pokemon/gimmighoul/roaming/front.png differ diff --git a/graphics/pokemon/gimmighoul/roaming/icon.png b/graphics/pokemon/gimmighoul/roaming/icon.png new file mode 100644 index 0000000000..e803b52554 Binary files /dev/null and b/graphics/pokemon/gimmighoul/roaming/icon.png differ diff --git a/graphics/pokemon/gimmighoul/roaming/normal.pal b/graphics/pokemon/gimmighoul/roaming/normal.pal new file mode 100644 index 0000000000..8c71fadd94 --- /dev/null +++ b/graphics/pokemon/gimmighoul/roaming/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +114 214 163 +0 214 160 +0 212 159 +0 0 0 +31 44 56 +132 153 195 +65 108 140 +199 229 248 +161 200 224 +255 197 0 +221 124 0 +255 160 0 +128 57 0 diff --git a/graphics/pokemon/gimmighoul/roaming/shiny.pal b/graphics/pokemon/gimmighoul/roaming/shiny.pal new file mode 100644 index 0000000000..7ece225d51 --- /dev/null +++ b/graphics/pokemon/gimmighoul/roaming/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +114 214 163 +0 214 160 +0 212 159 +0 0 0 +31 44 56 +170 163 126 +135 131 102 +199 229 248 +228 209 183 +255 197 0 +221 124 0 +255 160 0 +128 57 0 diff --git a/graphics/pokemon/gimmighoul/shiny.pal b/graphics/pokemon/gimmighoul/shiny.pal new file mode 100644 index 0000000000..ac31efc409 --- /dev/null +++ b/graphics/pokemon/gimmighoul/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +50 52 55 +138 98 57 +90 71 41 +84 91 107 +255 218 89 +221 193 38 +120 58 82 +15 15 15 +172 68 84 +173 147 56 +160 159 129 +210 205 183 +165 146 39 +133 139 163 +194 198 203 diff --git a/graphics/pokemon/glimmet/back.png b/graphics/pokemon/glimmet/back.png new file mode 100755 index 0000000000..ae7f5f2903 Binary files /dev/null and b/graphics/pokemon/glimmet/back.png differ diff --git a/graphics/pokemon/glimmet/front.png b/graphics/pokemon/glimmet/front.png new file mode 100755 index 0000000000..c403aefa04 Binary files /dev/null and b/graphics/pokemon/glimmet/front.png differ diff --git a/graphics/pokemon/glimmet/icon.png b/graphics/pokemon/glimmet/icon.png new file mode 100755 index 0000000000..1bc74def32 Binary files /dev/null and b/graphics/pokemon/glimmet/icon.png differ diff --git a/graphics/pokemon/glimmet/normal.pal b/graphics/pokemon/glimmet/normal.pal new file mode 100755 index 0000000000..283d3f6c9f --- /dev/null +++ b/graphics/pokemon/glimmet/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +56 76 176 +40 48 112 +96 204 248 +56 132 240 +40 68 88 +96 132 152 +152 204 216 +248 248 48 +16 16 16 +128 92 160 +64 44 96 +184 140 208 +216 184 232 +67 78 94 +0 0 0 diff --git a/graphics/pokemon/glimmet/shiny.pal b/graphics/pokemon/glimmet/shiny.pal new file mode 100755 index 0000000000..8d56d1fce0 --- /dev/null +++ b/graphics/pokemon/glimmet/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +63 171 181 +40 89 112 +96 204 248 +136 247 236 +44 49 56 +96 132 152 +152 204 216 +248 248 48 +16 16 16 +81 96 158 +64 44 96 +129 159 225 +216 184 232 +67 78 94 +0 0 0 diff --git a/graphics/pokemon/glimmora/back.png b/graphics/pokemon/glimmora/back.png new file mode 100755 index 0000000000..f11e202262 Binary files /dev/null and b/graphics/pokemon/glimmora/back.png differ diff --git a/graphics/pokemon/glimmora/front.png b/graphics/pokemon/glimmora/front.png new file mode 100755 index 0000000000..6862760a8d Binary files /dev/null and b/graphics/pokemon/glimmora/front.png differ diff --git a/graphics/pokemon/glimmora/icon.png b/graphics/pokemon/glimmora/icon.png new file mode 100755 index 0000000000..12e50f0cbc Binary files /dev/null and b/graphics/pokemon/glimmora/icon.png differ diff --git a/graphics/pokemon/glimmora/normal.pal b/graphics/pokemon/glimmora/normal.pal new file mode 100755 index 0000000000..1df274c1e7 --- /dev/null +++ b/graphics/pokemon/glimmora/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +32 84 120 +16 16 16 +88 232 248 +40 136 168 +16 24 96 +40 96 208 +24 52 136 +80 156 240 +56 48 104 +192 140 224 +112 84 160 +32 40 80 +48 68 120 +120 152 184 +248 248 48 diff --git a/graphics/pokemon/glimmora/shiny.pal b/graphics/pokemon/glimmora/shiny.pal new file mode 100755 index 0000000000..93b368079f --- /dev/null +++ b/graphics/pokemon/glimmora/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +53 103 115 +16 16 16 +217 255 247 +99 191 188 +16 24 96 +87 222 219 +65 143 199 +80 156 240 +56 48 104 +133 144 249 +87 88 181 +32 40 80 +48 68 120 +120 152 184 +248 248 48 diff --git a/graphics/pokemon/grafaiai/back.png b/graphics/pokemon/grafaiai/back.png new file mode 100755 index 0000000000..78e9170cd9 Binary files /dev/null and b/graphics/pokemon/grafaiai/back.png differ diff --git a/graphics/pokemon/grafaiai/front.png b/graphics/pokemon/grafaiai/front.png new file mode 100755 index 0000000000..b301080be5 Binary files /dev/null and b/graphics/pokemon/grafaiai/front.png differ diff --git a/graphics/pokemon/grafaiai/icon.png b/graphics/pokemon/grafaiai/icon.png new file mode 100755 index 0000000000..9e027481aa Binary files /dev/null and b/graphics/pokemon/grafaiai/icon.png differ diff --git a/graphics/pokemon/grafaiai/normal.pal b/graphics/pokemon/grafaiai/normal.pal new file mode 100755 index 0000000000..ea6b7bf6f4 --- /dev/null +++ b/graphics/pokemon/grafaiai/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 104 88 +16 16 16 +232 232 232 +176 168 136 +40 32 48 +64 56 72 +88 64 152 +152 208 176 +216 232 192 +40 64 80 +96 120 128 +136 16 72 +208 56 112 +56 184 216 +32 128 176 diff --git a/graphics/pokemon/grafaiai/shiny.pal b/graphics/pokemon/grafaiai/shiny.pal new file mode 100755 index 0000000000..5b115ea4af --- /dev/null +++ b/graphics/pokemon/grafaiai/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 112 112 +16 16 16 +232 232 232 +176 176 176 +80 80 56 +120 120 96 +176 72 96 +168 168 224 +208 200 248 +56 72 80 +112 120 128 +192 128 0 +248 216 72 +144 96 216 +88 48 144 diff --git a/graphics/pokemon/great_tusk/anim_front.png b/graphics/pokemon/great_tusk/anim_front.png new file mode 100644 index 0000000000..c4362af29c Binary files /dev/null and b/graphics/pokemon/great_tusk/anim_front.png differ diff --git a/graphics/pokemon/great_tusk/back.png b/graphics/pokemon/great_tusk/back.png new file mode 100644 index 0000000000..0b7c0f6620 Binary files /dev/null and b/graphics/pokemon/great_tusk/back.png differ diff --git a/graphics/pokemon/great_tusk/icon.png b/graphics/pokemon/great_tusk/icon.png new file mode 100755 index 0000000000..30384d570d Binary files /dev/null and b/graphics/pokemon/great_tusk/icon.png differ diff --git a/graphics/pokemon/great_tusk/normal.pal b/graphics/pokemon/great_tusk/normal.pal new file mode 100644 index 0000000000..b5c23a1288 --- /dev/null +++ b/graphics/pokemon/great_tusk/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 160 232 +112 24 48 +144 8 56 +232 48 120 +104 24 40 +16 16 16 +40 32 64 +96 88 160 +56 48 88 +120 80 64 +184 168 160 +240 240 216 +128 136 160 +168 192 216 +248 240 88 +8 8 8 diff --git a/graphics/pokemon/great_tusk/shiny.pal b/graphics/pokemon/great_tusk/shiny.pal new file mode 100644 index 0000000000..c7449781d5 --- /dev/null +++ b/graphics/pokemon/great_tusk/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 160 232 +160 104 16 +216 168 88 +248 240 152 +104 24 40 +16 16 16 +56 24 24 +128 80 64 +96 64 48 +120 80 64 +184 168 160 +240 240 216 +72 176 144 +176 240 200 +248 240 88 +8 8 8 diff --git a/graphics/pokemon/greavard/back.png b/graphics/pokemon/greavard/back.png new file mode 100755 index 0000000000..3fef905434 Binary files /dev/null and b/graphics/pokemon/greavard/back.png differ diff --git a/graphics/pokemon/greavard/front.png b/graphics/pokemon/greavard/front.png new file mode 100755 index 0000000000..1fde607510 Binary files /dev/null and b/graphics/pokemon/greavard/front.png differ diff --git a/graphics/pokemon/greavard/icon.png b/graphics/pokemon/greavard/icon.png new file mode 100755 index 0000000000..a43e9a3875 Binary files /dev/null and b/graphics/pokemon/greavard/icon.png differ diff --git a/graphics/pokemon/greavard/normal.pal b/graphics/pokemon/greavard/normal.pal new file mode 100755 index 0000000000..566bd27604 --- /dev/null +++ b/graphics/pokemon/greavard/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 60 184 +176 104 232 +208 144 160 +248 212 40 +16 16 16 +96 112 120 +64 80 80 +248 252 248 +184 188 192 +144 132 152 +128 144 160 +176 196 208 +152 164 176 +88 44 48 +184 88 80 diff --git a/graphics/pokemon/greavard/shiny.pal b/graphics/pokemon/greavard/shiny.pal new file mode 100755 index 0000000000..12044feff3 --- /dev/null +++ b/graphics/pokemon/greavard/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 60 184 +176 104 232 +208 144 160 +248 212 40 +16 16 16 +145 129 66 +100 90 50 +209 213 211 +164 155 139 +144 132 152 +189 169 92 +233 206 102 +152 164 176 +88 44 48 +184 88 80 diff --git a/graphics/pokemon/grimmsnarl/gigantamax/back.png b/graphics/pokemon/grimmsnarl/gigantamax/back.png new file mode 100644 index 0000000000..834e97f853 Binary files /dev/null and b/graphics/pokemon/grimmsnarl/gigantamax/back.png differ diff --git a/graphics/pokemon/grimmsnarl/gigantamax/front.png b/graphics/pokemon/grimmsnarl/gigantamax/front.png new file mode 100644 index 0000000000..a497605717 Binary files /dev/null and b/graphics/pokemon/grimmsnarl/gigantamax/front.png differ diff --git a/graphics/pokemon/grimmsnarl/gigantamax/icon.png b/graphics/pokemon/grimmsnarl/gigantamax/icon.png new file mode 100644 index 0000000000..23bc5fd0dc Binary files /dev/null and b/graphics/pokemon/grimmsnarl/gigantamax/icon.png differ diff --git a/graphics/pokemon/grimmsnarl/gigantamax/normal.pal b/graphics/pokemon/grimmsnarl/gigantamax/normal.pal new file mode 100644 index 0000000000..806034cb62 --- /dev/null +++ b/graphics/pokemon/grimmsnarl/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +38 19 63 +67 53 104 +93 70 148 +53 41 84 +53 106 60 +71 190 98 +253 11 66 +64 149 85 +248 116 160 +201 201 201 +253 253 253 +233 55 97 +247 92 144 +15 15 15 diff --git a/graphics/pokemon/grimmsnarl/gigantamax/shiny.pal b/graphics/pokemon/grimmsnarl/gigantamax/shiny.pal new file mode 100644 index 0000000000..5d5b1b75a4 --- /dev/null +++ b/graphics/pokemon/grimmsnarl/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +94 89 96 +163 157 165 +221 215 223 +138 133 140 +107 46 103 +199 52 175 +253 11 66 +152 53 133 +248 116 160 +201 201 201 +253 253 253 +66 86 172 +85 134 201 +15 15 15 diff --git a/graphics/pokemon/hakamo_o/anim_front.png b/graphics/pokemon/hakamo_o/anim_front.png index 2b5112a2d5..599bbe3eeb 100644 Binary files a/graphics/pokemon/hakamo_o/anim_front.png and b/graphics/pokemon/hakamo_o/anim_front.png differ diff --git a/graphics/pokemon/hakamo_o/back.png b/graphics/pokemon/hakamo_o/back.png index f994a70e9d..402eabab0d 100644 Binary files a/graphics/pokemon/hakamo_o/back.png and b/graphics/pokemon/hakamo_o/back.png differ diff --git a/graphics/pokemon/hatterene/gigantamax/back.png b/graphics/pokemon/hatterene/gigantamax/back.png new file mode 100644 index 0000000000..68da7572c3 Binary files /dev/null and b/graphics/pokemon/hatterene/gigantamax/back.png differ diff --git a/graphics/pokemon/hatterene/gigantamax/front.png b/graphics/pokemon/hatterene/gigantamax/front.png new file mode 100644 index 0000000000..6c9e2c546d Binary files /dev/null and b/graphics/pokemon/hatterene/gigantamax/front.png differ diff --git a/graphics/pokemon/hatterene/gigantamax/icon.png b/graphics/pokemon/hatterene/gigantamax/icon.png new file mode 100644 index 0000000000..cc0ca7f2dc Binary files /dev/null and b/graphics/pokemon/hatterene/gigantamax/icon.png differ diff --git a/graphics/pokemon/hatterene/gigantamax/normal.pal b/graphics/pokemon/hatterene/gigantamax/normal.pal new file mode 100644 index 0000000000..26aac7facb --- /dev/null +++ b/graphics/pokemon/hatterene/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +114 122 177 +200 233 255 +172 191 223 +148 143 194 +245 186 194 +228 137 160 +229 228 239 +193 89 116 +254 254 254 +180 162 183 +133 109 139 +217 206 219 +249 213 218 +15 15 15 diff --git a/graphics/pokemon/hatterene/gigantamax/shiny.pal b/graphics/pokemon/hatterene/gigantamax/shiny.pal new file mode 100644 index 0000000000..9682f1ec43 --- /dev/null +++ b/graphics/pokemon/hatterene/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +101 75 95 +234 213 208 +192 166 187 +144 116 138 +252 153 172 +217 94 115 +225 193 207 +144 53 68 +254 254 254 +177 134 149 +137 90 110 +217 206 219 +245 186 194 +15 15 15 diff --git a/graphics/pokemon/houndstone/back.png b/graphics/pokemon/houndstone/back.png new file mode 100644 index 0000000000..c2ed542d6a Binary files /dev/null and b/graphics/pokemon/houndstone/back.png differ diff --git a/graphics/pokemon/houndstone/front.png b/graphics/pokemon/houndstone/front.png new file mode 100644 index 0000000000..5b4271eb9e Binary files /dev/null and b/graphics/pokemon/houndstone/front.png differ diff --git a/graphics/pokemon/houndstone/icon.png b/graphics/pokemon/houndstone/icon.png new file mode 100755 index 0000000000..51d26434c8 Binary files /dev/null and b/graphics/pokemon/houndstone/icon.png differ diff --git a/graphics/pokemon/houndstone/normal.pal b/graphics/pokemon/houndstone/normal.pal new file mode 100644 index 0000000000..a41e9b3fba --- /dev/null +++ b/graphics/pokemon/houndstone/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +65 72 74 +98 85 106 +139 149 164 +131 113 139 +123 121 123 +90 93 90 +156 157 156 +189 190 197 +0 0 0 +172 174 189 +246 246 246 +8 12 8 +197 198 205 +255 250 255 +197 198 197 diff --git a/graphics/pokemon/houndstone/shiny.pal b/graphics/pokemon/houndstone/shiny.pal new file mode 100644 index 0000000000..f925949f21 --- /dev/null +++ b/graphics/pokemon/houndstone/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +65 72 74 +111 84 55 +169 118 61 +173 107 75 +123 121 123 +90 93 90 +156 157 156 +207 162 120 +0 0 0 +207 162 120 +246 246 246 +8 12 8 +222 201 114 +242 233 168 +197 198 197 diff --git a/graphics/pokemon/inteleon/gigantamax/back.png b/graphics/pokemon/inteleon/gigantamax/back.png new file mode 100644 index 0000000000..81be3b2c25 Binary files /dev/null and b/graphics/pokemon/inteleon/gigantamax/back.png differ diff --git a/graphics/pokemon/inteleon/gigantamax/front.png b/graphics/pokemon/inteleon/gigantamax/front.png new file mode 100644 index 0000000000..6f55e4e29e Binary files /dev/null and b/graphics/pokemon/inteleon/gigantamax/front.png differ diff --git a/graphics/pokemon/inteleon/gigantamax/icon.png b/graphics/pokemon/inteleon/gigantamax/icon.png new file mode 100644 index 0000000000..a27bf3f1c8 Binary files /dev/null and b/graphics/pokemon/inteleon/gigantamax/icon.png differ diff --git a/graphics/pokemon/inteleon/gigantamax/normal.pal b/graphics/pokemon/inteleon/gigantamax/normal.pal new file mode 100644 index 0000000000..122b980735 --- /dev/null +++ b/graphics/pokemon/inteleon/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +0 62 106 +156 210 226 +16 16 16 +84 155 195 +176 250 255 +253 253 253 +92 218 218 +1 89 154 +28 123 193 +49 48 47 +233 205 95 +100 101 101 +74 74 77 +242 248 137 +238 62 92 diff --git a/graphics/pokemon/inteleon/gigantamax/shiny.pal b/graphics/pokemon/inteleon/gigantamax/shiny.pal new file mode 100644 index 0000000000..f112483770 --- /dev/null +++ b/graphics/pokemon/inteleon/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +0 68 114 +16 122 192 +16 16 16 +0 96 164 +176 250 255 +253 253 253 +92 218 218 +14 166 168 +6 204 207 +152 157 172 +233 95 146 +247 251 252 +196 204 212 +248 137 182 +238 62 92 diff --git a/graphics/pokemon/iron_bundle/back.png b/graphics/pokemon/iron_bundle/back.png new file mode 100644 index 0000000000..78451dda9b Binary files /dev/null and b/graphics/pokemon/iron_bundle/back.png differ diff --git a/graphics/pokemon/iron_bundle/front.png b/graphics/pokemon/iron_bundle/front.png new file mode 100644 index 0000000000..a98137941b Binary files /dev/null and b/graphics/pokemon/iron_bundle/front.png differ diff --git a/graphics/pokemon/iron_bundle/icon.png b/graphics/pokemon/iron_bundle/icon.png new file mode 100755 index 0000000000..99b380a543 Binary files /dev/null and b/graphics/pokemon/iron_bundle/icon.png differ diff --git a/graphics/pokemon/iron_bundle/normal.pal b/graphics/pokemon/iron_bundle/normal.pal new file mode 100644 index 0000000000..ea35b3b984 --- /dev/null +++ b/graphics/pokemon/iron_bundle/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +189 246 255 +90 194 255 +255 206 65 +205 141 41 +123 68 0 +0 0 0 +41 36 41 +217 69 55 +255 250 250 +142 43 43 +65 68 74 +79 30 31 +174 174 182 +90 93 90 +65 141 180 diff --git a/graphics/pokemon/iron_bundle/shiny.pal b/graphics/pokemon/iron_bundle/shiny.pal new file mode 100644 index 0000000000..b27dde2a6c --- /dev/null +++ b/graphics/pokemon/iron_bundle/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +189 246 255 +90 194 255 +255 206 65 +205 141 41 +123 68 0 +0 0 0 +41 36 41 +172 170 180 +197 198 189 +98 101 115 +65 68 74 +82 80 82 +156 141 148 +90 93 90 +65 141 180 diff --git a/graphics/pokemon/iron_hands/back.png b/graphics/pokemon/iron_hands/back.png new file mode 100644 index 0000000000..b7702eb316 Binary files /dev/null and b/graphics/pokemon/iron_hands/back.png differ diff --git a/graphics/pokemon/iron_hands/front.png b/graphics/pokemon/iron_hands/front.png new file mode 100644 index 0000000000..1971bb88da Binary files /dev/null and b/graphics/pokemon/iron_hands/front.png differ diff --git a/graphics/pokemon/iron_hands/icon.png b/graphics/pokemon/iron_hands/icon.png new file mode 100755 index 0000000000..d28b62a6d0 Binary files /dev/null and b/graphics/pokemon/iron_hands/icon.png differ diff --git a/graphics/pokemon/iron_hands/normal.pal b/graphics/pokemon/iron_hands/normal.pal new file mode 100644 index 0000000000..265b3a66f6 --- /dev/null +++ b/graphics/pokemon/iron_hands/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +82 81 80 +49 55 88 +16 16 16 +203 201 197 +123 134 165 +66 78 115 +154 142 145 +147 118 17 +252 210 22 +118 105 108 +60 51 49 +206 158 16 +255 255 255 +41 38 41 +0 0 0 diff --git a/graphics/pokemon/iron_hands/shiny.pal b/graphics/pokemon/iron_hands/shiny.pal new file mode 100644 index 0000000000..ebe29a2267 --- /dev/null +++ b/graphics/pokemon/iron_hands/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +82 81 80 +100 103 113 +16 16 16 +168 170 176 +213 213 213 +168 170 176 +100 103 113 +147 118 17 +252 210 22 +118 105 108 +60 51 49 +206 158 16 +255 255 255 +60 51 49 +0 0 0 diff --git a/graphics/pokemon/iron_jugulis/back.png b/graphics/pokemon/iron_jugulis/back.png new file mode 100644 index 0000000000..cb6e05f26e Binary files /dev/null and b/graphics/pokemon/iron_jugulis/back.png differ diff --git a/graphics/pokemon/iron_jugulis/front.png b/graphics/pokemon/iron_jugulis/front.png new file mode 100644 index 0000000000..c2c4095654 Binary files /dev/null and b/graphics/pokemon/iron_jugulis/front.png differ diff --git a/graphics/pokemon/iron_jugulis/icon.png b/graphics/pokemon/iron_jugulis/icon.png new file mode 100755 index 0000000000..14ae400dfd Binary files /dev/null and b/graphics/pokemon/iron_jugulis/icon.png differ diff --git a/graphics/pokemon/iron_jugulis/normal.pal b/graphics/pokemon/iron_jugulis/normal.pal new file mode 100644 index 0000000000..e0a017d346 --- /dev/null +++ b/graphics/pokemon/iron_jugulis/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 255 139 +255 76 205 +238 234 238 +148 40 123 +123 121 123 +32 68 156 +16 44 82 +255 255 255 +115 157 238 +65 52 65 +131 170 246 +8 12 8 +57 117 230 +41 40 41 +106 129 213 +74 64 74 diff --git a/graphics/pokemon/iron_jugulis/shiny.pal b/graphics/pokemon/iron_jugulis/shiny.pal new file mode 100644 index 0000000000..e0a017d346 --- /dev/null +++ b/graphics/pokemon/iron_jugulis/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 255 139 +255 76 205 +238 234 238 +148 40 123 +123 121 123 +32 68 156 +16 44 82 +255 255 255 +115 157 238 +65 52 65 +131 170 246 +8 12 8 +57 117 230 +41 40 41 +106 129 213 +74 64 74 diff --git a/graphics/pokemon/iron_leaves/back.png b/graphics/pokemon/iron_leaves/back.png new file mode 100644 index 0000000000..a169e8f223 Binary files /dev/null and b/graphics/pokemon/iron_leaves/back.png differ diff --git a/graphics/pokemon/iron_leaves/front.png b/graphics/pokemon/iron_leaves/front.png new file mode 100644 index 0000000000..d636ded791 Binary files /dev/null and b/graphics/pokemon/iron_leaves/front.png differ diff --git a/graphics/pokemon/iron_leaves/icon.png b/graphics/pokemon/iron_leaves/icon.png new file mode 100644 index 0000000000..a5d308e6cb Binary files /dev/null and b/graphics/pokemon/iron_leaves/icon.png differ diff --git a/graphics/pokemon/iron_leaves/normal.pal b/graphics/pokemon/iron_leaves/normal.pal new file mode 100644 index 0000000000..946223c719 --- /dev/null +++ b/graphics/pokemon/iron_leaves/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +68 112 63 +33 66 28 +148 215 148 +85 174 88 +86 141 80 +179 28 91 +255 69 115 +255 230 240 +16 16 16 +165 146 156 +206 202 197 +106 115 123 +77 77 87 +38 38 45 diff --git a/graphics/pokemon/iron_leaves/shiny.pal b/graphics/pokemon/iron_leaves/shiny.pal new file mode 100644 index 0000000000..5702b5b448 --- /dev/null +++ b/graphics/pokemon/iron_leaves/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +128 128 120 +72 72 72 +216 216 216 +208 200 208 +176 168 168 +179 28 91 +255 69 115 +255 230 240 +16 16 16 +165 146 156 +206 202 197 +106 115 123 +77 77 87 +38 38 45 diff --git a/graphics/pokemon/iron_moth/back.png b/graphics/pokemon/iron_moth/back.png new file mode 100644 index 0000000000..b5b4050c36 Binary files /dev/null and b/graphics/pokemon/iron_moth/back.png differ diff --git a/graphics/pokemon/iron_moth/front.png b/graphics/pokemon/iron_moth/front.png new file mode 100644 index 0000000000..fc40325097 Binary files /dev/null and b/graphics/pokemon/iron_moth/front.png differ diff --git a/graphics/pokemon/iron_moth/icon.png b/graphics/pokemon/iron_moth/icon.png new file mode 100755 index 0000000000..ac43ad66ea Binary files /dev/null and b/graphics/pokemon/iron_moth/icon.png differ diff --git a/graphics/pokemon/iron_moth/normal.pal b/graphics/pokemon/iron_moth/normal.pal new file mode 100644 index 0000000000..cacbbf8276 --- /dev/null +++ b/graphics/pokemon/iron_moth/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +197 121 41 +74 68 65 +213 44 65 +255 157 41 +131 133 131 +32 32 24 +197 230 238 +148 174 172 +139 28 41 +139 72 32 +255 255 255 +92 93 90 +0 0 0 +189 190 189 +90 16 24 diff --git a/graphics/pokemon/iron_moth/shiny.pal b/graphics/pokemon/iron_moth/shiny.pal new file mode 100644 index 0000000000..57377eda4e --- /dev/null +++ b/graphics/pokemon/iron_moth/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +197 121 41 +74 68 65 +168 170 176 +255 157 41 +131 133 131 +32 32 24 +168 170 176 +100 103 113 +100 103 113 +139 72 32 +255 255 255 +92 93 90 +0 0 0 +189 190 189 +51 51 51 diff --git a/graphics/pokemon/iron_thorns/back.png b/graphics/pokemon/iron_thorns/back.png new file mode 100644 index 0000000000..3c33307446 Binary files /dev/null and b/graphics/pokemon/iron_thorns/back.png differ diff --git a/graphics/pokemon/iron_thorns/front.png b/graphics/pokemon/iron_thorns/front.png new file mode 100644 index 0000000000..98aade73de Binary files /dev/null and b/graphics/pokemon/iron_thorns/front.png differ diff --git a/graphics/pokemon/iron_thorns/icon.png b/graphics/pokemon/iron_thorns/icon.png new file mode 100755 index 0000000000..48391a50c7 Binary files /dev/null and b/graphics/pokemon/iron_thorns/icon.png differ diff --git a/graphics/pokemon/iron_thorns/normal.pal b/graphics/pokemon/iron_thorns/normal.pal new file mode 100644 index 0000000000..b149804f85 --- /dev/null +++ b/graphics/pokemon/iron_thorns/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +112 168 48 +152 208 72 +0 0 0 +208 248 128 +56 96 32 +64 56 56 +0 136 95 +72 224 138 +211 255 255 +48 40 40 +88 80 80 +55 189 122 +192 192 192 diff --git a/graphics/pokemon/iron_thorns/shiny.pal b/graphics/pokemon/iron_thorns/shiny.pal new file mode 100644 index 0000000000..6d5a3826d3 --- /dev/null +++ b/graphics/pokemon/iron_thorns/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +144 144 144 +200 200 200 +0 0 0 +248 248 248 +80 80 80 +64 56 56 +0 136 95 +72 224 178 +211 255 255 +48 40 40 +88 80 80 +55 189 148 +192 192 192 diff --git a/graphics/pokemon/iron_treads/back.png b/graphics/pokemon/iron_treads/back.png new file mode 100644 index 0000000000..93c44eff7d Binary files /dev/null and b/graphics/pokemon/iron_treads/back.png differ diff --git a/graphics/pokemon/iron_treads/front.png b/graphics/pokemon/iron_treads/front.png new file mode 100644 index 0000000000..0c3b7025eb Binary files /dev/null and b/graphics/pokemon/iron_treads/front.png differ diff --git a/graphics/pokemon/iron_treads/icon.png b/graphics/pokemon/iron_treads/icon.png new file mode 100755 index 0000000000..a75d7f93c9 Binary files /dev/null and b/graphics/pokemon/iron_treads/icon.png differ diff --git a/graphics/pokemon/iron_treads/normal.pal b/graphics/pokemon/iron_treads/normal.pal new file mode 100644 index 0000000000..f65e903d76 --- /dev/null +++ b/graphics/pokemon/iron_treads/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +106 62 71 +88 31 42 +255 56 57 +255 180 183 +33 4 15 +133 105 122 +171 133 147 +255 0 0 +241 12 17 +0 0 0 +148 119 127 +142 169 173 +28 38 44 +205 205 207 +0 0 0 diff --git a/graphics/pokemon/iron_treads/shiny.pal b/graphics/pokemon/iron_treads/shiny.pal new file mode 100644 index 0000000000..3c2388187f --- /dev/null +++ b/graphics/pokemon/iron_treads/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +142 152 163 +68 82 94 +255 56 57 +255 180 183 +33 4 15 +217 217 217 +239 239 239 +255 0 0 +241 12 17 +0 0 0 +148 119 127 +142 169 173 +28 38 44 +205 205 207 +0 0 0 diff --git a/graphics/pokemon/iron_valiant/back.png b/graphics/pokemon/iron_valiant/back.png new file mode 100644 index 0000000000..9251f2c7e4 Binary files /dev/null and b/graphics/pokemon/iron_valiant/back.png differ diff --git a/graphics/pokemon/iron_valiant/front.png b/graphics/pokemon/iron_valiant/front.png new file mode 100644 index 0000000000..fe60695d18 Binary files /dev/null and b/graphics/pokemon/iron_valiant/front.png differ diff --git a/graphics/pokemon/iron_valiant/icon.png b/graphics/pokemon/iron_valiant/icon.png new file mode 100755 index 0000000000..c1441e5dd5 Binary files /dev/null and b/graphics/pokemon/iron_valiant/icon.png differ diff --git a/graphics/pokemon/iron_valiant/normal.pal b/graphics/pokemon/iron_valiant/normal.pal new file mode 100644 index 0000000000..f454ada84e --- /dev/null +++ b/graphics/pokemon/iron_valiant/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 163 +45 56 74 +75 131 131 +109 176 180 +15 15 15 +38 77 36 +90 180 106 +65 131 90 +252 252 252 +175 171 206 +89 95 106 +174 32 96 +128 136 155 +255 81 151 +238 176 220 +112 146 190 diff --git a/graphics/pokemon/iron_valiant/shiny.pal b/graphics/pokemon/iron_valiant/shiny.pal new file mode 100644 index 0000000000..5d2e2d28db --- /dev/null +++ b/graphics/pokemon/iron_valiant/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 163 +45 57 75 +101 103 113 +129 137 155 +15 15 15 +51 53 57 +129 137 155 +101 103 113 +252 252 252 +213 213 213 +101 103 113 +174 32 96 +129 137 155 +255 81 151 +238 176 220 +129 137 155 diff --git a/graphics/pokemon/jangmo_o/anim_front.png b/graphics/pokemon/jangmo_o/anim_front.png index d462c0adb8..9f3abb0696 100644 Binary files a/graphics/pokemon/jangmo_o/anim_front.png and b/graphics/pokemon/jangmo_o/anim_front.png differ diff --git a/graphics/pokemon/jangmo_o/back.png b/graphics/pokemon/jangmo_o/back.png index 6416369e96..209011dfa7 100644 Binary files a/graphics/pokemon/jangmo_o/back.png and b/graphics/pokemon/jangmo_o/back.png differ diff --git a/graphics/pokemon/kilowattrel/back.png b/graphics/pokemon/kilowattrel/back.png new file mode 100755 index 0000000000..26eb440b6a Binary files /dev/null and b/graphics/pokemon/kilowattrel/back.png differ diff --git a/graphics/pokemon/kilowattrel/front.png b/graphics/pokemon/kilowattrel/front.png new file mode 100755 index 0000000000..3a8e971644 Binary files /dev/null and b/graphics/pokemon/kilowattrel/front.png differ diff --git a/graphics/pokemon/kilowattrel/icon.png b/graphics/pokemon/kilowattrel/icon.png new file mode 100755 index 0000000000..d4e5f7211b Binary files /dev/null and b/graphics/pokemon/kilowattrel/icon.png differ diff --git a/graphics/pokemon/kilowattrel/normal.pal b/graphics/pokemon/kilowattrel/normal.pal new file mode 100755 index 0000000000..c67bb43b2a --- /dev/null +++ b/graphics/pokemon/kilowattrel/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 24 24 +48 56 56 +32 40 40 +248 204 48 +192 144 40 +248 252 248 +56 28 32 +16 16 16 +96 248 208 +128 128 128 +120 60 64 +96 36 40 +120 92 32 +72 88 96 +48 56 72 diff --git a/graphics/pokemon/kilowattrel/shiny.pal b/graphics/pokemon/kilowattrel/shiny.pal new file mode 100755 index 0000000000..a9ad2ba3a8 --- /dev/null +++ b/graphics/pokemon/kilowattrel/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 24 24 +131 83 100 +96 60 73 +248 204 48 +192 144 40 +248 252 248 +212 95 60 +16 16 16 +96 248 208 +128 128 128 +244 161 59 +212 95 60 +120 92 32 +72 88 96 +48 56 72 diff --git a/graphics/pokemon/kingambit/back.png b/graphics/pokemon/kingambit/back.png new file mode 100644 index 0000000000..3309f316b1 Binary files /dev/null and b/graphics/pokemon/kingambit/back.png differ diff --git a/graphics/pokemon/kingambit/front.png b/graphics/pokemon/kingambit/front.png new file mode 100644 index 0000000000..22f0f51ff5 Binary files /dev/null and b/graphics/pokemon/kingambit/front.png differ diff --git a/graphics/pokemon/kingambit/icon.png b/graphics/pokemon/kingambit/icon.png new file mode 100755 index 0000000000..ce85b3c190 Binary files /dev/null and b/graphics/pokemon/kingambit/icon.png differ diff --git a/graphics/pokemon/kingambit/normal.pal b/graphics/pokemon/kingambit/normal.pal new file mode 100644 index 0000000000..f5c6ef871e --- /dev/null +++ b/graphics/pokemon/kingambit/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +152 128 136 +16 16 16 +248 240 248 +200 152 72 +136 104 32 +72 32 40 +248 216 104 +32 32 40 +176 80 80 +248 48 40 +120 40 48 +64 64 72 +136 16 24 +112 56 56 +152 72 72 diff --git a/graphics/pokemon/kingambit/shiny.pal b/graphics/pokemon/kingambit/shiny.pal new file mode 100644 index 0000000000..a936488d36 --- /dev/null +++ b/graphics/pokemon/kingambit/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +160 160 128 +16 16 16 +248 248 224 +200 152 72 +136 104 32 +24 24 72 +248 216 104 +32 32 40 +72 88 200 +248 48 40 +48 48 120 +64 64 72 +136 16 24 +48 48 56 +80 80 96 diff --git a/graphics/pokemon/kingler/gigantamax/back.png b/graphics/pokemon/kingler/gigantamax/back.png new file mode 100644 index 0000000000..d1a624ac47 Binary files /dev/null and b/graphics/pokemon/kingler/gigantamax/back.png differ diff --git a/graphics/pokemon/kingler/gigantamax/front.png b/graphics/pokemon/kingler/gigantamax/front.png new file mode 100644 index 0000000000..075fc470c5 Binary files /dev/null and b/graphics/pokemon/kingler/gigantamax/front.png differ diff --git a/graphics/pokemon/kingler/gigantamax/icon.png b/graphics/pokemon/kingler/gigantamax/icon.png new file mode 100644 index 0000000000..0399c37ab4 Binary files /dev/null and b/graphics/pokemon/kingler/gigantamax/icon.png differ diff --git a/graphics/pokemon/kingler/gigantamax/normal.pal b/graphics/pokemon/kingler/gigantamax/normal.pal new file mode 100644 index 0000000000..e3bbad0227 --- /dev/null +++ b/graphics/pokemon/kingler/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +115 82 16 +16 16 16 +131 41 8 +255 246 222 +164 106 65 +180 90 74 +222 172 156 +246 197 139 +255 139 82 +253 253 253 +189 189 230 +125 129 147 +163 153 170 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/kingler/gigantamax/shiny.pal b/graphics/pokemon/kingler/gigantamax/shiny.pal new file mode 100644 index 0000000000..2dcc9678fa --- /dev/null +++ b/graphics/pokemon/kingler/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +106 98 8 +16 16 16 +74 90 0 +230 246 197 +148 139 57 +106 115 49 +205 213 115 +180 197 115 +139 156 74 +253 253 253 +189 189 230 +125 129 147 +163 153 170 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/klawf/back.png b/graphics/pokemon/klawf/back.png new file mode 100755 index 0000000000..6409b07db8 Binary files /dev/null and b/graphics/pokemon/klawf/back.png differ diff --git a/graphics/pokemon/klawf/front.png b/graphics/pokemon/klawf/front.png new file mode 100755 index 0000000000..2957bcceef Binary files /dev/null and b/graphics/pokemon/klawf/front.png differ diff --git a/graphics/pokemon/klawf/icon.png b/graphics/pokemon/klawf/icon.png new file mode 100755 index 0000000000..e7c232f130 Binary files /dev/null and b/graphics/pokemon/klawf/icon.png differ diff --git a/graphics/pokemon/klawf/normal.pal b/graphics/pokemon/klawf/normal.pal new file mode 100755 index 0000000000..53537b9aa5 --- /dev/null +++ b/graphics/pokemon/klawf/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 40 24 +128 48 48 +96 88 56 +248 248 248 +168 160 160 +64 64 48 +232 120 56 +16 16 16 +184 80 48 +136 96 96 +176 144 112 +232 208 160 +232 128 104 +232 160 128 +128 120 88 diff --git a/graphics/pokemon/klawf/shiny.pal b/graphics/pokemon/klawf/shiny.pal new file mode 100755 index 0000000000..2e8495906c --- /dev/null +++ b/graphics/pokemon/klawf/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 96 88 +40 88 128 +240 232 200 +248 248 248 +168 160 160 +160 160 144 +88 176 232 +16 16 16 +64 128 200 +136 112 88 +184 160 128 +248 224 176 +232 128 104 +232 160 128 +232 232 208 diff --git a/graphics/pokemon/kommo_o/anim_front.png b/graphics/pokemon/kommo_o/anim_front.png index 5f1a7382ba..090ef56f0b 100644 Binary files a/graphics/pokemon/kommo_o/anim_front.png and b/graphics/pokemon/kommo_o/anim_front.png differ diff --git a/graphics/pokemon/koraidon/back.png b/graphics/pokemon/koraidon/back.png new file mode 100644 index 0000000000..fd4fb143b8 Binary files /dev/null and b/graphics/pokemon/koraidon/back.png differ diff --git a/graphics/pokemon/koraidon/front.png b/graphics/pokemon/koraidon/front.png new file mode 100644 index 0000000000..64f07479f9 Binary files /dev/null and b/graphics/pokemon/koraidon/front.png differ diff --git a/graphics/pokemon/koraidon/icon.png b/graphics/pokemon/koraidon/icon.png new file mode 100755 index 0000000000..127a03e5d7 Binary files /dev/null and b/graphics/pokemon/koraidon/icon.png differ diff --git a/graphics/pokemon/koraidon/normal.pal b/graphics/pokemon/koraidon/normal.pal new file mode 100644 index 0000000000..151d848ab8 --- /dev/null +++ b/graphics/pokemon/koraidon/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +51 55 62 +103 96 105 +237 235 230 +255 118 155 +6 6 6 +255 73 153 +168 150 153 +159 65 193 +18 26 80 +36 49 136 +0 97 173 +119 32 32 +255 70 57 +185 57 56 +253 214 0 diff --git a/graphics/pokemon/koraidon/shiny.pal b/graphics/pokemon/koraidon/shiny.pal new file mode 100644 index 0000000000..2d198cf721 --- /dev/null +++ b/graphics/pokemon/koraidon/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +51 55 62 +103 96 105 +237 235 230 +168 150 153 +6 6 6 +255 191 0 +168 150 153 +159 65 193 +18 26 80 +172 24 67 +255 11 119 +33 34 50 +82 83 113 +67 68 90 +253 214 0 diff --git a/graphics/pokemon/lapras/gigantamax/back.png b/graphics/pokemon/lapras/gigantamax/back.png new file mode 100644 index 0000000000..ee056d3a54 Binary files /dev/null and b/graphics/pokemon/lapras/gigantamax/back.png differ diff --git a/graphics/pokemon/lapras/gigantamax/front.png b/graphics/pokemon/lapras/gigantamax/front.png new file mode 100644 index 0000000000..aff7e7d5f2 Binary files /dev/null and b/graphics/pokemon/lapras/gigantamax/front.png differ diff --git a/graphics/pokemon/lapras/gigantamax/icon.png b/graphics/pokemon/lapras/gigantamax/icon.png new file mode 100644 index 0000000000..367418a17c Binary files /dev/null and b/graphics/pokemon/lapras/gigantamax/icon.png differ diff --git a/graphics/pokemon/lapras/gigantamax/normal.pal b/graphics/pokemon/lapras/gigantamax/normal.pal new file mode 100644 index 0000000000..044e141f67 --- /dev/null +++ b/graphics/pokemon/lapras/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +115 197 246 +81 255 251 +128 117 115 +16 16 16 +57 123 164 +24 65 82 +65 164 230 +139 164 148 +222 197 131 +246 222 172 +82 82 106 +164 148 148 +213 205 197 +246 238 230 +90 74 65 diff --git a/graphics/pokemon/lapras/gigantamax/shiny.pal b/graphics/pokemon/lapras/gigantamax/shiny.pal new file mode 100644 index 0000000000..f0290fa5c1 --- /dev/null +++ b/graphics/pokemon/lapras/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +205 172 255 +81 255 251 +128 117 115 +16 16 16 +106 49 156 +41 0 98 +172 131 246 +139 90 197 +246 189 148 +255 213 189 +82 82 106 +164 148 148 +213 205 197 +246 238 230 +15 15 15 diff --git a/graphics/pokemon/lechonk/back.png b/graphics/pokemon/lechonk/back.png new file mode 100755 index 0000000000..ea157cabe8 Binary files /dev/null and b/graphics/pokemon/lechonk/back.png differ diff --git a/graphics/pokemon/lechonk/front.png b/graphics/pokemon/lechonk/front.png new file mode 100755 index 0000000000..1afbc89998 Binary files /dev/null and b/graphics/pokemon/lechonk/front.png differ diff --git a/graphics/pokemon/lechonk/icon.png b/graphics/pokemon/lechonk/icon.png new file mode 100755 index 0000000000..d368c427be Binary files /dev/null and b/graphics/pokemon/lechonk/icon.png differ diff --git a/graphics/pokemon/lechonk/normal.pal b/graphics/pokemon/lechonk/normal.pal new file mode 100755 index 0000000000..a8f419d699 --- /dev/null +++ b/graphics/pokemon/lechonk/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +26 28 27 +8 8 8 +57 55 56 +81 83 82 +76 54 31 +202 134 87 +126 82 45 +252 252 252 +250 206 46 +193 87 129 +249 124 147 +126 41 63 +188 188 188 diff --git a/graphics/pokemon/lechonk/shiny.pal b/graphics/pokemon/lechonk/shiny.pal new file mode 100755 index 0000000000..8530a12bb8 --- /dev/null +++ b/graphics/pokemon/lechonk/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +214 106 140 +8 8 8 +246 181 214 +255 214 246 +141 93 70 +215 159 135 +187 129 106 +252 252 252 +250 206 46 +225 127 124 +255 173 170 +170 86 100 +188 188 188 diff --git a/graphics/pokemon/lokix/back.png b/graphics/pokemon/lokix/back.png new file mode 100755 index 0000000000..25d62835c1 Binary files /dev/null and b/graphics/pokemon/lokix/back.png differ diff --git a/graphics/pokemon/lokix/front.png b/graphics/pokemon/lokix/front.png new file mode 100755 index 0000000000..f617e5a41b Binary files /dev/null and b/graphics/pokemon/lokix/front.png differ diff --git a/graphics/pokemon/lokix/icon.png b/graphics/pokemon/lokix/icon.png new file mode 100755 index 0000000000..205de36a02 Binary files /dev/null and b/graphics/pokemon/lokix/icon.png differ diff --git a/graphics/pokemon/lokix/normal.pal b/graphics/pokemon/lokix/normal.pal new file mode 100755 index 0000000000..d0d79e547b --- /dev/null +++ b/graphics/pokemon/lokix/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 40 40 +16 16 16 +88 96 88 +176 180 176 +32 48 72 +96 112 128 +64 80 96 +64 64 64 +120 120 120 +176 100 24 +240 164 48 +120 56 8 +248 248 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lokix/shiny.pal b/graphics/pokemon/lokix/shiny.pal new file mode 100755 index 0000000000..5f652f13b8 --- /dev/null +++ b/graphics/pokemon/lokix/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +91 84 44 +16 16 16 +180 167 65 +176 180 176 +32 48 72 +86 86 86 +53 53 53 +131 129 52 +208 196 100 +178 101 28 +240 164 48 +122 57 10 +248 248 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lycanroc/anim_front.png b/graphics/pokemon/lycanroc/anim_front.png new file mode 100644 index 0000000000..fc853cf24b Binary files /dev/null and b/graphics/pokemon/lycanroc/anim_front.png differ diff --git a/graphics/pokemon/lycanroc/dusk/anim_front.png b/graphics/pokemon/lycanroc/dusk/anim_front.png new file mode 100644 index 0000000000..1df7c94d41 Binary files /dev/null and b/graphics/pokemon/lycanroc/dusk/anim_front.png differ diff --git a/graphics/pokemon/lycanroc/dusk/back.png b/graphics/pokemon/lycanroc/dusk/back.png index d17f1dc635..c9ed8b89bf 100644 Binary files a/graphics/pokemon/lycanroc/dusk/back.png and b/graphics/pokemon/lycanroc/dusk/back.png differ diff --git a/graphics/pokemon/lycanroc/dusk/front.png b/graphics/pokemon/lycanroc/dusk/front.png deleted file mode 100644 index 8e8beb2311..0000000000 Binary files a/graphics/pokemon/lycanroc/dusk/front.png and /dev/null differ diff --git a/graphics/pokemon/lycanroc/dusk/icon.png b/graphics/pokemon/lycanroc/dusk/icon.png index 7ff67638d3..65d8394f4e 100644 Binary files a/graphics/pokemon/lycanroc/dusk/icon.png and b/graphics/pokemon/lycanroc/dusk/icon.png differ diff --git a/graphics/pokemon/lycanroc/dusk/normal.pal b/graphics/pokemon/lycanroc/dusk/normal.pal index 151d43c524..4eb21dce4a 100644 --- a/graphics/pokemon/lycanroc/dusk/normal.pal +++ b/graphics/pokemon/lycanroc/dusk/normal.pal @@ -15,5 +15,5 @@ JASC-PAL 192 176 160 248 248 248 29 204 62 -0 0 0 -0 0 0 +112 45 15 +255 0 255 diff --git a/graphics/pokemon/lycanroc/dusk/shiny.pal b/graphics/pokemon/lycanroc/dusk/shiny.pal index 758e607a84..9fc8da2951 100644 --- a/graphics/pokemon/lycanroc/dusk/shiny.pal +++ b/graphics/pokemon/lycanroc/dusk/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 192 176 160 248 248 248 168 208 32 -0 0 0 +26 38 56 0 0 0 diff --git a/graphics/pokemon/lycanroc/front.png b/graphics/pokemon/lycanroc/front.png deleted file mode 100644 index a5058205ec..0000000000 Binary files a/graphics/pokemon/lycanroc/front.png and /dev/null differ diff --git a/graphics/pokemon/lycanroc/midnight/anim_front.png b/graphics/pokemon/lycanroc/midnight/anim_front.png new file mode 100644 index 0000000000..fdd549d949 Binary files /dev/null and b/graphics/pokemon/lycanroc/midnight/anim_front.png differ diff --git a/graphics/pokemon/lycanroc/midnight/front.png b/graphics/pokemon/lycanroc/midnight/front.png deleted file mode 100644 index 73a49530dd..0000000000 Binary files a/graphics/pokemon/lycanroc/midnight/front.png and /dev/null differ diff --git a/graphics/pokemon/mabosstiff/back.png b/graphics/pokemon/mabosstiff/back.png new file mode 100644 index 0000000000..d572c7cbdb Binary files /dev/null and b/graphics/pokemon/mabosstiff/back.png differ diff --git a/graphics/pokemon/mabosstiff/front.png b/graphics/pokemon/mabosstiff/front.png new file mode 100644 index 0000000000..cf91e34c29 Binary files /dev/null and b/graphics/pokemon/mabosstiff/front.png differ diff --git a/graphics/pokemon/mabosstiff/icon.png b/graphics/pokemon/mabosstiff/icon.png new file mode 100755 index 0000000000..3b99df2d4a Binary files /dev/null and b/graphics/pokemon/mabosstiff/icon.png differ diff --git a/graphics/pokemon/mabosstiff/normal.pal b/graphics/pokemon/mabosstiff/normal.pal new file mode 100644 index 0000000000..5c433266d6 --- /dev/null +++ b/graphics/pokemon/mabosstiff/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 88 96 +48 48 56 +168 168 168 +200 200 200 +120 128 136 +8 8 8 +48 40 40 +64 64 56 +96 80 64 +128 120 104 +248 240 144 +32 24 24 +248 200 128 +248 176 72 +136 96 48 diff --git a/graphics/pokemon/mabosstiff/shiny.pal b/graphics/pokemon/mabosstiff/shiny.pal new file mode 100644 index 0000000000..a3f922e953 --- /dev/null +++ b/graphics/pokemon/mabosstiff/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 88 96 +48 48 56 +168 168 168 +200 200 200 +120 128 136 +8 8 8 +40 40 48 +64 64 56 +104 96 112 +160 144 168 +248 240 144 +32 24 24 +248 200 128 +248 176 72 +136 96 48 diff --git a/graphics/pokemon/machamp/gigantamax/back.png b/graphics/pokemon/machamp/gigantamax/back.png new file mode 100644 index 0000000000..aea4de046f Binary files /dev/null and b/graphics/pokemon/machamp/gigantamax/back.png differ diff --git a/graphics/pokemon/machamp/gigantamax/front.png b/graphics/pokemon/machamp/gigantamax/front.png new file mode 100644 index 0000000000..feff2a8346 Binary files /dev/null and b/graphics/pokemon/machamp/gigantamax/front.png differ diff --git a/graphics/pokemon/machamp/gigantamax/icon.png b/graphics/pokemon/machamp/gigantamax/icon.png new file mode 100644 index 0000000000..f0150630a6 Binary files /dev/null and b/graphics/pokemon/machamp/gigantamax/icon.png differ diff --git a/graphics/pokemon/machamp/gigantamax/normal.pal b/graphics/pokemon/machamp/gigantamax/normal.pal new file mode 100644 index 0000000000..8ad34672ca --- /dev/null +++ b/graphics/pokemon/machamp/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +126 84 5 +16 16 16 +227 141 3 +241 187 0 +252 234 0 +125 136 162 +74 74 98 +147 179 198 +43 43 57 +205 197 98 +131 115 41 +246 238 156 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/machamp/gigantamax/shiny.pal b/graphics/pokemon/machamp/gigantamax/shiny.pal new file mode 100644 index 0000000000..67e67b00c9 --- /dev/null +++ b/graphics/pokemon/machamp/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +126 84 5 +16 16 16 +227 141 3 +241 187 0 +252 234 0 +106 139 41 +74 106 16 +148 189 74 +25 45 0 +205 197 98 +131 115 41 +246 238 156 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/maschiff/back.png b/graphics/pokemon/maschiff/back.png new file mode 100644 index 0000000000..6a6a45eb46 Binary files /dev/null and b/graphics/pokemon/maschiff/back.png differ diff --git a/graphics/pokemon/maschiff/front.png b/graphics/pokemon/maschiff/front.png new file mode 100644 index 0000000000..05f724ec6d Binary files /dev/null and b/graphics/pokemon/maschiff/front.png differ diff --git a/graphics/pokemon/maschiff/icon.png b/graphics/pokemon/maschiff/icon.png new file mode 100755 index 0000000000..f5127dcc42 Binary files /dev/null and b/graphics/pokemon/maschiff/icon.png differ diff --git a/graphics/pokemon/maschiff/normal.pal b/graphics/pokemon/maschiff/normal.pal new file mode 100644 index 0000000000..3c397173c3 --- /dev/null +++ b/graphics/pokemon/maschiff/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +255 255 255 +255 193 11 +180 178 180 +238 113 24 +255 157 90 +213 141 8 +106 36 32 +98 97 98 +213 117 106 +90 64 82 +172 85 74 +8 12 8 +65 44 57 +238 170 148 +164 97 49 diff --git a/graphics/pokemon/maschiff/shiny.pal b/graphics/pokemon/maschiff/shiny.pal new file mode 100644 index 0000000000..23f5bf0a74 --- /dev/null +++ b/graphics/pokemon/maschiff/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +255 255 255 +120 98 112 +180 178 180 +238 113 24 +255 157 90 +81 65 73 +92 77 102 +98 97 98 +173 157 191 +90 64 82 +129 114 142 +8 12 8 +65 44 57 +201 195 216 +63 47 59 diff --git a/graphics/pokemon/maushold/back.png b/graphics/pokemon/maushold/back.png new file mode 100644 index 0000000000..8def92dd59 Binary files /dev/null and b/graphics/pokemon/maushold/back.png differ diff --git a/graphics/pokemon/maushold/four/back.png b/graphics/pokemon/maushold/four/back.png new file mode 100644 index 0000000000..5f78e7c959 Binary files /dev/null and b/graphics/pokemon/maushold/four/back.png differ diff --git a/graphics/pokemon/maushold/four/front.png b/graphics/pokemon/maushold/four/front.png new file mode 100644 index 0000000000..b5813df9f2 Binary files /dev/null and b/graphics/pokemon/maushold/four/front.png differ diff --git a/graphics/pokemon/maushold/four/icon.png b/graphics/pokemon/maushold/four/icon.png new file mode 100755 index 0000000000..728aca58a1 Binary files /dev/null and b/graphics/pokemon/maushold/four/icon.png differ diff --git a/graphics/pokemon/maushold/front.png b/graphics/pokemon/maushold/front.png new file mode 100644 index 0000000000..aa33ed0d45 Binary files /dev/null and b/graphics/pokemon/maushold/front.png differ diff --git a/graphics/pokemon/maushold/icon.png b/graphics/pokemon/maushold/icon.png new file mode 100755 index 0000000000..97c2d70826 Binary files /dev/null and b/graphics/pokemon/maushold/icon.png differ diff --git a/graphics/pokemon/maushold/normal.pal b/graphics/pokemon/maushold/normal.pal new file mode 100644 index 0000000000..0a20d0f038 --- /dev/null +++ b/graphics/pokemon/maushold/normal.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +153 210 164 +85 86 102 +249 249 249 +54 55 67 +185 186 194 +6 6 6 +136 140 153 +60 126 157 +177 205 224 +130 171 200 +255 255 255 diff --git a/graphics/pokemon/maushold/shiny.pal b/graphics/pokemon/maushold/shiny.pal new file mode 100644 index 0000000000..2a6657caa7 --- /dev/null +++ b/graphics/pokemon/maushold/shiny.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +153 210 164 +85 86 102 +249 249 249 +54 55 67 +185 186 194 +6 6 6 +136 140 153 +176 125 89 +231 211 181 +215 171 136 +255 255 255 diff --git a/graphics/pokemon/melmetal/gigantamax/back.png b/graphics/pokemon/melmetal/gigantamax/back.png new file mode 100644 index 0000000000..d1cbe4b98e Binary files /dev/null and b/graphics/pokemon/melmetal/gigantamax/back.png differ diff --git a/graphics/pokemon/melmetal/gigantamax/front.png b/graphics/pokemon/melmetal/gigantamax/front.png new file mode 100644 index 0000000000..a48b1912c8 Binary files /dev/null and b/graphics/pokemon/melmetal/gigantamax/front.png differ diff --git a/graphics/pokemon/melmetal/gigantamax/icon.png b/graphics/pokemon/melmetal/gigantamax/icon.png new file mode 100644 index 0000000000..a84cae6c8f Binary files /dev/null and b/graphics/pokemon/melmetal/gigantamax/icon.png differ diff --git a/graphics/pokemon/melmetal/gigantamax/normal.pal b/graphics/pokemon/melmetal/gigantamax/normal.pal new file mode 100644 index 0000000000..c6309ab24e --- /dev/null +++ b/graphics/pokemon/melmetal/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +138 141 126 +220 220 218 +177 181 166 +16 16 16 +249 249 249 +103 103 95 +61 53 52 +89 84 78 +232 232 232 +194 41 46 +134 66 36 +177 97 44 +224 135 37 +255 191 79 +228 109 139 diff --git a/graphics/pokemon/melmetal/gigantamax/shiny.pal b/graphics/pokemon/melmetal/gigantamax/shiny.pal new file mode 100644 index 0000000000..40cd79108f --- /dev/null +++ b/graphics/pokemon/melmetal/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +138 141 126 +220 220 218 +177 181 166 +16 16 16 +249 249 249 +103 103 95 +61 53 52 +89 84 78 +232 232 232 +0 93 220 +134 66 36 +177 79 45 +222 108 40 +254 166 80 +228 109 139 diff --git a/graphics/pokemon/meowscarada/back.png b/graphics/pokemon/meowscarada/back.png new file mode 100644 index 0000000000..be47fc78dd Binary files /dev/null and b/graphics/pokemon/meowscarada/back.png differ diff --git a/graphics/pokemon/meowscarada/front.png b/graphics/pokemon/meowscarada/front.png new file mode 100644 index 0000000000..5ca21ac5ea Binary files /dev/null and b/graphics/pokemon/meowscarada/front.png differ diff --git a/graphics/pokemon/meowscarada/icon.png b/graphics/pokemon/meowscarada/icon.png new file mode 100755 index 0000000000..5b79821453 Binary files /dev/null and b/graphics/pokemon/meowscarada/icon.png differ diff --git a/graphics/pokemon/meowscarada/normal.pal b/graphics/pokemon/meowscarada/normal.pal new file mode 100644 index 0000000000..2b5658b5e2 --- /dev/null +++ b/graphics/pokemon/meowscarada/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +40 65 48 +21 31 25 +68 93 64 +6 6 6 +0 112 30 +0 64 18 +0 154 44 +227 249 220 +170 57 88 +140 179 150 +255 80 126 +159 190 166 +101 25 45 +83 97 78 +255 139 171 diff --git a/graphics/pokemon/meowscarada/shiny.pal b/graphics/pokemon/meowscarada/shiny.pal new file mode 100644 index 0000000000..d9fe0abfb0 --- /dev/null +++ b/graphics/pokemon/meowscarada/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +40 65 48 +21 31 25 +13 71 67 +6 6 6 +0 85 65 +0 64 18 +0 125 91 +227 249 220 +122 77 171 +140 179 150 +159 105 205 +159 190 166 +101 25 45 +83 97 78 +191 167 212 diff --git a/graphics/pokemon/meowth/gigantamax/back.png b/graphics/pokemon/meowth/gigantamax/back.png new file mode 100644 index 0000000000..16298c644a Binary files /dev/null and b/graphics/pokemon/meowth/gigantamax/back.png differ diff --git a/graphics/pokemon/meowth/gigantamax/front.png b/graphics/pokemon/meowth/gigantamax/front.png new file mode 100644 index 0000000000..3f7cf49d21 Binary files /dev/null and b/graphics/pokemon/meowth/gigantamax/front.png differ diff --git a/graphics/pokemon/meowth/gigantamax/icon.png b/graphics/pokemon/meowth/gigantamax/icon.png new file mode 100644 index 0000000000..039f90a4ad Binary files /dev/null and b/graphics/pokemon/meowth/gigantamax/icon.png differ diff --git a/graphics/pokemon/meowth/gigantamax/normal.pal b/graphics/pokemon/meowth/gigantamax/normal.pal new file mode 100644 index 0000000000..f8c1e79f7a --- /dev/null +++ b/graphics/pokemon/meowth/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +156 106 0 +255 230 131 +16 16 16 +222 189 57 +255 255 180 +255 115 82 +148 90 0 +213 90 57 +205 164 0 +252 252 252 +255 213 0 +244 255 43 +148 65 0 +197 123 8 +238 156 49 diff --git a/graphics/pokemon/meowth/gigantamax/shiny.pal b/graphics/pokemon/meowth/gigantamax/shiny.pal new file mode 100644 index 0000000000..00cf140549 --- /dev/null +++ b/graphics/pokemon/meowth/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +156 65 0 +255 205 131 +16 16 16 +222 156 57 +255 238 180 +213 82 106 +172 41 57 +148 65 0 +205 164 0 +252 252 252 +255 213 0 +244 255 43 +172 41 57 +213 82 106 +246 123 139 diff --git a/graphics/pokemon/miraidon/back.png b/graphics/pokemon/miraidon/back.png new file mode 100644 index 0000000000..3d4b2d703a Binary files /dev/null and b/graphics/pokemon/miraidon/back.png differ diff --git a/graphics/pokemon/miraidon/front.png b/graphics/pokemon/miraidon/front.png new file mode 100644 index 0000000000..28eaa96923 Binary files /dev/null and b/graphics/pokemon/miraidon/front.png differ diff --git a/graphics/pokemon/miraidon/icon.png b/graphics/pokemon/miraidon/icon.png new file mode 100755 index 0000000000..3ccf056b51 Binary files /dev/null and b/graphics/pokemon/miraidon/icon.png differ diff --git a/graphics/pokemon/miraidon/normal.pal b/graphics/pokemon/miraidon/normal.pal new file mode 100644 index 0000000000..12737537e5 --- /dev/null +++ b/graphics/pokemon/miraidon/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +156 153 205 +82 76 115 +49 48 106 +222 218 230 +246 255 255 +16 16 16 +123 97 164 +65 170 222 +57 64 139 +189 182 180 +255 226 115 +24 40 74 +82 68 156 +180 165 189 +57 48 74 diff --git a/graphics/pokemon/miraidon/shiny.pal b/graphics/pokemon/miraidon/shiny.pal new file mode 100644 index 0000000000..18064fb9d1 --- /dev/null +++ b/graphics/pokemon/miraidon/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +156 153 205 +82 76 115 +57 58 62 +222 218 230 +246 255 255 +16 16 16 +200 200 200 +65 170 222 +134 134 134 +189 182 180 +255 226 115 +24 40 74 +133 133 133 +180 165 189 +57 48 74 diff --git a/graphics/pokemon/munkidori/back.png b/graphics/pokemon/munkidori/back.png new file mode 100644 index 0000000000..fa7f6ead6f Binary files /dev/null and b/graphics/pokemon/munkidori/back.png differ diff --git a/graphics/pokemon/munkidori/front.png b/graphics/pokemon/munkidori/front.png new file mode 100644 index 0000000000..2cd101836d Binary files /dev/null and b/graphics/pokemon/munkidori/front.png differ diff --git a/graphics/pokemon/munkidori/icon.png b/graphics/pokemon/munkidori/icon.png new file mode 100644 index 0000000000..20144ff87e Binary files /dev/null and b/graphics/pokemon/munkidori/icon.png differ diff --git a/graphics/pokemon/munkidori/normal.pal b/graphics/pokemon/munkidori/normal.pal new file mode 100644 index 0000000000..3502a2878e --- /dev/null +++ b/graphics/pokemon/munkidori/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +152 208 160 +45 45 45 +78 73 71 +26 29 28 +90 33 73 +202 103 162 +122 140 177 +174 201 233 +146 57 119 +16 16 16 +64 74 104 +254 208 27 +206 157 9 diff --git a/graphics/pokemon/munkidori/shiny.pal b/graphics/pokemon/munkidori/shiny.pal new file mode 100644 index 0000000000..9bd9bcaef0 --- /dev/null +++ b/graphics/pokemon/munkidori/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +152 208 160 +84 74 70 +116 110 108 +26 29 28 +90 33 73 +202 103 162 +122 140 177 +174 201 233 +146 57 119 +16 16 16 +64 74 104 +254 208 27 +206 157 9 diff --git a/graphics/pokemon/nacli/back.png b/graphics/pokemon/nacli/back.png new file mode 100644 index 0000000000..bb455f9f1e Binary files /dev/null and b/graphics/pokemon/nacli/back.png differ diff --git a/graphics/pokemon/nacli/front.png b/graphics/pokemon/nacli/front.png new file mode 100644 index 0000000000..b21f021d19 Binary files /dev/null and b/graphics/pokemon/nacli/front.png differ diff --git a/graphics/pokemon/nacli/icon.png b/graphics/pokemon/nacli/icon.png new file mode 100755 index 0000000000..ed0895c1d8 Binary files /dev/null and b/graphics/pokemon/nacli/icon.png differ diff --git a/graphics/pokemon/nacli/normal.pal b/graphics/pokemon/nacli/normal.pal new file mode 100644 index 0000000000..479596589d --- /dev/null +++ b/graphics/pokemon/nacli/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +154 212 167 +104 100 99 +239 238 235 +115 69 69 +166 150 148 +193 148 125 +147 98 90 +8 8 8 +229 195 183 +160 135 127 +119 92 74 +224 135 58 diff --git a/graphics/pokemon/nacli/shiny.pal b/graphics/pokemon/nacli/shiny.pal new file mode 100644 index 0000000000..650a196d32 --- /dev/null +++ b/graphics/pokemon/nacli/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +154 212 167 +142 67 39 +239 175 108 +115 69 69 +215 124 67 +193 148 125 +147 98 90 +8 8 8 +229 195 183 +160 135 127 +119 68 82 +255 171 58 diff --git a/graphics/pokemon/naclstack/back.png b/graphics/pokemon/naclstack/back.png new file mode 100644 index 0000000000..34d80185e7 Binary files /dev/null and b/graphics/pokemon/naclstack/back.png differ diff --git a/graphics/pokemon/naclstack/front.png b/graphics/pokemon/naclstack/front.png new file mode 100644 index 0000000000..4055c46cf3 Binary files /dev/null and b/graphics/pokemon/naclstack/front.png differ diff --git a/graphics/pokemon/naclstack/icon.png b/graphics/pokemon/naclstack/icon.png new file mode 100755 index 0000000000..a536c3818d Binary files /dev/null and b/graphics/pokemon/naclstack/icon.png differ diff --git a/graphics/pokemon/naclstack/normal.pal b/graphics/pokemon/naclstack/normal.pal new file mode 100644 index 0000000000..2fd0dd7abd --- /dev/null +++ b/graphics/pokemon/naclstack/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 211 165 +113 113 113 +255 255 255 +180 180 180 +18 18 18 +198 135 110 +135 86 81 +246 195 158 +87 44 39 +107 65 60 +255 160 0 +255 255 0 +66 22 28 +194 103 16 diff --git a/graphics/pokemon/naclstack/shiny.pal b/graphics/pokemon/naclstack/shiny.pal new file mode 100644 index 0000000000..a8f14a01b0 --- /dev/null +++ b/graphics/pokemon/naclstack/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 211 165 +164 70 47 +235 145 61 +211 94 44 +18 18 18 +198 135 110 +135 86 81 +246 195 158 +87 44 39 +107 65 60 +255 160 0 +255 255 0 +66 22 28 +194 103 16 diff --git a/graphics/pokemon/nymble/back.png b/graphics/pokemon/nymble/back.png new file mode 100755 index 0000000000..568a99ca8c Binary files /dev/null and b/graphics/pokemon/nymble/back.png differ diff --git a/graphics/pokemon/nymble/front.png b/graphics/pokemon/nymble/front.png new file mode 100755 index 0000000000..66b30103c4 Binary files /dev/null and b/graphics/pokemon/nymble/front.png differ diff --git a/graphics/pokemon/nymble/icon.png b/graphics/pokemon/nymble/icon.png new file mode 100755 index 0000000000..791bd0a427 Binary files /dev/null and b/graphics/pokemon/nymble/icon.png differ diff --git a/graphics/pokemon/nymble/normal.pal b/graphics/pokemon/nymble/normal.pal new file mode 100755 index 0000000000..abf674ba18 --- /dev/null +++ b/graphics/pokemon/nymble/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +154 212 167 +65 74 104 +42 50 75 +119 142 177 +89 109 142 +8 8 8 +203 202 186 +242 242 240 +147 115 23 +188 161 54 +220 213 54 +115 119 127 diff --git a/graphics/pokemon/nymble/shiny.pal b/graphics/pokemon/nymble/shiny.pal new file mode 100755 index 0000000000..59afb1a4fe --- /dev/null +++ b/graphics/pokemon/nymble/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +154 212 167 +188 181 81 +139 135 58 +244 240 139 +221 213 109 +8 8 8 +203 202 186 +242 242 240 +171 131 41 +193 147 45 +225 197 43 +115 119 127 diff --git a/graphics/pokemon/ogerpon/back.png b/graphics/pokemon/ogerpon/back.png new file mode 100644 index 0000000000..8ec6f0fc0d Binary files /dev/null and b/graphics/pokemon/ogerpon/back.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/back.png b/graphics/pokemon/ogerpon/cornerstone/back.png new file mode 100644 index 0000000000..1f37c9c1df Binary files /dev/null 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 new file mode 100644 index 0000000000..6bca5e915c Binary files /dev/null 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 new file mode 100644 index 0000000000..057bd48dcc --- /dev/null +++ b/graphics/pokemon/ogerpon/cornerstone/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +148 209 161 +42 44 41 +21 158 7 +0 0 0 +74 76 73 +25 27 24 +61 113 53 +109 99 108 +133 139 139 +53 134 168 +55 189 227 +194 139 62 +255 197 74 +212 230 247 +144 92 38 diff --git a/graphics/pokemon/ogerpon/front.png b/graphics/pokemon/ogerpon/front.png new file mode 100644 index 0000000000..5fa971f873 Binary files /dev/null and b/graphics/pokemon/ogerpon/front.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/back.png b/graphics/pokemon/ogerpon/hearthflame/back.png new file mode 100644 index 0000000000..d092ec3297 Binary files /dev/null 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 new file mode 100644 index 0000000000..036ea37f32 Binary files /dev/null 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 new file mode 100644 index 0000000000..637556660a --- /dev/null +++ b/graphics/pokemon/ogerpon/hearthflame/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 210 164 +156 153 172 +131 28 24 +49 133 172 +213 230 246 +41 44 41 +255 198 74 +172 105 32 +16 157 0 +57 113 49 +49 190 230 +0 0 0 +164 52 49 +74 76 74 +189 137 90 +230 60 49 diff --git a/graphics/pokemon/ogerpon/icon.png b/graphics/pokemon/ogerpon/icon.png new file mode 100644 index 0000000000..65448e8d1d Binary files /dev/null and b/graphics/pokemon/ogerpon/icon.png differ diff --git a/graphics/pokemon/ogerpon/normal.pal b/graphics/pokemon/ogerpon/normal.pal new file mode 100644 index 0000000000..67a862587b --- /dev/null +++ b/graphics/pokemon/ogerpon/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +148 209 161 +42 44 41 +0 1 0 +27 70 15 +0 164 153 +17 106 68 +21 158 7 +74 76 73 +61 113 53 +175 216 159 +251 253 250 +139 99 57 +120 81 39 +219 157 92 +83 133 90 diff --git a/graphics/pokemon/ogerpon/wellspring/back.png b/graphics/pokemon/ogerpon/wellspring/back.png new file mode 100644 index 0000000000..ed74528e65 Binary files /dev/null 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 new file mode 100644 index 0000000000..5263ce2f1e Binary files /dev/null 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 new file mode 100644 index 0000000000..4b22619be4 --- /dev/null +++ b/graphics/pokemon/ogerpon/wellspring/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 209 161 +42 44 41 +21 158 7 +74 76 73 +0 0 0 +61 113 53 +11 64 121 +15 90 170 +0 126 229 +53 134 168 +71 85 100 +55 189 227 +212 230 247 +147 91 33 +169 122 74 +152 155 171 diff --git a/graphics/pokemon/oinkologne/back.png b/graphics/pokemon/oinkologne/back.png new file mode 100644 index 0000000000..81810c233f Binary files /dev/null and b/graphics/pokemon/oinkologne/back.png differ diff --git a/graphics/pokemon/oinkologne/female/back.png b/graphics/pokemon/oinkologne/female/back.png new file mode 100644 index 0000000000..d71dab3908 Binary files /dev/null and b/graphics/pokemon/oinkologne/female/back.png differ diff --git a/graphics/pokemon/oinkologne/female/front.png b/graphics/pokemon/oinkologne/female/front.png new file mode 100644 index 0000000000..c3f10ed9f3 Binary files /dev/null and b/graphics/pokemon/oinkologne/female/front.png differ diff --git a/graphics/pokemon/oinkologne/female/icon.png b/graphics/pokemon/oinkologne/female/icon.png new file mode 100755 index 0000000000..0acd6e2711 Binary files /dev/null and b/graphics/pokemon/oinkologne/female/icon.png differ diff --git a/graphics/pokemon/oinkologne/female/iconTODO.png b/graphics/pokemon/oinkologne/female/iconTODO.png new file mode 100755 index 0000000000..36ce1eb7f8 Binary files /dev/null and b/graphics/pokemon/oinkologne/female/iconTODO.png differ diff --git a/graphics/pokemon/oinkologne/female/normal.pal b/graphics/pokemon/oinkologne/female/normal.pal new file mode 100644 index 0000000000..ba2c645dc6 --- /dev/null +++ b/graphics/pokemon/oinkologne/female/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +216 80 128 +248 160 200 +144 40 64 +248 120 144 +24 24 24 +96 64 72 +64 40 40 +248 160 8 +200 104 88 +0 0 0 +144 88 80 +248 200 8 +248 248 248 +168 160 160 diff --git a/graphics/pokemon/oinkologne/female/shiny.pal b/graphics/pokemon/oinkologne/female/shiny.pal new file mode 100644 index 0000000000..9a427f2a72 --- /dev/null +++ b/graphics/pokemon/oinkologne/female/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +216 80 128 +248 160 200 +144 40 64 +248 120 144 +24 24 24 +232 192 206 +217 158 179 +248 160 8 +248 240 240 +0 0 0 +241 223 226 +248 200 8 +248 248 248 +168 160 160 diff --git a/graphics/pokemon/oinkologne/front.png b/graphics/pokemon/oinkologne/front.png new file mode 100644 index 0000000000..22263f0903 Binary files /dev/null and b/graphics/pokemon/oinkologne/front.png differ diff --git a/graphics/pokemon/oinkologne/icon.png b/graphics/pokemon/oinkologne/icon.png new file mode 100755 index 0000000000..0acd6e2711 Binary files /dev/null and b/graphics/pokemon/oinkologne/icon.png differ diff --git a/graphics/pokemon/oinkologne/normal.pal b/graphics/pokemon/oinkologne/normal.pal new file mode 100644 index 0000000000..6487815766 --- /dev/null +++ b/graphics/pokemon/oinkologne/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +131 97 49 +197 80 131 +16 16 16 +96 92 107 +246 214 65 +230 113 164 +59 50 72 +83 81 104 +31 33 45 +255 255 255 +43 43 43 +87 83 97 +68 61 84 +70 69 95 +131 60 90 diff --git a/graphics/pokemon/oinkologne/shiny.pal b/graphics/pokemon/oinkologne/shiny.pal new file mode 100644 index 0000000000..8faecfbad6 --- /dev/null +++ b/graphics/pokemon/oinkologne/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +131 97 49 +197 80 131 +16 16 16 +255 206 222 +246 214 65 +230 113 164 +249 241 242 +205 153 172 +139 89 115 +255 255 255 +57 60 65 +246 186 205 +247 233 235 +255 226 238 +131 60 90 diff --git a/graphics/pokemon/okidogi/back.png b/graphics/pokemon/okidogi/back.png new file mode 100644 index 0000000000..5a1e7fb523 Binary files /dev/null and b/graphics/pokemon/okidogi/back.png differ diff --git a/graphics/pokemon/okidogi/front.png b/graphics/pokemon/okidogi/front.png new file mode 100644 index 0000000000..a6b0a62f0e Binary files /dev/null and b/graphics/pokemon/okidogi/front.png differ diff --git a/graphics/pokemon/okidogi/icon.png b/graphics/pokemon/okidogi/icon.png new file mode 100644 index 0000000000..91984549c3 Binary files /dev/null and b/graphics/pokemon/okidogi/icon.png differ diff --git a/graphics/pokemon/okidogi/normal.pal b/graphics/pokemon/okidogi/normal.pal new file mode 100644 index 0000000000..9f256a4a5b --- /dev/null +++ b/graphics/pokemon/okidogi/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +16 16 16 +90 33 73 +45 45 45 +78 73 71 +202 103 162 +146 57 119 +26 29 28 +121 167 58 +84 117 53 +184 140 7 +254 208 27 +249 249 249 +29 57 21 +153 157 166 diff --git a/graphics/pokemon/okidogi/shiny.pal b/graphics/pokemon/okidogi/shiny.pal new file mode 100644 index 0000000000..d239ae218f --- /dev/null +++ b/graphics/pokemon/okidogi/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +16 16 16 +90 33 73 +140 49 12 +207 71 17 +202 103 162 +146 57 119 +26 29 28 +121 167 58 +84 117 53 +184 140 7 +254 208 27 +249 249 249 +29 57 21 +153 157 166 diff --git a/graphics/pokemon/oranguru/anim_front.png b/graphics/pokemon/oranguru/anim_front.png new file mode 100644 index 0000000000..c3f9a59484 Binary files /dev/null and b/graphics/pokemon/oranguru/anim_front.png differ diff --git a/graphics/pokemon/oranguru/front.png b/graphics/pokemon/oranguru/front.png deleted file mode 100644 index b0ba3510c1..0000000000 Binary files a/graphics/pokemon/oranguru/front.png and /dev/null differ diff --git a/graphics/pokemon/orbeetle/gigantamax/back.png b/graphics/pokemon/orbeetle/gigantamax/back.png new file mode 100644 index 0000000000..e984f9cef9 Binary files /dev/null and b/graphics/pokemon/orbeetle/gigantamax/back.png differ diff --git a/graphics/pokemon/orbeetle/gigantamax/front.png b/graphics/pokemon/orbeetle/gigantamax/front.png new file mode 100644 index 0000000000..f59aff21ab Binary files /dev/null and b/graphics/pokemon/orbeetle/gigantamax/front.png differ diff --git a/graphics/pokemon/orbeetle/gigantamax/icon.png b/graphics/pokemon/orbeetle/gigantamax/icon.png new file mode 100644 index 0000000000..4e486f2637 Binary files /dev/null and b/graphics/pokemon/orbeetle/gigantamax/icon.png differ diff --git a/graphics/pokemon/orbeetle/gigantamax/normal.pal b/graphics/pokemon/orbeetle/gigantamax/normal.pal new file mode 100644 index 0000000000..af34ce0fac --- /dev/null +++ b/graphics/pokemon/orbeetle/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +120 23 40 +189 20 43 +253 38 54 +164 86 0 +191 167 49 +16 189 220 +62 32 45 +78 58 61 +207 255 255 +87 251 231 +246 230 115 +172 156 173 +249 255 255 +214 213 211 diff --git a/graphics/pokemon/orbeetle/gigantamax/shiny.pal b/graphics/pokemon/orbeetle/gigantamax/shiny.pal new file mode 100644 index 0000000000..349aac2b6a --- /dev/null +++ b/graphics/pokemon/orbeetle/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +50 41 102 +101 78 199 +146 115 230 +133 49 73 +199 83 105 +16 189 220 +62 32 45 +78 58 61 +207 255 255 +87 251 231 +234 134 149 +47 62 166 +249 255 255 +85 104 240 diff --git a/graphics/pokemon/orthworm/back.png b/graphics/pokemon/orthworm/back.png new file mode 100755 index 0000000000..99936e302e Binary files /dev/null and b/graphics/pokemon/orthworm/back.png differ diff --git a/graphics/pokemon/orthworm/front.png b/graphics/pokemon/orthworm/front.png new file mode 100755 index 0000000000..4c3ab7c3bd Binary files /dev/null and b/graphics/pokemon/orthworm/front.png differ diff --git a/graphics/pokemon/orthworm/icon.png b/graphics/pokemon/orthworm/icon.png new file mode 100755 index 0000000000..9cb39cc79b Binary files /dev/null and b/graphics/pokemon/orthworm/icon.png differ diff --git a/graphics/pokemon/orthworm/normal.pal b/graphics/pokemon/orthworm/normal.pal new file mode 100755 index 0000000000..998bfee3bf --- /dev/null +++ b/graphics/pokemon/orthworm/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +136 56 56 +240 96 88 +184 72 72 +16 16 16 +240 132 128 +112 92 96 +160 144 144 +200 192 192 +184 224 248 +248 204 184 +224 164 152 +96 40 56 +128 68 72 +88 184 232 +0 0 0 diff --git a/graphics/pokemon/orthworm/shiny.pal b/graphics/pokemon/orthworm/shiny.pal new file mode 100755 index 0000000000..56117f80ac --- /dev/null +++ b/graphics/pokemon/orthworm/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +70 97 113 +135 199 210 +102 157 165 +16 16 16 +240 132 128 +112 92 96 +160 144 144 +200 192 192 +184 224 248 +252 231 199 +206 182 159 +96 40 56 +128 68 72 +59 112 145 +0 0 0 diff --git a/graphics/pokemon/palafin/back.png b/graphics/pokemon/palafin/back.png new file mode 100755 index 0000000000..77432e6367 Binary files /dev/null and b/graphics/pokemon/palafin/back.png differ diff --git a/graphics/pokemon/palafin/front.png b/graphics/pokemon/palafin/front.png new file mode 100755 index 0000000000..074ca87f3e Binary files /dev/null and b/graphics/pokemon/palafin/front.png differ diff --git a/graphics/pokemon/palafin/hero/back.png b/graphics/pokemon/palafin/hero/back.png new file mode 100755 index 0000000000..922496ccf6 Binary files /dev/null and b/graphics/pokemon/palafin/hero/back.png differ diff --git a/graphics/pokemon/palafin/hero/front.png b/graphics/pokemon/palafin/hero/front.png new file mode 100755 index 0000000000..47f66479e1 Binary files /dev/null and b/graphics/pokemon/palafin/hero/front.png differ diff --git a/graphics/pokemon/palafin/hero/icon.png b/graphics/pokemon/palafin/hero/icon.png new file mode 100755 index 0000000000..8dd8a11844 Binary files /dev/null and b/graphics/pokemon/palafin/hero/icon.png differ diff --git a/graphics/pokemon/palafin/hero/normal.pal b/graphics/pokemon/palafin/hero/normal.pal new file mode 100755 index 0000000000..60a217e1c5 --- /dev/null +++ b/graphics/pokemon/palafin/hero/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +8 84 104 +136 212 248 +104 152 184 +16 16 16 +0 76 152 +0 44 96 +64 140 216 +0 104 200 +248 252 248 +168 192 208 +248 248 248 +160 176 192 +192 64 136 +152 44 104 +0 0 0 diff --git a/graphics/pokemon/palafin/hero/shiny.pal b/graphics/pokemon/palafin/hero/shiny.pal new file mode 100755 index 0000000000..d0cde2f6db --- /dev/null +++ b/graphics/pokemon/palafin/hero/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +8 84 104 +115 204 255 +88 146 189 +16 16 16 +65 54 87 +34 31 49 +125 109 163 +94 77 130 +248 252 248 +168 192 208 +55 80 231 +45 61 161 +205 46 125 +160 32 91 +0 0 0 diff --git a/graphics/pokemon/palafin/icon.png b/graphics/pokemon/palafin/icon.png new file mode 100755 index 0000000000..d24e846fc5 Binary files /dev/null and b/graphics/pokemon/palafin/icon.png differ diff --git a/graphics/pokemon/palafin/normal.pal b/graphics/pokemon/palafin/normal.pal new file mode 100755 index 0000000000..cf7dae9337 --- /dev/null +++ b/graphics/pokemon/palafin/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +40 96 112 +80 200 216 +136 216 224 +64 156 176 +176 192 200 +208 236 240 +24 160 248 +16 16 16 +248 252 248 +248 164 184 +176 128 160 +240 164 216 +24 104 136 +128 212 240 +64 160 200 diff --git a/graphics/pokemon/palafin/shiny.pal b/graphics/pokemon/palafin/shiny.pal new file mode 100755 index 0000000000..ebdbf83aa9 --- /dev/null +++ b/graphics/pokemon/palafin/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +61 77 167 +118 138 252 +136 216 224 +79 100 235 +170 181 211 +208 236 240 +24 160 248 +16 16 16 +248 252 248 +74 229 145 +176 128 160 +240 164 216 +24 104 136 +128 212 240 +64 160 200 diff --git a/graphics/pokemon/passimian/anim_front.png b/graphics/pokemon/passimian/anim_front.png new file mode 100644 index 0000000000..c69fd6a2e4 Binary files /dev/null and b/graphics/pokemon/passimian/anim_front.png differ diff --git a/graphics/pokemon/passimian/back.png b/graphics/pokemon/passimian/back.png index e27f88bb02..93b992c84d 100644 Binary files a/graphics/pokemon/passimian/back.png and b/graphics/pokemon/passimian/back.png differ diff --git a/graphics/pokemon/passimian/front.png b/graphics/pokemon/passimian/front.png deleted file mode 100644 index 94ebe658c2..0000000000 Binary files a/graphics/pokemon/passimian/front.png and /dev/null differ diff --git a/graphics/pokemon/passimian/normal.pal b/graphics/pokemon/passimian/normal.pal index 26283bf52e..0b663aba07 100644 --- a/graphics/pokemon/passimian/normal.pal +++ b/graphics/pokemon/passimian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 48 32 -96 96 64 -16 16 16 -40 40 24 +54 48 41 +89 83 76 +8 8 8 +238 238 238 +248 248 248 +54 48 41 +82 76 70 +107 100 93 +248 248 248 +186 186 186 +242 179 39 +197 222 95 +144 163 60 +255 255 0 24 200 80 -72 64 48 -248 248 248 -120 160 64 -184 224 104 -192 184 160 -240 128 24 -88 80 56 -248 216 0 -248 248 248 -248 248 248 diff --git a/graphics/pokemon/passimian/shiny.pal b/graphics/pokemon/passimian/shiny.pal index 9b8f0f4a8f..833f0df2fc 100644 --- a/graphics/pokemon/passimian/shiny.pal +++ b/graphics/pokemon/passimian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 48 32 -112 104 64 -16 16 16 -16 16 120 +14 47 132 +23 68 181 +8 8 8 +115 115 64 +22 70 181 +66 58 40 +91 81 61 +112 112 66 +248 248 248 +186 186 186 +248 248 248 +240 173 29 +156 110 12 +255 255 0 24 200 80 -80 64 48 -16 64 224 -152 64 24 -208 112 32 -192 184 160 -240 240 232 -8 48 216 -248 216 0 -248 240 216 -104 96 64 diff --git a/graphics/pokemon/pawmi/back.png b/graphics/pokemon/pawmi/back.png new file mode 100644 index 0000000000..c5d59e6677 Binary files /dev/null and b/graphics/pokemon/pawmi/back.png differ diff --git a/graphics/pokemon/pawmi/front.png b/graphics/pokemon/pawmi/front.png new file mode 100644 index 0000000000..265a9c7173 Binary files /dev/null and b/graphics/pokemon/pawmi/front.png differ diff --git a/graphics/pokemon/pawmi/icon.png b/graphics/pokemon/pawmi/icon.png new file mode 100755 index 0000000000..a7fc302fe0 Binary files /dev/null and b/graphics/pokemon/pawmi/icon.png differ diff --git a/graphics/pokemon/pawmi/normal.pal b/graphics/pokemon/pawmi/normal.pal new file mode 100644 index 0000000000..822fa530da --- /dev/null +++ b/graphics/pokemon/pawmi/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +150 79 14 +243 156 78 +96 51 23 +126 114 71 +194 89 3 +189 162 115 +244 226 188 +15 15 15 +235 120 35 +46 116 82 +211 97 3 +52 52 65 +252 252 252 +197 164 98 +255 205 32 diff --git a/graphics/pokemon/pawmi/normal.png b/graphics/pokemon/pawmi/normal.png new file mode 100644 index 0000000000..85301260cf Binary files /dev/null and b/graphics/pokemon/pawmi/normal.png differ diff --git a/graphics/pokemon/pawmi/shiny.pal b/graphics/pokemon/pawmi/shiny.pal new file mode 100644 index 0000000000..02d4ae6d00 --- /dev/null +++ b/graphics/pokemon/pawmi/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +220 58 50 +255 155 172 +96 51 23 +139 83 58 +194 89 3 +228 167 137 +244 226 188 +15 15 15 +255 119 147 +46 116 82 +237 82 82 +52 52 65 +252 252 252 +221 177 74 +255 205 32 diff --git a/graphics/pokemon/pawmo/back.png b/graphics/pokemon/pawmo/back.png new file mode 100644 index 0000000000..42d151758a Binary files /dev/null and b/graphics/pokemon/pawmo/back.png differ diff --git a/graphics/pokemon/pawmo/front.png b/graphics/pokemon/pawmo/front.png new file mode 100644 index 0000000000..9a01396050 Binary files /dev/null and b/graphics/pokemon/pawmo/front.png differ diff --git a/graphics/pokemon/pawmo/icon.png b/graphics/pokemon/pawmo/icon.png new file mode 100755 index 0000000000..41cc6b4f9a Binary files /dev/null and b/graphics/pokemon/pawmo/icon.png differ diff --git a/graphics/pokemon/pawmo/normal.pal b/graphics/pokemon/pawmo/normal.pal new file mode 100644 index 0000000000..8a6a2121c5 --- /dev/null +++ b/graphics/pokemon/pawmo/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +136 64 0 +0 0 0 +240 184 72 +16 104 96 +232 152 0 +0 160 144 +176 112 8 +248 232 184 +216 192 160 +88 64 48 +255 255 255 +240 208 56 +168 64 32 +232 72 56 diff --git a/graphics/pokemon/pawmo/shiny.pal b/graphics/pokemon/pawmo/shiny.pal new file mode 100644 index 0000000000..3022ea1e04 --- /dev/null +++ b/graphics/pokemon/pawmo/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +152 208 160 +136 64 0 +0 0 0 +245 158 128 +16 104 96 +242 112 116 +0 186 182 +214 79 87 +248 232 184 +216 192 160 +88 64 48 +255 255 255 +240 208 56 +168 64 32 +232 72 56 diff --git a/graphics/pokemon/pawmot/back.png b/graphics/pokemon/pawmot/back.png new file mode 100755 index 0000000000..f9f54821b8 Binary files /dev/null and b/graphics/pokemon/pawmot/back.png differ diff --git a/graphics/pokemon/pawmot/front.png b/graphics/pokemon/pawmot/front.png new file mode 100755 index 0000000000..8b8ff519ea Binary files /dev/null and b/graphics/pokemon/pawmot/front.png differ diff --git a/graphics/pokemon/pawmot/icon.png b/graphics/pokemon/pawmot/icon.png new file mode 100755 index 0000000000..cc9d2e942a Binary files /dev/null and b/graphics/pokemon/pawmot/icon.png differ diff --git a/graphics/pokemon/pawmot/normal.pal b/graphics/pokemon/pawmot/normal.pal new file mode 100755 index 0000000000..97f160e2fd --- /dev/null +++ b/graphics/pokemon/pawmot/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +154 212 167 +139 68 0 +180 113 3 +234 158 0 +8 8 8 +240 188 70 +7 105 99 +0 168 149 +87 63 45 +253 253 253 +247 213 57 +252 236 187 +223 195 167 diff --git a/graphics/pokemon/pawmot/shiny.pal b/graphics/pokemon/pawmot/shiny.pal new file mode 100755 index 0000000000..85c0640331 --- /dev/null +++ b/graphics/pokemon/pawmot/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +154 212 167 +167 42 61 +215 78 86 +242 113 117 +8 8 8 +245 159 129 +11 122 124 +0 187 183 +87 63 45 +253 253 253 +247 213 57 +252 236 187 +223 195 167 diff --git a/graphics/pokemon/pikachu/gigantamax/back.png b/graphics/pokemon/pikachu/gigantamax/back.png new file mode 100644 index 0000000000..fefeab9c22 Binary files /dev/null and b/graphics/pokemon/pikachu/gigantamax/back.png differ diff --git a/graphics/pokemon/pikachu/gigantamax/front.png b/graphics/pokemon/pikachu/gigantamax/front.png new file mode 100644 index 0000000000..75f0c2beda Binary files /dev/null and b/graphics/pokemon/pikachu/gigantamax/front.png differ diff --git a/graphics/pokemon/pikachu/gigantamax/icon.png b/graphics/pokemon/pikachu/gigantamax/icon.png new file mode 100644 index 0000000000..440004b8e9 Binary files /dev/null and b/graphics/pokemon/pikachu/gigantamax/icon.png differ diff --git a/graphics/pokemon/pikachu/gigantamax/normal.pal b/graphics/pokemon/pikachu/gigantamax/normal.pal new file mode 100644 index 0000000000..1bfa354f78 --- /dev/null +++ b/graphics/pokemon/pikachu/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +248 252 75 +255 246 164 +254 254 254 +16 16 16 +41 41 41 +65 65 74 +246 189 32 +98 49 8 +156 82 0 +246 230 82 +230 90 65 +197 32 24 +222 148 0 +115 115 131 +15 15 15 diff --git a/graphics/pokemon/pikachu/gigantamax/shiny.pal b/graphics/pokemon/pikachu/gigantamax/shiny.pal new file mode 100644 index 0000000000..377e03cd67 --- /dev/null +++ b/graphics/pokemon/pikachu/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +248 252 75 +255 230 131 +254 254 254 +16 16 16 +41 41 41 +65 65 74 +255 164 0 +115 16 0 +180 49 0 +255 197 49 +230 98 65 +197 41 24 +230 131 0 +115 115 131 +15 15 15 diff --git a/graphics/pokemon/pikachu/iconf.png b/graphics/pokemon/pikachu/iconf.png new file mode 100644 index 0000000000..22eeed0a46 Binary files /dev/null and b/graphics/pokemon/pikachu/iconf.png differ diff --git a/graphics/pokemon/pikachu/world_cap/icon.png b/graphics/pokemon/pikachu/world_cap/icon.png new file mode 100644 index 0000000000..260e29cda2 Binary files /dev/null and b/graphics/pokemon/pikachu/world_cap/icon.png differ diff --git a/graphics/pokemon/pikipek/anim_front.png b/graphics/pokemon/pikipek/anim_front.png new file mode 100644 index 0000000000..f7b765876c Binary files /dev/null and b/graphics/pokemon/pikipek/anim_front.png differ diff --git a/graphics/pokemon/pikipek/back.png b/graphics/pokemon/pikipek/back.png index 030eea3c14..2175a1f183 100644 Binary files a/graphics/pokemon/pikipek/back.png and b/graphics/pokemon/pikipek/back.png differ diff --git a/graphics/pokemon/pikipek/front.png b/graphics/pokemon/pikipek/front.png deleted file mode 100644 index a16e45512f..0000000000 Binary files a/graphics/pokemon/pikipek/front.png and /dev/null differ diff --git a/graphics/pokemon/poltchageist/back.png b/graphics/pokemon/poltchageist/back.png new file mode 100644 index 0000000000..2eeaaa5617 Binary files /dev/null and b/graphics/pokemon/poltchageist/back.png differ diff --git a/graphics/pokemon/poltchageist/front.png b/graphics/pokemon/poltchageist/front.png new file mode 100644 index 0000000000..d7a013e3de Binary files /dev/null and b/graphics/pokemon/poltchageist/front.png differ diff --git a/graphics/pokemon/poltchageist/icon.png b/graphics/pokemon/poltchageist/icon.png new file mode 100644 index 0000000000..6b686ad08d Binary files /dev/null and b/graphics/pokemon/poltchageist/icon.png differ diff --git a/graphics/pokemon/poltchageist/normal.pal b/graphics/pokemon/poltchageist/normal.pal new file mode 100644 index 0000000000..e4bc20fbbf --- /dev/null +++ b/graphics/pokemon/poltchageist/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +106 68 24 +90 157 74 +246 218 98 +32 24 24 +74 56 57 +255 255 255 +213 210 197 +164 149 82 +0 4 0 +123 198 98 +65 121 41 +164 186 115 +246 238 238 +156 153 131 +205 194 115 diff --git a/graphics/pokemon/poltchageist/shiny.pal b/graphics/pokemon/poltchageist/shiny.pal new file mode 100644 index 0000000000..44b3de645d --- /dev/null +++ b/graphics/pokemon/poltchageist/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +106 68 24 +90 157 74 +246 218 98 +10 48 0 +32 88 15 +255 255 255 +213 210 197 +164 149 82 +0 4 0 +123 198 98 +65 121 41 +164 186 115 +246 238 238 +156 153 131 +205 194 115 diff --git a/graphics/pokemon/quaquaval/back.png b/graphics/pokemon/quaquaval/back.png new file mode 100644 index 0000000000..c5655c0b05 Binary files /dev/null and b/graphics/pokemon/quaquaval/back.png differ diff --git a/graphics/pokemon/quaquaval/front.png b/graphics/pokemon/quaquaval/front.png new file mode 100644 index 0000000000..9b2fa64a85 Binary files /dev/null and b/graphics/pokemon/quaquaval/front.png differ diff --git a/graphics/pokemon/quaquaval/icon.png b/graphics/pokemon/quaquaval/icon.png new file mode 100755 index 0000000000..4e68d84ff4 Binary files /dev/null and b/graphics/pokemon/quaquaval/icon.png differ diff --git a/graphics/pokemon/quaquaval/normal.pal b/graphics/pokemon/quaquaval/normal.pal new file mode 100644 index 0000000000..6a7708643c --- /dev/null +++ b/graphics/pokemon/quaquaval/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +0 120 112 +0 216 224 +0 0 0 +0 152 192 +40 56 144 +32 32 72 +232 248 248 +40 72 240 +96 56 16 +184 64 16 +248 64 0 +184 208 232 +248 168 32 +248 248 248 +224 120 24 diff --git a/graphics/pokemon/quaquaval/shiny.pal b/graphics/pokemon/quaquaval/shiny.pal new file mode 100644 index 0000000000..8cfb5b857f --- /dev/null +++ b/graphics/pokemon/quaquaval/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +67 109 110 +173 224 225 +0 0 0 +107 197 199 +125 133 207 +71 75 118 +232 248 248 +156 162 222 +115 61 43 +200 88 40 +248 128 72 +184 208 232 +248 168 32 +248 248 248 +224 120 24 diff --git a/graphics/pokemon/quaxly/back.png b/graphics/pokemon/quaxly/back.png new file mode 100644 index 0000000000..2dd6800ebb Binary files /dev/null and b/graphics/pokemon/quaxly/back.png differ diff --git a/graphics/pokemon/quaxly/front.png b/graphics/pokemon/quaxly/front.png new file mode 100644 index 0000000000..0148e5badf Binary files /dev/null and b/graphics/pokemon/quaxly/front.png differ diff --git a/graphics/pokemon/quaxly/icon.png b/graphics/pokemon/quaxly/icon.png new file mode 100755 index 0000000000..4036957445 Binary files /dev/null and b/graphics/pokemon/quaxly/icon.png differ diff --git a/graphics/pokemon/quaxly/normal.pal b/graphics/pokemon/quaxly/normal.pal new file mode 100644 index 0000000000..b58467e0ac --- /dev/null +++ b/graphics/pokemon/quaxly/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +31 89 120 +54 134 177 +47 190 232 +132 215 255 +15 15 15 +246 251 252 +77 99 115 +190 205 228 +0 91 162 +121 153 189 +106 106 65 +172 164 98 +246 246 74 diff --git a/graphics/pokemon/quaxly/shiny.pal b/graphics/pokemon/quaxly/shiny.pal new file mode 100644 index 0000000000..648094baf0 --- /dev/null +++ b/graphics/pokemon/quaxly/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +31 89 120 +48 169 112 +73 224 149 +132 215 255 +15 15 15 +246 251 252 +77 99 115 +190 205 228 +0 91 162 +121 153 189 +106 106 65 +172 164 98 +246 246 74 diff --git a/graphics/pokemon/quaxwell/back.png b/graphics/pokemon/quaxwell/back.png new file mode 100644 index 0000000000..f6485a6904 Binary files /dev/null and b/graphics/pokemon/quaxwell/back.png differ diff --git a/graphics/pokemon/quaxwell/front.png b/graphics/pokemon/quaxwell/front.png new file mode 100644 index 0000000000..fe58dd3171 Binary files /dev/null and b/graphics/pokemon/quaxwell/front.png differ diff --git a/graphics/pokemon/quaxwell/icon.png b/graphics/pokemon/quaxwell/icon.png new file mode 100755 index 0000000000..3806542c09 Binary files /dev/null and b/graphics/pokemon/quaxwell/icon.png differ diff --git a/graphics/pokemon/quaxwell/normal.pal b/graphics/pokemon/quaxwell/normal.pal new file mode 100644 index 0000000000..96e6f9ee7e --- /dev/null +++ b/graphics/pokemon/quaxwell/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +120 208 152 +0 96 168 +0 48 88 +0 136 224 +0 80 56 +0 208 184 +0 0 0 +0 152 120 +200 152 0 +136 96 0 +248 216 80 +248 248 248 +80 128 152 +168 192 208 diff --git a/graphics/pokemon/quaxwell/shiny.pal b/graphics/pokemon/quaxwell/shiny.pal new file mode 100644 index 0000000000..2d76e1631d --- /dev/null +++ b/graphics/pokemon/quaxwell/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +120 208 152 +0 192 176 +0 48 88 +0 248 232 +0 80 56 +48 120 224 +0 0 0 +40 64 216 +200 152 0 +136 96 0 +248 216 80 +248 248 248 +80 128 152 +168 192 208 diff --git a/graphics/pokemon/rabsca/back.png b/graphics/pokemon/rabsca/back.png new file mode 100644 index 0000000000..9fea6d557a Binary files /dev/null and b/graphics/pokemon/rabsca/back.png differ diff --git a/graphics/pokemon/rabsca/front.png b/graphics/pokemon/rabsca/front.png new file mode 100644 index 0000000000..becbd23ed1 Binary files /dev/null and b/graphics/pokemon/rabsca/front.png differ diff --git a/graphics/pokemon/rabsca/icon.png b/graphics/pokemon/rabsca/icon.png new file mode 100755 index 0000000000..57c93e30a3 Binary files /dev/null and b/graphics/pokemon/rabsca/icon.png differ diff --git a/graphics/pokemon/rabsca/normal.pal b/graphics/pokemon/rabsca/normal.pal new file mode 100644 index 0000000000..6935e5a615 --- /dev/null +++ b/graphics/pokemon/rabsca/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +117 0 130 +171 14 171 +227 16 251 +194 36 97 +154 27 72 +247 57 131 +248 248 248 +152 151 157 +63 79 92 +76 133 164 +24 24 24 +107 192 221 +106 32 39 +201 76 90 diff --git a/graphics/pokemon/rabsca/shiny.pal b/graphics/pokemon/rabsca/shiny.pal new file mode 100644 index 0000000000..d3f26a3e93 --- /dev/null +++ b/graphics/pokemon/rabsca/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +117 0 130 +171 14 171 +227 16 251 +194 36 97 +154 27 72 +247 57 131 +248 248 248 +152 151 157 +63 79 92 +204 174 41 +24 24 24 +249 240 73 +106 32 39 +201 76 90 diff --git a/graphics/pokemon/rellor/back.png b/graphics/pokemon/rellor/back.png new file mode 100644 index 0000000000..fee0024338 Binary files /dev/null and b/graphics/pokemon/rellor/back.png differ diff --git a/graphics/pokemon/rellor/front.png b/graphics/pokemon/rellor/front.png new file mode 100644 index 0000000000..c87d798d8e Binary files /dev/null and b/graphics/pokemon/rellor/front.png differ diff --git a/graphics/pokemon/rellor/icon.png b/graphics/pokemon/rellor/icon.png new file mode 100755 index 0000000000..56ea140347 Binary files /dev/null and b/graphics/pokemon/rellor/icon.png differ diff --git a/graphics/pokemon/rellor/normal.pal b/graphics/pokemon/rellor/normal.pal new file mode 100644 index 0000000000..abe74d5ded --- /dev/null +++ b/graphics/pokemon/rellor/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +246 242 246 +115 97 74 +180 68 148 +49 48 41 +148 198 156 +164 141 131 +197 182 172 +189 109 32 +0 0 0 +180 165 98 +156 133 98 +82 80 65 +123 125 106 +246 133 32 +90 76 49 diff --git a/graphics/pokemon/rellor/shiny.pal b/graphics/pokemon/rellor/shiny.pal new file mode 100644 index 0000000000..f282be4048 --- /dev/null +++ b/graphics/pokemon/rellor/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +246 242 246 +215 179 36 +82 109 157 +49 48 41 +148 198 156 +214 179 36 +241 243 37 +214 179 36 +0 0 0 +180 165 98 +249 248 87 +82 80 65 +123 125 106 +241 243 37 +174 118 9 diff --git a/graphics/pokemon/revavroom/back.png b/graphics/pokemon/revavroom/back.png new file mode 100644 index 0000000000..127fea4b71 Binary files /dev/null and b/graphics/pokemon/revavroom/back.png differ diff --git a/graphics/pokemon/revavroom/front.png b/graphics/pokemon/revavroom/front.png new file mode 100644 index 0000000000..486326c545 Binary files /dev/null and b/graphics/pokemon/revavroom/front.png differ diff --git a/graphics/pokemon/revavroom/icon.png b/graphics/pokemon/revavroom/icon.png new file mode 100755 index 0000000000..8d3a2ee0cc Binary files /dev/null and b/graphics/pokemon/revavroom/icon.png differ diff --git a/graphics/pokemon/revavroom/normal.pal b/graphics/pokemon/revavroom/normal.pal new file mode 100644 index 0000000000..9625234e1b --- /dev/null +++ b/graphics/pokemon/revavroom/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +55 51 69 +29 28 41 +133 128 138 +96 90 105 +16 16 16 +31 33 43 +118 127 148 +91 63 128 +49 34 84 +153 107 189 +207 213 219 +58 63 76 +247 251 255 +255 237 37 +232 176 52 diff --git a/graphics/pokemon/revavroom/shiny.pal b/graphics/pokemon/revavroom/shiny.pal new file mode 100644 index 0000000000..ed4463941a --- /dev/null +++ b/graphics/pokemon/revavroom/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +55 51 69 +29 28 41 +133 128 138 +96 90 105 +16 16 16 +31 33 43 +158 122 73 +91 63 128 +49 34 84 +153 107 189 +234 200 106 +58 63 76 +247 251 255 +237 142 178 +217 101 163 diff --git a/graphics/pokemon/ribombee/anim_front.png b/graphics/pokemon/ribombee/anim_front.png new file mode 100644 index 0000000000..fb1c5ad41a Binary files /dev/null and b/graphics/pokemon/ribombee/anim_front.png differ diff --git a/graphics/pokemon/ribombee/front.png b/graphics/pokemon/ribombee/front.png deleted file mode 100644 index 77a4dd1497..0000000000 Binary files a/graphics/pokemon/ribombee/front.png and /dev/null differ diff --git a/graphics/pokemon/rillaboom/gigantamax/back.png b/graphics/pokemon/rillaboom/gigantamax/back.png new file mode 100644 index 0000000000..d15e4e4c3a Binary files /dev/null and b/graphics/pokemon/rillaboom/gigantamax/back.png differ diff --git a/graphics/pokemon/rillaboom/gigantamax/front.png b/graphics/pokemon/rillaboom/gigantamax/front.png new file mode 100644 index 0000000000..922860400d Binary files /dev/null and b/graphics/pokemon/rillaboom/gigantamax/front.png differ diff --git a/graphics/pokemon/rillaboom/gigantamax/icon.png b/graphics/pokemon/rillaboom/gigantamax/icon.png new file mode 100644 index 0000000000..d149814fff Binary files /dev/null and b/graphics/pokemon/rillaboom/gigantamax/icon.png differ diff --git a/graphics/pokemon/rillaboom/gigantamax/normal.pal b/graphics/pokemon/rillaboom/gigantamax/normal.pal new file mode 100644 index 0000000000..6f782183ae --- /dev/null +++ b/graphics/pokemon/rillaboom/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +104 68 64 +1 47 25 +16 16 16 +182 127 76 +0 132 69 +0 89 47 +147 108 66 +50 29 35 +246 226 161 +181 154 125 +66 43 47 +133 117 80 +252 252 252 +250 113 61 +180 66 56 diff --git a/graphics/pokemon/rillaboom/gigantamax/shiny.pal b/graphics/pokemon/rillaboom/gigantamax/shiny.pal new file mode 100644 index 0000000000..bec70743b2 --- /dev/null +++ b/graphics/pokemon/rillaboom/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +95 43 53 +54 68 6 +16 16 16 +182 127 76 +140 180 0 +89 117 4 +147 108 66 +46 19 34 +246 226 161 +158 144 129 +60 30 43 +101 94 77 +252 252 252 +250 113 61 +180 66 56 diff --git a/graphics/pokemon/roaring_moon/back.png b/graphics/pokemon/roaring_moon/back.png new file mode 100644 index 0000000000..01813ff4f9 Binary files /dev/null and b/graphics/pokemon/roaring_moon/back.png differ diff --git a/graphics/pokemon/roaring_moon/front.png b/graphics/pokemon/roaring_moon/front.png new file mode 100644 index 0000000000..c1a8a05f06 Binary files /dev/null and b/graphics/pokemon/roaring_moon/front.png differ diff --git a/graphics/pokemon/roaring_moon/icon.png b/graphics/pokemon/roaring_moon/icon.png new file mode 100755 index 0000000000..d8d82fb015 Binary files /dev/null and b/graphics/pokemon/roaring_moon/icon.png differ diff --git a/graphics/pokemon/roaring_moon/normal.pal b/graphics/pokemon/roaring_moon/normal.pal new file mode 100644 index 0000000000..2deb541050 --- /dev/null +++ b/graphics/pokemon/roaring_moon/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +39 88 94 +96 231 236 +60 137 171 +0 0 0 +185 107 230 +105 17 39 +214 38 82 +162 27 60 +129 100 179 +105 105 105 +171 171 171 +247 247 247 +247 165 42 +251 236 49 +52 49 49 diff --git a/graphics/pokemon/roaring_moon/shiny.pal b/graphics/pokemon/roaring_moon/shiny.pal new file mode 100644 index 0000000000..42fb2538d7 --- /dev/null +++ b/graphics/pokemon/roaring_moon/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +62 125 78 +151 235 188 +86 180 117 +0 0 0 +223 213 113 +105 17 39 +245 62 68 +181 36 39 +174 162 85 +105 105 105 +171 171 171 +247 247 247 +247 165 42 +251 236 49 +52 49 49 diff --git a/graphics/pokemon/rockruff/anim_front.png b/graphics/pokemon/rockruff/anim_front.png new file mode 100644 index 0000000000..d806387c61 Binary files /dev/null and b/graphics/pokemon/rockruff/anim_front.png differ diff --git a/graphics/pokemon/rockruff/front.png b/graphics/pokemon/rockruff/front.png deleted file mode 100644 index 1199fbb592..0000000000 Binary files a/graphics/pokemon/rockruff/front.png and /dev/null differ diff --git a/graphics/pokemon/rowlet/anim_front.png b/graphics/pokemon/rowlet/anim_front.png new file mode 100644 index 0000000000..eea15ffec1 Binary files /dev/null and b/graphics/pokemon/rowlet/anim_front.png differ diff --git a/graphics/pokemon/rowlet/front.png b/graphics/pokemon/rowlet/front.png deleted file mode 100644 index 55953244ec..0000000000 Binary files a/graphics/pokemon/rowlet/front.png and /dev/null differ diff --git a/graphics/pokemon/sandaconda/gigantamax/back.png b/graphics/pokemon/sandaconda/gigantamax/back.png new file mode 100644 index 0000000000..d1cf5184bc Binary files /dev/null and b/graphics/pokemon/sandaconda/gigantamax/back.png differ diff --git a/graphics/pokemon/sandaconda/gigantamax/front.png b/graphics/pokemon/sandaconda/gigantamax/front.png new file mode 100644 index 0000000000..33e3451fa5 Binary files /dev/null and b/graphics/pokemon/sandaconda/gigantamax/front.png differ diff --git a/graphics/pokemon/sandaconda/gigantamax/icon.png b/graphics/pokemon/sandaconda/gigantamax/icon.png new file mode 100644 index 0000000000..4b19d9570a Binary files /dev/null and b/graphics/pokemon/sandaconda/gigantamax/icon.png differ diff --git a/graphics/pokemon/sandaconda/gigantamax/normal.pal b/graphics/pokemon/sandaconda/gigantamax/normal.pal new file mode 100644 index 0000000000..f06c695866 --- /dev/null +++ b/graphics/pokemon/sandaconda/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +167 114 78 +105 97 69 +16 16 16 +245 243 211 +180 163 109 +189 154 106 +217 202 179 +79 59 35 +126 85 67 +175 120 86 +187 32 15 +233 63 109 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/sandaconda/gigantamax/shiny.pal b/graphics/pokemon/sandaconda/gigantamax/shiny.pal new file mode 100644 index 0000000000..3c847bf83e --- /dev/null +++ b/graphics/pokemon/sandaconda/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +167 114 78 +94 98 76 +16 16 16 +231 238 218 +159 165 124 +189 154 106 +217 202 179 +59 59 55 +110 87 83 +150 119 111 +187 32 15 +233 63 109 +13 13 13 +14 14 14 +15 15 15 diff --git a/graphics/pokemon/sandy_shocks/back.png b/graphics/pokemon/sandy_shocks/back.png new file mode 100644 index 0000000000..2ee0ab030c Binary files /dev/null and b/graphics/pokemon/sandy_shocks/back.png differ diff --git a/graphics/pokemon/sandy_shocks/front.png b/graphics/pokemon/sandy_shocks/front.png new file mode 100644 index 0000000000..95b0124a6c Binary files /dev/null and b/graphics/pokemon/sandy_shocks/front.png differ diff --git a/graphics/pokemon/sandy_shocks/icon.png b/graphics/pokemon/sandy_shocks/icon.png new file mode 100755 index 0000000000..99d693a1ac Binary files /dev/null and b/graphics/pokemon/sandy_shocks/icon.png differ diff --git a/graphics/pokemon/sandy_shocks/normal.pal b/graphics/pokemon/sandy_shocks/normal.pal new file mode 100644 index 0000000000..4b0c513bd9 --- /dev/null +++ b/graphics/pokemon/sandy_shocks/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +238 24 0 +213 170 57 +213 246 222 +180 214 189 +180 182 180 +115 101 131 +41 36 32 +139 182 164 +90 93 90 +139 137 139 +41 129 172 +57 48 49 +255 222 90 +0 0 0 +90 129 98 diff --git a/graphics/pokemon/sandy_shocks/shiny.pal b/graphics/pokemon/sandy_shocks/shiny.pal new file mode 100644 index 0000000000..6a89c90cc4 --- /dev/null +++ b/graphics/pokemon/sandy_shocks/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +238 24 0 +213 170 57 +255 248 179 +184 179 120 +180 182 180 +115 101 131 +41 36 32 +212 179 120 +90 93 90 +139 137 139 +41 129 172 +57 48 49 +255 222 90 +0 0 0 +153 137 87 diff --git a/graphics/pokemon/scovillain/back.png b/graphics/pokemon/scovillain/back.png new file mode 100644 index 0000000000..b61864b22e Binary files /dev/null and b/graphics/pokemon/scovillain/back.png differ diff --git a/graphics/pokemon/scovillain/front.png b/graphics/pokemon/scovillain/front.png new file mode 100644 index 0000000000..bed003463d Binary files /dev/null and b/graphics/pokemon/scovillain/front.png differ diff --git a/graphics/pokemon/scovillain/icon.png b/graphics/pokemon/scovillain/icon.png new file mode 100755 index 0000000000..f346a1cb48 Binary files /dev/null and b/graphics/pokemon/scovillain/icon.png differ diff --git a/graphics/pokemon/scovillain/normal.pal b/graphics/pokemon/scovillain/normal.pal new file mode 100644 index 0000000000..6d6808d9e4 --- /dev/null +++ b/graphics/pokemon/scovillain/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 104 40 +16 16 16 +80 192 72 +120 248 96 +136 32 24 +0 72 24 +240 72 40 +16 152 72 +248 136 80 +248 248 248 +248 152 40 +0 40 32 +0 72 48 +16 104 48 +0 64 40 diff --git a/graphics/pokemon/scovillain/shiny.pal b/graphics/pokemon/scovillain/shiny.pal new file mode 100644 index 0000000000..f43675df15 --- /dev/null +++ b/graphics/pokemon/scovillain/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 104 40 +16 16 16 +80 192 72 +120 248 96 +136 32 24 +120 96 40 +240 72 40 +248 232 152 +248 136 80 +248 248 248 +248 152 40 +16 40 96 +24 72 128 +40 112 152 +240 240 240 diff --git a/graphics/pokemon/scream_tail/back.png b/graphics/pokemon/scream_tail/back.png new file mode 100644 index 0000000000..a0607a0e15 Binary files /dev/null and b/graphics/pokemon/scream_tail/back.png differ diff --git a/graphics/pokemon/scream_tail/front.png b/graphics/pokemon/scream_tail/front.png new file mode 100644 index 0000000000..2d320fd0d4 Binary files /dev/null and b/graphics/pokemon/scream_tail/front.png differ diff --git a/graphics/pokemon/scream_tail/icon.png b/graphics/pokemon/scream_tail/icon.png new file mode 100755 index 0000000000..09ca4083ec Binary files /dev/null and b/graphics/pokemon/scream_tail/icon.png differ diff --git a/graphics/pokemon/scream_tail/normal.pal b/graphics/pokemon/scream_tail/normal.pal new file mode 100644 index 0000000000..bedc2d2abf --- /dev/null +++ b/graphics/pokemon/scream_tail/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +108 45 45 +0 0 0 +246 144 164 +251 188 201 +173 92 108 +136 64 64 +238 95 124 +186 81 102 +48 34 34 +255 121 163 +255 255 255 +200 184 248 +140 117 33 +203 174 40 +255 220 50 diff --git a/graphics/pokemon/scream_tail/shiny.pal b/graphics/pokemon/scream_tail/shiny.pal new file mode 100644 index 0000000000..21e95217d4 --- /dev/null +++ b/graphics/pokemon/scream_tail/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +105 45 108 +0 0 0 +229 148 224 +246 203 246 +176 83 153 +136 64 132 +211 74 189 +158 78 154 +48 34 34 +255 121 163 +255 255 255 +200 184 248 +149 52 52 +202 67 95 +237 94 83 diff --git a/graphics/pokemon/shroodle/back.png b/graphics/pokemon/shroodle/back.png new file mode 100755 index 0000000000..ffecfe183c Binary files /dev/null and b/graphics/pokemon/shroodle/back.png differ diff --git a/graphics/pokemon/shroodle/front.png b/graphics/pokemon/shroodle/front.png new file mode 100755 index 0000000000..38dac9194a Binary files /dev/null and b/graphics/pokemon/shroodle/front.png differ diff --git a/graphics/pokemon/shroodle/icon.png b/graphics/pokemon/shroodle/icon.png new file mode 100755 index 0000000000..1e7a9430d8 Binary files /dev/null and b/graphics/pokemon/shroodle/icon.png differ diff --git a/graphics/pokemon/shroodle/normal.pal b/graphics/pokemon/shroodle/normal.pal new file mode 100755 index 0000000000..700c1f4c9f --- /dev/null +++ b/graphics/pokemon/shroodle/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 88 88 +232 236 200 +16 16 16 +176 168 136 +64 76 104 +72 60 56 +48 36 40 +128 156 168 +152 208 176 +96 108 136 +248 252 248 +216 236 192 +184 176 184 +160 112 224 +0 0 0 diff --git a/graphics/pokemon/shroodle/shiny.pal b/graphics/pokemon/shroodle/shiny.pal new file mode 100755 index 0000000000..bb3f9a6a7d --- /dev/null +++ b/graphics/pokemon/shroodle/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 88 88 +232 236 200 +16 16 16 +176 168 136 +64 76 104 +72 60 56 +48 36 40 +128 156 168 +168 168 224 +96 108 136 +248 252 248 +208 200 248 +184 176 184 +160 112 224 +0 0 0 diff --git a/graphics/pokemon/sinistcha/back.png b/graphics/pokemon/sinistcha/back.png new file mode 100644 index 0000000000..dbb51bbf33 Binary files /dev/null and b/graphics/pokemon/sinistcha/back.png differ diff --git a/graphics/pokemon/sinistcha/front.png b/graphics/pokemon/sinistcha/front.png new file mode 100644 index 0000000000..4131a22b9f Binary files /dev/null and b/graphics/pokemon/sinistcha/front.png differ diff --git a/graphics/pokemon/sinistcha/icon.png b/graphics/pokemon/sinistcha/icon.png new file mode 100644 index 0000000000..74fc0b2643 Binary files /dev/null and b/graphics/pokemon/sinistcha/icon.png differ diff --git a/graphics/pokemon/sinistcha/normal.pal b/graphics/pokemon/sinistcha/normal.pal new file mode 100644 index 0000000000..16008ccdf1 --- /dev/null +++ b/graphics/pokemon/sinistcha/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +115 197 164 +76 58 58 +105 68 27 +147 138 68 +159 153 130 +219 210 145 +167 186 114 +45 33 33 +51 99 34 +93 158 74 +120 196 99 +247 215 98 +5 5 5 +208 210 193 +241 237 235 diff --git a/graphics/pokemon/sinistcha/shiny.pal b/graphics/pokemon/sinistcha/shiny.pal new file mode 100644 index 0000000000..c769e9d1a1 --- /dev/null +++ b/graphics/pokemon/sinistcha/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +115 197 164 +32 88 15 +105 68 27 +147 138 68 +159 153 130 +219 210 145 +167 186 114 +45 33 33 +51 99 34 +93 158 74 +120 196 99 +247 215 98 +5 5 5 +208 210 193 +241 237 235 diff --git a/graphics/pokemon/skeledirge/back.png b/graphics/pokemon/skeledirge/back.png new file mode 100644 index 0000000000..6471ffe6c2 Binary files /dev/null and b/graphics/pokemon/skeledirge/back.png differ diff --git a/graphics/pokemon/skeledirge/front.png b/graphics/pokemon/skeledirge/front.png new file mode 100644 index 0000000000..cf238da178 Binary files /dev/null and b/graphics/pokemon/skeledirge/front.png differ diff --git a/graphics/pokemon/skeledirge/icon.png b/graphics/pokemon/skeledirge/icon.png new file mode 100755 index 0000000000..901aab95d9 Binary files /dev/null and b/graphics/pokemon/skeledirge/icon.png differ diff --git a/graphics/pokemon/skeledirge/normal.pal b/graphics/pokemon/skeledirge/normal.pal new file mode 100644 index 0000000000..fbb60828f9 --- /dev/null +++ b/graphics/pokemon/skeledirge/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +132 121 129 +255 70 0 +248 248 240 +255 177 0 +215 193 202 +254 233 0 +255 129 0 +53 53 53 +122 7 63 +214 35 26 +255 44 35 +0 0 0 +187 26 205 +26 26 26 +79 79 79 diff --git a/graphics/pokemon/skeledirge/shiny.pal b/graphics/pokemon/skeledirge/shiny.pal new file mode 100644 index 0000000000..4354f676d3 --- /dev/null +++ b/graphics/pokemon/skeledirge/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +132 121 129 +255 70 0 +248 248 240 +255 177 0 +215 193 202 +254 233 0 +255 129 0 +53 53 53 +122 7 63 +186 44 106 +247 87 139 +0 0 0 +187 26 205 +26 26 26 +79 79 79 diff --git a/graphics/pokemon/slither_wing/back.png b/graphics/pokemon/slither_wing/back.png new file mode 100644 index 0000000000..cfa4c99d75 Binary files /dev/null and b/graphics/pokemon/slither_wing/back.png differ diff --git a/graphics/pokemon/slither_wing/front.png b/graphics/pokemon/slither_wing/front.png new file mode 100644 index 0000000000..d3c1e65969 Binary files /dev/null and b/graphics/pokemon/slither_wing/front.png differ diff --git a/graphics/pokemon/slither_wing/icon.png b/graphics/pokemon/slither_wing/icon.png new file mode 100755 index 0000000000..e969280a5d Binary files /dev/null and b/graphics/pokemon/slither_wing/icon.png differ diff --git a/graphics/pokemon/slither_wing/normal.pal b/graphics/pokemon/slither_wing/normal.pal new file mode 100644 index 0000000000..a083030d3f --- /dev/null +++ b/graphics/pokemon/slither_wing/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +156 222 24 +172 170 172 +172 52 49 +49 157 139 +49 56 74 +246 246 246 +238 210 98 +213 255 115 +123 32 0 +222 161 57 +24 24 32 +246 64 49 +65 80 115 +230 52 41 +255 48 32 diff --git a/graphics/pokemon/slither_wing/shiny.pal b/graphics/pokemon/slither_wing/shiny.pal new file mode 100644 index 0000000000..2cf5898f95 --- /dev/null +++ b/graphics/pokemon/slither_wing/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +255 49 33 +172 170 172 +191 148 19 +49 157 139 +49 56 74 +246 246 246 +255 229 113 +255 96 84 +153 119 15 +236 200 73 +24 24 32 +217 171 33 +65 80 115 +230 52 41 +255 48 32 diff --git a/graphics/pokemon/smoliv/back.png b/graphics/pokemon/smoliv/back.png new file mode 100755 index 0000000000..1b1ac3e681 Binary files /dev/null and b/graphics/pokemon/smoliv/back.png differ diff --git a/graphics/pokemon/smoliv/front.png b/graphics/pokemon/smoliv/front.png new file mode 100755 index 0000000000..42457fdf5b Binary files /dev/null and b/graphics/pokemon/smoliv/front.png differ diff --git a/graphics/pokemon/smoliv/icon.png b/graphics/pokemon/smoliv/icon.png new file mode 100755 index 0000000000..53b8ffc945 Binary files /dev/null and b/graphics/pokemon/smoliv/icon.png differ diff --git a/graphics/pokemon/smoliv/normal.pal b/graphics/pokemon/smoliv/normal.pal new file mode 100755 index 0000000000..4a748c1b5c --- /dev/null +++ b/graphics/pokemon/smoliv/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +119 94 27 +183 167 80 +223 215 109 +246 240 148 +8 8 8 +43 108 42 +120 181 63 +96 146 64 +114 132 41 +142 171 58 +201 221 91 +238 234 136 +242 242 242 diff --git a/graphics/pokemon/smoliv/shiny.pal b/graphics/pokemon/smoliv/shiny.pal new file mode 100755 index 0000000000..7b86219a39 --- /dev/null +++ b/graphics/pokemon/smoliv/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +35 18 51 +54 41 63 +89 76 95 +128 115 134 +8 8 8 +43 108 42 +120 181 63 +96 146 64 +114 132 41 +172 174 55 +224 213 87 +240 211 134 +242 242 242 diff --git a/graphics/pokemon/snorlax/gigantamax/back.png b/graphics/pokemon/snorlax/gigantamax/back.png new file mode 100644 index 0000000000..c90fff95cc Binary files /dev/null and b/graphics/pokemon/snorlax/gigantamax/back.png differ diff --git a/graphics/pokemon/snorlax/gigantamax/front.png b/graphics/pokemon/snorlax/gigantamax/front.png new file mode 100644 index 0000000000..ef39f86990 Binary files /dev/null and b/graphics/pokemon/snorlax/gigantamax/front.png differ diff --git a/graphics/pokemon/snorlax/gigantamax/icon.png b/graphics/pokemon/snorlax/gigantamax/icon.png new file mode 100644 index 0000000000..e804e91963 Binary files /dev/null and b/graphics/pokemon/snorlax/gigantamax/icon.png differ diff --git a/graphics/pokemon/snorlax/gigantamax/normal.pal b/graphics/pokemon/snorlax/gigantamax/normal.pal new file mode 100644 index 0000000000..4441577deb --- /dev/null +++ b/graphics/pokemon/snorlax/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +246 230 189 +160 160 160 +230 197 172 +16 57 65 +84 121 43 +98 65 32 +164 115 82 +222 86 86 +252 139 159 +187 227 91 +137 180 50 +49 87 63 +49 90 123 +6 159 95 diff --git a/graphics/pokemon/snorlax/gigantamax/shiny.pal b/graphics/pokemon/snorlax/gigantamax/shiny.pal new file mode 100644 index 0000000000..d29a9cda8b --- /dev/null +++ b/graphics/pokemon/snorlax/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +247 230 173 +160 160 160 +230 206 156 +8 49 123 +51 92 40 +99 74 25 +165 123 74 +215 69 47 +251 82 90 +187 227 91 +81 136 50 +141 93 10 +33 74 165 +221 146 16 diff --git a/graphics/pokemon/spidops/back.png b/graphics/pokemon/spidops/back.png new file mode 100644 index 0000000000..6a2a3077e9 Binary files /dev/null and b/graphics/pokemon/spidops/back.png differ diff --git a/graphics/pokemon/spidops/front.png b/graphics/pokemon/spidops/front.png new file mode 100644 index 0000000000..944a911070 Binary files /dev/null and b/graphics/pokemon/spidops/front.png differ diff --git a/graphics/pokemon/spidops/icon.png b/graphics/pokemon/spidops/icon.png new file mode 100755 index 0000000000..c35aa36c61 Binary files /dev/null and b/graphics/pokemon/spidops/icon.png differ diff --git a/graphics/pokemon/spidops/normal.pal b/graphics/pokemon/spidops/normal.pal new file mode 100644 index 0000000000..4076c82e1a --- /dev/null +++ b/graphics/pokemon/spidops/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 64 8 +152 200 40 +248 248 248 +72 120 16 +16 16 16 +224 240 112 +80 40 16 +184 136 56 +56 48 80 +144 136 152 +120 80 32 +224 192 112 +80 80 104 +152 160 184 +248 248 248 diff --git a/graphics/pokemon/spidops/shiny.pal b/graphics/pokemon/spidops/shiny.pal new file mode 100644 index 0000000000..5c6fa758df --- /dev/null +++ b/graphics/pokemon/spidops/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +112 32 96 +248 120 192 +240 40 48 +176 72 152 +16 16 16 +248 176 208 +32 24 64 +72 80 144 +56 48 80 +144 136 152 +48 48 96 +136 152 192 +96 8 40 +152 24 40 +248 248 248 diff --git a/graphics/pokemon/sprigatito/back.png b/graphics/pokemon/sprigatito/back.png new file mode 100644 index 0000000000..61a03040cc Binary files /dev/null and b/graphics/pokemon/sprigatito/back.png differ diff --git a/graphics/pokemon/sprigatito/front.png b/graphics/pokemon/sprigatito/front.png new file mode 100644 index 0000000000..f897380ed8 Binary files /dev/null and b/graphics/pokemon/sprigatito/front.png differ diff --git a/graphics/pokemon/sprigatito/icon.png b/graphics/pokemon/sprigatito/icon.png new file mode 100755 index 0000000000..114fcff288 Binary files /dev/null and b/graphics/pokemon/sprigatito/icon.png differ diff --git a/graphics/pokemon/sprigatito/normal.pal b/graphics/pokemon/sprigatito/normal.pal new file mode 100644 index 0000000000..22667a18d7 --- /dev/null +++ b/graphics/pokemon/sprigatito/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +0 101 49 +63 177 33 +6 6 6 +166 185 142 +0 129 52 +107 138 59 +204 232 185 +68 85 57 +171 211 86 +252 252 252 +220 48 126 +225 112 181 +45 45 45 +155 92 114 +229 142 166 diff --git a/graphics/pokemon/sprigatito/shiny.pal b/graphics/pokemon/sprigatito/shiny.pal new file mode 100644 index 0000000000..b73b81749c --- /dev/null +++ b/graphics/pokemon/sprigatito/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +0 101 49 +0 206 111 +6 6 6 +152 200 91 +12 144 89 +107 138 59 +211 252 128 +68 85 57 +171 211 86 +252 252 252 +151 80 211 +210 138 241 +45 45 45 +155 92 114 +229 142 166 diff --git a/graphics/pokemon/sprigatito/sprigatito.png b/graphics/pokemon/sprigatito/sprigatito.png new file mode 100755 index 0000000000..04ed46aef2 Binary files /dev/null and b/graphics/pokemon/sprigatito/sprigatito.png differ diff --git a/graphics/pokemon/squawkabilly/back.png b/graphics/pokemon/squawkabilly/back.png new file mode 100644 index 0000000000..73c3df2d9a Binary files /dev/null and b/graphics/pokemon/squawkabilly/back.png differ diff --git a/graphics/pokemon/squawkabilly/blue_plumage/icon.png b/graphics/pokemon/squawkabilly/blue_plumage/icon.png new file mode 100755 index 0000000000..4ad732211c Binary files /dev/null and b/graphics/pokemon/squawkabilly/blue_plumage/icon.png differ diff --git a/graphics/pokemon/squawkabilly/blue_plumage/normal.pal b/graphics/pokemon/squawkabilly/blue_plumage/normal.pal new file mode 100644 index 0000000000..3e2cbb1bed --- /dev/null +++ b/graphics/pokemon/squawkabilly/blue_plumage/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +63 62 69 +82 88 90 +16 16 16 +49 162 228 +30 79 113 +212 204 208 +42 126 176 +197 142 49 +255 231 166 +255 193 69 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/blue_plumage/shiny.pal b/graphics/pokemon/squawkabilly/blue_plumage/shiny.pal new file mode 100644 index 0000000000..2a2e3e6b18 --- /dev/null +++ b/graphics/pokemon/squawkabilly/blue_plumage/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +154 107 113 +203 154 162 +16 16 16 +49 162 228 +30 79 113 +212 204 208 +42 126 176 +201 145 129 +255 231 225 +246 196 181 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/front.png b/graphics/pokemon/squawkabilly/front.png new file mode 100644 index 0000000000..734cc54ef4 Binary files /dev/null and b/graphics/pokemon/squawkabilly/front.png differ diff --git a/graphics/pokemon/squawkabilly/green_plumage/icon.png b/graphics/pokemon/squawkabilly/green_plumage/icon.png new file mode 100755 index 0000000000..540b7521a8 Binary files /dev/null and b/graphics/pokemon/squawkabilly/green_plumage/icon.png differ diff --git a/graphics/pokemon/squawkabilly/green_plumage/normal.pal b/graphics/pokemon/squawkabilly/green_plumage/normal.pal new file mode 100644 index 0000000000..191b1c0526 --- /dev/null +++ b/graphics/pokemon/squawkabilly/green_plumage/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +63 62 69 +82 88 90 +16 16 16 +112 213 77 +46 114 37 +212 204 208 +92 168 65 +197 142 49 +255 231 166 +255 193 69 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/green_plumage/shiny.pal b/graphics/pokemon/squawkabilly/green_plumage/shiny.pal new file mode 100644 index 0000000000..6d574415a4 --- /dev/null +++ b/graphics/pokemon/squawkabilly/green_plumage/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +154 107 113 +203 154 162 +16 16 16 +112 213 77 +46 114 37 +212 204 208 +92 168 65 +201 145 129 +255 231 225 +246 196 181 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/white_plumage/icon.png b/graphics/pokemon/squawkabilly/white_plumage/icon.png new file mode 100755 index 0000000000..a784c6cdda Binary files /dev/null and b/graphics/pokemon/squawkabilly/white_plumage/icon.png differ diff --git a/graphics/pokemon/squawkabilly/white_plumage/normal.pal b/graphics/pokemon/squawkabilly/white_plumage/normal.pal new file mode 100644 index 0000000000..b23d3404a0 --- /dev/null +++ b/graphics/pokemon/squawkabilly/white_plumage/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +63 62 69 +82 88 90 +16 16 16 +217 217 217 +121 112 115 +212 204 208 +184 173 175 +197 142 49 +255 231 166 +255 193 69 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/white_plumage/shiny.pal b/graphics/pokemon/squawkabilly/white_plumage/shiny.pal new file mode 100644 index 0000000000..c747e272fc --- /dev/null +++ b/graphics/pokemon/squawkabilly/white_plumage/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +154 107 113 +203 154 162 +16 16 16 +217 217 217 +121 112 115 +212 204 208 +184 173 175 +201 145 129 +255 231 225 +246 196 181 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/icon.png b/graphics/pokemon/squawkabilly/yellow_plumage/icon.png new file mode 100755 index 0000000000..a042d981d0 Binary files /dev/null and b/graphics/pokemon/squawkabilly/yellow_plumage/icon.png differ diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/normal.pal b/graphics/pokemon/squawkabilly/yellow_plumage/normal.pal new file mode 100644 index 0000000000..f6b949ee7c --- /dev/null +++ b/graphics/pokemon/squawkabilly/yellow_plumage/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +63 62 69 +82 88 90 +16 16 16 +255 221 60 +140 109 41 +212 204 208 +200 167 49 +197 142 49 +255 231 166 +255 193 69 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/shiny.pal b/graphics/pokemon/squawkabilly/yellow_plumage/shiny.pal new file mode 100644 index 0000000000..2340522b94 --- /dev/null +++ b/graphics/pokemon/squawkabilly/yellow_plumage/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +154 107 113 +203 154 162 +16 16 16 +255 221 60 +140 109 41 +212 204 208 +200 167 49 +201 145 129 +255 231 225 +246 196 181 +253 253 253 +244 244 244 +148 95 31 +196 163 114 diff --git a/graphics/pokemon/tadbulb/back.png b/graphics/pokemon/tadbulb/back.png new file mode 100644 index 0000000000..371fd9e035 Binary files /dev/null and b/graphics/pokemon/tadbulb/back.png differ diff --git a/graphics/pokemon/tadbulb/front.png b/graphics/pokemon/tadbulb/front.png new file mode 100644 index 0000000000..4d58083584 Binary files /dev/null and b/graphics/pokemon/tadbulb/front.png differ diff --git a/graphics/pokemon/tadbulb/icon.png b/graphics/pokemon/tadbulb/icon.png new file mode 100755 index 0000000000..0341a387fb Binary files /dev/null and b/graphics/pokemon/tadbulb/icon.png differ diff --git a/graphics/pokemon/tadbulb/normal.pal b/graphics/pokemon/tadbulb/normal.pal new file mode 100644 index 0000000000..be44b326bb --- /dev/null +++ b/graphics/pokemon/tadbulb/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +154 212 167 +126 66 18 +210 144 42 +250 233 41 +255 252 139 +252 252 252 +229 185 42 +8 8 8 +195 179 71 +136 120 103 +56 42 36 +194 139 76 +247 156 50 +92 78 68 +113 53 28 +160 91 41 diff --git a/graphics/pokemon/tadbulb/shiny.pal b/graphics/pokemon/tadbulb/shiny.pal new file mode 100644 index 0000000000..e26b8aaaf0 --- /dev/null +++ b/graphics/pokemon/tadbulb/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +154 212 167 +126 66 18 +210 144 42 +250 233 41 +255 252 139 +252 252 252 +229 185 42 +8 8 8 +195 179 71 +136 120 103 +56 42 36 +196 108 89 +255 97 75 +92 78 68 +113 53 28 +190 54 51 diff --git a/graphics/pokemon/talonflame/anim_front.png b/graphics/pokemon/talonflame/anim_front.png index db505ac63a..c8257da9e2 100644 Binary files a/graphics/pokemon/talonflame/anim_front.png and b/graphics/pokemon/talonflame/anim_front.png differ diff --git a/graphics/pokemon/tandemaus/back.png b/graphics/pokemon/tandemaus/back.png new file mode 100644 index 0000000000..f794a4706f Binary files /dev/null and b/graphics/pokemon/tandemaus/back.png differ diff --git a/graphics/pokemon/tandemaus/front.png b/graphics/pokemon/tandemaus/front.png new file mode 100644 index 0000000000..2ebeacec94 Binary files /dev/null and b/graphics/pokemon/tandemaus/front.png differ diff --git a/graphics/pokemon/tandemaus/icon.png b/graphics/pokemon/tandemaus/icon.png new file mode 100755 index 0000000000..8effa87c57 Binary files /dev/null and b/graphics/pokemon/tandemaus/icon.png differ diff --git a/graphics/pokemon/tandemaus/normal.pal b/graphics/pokemon/tandemaus/normal.pal new file mode 100644 index 0000000000..ae74aa96e5 --- /dev/null +++ b/graphics/pokemon/tandemaus/normal.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +154 212 167 +123 120 113 +248 248 243 +86 82 78 +8 8 8 +190 189 182 +219 219 213 +255 255 255 +75 85 113 +157 181 204 +203 222 231 diff --git a/graphics/pokemon/tandemaus/shiny.pal b/graphics/pokemon/tandemaus/shiny.pal new file mode 100644 index 0000000000..c1b5d3193a --- /dev/null +++ b/graphics/pokemon/tandemaus/shiny.pal @@ -0,0 +1,14 @@ +JASC-PAL +0100 +11 +154 212 167 +123 120 113 +248 248 243 +86 82 78 +8 8 8 +190 189 182 +219 219 213 +255 255 255 +110 92 71 +185 170 137 +223 212 165 diff --git a/graphics/pokemon/tarountula/back.png b/graphics/pokemon/tarountula/back.png new file mode 100755 index 0000000000..0b9eaa9de7 Binary files /dev/null and b/graphics/pokemon/tarountula/back.png differ diff --git a/graphics/pokemon/tarountula/front.png b/graphics/pokemon/tarountula/front.png new file mode 100755 index 0000000000..8bf672067e Binary files /dev/null and b/graphics/pokemon/tarountula/front.png differ diff --git a/graphics/pokemon/tarountula/icon.png b/graphics/pokemon/tarountula/icon.png new file mode 100755 index 0000000000..d4802eb0ea Binary files /dev/null and b/graphics/pokemon/tarountula/icon.png differ diff --git a/graphics/pokemon/tarountula/normal.pal b/graphics/pokemon/tarountula/normal.pal new file mode 100755 index 0000000000..db11bb172b --- /dev/null +++ b/graphics/pokemon/tarountula/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +116 112 122 +175 168 175 +229 230 229 +8 8 8 +107 99 32 +240 228 55 +182 164 36 +253 253 253 +179 179 179 +36 71 99 +6 82 4 +55 109 7 +81 163 7 diff --git a/graphics/pokemon/tarountula/shiny.pal b/graphics/pokemon/tarountula/shiny.pal new file mode 100755 index 0000000000..74a71a8592 --- /dev/null +++ b/graphics/pokemon/tarountula/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +154 212 167 +105 30 23 +153 43 34 +206 62 53 +8 8 8 +34 55 69 +92 124 150 +57 93 113 +253 253 253 +179 179 179 +36 71 99 +66 34 44 +96 57 69 +128 76 99 diff --git a/graphics/pokemon/tatsugiri/curly/back.png b/graphics/pokemon/tatsugiri/curly/back.png new file mode 100644 index 0000000000..9db928473e Binary files /dev/null and b/graphics/pokemon/tatsugiri/curly/back.png differ diff --git a/graphics/pokemon/tatsugiri/curly/front.png b/graphics/pokemon/tatsugiri/curly/front.png new file mode 100644 index 0000000000..a32ade902e Binary files /dev/null and b/graphics/pokemon/tatsugiri/curly/front.png differ diff --git a/graphics/pokemon/tatsugiri/curly/icon.png b/graphics/pokemon/tatsugiri/curly/icon.png new file mode 100755 index 0000000000..98fe8aa569 Binary files /dev/null and b/graphics/pokemon/tatsugiri/curly/icon.png differ diff --git a/graphics/pokemon/tatsugiri/curly/normal.pal b/graphics/pokemon/tatsugiri/curly/normal.pal new file mode 100644 index 0000000000..ce25aa7da0 --- /dev/null +++ b/graphics/pokemon/tatsugiri/curly/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +147 51 34 +255 105 47 +252 158 121 +206 77 41 +16 16 16 +255 184 152 +117 73 61 +201 134 116 +255 255 255 +128 128 128 +253 253 253 +194 171 151 +113 98 84 +240 235 223 diff --git a/graphics/pokemon/tatsugiri/curly/shiny.pal b/graphics/pokemon/tatsugiri/curly/shiny.pal new file mode 100644 index 0000000000..faa40dca56 --- /dev/null +++ b/graphics/pokemon/tatsugiri/curly/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 211 165 +147 51 34 +174 100 72 +204 104 67 +139 71 46 +16 16 16 +248 112 59 +117 73 61 +201 134 116 +255 255 255 +128 128 128 +253 253 253 +194 171 151 +113 98 84 +240 235 223 diff --git a/graphics/pokemon/tatsugiri/droopy/back.png b/graphics/pokemon/tatsugiri/droopy/back.png new file mode 100644 index 0000000000..6d998537f2 Binary files /dev/null and b/graphics/pokemon/tatsugiri/droopy/back.png differ diff --git a/graphics/pokemon/tatsugiri/droopy/front.png b/graphics/pokemon/tatsugiri/droopy/front.png new file mode 100644 index 0000000000..d4c4512541 Binary files /dev/null and b/graphics/pokemon/tatsugiri/droopy/front.png differ diff --git a/graphics/pokemon/tatsugiri/droopy/icon.png b/graphics/pokemon/tatsugiri/droopy/icon.png new file mode 100755 index 0000000000..48e8c01fd0 Binary files /dev/null and b/graphics/pokemon/tatsugiri/droopy/icon.png differ diff --git a/graphics/pokemon/tatsugiri/droopy/normal.pal b/graphics/pokemon/tatsugiri/droopy/normal.pal new file mode 100644 index 0000000000..09f36e1ae8 --- /dev/null +++ b/graphics/pokemon/tatsugiri/droopy/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 211 165 +136 36 52 +255 74 121 +247 140 161 +195 53 93 +16 16 16 +113 98 84 +240 235 223 +194 171 151 +255 255 255 +128 128 128 +253 253 253 diff --git a/graphics/pokemon/tatsugiri/droopy/shiny.pal b/graphics/pokemon/tatsugiri/droopy/shiny.pal new file mode 100644 index 0000000000..ffa14a905a --- /dev/null +++ b/graphics/pokemon/tatsugiri/droopy/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 211 165 +143 142 145 +229 229 229 +251 251 251 +172 172 172 +16 16 16 +113 98 84 +240 235 223 +194 171 151 +255 255 255 +128 128 128 +253 253 253 diff --git a/graphics/pokemon/tatsugiri/stretchy/back.png b/graphics/pokemon/tatsugiri/stretchy/back.png new file mode 100644 index 0000000000..849782c3b2 Binary files /dev/null and b/graphics/pokemon/tatsugiri/stretchy/back.png differ diff --git a/graphics/pokemon/tatsugiri/stretchy/front.png b/graphics/pokemon/tatsugiri/stretchy/front.png new file mode 100644 index 0000000000..2905c16d9d Binary files /dev/null and b/graphics/pokemon/tatsugiri/stretchy/front.png differ diff --git a/graphics/pokemon/tatsugiri/stretchy/icon.png b/graphics/pokemon/tatsugiri/stretchy/icon.png new file mode 100755 index 0000000000..1634ec3178 Binary files /dev/null and b/graphics/pokemon/tatsugiri/stretchy/icon.png differ diff --git a/graphics/pokemon/tatsugiri/stretchy/normal.pal b/graphics/pokemon/tatsugiri/stretchy/normal.pal new file mode 100644 index 0000000000..9421d8a1fa --- /dev/null +++ b/graphics/pokemon/tatsugiri/stretchy/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +153 211 165 +130 84 17 +241 205 3 +255 235 121 +189 152 14 +16 16 16 +239 196 26 +255 255 255 +128 128 128 +253 253 253 +194 171 151 +113 98 84 +240 235 223 diff --git a/graphics/pokemon/tatsugiri/stretchy/shiny.pal b/graphics/pokemon/tatsugiri/stretchy/shiny.pal new file mode 100644 index 0000000000..efffbf5f15 --- /dev/null +++ b/graphics/pokemon/tatsugiri/stretchy/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +153 211 165 +151 49 13 +248 112 59 +240 159 94 +196 76 29 +16 16 16 +237 184 60 +255 255 255 +128 128 128 +253 253 253 +194 171 151 +113 98 84 +240 235 223 diff --git a/graphics/pokemon/tauros/aqua/back.png b/graphics/pokemon/tauros/aqua/back.png new file mode 100644 index 0000000000..4c0fbe3414 Binary files /dev/null and b/graphics/pokemon/tauros/aqua/back.png differ diff --git a/graphics/pokemon/tauros/aqua/front.png b/graphics/pokemon/tauros/aqua/front.png new file mode 100644 index 0000000000..7cb62beeb3 Binary files /dev/null and b/graphics/pokemon/tauros/aqua/front.png differ diff --git a/graphics/pokemon/tauros/aqua/icon.png b/graphics/pokemon/tauros/aqua/icon.png new file mode 100755 index 0000000000..a0421d7dd0 Binary files /dev/null and b/graphics/pokemon/tauros/aqua/icon.png differ diff --git a/graphics/pokemon/tauros/aqua/normal.pal b/graphics/pokemon/tauros/aqua/normal.pal new file mode 100644 index 0000000000..fa707bea04 --- /dev/null +++ b/graphics/pokemon/tauros/aqua/normal.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +79 79 79 +7 7 7 +53 53 53 +12 26 16 +53 53 53 +104 104 104 +96 96 96 +248 248 248 +185 185 185 +17 17 17 +137 137 137 +67 79 70 +0 104 155 +0 170 227 diff --git a/graphics/pokemon/tauros/aqua/shiny.pal b/graphics/pokemon/tauros/aqua/shiny.pal new file mode 100644 index 0000000000..8ff98dcdac --- /dev/null +++ b/graphics/pokemon/tauros/aqua/shiny.pal @@ -0,0 +1,18 @@ +JASC-PAL +0100 +15 +153 210 164 +53 53 53 +7 7 7 +79 79 79 +12 26 16 +35 35 35 +104 104 104 +96 96 96 +248 248 248 +185 185 185 +17 17 17 +137 137 137 +67 79 70 +0 104 155 +0 170 227 diff --git a/graphics/pokemon/tauros/blaze/back.png b/graphics/pokemon/tauros/blaze/back.png new file mode 100644 index 0000000000..1f56c227c0 Binary files /dev/null and b/graphics/pokemon/tauros/blaze/back.png differ diff --git a/graphics/pokemon/tauros/blaze/front.ase b/graphics/pokemon/tauros/blaze/front.ase new file mode 100644 index 0000000000..f0e5550051 Binary files /dev/null and b/graphics/pokemon/tauros/blaze/front.ase differ diff --git a/graphics/pokemon/tauros/blaze/front.png b/graphics/pokemon/tauros/blaze/front.png new file mode 100644 index 0000000000..a01c02df30 Binary files /dev/null and b/graphics/pokemon/tauros/blaze/front.png differ diff --git a/graphics/pokemon/tauros/blaze/icon.png b/graphics/pokemon/tauros/blaze/icon.png new file mode 100755 index 0000000000..25ec7e0463 Binary files /dev/null and b/graphics/pokemon/tauros/blaze/icon.png differ diff --git a/graphics/pokemon/tauros/blaze/normal.pal b/graphics/pokemon/tauros/blaze/normal.pal new file mode 100644 index 0000000000..f7ad909452 --- /dev/null +++ b/graphics/pokemon/tauros/blaze/normal.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +79 79 79 +53 53 53 +7 7 7 +17 17 17 +206 0 0 +255 26 26 +53 53 53 +87 87 87 +96 96 96 +185 185 185 +137 137 137 +67 79 70 +248 248 248 diff --git a/graphics/pokemon/tauros/blaze/shiny.pal b/graphics/pokemon/tauros/blaze/shiny.pal new file mode 100644 index 0000000000..a1c06e0cd4 --- /dev/null +++ b/graphics/pokemon/tauros/blaze/shiny.pal @@ -0,0 +1,17 @@ +JASC-PAL +0100 +14 +153 210 164 +53 53 53 +79 79 79 +7 7 7 +17 17 17 +206 0 0 +255 26 26 +35 35 35 +104 104 104 +96 96 96 +185 185 185 +137 137 137 +67 79 70 +248 248 248 diff --git a/graphics/pokemon/tauros/combat/back.png b/graphics/pokemon/tauros/combat/back.png new file mode 100644 index 0000000000..d664bdf59f Binary files /dev/null and b/graphics/pokemon/tauros/combat/back.png differ diff --git a/graphics/pokemon/tauros/combat/front.png b/graphics/pokemon/tauros/combat/front.png new file mode 100644 index 0000000000..9b677bac3f Binary files /dev/null and b/graphics/pokemon/tauros/combat/front.png differ diff --git a/graphics/pokemon/tauros/combat/icon.png b/graphics/pokemon/tauros/combat/icon.png new file mode 100755 index 0000000000..daa2eb7882 Binary files /dev/null and b/graphics/pokemon/tauros/combat/icon.png differ diff --git a/graphics/pokemon/tauros/combat/normal.pal b/graphics/pokemon/tauros/combat/normal.pal new file mode 100644 index 0000000000..f59738f9f2 --- /dev/null +++ b/graphics/pokemon/tauros/combat/normal.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 210 164 +79 79 79 +53 53 53 +7 7 7 +17 17 17 +53 53 53 +104 104 104 +96 96 96 +137 137 137 +185 185 185 +104 104 104 +248 248 248 diff --git a/graphics/pokemon/tauros/combat/shiny.pal b/graphics/pokemon/tauros/combat/shiny.pal new file mode 100644 index 0000000000..ce3ef3e7b4 --- /dev/null +++ b/graphics/pokemon/tauros/combat/shiny.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +153 210 164 +53 53 53 +79 79 79 +7 7 7 +17 17 17 +35 35 35 +104 104 104 +96 96 96 +137 137 137 +185 185 185 +67 79 70 +248 248 248 diff --git a/graphics/pokemon/ting_lu/back.png b/graphics/pokemon/ting_lu/back.png new file mode 100644 index 0000000000..e0af1a11c6 Binary files /dev/null and b/graphics/pokemon/ting_lu/back.png differ diff --git a/graphics/pokemon/ting_lu/front.png b/graphics/pokemon/ting_lu/front.png new file mode 100644 index 0000000000..a94820cbf6 Binary files /dev/null and b/graphics/pokemon/ting_lu/front.png differ diff --git a/graphics/pokemon/ting_lu/icon.png b/graphics/pokemon/ting_lu/icon.png new file mode 100755 index 0000000000..0b1f975f9e Binary files /dev/null and b/graphics/pokemon/ting_lu/icon.png differ diff --git a/graphics/pokemon/ting_lu/normal.pal b/graphics/pokemon/ting_lu/normal.pal new file mode 100644 index 0000000000..008d4a094c --- /dev/null +++ b/graphics/pokemon/ting_lu/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 163 +40 51 49 +166 180 167 +74 74 74 +72 104 99 +115 149 139 +15 15 15 +94 70 34 +92 49 39 +140 97 64 +56 30 29 +126 71 66 +149 117 96 +175 149 134 +255 31 26 +255 222 36 diff --git a/graphics/pokemon/ting_lu/shiny.pal b/graphics/pokemon/ting_lu/shiny.pal new file mode 100644 index 0000000000..5476b7d4e9 --- /dev/null +++ b/graphics/pokemon/ting_lu/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 163 +40 51 49 +166 180 167 +74 74 74 +72 104 99 +115 149 139 +15 15 15 +96 88 80 +16 120 120 +209 214 214 +16 64 72 +105 115 143 +136 144 168 +176 184 184 +255 31 26 +255 222 36 diff --git a/graphics/pokemon/tinkatink/back.png b/graphics/pokemon/tinkatink/back.png new file mode 100644 index 0000000000..63fced4482 Binary files /dev/null and b/graphics/pokemon/tinkatink/back.png differ diff --git a/graphics/pokemon/tinkatink/front.png b/graphics/pokemon/tinkatink/front.png new file mode 100644 index 0000000000..f263a31f20 Binary files /dev/null and b/graphics/pokemon/tinkatink/front.png differ diff --git a/graphics/pokemon/tinkatink/icon.png b/graphics/pokemon/tinkatink/icon.png new file mode 100644 index 0000000000..fc7300cb0a Binary files /dev/null and b/graphics/pokemon/tinkatink/icon.png differ diff --git a/graphics/pokemon/tinkatink/normal.pal b/graphics/pokemon/tinkatink/normal.pal new file mode 100644 index 0000000000..fb5977571b --- /dev/null +++ b/graphics/pokemon/tinkatink/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +246 101 172 +246 141 197 +189 206 230 +189 72 115 +8 12 8 +189 48 139 +106 93 164 +189 161 164 +115 141 172 +74 56 139 +246 226 238 +164 182 205 +131 40 82 +57 80 123 +255 255 255 diff --git a/graphics/pokemon/tinkatink/shiny.pal b/graphics/pokemon/tinkatink/shiny.pal new file mode 100644 index 0000000000..aa21dca4e4 --- /dev/null +++ b/graphics/pokemon/tinkatink/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +246 101 172 +246 141 197 +203 131 108 +189 72 115 +8 12 8 +189 48 139 +196 173 161 +189 161 164 +112 73 54 +148 124 112 +246 226 238 +156 105 79 +131 40 82 +51 46 43 +255 255 255 diff --git a/graphics/pokemon/tinkaton/back.png b/graphics/pokemon/tinkaton/back.png new file mode 100644 index 0000000000..d876ebc79a Binary files /dev/null and b/graphics/pokemon/tinkaton/back.png differ diff --git a/graphics/pokemon/tinkaton/front.png b/graphics/pokemon/tinkaton/front.png new file mode 100644 index 0000000000..eb5ce6e8a6 Binary files /dev/null and b/graphics/pokemon/tinkaton/front.png differ diff --git a/graphics/pokemon/tinkaton/icon.png b/graphics/pokemon/tinkaton/icon.png new file mode 100755 index 0000000000..72ab26b86b Binary files /dev/null and b/graphics/pokemon/tinkaton/icon.png differ diff --git a/graphics/pokemon/tinkaton/normal.pal b/graphics/pokemon/tinkaton/normal.pal new file mode 100644 index 0000000000..1c44fa8dc0 --- /dev/null +++ b/graphics/pokemon/tinkaton/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +49 43 51 +236 208 208 +170 132 143 +15 15 15 +100 79 155 +137 113 148 +173 161 197 +74 54 112 +82 46 69 +233 145 181 +236 85 140 +252 252 252 +88 94 163 +167 65 103 +174 89 125 diff --git a/graphics/pokemon/tinkaton/shiny.pal b/graphics/pokemon/tinkaton/shiny.pal new file mode 100644 index 0000000000..dd18420c0a --- /dev/null +++ b/graphics/pokemon/tinkaton/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 210 164 +63 35 25 +236 208 208 +170 132 143 +15 15 15 +106 52 67 +139 87 69 +203 131 108 +83 40 53 +82 46 69 +233 145 181 +236 85 140 +252 252 252 +88 94 163 +167 65 103 +174 89 125 diff --git a/graphics/pokemon/tinkatuff/back.png b/graphics/pokemon/tinkatuff/back.png new file mode 100644 index 0000000000..5a5cdac31b Binary files /dev/null and b/graphics/pokemon/tinkatuff/back.png differ diff --git a/graphics/pokemon/tinkatuff/front.png b/graphics/pokemon/tinkatuff/front.png new file mode 100644 index 0000000000..8b75e709bb Binary files /dev/null and b/graphics/pokemon/tinkatuff/front.png differ diff --git a/graphics/pokemon/tinkatuff/icon.png b/graphics/pokemon/tinkatuff/icon.png new file mode 100755 index 0000000000..7ab30334fa Binary files /dev/null and b/graphics/pokemon/tinkatuff/icon.png differ diff --git a/graphics/pokemon/tinkatuff/normal.pal b/graphics/pokemon/tinkatuff/normal.pal new file mode 100644 index 0000000000..0f90f999f8 --- /dev/null +++ b/graphics/pokemon/tinkatuff/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 208 160 +80 40 64 +232 208 208 +168 128 136 +8 8 8 +232 144 176 +232 80 136 +168 88 120 +160 64 96 +248 248 248 +48 40 48 +88 88 160 +168 160 192 +136 112 144 +96 72 152 +72 48 112 diff --git a/graphics/pokemon/tinkatuff/shiny.pal b/graphics/pokemon/tinkatuff/shiny.pal new file mode 100644 index 0000000000..edea9dd345 --- /dev/null +++ b/graphics/pokemon/tinkatuff/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 208 160 +80 40 64 +232 208 208 +168 128 136 +8 8 8 +232 144 176 +232 80 136 +168 88 120 +160 64 96 +248 248 248 +48 40 48 +88 88 160 +208 152 120 +152 80 48 +152 56 88 +104 24 24 diff --git a/graphics/pokemon/toedscool/back.png b/graphics/pokemon/toedscool/back.png new file mode 100755 index 0000000000..6858cf4af4 Binary files /dev/null and b/graphics/pokemon/toedscool/back.png differ diff --git a/graphics/pokemon/toedscool/front.png b/graphics/pokemon/toedscool/front.png new file mode 100755 index 0000000000..3aa3bf8959 Binary files /dev/null and b/graphics/pokemon/toedscool/front.png differ diff --git a/graphics/pokemon/toedscool/icon.png b/graphics/pokemon/toedscool/icon.png new file mode 100755 index 0000000000..91edeb2472 Binary files /dev/null and b/graphics/pokemon/toedscool/icon.png differ diff --git a/graphics/pokemon/toedscool/normal.pal b/graphics/pokemon/toedscool/normal.pal new file mode 100755 index 0000000000..77133acfb6 --- /dev/null +++ b/graphics/pokemon/toedscool/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +136 88 80 +240 180 168 +224 152 144 +168 120 104 +128 108 32 +192 168 64 +208 200 80 +16 16 16 +208 212 208 +248 252 248 +128 132 128 +168 172 160 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/toedscool/shiny.pal b/graphics/pokemon/toedscool/shiny.pal new file mode 100755 index 0000000000..9de6c2ab47 --- /dev/null +++ b/graphics/pokemon/toedscool/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +126 122 114 +247 246 242 +232 229 217 +189 185 173 +141 138 112 +213 209 173 +248 244 230 +16 16 16 +208 212 208 +248 252 248 +128 132 128 +168 172 160 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/toedscruel/back.png b/graphics/pokemon/toedscruel/back.png new file mode 100755 index 0000000000..da8955f819 Binary files /dev/null and b/graphics/pokemon/toedscruel/back.png differ diff --git a/graphics/pokemon/toedscruel/front.png b/graphics/pokemon/toedscruel/front.png new file mode 100755 index 0000000000..87162861ab Binary files /dev/null and b/graphics/pokemon/toedscruel/front.png differ diff --git a/graphics/pokemon/toedscruel/icon.png b/graphics/pokemon/toedscruel/icon.png new file mode 100755 index 0000000000..fe3f98f9fa Binary files /dev/null and b/graphics/pokemon/toedscruel/icon.png differ diff --git a/graphics/pokemon/toedscruel/normal.pal b/graphics/pokemon/toedscruel/normal.pal new file mode 100755 index 0000000000..7b541a5efd --- /dev/null +++ b/graphics/pokemon/toedscruel/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 48 48 +112 116 112 +184 128 96 +88 92 96 +232 176 152 +232 228 104 +64 68 64 +248 252 248 +16 16 16 +240 240 192 +104 100 80 +176 180 152 +248 212 72 +136 108 40 +176 176 88 diff --git a/graphics/pokemon/toedscruel/shiny.pal b/graphics/pokemon/toedscruel/shiny.pal new file mode 100755 index 0000000000..1841634878 --- /dev/null +++ b/graphics/pokemon/toedscruel/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +48 48 48 +112 116 112 +161 161 163 +88 92 96 +222 220 221 +242 66 213 +64 68 64 +248 252 248 +16 16 16 +230 106 142 +109 50 68 +172 72 108 +248 212 72 +136 108 40 +175 41 169 diff --git a/graphics/pokemon/togedemaru/anim_front.png b/graphics/pokemon/togedemaru/anim_front.png new file mode 100644 index 0000000000..4e6534e2f8 Binary files /dev/null and b/graphics/pokemon/togedemaru/anim_front.png differ diff --git a/graphics/pokemon/togedemaru/front.png b/graphics/pokemon/togedemaru/front.png deleted file mode 100644 index aa0202eef3..0000000000 Binary files a/graphics/pokemon/togedemaru/front.png and /dev/null differ diff --git a/graphics/pokemon/toucannon/anim_front.png b/graphics/pokemon/toucannon/anim_front.png new file mode 100644 index 0000000000..fd42f4cc3f Binary files /dev/null and b/graphics/pokemon/toucannon/anim_front.png differ diff --git a/graphics/pokemon/toucannon/back.png b/graphics/pokemon/toucannon/back.png index 109a356dd7..fb6e6195ae 100644 Binary files a/graphics/pokemon/toucannon/back.png and b/graphics/pokemon/toucannon/back.png differ diff --git a/graphics/pokemon/toucannon/front.png b/graphics/pokemon/toucannon/front.png deleted file mode 100644 index e9131805ac..0000000000 Binary files a/graphics/pokemon/toucannon/front.png and /dev/null differ diff --git a/graphics/pokemon/toucannon/normal.pal b/graphics/pokemon/toucannon/normal.pal index eeb9ee6b64..d2ba6f1226 100644 --- a/graphics/pokemon/toucannon/normal.pal +++ b/graphics/pokemon/toucannon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 40 24 -32 24 24 -232 232 64 -48 40 40 -88 80 72 -240 168 48 -56 48 48 -168 168 168 -232 112 32 -32 112 168 16 16 16 +32 24 24 +56 48 48 +120 40 24 +37 76 103 +88 80 72 224 48 16 -248 248 248 +32 112 168 +232 112 32 +168 168 168 +240 168 48 112 200 216 -184 184 192 +213 213 222 +232 232 64 +248 248 248 diff --git a/graphics/pokemon/toucannon/shiny.pal b/graphics/pokemon/toucannon/shiny.pal index 44b47e16b3..e60414432f 100644 --- a/graphics/pokemon/toucannon/shiny.pal +++ b/graphics/pokemon/toucannon/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 16 96 -16 24 24 -88 120 200 -48 40 40 -80 88 80 -64 64 168 -48 56 48 -200 208 104 -160 72 184 -24 160 48 16 16 16 +33 38 38 +48 56 48 +77 18 70 +24 92 102 +80 88 80 224 32 104 -248 248 248 +49 131 145 +160 72 184 +200 208 104 +64 64 168 112 200 216 -184 184 192 +213 213 222 +88 120 200 +248 248 248 diff --git a/graphics/pokemon/toxtricity/gigantamax/back.png b/graphics/pokemon/toxtricity/gigantamax/back.png new file mode 100644 index 0000000000..3e83fa04f3 Binary files /dev/null and b/graphics/pokemon/toxtricity/gigantamax/back.png differ diff --git a/graphics/pokemon/toxtricity/gigantamax/front.png b/graphics/pokemon/toxtricity/gigantamax/front.png new file mode 100644 index 0000000000..7fac75a683 Binary files /dev/null and b/graphics/pokemon/toxtricity/gigantamax/front.png differ diff --git a/graphics/pokemon/toxtricity/gigantamax/icon.png b/graphics/pokemon/toxtricity/gigantamax/icon.png new file mode 100644 index 0000000000..3e7e680f7c Binary files /dev/null and b/graphics/pokemon/toxtricity/gigantamax/icon.png differ diff --git a/graphics/pokemon/toxtricity/gigantamax/normal.pal b/graphics/pokemon/toxtricity/gigantamax/normal.pal new file mode 100644 index 0000000000..eceb597ad4 --- /dev/null +++ b/graphics/pokemon/toxtricity/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +75 45 94 +16 16 16 +141 79 174 +224 97 180 +215 143 0 +115 155 217 +240 200 16 +248 230 150 +106 66 119 +150 222 243 +202 74 170 +254 180 228 +240 142 197 +231 114 199 +124 70 31 diff --git a/graphics/pokemon/toxtricity/gigantamax/shiny.pal b/graphics/pokemon/toxtricity/gigantamax/shiny.pal new file mode 100644 index 0000000000..372ab9a7b2 --- /dev/null +++ b/graphics/pokemon/toxtricity/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +94 45 64 +16 16 16 +174 79 111 +224 97 180 +215 143 0 +115 155 217 +240 200 16 +248 230 150 +119 66 77 +150 222 243 +183 73 202 +238 180 254 +240 142 197 +218 114 231 +124 70 31 diff --git a/graphics/pokemon/trumbeak/anim_front.png b/graphics/pokemon/trumbeak/anim_front.png new file mode 100644 index 0000000000..9bb3a97840 Binary files /dev/null and b/graphics/pokemon/trumbeak/anim_front.png differ diff --git a/graphics/pokemon/trumbeak/back.png b/graphics/pokemon/trumbeak/back.png index 552c32d260..a9dc99ea25 100644 Binary files a/graphics/pokemon/trumbeak/back.png and b/graphics/pokemon/trumbeak/back.png differ diff --git a/graphics/pokemon/trumbeak/front.png b/graphics/pokemon/trumbeak/front.png deleted file mode 100644 index b51466e309..0000000000 Binary files a/graphics/pokemon/trumbeak/front.png and /dev/null differ diff --git a/graphics/pokemon/trumbeak/normal.pal b/graphics/pokemon/trumbeak/normal.pal index 315d2898c5..050033cdb5 100644 --- a/graphics/pokemon/trumbeak/normal.pal +++ b/graphics/pokemon/trumbeak/normal.pal @@ -6,7 +6,7 @@ JASC-PAL 96 88 80 16 16 16 64 56 56 -192 192 192 +212 212 212 120 120 128 168 168 168 248 248 248 @@ -15,5 +15,5 @@ JASC-PAL 248 136 64 232 56 48 184 24 24 -120 168 184 -0 0 0 +64 154 184 +115 28 28 diff --git a/graphics/pokemon/trumbeak/shiny.pal b/graphics/pokemon/trumbeak/shiny.pal index 0b87369f2c..3a2e5ce71f 100644 --- a/graphics/pokemon/trumbeak/shiny.pal +++ b/graphics/pokemon/trumbeak/shiny.pal @@ -6,7 +6,7 @@ JASC-PAL 80 96 80 16 16 16 56 64 48 -192 192 192 +212 212 212 136 128 40 216 208 56 248 248 248 @@ -16,4 +16,4 @@ JASC-PAL 240 56 136 200 24 104 120 168 184 -0 0 0 +125 15 68 diff --git a/graphics/pokemon/ursaluna/bloodmoon/back.png b/graphics/pokemon/ursaluna/bloodmoon/back.png new file mode 100644 index 0000000000..251eab99cf Binary files /dev/null and b/graphics/pokemon/ursaluna/bloodmoon/back.png differ diff --git a/graphics/pokemon/ursaluna/bloodmoon/front.png b/graphics/pokemon/ursaluna/bloodmoon/front.png new file mode 100644 index 0000000000..27b44fb3ff Binary files /dev/null and b/graphics/pokemon/ursaluna/bloodmoon/front.png differ diff --git a/graphics/pokemon/ursaluna/bloodmoon/normal.pal b/graphics/pokemon/ursaluna/bloodmoon/normal.pal new file mode 100644 index 0000000000..8eab07de45 --- /dev/null +++ b/graphics/pokemon/ursaluna/bloodmoon/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +0 194 8 +238 80 106 +246 125 148 +255 214 123 +49 40 32 +115 85 74 +164 40 65 +255 255 255 +78 78 97 +74 56 49 +148 117 106 +164 161 164 +16 16 16 +222 222 222 +123 121 139 diff --git a/graphics/pokemon/ursaluna/bloodmoon/shiny.pal b/graphics/pokemon/ursaluna/bloodmoon/shiny.pal new file mode 100644 index 0000000000..d8a8e8ce56 --- /dev/null +++ b/graphics/pokemon/ursaluna/bloodmoon/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +0 194 8 +238 80 106 +246 125 148 +255 214 123 +49 40 32 +195 99 59 +164 40 65 +255 255 255 +78 78 97 +128 74 52 +230 131 90 +164 161 164 +16 16 16 +222 222 222 +123 121 139 diff --git a/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/back.png b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/back.png new file mode 100644 index 0000000000..3369e6c170 Binary files /dev/null and b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/back.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/front.png b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/front.png new file mode 100644 index 0000000000..a00a644f08 Binary files /dev/null and b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/front.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/icon.png b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/icon.png new file mode 100644 index 0000000000..04be58cc42 Binary files /dev/null and b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/icon.png differ diff --git a/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/normal.pal b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/normal.pal new file mode 100644 index 0000000000..de95b4d5b4 --- /dev/null +++ b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +107 101 116 +16 16 16 +181 181 181 +43 51 125 +145 145 145 +245 245 245 +16 13 79 +48 63 241 +40 45 38 +158 98 37 +255 250 96 +213 169 38 +134 160 253 +96 95 77 +15 15 15 diff --git a/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/shiny.pal b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/shiny.pal new file mode 100644 index 0000000000..739e8a8aeb --- /dev/null +++ b/graphics/pokemon/urshifu/rapid_strike_style_gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +107 101 116 +16 16 16 +181 181 181 +43 51 125 +145 145 145 +245 245 245 +16 13 79 +48 63 241 +40 45 38 +139 34 47 +255 151 54 +185 88 38 +134 160 253 +96 95 77 +15 15 15 diff --git a/graphics/pokemon/urshifu/single_strike_style_gigantamax/back.png b/graphics/pokemon/urshifu/single_strike_style_gigantamax/back.png new file mode 100644 index 0000000000..74b71795bb Binary files /dev/null and b/graphics/pokemon/urshifu/single_strike_style_gigantamax/back.png differ diff --git a/graphics/pokemon/urshifu/single_strike_style_gigantamax/front.png b/graphics/pokemon/urshifu/single_strike_style_gigantamax/front.png new file mode 100644 index 0000000000..9f144d32be Binary files /dev/null and b/graphics/pokemon/urshifu/single_strike_style_gigantamax/front.png differ diff --git a/graphics/pokemon/urshifu/single_strike_style_gigantamax/icon.png b/graphics/pokemon/urshifu/single_strike_style_gigantamax/icon.png new file mode 100644 index 0000000000..bfeab0ee3b Binary files /dev/null and b/graphics/pokemon/urshifu/single_strike_style_gigantamax/icon.png differ diff --git a/graphics/pokemon/urshifu/single_strike_style_gigantamax/normal.pal b/graphics/pokemon/urshifu/single_strike_style_gigantamax/normal.pal new file mode 100644 index 0000000000..4cba02f8cd --- /dev/null +++ b/graphics/pokemon/urshifu/single_strike_style_gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +40 45 38 +16 16 16 +66 71 58 +107 101 116 +181 181 181 +96 95 77 +87 15 15 +146 39 24 +231 20 10 +145 145 145 +158 98 37 +245 245 245 +255 250 96 +213 169 38 +254 125 112 diff --git a/graphics/pokemon/urshifu/single_strike_style_gigantamax/shiny.pal b/graphics/pokemon/urshifu/single_strike_style_gigantamax/shiny.pal new file mode 100644 index 0000000000..13f43d8b23 --- /dev/null +++ b/graphics/pokemon/urshifu/single_strike_style_gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +40 45 38 +16 16 16 +66 71 58 +107 101 116 +181 181 181 +96 95 77 +87 15 15 +146 39 24 +231 20 10 +145 145 145 +139 34 47 +245 245 245 +255 151 54 +185 88 38 +254 125 112 diff --git a/graphics/pokemon/varoom/back.png b/graphics/pokemon/varoom/back.png new file mode 100755 index 0000000000..a0fef0447c Binary files /dev/null and b/graphics/pokemon/varoom/back.png differ diff --git a/graphics/pokemon/varoom/front.png b/graphics/pokemon/varoom/front.png new file mode 100755 index 0000000000..8c2bd6679f Binary files /dev/null and b/graphics/pokemon/varoom/front.png differ diff --git a/graphics/pokemon/varoom/icon.png b/graphics/pokemon/varoom/icon.png new file mode 100755 index 0000000000..7debadffde Binary files /dev/null and b/graphics/pokemon/varoom/icon.png differ diff --git a/graphics/pokemon/varoom/normal.pal b/graphics/pokemon/varoom/normal.pal new file mode 100755 index 0000000000..6e9f62ab56 --- /dev/null +++ b/graphics/pokemon/varoom/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 28 40 +16 16 16 +48 48 64 +96 88 104 +200 212 216 +56 60 72 +112 124 144 +240 248 248 +48 32 80 +152 104 184 +248 236 32 +88 60 128 +232 176 48 +128 128 136 +0 0 0 diff --git a/graphics/pokemon/varoom/shiny.pal b/graphics/pokemon/varoom/shiny.pal new file mode 100755 index 0000000000..3eb247d6f4 --- /dev/null +++ b/graphics/pokemon/varoom/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 28 40 +16 16 16 +48 48 64 +96 88 104 +234 200 106 +56 60 72 +158 122 73 +240 248 248 +48 32 80 +152 104 184 +237 142 178 +88 60 128 +184 92 141 +128 128 136 +0 0 0 diff --git a/graphics/pokemon/veluza/back.png b/graphics/pokemon/veluza/back.png new file mode 100755 index 0000000000..15777e0662 Binary files /dev/null and b/graphics/pokemon/veluza/back.png differ diff --git a/graphics/pokemon/veluza/front.png b/graphics/pokemon/veluza/front.png new file mode 100755 index 0000000000..9a2a7643ab Binary files /dev/null and b/graphics/pokemon/veluza/front.png differ diff --git a/graphics/pokemon/veluza/icon.png b/graphics/pokemon/veluza/icon.png new file mode 100755 index 0000000000..6d06051669 Binary files /dev/null and b/graphics/pokemon/veluza/icon.png differ diff --git a/graphics/pokemon/veluza/normal.pal b/graphics/pokemon/veluza/normal.pal new file mode 100755 index 0000000000..2365bca9d4 --- /dev/null +++ b/graphics/pokemon/veluza/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 56 136 +248 116 248 +16 16 16 +192 80 192 +96 100 104 +72 72 72 +136 128 136 +168 172 168 +192 196 192 +248 252 248 +144 132 200 +208 208 208 +200 68 80 +248 92 56 +0 0 0 diff --git a/graphics/pokemon/veluza/shiny.pal b/graphics/pokemon/veluza/shiny.pal new file mode 100755 index 0000000000..9574a636bf --- /dev/null +++ b/graphics/pokemon/veluza/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +49 113 67 +71 149 81 +16 16 16 +71 149 81 +96 100 104 +72 72 72 +136 128 136 +168 172 168 +192 196 192 +248 252 248 +144 132 200 +208 208 208 +200 68 80 +248 92 56 +0 0 0 diff --git a/graphics/pokemon/venusaur/gigantamax/back.png b/graphics/pokemon/venusaur/gigantamax/back.png new file mode 100644 index 0000000000..be482895b8 Binary files /dev/null and b/graphics/pokemon/venusaur/gigantamax/back.png differ diff --git a/graphics/pokemon/venusaur/gigantamax/front.png b/graphics/pokemon/venusaur/gigantamax/front.png new file mode 100644 index 0000000000..b7dde75ba8 Binary files /dev/null and b/graphics/pokemon/venusaur/gigantamax/front.png differ diff --git a/graphics/pokemon/venusaur/gigantamax/icon.png b/graphics/pokemon/venusaur/gigantamax/icon.png new file mode 100644 index 0000000000..523e647999 Binary files /dev/null and b/graphics/pokemon/venusaur/gigantamax/icon.png differ diff --git a/graphics/pokemon/venusaur/gigantamax/normal.pal b/graphics/pokemon/venusaur/gigantamax/normal.pal new file mode 100644 index 0000000000..74ffe32fbd --- /dev/null +++ b/graphics/pokemon/venusaur/gigantamax/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 128 +131 49 0 +16 16 16 +16 82 65 +223 91 95 +0 141 125 +0 107 93 +252 252 252 +32 180 156 +16 123 106 +246 148 153 +90 213 197 +255 201 201 +131 222 123 +255 238 82 +199 155 38 diff --git a/graphics/pokemon/venusaur/gigantamax/shiny.pal b/graphics/pokemon/venusaur/gigantamax/shiny.pal new file mode 100644 index 0000000000..cd6c71bec7 --- /dev/null +++ b/graphics/pokemon/venusaur/gigantamax/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 128 +131 49 0 +16 16 16 +57 90 32 +229 171 27 +0 141 125 +0 107 93 +252 252 252 +164 213 74 +123 156 41 +255 228 17 +205 238 82 +255 255 222 +131 222 123 +255 238 82 +199 155 38 diff --git a/graphics/pokemon/walking_wake/back.png b/graphics/pokemon/walking_wake/back.png new file mode 100644 index 0000000000..7fb2083cb9 Binary files /dev/null and b/graphics/pokemon/walking_wake/back.png differ diff --git a/graphics/pokemon/walking_wake/front.png b/graphics/pokemon/walking_wake/front.png new file mode 100644 index 0000000000..2ef9632710 Binary files /dev/null and b/graphics/pokemon/walking_wake/front.png differ diff --git a/graphics/pokemon/walking_wake/icon.png b/graphics/pokemon/walking_wake/icon.png new file mode 100644 index 0000000000..9260531ecf Binary files /dev/null and b/graphics/pokemon/walking_wake/icon.png differ diff --git a/graphics/pokemon/walking_wake/normal.pal b/graphics/pokemon/walking_wake/normal.pal new file mode 100644 index 0000000000..a0cd9eaff9 --- /dev/null +++ b/graphics/pokemon/walking_wake/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +46 149 167 +115 234 222 +27 86 92 +39 124 124 +82 82 82 +247 162 82 +53 194 219 +16 16 16 +239 93 107 +165 103 167 +129 73 126 +89 52 105 +254 214 54 +252 252 252 +189 189 189 diff --git a/graphics/pokemon/walking_wake/shiny.pal b/graphics/pokemon/walking_wake/shiny.pal new file mode 100644 index 0000000000..f75d05d689 --- /dev/null +++ b/graphics/pokemon/walking_wake/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +96 168 152 +115 234 222 +27 86 92 +39 124 124 +82 82 82 +247 162 82 +96 216 184 +16 16 16 +239 93 107 +64 96 232 +40 64 152 +8 24 128 +254 214 54 +252 252 252 +189 189 189 diff --git a/graphics/pokemon/wattrel/back.png b/graphics/pokemon/wattrel/back.png new file mode 100755 index 0000000000..2a5bc640b5 Binary files /dev/null and b/graphics/pokemon/wattrel/back.png differ diff --git a/graphics/pokemon/wattrel/front.png b/graphics/pokemon/wattrel/front.png new file mode 100755 index 0000000000..72981aa44e Binary files /dev/null and b/graphics/pokemon/wattrel/front.png differ diff --git a/graphics/pokemon/wattrel/icon.png b/graphics/pokemon/wattrel/icon.png new file mode 100755 index 0000000000..a0a8bc9d49 Binary files /dev/null and b/graphics/pokemon/wattrel/icon.png differ diff --git a/graphics/pokemon/wattrel/normal.pal b/graphics/pokemon/wattrel/normal.pal new file mode 100755 index 0000000000..261ba62068 --- /dev/null +++ b/graphics/pokemon/wattrel/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 24 24 +48 56 56 +32 40 40 +248 252 248 +184 188 200 +16 16 16 +248 204 48 +168 104 32 +192 144 40 +128 64 24 +240 176 88 +120 92 32 +96 112 144 +136 156 184 +64 76 104 diff --git a/graphics/pokemon/wattrel/shiny.pal b/graphics/pokemon/wattrel/shiny.pal new file mode 100755 index 0000000000..16b0a5b21b --- /dev/null +++ b/graphics/pokemon/wattrel/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +24 24 24 +131 83 100 +96 60 73 +248 252 248 +184 188 200 +16 16 16 +248 204 48 +168 104 32 +192 144 40 +128 64 24 +240 176 88 +120 92 32 +96 112 144 +136 156 184 +64 76 104 diff --git a/graphics/pokemon/wiglett/back.png b/graphics/pokemon/wiglett/back.png new file mode 100755 index 0000000000..b436506319 Binary files /dev/null and b/graphics/pokemon/wiglett/back.png differ diff --git a/graphics/pokemon/wiglett/front.png b/graphics/pokemon/wiglett/front.png new file mode 100755 index 0000000000..b9364e8619 Binary files /dev/null and b/graphics/pokemon/wiglett/front.png differ diff --git a/graphics/pokemon/wiglett/icon.png b/graphics/pokemon/wiglett/icon.png new file mode 100755 index 0000000000..668309c68e Binary files /dev/null and b/graphics/pokemon/wiglett/icon.png differ diff --git a/graphics/pokemon/wiglett/normal.pal b/graphics/pokemon/wiglett/normal.pal new file mode 100755 index 0000000000..e3061417d8 --- /dev/null +++ b/graphics/pokemon/wiglett/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +128 128 128 +184 180 192 +232 228 224 +248 252 248 +16 16 16 +168 72 88 +120 44 64 +248 148 160 +232 92 112 +56 80 72 +80 112 104 +120 156 136 +152 184 168 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/wiglett/shiny.pal b/graphics/pokemon/wiglett/shiny.pal new file mode 100755 index 0000000000..9fb47d702f --- /dev/null +++ b/graphics/pokemon/wiglett/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +156 122 24 +184 180 192 +232 228 224 +248 252 248 +16 16 16 +194 150 45 +120 44 64 +252 202 77 +232 92 112 +8 41 123 +49 82 164 +120 156 136 +152 184 168 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/wo_chien/back.png b/graphics/pokemon/wo_chien/back.png new file mode 100644 index 0000000000..4525e24fec Binary files /dev/null and b/graphics/pokemon/wo_chien/back.png differ diff --git a/graphics/pokemon/wo_chien/front.png b/graphics/pokemon/wo_chien/front.png new file mode 100644 index 0000000000..b81f12809f Binary files /dev/null and b/graphics/pokemon/wo_chien/front.png differ diff --git a/graphics/pokemon/wo_chien/icon.png b/graphics/pokemon/wo_chien/icon.png new file mode 100755 index 0000000000..22402d15c5 Binary files /dev/null and b/graphics/pokemon/wo_chien/icon.png differ diff --git a/graphics/pokemon/wo_chien/normal.pal b/graphics/pokemon/wo_chien/normal.pal new file mode 100644 index 0000000000..df9cd0fd2e --- /dev/null +++ b/graphics/pokemon/wo_chien/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +255 255 255 +255 125 0 +180 190 189 +65 68 41 +82 129 57 +74 182 82 +139 153 156 +24 24 24 +82 72 49 +197 157 90 +123 113 82 +172 141 115 +41 48 41 +74 85 82 +139 97 90 diff --git a/graphics/pokemon/wo_chien/shiny.pal b/graphics/pokemon/wo_chien/shiny.pal new file mode 100644 index 0000000000..f2dddbf0ae --- /dev/null +++ b/graphics/pokemon/wo_chien/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 210 164 +255 255 255 +255 125 0 +180 190 189 +65 68 41 +164 151 99 +216 201 142 +139 153 156 +24 24 24 +82 72 49 +255 79 97 +213 61 84 +172 141 115 +41 48 41 +74 85 82 +139 97 90 diff --git a/graphics/pokemon/wobbuffet/iconf.png b/graphics/pokemon/wobbuffet/iconf.png new file mode 100644 index 0000000000..1f7f86991b Binary files /dev/null and b/graphics/pokemon/wobbuffet/iconf.png differ diff --git a/graphics/pokemon/wooper/wooper_paldea/back.png b/graphics/pokemon/wooper/wooper_paldea/back.png new file mode 100644 index 0000000000..269a70ec26 Binary files /dev/null and b/graphics/pokemon/wooper/wooper_paldea/back.png differ diff --git a/graphics/pokemon/wooper/wooper_paldea/front.png b/graphics/pokemon/wooper/wooper_paldea/front.png new file mode 100644 index 0000000000..5ef4745594 Binary files /dev/null and b/graphics/pokemon/wooper/wooper_paldea/front.png differ diff --git a/graphics/pokemon/wooper/wooper_paldea/normal.pal b/graphics/pokemon/wooper/wooper_paldea/normal.pal new file mode 100644 index 0000000000..2652aa5a76 --- /dev/null +++ b/graphics/pokemon/wooper/wooper_paldea/normal.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +153 211 165 +103 83 119 +201 177 219 +85 67 66 +104 82 81 +16 16 16 +169 147 146 +130 103 102 +158 129 179 +255 255 255 +46 36 35 +180 65 65 +255 106 115 diff --git a/graphics/pokemon/wooper/wooper_paldea/shiny.pal b/graphics/pokemon/wooper/wooper_paldea/shiny.pal new file mode 100644 index 0000000000..3df4f0efa8 --- /dev/null +++ b/graphics/pokemon/wooper/wooper_paldea/shiny.pal @@ -0,0 +1,16 @@ +JASC-PAL +0100 +13 +153 211 165 +158 114 77 +230 186 149 +102 96 146 +140 133 186 +16 16 16 +204 202 219 +171 167 198 +200 144 97 +255 255 255 +46 36 35 +180 65 65 +255 106 115 diff --git a/graphics/pokemon/wugtrio/back.png b/graphics/pokemon/wugtrio/back.png new file mode 100755 index 0000000000..bf7827c902 Binary files /dev/null and b/graphics/pokemon/wugtrio/back.png differ diff --git a/graphics/pokemon/wugtrio/front.png b/graphics/pokemon/wugtrio/front.png new file mode 100755 index 0000000000..24aa488e36 Binary files /dev/null and b/graphics/pokemon/wugtrio/front.png differ diff --git a/graphics/pokemon/wugtrio/icon.png b/graphics/pokemon/wugtrio/icon.png new file mode 100755 index 0000000000..1b67044787 Binary files /dev/null and b/graphics/pokemon/wugtrio/icon.png differ diff --git a/graphics/pokemon/wugtrio/normal.pal b/graphics/pokemon/wugtrio/normal.pal new file mode 100755 index 0000000000..61d957fca3 --- /dev/null +++ b/graphics/pokemon/wugtrio/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +168 60 80 +248 120 152 +120 40 56 +248 252 248 +240 80 96 +16 16 16 +128 128 128 +248 248 248 +184 180 192 +48 48 56 +64 72 88 +104 128 128 +80 104 112 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/wugtrio/shiny.pal b/graphics/pokemon/wugtrio/shiny.pal new file mode 100755 index 0000000000..ae0ab9eef7 --- /dev/null +++ b/graphics/pokemon/wugtrio/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +55 58 158 +248 120 152 +40 33 117 +248 252 248 +75 79 197 +16 16 16 +134 61 19 +242 158 69 +203 102 24 +48 48 56 +64 72 88 +104 128 128 +80 104 112 +0 0 0 +0 0 0 diff --git a/graphics/pokemon_storage/wallpapers/icons/bolt_japan.png b/graphics/pokemon_storage/wallpapers/icons/bolt_japan.png new file mode 100644 index 0000000000..a217a5642f Binary files /dev/null and b/graphics/pokemon_storage/wallpapers/icons/bolt_japan.png differ diff --git a/graphics/pokemon_storage/wallpapers/icons/cross_japan.png b/graphics/pokemon_storage/wallpapers/icons/cross_japan.png new file mode 100644 index 0000000000..9367347e9d Binary files /dev/null and b/graphics/pokemon_storage/wallpapers/icons/cross_japan.png differ diff --git a/graphics/pokemon_storage/wallpapers/icons/plusle_japan.png b/graphics/pokemon_storage/wallpapers/icons/plusle_japan.png new file mode 100644 index 0000000000..f58c05989c Binary files /dev/null and b/graphics/pokemon_storage/wallpapers/icons/plusle_japan.png differ diff --git a/include/battle.h b/include/battle.h index df4cdf5684..1578e1e53b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -14,6 +14,7 @@ #include "battle_bg.h" #include "pokeball.h" #include "battle_debug.h" +#include "battle_dynamax.h" // Used to exclude moves learned temporarily by Transform or Mimic #define MOVE_IS_PERMANENT(battler, moveSlot) \ @@ -94,6 +95,7 @@ struct DisableStruct u8 laserFocusTimer; u8 throatChopTimer; u8 wrapTurns; + u8 tormentTimer:4; // used for G-Max Meltdown u8 usedMoves:4; u8 noRetreat:1; u8 tarShot:1; @@ -103,6 +105,9 @@ struct DisableStruct u8 toxicSpikesDone:1; u8 stickyWebDone:1; u8 stealthRockDone:1; + u8 syrupBombTimer; + u8 syrupBombIsShiny:1; + u8 steelSurgeDone:1; }; struct ProtectStruct @@ -147,8 +152,10 @@ struct ProtectStruct u16 beakBlastCharge:1; u16 quash:1; u16 shellTrap:1; + u16 maxGuarded:1; u16 silkTrapped:1; u16 eatMirrorHerb:1; + u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy u32 physicalDmg; u32 specialDmg; u8 physicalBattlerId; @@ -167,7 +174,6 @@ struct SpecialStatus u8 lightningRodRedirected:1; u8 restoredBattlerSprite: 1; u8 traced:1; - u8 ppNotAffectedByPressure:1; u8 faintedHasReplacement:1; u8 focusBanded:1; u8 focusSashed:1; @@ -221,11 +227,14 @@ struct SideTimer u8 tailwindBattlerId; u8 luckyChantTimer; u8 luckyChantBattlerId; + u8 steelsurgeAmount; // Timers below this point are not swapped by Court Change u8 followmeTimer; u8 followmeTarget:3; u8 followmePowder:1; // Rage powder, does not affect grass type pokemon. u8 retaliateTimer; + u8 damageNonTypesTimer; + u8 damageNonTypesType; }; struct FieldTimer @@ -281,6 +290,12 @@ struct AIPartyData // Opposing battlers - party mons. u8 count[NUM_BATTLE_SIDES]; }; +struct SwitchinCandidate +{ + struct BattlePokemon battleMon; + bool8 hypotheticalStatus; +}; + // Ai Data used when deciding which move to use, computed only once before each turn's start. struct AiLogicData { @@ -292,7 +307,6 @@ struct AiLogicData u8 hpPercents[MAX_BATTLERS_COUNT]; u16 partnerMove; u16 speedStats[MAX_BATTLERS_COUNT]; // Speed stats for all battles, calculated only once, same way as damages - u8 moveDmgResult[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // MOVE_POWER defines for GetMoveDamageResult ; attacker, target, moveIndex s32 simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveAccuracy[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex @@ -300,6 +314,8 @@ struct AiLogicData bool8 shouldSwitchMon; // Because all available moves have no/little effect. Each bit per battler. u8 monToSwitchId[MAX_BATTLERS_COUNT]; // ID of the mon to switch. bool8 weatherHasEffect; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. + u8 mostSuitableMonId; // 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 }; struct AI_ThinkingStruct @@ -532,6 +548,22 @@ struct ZMoveData u8 splits[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 activeSplit; + u8 splits[MAX_BATTLERS_COUNT]; + u16 baseMove[MAX_BATTLERS_COUNT]; // base move of Max Move + u16 lastUsedBaseMove; + u16 levelUpHP; +}; + struct LostItem { u16 originalItem:15; @@ -638,6 +670,7 @@ struct BattleStruct struct MegaEvolutionData mega; struct UltraBurstData burst; struct ZMoveData zmove; + struct DynamaxData dynamax; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; u8 introState; @@ -646,7 +679,7 @@ struct BattleStruct u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct u16 tracedAbility[MAX_BATTLERS_COUNT]; - u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk + u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk and Anger Shell. bool8 spriteIgnore0Hp; struct Illusion illusion[MAX_BATTLERS_COUNT]; s32 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier @@ -674,10 +707,11 @@ struct BattleStruct bool8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects. u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) - bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. + bool8 allowedToChangeFormInWeather[PARTY_SIZE][NUM_BATTLE_SIDES]; // For each party member and side, used by Ice Face. u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. + u8 bonusCritStages[MAX_BATTLERS_COUNT]; // G-Max Chi Strike boosts crit stages of allies. uq4_12_t supremeOverlordModifier[MAX_BATTLERS_COUNT]; u8 itemPartyIndex[MAX_BATTLERS_COUNT]; u8 itemMoveIndex[MAX_BATTLERS_COUNT]; @@ -691,6 +725,7 @@ struct BattleStruct bool8 trainerSlideBeforeFirstTurnMsgDone; u32 aiDelayTimer; // Counts number of frames AI takes to choose an action. u32 aiDelayFrames; // Number of frames it took to choose an action. + bool8 transformZeroToHero[PARTY_SIZE][NUM_BATTLE_SIDES]; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, @@ -726,13 +761,17 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0)) #define BATTLER_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0)) -#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type || (gBattleMons[battlerId].type3 != TYPE_MYSTERY && gBattleMons[battlerId].type3 == type))) +#define IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0) == type || GetBattlerType(battlerId, 1) == type || (GetBattlerType(battlerId, 2) != TYPE_MYSTERY && GetBattlerType(battlerId, 2) == type))) + +#define IS_BATTLER_TYPELESS(battlerId)(GetBattlerType(battlerId, 0) == TYPE_MYSTERY && GetBattlerType(battlerId, 1) == TYPE_MYSTERY && GetBattlerType(battlerId, 2) == TYPE_MYSTERY) + #define SET_BATTLER_TYPE(battlerId, type) \ { \ gBattleMons[battlerId].type1 = type; \ gBattleMons[battlerId].type2 = type; \ gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ } + #define RESTORE_BATTLER_TYPE(battlerId) \ { \ gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ @@ -901,7 +940,7 @@ struct MonSpritesGfx u16 *buffer; }; -struct TotemBoost +struct QueuedStatBoost { u8 stats; // bitfield for each battle stat that is set if the stat changes s8 statChanges[NUM_BATTLE_STATS - 1]; // highest bit being set decreases the stat @@ -920,7 +959,7 @@ extern u16 gBattle_WIN0H; extern u16 gBattle_WIN0V; extern u16 gBattle_WIN1H; extern u16 gBattle_WIN1V; -extern u8 gDisplayedStringBattle[400]; +extern u8 gDisplayedStringBattle[425]; extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT]; extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT]; extern u8 gBattleTextBuff3[30]; //to handle stupidly large z move names @@ -1014,7 +1053,7 @@ extern u32 gFieldStatuses; extern struct FieldTimer gFieldTimers; extern u8 gBattlerAbility; extern u16 gPartnerSpriteId; -extern struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT]; +extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT]; extern void (*gPreBattleCallback1)(void); extern void (*gBattleMainFunc)(void); diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 8bb2293e9b..24bc6943aa 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -1,21 +1,45 @@ #ifndef GUARD_BATTLE_AI_MAIN_H #define GUARD_BATTLE_AI_MAIN_H -// return values for BattleAI_ChooseMoveOrAction +// return vals for BattleAI_ChooseMoveOrAction // 0 - 3 are move idx #define AI_CHOICE_FLEE 4 #define AI_CHOICE_WATCH 5 #define AI_CHOICE_SWITCH 7 +#include "test_runner.h" + +// Logs for debugging AI tests. +#define SET_SCORE(battler, movesetIndex, val) \ + do \ + { \ + TestRunner_Battle_AISetScore(__FILE__, __LINE__, battler, movesetIndex, val); \ + AI_THINKING_STRUCT->score[movesetIndex] = val; \ + } while (0) \ + +#define ADJUST_SCORE(val) \ + do \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + score += val; \ + } while (0) \ + +#define ADJUST_SCORE_PTR(val) \ + do \ + { \ + TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \ + (*score) += val; \ + } while (0) \ + #define RETURN_SCORE_PLUS(val) \ { \ - score += val; \ + ADJUST_SCORE(val); \ return score; \ } #define RETURN_SCORE_MINUS(val) \ { \ - score -= val; \ + ADJUST_SCORE(-val); \ return score; \ } diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 9a7e5f7e74..8c22baa312 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); +u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); bool32 ShouldSwitch(u32 battler); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 8de2462d90..c83c47e583 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -36,7 +36,6 @@ 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); u32 AI_DecideHoldEffectForTurn(u32 battlerId); -u32 AI_GetMoveAccuracy(u32 battlerAtk, u32 battlerDef, u32 move); bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move); u32 AI_GetWeather(struct AiLogicData *aiData); bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits); @@ -85,16 +84,13 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); // move checks bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect); bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split); -u32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef); +u32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower); s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex); -bool32 IsInIgnoredPowerfulMoveEffects(u32 effect); -void SetMovesDamageResults(u32 battlerAtk, u16 *moves); -u32 GetMoveDamageResult(u32 battlerAtk, u32 battlerDef, u32 moveIndex); u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef); uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u32 AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); @@ -113,9 +109,8 @@ bool32 IsStatLoweringMoveEffect(u32 moveEffect); bool32 IsMoveRedirectionPrevented(u32 move, u32 atkAbility); bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsHazardMoveEffect(u32 moveEffect); -bool32 MoveCallsOtherMove(u32 move); -bool32 MoveRequiresRecharging(u32 move); bool32 IsEncoreEncouragedEffect(u32 moveEffect); +bool32 IsChargingMove(u32 battlerAtk, u32 effect); void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score); bool32 ShouldSetSandstorm(u32 battler, u32 ability, u32 holdEffect); bool32 ShouldSetHail(u32 battler, u32 ability, u32 holdEffect); @@ -131,10 +126,10 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(u32 effect); bool32 IsStatLoweringEffect(u32 effect); -bool32 IsStatRaisingEffect(u32 effect); bool32 IsAttackBoostMoveEffect(u32 effect); bool32 IsUngroundingEffect(u32 effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); +bool32 HasSubstituteIgnoringMove(u32 battler); bool32 HasSoundMove(u32 battler); bool32 HasHighCritRatioMove(u32 battler); bool32 HasMagicCoatAffectedMove(u32 battler); @@ -169,7 +164,7 @@ bool32 IsTargetingPartner(u32 battlerAtk, u32 battlerDef); bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove); bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove); -bool32 PartnerMoveEffectIsWeather(u32 battlerAtkPartner, u32 partnerMove); +bool32 IsMoveEffectWeather(u32 move); bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove); bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck); bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); @@ -179,7 +174,6 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move); // party logic struct BattlePokemon *AllocSaveBattleMons(void); void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons); -s32 AI_CalcPartyMonBestMoveDamage(u32 battlerAtk, u32 battlerDef, struct Pokemon *attackerMon, struct Pokemon *targetMon); s32 CountUsablePartyMons(u32 battlerId); bool32 IsPartyFullyHealedExceptBattler(u32 battler); bool32 PartyHasMoveSplit(u32 battlerId, u32 split); @@ -194,4 +188,6 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool8 isPartyMonAttacker); + #endif //GUARD_BATTLE_AI_UTIL_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 199b6c9207..5f3bd8316e 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -98,8 +98,9 @@ enum { // Special return values in gBattleBufferB from Battle Controller functions. #define RET_VALUE_LEVELED_UP 11 -#define RET_MEGA_EVOLUTION 0x80 -#define RET_ULTRA_BURST 0x70 +#define RET_MEGA_EVOLUTION (1 << 7) +#define RET_ULTRA_BURST (1 << 6) +#define RET_DYNAMAX (1 << 5) struct UnusedControllerStruct { @@ -250,7 +251,7 @@ void BtlController_EmitDrawPartyStatusSummary(u32 battler, u32 bufferId, struct void BtlController_EmitHidePartyStatusSummary(u32 battler, u32 bufferId); void BtlController_EmitEndBounceEffect(u32 battler, u32 bufferId); void BtlController_EmitSpriteInvisibility(u32 battler, u32 bufferId, bool8 isInvisible); -void BtlController_EmitBattleAnimation(u32 battler, u32 bufferId, u8 animationId, u16 argument); +void BtlController_EmitBattleAnimation(u32 battler, u32 bufferId, u8 animationId, struct DisableStruct* disableStructPtr, u16 argument); void BtlController_EmitLinkStandbyMsg(u32 battler, u32 bufferId, u8 mode, bool32 record); void BtlController_EmitResetActionMoveSelection(u32 battler, u32 bufferId, u8 caseId); void BtlController_EmitEndLinkBattle(u32 battler, u32 bufferId, u8 battleOutcome); diff --git a/include/battle_dynamax.h b/include/battle_dynamax.h new file mode 100644 index 0000000000..18f0b1b3e3 --- /dev/null +++ b/include/battle_dynamax.h @@ -0,0 +1,93 @@ +#ifndef GUARD_BATTLE_DYNAMAX_H +#define GUARD_BATTLE_DYNAMAX_H + +#define DYNAMAX_TURNS_COUNT 3 + +enum MaxMoveEffect +{ + MAX_EFFECT_NONE, + MAX_EFFECT_RAISE_TEAM_ATTACK, + MAX_EFFECT_RAISE_TEAM_DEFENSE, + MAX_EFFECT_RAISE_TEAM_SPEED, + MAX_EFFECT_RAISE_TEAM_SP_ATK, + MAX_EFFECT_RAISE_TEAM_SP_DEF, + MAX_EFFECT_LOWER_ATTACK, + MAX_EFFECT_LOWER_DEFENSE, + MAX_EFFECT_LOWER_SPEED, + MAX_EFFECT_LOWER_SP_ATK, + MAX_EFFECT_LOWER_SP_DEF, + MAX_EFFECT_SUN, + MAX_EFFECT_RAIN, + MAX_EFFECT_SANDSTORM, + MAX_EFFECT_HAIL, + MAX_EFFECT_MISTY_TERRAIN, + MAX_EFFECT_GRASSY_TERRAIN, + MAX_EFFECT_ELECTRIC_TERRAIN, + MAX_EFFECT_PSYCHIC_TERRAIN, + MAX_EFFECT_VINE_LASH, + MAX_EFFECT_WILDFIRE, + MAX_EFFECT_CANNONADE, + MAX_EFFECT_EFFECT_SPORE_FOES, + MAX_EFFECT_PARALYZE_FOES, + MAX_EFFECT_CONFUSE_FOES_PAY_DAY, + MAX_EFFECT_CRIT_PLUS, + MAX_EFFECT_MEAN_LOOK, + MAX_EFFECT_AURORA_VEIL, + MAX_EFFECT_INFATUATE_FOES, + MAX_EFFECT_RECYCLE_BERRIES, + MAX_EFFECT_POISON_FOES, + MAX_EFFECT_STEALTH_ROCK, + MAX_EFFECT_DEFOG, + MAX_EFFECT_POISON_PARALYZE_FOES, + MAX_EFFECT_HEAL_TEAM, + MAX_EFFECT_SPITE, + MAX_EFFECT_GRAVITY, + MAX_EFFECT_VOLCALITH, + MAX_EFFECT_SANDBLAST_FOES, + MAX_EFFECT_YAWN_FOE, + MAX_EFFECT_LOWER_EVASIVENESS_FOES, + MAX_EFFECT_AROMATHERAPY, + MAX_EFFECT_CONFUSE_FOES, + MAX_EFFECT_STEELSURGE, + MAX_EFFECT_TORMENT_FOES, + MAX_EFFECT_LOWER_SPEED_2_FOES, + MAX_EFFECT_FIRE_SPIN_FOES, + MAX_EFFECT_FIXED_POWER, + MAX_EFFECT_BYPASS_PROTECT, +}; + +bool32 IsDynamaxed(u16 battlerId); +bool32 CanDynamax(u16 battlerId); +bool32 IsGigantamaxed(u16 battlerId); +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); + +bool32 ShouldUseMaxMove(u16 battlerId, u16 baseMove); +u16 GetMaxMove(u16 battlerId, u16 baseMove); +u8 GetMaxMovePower(u16 move); +bool32 IsMaxMove(u16 move); +const u8 *GetMaxMoveName(u16 move); +void ChooseDamageNonTypesString(u8 type); + +void BS_UpdateDynamax(void); +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_interface.h b/include/battle_interface.h index 2c8747db02..af8f0dc117 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -54,12 +54,15 @@ enum #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_MEGA_TRIGGER_PAL 0xD777 #define TAG_MEGA_INDICATOR_PAL 0xD778 -#define TAG_ALPHA_OMEGA_INDICATOR_PAL 0xD779 // Alpha and Omega indicators use the same palette as each of them only uses 4 different colors. +#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 enum { @@ -86,6 +89,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId); void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly); void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHpBoxes); 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); diff --git a/include/battle_main.h b/include/battle_main.h index 91e9fd90eb..9bb9bbdfb0 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -54,7 +54,7 @@ void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); void BeginBattleIntro(void); void SwitchInClearSetData(u32 battler); -void FaintClearSetData(u32 battler); +const u8* FaintClearSetData(u32 battler); void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(u32 battler); void SwitchPartyOrder(u32 battlerId); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 335aafb589..d2addbc4c3 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -1,6 +1,7 @@ #ifndef GUARD_BATTLE_SCRIPTS_H #define GUARD_BATTLE_SCRIPTS_H +extern const u8 BattleScript_OpportunistCopyStatChange[]; extern const u8 BattleScript_MirrorHerbCopyStatChange[]; extern const u8 BattleScript_MirrorHerbCopyStatChangeEnd2[]; extern const u8 BattleScript_NotAffected[]; @@ -458,6 +459,7 @@ extern const u8 BattleScript_RuinAbilityActivates[]; extern const u8 BattleScript_CudChewActivates[]; extern const u8 BattleScript_SupremeOverlordActivates[]; extern const u8 BattleScript_CostarActivates[]; +extern const u8 BattleScript_ZeroToHeroActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; extern const u8 BattleScript_MimicryActivates_End3[]; @@ -467,6 +469,7 @@ extern const u8 BattleScript_DampPreventsAftermath[]; extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; +extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; extern const u8 BattleScript_StealthRockActivates[]; @@ -478,6 +481,8 @@ extern const u8 BattleScript_UltraBurst[]; extern const u8 BattleScript_SelectingNotAllowedCurrentMove[]; extern const u8 BattleScript_SelectingNotAllowedCurrentMoveInPalace[]; extern const u8 BattleScript_SaltCureExtraDamage[]; +extern const u8 BattleScript_SyrupBombEndTurn[]; +extern const u8 BattleScript_SyrupBombActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; @@ -488,4 +493,33 @@ extern const u8 BattleScript_StatUpZMove[]; extern const u8 BattleScript_HealReplacementZMove[]; extern const u8 BattleScript_EffectExtremeEvoboost[]; +// max moves +extern const u8 BattleScript_EffectRaiseStatAllies[]; +extern const u8 BattleScript_EffectLowerStatFoes[]; +extern const u8 BattleScript_EffectSetWeather[]; +extern const u8 BattleScript_EffectSetTerrain[]; +extern const u8 BattleScript_EffectStonesurge[]; +extern const u8 BattleScript_EffectSteelsurge[]; +extern const u8 BattleScript_SteelsurgeFree[]; +extern const u8 BattleScript_SteelsurgeDefog[]; +extern const u8 BattleScript_DamageNonTypesStarts[]; +extern const u8 BattleScript_DamageNonTypesContinues[]; +extern const u8 BattleScript_DefogTryHazards[]; +extern const u8 BattleScript_EffectAuroraVeilSuccess[]; +extern const u8 BattleScript_EffectGravitySuccess[]; +extern const u8 BattleScript_EffectYawnSuccess[]; +extern const u8 BattleScript_EffectTryReducePP[]; +extern const u8 BattleScript_EffectStatus1Foes[]; +extern const u8 BattleScript_EffectStatus2Foes[]; +extern const u8 BattleScript_TormentEnds[]; +extern const u8 BattleScript_EffectRaiseCritAlliesAnim[]; +extern const u8 BattleScript_EffectHealOneSixthAllies[]; +extern const u8 BattleScript_EffectCureStatusAllies[]; +extern const u8 BattleScript_EffectRecycleBerriesAllies[]; + +// dynamax and max raids +extern const u8 BattleScript_DynamaxBegins[]; +extern const u8 BattleScript_DynamaxEnds[]; +extern const u8 BattleScript_MoveBlockedByDynamax[]; + #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_util.h b/include/battle_util.h index 9cdd41cab5..91362bbeaf 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -15,7 +15,7 @@ #define MOVE_LIMITATION_BELCH (1 << 11) #define MOVE_LIMITATION_THROAT_CHOP (1 << 12) #define MOVE_LIMITATION_STUFF_CHEEKS (1 << 13) -#define MOVE_LIMITATION_GIGATON_HAMMER (1 << 14) +#define MOVE_LIMITATION_CANT_USE_TWICE (1 << 14) #define MOVE_LIMITATION_PLACEHOLDER (1 << 15) #define MOVE_LIMITATIONS_ALL 0xFFFF @@ -33,14 +33,15 @@ #define ABILITYEFFECT_TRACE2 10 #define ABILITYEFFECT_MOVE_END_OTHER 11 #define ABILITYEFFECT_NEUTRALIZINGGAS 12 -#define ABILITYEFFECT_FIELD_SPORT 13 // Only used if B_SPORT_TURNS < GEN_6 +#define ABILITYEFFECT_FIELD_SPORT 13 // Only used if B_SPORT_TURNS >= GEN_6 #define ABILITYEFFECT_ON_WEATHER 14 #define ABILITYEFFECT_ON_TERRAIN 15 #define ABILITYEFFECT_SWITCH_IN_TERRAIN 16 #define ABILITYEFFECT_SWITCH_IN_WEATHER 17 +#define ABILITYEFFECT_OPPORTUNIST 18 // Special cases -#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS < GEN_6 -#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS < GEN_6 +#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS >= GEN_6 +#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6 // For the first argument of ItemBattleEffects, to deteremine which block of item effects to try #define ITEMEFFECT_ON_SWITCH_IN 0 @@ -114,13 +115,10 @@ void HandleAction_TryFinish(void); void HandleAction_NothingIsFainted(void); void HandleAction_ActionFinished(void); u8 GetBattlerForBattleScript(u8 caseId); -void PressurePPLose(u8 target, u8 attacker, u16 move); -void PressurePPLoseOnUsingPerishSong(u8 attacker); -void PressurePPLoseOnUsingImprison(u8 attacker); bool32 IsBattlerMarkedForControllerExec(u32 battler); void MarkBattlerForControllerExec(u32 battler); void MarkBattlerReceivedLinkData(u32 battler); -void CancelMultiTurnMoves(u32 battler); +const u8* CancelMultiTurnMoves(u32 battler); bool32 WasUnableToUseMove(u32 battler); void PrepareStringBattle(u16 stringId, u32 battler); void ResetSentPokesToOpponentValue(void); @@ -147,6 +145,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); u32 GetBattlerAbility(u32 battler); u32 IsAbilityOnSide(u32 battler, u32 ability); u32 IsAbilityOnOpposingSide(u32 battler, u32 ability); @@ -158,7 +157,7 @@ bool32 CanBattlerEscape(u32 battler); // no ability check void BattleScriptExecute(const u8 *BS_ptr); void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn); -void ClearFuryCutterDestinyBondGrudge(u32 battler); +void ClearVariousBattlerFlags(u32 battler); void HandleAction_RunBattleScript(void); u32 SetRandomTarget(u32 battler); u32 GetMoveTarget(u16 move, u8 setTarget); @@ -240,13 +239,15 @@ bool32 CanBeFrozen(u32 battler); bool32 CanGetFrostbite(u32 battler); bool32 CanBeConfused(u32 battler); bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag); -u32 GetBattlerFriendshipScore(u32 battler); +u32 GetBattlerAffectionHearts(u32 battler); u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc); bool32 IsMyceliumMightOnField(void); bool32 ChangeTypeBasedOnTerrain(u32 battler); void RemoveConfusionStatus(u32 battler); u8 GetBattlerGender(u32 battler); bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2); +bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2); u32 CalcSecondaryEffectChance(u32 battler, u8 secondaryEffectChance); +u8 GetBattlerType(u32 battler, u8 typeIndex); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/clock.h b/include/clock.h index aa179bf6fb..0cfd3db9ed 100644 --- a/include/clock.h +++ b/include/clock.h @@ -3,6 +3,7 @@ // TODO: time of day and seconds in a day defines +void InitTimeBasedEvents(void); void DoTimeBasedEvents(void); #endif // GUARD_CLOCK_H diff --git a/include/config.h b/include/config.h index 17082b0fdc..49559e78e8 100644 --- a/include/config.h +++ b/include/config.h @@ -74,7 +74,8 @@ #define GEN_LATEST GEN_9 // General settings -#define EXPANSION_INTRO TRUE // If TRUE, a custom RHH intro will play after the vanilla copyright screen. -#define POKEDEX_PLUS_HGSS FALSE // If TRUE, enables the custom HGSS style Pokedex. +#define EXPANSION_INTRO TRUE // If TRUE, a custom RHH intro will play after the vanilla copyright screen. +#define POKEDEX_PLUS_HGSS FALSE // If TRUE, enables the custom HGSS style Pokedex. +#define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #endif // GUARD_CONFIG_H diff --git a/include/config/battle.h b/include/config/battle.h index aee79daee5..d1ba9b969a 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -8,6 +8,8 @@ #define B_CONFUSION_SELF_DMG_CHANCE GEN_LATEST // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%. #define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values. #define B_WHITEOUT_MONEY GEN_LATEST // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.) +#define B_LIGHT_BALL_ATTACK_BOOST GEN_LATEST // In Gen4+, Light Ball doubles the power of physical moves in addition to special moves. +#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5. // Experience settings #define B_EXP_CATCH GEN_LATEST // In Gen6+, Pokémon get experience from catching. @@ -23,7 +25,7 @@ #define B_RECALCULATE_STATS GEN_LATEST // In Gen5+, the stats of the Pokémon who participate in battle are recalculated at the end of each battle. // Damage settings -#define B_BURN_DAMAGE GEN_LATEST // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. +#define B_BURN_DAMAGE GEN_LATEST // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. Also applies to Frostbite. #define B_BURN_FACADE_DMG GEN_LATEST // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade. #define B_BINDING_DAMAGE GEN_LATEST // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.) #define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See Cmd_psywavedamageeffect. @@ -66,6 +68,7 @@ #define B_KLUTZ_FLING_INTERACTION GEN_LATEST // In Gen5+, Pokémon with the Klutz ability can't use Fling. #define B_UPDATED_CONVERSION GEN_LATEST // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random. #define B_PP_REDUCED_BY_SPITE GEN_LATEST // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5. +#define B_EXTRAPOLATED_MOVE_FLAGS TRUE // Adds move flags to moves that they don't officially have but would likely have if they were in the latest core series game. // Move accuracy settings #define B_TOXIC_NEVER_MISS GEN_LATEST // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss. @@ -82,7 +85,6 @@ #define B_GROWTH_STAT_RAISE GEN_LATEST // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead. // Other move settings -#define B_SOUND_SUBSTITUTE GEN_LATEST // In Gen6+, sound moves bypass Substitute. #define B_INCINERATE_GEMS GEN_LATEST // In Gen6+, Incinerate can destroy Gems. #define B_CAN_SPITE_FAIL GEN_LATEST // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP. #define B_CRASH_IF_TARGET_IMMUNE GEN_LATEST // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move. @@ -115,7 +117,6 @@ #define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation. #define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore. #define B_FLASH_FIRE_FROZEN GEN_LATEST // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before. -#define B_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously. #define B_SYNCHRONIZE_TOXIC GEN_LATEST // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned. #define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled. #define B_OBLIVIOUS_TAUNT GEN_LATEST // In Gen6+, Pokémon with Oblivious can't be taunted. @@ -126,16 +127,19 @@ #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_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. +#define B_ILLUMINATE_EFFECT GEN_LATEST // In Gen9+, Illuminate prevents accuracy reductions and ignores the target's evasion. +#define B_WEAK_ARMOR_SPEED GEN_LATEST // In Gen7+, Weak Armor raises Speed by 2 stages instead of 1 when hit by a physical move. // Item settings -#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. +#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. #define B_BERRIES_INSTANT GEN_LATEST // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end. #define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. #define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before. #define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items. #define B_RESTORE_HELD_BATTLE_ITEMS TRUE // In Gen9 all non berry items are restored after battle. -#define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. +#define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. #define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3. #define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing. #define B_NEST_BALL_MODIFIER GEN_LATEST // Nest Ball's formula varies depending on the Gen. See Cmd_handleballthrow. @@ -158,6 +162,7 @@ #define B_FLAG_NO_BAG_USE 0 // If this flag is set, the ability to use the bag in battle is disabled. #define B_FLAG_NO_CATCHING 0 // If this flag is set, the ability to catch wild Pokémon is disabled. #define B_FLAG_AI_VS_AI_BATTLE 0 // If this flag is set, the player's mons will be controlled by the ai next battles. +#define B_FLAG_DYNAMAX_BATTLE 0 // If this flag is set, the ability to Dynamax in battle is enabled for all trainers. // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. @@ -187,6 +192,7 @@ #define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. #define B_EXPANDED_MOVE_NAMES FALSE // If set to TRUE, move names are increased from 12 characters to 16 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 // 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) @@ -194,7 +200,7 @@ #define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. #define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented #define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. -#define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls +#define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. @@ -202,9 +208,9 @@ #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) -#define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. +#define B_AFFECTION_MECHANICS TRUE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. #define B_TRAINER_CLASS_POKE_BALLS GEN_LATEST // In Gen7+, trainers will use certain types of Poké Balls depending on their trainer class. -#define B_OBEDIENCE_MECHANICS GEN_7 // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level +#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level #define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config. #define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail. diff --git a/include/config/item.h b/include/config/item.h index c0575a352a..55de3fdb60 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -13,11 +13,14 @@ #define I_GEM_BOOST_POWER GEN_LATEST // In Gen5+, the Gem boost power was reduced from 50% to 30%. #define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA. #define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, all regular type boosting held items had their power increased from 10% to 20%. eg. Charcoal +#define I_SELL_VALUE_FRACTION GEN_LATEST // In Gen9+, items sell for 1/4 of their value instead of 1/2. // TM config #define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. // Exp. Share config +// To use this feature, replace the 0 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 I_EXP_SHARE_FLAG 0 // If this flag is set, every Pokémon in the party will gain experience, regardless if they participated in the battle or not. #define I_EXP_SHARE_ITEM GEN_5 // In Gen6+, the Exp. Share was changed from a held item to a Key item that toggles the effect described above. diff --git a/include/config/overworld.h b/include/config/overworld.h index e8056236a0..cac35413de 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -9,6 +9,21 @@ // PC settings #define OW_PC_PRESS_B GEN_LATEST // In Gen4, pressing B when holding a Pokémon is equivalent to placing it. In Gen3, it gives the "You're holding a Pokémon!" error. +#define OW_PC_JAPAN_WALDA_ICONS TRUE // In the US release of Emerald, the Cross, Bolt, and Plusle icons for Walda's wallpapers were left blank from the Japan release. Setting this to TRUE will restore them. + +// Out-of-battle Ability effects +#define OW_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same Nature, as opposed to 50% previously. Stationary Pokémon are excluded in Gen3. In Gen6, all No Eggs Discovered gift Pokémon will have the same Nature, while in Gen7 all gift Pokémon will, regardless of Egg Group - In Gen 8, no gift Pokémon are affected. In Gen9, this ability has no out-of-battle effect. +#define OW_COMPOUND_EYES GEN_LATEST // Prior to Gen9, if a Pokémon with Compound Eyes is leading the party, the wild held item rate is increased to 60%/20%. +#define OW_SUPER_LUCK GEN_LATEST // In Gen8, if a Pokémon with Super Luck is leading the party, the wild held item rate is increased to 60%/20%. +#define OW_CUTE_CHARM GEN_LATEST // Prior to Gen9, if a Pokémon with Cute Charm is leading the party, wild encounters have a 66.7% chance to be forced to be of the opposite gender. +#define OW_ILLUMINATE GEN_LATEST // Prior to Gen9, if a Pokémon with Illuminate is leading the party, the wild encounter rate is doubled. +#define OW_INFILTRATOR GEN_LATEST // In Gen8, if a Pokémon with Infiltrator is leading the party, the wild encounter rate is halved. +#define OW_HARVEST GEN_LATEST // In Gen8, if a Pokémon with Harvest is leading the party, there is a 50% chance to encounter a Grass-type Pokémon. +#define OW_LIGHTNING_ROD GEN_LATEST // In Gen8, if a Pokémon with Lightning Rod is leading the party, there is a 50% chance to encounter an Electric-type Pokémon. +#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. +#define OW_MAGNET_PULL GEN_LATEST // Prior to Gen9, if a Pokémon with Magnet Pull is leading the party, there is a 50% chance to encounter a Steel-type Pokémon. +#define OW_STATIC GEN_LATEST // Prior to Gen9, if a Pokémon with Static is leading the party, there is a 50% chance to encounter an Electric-type Pokémon. // Overworld flags // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. @@ -17,4 +32,6 @@ #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. +#define BATTLE_PYRAMID_RANDOM_ENCOUNTERS FALSE // If set to TRUE, battle pyramid Pokemon will be generated randomly based on the round's challenge instead of hardcoded in src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h (or open_level_wild_mons.h) + #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h index a65eddb73c..900c66bb40 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -6,6 +6,10 @@ #define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation. #define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed. #define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups. +#define P_UPDATED_FRIENDSHIP GEN_LATEST // Since Gen 8, the base friendship of certain Pokémon was changed. + +// Evolution settings +#define P_FRIENDSHIP_EVO_THRESHOLD GEN_LATEST // Since Gen 8, Pokémon that evolve by friendship evolve at or above 160 friendship instead of 220. // Breeding settings #define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. @@ -21,10 +25,10 @@ // Species-specific settings #define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. #define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. -#define P_HIPPO_GENDER_DIFF_ICONS TRUE // If TRUE, will give Hippopotas and Hippowdon custom icons for their female forms. #define P_SHUCKLE_BERRY_JUICE TRUE // In Gen 2, Shuckle had a 1/16 chance of converting Berry that it's holding into Berry Juice. Setting this to TRUE will allow to do this with an Oran Berry, which is the spiritual succesor of the Berry item. // 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_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. @@ -35,13 +39,19 @@ #define P_FLAG_FORCE_NO_SHINY 0 // If this flag is set, all wild and gift Pokémon will forced into NOT being Shiny. // Modifying the latest generation WILL change the saveblock due to Dex flags and will require a new save file. -// Forms are kept based on the base species, Eg: Meowth and Persian will keep all of their forms, but Perrserker will not be available if P_GEN_8_POKEMON is set to FALSE. -// If you're disabling a generation previous to others (eg: Gen 5 but not Gen 6, 7 and 8), -// remember to update NATIONAL_DEX enum in include/constants/pokedex.h to avoid players from softlocking in the non-existant entries. +// Generations of Pokémon are defined by the first member introduced. +// Eg: If P_GEN_2_POKEMON is set to FALSE, all members of the Sneasel Family will be disabled (Sneasel + Hisuian, Weavile and Sneasler). +#define P_GEN_1_POKEMON TRUE // Generation 1 Pokémon (RGBY) +#define P_GEN_2_POKEMON TRUE // Generation 2 Pokémon (GSC) +#define P_GEN_3_POKEMON TRUE // Generation 3 Pokémon (RSE, FRLG) #define P_GEN_4_POKEMON TRUE // Generation 4 Pokémon (DPPt, HGSS) #define P_GEN_5_POKEMON TRUE // Generation 5 Pokémon (BW, B2W2) #define P_GEN_6_POKEMON TRUE // Generation 6 Pokémon (XY, ORAS) #define P_GEN_7_POKEMON TRUE // Generation 7 Pokémon (SM, USUM, LGPE) #define P_GEN_8_POKEMON TRUE // Generation 8 Pokémon (SwSh, BDSP, LA) +#define P_GEN_9_POKEMON TRUE // Generation 9 Pokémon (SV) + +// Go here if you want to disable specific families of Pokémon. +#include "config/species_families.h" #endif // GUARD_CONFIG_POKEMON_H diff --git a/include/config/species_families.h b/include/config/species_families.h new file mode 100644 index 0000000000..c3b07ecc69 --- /dev/null +++ b/include/config/species_families.h @@ -0,0 +1,557 @@ +#ifndef GUARD_CONFIG_SPECIES_FAMILIES_H +#define GUARD_CONFIG_SPECIES_FAMILIES_H + +#define P_REGIONAL_FORMS TRUE +#define P_ALOLAN_FORMS P_REGIONAL_FORMS +#define P_GALARIAN_FORMS P_REGIONAL_FORMS +#define P_HISUIAN_FORMS P_REGIONAL_FORMS +#define P_PALDEAN_FORMS P_REGIONAL_FORMS + +#define P_MEGA_EVOLUTIONS TRUE +#define P_GIGANTAMAX_FORMS TRUE + +// To disable specific families, replace P_GEN_x_POKEMON with FALSE. + +#define P_FAMILY_BULBASAUR P_GEN_1_POKEMON +#define P_FAMILY_CHARMANDER P_GEN_1_POKEMON +#define P_FAMILY_SQUIRTLE P_GEN_1_POKEMON +#define P_FAMILY_CATERPIE P_GEN_1_POKEMON +#define P_FAMILY_WEEDLE P_GEN_1_POKEMON +#define P_FAMILY_PIDGEY P_GEN_1_POKEMON +#define P_FAMILY_RATTATA P_GEN_1_POKEMON +#define P_FAMILY_SPEAROW P_GEN_1_POKEMON +#define P_FAMILY_EKANS P_GEN_1_POKEMON +#define P_FAMILY_PIKACHU P_GEN_1_POKEMON +#define P_FAMILY_SANDSHREW P_GEN_1_POKEMON +#define P_FAMILY_NIDORAN P_GEN_1_POKEMON +#define P_FAMILY_CLEFAIRY P_GEN_1_POKEMON +#define P_FAMILY_VULPIX P_GEN_1_POKEMON +#define P_FAMILY_JIGGLYPUFF P_GEN_1_POKEMON +#define P_FAMILY_ZUBAT P_GEN_1_POKEMON +#define P_FAMILY_ODDISH P_GEN_1_POKEMON +#define P_FAMILY_PARAS P_GEN_1_POKEMON +#define P_FAMILY_VENONAT P_GEN_1_POKEMON +#define P_FAMILY_DIGLETT P_GEN_1_POKEMON +#define P_FAMILY_MEOWTH P_GEN_1_POKEMON +#define P_FAMILY_PSYDUCK P_GEN_1_POKEMON +#define P_FAMILY_MANKEY P_GEN_1_POKEMON +#define P_FAMILY_GROWLITHE P_GEN_1_POKEMON +#define P_FAMILY_POLIWAG P_GEN_1_POKEMON +#define P_FAMILY_ABRA P_GEN_1_POKEMON +#define P_FAMILY_MACHOP P_GEN_1_POKEMON +#define P_FAMILY_BELLSPROUT P_GEN_1_POKEMON +#define P_FAMILY_TENTACOOL P_GEN_1_POKEMON +#define P_FAMILY_GEODUDE P_GEN_1_POKEMON +#define P_FAMILY_PONYTA P_GEN_1_POKEMON +#define P_FAMILY_SLOWPOKE P_GEN_1_POKEMON +#define P_FAMILY_MAGNEMITE P_GEN_1_POKEMON +#define P_FAMILY_FARFETCHD P_GEN_1_POKEMON +#define P_FAMILY_DODUO P_GEN_1_POKEMON +#define P_FAMILY_SEEL P_GEN_1_POKEMON +#define P_FAMILY_GRIMER P_GEN_1_POKEMON +#define P_FAMILY_SHELLDER P_GEN_1_POKEMON +#define P_FAMILY_GASTLY P_GEN_1_POKEMON +#define P_FAMILY_ONIX P_GEN_1_POKEMON +#define P_FAMILY_DROWZEE P_GEN_1_POKEMON +#define P_FAMILY_KRABBY P_GEN_1_POKEMON +#define P_FAMILY_VOLTORB P_GEN_1_POKEMON +#define P_FAMILY_EXEGGCUTE P_GEN_1_POKEMON +#define P_FAMILY_CUBONE P_GEN_1_POKEMON +#define P_FAMILY_HITMONS P_GEN_1_POKEMON +#define P_FAMILY_LICKITUNG P_GEN_1_POKEMON +#define P_FAMILY_KOFFING P_GEN_1_POKEMON +#define P_FAMILY_RHYHORN P_GEN_1_POKEMON +#define P_FAMILY_CHANSEY P_GEN_1_POKEMON +#define P_FAMILY_TANGELA P_GEN_1_POKEMON +#define P_FAMILY_KANGASKHAN P_GEN_1_POKEMON +#define P_FAMILY_HORSEA P_GEN_1_POKEMON +#define P_FAMILY_GOLDEEN P_GEN_1_POKEMON +#define P_FAMILY_STARYU P_GEN_1_POKEMON +#define P_FAMILY_MR_MIME P_GEN_1_POKEMON +#define P_FAMILY_SCYTHER P_GEN_1_POKEMON +#define P_FAMILY_JYNX P_GEN_1_POKEMON +#define P_FAMILY_ELECTABUZZ P_GEN_1_POKEMON +#define P_FAMILY_MAGMAR P_GEN_1_POKEMON +#define P_FAMILY_PINSIR P_GEN_1_POKEMON +#define P_FAMILY_TAUROS P_GEN_1_POKEMON +#define P_FAMILY_MAGIKARP P_GEN_1_POKEMON +#define P_FAMILY_LAPRAS P_GEN_1_POKEMON +#define P_FAMILY_DITTO P_GEN_1_POKEMON +#define P_FAMILY_EEVEE P_GEN_1_POKEMON +#define P_FAMILY_PORYGON P_GEN_1_POKEMON +#define P_FAMILY_OMANYTE P_GEN_1_POKEMON +#define P_FAMILY_KABUTO P_GEN_1_POKEMON +#define P_FAMILY_AERODACTYL P_GEN_1_POKEMON +#define P_FAMILY_SNORLAX P_GEN_1_POKEMON +#define P_FAMILY_ARTICUNO P_GEN_1_POKEMON +#define P_FAMILY_ZAPDOS P_GEN_1_POKEMON +#define P_FAMILY_MOLTRES P_GEN_1_POKEMON +#define P_FAMILY_DRATINI P_GEN_1_POKEMON +#define P_FAMILY_MEWTWO P_GEN_1_POKEMON +#define P_FAMILY_MEW P_GEN_1_POKEMON + +#define P_FAMILY_CHIKORITA P_GEN_2_POKEMON +#define P_FAMILY_CYNDAQUIL P_GEN_2_POKEMON +#define P_FAMILY_TOTODILE P_GEN_2_POKEMON +#define P_FAMILY_SENTRET P_GEN_2_POKEMON +#define P_FAMILY_HOOTHOOT P_GEN_2_POKEMON +#define P_FAMILY_LEDYBA P_GEN_2_POKEMON +#define P_FAMILY_SPINARAK P_GEN_2_POKEMON +#define P_FAMILY_CHINCHOU P_GEN_2_POKEMON +#define P_FAMILY_TOGEPI P_GEN_2_POKEMON +#define P_FAMILY_NATU P_GEN_2_POKEMON +#define P_FAMILY_MAREEP P_GEN_2_POKEMON +#define P_FAMILY_MARILL P_GEN_2_POKEMON +#define P_FAMILY_SUDOWOODO P_GEN_2_POKEMON +#define P_FAMILY_HOPPIP P_GEN_2_POKEMON +#define P_FAMILY_AIPOM P_GEN_2_POKEMON +#define P_FAMILY_SUNKERN P_GEN_2_POKEMON +#define P_FAMILY_YANMA P_GEN_2_POKEMON +#define P_FAMILY_WOOPER P_GEN_2_POKEMON +#define P_FAMILY_MURKROW P_GEN_2_POKEMON +#define P_FAMILY_MISDREAVUS P_GEN_2_POKEMON +#define P_FAMILY_UNOWN P_GEN_2_POKEMON +#define P_FAMILY_WOBBUFFET P_GEN_2_POKEMON +#define P_FAMILY_GIRAFARIG P_GEN_2_POKEMON +#define P_FAMILY_PINECO P_GEN_2_POKEMON +#define P_FAMILY_DUNSPARCE P_GEN_2_POKEMON +#define P_FAMILY_GLIGAR P_GEN_2_POKEMON +#define P_FAMILY_SNUBBULL P_GEN_2_POKEMON +#define P_FAMILY_QWILFISH P_GEN_2_POKEMON +#define P_FAMILY_SHUCKLE P_GEN_2_POKEMON +#define P_FAMILY_HERACROSS P_GEN_2_POKEMON +#define P_FAMILY_SNEASEL P_GEN_2_POKEMON +#define P_FAMILY_TEDDIURSA P_GEN_2_POKEMON +#define P_FAMILY_SLUGMA P_GEN_2_POKEMON +#define P_FAMILY_SWINUB P_GEN_2_POKEMON +#define P_FAMILY_CORSOLA P_GEN_2_POKEMON +#define P_FAMILY_REMORAID P_GEN_2_POKEMON +#define P_FAMILY_DELIBIRD P_GEN_2_POKEMON +#define P_FAMILY_MANTINE P_GEN_2_POKEMON +#define P_FAMILY_SKARMORY P_GEN_2_POKEMON +#define P_FAMILY_HOUNDOUR P_GEN_2_POKEMON +#define P_FAMILY_PHANPY P_GEN_2_POKEMON +#define P_FAMILY_STANTLER P_GEN_2_POKEMON +#define P_FAMILY_SMEARGLE P_GEN_2_POKEMON +#define P_FAMILY_MILTANK P_GEN_2_POKEMON +#define P_FAMILY_RAIKOU P_GEN_2_POKEMON +#define P_FAMILY_ENTEI P_GEN_2_POKEMON +#define P_FAMILY_SUICUNE P_GEN_2_POKEMON +#define P_FAMILY_LARVITAR P_GEN_2_POKEMON +#define P_FAMILY_LUGIA P_GEN_2_POKEMON +#define P_FAMILY_HO_OH P_GEN_2_POKEMON +#define P_FAMILY_CELEBI P_GEN_2_POKEMON + +#define P_FAMILY_TREECKO P_GEN_3_POKEMON +#define P_FAMILY_TORCHIC P_GEN_3_POKEMON +#define P_FAMILY_MUDKIP P_GEN_3_POKEMON +#define P_FAMILY_POOCHYENA P_GEN_3_POKEMON +#define P_FAMILY_ZIGZAGOON P_GEN_3_POKEMON +#define P_FAMILY_WURMPLE P_GEN_3_POKEMON +#define P_FAMILY_LOTAD P_GEN_3_POKEMON +#define P_FAMILY_SEEDOT P_GEN_3_POKEMON +#define P_FAMILY_TAILLOW P_GEN_3_POKEMON +#define P_FAMILY_WINGULL P_GEN_3_POKEMON +#define P_FAMILY_RALTS P_GEN_3_POKEMON +#define P_FAMILY_SURSKIT P_GEN_3_POKEMON +#define P_FAMILY_SHROOMISH P_GEN_3_POKEMON +#define P_FAMILY_SLAKOTH P_GEN_3_POKEMON +#define P_FAMILY_NINCADA P_GEN_3_POKEMON +#define P_FAMILY_WHISMUR P_GEN_3_POKEMON +#define P_FAMILY_MAKUHITA P_GEN_3_POKEMON +#define P_FAMILY_NOSEPASS P_GEN_3_POKEMON +#define P_FAMILY_SKITTY P_GEN_3_POKEMON +#define P_FAMILY_SABLEYE P_GEN_3_POKEMON +#define P_FAMILY_MAWILE P_GEN_3_POKEMON +#define P_FAMILY_ARON P_GEN_3_POKEMON +#define P_FAMILY_MEDITITE P_GEN_3_POKEMON +#define P_FAMILY_ELECTRIKE P_GEN_3_POKEMON +#define P_FAMILY_PLUSLE P_GEN_3_POKEMON +#define P_FAMILY_MINUN P_GEN_3_POKEMON +#define P_FAMILY_VOLBEAT_ILLUMISE P_GEN_3_POKEMON +#define P_FAMILY_ROSELIA P_GEN_3_POKEMON +#define P_FAMILY_GULPIN P_GEN_3_POKEMON +#define P_FAMILY_CARVANHA P_GEN_3_POKEMON +#define P_FAMILY_WAILMER P_GEN_3_POKEMON +#define P_FAMILY_NUMEL P_GEN_3_POKEMON +#define P_FAMILY_TORKOAL P_GEN_3_POKEMON +#define P_FAMILY_SPOINK P_GEN_3_POKEMON +#define P_FAMILY_SPINDA P_GEN_3_POKEMON +#define P_FAMILY_TRAPINCH P_GEN_3_POKEMON +#define P_FAMILY_CACNEA P_GEN_3_POKEMON +#define P_FAMILY_SWABLU P_GEN_3_POKEMON +#define P_FAMILY_ZANGOOSE P_GEN_3_POKEMON +#define P_FAMILY_SEVIPER P_GEN_3_POKEMON +#define P_FAMILY_LUNATONE P_GEN_3_POKEMON +#define P_FAMILY_SOLROCK P_GEN_3_POKEMON +#define P_FAMILY_BARBOACH P_GEN_3_POKEMON +#define P_FAMILY_CORPHISH P_GEN_3_POKEMON +#define P_FAMILY_BALTOY P_GEN_3_POKEMON +#define P_FAMILY_LILEEP P_GEN_3_POKEMON +#define P_FAMILY_ANORITH P_GEN_3_POKEMON +#define P_FAMILY_FEEBAS P_GEN_3_POKEMON +#define P_FAMILY_CASTFORM P_GEN_3_POKEMON +#define P_FAMILY_KECLEON P_GEN_3_POKEMON +#define P_FAMILY_SHUPPET P_GEN_3_POKEMON +#define P_FAMILY_DUSKULL P_GEN_3_POKEMON +#define P_FAMILY_TROPIUS P_GEN_3_POKEMON +#define P_FAMILY_CHIMECHO P_GEN_3_POKEMON +#define P_FAMILY_ABSOL P_GEN_3_POKEMON +#define P_FAMILY_SNORUNT P_GEN_3_POKEMON +#define P_FAMILY_SPHEAL P_GEN_3_POKEMON +#define P_FAMILY_CLAMPERL P_GEN_3_POKEMON +#define P_FAMILY_RELICANTH P_GEN_3_POKEMON +#define P_FAMILY_LUVDISC P_GEN_3_POKEMON +#define P_FAMILY_BAGON P_GEN_3_POKEMON +#define P_FAMILY_BELDUM P_GEN_3_POKEMON +#define P_FAMILY_REGIROCK P_GEN_3_POKEMON +#define P_FAMILY_REGICE P_GEN_3_POKEMON +#define P_FAMILY_REGISTEEL P_GEN_3_POKEMON +#define P_FAMILY_LATIAS P_GEN_3_POKEMON +#define P_FAMILY_LATIOS P_GEN_3_POKEMON +#define P_FAMILY_KYOGRE P_GEN_3_POKEMON +#define P_FAMILY_GROUDON P_GEN_3_POKEMON +#define P_FAMILY_RAYQUAZA P_GEN_3_POKEMON +#define P_FAMILY_JIRACHI P_GEN_3_POKEMON +#define P_FAMILY_DEOXYS P_GEN_3_POKEMON + +#define P_FAMILY_TURTWIG P_GEN_4_POKEMON +#define P_FAMILY_CHIMCHAR P_GEN_4_POKEMON +#define P_FAMILY_PIPLUP P_GEN_4_POKEMON +#define P_FAMILY_STARLY P_GEN_4_POKEMON +#define P_FAMILY_BIDOOF P_GEN_4_POKEMON +#define P_FAMILY_KRICKETOT P_GEN_4_POKEMON +#define P_FAMILY_SHINX P_GEN_4_POKEMON +#define P_FAMILY_CRANIDOS P_GEN_4_POKEMON +#define P_FAMILY_SHIELDON P_GEN_4_POKEMON +#define P_FAMILY_BURMY P_GEN_4_POKEMON +#define P_FAMILY_COMBEE P_GEN_4_POKEMON +#define P_FAMILY_PACHIRISU P_GEN_4_POKEMON +#define P_FAMILY_BUIZEL P_GEN_4_POKEMON +#define P_FAMILY_CHERUBI P_GEN_4_POKEMON +#define P_FAMILY_SHELLOS P_GEN_4_POKEMON +#define P_FAMILY_DRIFLOON P_GEN_4_POKEMON +#define P_FAMILY_BUNEARY P_GEN_4_POKEMON +#define P_FAMILY_GLAMEOW P_GEN_4_POKEMON +#define P_FAMILY_STUNKY P_GEN_4_POKEMON +#define P_FAMILY_BRONZOR P_GEN_4_POKEMON +#define P_FAMILY_CHATOT P_GEN_4_POKEMON +#define P_FAMILY_SPIRITOMB P_GEN_4_POKEMON +#define P_FAMILY_GIBLE P_GEN_4_POKEMON +#define P_FAMILY_RIOLU P_GEN_4_POKEMON +#define P_FAMILY_HIPPOPOTAS P_GEN_4_POKEMON +#define P_FAMILY_SKORUPI P_GEN_4_POKEMON +#define P_FAMILY_CROAGUNK P_GEN_4_POKEMON +#define P_FAMILY_CARNIVINE P_GEN_4_POKEMON +#define P_FAMILY_FINNEON P_GEN_4_POKEMON +#define P_FAMILY_SNOVER P_GEN_4_POKEMON +#define P_FAMILY_ROTOM P_GEN_4_POKEMON +#define P_FAMILY_UXIE P_GEN_4_POKEMON +#define P_FAMILY_MESPRIT P_GEN_4_POKEMON +#define P_FAMILY_AZELF P_GEN_4_POKEMON +#define P_FAMILY_DIALGA P_GEN_4_POKEMON +#define P_FAMILY_PALKIA P_GEN_4_POKEMON +#define P_FAMILY_HEATRAN P_GEN_4_POKEMON +#define P_FAMILY_REGIGIGAS P_GEN_4_POKEMON +#define P_FAMILY_GIRATINA P_GEN_4_POKEMON +#define P_FAMILY_CRESSELIA P_GEN_4_POKEMON +#define P_FAMILY_MANAPHY P_GEN_4_POKEMON +#define P_FAMILY_DARKRAI P_GEN_4_POKEMON +#define P_FAMILY_SHAYMIN P_GEN_4_POKEMON +#define P_FAMILY_ARCEUS P_GEN_4_POKEMON + +#define P_FAMILY_VICTINI P_GEN_5_POKEMON +#define P_FAMILY_SNIVY P_GEN_5_POKEMON +#define P_FAMILY_TEPIG P_GEN_5_POKEMON +#define P_FAMILY_OSHAWOTT P_GEN_5_POKEMON +#define P_FAMILY_PATRAT P_GEN_5_POKEMON +#define P_FAMILY_LILLIPUP P_GEN_5_POKEMON +#define P_FAMILY_PURRLOIN P_GEN_5_POKEMON +#define P_FAMILY_PANSAGE P_GEN_5_POKEMON +#define P_FAMILY_PANSEAR P_GEN_5_POKEMON +#define P_FAMILY_PANPOUR P_GEN_5_POKEMON +#define P_FAMILY_MUNNA P_GEN_5_POKEMON +#define P_FAMILY_PIDOVE P_GEN_5_POKEMON +#define P_FAMILY_BLITZLE P_GEN_5_POKEMON +#define P_FAMILY_ROGGENROLA P_GEN_5_POKEMON +#define P_FAMILY_WOOBAT P_GEN_5_POKEMON +#define P_FAMILY_DRILBUR P_GEN_5_POKEMON +#define P_FAMILY_AUDINO P_GEN_5_POKEMON +#define P_FAMILY_TIMBURR P_GEN_5_POKEMON +#define P_FAMILY_TYMPOLE P_GEN_5_POKEMON +#define P_FAMILY_THROH P_GEN_5_POKEMON +#define P_FAMILY_SAWK P_GEN_5_POKEMON +#define P_FAMILY_SEWADDLE P_GEN_5_POKEMON +#define P_FAMILY_VENIPEDE P_GEN_5_POKEMON +#define P_FAMILY_COTTONEE P_GEN_5_POKEMON +#define P_FAMILY_PETILIL P_GEN_5_POKEMON +#define P_FAMILY_BASCULIN P_GEN_5_POKEMON +#define P_FAMILY_SANDILE P_GEN_5_POKEMON +#define P_FAMILY_DARUMAKA P_GEN_5_POKEMON +#define P_FAMILY_MARACTUS P_GEN_5_POKEMON +#define P_FAMILY_DWEBBLE P_GEN_5_POKEMON +#define P_FAMILY_SCRAGGY P_GEN_5_POKEMON +#define P_FAMILY_SIGILYPH P_GEN_5_POKEMON +#define P_FAMILY_YAMASK P_GEN_5_POKEMON +#define P_FAMILY_TIRTOUGA P_GEN_5_POKEMON +#define P_FAMILY_ARCHEN P_GEN_5_POKEMON +#define P_FAMILY_TRUBBISH P_GEN_5_POKEMON +#define P_FAMILY_ZORUA P_GEN_5_POKEMON +#define P_FAMILY_MINCCINO P_GEN_5_POKEMON +#define P_FAMILY_GOTHITA P_GEN_5_POKEMON +#define P_FAMILY_SOLOSIS P_GEN_5_POKEMON +#define P_FAMILY_DUCKLETT P_GEN_5_POKEMON +#define P_FAMILY_VANILLITE P_GEN_5_POKEMON +#define P_FAMILY_DEERLING P_GEN_5_POKEMON +#define P_FAMILY_EMOLGA P_GEN_5_POKEMON +#define P_FAMILY_KARRABLAST P_GEN_5_POKEMON +#define P_FAMILY_FOONGUS P_GEN_5_POKEMON +#define P_FAMILY_FRILLISH P_GEN_5_POKEMON +#define P_FAMILY_ALOMOMOLA P_GEN_5_POKEMON +#define P_FAMILY_JOLTIK P_GEN_5_POKEMON +#define P_FAMILY_FERROSEED P_GEN_5_POKEMON +#define P_FAMILY_KLINK P_GEN_5_POKEMON +#define P_FAMILY_TYNAMO P_GEN_5_POKEMON +#define P_FAMILY_ELGYEM P_GEN_5_POKEMON +#define P_FAMILY_LITWICK P_GEN_5_POKEMON +#define P_FAMILY_AXEW P_GEN_5_POKEMON +#define P_FAMILY_CUBCHOO P_GEN_5_POKEMON +#define P_FAMILY_CRYOGONAL P_GEN_5_POKEMON +#define P_FAMILY_SHELMET P_GEN_5_POKEMON +#define P_FAMILY_STUNFISK P_GEN_5_POKEMON +#define P_FAMILY_MIENFOO P_GEN_5_POKEMON +#define P_FAMILY_DRUDDIGON P_GEN_5_POKEMON +#define P_FAMILY_GOLETT P_GEN_5_POKEMON +#define P_FAMILY_PAWNIARD P_GEN_5_POKEMON +#define P_FAMILY_BOUFFALANT P_GEN_5_POKEMON +#define P_FAMILY_RUFFLET P_GEN_5_POKEMON +#define P_FAMILY_VULLABY P_GEN_5_POKEMON +#define P_FAMILY_HEATMOR P_GEN_5_POKEMON +#define P_FAMILY_DURANT P_GEN_5_POKEMON +#define P_FAMILY_DEINO P_GEN_5_POKEMON +#define P_FAMILY_LARVESTA P_GEN_5_POKEMON +#define P_FAMILY_COBALION P_GEN_5_POKEMON +#define P_FAMILY_TERRAKION P_GEN_5_POKEMON +#define P_FAMILY_VIRIZION P_GEN_5_POKEMON +#define P_FAMILY_TORNADUS P_GEN_5_POKEMON +#define P_FAMILY_THUNDURUS P_GEN_5_POKEMON +#define P_FAMILY_RESHIRAM P_GEN_5_POKEMON +#define P_FAMILY_ZEKROM P_GEN_5_POKEMON +#define P_FAMILY_LANDORUS P_GEN_5_POKEMON +#define P_FAMILY_KYUREM P_GEN_5_POKEMON +#define P_FAMILY_KELDEO P_GEN_5_POKEMON +#define P_FAMILY_MELOETTA P_GEN_5_POKEMON +#define P_FAMILY_GENESECT P_GEN_5_POKEMON + +#define P_FAMILY_CHESPIN P_GEN_6_POKEMON +#define P_FAMILY_FENNEKIN P_GEN_6_POKEMON +#define P_FAMILY_FROAKIE P_GEN_6_POKEMON +#define P_FAMILY_BUNNELBY P_GEN_6_POKEMON +#define P_FAMILY_FLETCHLING P_GEN_6_POKEMON +#define P_FAMILY_SCATTERBUG P_GEN_6_POKEMON +#define P_FAMILY_LITLEO P_GEN_6_POKEMON +#define P_FAMILY_FLABEBE P_GEN_6_POKEMON +#define P_FAMILY_SKIDDO P_GEN_6_POKEMON +#define P_FAMILY_PANCHAM P_GEN_6_POKEMON +#define P_FAMILY_FURFROU P_GEN_6_POKEMON +#define P_FAMILY_ESPURR P_GEN_6_POKEMON +#define P_FAMILY_HONEDGE P_GEN_6_POKEMON +#define P_FAMILY_SPRITZEE P_GEN_6_POKEMON +#define P_FAMILY_SWIRLIX P_GEN_6_POKEMON +#define P_FAMILY_INKAY P_GEN_6_POKEMON +#define P_FAMILY_BINACLE P_GEN_6_POKEMON +#define P_FAMILY_SKRELP P_GEN_6_POKEMON +#define P_FAMILY_CLAUNCHER P_GEN_6_POKEMON +#define P_FAMILY_HELIOPTILE P_GEN_6_POKEMON +#define P_FAMILY_TYRUNT P_GEN_6_POKEMON +#define P_FAMILY_AMAURA P_GEN_6_POKEMON +#define P_FAMILY_HAWLUCHA P_GEN_6_POKEMON +#define P_FAMILY_DEDENNE P_GEN_6_POKEMON +#define P_FAMILY_CARBINK P_GEN_6_POKEMON +#define P_FAMILY_GOOMY P_GEN_6_POKEMON +#define P_FAMILY_KLEFKI P_GEN_6_POKEMON +#define P_FAMILY_PHANTUMP P_GEN_6_POKEMON +#define P_FAMILY_PUMPKABOO P_GEN_6_POKEMON +#define P_FAMILY_BERGMITE P_GEN_6_POKEMON +#define P_FAMILY_NOIBAT P_GEN_6_POKEMON +#define P_FAMILY_XERNEAS P_GEN_6_POKEMON +#define P_FAMILY_YVELTAL P_GEN_6_POKEMON +#define P_FAMILY_ZYGARDE P_GEN_6_POKEMON +#define P_FAMILY_DIANCIE P_GEN_6_POKEMON +#define P_FAMILY_HOOPA P_GEN_6_POKEMON +#define P_FAMILY_VOLCANION P_GEN_6_POKEMON + +#define P_FAMILY_ROWLET P_GEN_7_POKEMON +#define P_FAMILY_LITTEN P_GEN_7_POKEMON +#define P_FAMILY_POPPLIO P_GEN_7_POKEMON +#define P_FAMILY_PIKIPEK P_GEN_7_POKEMON +#define P_FAMILY_YUNGOOS P_GEN_7_POKEMON +#define P_FAMILY_GRUBBIN P_GEN_7_POKEMON +#define P_FAMILY_CRABRAWLER P_GEN_7_POKEMON +#define P_FAMILY_ORICORIO P_GEN_7_POKEMON +#define P_FAMILY_CUTIEFLY P_GEN_7_POKEMON +#define P_FAMILY_ROCKRUFF P_GEN_7_POKEMON +#define P_FAMILY_WISHIWASHI P_GEN_7_POKEMON +#define P_FAMILY_MAREANIE P_GEN_7_POKEMON +#define P_FAMILY_MUDBRAY P_GEN_7_POKEMON +#define P_FAMILY_DEWPIDER P_GEN_7_POKEMON +#define P_FAMILY_FOMANTIS P_GEN_7_POKEMON +#define P_FAMILY_MORELULL P_GEN_7_POKEMON +#define P_FAMILY_SALANDIT P_GEN_7_POKEMON +#define P_FAMILY_STUFFUL P_GEN_7_POKEMON +#define P_FAMILY_BOUNSWEET P_GEN_7_POKEMON +#define P_FAMILY_COMFEY P_GEN_7_POKEMON +#define P_FAMILY_ORANGURU P_GEN_7_POKEMON +#define P_FAMILY_PASSIMIAN P_GEN_7_POKEMON +#define P_FAMILY_WIMPOD P_GEN_7_POKEMON +#define P_FAMILY_SANDYGAST P_GEN_7_POKEMON +#define P_FAMILY_PYUKUMUKU P_GEN_7_POKEMON +#define P_FAMILY_TYPE_NULL P_GEN_7_POKEMON +#define P_FAMILY_MINIOR P_GEN_7_POKEMON +#define P_FAMILY_KOMALA P_GEN_7_POKEMON +#define P_FAMILY_TURTONATOR P_GEN_7_POKEMON +#define P_FAMILY_TOGEDEMARU P_GEN_7_POKEMON +#define P_FAMILY_MIMIKYU P_GEN_7_POKEMON +#define P_FAMILY_BRUXISH P_GEN_7_POKEMON +#define P_FAMILY_DRAMPA P_GEN_7_POKEMON +#define P_FAMILY_DHELMISE P_GEN_7_POKEMON +#define P_FAMILY_JANGMO_O P_GEN_7_POKEMON +#define P_FAMILY_TAPU_KOKO P_GEN_7_POKEMON +#define P_FAMILY_TAPU_LELE P_GEN_7_POKEMON +#define P_FAMILY_TAPU_BULU P_GEN_7_POKEMON +#define P_FAMILY_TAPU_FINI P_GEN_7_POKEMON +#define P_FAMILY_COSMOG P_GEN_7_POKEMON +#define P_FAMILY_NIHILEGO P_GEN_7_POKEMON +#define P_FAMILY_BUZZWOLE P_GEN_7_POKEMON +#define P_FAMILY_PHEROMOSA P_GEN_7_POKEMON +#define P_FAMILY_XURKITREE P_GEN_7_POKEMON +#define P_FAMILY_CELESTEELA P_GEN_7_POKEMON +#define P_FAMILY_KARTANA P_GEN_7_POKEMON +#define P_FAMILY_GUZZLORD P_GEN_7_POKEMON +#define P_FAMILY_NECROZMA P_GEN_7_POKEMON +#define P_FAMILY_MAGEARNA P_GEN_7_POKEMON +#define P_FAMILY_MARSHADOW P_GEN_7_POKEMON +#define P_FAMILY_POIPOLE P_GEN_7_POKEMON +#define P_FAMILY_STAKATAKA P_GEN_7_POKEMON +#define P_FAMILY_BLACEPHALON P_GEN_7_POKEMON +#define P_FAMILY_ZERAORA P_GEN_7_POKEMON +#define P_FAMILY_MELTAN P_GEN_7_POKEMON + +#define P_FAMILY_GROOKEY P_GEN_8_POKEMON +#define P_FAMILY_SCORBUNNY P_GEN_8_POKEMON +#define P_FAMILY_SOBBLE P_GEN_8_POKEMON +#define P_FAMILY_SKWOVET P_GEN_8_POKEMON +#define P_FAMILY_ROOKIDEE P_GEN_8_POKEMON +#define P_FAMILY_BLIPBUG P_GEN_8_POKEMON +#define P_FAMILY_NICKIT P_GEN_8_POKEMON +#define P_FAMILY_GOSSIFLEUR P_GEN_8_POKEMON +#define P_FAMILY_WOOLOO P_GEN_8_POKEMON +#define P_FAMILY_CHEWTLE P_GEN_8_POKEMON +#define P_FAMILY_YAMPER P_GEN_8_POKEMON +#define P_FAMILY_ROLYCOLY P_GEN_8_POKEMON +#define P_FAMILY_APPLIN P_GEN_8_POKEMON +#define P_FAMILY_SILICOBRA P_GEN_8_POKEMON +#define P_FAMILY_CRAMORANT P_GEN_8_POKEMON +#define P_FAMILY_ARROKUDA P_GEN_8_POKEMON +#define P_FAMILY_TOXEL P_GEN_8_POKEMON +#define P_FAMILY_SIZZLIPEDE P_GEN_8_POKEMON +#define P_FAMILY_CLOBBOPUS P_GEN_8_POKEMON +#define P_FAMILY_SINISTEA P_GEN_8_POKEMON +#define P_FAMILY_HATENNA P_GEN_8_POKEMON +#define P_FAMILY_IMPIDIMP P_GEN_8_POKEMON +#define P_FAMILY_MILCERY P_GEN_8_POKEMON +#define P_FAMILY_FALINKS P_GEN_8_POKEMON +#define P_FAMILY_PINCURCHIN P_GEN_8_POKEMON +#define P_FAMILY_SNOM P_GEN_8_POKEMON +#define P_FAMILY_STONJOURNER P_GEN_8_POKEMON +#define P_FAMILY_EISCUE P_GEN_8_POKEMON +#define P_FAMILY_INDEEDEE P_GEN_8_POKEMON +#define P_FAMILY_MORPEKO P_GEN_8_POKEMON +#define P_FAMILY_CUFANT P_GEN_8_POKEMON +#define P_FAMILY_DRACOZOLT P_GEN_8_POKEMON +#define P_FAMILY_ARCTOZOLT P_GEN_8_POKEMON +#define P_FAMILY_DRACOVISH P_GEN_8_POKEMON +#define P_FAMILY_ARCTOVISH P_GEN_8_POKEMON +#define P_FAMILY_DURALUDON P_GEN_8_POKEMON +#define P_FAMILY_DREEPY P_GEN_8_POKEMON +#define P_FAMILY_ZACIAN P_GEN_8_POKEMON +#define P_FAMILY_ZAMAZENTA P_GEN_8_POKEMON +#define P_FAMILY_ETERNATUS P_GEN_8_POKEMON +#define P_FAMILY_KUBFU P_GEN_8_POKEMON +#define P_FAMILY_ZARUDE P_GEN_8_POKEMON +#define P_FAMILY_REGIELEKI P_GEN_8_POKEMON +#define P_FAMILY_REGIDRAGO P_GEN_8_POKEMON +#define P_FAMILY_GLASTRIER P_GEN_8_POKEMON +#define P_FAMILY_SPECTRIER P_GEN_8_POKEMON +#define P_FAMILY_CALYREX P_GEN_8_POKEMON +#define P_FAMILY_ENAMORUS P_GEN_8_POKEMON + +#define P_FAMILY_SPRIGATITO P_GEN_9_POKEMON +#define P_FAMILY_FUECOCO P_GEN_9_POKEMON +#define P_FAMILY_QUAXLY P_GEN_9_POKEMON +#define P_FAMILY_LECHONK P_GEN_9_POKEMON +#define P_FAMILY_TAROUNTULA P_GEN_9_POKEMON +#define P_FAMILY_NYMBLE P_GEN_9_POKEMON +#define P_FAMILY_PAWMI P_GEN_9_POKEMON +#define P_FAMILY_TANDEMAUS P_GEN_9_POKEMON +#define P_FAMILY_FIDOUGH P_GEN_9_POKEMON +#define P_FAMILY_SMOLIV P_GEN_9_POKEMON +#define P_FAMILY_SQUAWKABILLY P_GEN_9_POKEMON +#define P_FAMILY_NACLI P_GEN_9_POKEMON +#define P_FAMILY_CHARCADET P_GEN_9_POKEMON +#define P_FAMILY_TADBULB P_GEN_9_POKEMON +#define P_FAMILY_WATTREL P_GEN_9_POKEMON +#define P_FAMILY_MASCHIFF P_GEN_9_POKEMON +#define P_FAMILY_SHROODLE P_GEN_9_POKEMON +#define P_FAMILY_BRAMBLIN P_GEN_9_POKEMON +#define P_FAMILY_TOEDSCOOL P_GEN_9_POKEMON +#define P_FAMILY_KLAWF P_GEN_9_POKEMON +#define P_FAMILY_CAPSAKID P_GEN_9_POKEMON +#define P_FAMILY_RELLOR P_GEN_9_POKEMON +#define P_FAMILY_FLITTLE P_GEN_9_POKEMON +#define P_FAMILY_TINKATINK P_GEN_9_POKEMON +#define P_FAMILY_WIGLETT P_GEN_9_POKEMON +#define P_FAMILY_BOMBIRDIER P_GEN_9_POKEMON +#define P_FAMILY_FINIZEN P_GEN_9_POKEMON +#define P_FAMILY_VAROOM P_GEN_9_POKEMON +#define P_FAMILY_CYCLIZAR P_GEN_9_POKEMON +#define P_FAMILY_ORTHWORM P_GEN_9_POKEMON +#define P_FAMILY_GLIMMET P_GEN_9_POKEMON +#define P_FAMILY_GREAVARD P_GEN_9_POKEMON +#define P_FAMILY_FLAMIGO P_GEN_9_POKEMON +#define P_FAMILY_CETODDLE P_GEN_9_POKEMON +#define P_FAMILY_VELUZA P_GEN_9_POKEMON +#define P_FAMILY_DONDOZO P_GEN_9_POKEMON +#define P_FAMILY_TATSUGIRI P_GEN_9_POKEMON +#define P_FAMILY_GREAT_TUSK P_GEN_9_POKEMON +#define P_FAMILY_SCREAM_TAIL P_GEN_9_POKEMON +#define P_FAMILY_BRUTE_BONNET P_GEN_9_POKEMON +#define P_FAMILY_FLUTTER_MANE P_GEN_9_POKEMON +#define P_FAMILY_SLITHER_WING P_GEN_9_POKEMON +#define P_FAMILY_SANDY_SHOCKS P_GEN_9_POKEMON +#define P_FAMILY_IRON_TREADS P_GEN_9_POKEMON +#define P_FAMILY_IRON_BUNDLE P_GEN_9_POKEMON +#define P_FAMILY_IRON_HANDS P_GEN_9_POKEMON +#define P_FAMILY_IRON_JUGULIS P_GEN_9_POKEMON +#define P_FAMILY_IRON_MOTH P_GEN_9_POKEMON +#define P_FAMILY_IRON_THORNS P_GEN_9_POKEMON +#define P_FAMILY_FRIGIBAX P_GEN_9_POKEMON +#define P_FAMILY_GIMMIGHOUL P_GEN_9_POKEMON +#define P_FAMILY_WO_CHIEN P_GEN_9_POKEMON +#define P_FAMILY_CHIEN_PAO P_GEN_9_POKEMON +#define P_FAMILY_TING_LU P_GEN_9_POKEMON +#define P_FAMILY_CHI_YU P_GEN_9_POKEMON +#define P_FAMILY_ROARING_MOON P_GEN_9_POKEMON +#define P_FAMILY_IRON_VALIANT P_GEN_9_POKEMON +#define P_FAMILY_KORAIDON P_GEN_9_POKEMON +#define P_FAMILY_MIRAIDON P_GEN_9_POKEMON +#define P_FAMILY_WALKING_WAKE P_GEN_9_POKEMON +#define P_FAMILY_IRON_LEAVES P_GEN_9_POKEMON +#define P_FAMILY_POLTCHAGEIST P_GEN_9_POKEMON +#define P_FAMILY_SINISTCHA P_GEN_9_POKEMON +#define P_FAMILY_OKIDOGI P_GEN_9_POKEMON +#define P_FAMILY_MUNKIDORI P_GEN_9_POKEMON +#define P_FAMILY_FEZANDIPITI P_GEN_9_POKEMON +#define P_FAMILY_OGERPON P_GEN_9_POKEMON + +#endif // GUARD_CONFIG_SPECIES_FAMILIES_H diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 94e5986f77..d844a94e11 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -324,8 +324,16 @@ #define ABILITY_ARMOR_TAIL 296 #define ABILITY_EARTH_EATER 297 #define ABILITY_MYCELIUM_MIGHT 298 +#define ABILITY_HOSPITALITY 299 +#define ABILITY_MINDS_EYE 300 +#define ABILITY_EMBODY_ASPECT_TEAL 301 +#define ABILITY_EMBODY_ASPECT_HEARTHFLAME 302 +#define ABILITY_EMBODY_ASPECT_WELLSPRING 303 +#define ABILITY_EMBODY_ASPECT_CORNERSTONE 304 +#define ABILITY_TOXIC_CHAIN 305 +#define ABILITY_SUPERSWEET_SYRUP 306 -#define ABILITIES_COUNT_GEN9 299 +#define ABILITIES_COUNT_GEN9 307 #define ABILITIES_COUNT ABILITIES_COUNT_GEN9 diff --git a/include/constants/battle.h b/include/constants/battle.h index 68fade0ff9..c8b53f4ca8 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -57,9 +57,9 @@ #define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9) // Used in pokefirered as BATTLE_TYPE_OLD_MAN_TUTORIAL. #define BATTLE_TYPE_ROAMER (1 << 10) #define BATTLE_TYPE_EREADER_TRAINER (1 << 11) -#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12) +#define BATTLE_TYPE_RAID (1 << 12) #define BATTLE_TYPE_LEGENDARY (1 << 13) -#define BATTLE_TYPE_REGI (1 << 14) +#define BATTLE_TYPE_14 (1 << 14) #define BATTLE_TYPE_TWO_OPPONENTS (1 << 15) // Used in pokefirered as BATTLE_TYPE_GHOST. #define BATTLE_TYPE_DOME (1 << 16) // Used in pokefirered as BATTLE_TYPE_POKEDUDE. #define BATTLE_TYPE_PALACE (1 << 17) // Used in pokefirered as BATTLE_TYPE_WILD_SCRIPTED. @@ -73,17 +73,16 @@ #define BATTLE_TYPE_RECORDED_LINK (1 << 25) #define BATTLE_TYPE_TRAINER_HILL (1 << 26) #define BATTLE_TYPE_SECRET_BASE (1 << 27) -#define BATTLE_TYPE_GROUDON (1 << 28) -#define BATTLE_TYPE_KYOGRE (1 << 29) -#define BATTLE_TYPE_RAYQUAZA (1 << 30) +#define BATTLE_TYPE_28 (1 << 28) +#define BATTLE_TYPE_29 (1 << 29) +#define BATTLE_TYPE_30 (1 << 30) #define BATTLE_TYPE_RECORDED_IS_MASTER (1 << 31) #define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID) #define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE) #define BATTLE_TYPE_RECORDED_INVALID ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \ | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \ - | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \ - | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \ - | BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA)) + | BATTLE_TYPE_LEGENDARY \ + | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE)) #define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)))) #define RECORDED_WILD_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_RECORDED) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER))) @@ -184,11 +183,12 @@ #define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE) #define STATUS4_ELECTRIFIED (1 << 0) -#define STATUS4_PLASMA_FISTS (1 << 1) -#define STATUS4_MUD_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6 -#define STATUS4_WATER_SPORT (1 << 3) // Only used if B_SPORT_TURNS < GEN_6 -#define STATUS4_INFINITE_CONFUSION (1 << 4) // Used for Berserk Gene -#define STATUS4_SALT_CURE (1 << 5) +#define STATUS4_MUD_SPORT (1 << 1) // Only used if B_SPORT_TURNS < GEN_6 +#define STATUS4_WATER_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6 +#define STATUS4_INFINITE_CONFUSION (1 << 3) // Used for Berserk Gene +#define STATUS4_SALT_CURE (1 << 4) +#define STATUS4_SYRUP_BOMB (1 << 5) +#define STATUS4_GLAIVE_RUSH (1 << 6) #define HITMARKER_WAKE_UP_CLEAR (1 << 4) // Cleared when waking up. Never set or checked. #define HITMARKER_SKIP_DMG_TRACK (1 << 5) @@ -236,8 +236,10 @@ #define SIDE_STATUS_WIDE_GUARD (1 << 19) #define SIDE_STATUS_CRAFTY_SHIELD (1 << 20) #define SIDE_STATUS_MAT_BLOCK (1 << 21) +#define SIDE_STATUS_STEELSURGE (1 << 22) +#define SIDE_STATUS_DAMAGE_NON_TYPES (1 << 23) -#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK) +#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STEELSURGE) #define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL) // Field affecting statuses. @@ -376,15 +378,15 @@ #define MOVE_EFFECT_INCINERATE 67 #define MOVE_EFFECT_BUG_BITE 68 #define MOVE_EFFECT_RECOIL_HP_25 69 -#define MOVE_EFFECT_RELIC_SONG 70 -#define MOVE_EFFECT_TRAP_BOTH 71 -#define MOVE_EFFECT_DOUBLE_SHOCK 72 -#define MOVE_EFFECT_ROUND 73 -#define MOVE_EFFECT_STOCKPILE_WORE_OFF 74 -#define MOVE_EFFECT_DIRE_CLAW 75 -#define MOVE_EFFECT_STEALTH_ROCK 76 -#define MOVE_EFFECT_SPIKES 77 -#define MOVE_EFFECT_TRIPLE_ARROWS 78 +#define MOVE_EFFECT_TRAP_BOTH 70 +#define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_ROUND 72 +#define MOVE_EFFECT_STOCKPILE_WORE_OFF 73 +#define MOVE_EFFECT_DIRE_CLAW 74 +#define MOVE_EFFECT_STEALTH_ROCK 75 +#define MOVE_EFFECT_SPIKES 76 +#define MOVE_EFFECT_TRIPLE_ARROWS 77 +#define MOVE_EFFECT_SYRUP_BOMB 78 #define NUM_MOVE_EFFECTS 79 @@ -500,4 +502,7 @@ #define HANDLE_TYPE_PRIMAL_REVERSION 1 #define HANDLE_TYPE_ULTRA_BURST 2 +// Constants for Torment +#define PERMANENT_TORMENT 0xF + #endif // GUARD_CONSTANTS_BATTLE_H diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 32b7f7d10c..ad489a4dd6 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -24,20 +24,6 @@ #define AI_EFFECTIVENESS_x0_125 1 #define AI_EFFECTIVENESS_x0 0 -// ai weather -#define AI_WEATHER_NONE 0 -#define AI_WEATHER_SUN 1 -#define AI_WEATHER_RAIN 2 -#define AI_WEATHER_SANDSTORM 3 -#define AI_WEATHER_HAIL 4 -#define AI_WEATHER_SNOW 5 - -// get_how_powerful_move_is -#define MOVE_POWER_OTHER 0 -#define MOVE_POWER_BEST 1 -#define MOVE_POWER_GOOD 2 // Similar dmg range with best. -#define MOVE_POWER_WEAK 3 // Significantly lower than best and good. - // AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts #define AI_FLAG_CHECK_BAD_MOVE (1 << 0) #define AI_FLAG_TRY_TO_FAINT (1 << 1) @@ -59,6 +45,7 @@ #define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks #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. Pairs very well with AI_FLAG_SMART_SWITCHING. #define AI_FLAG_COUNT 18 @@ -67,4 +54,6 @@ #define AI_FLAG_SAFARI (1 << 30) #define AI_FLAG_FIRST_BATTLE (1 << 31) +#define AI_SCORE_DEFAULT 100 // Default score for all AI moves. + #endif // GUARD_CONSTANTS_BATTLE_AI_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 9876652b65..0a01eb2996 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -398,7 +398,13 @@ #define ANIM_TAG_POLTERGEIST (ANIM_SPRITES_START + 384) #define ANIM_TAG_TEAPOT (ANIM_SPRITES_START + 385) #define ANIM_TAG_WOOD_HAMMER_HAMMER (ANIM_SPRITES_START + 386) - +#define ANIM_TAG_SNOWFLAKES (ANIM_SPRITES_START + 387) +#define ANIM_TAG_SYRUP_BLOB_RED (ANIM_SPRITES_START + 388) +#define ANIM_TAG_SYRUP_SHELL_RED (ANIM_SPRITES_START + 389) +#define ANIM_TAG_SYRUP_BLOB_YELLOW (ANIM_SPRITES_START + 390) +#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) // battlers #define ANIM_ATTACKER 0 @@ -550,6 +556,9 @@ #define B_ANIM_SNOW_CONTINUES 36 #define B_ANIM_ULTRA_BURST 37 #define B_ANIM_SALT_CURE_DAMAGE 38 +#define B_ANIM_DYNAMAX_GROWTH 39 +#define B_ANIM_MAX_SET_WEATHER 40 +#define B_ANIM_SYRUP_BOMB_SPEED_DROP 41 // 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 90d14d58fb..1fb300347e 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -167,7 +167,7 @@ #define EFFECT_MEMENTO 163 #define EFFECT_FACADE 164 #define EFFECT_FOCUS_PUNCH 165 -#define EFFECT_SMELLINGSALT 166 +#define EFFECT_SMELLING_SALTS 166 #define EFFECT_FOLLOW_ME 167 #define EFFECT_NATURE_POWER 168 #define EFFECT_CHARGE 169 @@ -412,9 +412,14 @@ #define EFFECT_CORROSIVE_GAS 406 #define EFFECT_POPULATION_BOMB 407 #define EFFECT_MORTAL_SPIN 408 -#define EFFECT_GIGATON_HAMMER 409 -#define EFFECT_SALT_CURE 410 +#define EFFECT_SALT_CURE 409 +#define EFFECT_MATCHA_GOTCHA 410 +#define EFFECT_SYRUP_BOMB 411 +#define EFFECT_IVY_CUDGEL 412 +#define EFFECT_MAX_MOVE 413 +#define EFFECT_GLAIVE_RUSH 414 +#define EFFECT_RAGING_BULL 415 -#define NUM_BATTLE_MOVE_EFFECTS 411 +#define NUM_BATTLE_MOVE_EFFECTS 416 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index ee98bccec7..9526d549fd 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -209,46 +209,44 @@ #define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 116 #define VARIOUS_CONSUME_BERRY 117 #define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 118 -#define VARIOUS_APPLY_PLASMA_FISTS 119 -#define VARIOUS_JUMP_IF_SPECIES 120 -#define VARIOUS_UPDATE_ABILITY_POPUP 121 -#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 122 -#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 123 -#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 124 -#define VARIOUS_PHOTON_GEYSER_CHECK 125 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 126 -#define VARIOUS_TRY_NO_RETREAT 127 -#define VARIOUS_TRY_TAR_SHOT 128 -#define VARIOUS_CAN_TAR_SHOT_WORK 129 -#define VARIOUS_CHECK_POLTERGEIST 130 -#define VARIOUS_SET_OCTOLOCK 131 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 132 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 133 -#define VARIOUS_JUMP_IF_UNDER_200 134 -#define VARIOUS_SET_SKY_DROP 135 -#define VARIOUS_CLEAR_SKY_DROP 136 -#define VARIOUS_SKY_DROP_YAWN 137 -#define VARIOUS_JUMP_IF_HOLD_EFFECT 138 -#define VARIOUS_CURE_CERTAIN_STATUSES 139 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 140 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 141 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 142 -#define VARIOUS_SAVE_BATTLER_ITEM 143 -#define VARIOUS_RESTORE_BATTLER_ITEM 144 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 145 -#define VARIOUS_SET_BEAK_BLAST 146 -#define VARIOUS_SWAP_SIDE_STATUSES 147 -#define VARIOUS_SWAP_STATS 148 -#define VARIOUS_TEATIME_INVUL 149 -#define VARIOUS_TEATIME_TARGETS 150 -#define VARIOUS_TRY_WIND_RIDER_POWER 151 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 152 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 153 -#define VARIOUS_STORE_HEALING_WISH 154 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 155 -#define VARIOUS_TRY_REVIVAL_BLESSING 156 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 157 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 158 +#define VARIOUS_JUMP_IF_SPECIES 119 +#define VARIOUS_UPDATE_ABILITY_POPUP 120 +#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 121 +#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 122 +#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 123 +#define VARIOUS_PHOTON_GEYSER_CHECK 124 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 125 +#define VARIOUS_TRY_NO_RETREAT 126 +#define VARIOUS_TRY_TAR_SHOT 127 +#define VARIOUS_CAN_TAR_SHOT_WORK 128 +#define VARIOUS_CHECK_POLTERGEIST 129 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 130 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 131 +#define VARIOUS_JUMP_IF_UNDER_200 132 +#define VARIOUS_SET_SKY_DROP 133 +#define VARIOUS_CLEAR_SKY_DROP 134 +#define VARIOUS_SKY_DROP_YAWN 135 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 136 +#define VARIOUS_CURE_CERTAIN_STATUSES 137 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 138 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 139 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 140 +#define VARIOUS_SAVE_BATTLER_ITEM 141 +#define VARIOUS_RESTORE_BATTLER_ITEM 142 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 143 +#define VARIOUS_SET_BEAK_BLAST 144 +#define VARIOUS_SWAP_SIDE_STATUSES 145 +#define VARIOUS_SWAP_STATS 146 +#define VARIOUS_TEATIME_INVUL 147 +#define VARIOUS_TEATIME_TARGETS 148 +#define VARIOUS_TRY_WIND_RIDER_POWER 149 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 150 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 151 +#define VARIOUS_STORE_HEALING_WISH 152 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 153 +#define VARIOUS_TRY_REVIVAL_BLESSING 154 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 155 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 156 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 @@ -302,16 +300,16 @@ #define MOVEEND_ATTACKER_VISIBLE 10 #define MOVEEND_TARGET_VISIBLE 11 #define MOVEEND_ITEM_EFFECTS_TARGET 12 -#define MOVEEND_ITEM_EFFECTS_ALL 13 -#define MOVEEND_KINGSROCK 14 // These item effects will occur each strike of a multi-hit move -#define MOVEEND_SUBSTITUTE 15 -#define MOVEEND_SKY_DROP_CONFUSE 16 -#define MOVEEND_UPDATE_LAST_MOVES 17 -#define MOVEEND_MIRROR_MOVE 18 -#define MOVEEND_NEXT_TARGET 19 // Everything up until here is handled for each strike of a multi-hit move -#define MOVEEND_MULTIHIT_MOVE 20 -#define MOVEEND_DEFROST 21 -#define MOVEEND_MOVE_EFFECTS2 22 +#define MOVEEND_MOVE_EFFECTS2 13 +#define MOVEEND_ITEM_EFFECTS_ALL 14 +#define MOVEEND_KINGSROCK 15 // These item effects will occur each strike of a multi-hit move +#define MOVEEND_SUBSTITUTE 16 +#define MOVEEND_SKY_DROP_CONFUSE 17 +#define MOVEEND_UPDATE_LAST_MOVES 18 +#define MOVEEND_MIRROR_MOVE 19 +#define MOVEEND_NEXT_TARGET 20 // Everything up until here is handled for each strike of a multi-hit move +#define MOVEEND_MULTIHIT_MOVE 21 +#define MOVEEND_DEFROST 22 #define MOVEEND_RECOIL 23 #define MOVEEND_MAGICIAN 24 // Occurs after final multi-hit strike, and after other items/abilities would activate #define MOVEEND_EJECT_BUTTON 25 @@ -323,8 +321,9 @@ #define MOVEEND_DANCER 31 #define MOVEEND_EMERGENCY_EXIT 32 #define MOVEEND_SYMBIOSIS 33 -#define MOVEEND_CLEAR_BITS 34 -#define MOVEEND_COUNT 35 +#define MOVEEND_OPPORTUNIST 34 // Occurs after other stat change items/abilities to try and copy the boosts +#define MOVEEND_CLEAR_BITS 35 +#define MOVEEND_COUNT 36 // switch cases #define B_SWITCH_NORMAL 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 86a80c33cb..69e3dd935d 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -547,7 +547,7 @@ #define STRINGID_NOONEWILLBEABLETORUNAWAY 545 #define STRINGID_DESTINYKNOTACTIVATES 546 #define STRINGID_CLOAKEDINAFREEZINGLIGHT 547 -#define STRINGID_STATWASNOTLOWERED 548 +#define STRINGID_CLEARAMULETWONTLOWERSTATS 548 #define STRINGID_FERVENTWISHREACHED 549 #define STRINGID_AIRLOCKACTIVATES 550 #define STRINGID_PRESSUREENTERS 551 @@ -670,8 +670,24 @@ #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 BATTLESTRINGS_COUNT 671 +#define BATTLESTRINGS_COUNT 687 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -974,7 +990,21 @@ // gDmgHazardsStringIds #define B_MSG_PKMNHURTBYSPIKES 0 #define B_MSG_STEALTHROCKDMG 1 -#define B_MSG_POINTEDSTONESFLOAT 2 -#define B_MSG_SPIKESSCATTERED 3 +#define B_MSG_SHARPSTEELDMG 2 +#define B_MSG_POINTEDSTONESFLOAT 3 +#define B_MSG_SPIKESSCATTERED 4 +#define B_MSG_SHARPSTEELFLOATS 5 + +// gDamageNonTypesStartStringIds +#define B_MSG_TRAPPED_WITH_VINES 0 +#define B_MSG_CAUGHT_IN_VORTEX 1 +#define B_MSG_SURROUNDED_BY_FIRE 2 +#define B_MSG_SURROUNDED_BY_ROCKS 3 + +// gDamageNonTypesDmgStringIds +#define B_MSG_HURT_BY_VINES 0 +#define B_MSG_HURT_BY_VORTEX 1 +#define B_MSG_BURNING_UP 2 +#define B_MSG_HURT_BY_ROCKS_THROWN 3 #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/include/constants/expansion.h b/include/constants/expansion.h new file mode 100644 index 0000000000..872e5bbd34 --- /dev/null +++ b/include/constants/expansion.h @@ -0,0 +1,12 @@ +#ifndef GUARD_CONSTANTS_EXPANSION_H +#define GUARD_CONSTANTS_EXPANSION_H + +#define EXPANSION_VERSION_MAJOR 1 +#define EXPANSION_VERSION_MINOR 7 +#define EXPANSION_VERSION_PATCH 0 + +// FALSE if this this version of Expansion is not a tagged commit, i.e. +// it contains unreleased changes. +#define EXPANSION_TAGGED_RELEASE FALSE + +#endif diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index db96b06574..38481869bc 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -101,4 +101,18 @@ // param1: item to hold. #define FORM_CHANGE_BATTLE_ULTRA_BURST 16 +// Form change that activates when the mon Dynamaxes (TODO: with Gigantamax factor). +// - No parameters +#define FORM_CHANGE_BATTLE_GIGANTAMAX 17 + +// Form change that activates at a certain time of day in the overworld automatically. +// param1: time of day to check. +// - DAY if Form change that activates in the daytime. +// - NIGHT if Form change that activates at nighttime. +#define FORM_CHANGE_TIME_OF_DAY 18 + +// Form change that depends on a multichoice (e.g. Rotom Catalog). +// param2: multichoice list (starting at 0). +#define FORM_CHANGE_ITEM_USE_MULTICHOICE 19 + #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 9f877cffa8..a54f569cd2 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -160,9 +160,10 @@ #define HOLD_EFFECT_COVERT_CLOAK 179 #define HOLD_EFFECT_LOADED_DICE 180 #define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented. +#define HOLD_EFFECT_MASK 183 // Gen2 hold effect -#define HOLD_EFFECT_BERSERK_GENE 182 +#define HOLD_EFFECT_BERSERK_GENE 184 #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index fca7924514..ac1c7d5c5b 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -66,6 +66,7 @@ #define ITEM6_ADD_EV 10 #define ITEM6_SUBTRACT_EV -10 #define ITEM6_ADD_ONE_EV 1 +#define ITEM6_RESET_EV 0 // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 diff --git a/include/constants/items.h b/include/constants/items.h index 20cbc6379b..074dcd9fc5 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -51,11 +51,13 @@ #define ITEM_LEMONADE 37 #define ITEM_MOOMOO_MILK 38 #define ITEM_ENERGY_POWDER 39 +#define ITEM_ENERGYPOWDER ITEM_ENERGY_POWDER // Pre-Gen VI name #define ITEM_ENERGY_ROOT 40 #define ITEM_HEAL_POWDER 41 #define ITEM_REVIVAL_HERB 42 #define ITEM_ANTIDOTE 43 #define ITEM_PARALYZE_HEAL 44 +#define ITEM_PARLYZ_HEAL ITEM_PARALYZE_HEAL // Pre-Gen VI name #define ITEM_BURN_HEAL 45 #define ITEM_ICE_HEAL 46 #define ITEM_AWAKENING 47 @@ -63,7 +65,9 @@ #define ITEM_ETHER 49 #define ITEM_MAX_ETHER 50 #define ITEM_ELIXIR 51 +#define ITEM_ELIXER ITEM_ELIXIR // Pre-Gen III name #define ITEM_MAX_ELIXIR 52 +#define ITEM_MAX_ELIXER ITEM_MAX_ELIXIR // Pre-Gen III name #define ITEM_BERRY_JUICE 53 #define ITEM_SACRED_ASH 54 #define ITEM_SWEET_HEART 55 @@ -72,6 +76,7 @@ // Regional Specialties #define ITEM_PEWTER_CRUNCHIES 57 #define ITEM_RAGE_CANDY_BAR 58 +#define ITEM_RAGECANDYBAR ITEM_RAGE_CANDY_BAR // Pre-Gen VI name #define ITEM_LAVA_COOKIE 59 #define ITEM_OLD_GATEAU 60 #define ITEM_CASTELIACONE 61 @@ -91,11 +96,17 @@ // EV Feathers #define ITEM_HEALTH_FEATHER 73 +#define ITEM_HEALTH_WING ITEM_HEALTH_FEATHER // Pre-Gen VIII name #define ITEM_MUSCLE_FEATHER 74 +#define ITEM_MUSCLE_WING ITEM_MUSCLE_FEATHER // Pre-Gen VIII name #define ITEM_RESIST_FEATHER 75 +#define ITEM_RESIST_WING ITEM_RESIST_FEATHER // Pre-Gen VIII name #define ITEM_GENIUS_FEATHER 76 +#define ITEM_GENIUS_WING ITEM_GENIUS_FEATHER // Pre-Gen VIII name #define ITEM_CLEVER_FEATHER 77 +#define ITEM_CLEVER_WING ITEM_CLEVER_FEATHER // Pre-Gen VIII name #define ITEM_SWIFT_FEATHER 78 +#define ITEM_SWIFT_WING ITEM_SWIFT_FEATHER // Pre-Gen VIII name // Ability Modifiers #define ITEM_ABILITY_CAPSULE 79 @@ -155,7 +166,9 @@ // X Items #define ITEM_X_ATTACK 121 #define ITEM_X_DEFENSE 122 +#define ITEM_X_DEFEND ITEM_X_DEFENSE // Pre-Gen VI name #define ITEM_X_SP_ATK 123 +#define ITEM_X_SPECIAL ITEM_X_SP_ATK // Pre-Gen VI name #define ITEM_X_SP_DEF 124 #define ITEM_X_SPEED 125 #define ITEM_X_ACCURACY 126 @@ -176,8 +189,10 @@ #define ITEM_NUGGET 135 #define ITEM_BIG_NUGGET 136 #define ITEM_TINY_MUSHROOM 137 +#define ITEM_TINYMUSHROOM ITEM_TINY_MUSHROOM // Pre-Gen VI name #define ITEM_BIG_MUSHROOM 138 #define ITEM_BALM_MUSHROOM 139 +#define ITEM_BALMMUSHROOM ITEM_BALM_MUSHROOM // Pre-Gen VI name #define ITEM_PEARL 140 #define ITEM_BIG_PEARL 141 #define ITEM_PEARL_STRING 142 @@ -195,6 +210,7 @@ #define ITEM_RARE_BONE 154 #define ITEM_ODD_KEYSTONE 155 #define ITEM_PRETTY_FEATHER 156 +#define ITEM_PRETTY_WING ITEM_PRETTY_FEATHER // Pre-Gen VIII name #define ITEM_RELIC_COPPER 157 #define ITEM_RELIC_SILVER 158 #define ITEM_RELIC_GOLD 159 @@ -234,11 +250,17 @@ // Apricorns #define ITEM_RED_APRICORN 188 #define ITEM_BLUE_APRICORN 189 +#define ITEM_BLU_APRICORN ITEM_BLUE_APRICORN // Pre-Gen VI name #define ITEM_YELLOW_APRICORN 190 +#define ITEM_YLW_APRICORN ITEM_YELLOW_APRICORN // Pre-Gen VI name #define ITEM_GREEN_APRICORN 191 +#define ITEM_GRN_APRICORN ITEM_GREEN_APRICORN // Pre-Gen VI name #define ITEM_PINK_APRICORN 192 +#define ITEM_PNK_APRICORN ITEM_PINK_APRICORN // Pre-Gen VI name #define ITEM_WHITE_APRICORN 193 +#define ITEM_WHT_APRICORN ITEM_WHITE_APRICORN // Pre-Gen VI name #define ITEM_BLACK_APRICORN 194 +#define ITEM_BLK_APRICORN ITEM_BLACK_APRICORN // Pre-Gen VI name #define ITEM_WISHING_PIECE 195 #define ITEM_GALARICA_TWIG 196 @@ -265,6 +287,7 @@ #define ITEM_FIRE_STONE 211 #define ITEM_WATER_STONE 212 #define ITEM_THUNDER_STONE 213 +#define ITEM_THUNDERSTONE ITEM_THUNDER_STONE // Pre-Gen VI name #define ITEM_LEAF_STONE 214 #define ITEM_ICE_STONE 215 #define ITEM_SUN_STONE 216 @@ -280,6 +303,7 @@ #define ITEM_GALARICA_WREATH 226 #define ITEM_DRAGON_SCALE 227 #define ITEM_UPGRADE 228 +#define ITEM_UP_GRADE ITEM_UPGRADE // Pre-Gen VIII name #define ITEM_PROTECTOR 229 #define ITEM_ELECTIRIZER 230 #define ITEM_MAGMARIZER 231 @@ -465,12 +489,15 @@ // Species-specific Held Items #define ITEM_LIGHT_BALL 392 #define ITEM_LEEK 393 +#define ITEM_STICK ITEM_LEEK // Pre-Gen VIII name #define ITEM_THICK_CLUB 394 #define ITEM_LUCKY_PUNCH 395 #define ITEM_METAL_POWDER 396 #define ITEM_QUICK_POWDER 397 #define ITEM_DEEP_SEA_SCALE 398 +#define ITEM_DEEPSEASCALE ITEM_DEEP_SEA_SCALE // Pre-Gen VI name #define ITEM_DEEP_SEA_TOOTH 399 +#define ITEM_DEEPSEATOOTH ITEM_DEEP_SEA_TOOTH // Pre-Gen VI name #define ITEM_SOUL_DEW 400 #define ITEM_ADAMANT_ORB 401 #define ITEM_LUSTROUS_ORB 402 @@ -510,16 +537,21 @@ #define ITEM_MAGNET 428 #define ITEM_MIRACLE_SEED 429 #define ITEM_NEVER_MELT_ICE 430 +#define ITEM_NEVERMELTICE ITEM_NEVER_MELT_ICE // Pre-Gen VI name #define ITEM_BLACK_BELT 431 +#define ITEM_BLACKBELT ITEM_BLACK_BELT // Gen II name #define ITEM_POISON_BARB 432 #define ITEM_SOFT_SAND 433 #define ITEM_SHARP_BEAK 434 #define ITEM_TWISTED_SPOON 435 +#define ITEM_TWISTEDSPOON ITEM_TWISTED_SPOON // Pre-Gen VI name #define ITEM_SILVER_POWDER 436 +#define ITEM_SILVERPOWDER ITEM_SILVER_POWDER // Pre-Gen VI name #define ITEM_HARD_STONE 437 #define ITEM_SPELL_TAG 438 #define ITEM_DRAGON_FANG 439 #define ITEM_BLACK_GLASSES 440 +#define ITEM_BLACKGLASSES ITEM_BLACK_GLASSES // Pre-Gen VI name #define ITEM_METAL_COAT 441 // Choice Items @@ -551,8 +583,10 @@ // Misc. Held Items #define ITEM_BRIGHT_POWDER 459 +#define ITEM_BRIGHTPOWDER ITEM_BRIGHT_POWDER // Pre-Gen VI name #define ITEM_WHITE_HERB 460 #define ITEM_EXP_SHARE 461 +#define ITEM_EXP_ALL ITEM_EXP_SHARE // Gen I name #define ITEM_QUICK_CLAW 462 #define ITEM_SOOTHE_BELL 463 #define ITEM_MENTAL_HERB 464 @@ -607,6 +641,20 @@ #define ITEM_UTILITY_UMBRELLA 513 // Berries +#if B_CONFUSE_BERRIES_HEAL >= GEN_8 + #define CONFUSE_BERRY_HEAL_FRACTION 3 +#elif B_CONFUSE_BERRIES_HEAL == GEN_7 + #define CONFUSE_BERRY_HEAL_FRACTION 2 +#else + #define CONFUSE_BERRY_HEAL_FRACTION 8 +#endif + +#if B_CONFUSE_BERRIES_HEAL >= GEN_7 + #define CONFUSE_BERRY_HP_FRACTION 4 +#else + #define CONFUSE_BERRY_HP_FRACTION 2 +#endif + #define ITEM_CHERI_BERRY 514 #define ITEM_CHESTO_BERRY 515 #define ITEM_PECHA_BERRY 516 @@ -820,11 +868,14 @@ #define ITEM_GOOD_ROD 710 #define ITEM_SUPER_ROD 711 #define ITEM_DOWSING_MACHINE 712 +#define ITEM_ITEMFINDER ITEM_DOWSING_MACHINE // Pre-Gen IV name +#define ITEM_DOWSING_MCHN ITEM_DOWSING_MACHINE // Gen IV-V name #define ITEM_TOWN_MAP 713 #define ITEM_VS_SEEKER 714 #define ITEM_TM_CASE 715 #define ITEM_BERRY_POUCH 716 #define ITEM_POKEMON_BOX_LINK 717 +#define ITEM_POKEMON_BOX ITEM_POKEMON_BOX_LINK // Pre-Gen VIII name #define ITEM_COIN_CASE 718 #define ITEM_POWDER_JAR 719 #define ITEM_WAILMER_PAIL 720 @@ -843,19 +894,25 @@ #define ITEM_OLD_SEA_MAP 731 #define ITEM_LETTER 732 #define ITEM_DEVON_PARTS 733 +#define ITEM_DEVON_GOODS ITEM_DEVON_PARTS // Pre-Gen VI name #define ITEM_GO_GOGGLES 734 #define ITEM_DEVON_SCOPE 735 #define ITEM_BASEMENT_KEY 736 #define ITEM_SCANNER 737 #define ITEM_STORAGE_KEY 738 #define ITEM_KEY_TO_ROOM_1 739 +#define ITEM_RM_1_KEY ITEM_KEY_TO_ROOM_1 // Pre-Gen VI name #define ITEM_KEY_TO_ROOM_2 740 +#define ITEM_RM_2_KEY ITEM_KEY_TO_ROOM_2 // Pre-Gen VI name #define ITEM_KEY_TO_ROOM_4 741 +#define ITEM_RM_4_KEY ITEM_KEY_TO_ROOM_4 // Pre-Gen VI name #define ITEM_KEY_TO_ROOM_6 742 +#define ITEM_RM_6_KEY ITEM_KEY_TO_ROOM_6 // Pre-Gen VI name #define ITEM_METEORITE 743 #define ITEM_MAGMA_EMBLEM 744 #define ITEM_CONTEST_PASS 745 -#define ITEM_OAKS_PARCEL 746 +#define ITEM_PARCEL 746 +#define ITEM_OAKS_PARCEL ITEM_PARCEL // Pre-Gen IV name #define ITEM_SECRET_KEY 747 #define ITEM_BIKE_VOUCHER 748 #define ITEM_GOLD_TEETH 749 @@ -914,7 +971,23 @@ #define ITEM_PEAT_BLOCK 797 #define ITEM_BERSERK_GENE 798 -#define ITEMS_COUNT 799 +#define ITEM_FAIRY_FEATHER 799 +#define ITEM_SYRUPY_APPLE 800 +#define ITEM_UNREMARKABLE_TEACUP 801 +#define ITEM_MASTERPIECE_TEACUP 802 +#define ITEM_CORNERSTONE_MASK 803 +#define ITEM_WELLSPRING_MASK 804 +#define ITEM_HEARTHFLAME_MASK 805 +#define ITEM_HEALTH_MOCHI 806 +#define ITEM_MUSCLE_MOCHI 807 +#define ITEM_RESIST_MOCHI 808 +#define ITEM_GENIUS_MOCHI 809 +#define ITEM_CLEVER_MOCHI 810 +#define ITEM_SWIFT_MOCHI 811 +#define ITEM_FRESH_START_MOCHI 812 +#define ITEM_GLIMMERING_CHARM 813 + +#define ITEMS_COUNT 814 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/include/constants/moves.h b/include/constants/moves.h index dd00aacb45..8c76f65e3e 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -5,14 +5,18 @@ #define MOVE_POUND 1 #define MOVE_KARATE_CHOP 2 #define MOVE_DOUBLE_SLAP 3 +#define MOVE_DOUBLESLAP MOVE_DOUBLE_SLAP // Pre-Gen VI name #define MOVE_COMET_PUNCH 4 #define MOVE_MEGA_PUNCH 5 #define MOVE_PAY_DAY 6 #define MOVE_FIRE_PUNCH 7 #define MOVE_ICE_PUNCH 8 #define MOVE_THUNDER_PUNCH 9 +#define MOVE_THUNDERPUNCH MOVE_THUNDER_PUNCH // Pre-Gen VI name #define MOVE_SCRATCH 10 #define MOVE_VISE_GRIP 11 +#define MOVE_VICEGRIP MOVE_VISE_GRIP // Pre-Gen VI name +#define MOVE_VICE_GRIP MOVE_VISE_GRIP // Pre-Gen VIII name #define MOVE_GUILLOTINE 12 #define MOVE_RAZOR_WIND 13 #define MOVE_SWORDS_DANCE 14 @@ -51,6 +55,7 @@ #define MOVE_SING 47 #define MOVE_SUPERSONIC 48 #define MOVE_SONIC_BOOM 49 +#define MOVE_SONICBOOM MOVE_SONIC_BOOM // Pre-Gen VI name #define MOVE_DISABLE 50 #define MOVE_ACID 51 #define MOVE_EMBER 52 @@ -63,6 +68,7 @@ #define MOVE_BLIZZARD 59 #define MOVE_PSYBEAM 60 #define MOVE_BUBBLE_BEAM 61 +#define MOVE_BUBBLEBEAM MOVE_BUBBLE_BEAM // Pre-Gen VI name #define MOVE_AURORA_BEAM 62 #define MOVE_HYPER_BEAM 63 #define MOVE_PECK 64 @@ -78,7 +84,9 @@ #define MOVE_GROWTH 74 #define MOVE_RAZOR_LEAF 75 #define MOVE_SOLAR_BEAM 76 +#define MOVE_SOLARBEAM MOVE_SOLAR_BEAM // Pre-Gen VI name #define MOVE_POISON_POWDER 77 +#define MOVE_POISONPOWDER MOVE_POISON_POWDER // Pre-Gen VI name #define MOVE_STUN_SPORE 78 #define MOVE_SLEEP_POWDER 79 #define MOVE_PETAL_DANCE 80 @@ -86,6 +94,7 @@ #define MOVE_DRAGON_RAGE 82 #define MOVE_FIRE_SPIN 83 #define MOVE_THUNDER_SHOCK 84 +#define MOVE_THUNDERSHOCK MOVE_THUNDER_SHOCK // Pre-Gen VI name #define MOVE_THUNDERBOLT 85 #define MOVE_THUNDER_WAVE 86 #define MOVE_THUNDER 87 @@ -122,6 +131,7 @@ #define MOVE_METRONOME 118 #define MOVE_MIRROR_MOVE 119 #define MOVE_SELF_DESTRUCT 120 +#define MOVE_SELFDESTRUCT MOVE_SELF_DESTRUCT // Pre-Gen VI name #define MOVE_EGG_BOMB 121 #define MOVE_LICK 122 #define MOVE_SMOG 123 @@ -137,7 +147,9 @@ #define MOVE_AMNESIA 133 #define MOVE_KINESIS 134 #define MOVE_SOFT_BOILED 135 +#define MOVE_SOFTBOILED MOVE_SOFT_BOILED // Pre-Gen VI name #define MOVE_HIGH_JUMP_KICK 136 +#define MOVE_HI_JUMP_KICK MOVE_HIGH_JUMP_KICK // Pre-Gen VI name #define MOVE_GLARE 137 #define MOVE_DREAM_EATER 138 #define MOVE_POISON_GAS 139 @@ -187,6 +199,7 @@ #define MOVE_MACH_PUNCH 183 #define MOVE_SCARY_FACE 184 #define MOVE_FEINT_ATTACK 185 +#define MOVE_FAINT_ATTACK MOVE_FEINT_ATTACK // Pre-Gen VI name #define MOVE_SWEET_KISS 186 #define MOVE_BELLY_DRUM 187 #define MOVE_SLUDGE_BOMB 188 @@ -225,8 +238,10 @@ #define MOVE_SACRED_FIRE 221 #define MOVE_MAGNITUDE 222 #define MOVE_DYNAMIC_PUNCH 223 +#define MOVE_DYNAMICPUNCH MOVE_DYNAMIC_PUNCH // Pre-Gen VI name #define MOVE_MEGAHORN 224 #define MOVE_DRAGON_BREATH 225 +#define MOVE_DRAGONBREATH MOVE_DRAGON_BREATH // Pre-Gen VI name #define MOVE_BATON_PASS 226 #define MOVE_ENCORE 227 #define MOVE_PURSUIT 228 @@ -247,7 +262,9 @@ #define MOVE_MIRROR_COAT 243 #define MOVE_PSYCH_UP 244 #define MOVE_EXTREME_SPEED 245 +#define MOVE_EXTREMESPEED MOVE_EXTREME_SPEED // Pre-Gen VI name #define MOVE_ANCIENT_POWER 246 +#define MOVE_ANCIENTPOWER MOVE_ANCIENT_POWER // Pre-Gen VI name #define MOVE_SHADOW_BALL 247 #define MOVE_FUTURE_SIGHT 248 #define MOVE_ROCK_SMASH 249 @@ -267,6 +284,7 @@ #define MOVE_FACADE 263 #define MOVE_FOCUS_PUNCH 264 #define MOVE_SMELLING_SALTS 265 +#define MOVE_SMELLINGSALT MOVE_SMELLING_SALTS // Pre-Gen VI name #define MOVE_FOLLOW_ME 266 #define MOVE_NATURE_POWER 267 #define MOVE_CHARGE 268 @@ -299,6 +317,7 @@ #define MOVE_LUSTER_PURGE 295 #define MOVE_MIST_BALL 296 #define MOVE_FEATHER_DANCE 297 +#define MOVE_FEATHERDANCE MOVE_FEATHER_DANCE // Pre-Gen VI name #define MOVE_TEETER_DANCE 298 #define MOVE_BLAZE_KICK 299 #define MOVE_MUD_SPORT 300 @@ -322,6 +341,7 @@ #define MOVE_SILVER_WIND 318 #define MOVE_METAL_SOUND 319 #define MOVE_GRASS_WHISTLE 320 +#define MOVE_GRASSWHISTLE MOVE_GRASS_WHISTLE // Pre-Gen VI name #define MOVE_TICKLE 321 #define MOVE_COSMIC_POWER 322 #define MOVE_WATER_SPOUT 323 @@ -860,8 +880,12 @@ #define MOVE_MAGICAL_TORQUE 826 #define MOVE_PSYBLADE 827 #define MOVE_HYDRO_STEAM 828 +#define MOVE_BLOOD_MOON 829 +#define MOVE_MATCHA_GOTCHA 830 +#define MOVE_SYRUP_BOMB 831 +#define MOVE_IVY_CUDGEL 832 -#define MOVES_COUNT_GEN9 829 +#define MOVES_COUNT_GEN9 833 #define MOVES_COUNT MOVES_COUNT_GEN9 @@ -884,6 +908,7 @@ #define MOVE_DEVASTATING_DRAKE (MOVES_COUNT + 15) #define MOVE_BLACK_HOLE_ECLIPSE (MOVES_COUNT + 16) #define MOVE_TWINKLE_TACKLE (MOVES_COUNT + 17) + // Signature Z Moves #define MOVE_CATASTROPIKA (MOVES_COUNT + 18) #define MOVE_10000000_VOLT_THUNDERBOLT (MOVES_COUNT + 19) @@ -908,6 +933,66 @@ #define MOVES_COUNT_Z (LAST_Z_MOVE + 1) +//Max Moves +#define MOVE_MAX_GUARD (FIRST_MAX_MOVE + 0) +#define MOVE_MAX_STRIKE (FIRST_MAX_MOVE + 1) +#define MOVE_MAX_KNUCKLE (FIRST_MAX_MOVE + 2) +#define MOVE_MAX_AIRSTREAM (FIRST_MAX_MOVE + 3) +#define MOVE_MAX_OOZE (FIRST_MAX_MOVE + 4) +#define MOVE_MAX_QUAKE (FIRST_MAX_MOVE + 5) +#define MOVE_MAX_ROCKFALL (FIRST_MAX_MOVE + 6) +#define MOVE_MAX_FLUTTERBY (FIRST_MAX_MOVE + 7) +#define MOVE_MAX_PHANTASM (FIRST_MAX_MOVE + 8) +#define MOVE_MAX_STEELSPIKE (FIRST_MAX_MOVE + 9) +#define MOVE_MAX_FLARE (FIRST_MAX_MOVE + 10) +#define MOVE_MAX_GEYSER (FIRST_MAX_MOVE + 11) +#define MOVE_MAX_OVERGROWTH (FIRST_MAX_MOVE + 12) +#define MOVE_MAX_LIGHTNING (FIRST_MAX_MOVE + 13) +#define MOVE_MAX_MINDSTORM (FIRST_MAX_MOVE + 14) +#define MOVE_MAX_HAILSTORM (FIRST_MAX_MOVE + 15) +#define MOVE_MAX_WYRMWIND (FIRST_MAX_MOVE + 16) +#define MOVE_MAX_DARKNESS (FIRST_MAX_MOVE + 17) +#define MOVE_MAX_STARFALL (FIRST_MAX_MOVE + 18) +// Gigantamax Moves +#define MOVE_G_MAX_VINE_LASH (FIRST_MAX_MOVE + 19) +#define MOVE_G_MAX_WILDFIRE (FIRST_MAX_MOVE + 20) +#define MOVE_G_MAX_CANNONADE (FIRST_MAX_MOVE + 21) +#define MOVE_G_MAX_BEFUDDLE (FIRST_MAX_MOVE + 22) +#define MOVE_G_MAX_VOLT_CRASH (FIRST_MAX_MOVE + 23) +#define MOVE_G_MAX_GOLD_RUSH (FIRST_MAX_MOVE + 24) +#define MOVE_G_MAX_CHI_STRIKE (FIRST_MAX_MOVE + 25) +#define MOVE_G_MAX_TERROR (FIRST_MAX_MOVE + 26) +#define MOVE_G_MAX_FOAM_BURST (FIRST_MAX_MOVE + 27) +#define MOVE_G_MAX_RESONANCE (FIRST_MAX_MOVE + 28) +#define MOVE_G_MAX_CUDDLE (FIRST_MAX_MOVE + 29) +#define MOVE_G_MAX_REPLENISH (FIRST_MAX_MOVE + 30) +#define MOVE_G_MAX_MALODOR (FIRST_MAX_MOVE + 31) +#define MOVE_G_MAX_MELTDOWN (FIRST_MAX_MOVE + 32) +#define MOVE_G_MAX_DRUM_SOLO (FIRST_MAX_MOVE + 33) +#define MOVE_G_MAX_FIREBALL (FIRST_MAX_MOVE + 34) +#define MOVE_G_MAX_HYDROSNIPE (FIRST_MAX_MOVE + 35) +#define MOVE_G_MAX_WIND_RAGE (FIRST_MAX_MOVE + 36) +#define MOVE_G_MAX_GRAVITAS (FIRST_MAX_MOVE + 37) +#define MOVE_G_MAX_STONESURGE (FIRST_MAX_MOVE + 38) +#define MOVE_G_MAX_VOLCALITH (FIRST_MAX_MOVE + 39) +#define MOVE_G_MAX_TARTNESS (FIRST_MAX_MOVE + 40) +#define MOVE_G_MAX_SWEETNESS (FIRST_MAX_MOVE + 41) +#define MOVE_G_MAX_SANDBLAST (FIRST_MAX_MOVE + 42) +#define MOVE_G_MAX_STUN_SHOCK (FIRST_MAX_MOVE + 43) +#define MOVE_G_MAX_CENTIFERNO (FIRST_MAX_MOVE + 44) +#define MOVE_G_MAX_SMITE (FIRST_MAX_MOVE + 45) +#define MOVE_G_MAX_SNOOZE (FIRST_MAX_MOVE + 46) +#define MOVE_G_MAX_FINALE (FIRST_MAX_MOVE + 47) +#define MOVE_G_MAX_STEELSURGE (FIRST_MAX_MOVE + 48) +#define MOVE_G_MAX_DEPLETION (FIRST_MAX_MOVE + 49) +#define MOVE_G_MAX_ONE_BLOW (FIRST_MAX_MOVE + 50) +#define MOVE_G_MAX_RAPID_FLOW (FIRST_MAX_MOVE + 51) + +#define FIRST_MAX_MOVE MOVES_COUNT_Z +#define LAST_MAX_MOVE MOVE_G_MAX_RAPID_FLOW + +#define MOVES_COUNT_DYNAMAX (LAST_MAX_MOVE + 1) + // Used for checks for moves affected by Disable, Mimic, etc. #define MOVE_UNAVAILABLE 0xFFFF diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index fd94afe544..93d5e5d57b 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -79,6 +79,7 @@ #define PARTY_MSG_DO_WHAT_WITH_ITEM 24 #define PARTY_MSG_DO_WHAT_WITH_MAIL 25 #define PARTY_MSG_ALREADY_HOLDING_ONE 26 +#define PARTY_MSG_WHICH_APPLIANCE 27 #define PARTY_MSG_NONE 127 // IDs for DisplayPartyPokemonDescriptionText, to display a message in the party pokemon's box @@ -96,9 +97,11 @@ #define PARTYBOX_DESC_HAVE 11 #define PARTYBOX_DESC_DONT_HAVE 12 -#define SELECTWINDOW_ACTIONS 0 -#define SELECTWINDOW_ITEM 1 -#define SELECTWINDOW_MAIL 2 -#define SELECTWINDOW_MOVES 3 +#define SELECTWINDOW_ACTIONS 0 +#define SELECTWINDOW_ITEM 1 +#define SELECTWINDOW_MAIL 2 +#define SELECTWINDOW_MOVES 3 +#define SELECTWINDOW_CATALOG 4 +#define SELECTWINDOW_ZYGARDECUBE 5 #endif // GUARD_CONSTANTS_PARTY_MENU_H diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h index ef939b9579..b637b748d9 100644 --- a/include/constants/pokedex.h +++ b/include/constants/pokedex.h @@ -919,12 +919,126 @@ enum { NATIONAL_DEX_SNEASLER, NATIONAL_DEX_OVERQWIL, NATIONAL_DEX_ENAMORUS, + NATIONAL_DEX_SPRIGATITO, + NATIONAL_DEX_FLORAGATO, + NATIONAL_DEX_MEOWSCARADA, + NATIONAL_DEX_FUECOCO, + NATIONAL_DEX_CROCALOR, + NATIONAL_DEX_SKELEDIRGE, + NATIONAL_DEX_QUAXLY, + NATIONAL_DEX_QUAXWELL, + NATIONAL_DEX_QUAQUAVAL, + NATIONAL_DEX_LECHONK, + NATIONAL_DEX_OINKOLOGNE, + NATIONAL_DEX_TAROUNTULA, + NATIONAL_DEX_SPIDOPS, + NATIONAL_DEX_NYMBLE, + NATIONAL_DEX_LOKIX, + NATIONAL_DEX_PAWMI, + NATIONAL_DEX_PAWMO, + NATIONAL_DEX_PAWMOT, + NATIONAL_DEX_TANDEMAUS, + NATIONAL_DEX_MAUSHOLD, + NATIONAL_DEX_FIDOUGH, + NATIONAL_DEX_DACHSBUN, + NATIONAL_DEX_SMOLIV, + NATIONAL_DEX_DOLLIV, + NATIONAL_DEX_ARBOLIVA, + NATIONAL_DEX_SQUAWKABILLY, + NATIONAL_DEX_NACLI, + NATIONAL_DEX_NACLSTACK, + NATIONAL_DEX_GARGANACL, + NATIONAL_DEX_CHARCADET, + NATIONAL_DEX_ARMAROUGE, + NATIONAL_DEX_CERULEDGE, + NATIONAL_DEX_TADBULB, + NATIONAL_DEX_BELLIBOLT, + NATIONAL_DEX_WATTREL, + NATIONAL_DEX_KILOWATTREL, + NATIONAL_DEX_MASCHIFF, + NATIONAL_DEX_MABOSSTIFF, + NATIONAL_DEX_SHROODLE, + NATIONAL_DEX_GRAFAIAI, + NATIONAL_DEX_BRAMBLIN, + NATIONAL_DEX_BRAMBLEGHAST, + NATIONAL_DEX_TOEDSCOOL, + NATIONAL_DEX_TOEDSCRUEL, + NATIONAL_DEX_KLAWF, + NATIONAL_DEX_CAPSAKID, + NATIONAL_DEX_SCOVILLAIN, + NATIONAL_DEX_RELLOR, + NATIONAL_DEX_RABSCA, + NATIONAL_DEX_FLITTLE, + NATIONAL_DEX_ESPATHRA, + NATIONAL_DEX_TINKATINK, + NATIONAL_DEX_TINKATUFF, + NATIONAL_DEX_TINKATON, + NATIONAL_DEX_WIGLETT, + NATIONAL_DEX_WUGTRIO, + NATIONAL_DEX_BOMBIRDIER, + NATIONAL_DEX_FINIZEN, + NATIONAL_DEX_PALAFIN, + NATIONAL_DEX_VAROOM, + NATIONAL_DEX_REVAVROOM, + NATIONAL_DEX_CYCLIZAR, + NATIONAL_DEX_ORTHWORM, + NATIONAL_DEX_GLIMMET, + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_GREAVARD, + NATIONAL_DEX_HOUNDSTONE, + NATIONAL_DEX_FLAMIGO, + NATIONAL_DEX_CETODDLE, + NATIONAL_DEX_CETITAN, + NATIONAL_DEX_VELUZA, + NATIONAL_DEX_DONDOZO, + NATIONAL_DEX_TATSUGIRI, + NATIONAL_DEX_ANNIHILAPE, + NATIONAL_DEX_CLODSIRE, + NATIONAL_DEX_FARIGIRAF, + NATIONAL_DEX_DUDUNSPARCE, + NATIONAL_DEX_KINGAMBIT, + NATIONAL_DEX_GREAT_TUSK, + NATIONAL_DEX_SCREAM_TAIL, + NATIONAL_DEX_BRUTE_BONNET, + NATIONAL_DEX_FLUTTER_MANE, + NATIONAL_DEX_SLITHER_WING, + NATIONAL_DEX_SANDY_SHOCKS, + NATIONAL_DEX_IRON_TREADS, + NATIONAL_DEX_IRON_BUNDLE, + NATIONAL_DEX_IRON_HANDS, + NATIONAL_DEX_IRON_JUGULIS, + NATIONAL_DEX_IRON_MOTH, + NATIONAL_DEX_IRON_THORNS, + NATIONAL_DEX_FRIGIBAX, + NATIONAL_DEX_ARCTIBAX, + NATIONAL_DEX_BAXCALIBUR, + NATIONAL_DEX_GIMMIGHOUL, + NATIONAL_DEX_GHOLDENGO, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_CHIEN_PAO, + NATIONAL_DEX_TING_LU, + NATIONAL_DEX_CHI_YU, + NATIONAL_DEX_ROARING_MOON, + NATIONAL_DEX_IRON_VALIANT, + NATIONAL_DEX_KORAIDON, + NATIONAL_DEX_MIRAIDON, + NATIONAL_DEX_WALKING_WAKE, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_DIPPLIN, + NATIONAL_DEX_POLTCHAGEIST, + NATIONAL_DEX_SINISTCHA, + NATIONAL_DEX_OKIDOGI, + NATIONAL_DEX_MUNKIDORI, + NATIONAL_DEX_FEZANDIPITI, + NATIONAL_DEX_OGERPON, }; #define KANTO_DEX_COUNT NATIONAL_DEX_MEW #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI -#if P_GEN_8_POKEMON == TRUE +#if P_GEN_9_POKEMON == TRUE + #define NATIONAL_DEX_COUNT NATIONAL_DEX_OGERPON +#elif P_GEN_8_POKEMON == TRUE #define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS #elif P_GEN_7_POKEMON == TRUE #define NATIONAL_DEX_COUNT NATIONAL_DEX_MELMETAL diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index e3dd15000f..e10085b8ba 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -163,7 +163,7 @@ #define LEVEL_UP_MOVE_ID 0x01FF #define LEVEL_UP_MOVE_LV 0xFE00 -#define LEVEL_UP_END 0xFFFF +#define LEVEL_UP_MOVE_END 0xFFFF #define MAX_LEVEL_UP_MOVES 20 @@ -191,8 +191,20 @@ #define FRIENDSHIP_200_TO_254 5 #define FRIENDSHIP_MAX 6 -// Friendship value that the majority of species use. This was changed in Generation 8 to 50. +// Constants for GetBattlerAffectionHearts (based on friendship value) +#define AFFECTION_NO_HEARTS 0 // 0-79 friendship +#define AFFECTION_ONE_HEART 1 // 80-129 friendship +#define AFFECTION_TWO_HEARTS 2 // 130-179 friendship +#define AFFECTION_THREE_HEARTS 3 // 180-219 friendship +#define AFFECTION_FOUR_HEARTS 4 // 220-254 friendship +#define AFFECTION_FIVE_HEARTS 5 // Max friendship + +// Friendship value that the majority of species use. +#if P_UPDATED_FRIENDSHIP >= GEN_8 +#define STANDARD_FRIENDSHIP 50 +#else #define STANDARD_FRIENDSHIP 70 +#endif #define MAX_FRIENDSHIP 255 #define MAX_SHEEN 255 @@ -284,8 +296,12 @@ #define EVO_ITEM_DAY 40 // specified item is used on Pokémon, is day #define EVO_ITEM_HOLD 41 // Pokémon levels up, holds specified item #define EVO_LEVEL_FOG 42 // Pokémon reaches the specified level during fog in the overworld +#define EVO_MOVE_TWO_SEGMENT 43 // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 +#define EVO_MOVE_THREE_SEGMENT 44 // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 +#define EVO_LEVEL_FAMILY_OF_THREE 45 // Pokémon reaches the specified level with a personality value with a modulus of 0 +#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level with a personality value with a modulus of 1-99 -#define EVOS_PER_MON 10 +#define EVOS_PER_MON 11 // Evolution 'modes,' for GetEvolutionTargetSpecies #define EVO_MODE_NORMAL 0 @@ -324,9 +340,11 @@ #define SPECIES_FLAG_ALOLAN_FORM (1 << 5) #define SPECIES_FLAG_GALARIAN_FORM (1 << 6) #define SPECIES_FLAG_HISUIAN_FORM (1 << 7) -#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 8) -#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 9) -#define SPECIES_FLAG_ULTRA_BURST (1 << 10) +#define SPECIES_FLAG_PALDEAN_FORM (1 << 8) +#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 9) +#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 10) +#define SPECIES_FLAG_ULTRA_BURST (1 << 11) +#define SPECIES_FLAG_PARADOX (1 << 12) #define LEGENDARY_PERFECT_IV_COUNT 3 diff --git a/include/constants/species.h b/include/constants/species.h index ae36497e71..7d05c9b0df 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1,1378 +1,1695 @@ #ifndef GUARD_CONSTANTS_SPECIES_H #define GUARD_CONSTANTS_SPECIES_H -#define SPECIES_NONE 0 -#define SPECIES_BULBASAUR 1 -#define SPECIES_IVYSAUR 2 -#define SPECIES_VENUSAUR 3 -#define SPECIES_CHARMANDER 4 -#define SPECIES_CHARMELEON 5 -#define SPECIES_CHARIZARD 6 -#define SPECIES_SQUIRTLE 7 -#define SPECIES_WARTORTLE 8 -#define SPECIES_BLASTOISE 9 -#define SPECIES_CATERPIE 10 -#define SPECIES_METAPOD 11 -#define SPECIES_BUTTERFREE 12 -#define SPECIES_WEEDLE 13 -#define SPECIES_KAKUNA 14 -#define SPECIES_BEEDRILL 15 -#define SPECIES_PIDGEY 16 -#define SPECIES_PIDGEOTTO 17 -#define SPECIES_PIDGEOT 18 -#define SPECIES_RATTATA 19 -#define SPECIES_RATICATE 20 -#define SPECIES_SPEAROW 21 -#define SPECIES_FEAROW 22 -#define SPECIES_EKANS 23 -#define SPECIES_ARBOK 24 -#define SPECIES_PIKACHU 25 -#define SPECIES_RAICHU 26 -#define SPECIES_SANDSHREW 27 -#define SPECIES_SANDSLASH 28 -#define SPECIES_NIDORAN_F 29 -#define SPECIES_NIDORINA 30 -#define SPECIES_NIDOQUEEN 31 -#define SPECIES_NIDORAN_M 32 -#define SPECIES_NIDORINO 33 -#define SPECIES_NIDOKING 34 -#define SPECIES_CLEFAIRY 35 -#define SPECIES_CLEFABLE 36 -#define SPECIES_VULPIX 37 -#define SPECIES_NINETALES 38 -#define SPECIES_JIGGLYPUFF 39 -#define SPECIES_WIGGLYTUFF 40 -#define SPECIES_ZUBAT 41 -#define SPECIES_GOLBAT 42 -#define SPECIES_ODDISH 43 -#define SPECIES_GLOOM 44 -#define SPECIES_VILEPLUME 45 -#define SPECIES_PARAS 46 -#define SPECIES_PARASECT 47 -#define SPECIES_VENONAT 48 -#define SPECIES_VENOMOTH 49 -#define SPECIES_DIGLETT 50 -#define SPECIES_DUGTRIO 51 -#define SPECIES_MEOWTH 52 -#define SPECIES_PERSIAN 53 -#define SPECIES_PSYDUCK 54 -#define SPECIES_GOLDUCK 55 -#define SPECIES_MANKEY 56 -#define SPECIES_PRIMEAPE 57 -#define SPECIES_GROWLITHE 58 -#define SPECIES_ARCANINE 59 -#define SPECIES_POLIWAG 60 -#define SPECIES_POLIWHIRL 61 -#define SPECIES_POLIWRATH 62 -#define SPECIES_ABRA 63 -#define SPECIES_KADABRA 64 -#define SPECIES_ALAKAZAM 65 -#define SPECIES_MACHOP 66 -#define SPECIES_MACHOKE 67 -#define SPECIES_MACHAMP 68 -#define SPECIES_BELLSPROUT 69 -#define SPECIES_WEEPINBELL 70 -#define SPECIES_VICTREEBEL 71 -#define SPECIES_TENTACOOL 72 -#define SPECIES_TENTACRUEL 73 -#define SPECIES_GEODUDE 74 -#define SPECIES_GRAVELER 75 -#define SPECIES_GOLEM 76 -#define SPECIES_PONYTA 77 -#define SPECIES_RAPIDASH 78 -#define SPECIES_SLOWPOKE 79 -#define SPECIES_SLOWBRO 80 -#define SPECIES_MAGNEMITE 81 -#define SPECIES_MAGNETON 82 -#define SPECIES_FARFETCHD 83 -#define SPECIES_DODUO 84 -#define SPECIES_DODRIO 85 -#define SPECIES_SEEL 86 -#define SPECIES_DEWGONG 87 -#define SPECIES_GRIMER 88 -#define SPECIES_MUK 89 -#define SPECIES_SHELLDER 90 -#define SPECIES_CLOYSTER 91 -#define SPECIES_GASTLY 92 -#define SPECIES_HAUNTER 93 -#define SPECIES_GENGAR 94 -#define SPECIES_ONIX 95 -#define SPECIES_DROWZEE 96 -#define SPECIES_HYPNO 97 -#define SPECIES_KRABBY 98 -#define SPECIES_KINGLER 99 -#define SPECIES_VOLTORB 100 -#define SPECIES_ELECTRODE 101 -#define SPECIES_EXEGGCUTE 102 -#define SPECIES_EXEGGUTOR 103 -#define SPECIES_CUBONE 104 -#define SPECIES_MAROWAK 105 -#define SPECIES_HITMONLEE 106 -#define SPECIES_HITMONCHAN 107 -#define SPECIES_LICKITUNG 108 -#define SPECIES_KOFFING 109 -#define SPECIES_WEEZING 110 -#define SPECIES_RHYHORN 111 -#define SPECIES_RHYDON 112 -#define SPECIES_CHANSEY 113 -#define SPECIES_TANGELA 114 -#define SPECIES_KANGASKHAN 115 -#define SPECIES_HORSEA 116 -#define SPECIES_SEADRA 117 -#define SPECIES_GOLDEEN 118 -#define SPECIES_SEAKING 119 -#define SPECIES_STARYU 120 -#define SPECIES_STARMIE 121 -#define SPECIES_MR_MIME 122 -#define SPECIES_SCYTHER 123 -#define SPECIES_JYNX 124 -#define SPECIES_ELECTABUZZ 125 -#define SPECIES_MAGMAR 126 -#define SPECIES_PINSIR 127 -#define SPECIES_TAUROS 128 -#define SPECIES_MAGIKARP 129 -#define SPECIES_GYARADOS 130 -#define SPECIES_LAPRAS 131 -#define SPECIES_DITTO 132 -#define SPECIES_EEVEE 133 -#define SPECIES_VAPOREON 134 -#define SPECIES_JOLTEON 135 -#define SPECIES_FLAREON 136 -#define SPECIES_PORYGON 137 -#define SPECIES_OMANYTE 138 -#define SPECIES_OMASTAR 139 -#define SPECIES_KABUTO 140 -#define SPECIES_KABUTOPS 141 -#define SPECIES_AERODACTYL 142 -#define SPECIES_SNORLAX 143 -#define SPECIES_ARTICUNO 144 -#define SPECIES_ZAPDOS 145 -#define SPECIES_MOLTRES 146 -#define SPECIES_DRATINI 147 -#define SPECIES_DRAGONAIR 148 -#define SPECIES_DRAGONITE 149 -#define SPECIES_MEWTWO 150 -#define SPECIES_MEW 151 -#define SPECIES_CHIKORITA 152 -#define SPECIES_BAYLEEF 153 -#define SPECIES_MEGANIUM 154 -#define SPECIES_CYNDAQUIL 155 -#define SPECIES_QUILAVA 156 -#define SPECIES_TYPHLOSION 157 -#define SPECIES_TOTODILE 158 -#define SPECIES_CROCONAW 159 -#define SPECIES_FERALIGATR 160 -#define SPECIES_SENTRET 161 -#define SPECIES_FURRET 162 -#define SPECIES_HOOTHOOT 163 -#define SPECIES_NOCTOWL 164 -#define SPECIES_LEDYBA 165 -#define SPECIES_LEDIAN 166 -#define SPECIES_SPINARAK 167 -#define SPECIES_ARIADOS 168 -#define SPECIES_CROBAT 169 -#define SPECIES_CHINCHOU 170 -#define SPECIES_LANTURN 171 -#define SPECIES_PICHU 172 -#define SPECIES_CLEFFA 173 -#define SPECIES_IGGLYBUFF 174 -#define SPECIES_TOGEPI 175 -#define SPECIES_TOGETIC 176 -#define SPECIES_NATU 177 -#define SPECIES_XATU 178 -#define SPECIES_MAREEP 179 -#define SPECIES_FLAAFFY 180 -#define SPECIES_AMPHAROS 181 -#define SPECIES_BELLOSSOM 182 -#define SPECIES_MARILL 183 -#define SPECIES_AZUMARILL 184 -#define SPECIES_SUDOWOODO 185 -#define SPECIES_POLITOED 186 -#define SPECIES_HOPPIP 187 -#define SPECIES_SKIPLOOM 188 -#define SPECIES_JUMPLUFF 189 -#define SPECIES_AIPOM 190 -#define SPECIES_SUNKERN 191 -#define SPECIES_SUNFLORA 192 -#define SPECIES_YANMA 193 -#define SPECIES_WOOPER 194 -#define SPECIES_QUAGSIRE 195 -#define SPECIES_ESPEON 196 -#define SPECIES_UMBREON 197 -#define SPECIES_MURKROW 198 -#define SPECIES_SLOWKING 199 -#define SPECIES_MISDREAVUS 200 -#define SPECIES_UNOWN 201 -#define SPECIES_WOBBUFFET 202 -#define SPECIES_GIRAFARIG 203 -#define SPECIES_PINECO 204 -#define SPECIES_FORRETRESS 205 -#define SPECIES_DUNSPARCE 206 -#define SPECIES_GLIGAR 207 -#define SPECIES_STEELIX 208 -#define SPECIES_SNUBBULL 209 -#define SPECIES_GRANBULL 210 -#define SPECIES_QWILFISH 211 -#define SPECIES_SCIZOR 212 -#define SPECIES_SHUCKLE 213 -#define SPECIES_HERACROSS 214 -#define SPECIES_SNEASEL 215 -#define SPECIES_TEDDIURSA 216 -#define SPECIES_URSARING 217 -#define SPECIES_SLUGMA 218 -#define SPECIES_MAGCARGO 219 -#define SPECIES_SWINUB 220 -#define SPECIES_PILOSWINE 221 -#define SPECIES_CORSOLA 222 -#define SPECIES_REMORAID 223 -#define SPECIES_OCTILLERY 224 -#define SPECIES_DELIBIRD 225 -#define SPECIES_MANTINE 226 -#define SPECIES_SKARMORY 227 -#define SPECIES_HOUNDOUR 228 -#define SPECIES_HOUNDOOM 229 -#define SPECIES_KINGDRA 230 -#define SPECIES_PHANPY 231 -#define SPECIES_DONPHAN 232 -#define SPECIES_PORYGON2 233 -#define SPECIES_STANTLER 234 -#define SPECIES_SMEARGLE 235 -#define SPECIES_TYROGUE 236 -#define SPECIES_HITMONTOP 237 -#define SPECIES_SMOOCHUM 238 -#define SPECIES_ELEKID 239 -#define SPECIES_MAGBY 240 -#define SPECIES_MILTANK 241 -#define SPECIES_BLISSEY 242 -#define SPECIES_RAIKOU 243 -#define SPECIES_ENTEI 244 -#define SPECIES_SUICUNE 245 -#define SPECIES_LARVITAR 246 -#define SPECIES_PUPITAR 247 -#define SPECIES_TYRANITAR 248 -#define SPECIES_LUGIA 249 -#define SPECIES_HO_OH 250 -#define SPECIES_CELEBI 251 -#define SPECIES_TREECKO 252 -#define SPECIES_GROVYLE 253 -#define SPECIES_SCEPTILE 254 -#define SPECIES_TORCHIC 255 -#define SPECIES_COMBUSKEN 256 -#define SPECIES_BLAZIKEN 257 -#define SPECIES_MUDKIP 258 -#define SPECIES_MARSHTOMP 259 -#define SPECIES_SWAMPERT 260 -#define SPECIES_POOCHYENA 261 -#define SPECIES_MIGHTYENA 262 -#define SPECIES_ZIGZAGOON 263 -#define SPECIES_LINOONE 264 -#define SPECIES_WURMPLE 265 -#define SPECIES_SILCOON 266 -#define SPECIES_BEAUTIFLY 267 -#define SPECIES_CASCOON 268 -#define SPECIES_DUSTOX 269 -#define SPECIES_LOTAD 270 -#define SPECIES_LOMBRE 271 -#define SPECIES_LUDICOLO 272 -#define SPECIES_SEEDOT 273 -#define SPECIES_NUZLEAF 274 -#define SPECIES_SHIFTRY 275 -#define SPECIES_TAILLOW 276 -#define SPECIES_SWELLOW 277 -#define SPECIES_WINGULL 278 -#define SPECIES_PELIPPER 279 -#define SPECIES_RALTS 280 -#define SPECIES_KIRLIA 281 -#define SPECIES_GARDEVOIR 282 -#define SPECIES_SURSKIT 283 -#define SPECIES_MASQUERAIN 284 -#define SPECIES_SHROOMISH 285 -#define SPECIES_BRELOOM 286 -#define SPECIES_SLAKOTH 287 -#define SPECIES_VIGOROTH 288 -#define SPECIES_SLAKING 289 -#define SPECIES_NINCADA 290 -#define SPECIES_NINJASK 291 -#define SPECIES_SHEDINJA 292 -#define SPECIES_WHISMUR 293 -#define SPECIES_LOUDRED 294 -#define SPECIES_EXPLOUD 295 -#define SPECIES_MAKUHITA 296 -#define SPECIES_HARIYAMA 297 -#define SPECIES_AZURILL 298 -#define SPECIES_NOSEPASS 299 -#define SPECIES_SKITTY 300 -#define SPECIES_DELCATTY 301 -#define SPECIES_SABLEYE 302 -#define SPECIES_MAWILE 303 -#define SPECIES_ARON 304 -#define SPECIES_LAIRON 305 -#define SPECIES_AGGRON 306 -#define SPECIES_MEDITITE 307 -#define SPECIES_MEDICHAM 308 -#define SPECIES_ELECTRIKE 309 -#define SPECIES_MANECTRIC 310 -#define SPECIES_PLUSLE 311 -#define SPECIES_MINUN 312 -#define SPECIES_VOLBEAT 313 -#define SPECIES_ILLUMISE 314 -#define SPECIES_ROSELIA 315 -#define SPECIES_GULPIN 316 -#define SPECIES_SWALOT 317 -#define SPECIES_CARVANHA 318 -#define SPECIES_SHARPEDO 319 -#define SPECIES_WAILMER 320 -#define SPECIES_WAILORD 321 -#define SPECIES_NUMEL 322 -#define SPECIES_CAMERUPT 323 -#define SPECIES_TORKOAL 324 -#define SPECIES_SPOINK 325 -#define SPECIES_GRUMPIG 326 -#define SPECIES_SPINDA 327 -#define SPECIES_TRAPINCH 328 -#define SPECIES_VIBRAVA 329 -#define SPECIES_FLYGON 330 -#define SPECIES_CACNEA 331 -#define SPECIES_CACTURNE 332 -#define SPECIES_SWABLU 333 -#define SPECIES_ALTARIA 334 -#define SPECIES_ZANGOOSE 335 -#define SPECIES_SEVIPER 336 -#define SPECIES_LUNATONE 337 -#define SPECIES_SOLROCK 338 -#define SPECIES_BARBOACH 339 -#define SPECIES_WHISCASH 340 -#define SPECIES_CORPHISH 341 -#define SPECIES_CRAWDAUNT 342 -#define SPECIES_BALTOY 343 -#define SPECIES_CLAYDOL 344 -#define SPECIES_LILEEP 345 -#define SPECIES_CRADILY 346 -#define SPECIES_ANORITH 347 -#define SPECIES_ARMALDO 348 -#define SPECIES_FEEBAS 349 -#define SPECIES_MILOTIC 350 -#define SPECIES_CASTFORM 351 -#define SPECIES_KECLEON 352 -#define SPECIES_SHUPPET 353 -#define SPECIES_BANETTE 354 -#define SPECIES_DUSKULL 355 -#define SPECIES_DUSCLOPS 356 -#define SPECIES_TROPIUS 357 -#define SPECIES_CHIMECHO 358 -#define SPECIES_ABSOL 359 -#define SPECIES_WYNAUT 360 -#define SPECIES_SNORUNT 361 -#define SPECIES_GLALIE 362 -#define SPECIES_SPHEAL 363 -#define SPECIES_SEALEO 364 -#define SPECIES_WALREIN 365 -#define SPECIES_CLAMPERL 366 -#define SPECIES_HUNTAIL 367 -#define SPECIES_GOREBYSS 368 -#define SPECIES_RELICANTH 369 -#define SPECIES_LUVDISC 370 -#define SPECIES_BAGON 371 -#define SPECIES_SHELGON 372 -#define SPECIES_SALAMENCE 373 -#define SPECIES_BELDUM 374 -#define SPECIES_METANG 375 -#define SPECIES_METAGROSS 376 -#define SPECIES_REGIROCK 377 -#define SPECIES_REGICE 378 -#define SPECIES_REGISTEEL 379 -#define SPECIES_LATIAS 380 -#define SPECIES_LATIOS 381 -#define SPECIES_KYOGRE 382 -#define SPECIES_GROUDON 383 -#define SPECIES_RAYQUAZA 384 -#define SPECIES_JIRACHI 385 -#define SPECIES_DEOXYS 386 -#define SPECIES_TURTWIG 387 -#define SPECIES_GROTLE 388 -#define SPECIES_TORTERRA 389 -#define SPECIES_CHIMCHAR 390 -#define SPECIES_MONFERNO 391 -#define SPECIES_INFERNAPE 392 -#define SPECIES_PIPLUP 393 -#define SPECIES_PRINPLUP 394 -#define SPECIES_EMPOLEON 395 -#define SPECIES_STARLY 396 -#define SPECIES_STARAVIA 397 -#define SPECIES_STARAPTOR 398 -#define SPECIES_BIDOOF 399 -#define SPECIES_BIBAREL 400 -#define SPECIES_KRICKETOT 401 -#define SPECIES_KRICKETUNE 402 -#define SPECIES_SHINX 403 -#define SPECIES_LUXIO 404 -#define SPECIES_LUXRAY 405 -#define SPECIES_BUDEW 406 -#define SPECIES_ROSERADE 407 -#define SPECIES_CRANIDOS 408 -#define SPECIES_RAMPARDOS 409 -#define SPECIES_SHIELDON 410 -#define SPECIES_BASTIODON 411 -#define SPECIES_BURMY 412 -#define SPECIES_WORMADAM 413 -#define SPECIES_MOTHIM 414 -#define SPECIES_COMBEE 415 -#define SPECIES_VESPIQUEN 416 -#define SPECIES_PACHIRISU 417 -#define SPECIES_BUIZEL 418 -#define SPECIES_FLOATZEL 419 -#define SPECIES_CHERUBI 420 -#define SPECIES_CHERRIM 421 -#define SPECIES_SHELLOS 422 -#define SPECIES_GASTRODON 423 -#define SPECIES_AMBIPOM 424 -#define SPECIES_DRIFLOON 425 -#define SPECIES_DRIFBLIM 426 -#define SPECIES_BUNEARY 427 -#define SPECIES_LOPUNNY 428 -#define SPECIES_MISMAGIUS 429 -#define SPECIES_HONCHKROW 430 -#define SPECIES_GLAMEOW 431 -#define SPECIES_PURUGLY 432 -#define SPECIES_CHINGLING 433 -#define SPECIES_STUNKY 434 -#define SPECIES_SKUNTANK 435 -#define SPECIES_BRONZOR 436 -#define SPECIES_BRONZONG 437 -#define SPECIES_BONSLY 438 -#define SPECIES_MIME_JR 439 -#define SPECIES_HAPPINY 440 -#define SPECIES_CHATOT 441 -#define SPECIES_SPIRITOMB 442 -#define SPECIES_GIBLE 443 -#define SPECIES_GABITE 444 -#define SPECIES_GARCHOMP 445 -#define SPECIES_MUNCHLAX 446 -#define SPECIES_RIOLU 447 -#define SPECIES_LUCARIO 448 -#define SPECIES_HIPPOPOTAS 449 -#define SPECIES_HIPPOWDON 450 -#define SPECIES_SKORUPI 451 -#define SPECIES_DRAPION 452 -#define SPECIES_CROAGUNK 453 -#define SPECIES_TOXICROAK 454 -#define SPECIES_CARNIVINE 455 -#define SPECIES_FINNEON 456 -#define SPECIES_LUMINEON 457 -#define SPECIES_MANTYKE 458 -#define SPECIES_SNOVER 459 -#define SPECIES_ABOMASNOW 460 -#define SPECIES_WEAVILE 461 -#define SPECIES_MAGNEZONE 462 -#define SPECIES_LICKILICKY 463 -#define SPECIES_RHYPERIOR 464 -#define SPECIES_TANGROWTH 465 -#define SPECIES_ELECTIVIRE 466 -#define SPECIES_MAGMORTAR 467 -#define SPECIES_TOGEKISS 468 -#define SPECIES_YANMEGA 469 -#define SPECIES_LEAFEON 470 -#define SPECIES_GLACEON 471 -#define SPECIES_GLISCOR 472 -#define SPECIES_MAMOSWINE 473 -#define SPECIES_PORYGON_Z 474 -#define SPECIES_GALLADE 475 -#define SPECIES_PROBOPASS 476 -#define SPECIES_DUSKNOIR 477 -#define SPECIES_FROSLASS 478 -#define SPECIES_ROTOM 479 -#define SPECIES_UXIE 480 -#define SPECIES_MESPRIT 481 -#define SPECIES_AZELF 482 -#define SPECIES_DIALGA 483 -#define SPECIES_PALKIA 484 -#define SPECIES_HEATRAN 485 -#define SPECIES_REGIGIGAS 486 -#define SPECIES_GIRATINA 487 -#define SPECIES_CRESSELIA 488 -#define SPECIES_PHIONE 489 -#define SPECIES_MANAPHY 490 -#define SPECIES_DARKRAI 491 -#define SPECIES_SHAYMIN 492 -#define SPECIES_ARCEUS 493 -#define SPECIES_VICTINI 494 -#define SPECIES_SNIVY 495 -#define SPECIES_SERVINE 496 -#define SPECIES_SERPERIOR 497 -#define SPECIES_TEPIG 498 -#define SPECIES_PIGNITE 499 -#define SPECIES_EMBOAR 500 -#define SPECIES_OSHAWOTT 501 -#define SPECIES_DEWOTT 502 -#define SPECIES_SAMUROTT 503 -#define SPECIES_PATRAT 504 -#define SPECIES_WATCHOG 505 -#define SPECIES_LILLIPUP 506 -#define SPECIES_HERDIER 507 -#define SPECIES_STOUTLAND 508 -#define SPECIES_PURRLOIN 509 -#define SPECIES_LIEPARD 510 -#define SPECIES_PANSAGE 511 -#define SPECIES_SIMISAGE 512 -#define SPECIES_PANSEAR 513 -#define SPECIES_SIMISEAR 514 -#define SPECIES_PANPOUR 515 -#define SPECIES_SIMIPOUR 516 -#define SPECIES_MUNNA 517 -#define SPECIES_MUSHARNA 518 -#define SPECIES_PIDOVE 519 -#define SPECIES_TRANQUILL 520 -#define SPECIES_UNFEZANT 521 -#define SPECIES_BLITZLE 522 -#define SPECIES_ZEBSTRIKA 523 -#define SPECIES_ROGGENROLA 524 -#define SPECIES_BOLDORE 525 -#define SPECIES_GIGALITH 526 -#define SPECIES_WOOBAT 527 -#define SPECIES_SWOOBAT 528 -#define SPECIES_DRILBUR 529 -#define SPECIES_EXCADRILL 530 -#define SPECIES_AUDINO 531 -#define SPECIES_TIMBURR 532 -#define SPECIES_GURDURR 533 -#define SPECIES_CONKELDURR 534 -#define SPECIES_TYMPOLE 535 -#define SPECIES_PALPITOAD 536 -#define SPECIES_SEISMITOAD 537 -#define SPECIES_THROH 538 -#define SPECIES_SAWK 539 -#define SPECIES_SEWADDLE 540 -#define SPECIES_SWADLOON 541 -#define SPECIES_LEAVANNY 542 -#define SPECIES_VENIPEDE 543 -#define SPECIES_WHIRLIPEDE 544 -#define SPECIES_SCOLIPEDE 545 -#define SPECIES_COTTONEE 546 -#define SPECIES_WHIMSICOTT 547 -#define SPECIES_PETILIL 548 -#define SPECIES_LILLIGANT 549 -#define SPECIES_BASCULIN 550 -#define SPECIES_SANDILE 551 -#define SPECIES_KROKOROK 552 -#define SPECIES_KROOKODILE 553 -#define SPECIES_DARUMAKA 554 -#define SPECIES_DARMANITAN 555 -#define SPECIES_MARACTUS 556 -#define SPECIES_DWEBBLE 557 -#define SPECIES_CRUSTLE 558 -#define SPECIES_SCRAGGY 559 -#define SPECIES_SCRAFTY 560 -#define SPECIES_SIGILYPH 561 -#define SPECIES_YAMASK 562 -#define SPECIES_COFAGRIGUS 563 -#define SPECIES_TIRTOUGA 564 -#define SPECIES_CARRACOSTA 565 -#define SPECIES_ARCHEN 566 -#define SPECIES_ARCHEOPS 567 -#define SPECIES_TRUBBISH 568 -#define SPECIES_GARBODOR 569 -#define SPECIES_ZORUA 570 -#define SPECIES_ZOROARK 571 -#define SPECIES_MINCCINO 572 -#define SPECIES_CINCCINO 573 -#define SPECIES_GOTHITA 574 -#define SPECIES_GOTHORITA 575 -#define SPECIES_GOTHITELLE 576 -#define SPECIES_SOLOSIS 577 -#define SPECIES_DUOSION 578 -#define SPECIES_REUNICLUS 579 -#define SPECIES_DUCKLETT 580 -#define SPECIES_SWANNA 581 -#define SPECIES_VANILLITE 582 -#define SPECIES_VANILLISH 583 -#define SPECIES_VANILLUXE 584 -#define SPECIES_DEERLING 585 -#define SPECIES_SAWSBUCK 586 -#define SPECIES_EMOLGA 587 -#define SPECIES_KARRABLAST 588 -#define SPECIES_ESCAVALIER 589 -#define SPECIES_FOONGUS 590 -#define SPECIES_AMOONGUSS 591 -#define SPECIES_FRILLISH 592 -#define SPECIES_JELLICENT 593 -#define SPECIES_ALOMOMOLA 594 -#define SPECIES_JOLTIK 595 -#define SPECIES_GALVANTULA 596 -#define SPECIES_FERROSEED 597 -#define SPECIES_FERROTHORN 598 -#define SPECIES_KLINK 599 -#define SPECIES_KLANG 600 -#define SPECIES_KLINKLANG 601 -#define SPECIES_TYNAMO 602 -#define SPECIES_EELEKTRIK 603 -#define SPECIES_EELEKTROSS 604 -#define SPECIES_ELGYEM 605 -#define SPECIES_BEHEEYEM 606 -#define SPECIES_LITWICK 607 -#define SPECIES_LAMPENT 608 -#define SPECIES_CHANDELURE 609 -#define SPECIES_AXEW 610 -#define SPECIES_FRAXURE 611 -#define SPECIES_HAXORUS 612 -#define SPECIES_CUBCHOO 613 -#define SPECIES_BEARTIC 614 -#define SPECIES_CRYOGONAL 615 -#define SPECIES_SHELMET 616 -#define SPECIES_ACCELGOR 617 -#define SPECIES_STUNFISK 618 -#define SPECIES_MIENFOO 619 -#define SPECIES_MIENSHAO 620 -#define SPECIES_DRUDDIGON 621 -#define SPECIES_GOLETT 622 -#define SPECIES_GOLURK 623 -#define SPECIES_PAWNIARD 624 -#define SPECIES_BISHARP 625 -#define SPECIES_BOUFFALANT 626 -#define SPECIES_RUFFLET 627 -#define SPECIES_BRAVIARY 628 -#define SPECIES_VULLABY 629 -#define SPECIES_MANDIBUZZ 630 -#define SPECIES_HEATMOR 631 -#define SPECIES_DURANT 632 -#define SPECIES_DEINO 633 -#define SPECIES_ZWEILOUS 634 -#define SPECIES_HYDREIGON 635 -#define SPECIES_LARVESTA 636 -#define SPECIES_VOLCARONA 637 -#define SPECIES_COBALION 638 -#define SPECIES_TERRAKION 639 -#define SPECIES_VIRIZION 640 -#define SPECIES_TORNADUS 641 -#define SPECIES_THUNDURUS 642 -#define SPECIES_RESHIRAM 643 -#define SPECIES_ZEKROM 644 -#define SPECIES_LANDORUS 645 -#define SPECIES_KYUREM 646 -#define SPECIES_KELDEO 647 -#define SPECIES_MELOETTA 648 -#define SPECIES_GENESECT 649 -#define SPECIES_CHESPIN 650 -#define SPECIES_QUILLADIN 651 -#define SPECIES_CHESNAUGHT 652 -#define SPECIES_FENNEKIN 653 -#define SPECIES_BRAIXEN 654 -#define SPECIES_DELPHOX 655 -#define SPECIES_FROAKIE 656 -#define SPECIES_FROGADIER 657 -#define SPECIES_GRENINJA 658 -#define SPECIES_BUNNELBY 659 -#define SPECIES_DIGGERSBY 660 -#define SPECIES_FLETCHLING 661 -#define SPECIES_FLETCHINDER 662 -#define SPECIES_TALONFLAME 663 -#define SPECIES_SCATTERBUG 664 -#define SPECIES_SPEWPA 665 -#define SPECIES_VIVILLON 666 // Icy Snow Pattern -#define SPECIES_LITLEO 667 -#define SPECIES_PYROAR 668 -#define SPECIES_FLABEBE 669 // Red Flower -#define SPECIES_FLOETTE 670 -#define SPECIES_FLORGES 671 -#define SPECIES_SKIDDO 672 -#define SPECIES_GOGOAT 673 -#define SPECIES_PANCHAM 674 -#define SPECIES_PANGORO 675 -#define SPECIES_FURFROU 676 -#define SPECIES_ESPURR 677 -#define SPECIES_MEOWSTIC 678 -#define SPECIES_HONEDGE 679 -#define SPECIES_DOUBLADE 680 -#define SPECIES_AEGISLASH 681 -#define SPECIES_SPRITZEE 682 -#define SPECIES_AROMATISSE 683 -#define SPECIES_SWIRLIX 684 -#define SPECIES_SLURPUFF 685 -#define SPECIES_INKAY 686 -#define SPECIES_MALAMAR 687 -#define SPECIES_BINACLE 688 -#define SPECIES_BARBARACLE 689 -#define SPECIES_SKRELP 690 -#define SPECIES_DRAGALGE 691 -#define SPECIES_CLAUNCHER 692 -#define SPECIES_CLAWITZER 693 -#define SPECIES_HELIOPTILE 694 -#define SPECIES_HELIOLISK 695 -#define SPECIES_TYRUNT 696 -#define SPECIES_TYRANTRUM 697 -#define SPECIES_AMAURA 698 -#define SPECIES_AURORUS 699 -#define SPECIES_SYLVEON 700 -#define SPECIES_HAWLUCHA 701 -#define SPECIES_DEDENNE 702 -#define SPECIES_CARBINK 703 -#define SPECIES_GOOMY 704 -#define SPECIES_SLIGGOO 705 -#define SPECIES_GOODRA 706 -#define SPECIES_KLEFKI 707 -#define SPECIES_PHANTUMP 708 -#define SPECIES_TREVENANT 709 -#define SPECIES_PUMPKABOO 710 -#define SPECIES_GOURGEIST 711 -#define SPECIES_BERGMITE 712 -#define SPECIES_AVALUGG 713 -#define SPECIES_NOIBAT 714 -#define SPECIES_NOIVERN 715 -#define SPECIES_XERNEAS 716 -#define SPECIES_YVELTAL 717 -#define SPECIES_ZYGARDE 718 -#define SPECIES_DIANCIE 719 -#define SPECIES_HOOPA 720 -#define SPECIES_VOLCANION 721 -#define SPECIES_ROWLET 722 -#define SPECIES_DARTRIX 723 -#define SPECIES_DECIDUEYE 724 -#define SPECIES_LITTEN 725 -#define SPECIES_TORRACAT 726 -#define SPECIES_INCINEROAR 727 -#define SPECIES_POPPLIO 728 -#define SPECIES_BRIONNE 729 -#define SPECIES_PRIMARINA 730 -#define SPECIES_PIKIPEK 731 -#define SPECIES_TRUMBEAK 732 -#define SPECIES_TOUCANNON 733 -#define SPECIES_YUNGOOS 734 -#define SPECIES_GUMSHOOS 735 -#define SPECIES_GRUBBIN 736 -#define SPECIES_CHARJABUG 737 -#define SPECIES_VIKAVOLT 738 -#define SPECIES_CRABRAWLER 739 -#define SPECIES_CRABOMINABLE 740 -#define SPECIES_ORICORIO 741 -#define SPECIES_CUTIEFLY 742 -#define SPECIES_RIBOMBEE 743 -#define SPECIES_ROCKRUFF 744 -#define SPECIES_LYCANROC 745 -#define SPECIES_WISHIWASHI 746 -#define SPECIES_MAREANIE 747 -#define SPECIES_TOXAPEX 748 -#define SPECIES_MUDBRAY 749 -#define SPECIES_MUDSDALE 750 -#define SPECIES_DEWPIDER 751 -#define SPECIES_ARAQUANID 752 -#define SPECIES_FOMANTIS 753 -#define SPECIES_LURANTIS 754 -#define SPECIES_MORELULL 755 -#define SPECIES_SHIINOTIC 756 -#define SPECIES_SALANDIT 757 -#define SPECIES_SALAZZLE 758 -#define SPECIES_STUFFUL 759 -#define SPECIES_BEWEAR 760 -#define SPECIES_BOUNSWEET 761 -#define SPECIES_STEENEE 762 -#define SPECIES_TSAREENA 763 -#define SPECIES_COMFEY 764 -#define SPECIES_ORANGURU 765 -#define SPECIES_PASSIMIAN 766 -#define SPECIES_WIMPOD 767 -#define SPECIES_GOLISOPOD 768 -#define SPECIES_SANDYGAST 769 -#define SPECIES_PALOSSAND 770 -#define SPECIES_PYUKUMUKU 771 -#define SPECIES_TYPE_NULL 772 -#define SPECIES_SILVALLY 773 -#define SPECIES_MINIOR 774 -#define SPECIES_KOMALA 775 -#define SPECIES_TURTONATOR 776 -#define SPECIES_TOGEDEMARU 777 -#define SPECIES_MIMIKYU 778 -#define SPECIES_BRUXISH 779 -#define SPECIES_DRAMPA 780 -#define SPECIES_DHELMISE 781 -#define SPECIES_JANGMO_O 782 -#define SPECIES_HAKAMO_O 783 -#define SPECIES_KOMMO_O 784 -#define SPECIES_TAPU_KOKO 785 -#define SPECIES_TAPU_LELE 786 -#define SPECIES_TAPU_BULU 787 -#define SPECIES_TAPU_FINI 788 -#define SPECIES_COSMOG 789 -#define SPECIES_COSMOEM 790 -#define SPECIES_SOLGALEO 791 -#define SPECIES_LUNALA 792 -#define SPECIES_NIHILEGO 793 -#define SPECIES_BUZZWOLE 794 -#define SPECIES_PHEROMOSA 795 -#define SPECIES_XURKITREE 796 -#define SPECIES_CELESTEELA 797 -#define SPECIES_KARTANA 798 -#define SPECIES_GUZZLORD 799 -#define SPECIES_NECROZMA 800 -#define SPECIES_MAGEARNA 801 -#define SPECIES_MARSHADOW 802 -#define SPECIES_POIPOLE 803 -#define SPECIES_NAGANADEL 804 -#define SPECIES_STAKATAKA 805 -#define SPECIES_BLACEPHALON 806 -#define SPECIES_ZERAORA 807 -#define SPECIES_MELTAN 808 -#define SPECIES_MELMETAL 809 -#define SPECIES_GROOKEY 810 -#define SPECIES_THWACKEY 811 -#define SPECIES_RILLABOOM 812 -#define SPECIES_SCORBUNNY 813 -#define SPECIES_RABOOT 814 -#define SPECIES_CINDERACE 815 -#define SPECIES_SOBBLE 816 -#define SPECIES_DRIZZILE 817 -#define SPECIES_INTELEON 818 -#define SPECIES_SKWOVET 819 -#define SPECIES_GREEDENT 820 -#define SPECIES_ROOKIDEE 821 -#define SPECIES_CORVISQUIRE 822 -#define SPECIES_CORVIKNIGHT 823 -#define SPECIES_BLIPBUG 824 -#define SPECIES_DOTTLER 825 -#define SPECIES_ORBEETLE 826 -#define SPECIES_NICKIT 827 -#define SPECIES_THIEVUL 828 -#define SPECIES_GOSSIFLEUR 829 -#define SPECIES_ELDEGOSS 830 -#define SPECIES_WOOLOO 831 -#define SPECIES_DUBWOOL 832 -#define SPECIES_CHEWTLE 833 -#define SPECIES_DREDNAW 834 -#define SPECIES_YAMPER 835 -#define SPECIES_BOLTUND 836 -#define SPECIES_ROLYCOLY 837 -#define SPECIES_CARKOL 838 -#define SPECIES_COALOSSAL 839 -#define SPECIES_APPLIN 840 -#define SPECIES_FLAPPLE 841 -#define SPECIES_APPLETUN 842 -#define SPECIES_SILICOBRA 843 -#define SPECIES_SANDACONDA 844 -#define SPECIES_CRAMORANT 845 -#define SPECIES_ARROKUDA 846 -#define SPECIES_BARRASKEWDA 847 -#define SPECIES_TOXEL 848 -#define SPECIES_TOXTRICITY 849 -#define SPECIES_SIZZLIPEDE 850 -#define SPECIES_CENTISKORCH 851 -#define SPECIES_CLOBBOPUS 852 -#define SPECIES_GRAPPLOCT 853 -#define SPECIES_SINISTEA 854 -#define SPECIES_POLTEAGEIST 855 -#define SPECIES_HATENNA 856 -#define SPECIES_HATTREM 857 -#define SPECIES_HATTERENE 858 -#define SPECIES_IMPIDIMP 859 -#define SPECIES_MORGREM 860 -#define SPECIES_GRIMMSNARL 861 -#define SPECIES_OBSTAGOON 862 -#define SPECIES_PERRSERKER 863 -#define SPECIES_CURSOLA 864 -#define SPECIES_SIRFETCHD 865 -#define SPECIES_MR_RIME 866 -#define SPECIES_RUNERIGUS 867 -#define SPECIES_MILCERY 868 -#define SPECIES_ALCREMIE 869 -#define SPECIES_FALINKS 870 -#define SPECIES_PINCURCHIN 871 -#define SPECIES_SNOM 872 -#define SPECIES_FROSMOTH 873 -#define SPECIES_STONJOURNER 874 -#define SPECIES_EISCUE 875 -#define SPECIES_INDEEDEE 876 -#define SPECIES_MORPEKO 877 -#define SPECIES_CUFANT 878 -#define SPECIES_COPPERAJAH 879 -#define SPECIES_DRACOZOLT 880 -#define SPECIES_ARCTOZOLT 881 -#define SPECIES_DRACOVISH 882 -#define SPECIES_ARCTOVISH 883 -#define SPECIES_DURALUDON 884 -#define SPECIES_DREEPY 885 -#define SPECIES_DRAKLOAK 886 -#define SPECIES_DRAGAPULT 887 -#define SPECIES_ZACIAN 888 -#define SPECIES_ZAMAZENTA 889 -#define SPECIES_ETERNATUS 890 -#define SPECIES_KUBFU 891 -#define SPECIES_URSHIFU 892 -#define SPECIES_ZARUDE 893 -#define SPECIES_REGIELEKI 894 -#define SPECIES_REGIDRAGO 895 -#define SPECIES_GLASTRIER 896 -#define SPECIES_SPECTRIER 897 -#define SPECIES_CALYREX 898 -#define SPECIES_WYRDEER 899 -#define SPECIES_KLEAVOR 900 -#define SPECIES_URSALUNA 901 -#define SPECIES_BASCULEGION 902 -#define SPECIES_SNEASLER 903 -#define SPECIES_OVERQWIL 904 -#define SPECIES_ENAMORUS 905 +#define SPECIES_NONE 0 +#define SPECIES_BULBASAUR 1 +#define SPECIES_IVYSAUR 2 +#define SPECIES_VENUSAUR 3 +#define SPECIES_CHARMANDER 4 +#define SPECIES_CHARMELEON 5 +#define SPECIES_CHARIZARD 6 +#define SPECIES_SQUIRTLE 7 +#define SPECIES_WARTORTLE 8 +#define SPECIES_BLASTOISE 9 +#define SPECIES_CATERPIE 10 +#define SPECIES_METAPOD 11 +#define SPECIES_BUTTERFREE 12 +#define SPECIES_WEEDLE 13 +#define SPECIES_KAKUNA 14 +#define SPECIES_BEEDRILL 15 +#define SPECIES_PIDGEY 16 +#define SPECIES_PIDGEOTTO 17 +#define SPECIES_PIDGEOT 18 +#define SPECIES_RATTATA 19 +#define SPECIES_RATICATE 20 +#define SPECIES_SPEAROW 21 +#define SPECIES_FEAROW 22 +#define SPECIES_EKANS 23 +#define SPECIES_ARBOK 24 +#define SPECIES_PIKACHU 25 +#define SPECIES_RAICHU 26 +#define SPECIES_SANDSHREW 27 +#define SPECIES_SANDSLASH 28 +#define SPECIES_NIDORAN_F 29 +#define SPECIES_NIDORINA 30 +#define SPECIES_NIDOQUEEN 31 +#define SPECIES_NIDORAN_M 32 +#define SPECIES_NIDORINO 33 +#define SPECIES_NIDOKING 34 +#define SPECIES_CLEFAIRY 35 +#define SPECIES_CLEFABLE 36 +#define SPECIES_VULPIX 37 +#define SPECIES_NINETALES 38 +#define SPECIES_JIGGLYPUFF 39 +#define SPECIES_WIGGLYTUFF 40 +#define SPECIES_ZUBAT 41 +#define SPECIES_GOLBAT 42 +#define SPECIES_ODDISH 43 +#define SPECIES_GLOOM 44 +#define SPECIES_VILEPLUME 45 +#define SPECIES_PARAS 46 +#define SPECIES_PARASECT 47 +#define SPECIES_VENONAT 48 +#define SPECIES_VENOMOTH 49 +#define SPECIES_DIGLETT 50 +#define SPECIES_DUGTRIO 51 +#define SPECIES_MEOWTH 52 +#define SPECIES_PERSIAN 53 +#define SPECIES_PSYDUCK 54 +#define SPECIES_GOLDUCK 55 +#define SPECIES_MANKEY 56 +#define SPECIES_PRIMEAPE 57 +#define SPECIES_GROWLITHE 58 +#define SPECIES_ARCANINE 59 +#define SPECIES_POLIWAG 60 +#define SPECIES_POLIWHIRL 61 +#define SPECIES_POLIWRATH 62 +#define SPECIES_ABRA 63 +#define SPECIES_KADABRA 64 +#define SPECIES_ALAKAZAM 65 +#define SPECIES_MACHOP 66 +#define SPECIES_MACHOKE 67 +#define SPECIES_MACHAMP 68 +#define SPECIES_BELLSPROUT 69 +#define SPECIES_WEEPINBELL 70 +#define SPECIES_VICTREEBEL 71 +#define SPECIES_TENTACOOL 72 +#define SPECIES_TENTACRUEL 73 +#define SPECIES_GEODUDE 74 +#define SPECIES_GRAVELER 75 +#define SPECIES_GOLEM 76 +#define SPECIES_PONYTA 77 +#define SPECIES_RAPIDASH 78 +#define SPECIES_SLOWPOKE 79 +#define SPECIES_SLOWBRO 80 +#define SPECIES_MAGNEMITE 81 +#define SPECIES_MAGNETON 82 +#define SPECIES_FARFETCHD 83 +#define SPECIES_DODUO 84 +#define SPECIES_DODRIO 85 +#define SPECIES_SEEL 86 +#define SPECIES_DEWGONG 87 +#define SPECIES_GRIMER 88 +#define SPECIES_MUK 89 +#define SPECIES_SHELLDER 90 +#define SPECIES_CLOYSTER 91 +#define SPECIES_GASTLY 92 +#define SPECIES_HAUNTER 93 +#define SPECIES_GENGAR 94 +#define SPECIES_ONIX 95 +#define SPECIES_DROWZEE 96 +#define SPECIES_HYPNO 97 +#define SPECIES_KRABBY 98 +#define SPECIES_KINGLER 99 +#define SPECIES_VOLTORB 100 +#define SPECIES_ELECTRODE 101 +#define SPECIES_EXEGGCUTE 102 +#define SPECIES_EXEGGUTOR 103 +#define SPECIES_CUBONE 104 +#define SPECIES_MAROWAK 105 +#define SPECIES_HITMONLEE 106 +#define SPECIES_HITMONCHAN 107 +#define SPECIES_LICKITUNG 108 +#define SPECIES_KOFFING 109 +#define SPECIES_WEEZING 110 +#define SPECIES_RHYHORN 111 +#define SPECIES_RHYDON 112 +#define SPECIES_CHANSEY 113 +#define SPECIES_TANGELA 114 +#define SPECIES_KANGASKHAN 115 +#define SPECIES_HORSEA 116 +#define SPECIES_SEADRA 117 +#define SPECIES_GOLDEEN 118 +#define SPECIES_SEAKING 119 +#define SPECIES_STARYU 120 +#define SPECIES_STARMIE 121 +#define SPECIES_MR_MIME 122 +#define SPECIES_SCYTHER 123 +#define SPECIES_JYNX 124 +#define SPECIES_ELECTABUZZ 125 +#define SPECIES_MAGMAR 126 +#define SPECIES_PINSIR 127 +#define SPECIES_TAUROS 128 +#define SPECIES_MAGIKARP 129 +#define SPECIES_GYARADOS 130 +#define SPECIES_LAPRAS 131 +#define SPECIES_DITTO 132 +#define SPECIES_EEVEE 133 +#define SPECIES_VAPOREON 134 +#define SPECIES_JOLTEON 135 +#define SPECIES_FLAREON 136 +#define SPECIES_PORYGON 137 +#define SPECIES_OMANYTE 138 +#define SPECIES_OMASTAR 139 +#define SPECIES_KABUTO 140 +#define SPECIES_KABUTOPS 141 +#define SPECIES_AERODACTYL 142 +#define SPECIES_SNORLAX 143 +#define SPECIES_ARTICUNO 144 +#define SPECIES_ZAPDOS 145 +#define SPECIES_MOLTRES 146 +#define SPECIES_DRATINI 147 +#define SPECIES_DRAGONAIR 148 +#define SPECIES_DRAGONITE 149 +#define SPECIES_MEWTWO 150 +#define SPECIES_MEW 151 +#define SPECIES_CHIKORITA 152 +#define SPECIES_BAYLEEF 153 +#define SPECIES_MEGANIUM 154 +#define SPECIES_CYNDAQUIL 155 +#define SPECIES_QUILAVA 156 +#define SPECIES_TYPHLOSION 157 +#define SPECIES_TOTODILE 158 +#define SPECIES_CROCONAW 159 +#define SPECIES_FERALIGATR 160 +#define SPECIES_SENTRET 161 +#define SPECIES_FURRET 162 +#define SPECIES_HOOTHOOT 163 +#define SPECIES_NOCTOWL 164 +#define SPECIES_LEDYBA 165 +#define SPECIES_LEDIAN 166 +#define SPECIES_SPINARAK 167 +#define SPECIES_ARIADOS 168 +#define SPECIES_CROBAT 169 +#define SPECIES_CHINCHOU 170 +#define SPECIES_LANTURN 171 +#define SPECIES_PICHU 172 +#define SPECIES_CLEFFA 173 +#define SPECIES_IGGLYBUFF 174 +#define SPECIES_TOGEPI 175 +#define SPECIES_TOGETIC 176 +#define SPECIES_NATU 177 +#define SPECIES_XATU 178 +#define SPECIES_MAREEP 179 +#define SPECIES_FLAAFFY 180 +#define SPECIES_AMPHAROS 181 +#define SPECIES_BELLOSSOM 182 +#define SPECIES_MARILL 183 +#define SPECIES_AZUMARILL 184 +#define SPECIES_SUDOWOODO 185 +#define SPECIES_POLITOED 186 +#define SPECIES_HOPPIP 187 +#define SPECIES_SKIPLOOM 188 +#define SPECIES_JUMPLUFF 189 +#define SPECIES_AIPOM 190 +#define SPECIES_SUNKERN 191 +#define SPECIES_SUNFLORA 192 +#define SPECIES_YANMA 193 +#define SPECIES_WOOPER 194 +#define SPECIES_QUAGSIRE 195 +#define SPECIES_ESPEON 196 +#define SPECIES_UMBREON 197 +#define SPECIES_MURKROW 198 +#define SPECIES_SLOWKING 199 +#define SPECIES_MISDREAVUS 200 +#define SPECIES_UNOWN 201 +#define SPECIES_WOBBUFFET 202 +#define SPECIES_GIRAFARIG 203 +#define SPECIES_PINECO 204 +#define SPECIES_FORRETRESS 205 +#define SPECIES_DUNSPARCE 206 +#define SPECIES_GLIGAR 207 +#define SPECIES_STEELIX 208 +#define SPECIES_SNUBBULL 209 +#define SPECIES_GRANBULL 210 +#define SPECIES_QWILFISH 211 +#define SPECIES_SCIZOR 212 +#define SPECIES_SHUCKLE 213 +#define SPECIES_HERACROSS 214 +#define SPECIES_SNEASEL 215 +#define SPECIES_TEDDIURSA 216 +#define SPECIES_URSARING 217 +#define SPECIES_SLUGMA 218 +#define SPECIES_MAGCARGO 219 +#define SPECIES_SWINUB 220 +#define SPECIES_PILOSWINE 221 +#define SPECIES_CORSOLA 222 +#define SPECIES_REMORAID 223 +#define SPECIES_OCTILLERY 224 +#define SPECIES_DELIBIRD 225 +#define SPECIES_MANTINE 226 +#define SPECIES_SKARMORY 227 +#define SPECIES_HOUNDOUR 228 +#define SPECIES_HOUNDOOM 229 +#define SPECIES_KINGDRA 230 +#define SPECIES_PHANPY 231 +#define SPECIES_DONPHAN 232 +#define SPECIES_PORYGON2 233 +#define SPECIES_STANTLER 234 +#define SPECIES_SMEARGLE 235 +#define SPECIES_TYROGUE 236 +#define SPECIES_HITMONTOP 237 +#define SPECIES_SMOOCHUM 238 +#define SPECIES_ELEKID 239 +#define SPECIES_MAGBY 240 +#define SPECIES_MILTANK 241 +#define SPECIES_BLISSEY 242 +#define SPECIES_RAIKOU 243 +#define SPECIES_ENTEI 244 +#define SPECIES_SUICUNE 245 +#define SPECIES_LARVITAR 246 +#define SPECIES_PUPITAR 247 +#define SPECIES_TYRANITAR 248 +#define SPECIES_LUGIA 249 +#define SPECIES_HO_OH 250 +#define SPECIES_CELEBI 251 +#define SPECIES_TREECKO 252 +#define SPECIES_GROVYLE 253 +#define SPECIES_SCEPTILE 254 +#define SPECIES_TORCHIC 255 +#define SPECIES_COMBUSKEN 256 +#define SPECIES_BLAZIKEN 257 +#define SPECIES_MUDKIP 258 +#define SPECIES_MARSHTOMP 259 +#define SPECIES_SWAMPERT 260 +#define SPECIES_POOCHYENA 261 +#define SPECIES_MIGHTYENA 262 +#define SPECIES_ZIGZAGOON 263 +#define SPECIES_LINOONE 264 +#define SPECIES_WURMPLE 265 +#define SPECIES_SILCOON 266 +#define SPECIES_BEAUTIFLY 267 +#define SPECIES_CASCOON 268 +#define SPECIES_DUSTOX 269 +#define SPECIES_LOTAD 270 +#define SPECIES_LOMBRE 271 +#define SPECIES_LUDICOLO 272 +#define SPECIES_SEEDOT 273 +#define SPECIES_NUZLEAF 274 +#define SPECIES_SHIFTRY 275 +#define SPECIES_TAILLOW 276 +#define SPECIES_SWELLOW 277 +#define SPECIES_WINGULL 278 +#define SPECIES_PELIPPER 279 +#define SPECIES_RALTS 280 +#define SPECIES_KIRLIA 281 +#define SPECIES_GARDEVOIR 282 +#define SPECIES_SURSKIT 283 +#define SPECIES_MASQUERAIN 284 +#define SPECIES_SHROOMISH 285 +#define SPECIES_BRELOOM 286 +#define SPECIES_SLAKOTH 287 +#define SPECIES_VIGOROTH 288 +#define SPECIES_SLAKING 289 +#define SPECIES_NINCADA 290 +#define SPECIES_NINJASK 291 +#define SPECIES_SHEDINJA 292 +#define SPECIES_WHISMUR 293 +#define SPECIES_LOUDRED 294 +#define SPECIES_EXPLOUD 295 +#define SPECIES_MAKUHITA 296 +#define SPECIES_HARIYAMA 297 +#define SPECIES_AZURILL 298 +#define SPECIES_NOSEPASS 299 +#define SPECIES_SKITTY 300 +#define SPECIES_DELCATTY 301 +#define SPECIES_SABLEYE 302 +#define SPECIES_MAWILE 303 +#define SPECIES_ARON 304 +#define SPECIES_LAIRON 305 +#define SPECIES_AGGRON 306 +#define SPECIES_MEDITITE 307 +#define SPECIES_MEDICHAM 308 +#define SPECIES_ELECTRIKE 309 +#define SPECIES_MANECTRIC 310 +#define SPECIES_PLUSLE 311 +#define SPECIES_MINUN 312 +#define SPECIES_VOLBEAT 313 +#define SPECIES_ILLUMISE 314 +#define SPECIES_ROSELIA 315 +#define SPECIES_GULPIN 316 +#define SPECIES_SWALOT 317 +#define SPECIES_CARVANHA 318 +#define SPECIES_SHARPEDO 319 +#define SPECIES_WAILMER 320 +#define SPECIES_WAILORD 321 +#define SPECIES_NUMEL 322 +#define SPECIES_CAMERUPT 323 +#define SPECIES_TORKOAL 324 +#define SPECIES_SPOINK 325 +#define SPECIES_GRUMPIG 326 +#define SPECIES_SPINDA 327 +#define SPECIES_TRAPINCH 328 +#define SPECIES_VIBRAVA 329 +#define SPECIES_FLYGON 330 +#define SPECIES_CACNEA 331 +#define SPECIES_CACTURNE 332 +#define SPECIES_SWABLU 333 +#define SPECIES_ALTARIA 334 +#define SPECIES_ZANGOOSE 335 +#define SPECIES_SEVIPER 336 +#define SPECIES_LUNATONE 337 +#define SPECIES_SOLROCK 338 +#define SPECIES_BARBOACH 339 +#define SPECIES_WHISCASH 340 +#define SPECIES_CORPHISH 341 +#define SPECIES_CRAWDAUNT 342 +#define SPECIES_BALTOY 343 +#define SPECIES_CLAYDOL 344 +#define SPECIES_LILEEP 345 +#define SPECIES_CRADILY 346 +#define SPECIES_ANORITH 347 +#define SPECIES_ARMALDO 348 +#define SPECIES_FEEBAS 349 +#define SPECIES_MILOTIC 350 +#define SPECIES_CASTFORM SPECIES_CASTFORM_NORMAL +#define SPECIES_CASTFORM_NORMAL 351 +#define SPECIES_KECLEON 352 +#define SPECIES_SHUPPET 353 +#define SPECIES_BANETTE 354 +#define SPECIES_DUSKULL 355 +#define SPECIES_DUSCLOPS 356 +#define SPECIES_TROPIUS 357 +#define SPECIES_CHIMECHO 358 +#define SPECIES_ABSOL 359 +#define SPECIES_WYNAUT 360 +#define SPECIES_SNORUNT 361 +#define SPECIES_GLALIE 362 +#define SPECIES_SPHEAL 363 +#define SPECIES_SEALEO 364 +#define SPECIES_WALREIN 365 +#define SPECIES_CLAMPERL 366 +#define SPECIES_HUNTAIL 367 +#define SPECIES_GOREBYSS 368 +#define SPECIES_RELICANTH 369 +#define SPECIES_LUVDISC 370 +#define SPECIES_BAGON 371 +#define SPECIES_SHELGON 372 +#define SPECIES_SALAMENCE 373 +#define SPECIES_BELDUM 374 +#define SPECIES_METANG 375 +#define SPECIES_METAGROSS 376 +#define SPECIES_REGIROCK 377 +#define SPECIES_REGICE 378 +#define SPECIES_REGISTEEL 379 +#define SPECIES_LATIAS 380 +#define SPECIES_LATIOS 381 +#define SPECIES_KYOGRE 382 +#define SPECIES_GROUDON 383 +#define SPECIES_RAYQUAZA 384 +#define SPECIES_JIRACHI 385 +#define SPECIES_DEOXYS SPECIES_DEOXYS_NORMAL +#define SPECIES_DEOXYS_NORMAL 386 +#define SPECIES_TURTWIG 387 +#define SPECIES_GROTLE 388 +#define SPECIES_TORTERRA 389 +#define SPECIES_CHIMCHAR 390 +#define SPECIES_MONFERNO 391 +#define SPECIES_INFERNAPE 392 +#define SPECIES_PIPLUP 393 +#define SPECIES_PRINPLUP 394 +#define SPECIES_EMPOLEON 395 +#define SPECIES_STARLY 396 +#define SPECIES_STARAVIA 397 +#define SPECIES_STARAPTOR 398 +#define SPECIES_BIDOOF 399 +#define SPECIES_BIBAREL 400 +#define SPECIES_KRICKETOT 401 +#define SPECIES_KRICKETUNE 402 +#define SPECIES_SHINX 403 +#define SPECIES_LUXIO 404 +#define SPECIES_LUXRAY 405 +#define SPECIES_BUDEW 406 +#define SPECIES_ROSERADE 407 +#define SPECIES_CRANIDOS 408 +#define SPECIES_RAMPARDOS 409 +#define SPECIES_SHIELDON 410 +#define SPECIES_BASTIODON 411 +#define SPECIES_BURMY SPECIES_BURMY_PLANT_CLOAK +#define SPECIES_BURMY_PLANT_CLOAK 412 +#define SPECIES_WORMADAM SPECIES_WORMADAM_PLANT_CLOAK +#define SPECIES_WORMADAM_PLANT_CLOAK 413 +#define SPECIES_MOTHIM 414 +#define SPECIES_COMBEE 415 +#define SPECIES_VESPIQUEN 416 +#define SPECIES_PACHIRISU 417 +#define SPECIES_BUIZEL 418 +#define SPECIES_FLOATZEL 419 +#define SPECIES_CHERUBI 420 +#define SPECIES_CHERRIM SPECIES_CHERRIM_OVERCAST +#define SPECIES_CHERRIM_OVERCAST 421 +#define SPECIES_SHELLOS SPECIES_SHELLOS_WEST_SEA +#define SPECIES_SHELLOS_WEST_SEA 422 +#define SPECIES_GASTRODON SPECIES_GASTRODON_WEST_SEA +#define SPECIES_GASTRODON_WEST_SEA 423 +#define SPECIES_AMBIPOM 424 +#define SPECIES_DRIFLOON 425 +#define SPECIES_DRIFBLIM 426 +#define SPECIES_BUNEARY 427 +#define SPECIES_LOPUNNY 428 +#define SPECIES_MISMAGIUS 429 +#define SPECIES_HONCHKROW 430 +#define SPECIES_GLAMEOW 431 +#define SPECIES_PURUGLY 432 +#define SPECIES_CHINGLING 433 +#define SPECIES_STUNKY 434 +#define SPECIES_SKUNTANK 435 +#define SPECIES_BRONZOR 436 +#define SPECIES_BRONZONG 437 +#define SPECIES_BONSLY 438 +#define SPECIES_MIME_JR 439 +#define SPECIES_HAPPINY 440 +#define SPECIES_CHATOT 441 +#define SPECIES_SPIRITOMB 442 +#define SPECIES_GIBLE 443 +#define SPECIES_GABITE 444 +#define SPECIES_GARCHOMP 445 +#define SPECIES_MUNCHLAX 446 +#define SPECIES_RIOLU 447 +#define SPECIES_LUCARIO 448 +#define SPECIES_HIPPOPOTAS 449 +#define SPECIES_HIPPOWDON 450 +#define SPECIES_SKORUPI 451 +#define SPECIES_DRAPION 452 +#define SPECIES_CROAGUNK 453 +#define SPECIES_TOXICROAK 454 +#define SPECIES_CARNIVINE 455 +#define SPECIES_FINNEON 456 +#define SPECIES_LUMINEON 457 +#define SPECIES_MANTYKE 458 +#define SPECIES_SNOVER 459 +#define SPECIES_ABOMASNOW 460 +#define SPECIES_WEAVILE 461 +#define SPECIES_MAGNEZONE 462 +#define SPECIES_LICKILICKY 463 +#define SPECIES_RHYPERIOR 464 +#define SPECIES_TANGROWTH 465 +#define SPECIES_ELECTIVIRE 466 +#define SPECIES_MAGMORTAR 467 +#define SPECIES_TOGEKISS 468 +#define SPECIES_YANMEGA 469 +#define SPECIES_LEAFEON 470 +#define SPECIES_GLACEON 471 +#define SPECIES_GLISCOR 472 +#define SPECIES_MAMOSWINE 473 +#define SPECIES_PORYGON_Z 474 +#define SPECIES_GALLADE 475 +#define SPECIES_PROBOPASS 476 +#define SPECIES_DUSKNOIR 477 +#define SPECIES_FROSLASS 478 +#define SPECIES_ROTOM 479 +#define SPECIES_UXIE 480 +#define SPECIES_MESPRIT 481 +#define SPECIES_AZELF 482 +#define SPECIES_DIALGA 483 +#define SPECIES_PALKIA 484 +#define SPECIES_HEATRAN 485 +#define SPECIES_REGIGIGAS 486 +#define SPECIES_GIRATINA SPECIES_GIRATINA_ALTERED +#define SPECIES_GIRATINA_ALTERED 487 +#define SPECIES_CRESSELIA 488 +#define SPECIES_PHIONE 489 +#define SPECIES_MANAPHY 490 +#define SPECIES_DARKRAI 491 +#define SPECIES_SHAYMIN SPECIES_SHAYMIN_LAND +#define SPECIES_SHAYMIN_LAND 492 +#define SPECIES_ARCEUS SPECIES_ARCEUS_NORMAL +#define SPECIES_ARCEUS_NORMAL 493 +#define SPECIES_VICTINI 494 +#define SPECIES_SNIVY 495 +#define SPECIES_SERVINE 496 +#define SPECIES_SERPERIOR 497 +#define SPECIES_TEPIG 498 +#define SPECIES_PIGNITE 499 +#define SPECIES_EMBOAR 500 +#define SPECIES_OSHAWOTT 501 +#define SPECIES_DEWOTT 502 +#define SPECIES_SAMUROTT 503 +#define SPECIES_PATRAT 504 +#define SPECIES_WATCHOG 505 +#define SPECIES_LILLIPUP 506 +#define SPECIES_HERDIER 507 +#define SPECIES_STOUTLAND 508 +#define SPECIES_PURRLOIN 509 +#define SPECIES_LIEPARD 510 +#define SPECIES_PANSAGE 511 +#define SPECIES_SIMISAGE 512 +#define SPECIES_PANSEAR 513 +#define SPECIES_SIMISEAR 514 +#define SPECIES_PANPOUR 515 +#define SPECIES_SIMIPOUR 516 +#define SPECIES_MUNNA 517 +#define SPECIES_MUSHARNA 518 +#define SPECIES_PIDOVE 519 +#define SPECIES_TRANQUILL 520 +#define SPECIES_UNFEZANT 521 +#define SPECIES_BLITZLE 522 +#define SPECIES_ZEBSTRIKA 523 +#define SPECIES_ROGGENROLA 524 +#define SPECIES_BOLDORE 525 +#define SPECIES_GIGALITH 526 +#define SPECIES_WOOBAT 527 +#define SPECIES_SWOOBAT 528 +#define SPECIES_DRILBUR 529 +#define SPECIES_EXCADRILL 530 +#define SPECIES_AUDINO 531 +#define SPECIES_TIMBURR 532 +#define SPECIES_GURDURR 533 +#define SPECIES_CONKELDURR 534 +#define SPECIES_TYMPOLE 535 +#define SPECIES_PALPITOAD 536 +#define SPECIES_SEISMITOAD 537 +#define SPECIES_THROH 538 +#define SPECIES_SAWK 539 +#define SPECIES_SEWADDLE 540 +#define SPECIES_SWADLOON 541 +#define SPECIES_LEAVANNY 542 +#define SPECIES_VENIPEDE 543 +#define SPECIES_WHIRLIPEDE 544 +#define SPECIES_SCOLIPEDE 545 +#define SPECIES_COTTONEE 546 +#define SPECIES_WHIMSICOTT 547 +#define SPECIES_PETILIL 548 +#define SPECIES_LILLIGANT 549 +#define SPECIES_BASCULIN SPECIES_BASCULIN_RED_STRIPED +#define SPECIES_BASCULIN_RED_STRIPED 550 +#define SPECIES_SANDILE 551 +#define SPECIES_KROKOROK 552 +#define SPECIES_KROOKODILE 553 +#define SPECIES_DARUMAKA 554 +#define SPECIES_DARMANITAN SPECIES_DARMANITAN_STANDARD_MODE +#define SPECIES_DARMANITAN_STANDARD_MODE 555 +#define SPECIES_MARACTUS 556 +#define SPECIES_DWEBBLE 557 +#define SPECIES_CRUSTLE 558 +#define SPECIES_SCRAGGY 559 +#define SPECIES_SCRAFTY 560 +#define SPECIES_SIGILYPH 561 +#define SPECIES_YAMASK 562 +#define SPECIES_COFAGRIGUS 563 +#define SPECIES_TIRTOUGA 564 +#define SPECIES_CARRACOSTA 565 +#define SPECIES_ARCHEN 566 +#define SPECIES_ARCHEOPS 567 +#define SPECIES_TRUBBISH 568 +#define SPECIES_GARBODOR 569 +#define SPECIES_ZORUA 570 +#define SPECIES_ZOROARK 571 +#define SPECIES_MINCCINO 572 +#define SPECIES_CINCCINO 573 +#define SPECIES_GOTHITA 574 +#define SPECIES_GOTHORITA 575 +#define SPECIES_GOTHITELLE 576 +#define SPECIES_SOLOSIS 577 +#define SPECIES_DUOSION 578 +#define SPECIES_REUNICLUS 579 +#define SPECIES_DUCKLETT 580 +#define SPECIES_SWANNA 581 +#define SPECIES_VANILLITE 582 +#define SPECIES_VANILLISH 583 +#define SPECIES_VANILLUXE 584 +#define SPECIES_DEERLING SPECIES_DEERLING_SPRING +#define SPECIES_DEERLING_SPRING 585 +#define SPECIES_SAWSBUCK SPECIES_SAWSBUCK_SPRING +#define SPECIES_SAWSBUCK_SPRING 586 +#define SPECIES_EMOLGA 587 +#define SPECIES_KARRABLAST 588 +#define SPECIES_ESCAVALIER 589 +#define SPECIES_FOONGUS 590 +#define SPECIES_AMOONGUSS 591 +#define SPECIES_FRILLISH 592 +#define SPECIES_JELLICENT 593 +#define SPECIES_ALOMOMOLA 594 +#define SPECIES_JOLTIK 595 +#define SPECIES_GALVANTULA 596 +#define SPECIES_FERROSEED 597 +#define SPECIES_FERROTHORN 598 +#define SPECIES_KLINK 599 +#define SPECIES_KLANG 600 +#define SPECIES_KLINKLANG 601 +#define SPECIES_TYNAMO 602 +#define SPECIES_EELEKTRIK 603 +#define SPECIES_EELEKTROSS 604 +#define SPECIES_ELGYEM 605 +#define SPECIES_BEHEEYEM 606 +#define SPECIES_LITWICK 607 +#define SPECIES_LAMPENT 608 +#define SPECIES_CHANDELURE 609 +#define SPECIES_AXEW 610 +#define SPECIES_FRAXURE 611 +#define SPECIES_HAXORUS 612 +#define SPECIES_CUBCHOO 613 +#define SPECIES_BEARTIC 614 +#define SPECIES_CRYOGONAL 615 +#define SPECIES_SHELMET 616 +#define SPECIES_ACCELGOR 617 +#define SPECIES_STUNFISK 618 +#define SPECIES_MIENFOO 619 +#define SPECIES_MIENSHAO 620 +#define SPECIES_DRUDDIGON 621 +#define SPECIES_GOLETT 622 +#define SPECIES_GOLURK 623 +#define SPECIES_PAWNIARD 624 +#define SPECIES_BISHARP 625 +#define SPECIES_BOUFFALANT 626 +#define SPECIES_RUFFLET 627 +#define SPECIES_BRAVIARY 628 +#define SPECIES_VULLABY 629 +#define SPECIES_MANDIBUZZ 630 +#define SPECIES_HEATMOR 631 +#define SPECIES_DURANT 632 +#define SPECIES_DEINO 633 +#define SPECIES_ZWEILOUS 634 +#define SPECIES_HYDREIGON 635 +#define SPECIES_LARVESTA 636 +#define SPECIES_VOLCARONA 637 +#define SPECIES_COBALION 638 +#define SPECIES_TERRAKION 639 +#define SPECIES_VIRIZION 640 +#define SPECIES_TORNADUS SPECIES_TORNADUS_INCARNATE +#define SPECIES_TORNADUS_INCARNATE 641 +#define SPECIES_THUNDURUS SPECIES_THUNDURUS_INCARNATE +#define SPECIES_THUNDURUS_INCARNATE 642 +#define SPECIES_RESHIRAM 643 +#define SPECIES_ZEKROM 644 +#define SPECIES_LANDORUS SPECIES_LANDORUS_INCARNATE +#define SPECIES_LANDORUS_INCARNATE 645 +#define SPECIES_KYUREM 646 +#define SPECIES_KELDEO SPECIES_KELDEO_ORDINARY +#define SPECIES_KELDEO_ORDINARY 647 +#define SPECIES_MELOETTA SPECIES_MELOETTA_ARIA +#define SPECIES_MELOETTA_ARIA 648 +#define SPECIES_GENESECT 649 +#define SPECIES_CHESPIN 650 +#define SPECIES_QUILLADIN 651 +#define SPECIES_CHESNAUGHT 652 +#define SPECIES_FENNEKIN 653 +#define SPECIES_BRAIXEN 654 +#define SPECIES_DELPHOX 655 +#define SPECIES_FROAKIE 656 +#define SPECIES_FROGADIER 657 +#define SPECIES_GRENINJA 658 +#define SPECIES_BUNNELBY 659 +#define SPECIES_DIGGERSBY 660 +#define SPECIES_FLETCHLING 661 +#define SPECIES_FLETCHINDER 662 +#define SPECIES_TALONFLAME 663 +#define SPECIES_SCATTERBUG 664 +#define SPECIES_SPEWPA 665 +#define SPECIES_VIVILLON SPECIES_VIVILLON_ICY_SNOW +#define SPECIES_VIVILLON_ICY_SNOW 666 +#define SPECIES_LITLEO 667 +#define SPECIES_PYROAR 668 +#define SPECIES_FLABEBE SPECIES_FLABEBE_RED_FLOWER +#define SPECIES_FLABEBE_RED_FLOWER 669 +#define SPECIES_FLOETTE SPECIES_FLOETTE_RED_FLOWER +#define SPECIES_FLOETTE_RED_FLOWER 670 +#define SPECIES_FLORGES SPECIES_FLORGES_RED_FLOWER +#define SPECIES_FLORGES_RED_FLOWER 671 +#define SPECIES_SKIDDO 672 +#define SPECIES_GOGOAT 673 +#define SPECIES_PANCHAM 674 +#define SPECIES_PANGORO 675 +#define SPECIES_FURFROU SPECIES_FURFROU_NATURAL +#define SPECIES_FURFROU_NATURAL 676 +#define SPECIES_ESPURR 677 +#define SPECIES_MEOWSTIC SPECIES_MEOWSTIC_MALE +#define SPECIES_MEOWSTIC_MALE 678 +#define SPECIES_HONEDGE 679 +#define SPECIES_DOUBLADE 680 +#define SPECIES_AEGISLASH SPECIES_AEGISLASH_SHIELD +#define SPECIES_AEGISLASH_SHIELD 681 +#define SPECIES_SPRITZEE 682 +#define SPECIES_AROMATISSE 683 +#define SPECIES_SWIRLIX 684 +#define SPECIES_SLURPUFF 685 +#define SPECIES_INKAY 686 +#define SPECIES_MALAMAR 687 +#define SPECIES_BINACLE 688 +#define SPECIES_BARBARACLE 689 +#define SPECIES_SKRELP 690 +#define SPECIES_DRAGALGE 691 +#define SPECIES_CLAUNCHER 692 +#define SPECIES_CLAWITZER 693 +#define SPECIES_HELIOPTILE 694 +#define SPECIES_HELIOLISK 695 +#define SPECIES_TYRUNT 696 +#define SPECIES_TYRANTRUM 697 +#define SPECIES_AMAURA 698 +#define SPECIES_AURORUS 699 +#define SPECIES_SYLVEON 700 +#define SPECIES_HAWLUCHA 701 +#define SPECIES_DEDENNE 702 +#define SPECIES_CARBINK 703 +#define SPECIES_GOOMY 704 +#define SPECIES_SLIGGOO 705 +#define SPECIES_GOODRA 706 +#define SPECIES_KLEFKI 707 +#define SPECIES_PHANTUMP 708 +#define SPECIES_TREVENANT 709 +#define SPECIES_PUMPKABOO SPECIES_PUMPKABOO_AVERAGE +#define SPECIES_PUMPKABOO_AVERAGE 710 +#define SPECIES_GOURGEIST SPECIES_GOURGEIST_AVERAGE +#define SPECIES_GOURGEIST_AVERAGE 711 +#define SPECIES_BERGMITE 712 +#define SPECIES_AVALUGG 713 +#define SPECIES_NOIBAT 714 +#define SPECIES_NOIVERN 715 +#define SPECIES_XERNEAS SPECIES_XERNEAS_NEUTRAL +#define SPECIES_XERNEAS_NEUTRAL 716 +#define SPECIES_YVELTAL 717 +#define SPECIES_ZYGARDE SPECIES_ZYGARDE_50 +#define SPECIES_ZYGARDE_50 SPECIES_ZYGARDE_50_AURA_BREAK +#define SPECIES_ZYGARDE_50_AURA_BREAK 718 +#define SPECIES_DIANCIE 719 +#define SPECIES_HOOPA SPECIES_HOOPA_CONFINED +#define SPECIES_HOOPA_CONFINED 720 +#define SPECIES_VOLCANION 721 +#define SPECIES_ROWLET 722 +#define SPECIES_DARTRIX 723 +#define SPECIES_DECIDUEYE 724 +#define SPECIES_LITTEN 725 +#define SPECIES_TORRACAT 726 +#define SPECIES_INCINEROAR 727 +#define SPECIES_POPPLIO 728 +#define SPECIES_BRIONNE 729 +#define SPECIES_PRIMARINA 730 +#define SPECIES_PIKIPEK 731 +#define SPECIES_TRUMBEAK 732 +#define SPECIES_TOUCANNON 733 +#define SPECIES_YUNGOOS 734 +#define SPECIES_GUMSHOOS 735 +#define SPECIES_GRUBBIN 736 +#define SPECIES_CHARJABUG 737 +#define SPECIES_VIKAVOLT 738 +#define SPECIES_CRABRAWLER 739 +#define SPECIES_CRABOMINABLE 740 +#define SPECIES_ORICORIO SPECIES_ORICORIO_BAILE +#define SPECIES_ORICORIO_BAILE 741 +#define SPECIES_CUTIEFLY 742 +#define SPECIES_RIBOMBEE 743 +#define SPECIES_ROCKRUFF 744 +#define SPECIES_LYCANROC SPECIES_LYCANROC_MIDDAY +#define SPECIES_LYCANROC_MIDDAY 745 +#define SPECIES_WISHIWASHI SPECIES_WISHIWASHI_SOLO +#define SPECIES_WISHIWASHI_SOLO 746 +#define SPECIES_MAREANIE 747 +#define SPECIES_TOXAPEX 748 +#define SPECIES_MUDBRAY 749 +#define SPECIES_MUDSDALE 750 +#define SPECIES_DEWPIDER 751 +#define SPECIES_ARAQUANID 752 +#define SPECIES_FOMANTIS 753 +#define SPECIES_LURANTIS 754 +#define SPECIES_MORELULL 755 +#define SPECIES_SHIINOTIC 756 +#define SPECIES_SALANDIT 757 +#define SPECIES_SALAZZLE 758 +#define SPECIES_STUFFUL 759 +#define SPECIES_BEWEAR 760 +#define SPECIES_BOUNSWEET 761 +#define SPECIES_STEENEE 762 +#define SPECIES_TSAREENA 763 +#define SPECIES_COMFEY 764 +#define SPECIES_ORANGURU 765 +#define SPECIES_PASSIMIAN 766 +#define SPECIES_WIMPOD 767 +#define SPECIES_GOLISOPOD 768 +#define SPECIES_SANDYGAST 769 +#define SPECIES_PALOSSAND 770 +#define SPECIES_PYUKUMUKU 771 +#define SPECIES_TYPE_NULL 772 +#define SPECIES_SILVALLY SPECIES_SILVALLY_NORMAL +#define SPECIES_SILVALLY_NORMAL 773 +#define SPECIES_MINIOR SPECIES_MINIOR_METEOR +#define SPECIES_MINIOR_METEOR SPECIES_MINIOR_METEOR_RED +#define SPECIES_MINIOR_METEOR_RED 774 +#define SPECIES_KOMALA 775 +#define SPECIES_TURTONATOR 776 +#define SPECIES_TOGEDEMARU 777 +#define SPECIES_MIMIKYU SPECIES_MIMIKYU_DISGUISED +#define SPECIES_MIMIKYU_DISGUISED 778 +#define SPECIES_BRUXISH 779 +#define SPECIES_DRAMPA 780 +#define SPECIES_DHELMISE 781 +#define SPECIES_JANGMO_O 782 +#define SPECIES_HAKAMO_O 783 +#define SPECIES_KOMMO_O 784 +#define SPECIES_TAPU_KOKO 785 +#define SPECIES_TAPU_LELE 786 +#define SPECIES_TAPU_BULU 787 +#define SPECIES_TAPU_FINI 788 +#define SPECIES_COSMOG 789 +#define SPECIES_COSMOEM 790 +#define SPECIES_SOLGALEO 791 +#define SPECIES_LUNALA 792 +#define SPECIES_NIHILEGO 793 +#define SPECIES_BUZZWOLE 794 +#define SPECIES_PHEROMOSA 795 +#define SPECIES_XURKITREE 796 +#define SPECIES_CELESTEELA 797 +#define SPECIES_KARTANA 798 +#define SPECIES_GUZZLORD 799 +#define SPECIES_NECROZMA 800 +#define SPECIES_MAGEARNA 801 +#define SPECIES_MARSHADOW 802 +#define SPECIES_POIPOLE 803 +#define SPECIES_NAGANADEL 804 +#define SPECIES_STAKATAKA 805 +#define SPECIES_BLACEPHALON 806 +#define SPECIES_ZERAORA 807 +#define SPECIES_MELTAN 808 +#define SPECIES_MELMETAL 809 +#define SPECIES_GROOKEY 810 +#define SPECIES_THWACKEY 811 +#define SPECIES_RILLABOOM 812 +#define SPECIES_SCORBUNNY 813 +#define SPECIES_RABOOT 814 +#define SPECIES_CINDERACE 815 +#define SPECIES_SOBBLE 816 +#define SPECIES_DRIZZILE 817 +#define SPECIES_INTELEON 818 +#define SPECIES_SKWOVET 819 +#define SPECIES_GREEDENT 820 +#define SPECIES_ROOKIDEE 821 +#define SPECIES_CORVISQUIRE 822 +#define SPECIES_CORVIKNIGHT 823 +#define SPECIES_BLIPBUG 824 +#define SPECIES_DOTTLER 825 +#define SPECIES_ORBEETLE 826 +#define SPECIES_NICKIT 827 +#define SPECIES_THIEVUL 828 +#define SPECIES_GOSSIFLEUR 829 +#define SPECIES_ELDEGOSS 830 +#define SPECIES_WOOLOO 831 +#define SPECIES_DUBWOOL 832 +#define SPECIES_CHEWTLE 833 +#define SPECIES_DREDNAW 834 +#define SPECIES_YAMPER 835 +#define SPECIES_BOLTUND 836 +#define SPECIES_ROLYCOLY 837 +#define SPECIES_CARKOL 838 +#define SPECIES_COALOSSAL 839 +#define SPECIES_APPLIN 840 +#define SPECIES_FLAPPLE 841 +#define SPECIES_APPLETUN 842 +#define SPECIES_SILICOBRA 843 +#define SPECIES_SANDACONDA 844 +#define SPECIES_CRAMORANT 845 +#define SPECIES_ARROKUDA 846 +#define SPECIES_BARRASKEWDA 847 +#define SPECIES_TOXEL 848 +#define SPECIES_TOXTRICITY SPECIES_TOXTRICITY_AMPED +#define SPECIES_TOXTRICITY_AMPED 849 +#define SPECIES_SIZZLIPEDE 850 +#define SPECIES_CENTISKORCH 851 +#define SPECIES_CLOBBOPUS 852 +#define SPECIES_GRAPPLOCT 853 +#define SPECIES_SINISTEA SPECIES_SINISTEA_PHONY +#define SPECIES_SINISTEA_PHONY 854 +#define SPECIES_POLTEAGEIST SPECIES_POLTEAGEIST_PHONY +#define SPECIES_POLTEAGEIST_PHONY 855 +#define SPECIES_HATENNA 856 +#define SPECIES_HATTREM 857 +#define SPECIES_HATTERENE 858 +#define SPECIES_IMPIDIMP 859 +#define SPECIES_MORGREM 860 +#define SPECIES_GRIMMSNARL 861 +#define SPECIES_OBSTAGOON 862 +#define SPECIES_PERRSERKER 863 +#define SPECIES_CURSOLA 864 +#define SPECIES_SIRFETCHD 865 +#define SPECIES_MR_RIME 866 +#define SPECIES_RUNERIGUS 867 +#define SPECIES_MILCERY 868 +#define SPECIES_ALCREMIE SPECIES_ALCREMIE_STRAWBERRY +#define SPECIES_ALCREMIE_STRAWBERRY SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM +#define SPECIES_ALCREMIE_VANILLA_CREAM SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM +#define SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM 869 +#define SPECIES_FALINKS 870 +#define SPECIES_PINCURCHIN 871 +#define SPECIES_SNOM 872 +#define SPECIES_FROSMOTH 873 +#define SPECIES_STONJOURNER 874 +#define SPECIES_EISCUE SPECIES_EISCUE_ICE_FACE +#define SPECIES_EISCUE_ICE_FACE 875 +#define SPECIES_INDEEDEE SPECIES_INDEEDEE_MALE +#define SPECIES_INDEEDEE_MALE 876 +#define SPECIES_MORPEKO SPECIES_MORPEKO_FULL_BELLY +#define SPECIES_MORPEKO_FULL_BELLY 877 +#define SPECIES_CUFANT 878 +#define SPECIES_COPPERAJAH 879 +#define SPECIES_DRACOZOLT 880 +#define SPECIES_ARCTOZOLT 881 +#define SPECIES_DRACOVISH 882 +#define SPECIES_ARCTOVISH 883 +#define SPECIES_DURALUDON 884 +#define SPECIES_DREEPY 885 +#define SPECIES_DRAKLOAK 886 +#define SPECIES_DRAGAPULT 887 +#define SPECIES_ZACIAN SPECIES_ZACIAN_HERO_OF_MANY_BATTLES +#define SPECIES_ZACIAN_HERO_OF_MANY_BATTLES 888 +#define SPECIES_ZAMAZENTA SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES +#define SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES 889 +#define SPECIES_ETERNATUS 890 +#define SPECIES_KUBFU 891 +#define SPECIES_URSHIFU SPECIES_URSHIFU_SINGLE_STRIKE_STYLE +#define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE 892 +#define SPECIES_ZARUDE 893 +#define SPECIES_REGIELEKI 894 +#define SPECIES_REGIDRAGO 895 +#define SPECIES_GLASTRIER 896 +#define SPECIES_SPECTRIER 897 +#define SPECIES_CALYREX 898 +#define SPECIES_WYRDEER 899 +#define SPECIES_KLEAVOR 900 +#define SPECIES_URSALUNA 901 +#define SPECIES_BASCULEGION SPECIES_BASCULEGION_MALE +#define SPECIES_BASCULEGION_MALE 902 +#define SPECIES_SNEASLER 903 +#define SPECIES_OVERQWIL 904 +#define SPECIES_ENAMORUS SPECIES_ENAMORUS_INCARNATE +#define SPECIES_ENAMORUS_INCARNATE 905 + +#define FORMS_START SPECIES_ENAMORUS_INCARNATE // Megas -#define SPECIES_VENUSAUR_MEGA FORMS_START + 1 -#define SPECIES_CHARIZARD_MEGA_X FORMS_START + 2 -#define SPECIES_CHARIZARD_MEGA_Y FORMS_START + 3 -#define SPECIES_BLASTOISE_MEGA FORMS_START + 4 -#define SPECIES_BEEDRILL_MEGA FORMS_START + 5 -#define SPECIES_PIDGEOT_MEGA FORMS_START + 6 -#define SPECIES_ALAKAZAM_MEGA FORMS_START + 7 -#define SPECIES_SLOWBRO_MEGA FORMS_START + 8 -#define SPECIES_GENGAR_MEGA FORMS_START + 9 -#define SPECIES_KANGASKHAN_MEGA FORMS_START + 10 -#define SPECIES_PINSIR_MEGA FORMS_START + 11 -#define SPECIES_GYARADOS_MEGA FORMS_START + 12 -#define SPECIES_AERODACTYL_MEGA FORMS_START + 13 -#define SPECIES_MEWTWO_MEGA_X FORMS_START + 14 -#define SPECIES_MEWTWO_MEGA_Y FORMS_START + 15 -#define SPECIES_AMPHAROS_MEGA FORMS_START + 16 -#define SPECIES_STEELIX_MEGA FORMS_START + 17 -#define SPECIES_SCIZOR_MEGA FORMS_START + 18 -#define SPECIES_HERACROSS_MEGA FORMS_START + 19 -#define SPECIES_HOUNDOOM_MEGA FORMS_START + 20 -#define SPECIES_TYRANITAR_MEGA FORMS_START + 21 -#define SPECIES_SCEPTILE_MEGA FORMS_START + 22 -#define SPECIES_BLAZIKEN_MEGA FORMS_START + 23 -#define SPECIES_SWAMPERT_MEGA FORMS_START + 24 -#define SPECIES_GARDEVOIR_MEGA FORMS_START + 25 -#define SPECIES_SABLEYE_MEGA FORMS_START + 26 -#define SPECIES_MAWILE_MEGA FORMS_START + 27 -#define SPECIES_AGGRON_MEGA FORMS_START + 28 -#define SPECIES_MEDICHAM_MEGA FORMS_START + 29 -#define SPECIES_MANECTRIC_MEGA FORMS_START + 30 -#define SPECIES_SHARPEDO_MEGA FORMS_START + 31 -#define SPECIES_CAMERUPT_MEGA FORMS_START + 32 -#define SPECIES_ALTARIA_MEGA FORMS_START + 33 -#define SPECIES_BANETTE_MEGA FORMS_START + 34 -#define SPECIES_ABSOL_MEGA FORMS_START + 35 -#define SPECIES_GLALIE_MEGA FORMS_START + 36 -#define SPECIES_SALAMENCE_MEGA FORMS_START + 37 -#define SPECIES_METAGROSS_MEGA FORMS_START + 38 -#define SPECIES_LATIAS_MEGA FORMS_START + 39 -#define SPECIES_LATIOS_MEGA FORMS_START + 40 -#define SPECIES_LOPUNNY_MEGA FORMS_START + 41 -#define SPECIES_GARCHOMP_MEGA FORMS_START + 42 -#define SPECIES_LUCARIO_MEGA FORMS_START + 43 -#define SPECIES_ABOMASNOW_MEGA FORMS_START + 44 -#define SPECIES_GALLADE_MEGA FORMS_START + 45 -#define SPECIES_AUDINO_MEGA FORMS_START + 46 -#define SPECIES_DIANCIE_MEGA FORMS_START + 47 +#define SPECIES_VENUSAUR_MEGA FORMS_START + 1 +#define SPECIES_CHARIZARD_MEGA_X FORMS_START + 2 +#define SPECIES_CHARIZARD_MEGA_Y FORMS_START + 3 +#define SPECIES_BLASTOISE_MEGA FORMS_START + 4 +#define SPECIES_BEEDRILL_MEGA FORMS_START + 5 +#define SPECIES_PIDGEOT_MEGA FORMS_START + 6 +#define SPECIES_ALAKAZAM_MEGA FORMS_START + 7 +#define SPECIES_SLOWBRO_MEGA FORMS_START + 8 +#define SPECIES_GENGAR_MEGA FORMS_START + 9 +#define SPECIES_KANGASKHAN_MEGA FORMS_START + 10 +#define SPECIES_PINSIR_MEGA FORMS_START + 11 +#define SPECIES_GYARADOS_MEGA FORMS_START + 12 +#define SPECIES_AERODACTYL_MEGA FORMS_START + 13 +#define SPECIES_MEWTWO_MEGA_X FORMS_START + 14 +#define SPECIES_MEWTWO_MEGA_Y FORMS_START + 15 +#define SPECIES_AMPHAROS_MEGA FORMS_START + 16 +#define SPECIES_STEELIX_MEGA FORMS_START + 17 +#define SPECIES_SCIZOR_MEGA FORMS_START + 18 +#define SPECIES_HERACROSS_MEGA FORMS_START + 19 +#define SPECIES_HOUNDOOM_MEGA FORMS_START + 20 +#define SPECIES_TYRANITAR_MEGA FORMS_START + 21 +#define SPECIES_SCEPTILE_MEGA FORMS_START + 22 +#define SPECIES_BLAZIKEN_MEGA FORMS_START + 23 +#define SPECIES_SWAMPERT_MEGA FORMS_START + 24 +#define SPECIES_GARDEVOIR_MEGA FORMS_START + 25 +#define SPECIES_SABLEYE_MEGA FORMS_START + 26 +#define SPECIES_MAWILE_MEGA FORMS_START + 27 +#define SPECIES_AGGRON_MEGA FORMS_START + 28 +#define SPECIES_MEDICHAM_MEGA FORMS_START + 29 +#define SPECIES_MANECTRIC_MEGA FORMS_START + 30 +#define SPECIES_SHARPEDO_MEGA FORMS_START + 31 +#define SPECIES_CAMERUPT_MEGA FORMS_START + 32 +#define SPECIES_ALTARIA_MEGA FORMS_START + 33 +#define SPECIES_BANETTE_MEGA FORMS_START + 34 +#define SPECIES_ABSOL_MEGA FORMS_START + 35 +#define SPECIES_GLALIE_MEGA FORMS_START + 36 +#define SPECIES_SALAMENCE_MEGA FORMS_START + 37 +#define SPECIES_METAGROSS_MEGA FORMS_START + 38 +#define SPECIES_LATIAS_MEGA FORMS_START + 39 +#define SPECIES_LATIOS_MEGA FORMS_START + 40 +#define SPECIES_LOPUNNY_MEGA FORMS_START + 41 +#define SPECIES_GARCHOMP_MEGA FORMS_START + 42 +#define SPECIES_LUCARIO_MEGA FORMS_START + 43 +#define SPECIES_ABOMASNOW_MEGA FORMS_START + 44 +#define SPECIES_GALLADE_MEGA FORMS_START + 45 +#define SPECIES_AUDINO_MEGA FORMS_START + 46 +#define SPECIES_DIANCIE_MEGA FORMS_START + 47 // Special Mega + Primals -#define SPECIES_RAYQUAZA_MEGA FORMS_START + 48 -#define SPECIES_KYOGRE_PRIMAL FORMS_START + 49 -#define SPECIES_GROUDON_PRIMAL FORMS_START + 50 +#define SPECIES_RAYQUAZA_MEGA FORMS_START + 48 +#define SPECIES_KYOGRE_PRIMAL FORMS_START + 49 +#define SPECIES_GROUDON_PRIMAL FORMS_START + 50 // Alolan Forms -#define SPECIES_RATTATA_ALOLAN FORMS_START + 51 -#define SPECIES_RATICATE_ALOLAN FORMS_START + 52 -#define SPECIES_RAICHU_ALOLAN FORMS_START + 53 -#define SPECIES_SANDSHREW_ALOLAN FORMS_START + 54 -#define SPECIES_SANDSLASH_ALOLAN FORMS_START + 55 -#define SPECIES_VULPIX_ALOLAN FORMS_START + 56 -#define SPECIES_NINETALES_ALOLAN FORMS_START + 57 -#define SPECIES_DIGLETT_ALOLAN FORMS_START + 58 -#define SPECIES_DUGTRIO_ALOLAN FORMS_START + 59 -#define SPECIES_MEOWTH_ALOLAN FORMS_START + 60 -#define SPECIES_PERSIAN_ALOLAN FORMS_START + 61 -#define SPECIES_GEODUDE_ALOLAN FORMS_START + 62 -#define SPECIES_GRAVELER_ALOLAN FORMS_START + 63 -#define SPECIES_GOLEM_ALOLAN FORMS_START + 64 -#define SPECIES_GRIMER_ALOLAN FORMS_START + 65 -#define SPECIES_MUK_ALOLAN FORMS_START + 66 -#define SPECIES_EXEGGUTOR_ALOLAN FORMS_START + 67 -#define SPECIES_MAROWAK_ALOLAN FORMS_START + 68 +#define SPECIES_RATTATA_ALOLAN FORMS_START + 51 +#define SPECIES_RATICATE_ALOLAN FORMS_START + 52 +#define SPECIES_RAICHU_ALOLAN FORMS_START + 53 +#define SPECIES_SANDSHREW_ALOLAN FORMS_START + 54 +#define SPECIES_SANDSLASH_ALOLAN FORMS_START + 55 +#define SPECIES_VULPIX_ALOLAN FORMS_START + 56 +#define SPECIES_NINETALES_ALOLAN FORMS_START + 57 +#define SPECIES_DIGLETT_ALOLAN FORMS_START + 58 +#define SPECIES_DUGTRIO_ALOLAN FORMS_START + 59 +#define SPECIES_MEOWTH_ALOLAN FORMS_START + 60 +#define SPECIES_PERSIAN_ALOLAN FORMS_START + 61 +#define SPECIES_GEODUDE_ALOLAN FORMS_START + 62 +#define SPECIES_GRAVELER_ALOLAN FORMS_START + 63 +#define SPECIES_GOLEM_ALOLAN FORMS_START + 64 +#define SPECIES_GRIMER_ALOLAN FORMS_START + 65 +#define SPECIES_MUK_ALOLAN FORMS_START + 66 +#define SPECIES_EXEGGUTOR_ALOLAN FORMS_START + 67 +#define SPECIES_MAROWAK_ALOLAN FORMS_START + 68 // Galarian Forms -#define SPECIES_MEOWTH_GALARIAN FORMS_START + 69 -#define SPECIES_PONYTA_GALARIAN FORMS_START + 70 -#define SPECIES_RAPIDASH_GALARIAN FORMS_START + 71 -#define SPECIES_SLOWPOKE_GALARIAN FORMS_START + 72 -#define SPECIES_SLOWBRO_GALARIAN FORMS_START + 73 -#define SPECIES_FARFETCHD_GALARIAN FORMS_START + 74 -#define SPECIES_WEEZING_GALARIAN FORMS_START + 75 -#define SPECIES_MR_MIME_GALARIAN FORMS_START + 76 -#define SPECIES_ARTICUNO_GALARIAN FORMS_START + 77 -#define SPECIES_ZAPDOS_GALARIAN FORMS_START + 78 -#define SPECIES_MOLTRES_GALARIAN FORMS_START + 79 -#define SPECIES_SLOWKING_GALARIAN FORMS_START + 80 -#define SPECIES_CORSOLA_GALARIAN FORMS_START + 81 -#define SPECIES_ZIGZAGOON_GALARIAN FORMS_START + 82 -#define SPECIES_LINOONE_GALARIAN FORMS_START + 83 -#define SPECIES_DARUMAKA_GALARIAN FORMS_START + 84 -#define SPECIES_DARMANITAN_GALARIAN FORMS_START + 85 -#define SPECIES_YAMASK_GALARIAN FORMS_START + 86 -#define SPECIES_STUNFISK_GALARIAN FORMS_START + 87 +#define SPECIES_MEOWTH_GALARIAN FORMS_START + 69 +#define SPECIES_PONYTA_GALARIAN FORMS_START + 70 +#define SPECIES_RAPIDASH_GALARIAN FORMS_START + 71 +#define SPECIES_SLOWPOKE_GALARIAN FORMS_START + 72 +#define SPECIES_SLOWBRO_GALARIAN FORMS_START + 73 +#define SPECIES_FARFETCHD_GALARIAN FORMS_START + 74 +#define SPECIES_WEEZING_GALARIAN FORMS_START + 75 +#define SPECIES_MR_MIME_GALARIAN FORMS_START + 76 +#define SPECIES_ARTICUNO_GALARIAN FORMS_START + 77 +#define SPECIES_ZAPDOS_GALARIAN FORMS_START + 78 +#define SPECIES_MOLTRES_GALARIAN FORMS_START + 79 +#define SPECIES_SLOWKING_GALARIAN FORMS_START + 80 +#define SPECIES_CORSOLA_GALARIAN FORMS_START + 81 +#define SPECIES_ZIGZAGOON_GALARIAN FORMS_START + 82 +#define SPECIES_LINOONE_GALARIAN FORMS_START + 83 +#define SPECIES_DARUMAKA_GALARIAN FORMS_START + 84 +#define SPECIES_DARMANITAN_GALARIAN SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE +#define SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE FORMS_START + 85 +#define SPECIES_YAMASK_GALARIAN FORMS_START + 86 +#define SPECIES_STUNFISK_GALARIAN FORMS_START + 87 //Hisuian Forms -#define SPECIES_GROWLITHE_HISUIAN FORMS_START + 88 -#define SPECIES_ARCANINE_HISUIAN FORMS_START + 89 -#define SPECIES_VOLTORB_HISUIAN FORMS_START + 90 -#define SPECIES_ELECTRODE_HISUIAN FORMS_START + 91 -#define SPECIES_TYPHLOSION_HISUIAN FORMS_START + 92 -#define SPECIES_QWILFISH_HISUIAN FORMS_START + 93 -#define SPECIES_SNEASEL_HISUIAN FORMS_START + 94 -#define SPECIES_SAMUROTT_HISUIAN FORMS_START + 95 -#define SPECIES_LILLIGANT_HISUIAN FORMS_START + 96 -#define SPECIES_ZORUA_HISUIAN FORMS_START + 97 -#define SPECIES_ZOROARK_HISUIAN FORMS_START + 98 -#define SPECIES_BRAVIARY_HISUIAN FORMS_START + 99 -#define SPECIES_SLIGGOO_HISUIAN FORMS_START + 100 -#define SPECIES_GOODRA_HISUIAN FORMS_START + 101 -#define SPECIES_AVALUGG_HISUIAN FORMS_START + 102 -#define SPECIES_DECIDUEYE_HISUIAN FORMS_START + 103 +#define SPECIES_GROWLITHE_HISUIAN FORMS_START + 88 +#define SPECIES_ARCANINE_HISUIAN FORMS_START + 89 +#define SPECIES_VOLTORB_HISUIAN FORMS_START + 90 +#define SPECIES_ELECTRODE_HISUIAN FORMS_START + 91 +#define SPECIES_TYPHLOSION_HISUIAN FORMS_START + 92 +#define SPECIES_QWILFISH_HISUIAN FORMS_START + 93 +#define SPECIES_SNEASEL_HISUIAN FORMS_START + 94 +#define SPECIES_SAMUROTT_HISUIAN FORMS_START + 95 +#define SPECIES_LILLIGANT_HISUIAN FORMS_START + 96 +#define SPECIES_ZORUA_HISUIAN FORMS_START + 97 +#define SPECIES_ZOROARK_HISUIAN FORMS_START + 98 +#define SPECIES_BRAVIARY_HISUIAN FORMS_START + 99 +#define SPECIES_SLIGGOO_HISUIAN FORMS_START + 100 +#define SPECIES_GOODRA_HISUIAN FORMS_START + 101 +#define SPECIES_AVALUGG_HISUIAN FORMS_START + 102 +#define SPECIES_DECIDUEYE_HISUIAN FORMS_START + 103 // Misc Forms // Cosplay Pikachu -#define SPECIES_PIKACHU_COSPLAY FORMS_START + 104 -#define SPECIES_PIKACHU_ROCK_STAR FORMS_START + 105 -#define SPECIES_PIKACHU_BELLE FORMS_START + 106 -#define SPECIES_PIKACHU_POP_STAR FORMS_START + 107 -#define SPECIES_PIKACHU_PH_D FORMS_START + 108 -#define SPECIES_PIKACHU_LIBRE FORMS_START + 109 +#define SPECIES_PIKACHU_COSPLAY FORMS_START + 104 +#define SPECIES_PIKACHU_ROCK_STAR FORMS_START + 105 +#define SPECIES_PIKACHU_BELLE FORMS_START + 106 +#define SPECIES_PIKACHU_POP_STAR FORMS_START + 107 +#define SPECIES_PIKACHU_PH_D FORMS_START + 108 +#define SPECIES_PIKACHU_LIBRE FORMS_START + 109 // Cap Pikachu -#define SPECIES_PIKACHU_ORIGINAL_CAP FORMS_START + 110 -#define SPECIES_PIKACHU_HOENN_CAP FORMS_START + 111 -#define SPECIES_PIKACHU_SINNOH_CAP FORMS_START + 112 -#define SPECIES_PIKACHU_UNOVA_CAP FORMS_START + 113 -#define SPECIES_PIKACHU_KALOS_CAP FORMS_START + 114 -#define SPECIES_PIKACHU_ALOLA_CAP FORMS_START + 115 -#define SPECIES_PIKACHU_PARTNER_CAP FORMS_START + 116 -#define SPECIES_PIKACHU_WORLD_CAP FORMS_START + 117 +#define SPECIES_PIKACHU_ORIGINAL_CAP FORMS_START + 110 +#define SPECIES_PIKACHU_HOENN_CAP FORMS_START + 111 +#define SPECIES_PIKACHU_SINNOH_CAP FORMS_START + 112 +#define SPECIES_PIKACHU_UNOVA_CAP FORMS_START + 113 +#define SPECIES_PIKACHU_KALOS_CAP FORMS_START + 114 +#define SPECIES_PIKACHU_ALOLA_CAP FORMS_START + 115 +#define SPECIES_PIKACHU_PARTNER_CAP FORMS_START + 116 +#define SPECIES_PIKACHU_WORLD_CAP FORMS_START + 117 // Pichu -#define SPECIES_PICHU_SPIKY_EARED FORMS_START + 118 +#define SPECIES_PICHU_SPIKY_EARED FORMS_START + 118 // Unown -#define SPECIES_UNOWN_B FORMS_START + 119 -#define SPECIES_UNOWN_C FORMS_START + 120 -#define SPECIES_UNOWN_D FORMS_START + 121 -#define SPECIES_UNOWN_E FORMS_START + 122 -#define SPECIES_UNOWN_F FORMS_START + 123 -#define SPECIES_UNOWN_G FORMS_START + 124 -#define SPECIES_UNOWN_H FORMS_START + 125 -#define SPECIES_UNOWN_I FORMS_START + 126 -#define SPECIES_UNOWN_J FORMS_START + 127 -#define SPECIES_UNOWN_K FORMS_START + 128 -#define SPECIES_UNOWN_L FORMS_START + 129 -#define SPECIES_UNOWN_M FORMS_START + 130 -#define SPECIES_UNOWN_N FORMS_START + 131 -#define SPECIES_UNOWN_O FORMS_START + 132 -#define SPECIES_UNOWN_P FORMS_START + 133 -#define SPECIES_UNOWN_Q FORMS_START + 134 -#define SPECIES_UNOWN_R FORMS_START + 135 -#define SPECIES_UNOWN_S FORMS_START + 136 -#define SPECIES_UNOWN_T FORMS_START + 137 -#define SPECIES_UNOWN_U FORMS_START + 138 -#define SPECIES_UNOWN_V FORMS_START + 139 -#define SPECIES_UNOWN_W FORMS_START + 140 -#define SPECIES_UNOWN_X FORMS_START + 141 -#define SPECIES_UNOWN_Y FORMS_START + 142 -#define SPECIES_UNOWN_Z FORMS_START + 143 -#define SPECIES_UNOWN_EMARK FORMS_START + 144 -#define SPECIES_UNOWN_QMARK FORMS_START + 145 +#define SPECIES_UNOWN_B FORMS_START + 119 +#define SPECIES_UNOWN_C FORMS_START + 120 +#define SPECIES_UNOWN_D FORMS_START + 121 +#define SPECIES_UNOWN_E FORMS_START + 122 +#define SPECIES_UNOWN_F FORMS_START + 123 +#define SPECIES_UNOWN_G FORMS_START + 124 +#define SPECIES_UNOWN_H FORMS_START + 125 +#define SPECIES_UNOWN_I FORMS_START + 126 +#define SPECIES_UNOWN_J FORMS_START + 127 +#define SPECIES_UNOWN_K FORMS_START + 128 +#define SPECIES_UNOWN_L FORMS_START + 129 +#define SPECIES_UNOWN_M FORMS_START + 130 +#define SPECIES_UNOWN_N FORMS_START + 131 +#define SPECIES_UNOWN_O FORMS_START + 132 +#define SPECIES_UNOWN_P FORMS_START + 133 +#define SPECIES_UNOWN_Q FORMS_START + 134 +#define SPECIES_UNOWN_R FORMS_START + 135 +#define SPECIES_UNOWN_S FORMS_START + 136 +#define SPECIES_UNOWN_T FORMS_START + 137 +#define SPECIES_UNOWN_U FORMS_START + 138 +#define SPECIES_UNOWN_V FORMS_START + 139 +#define SPECIES_UNOWN_W FORMS_START + 140 +#define SPECIES_UNOWN_X FORMS_START + 141 +#define SPECIES_UNOWN_Y FORMS_START + 142 +#define SPECIES_UNOWN_Z FORMS_START + 143 +#define SPECIES_UNOWN_EMARK FORMS_START + 144 +#define SPECIES_UNOWN_QMARK FORMS_START + 145 // Castform -#define SPECIES_CASTFORM_SUNNY FORMS_START + 146 -#define SPECIES_CASTFORM_RAINY FORMS_START + 147 -#define SPECIES_CASTFORM_SNOWY FORMS_START + 148 +#define SPECIES_CASTFORM_SUNNY FORMS_START + 146 +#define SPECIES_CASTFORM_RAINY FORMS_START + 147 +#define SPECIES_CASTFORM_SNOWY FORMS_START + 148 // Deoxys -#define SPECIES_DEOXYS_ATTACK FORMS_START + 149 -#define SPECIES_DEOXYS_DEFENSE FORMS_START + 150 -#define SPECIES_DEOXYS_SPEED FORMS_START + 151 +#define SPECIES_DEOXYS_ATTACK FORMS_START + 149 +#define SPECIES_DEOXYS_DEFENSE FORMS_START + 150 +#define SPECIES_DEOXYS_SPEED FORMS_START + 151 // Burmy -#define SPECIES_BURMY_SANDY_CLOAK FORMS_START + 152 -#define SPECIES_BURMY_TRASH_CLOAK FORMS_START + 153 +#define SPECIES_BURMY_SANDY_CLOAK FORMS_START + 152 +#define SPECIES_BURMY_TRASH_CLOAK FORMS_START + 153 // Wormadam -#define SPECIES_WORMADAM_SANDY_CLOAK FORMS_START + 154 -#define SPECIES_WORMADAM_TRASH_CLOAK FORMS_START + 155 +#define SPECIES_WORMADAM_SANDY_CLOAK FORMS_START + 154 +#define SPECIES_WORMADAM_TRASH_CLOAK FORMS_START + 155 // Cherrim -#define SPECIES_CHERRIM_SUNSHINE FORMS_START + 156 +#define SPECIES_CHERRIM_SUNSHINE FORMS_START + 156 // Shellos -#define SPECIES_SHELLOS_EAST_SEA FORMS_START + 157 +#define SPECIES_SHELLOS_EAST_SEA FORMS_START + 157 // Gastrodon -#define SPECIES_GASTRODON_EAST_SEA FORMS_START + 158 +#define SPECIES_GASTRODON_EAST_SEA FORMS_START + 158 // Rotom -#define SPECIES_ROTOM_HEAT FORMS_START + 159 -#define SPECIES_ROTOM_WASH FORMS_START + 160 -#define SPECIES_ROTOM_FROST FORMS_START + 161 -#define SPECIES_ROTOM_FAN FORMS_START + 162 -#define SPECIES_ROTOM_MOW FORMS_START + 163 +#define SPECIES_ROTOM_HEAT FORMS_START + 159 +#define SPECIES_ROTOM_WASH FORMS_START + 160 +#define SPECIES_ROTOM_FROST FORMS_START + 161 +#define SPECIES_ROTOM_FAN FORMS_START + 162 +#define SPECIES_ROTOM_MOW FORMS_START + 163 // Origin Forme -#define SPECIES_DIALGA_ORIGIN FORMS_START + 164 -#define SPECIES_PALKIA_ORIGIN FORMS_START + 165 -#define SPECIES_GIRATINA_ORIGIN FORMS_START + 166 +#define SPECIES_DIALGA_ORIGIN FORMS_START + 164 +#define SPECIES_PALKIA_ORIGIN FORMS_START + 165 +#define SPECIES_GIRATINA_ORIGIN FORMS_START + 166 // Shaymin -#define SPECIES_SHAYMIN_SKY FORMS_START + 167 +#define SPECIES_SHAYMIN_SKY FORMS_START + 167 // Arceus -#define SPECIES_ARCEUS_FIGHTING FORMS_START + 168 -#define SPECIES_ARCEUS_FLYING FORMS_START + 169 -#define SPECIES_ARCEUS_POISON FORMS_START + 170 -#define SPECIES_ARCEUS_GROUND FORMS_START + 171 -#define SPECIES_ARCEUS_ROCK FORMS_START + 172 -#define SPECIES_ARCEUS_BUG FORMS_START + 173 -#define SPECIES_ARCEUS_GHOST FORMS_START + 174 -#define SPECIES_ARCEUS_STEEL FORMS_START + 175 -#define SPECIES_ARCEUS_FIRE FORMS_START + 176 -#define SPECIES_ARCEUS_WATER FORMS_START + 177 -#define SPECIES_ARCEUS_GRASS FORMS_START + 178 -#define SPECIES_ARCEUS_ELECTRIC FORMS_START + 179 -#define SPECIES_ARCEUS_PSYCHIC FORMS_START + 180 -#define SPECIES_ARCEUS_ICE FORMS_START + 181 -#define SPECIES_ARCEUS_DRAGON FORMS_START + 182 -#define SPECIES_ARCEUS_DARK FORMS_START + 183 -#define SPECIES_ARCEUS_FAIRY FORMS_START + 184 +#define SPECIES_ARCEUS_FIGHTING FORMS_START + 168 +#define SPECIES_ARCEUS_FLYING FORMS_START + 169 +#define SPECIES_ARCEUS_POISON FORMS_START + 170 +#define SPECIES_ARCEUS_GROUND FORMS_START + 171 +#define SPECIES_ARCEUS_ROCK FORMS_START + 172 +#define SPECIES_ARCEUS_BUG FORMS_START + 173 +#define SPECIES_ARCEUS_GHOST FORMS_START + 174 +#define SPECIES_ARCEUS_STEEL FORMS_START + 175 +#define SPECIES_ARCEUS_FIRE FORMS_START + 176 +#define SPECIES_ARCEUS_WATER FORMS_START + 177 +#define SPECIES_ARCEUS_GRASS FORMS_START + 178 +#define SPECIES_ARCEUS_ELECTRIC FORMS_START + 179 +#define SPECIES_ARCEUS_PSYCHIC FORMS_START + 180 +#define SPECIES_ARCEUS_ICE FORMS_START + 181 +#define SPECIES_ARCEUS_DRAGON FORMS_START + 182 +#define SPECIES_ARCEUS_DARK FORMS_START + 183 +#define SPECIES_ARCEUS_FAIRY FORMS_START + 184 // Basculin -#define SPECIES_BASCULIN_BLUE_STRIPED FORMS_START + 185 -#define SPECIES_BASCULIN_WHITE_STRIPED FORMS_START + 186 +#define SPECIES_BASCULIN_BLUE_STRIPED FORMS_START + 185 +#define SPECIES_BASCULIN_WHITE_STRIPED FORMS_START + 186 // Darmanitan -#define SPECIES_DARMANITAN_ZEN_MODE FORMS_START + 187 -#define SPECIES_DARMANITAN_ZEN_MODE_GALARIAN FORMS_START + 188 +#define SPECIES_DARMANITAN_ZEN_MODE FORMS_START + 187 +#define SPECIES_DARMANITAN_GALARIAN_ZEN_MODE FORMS_START + 188 // Deerling -#define SPECIES_DEERLING_SUMMER FORMS_START + 189 -#define SPECIES_DEERLING_AUTUMN FORMS_START + 190 -#define SPECIES_DEERLING_WINTER FORMS_START + 191 +#define SPECIES_DEERLING_SUMMER FORMS_START + 189 +#define SPECIES_DEERLING_AUTUMN FORMS_START + 190 +#define SPECIES_DEERLING_WINTER FORMS_START + 191 // Sawsbuck -#define SPECIES_SAWSBUCK_SUMMER FORMS_START + 192 -#define SPECIES_SAWSBUCK_AUTUMN FORMS_START + 193 -#define SPECIES_SAWSBUCK_WINTER FORMS_START + 194 +#define SPECIES_SAWSBUCK_SUMMER FORMS_START + 192 +#define SPECIES_SAWSBUCK_AUTUMN FORMS_START + 193 +#define SPECIES_SAWSBUCK_WINTER FORMS_START + 194 // Therian Forms -#define SPECIES_TORNADUS_THERIAN FORMS_START + 195 -#define SPECIES_THUNDURUS_THERIAN FORMS_START + 196 -#define SPECIES_LANDORUS_THERIAN FORMS_START + 197 -#define SPECIES_ENAMORUS_THERIAN FORMS_START + 198 +#define SPECIES_TORNADUS_THERIAN FORMS_START + 195 +#define SPECIES_THUNDURUS_THERIAN FORMS_START + 196 +#define SPECIES_LANDORUS_THERIAN FORMS_START + 197 +#define SPECIES_ENAMORUS_THERIAN FORMS_START + 198 // Kyurem -#define SPECIES_KYUREM_WHITE FORMS_START + 199 -#define SPECIES_KYUREM_BLACK FORMS_START + 200 +#define SPECIES_KYUREM_WHITE FORMS_START + 199 +#define SPECIES_KYUREM_BLACK FORMS_START + 200 // Keldeo -#define SPECIES_KELDEO_RESOLUTE FORMS_START + 201 +#define SPECIES_KELDEO_RESOLUTE FORMS_START + 201 // Meloetta -#define SPECIES_MELOETTA_PIROUETTE FORMS_START + 202 +#define SPECIES_MELOETTA_PIROUETTE FORMS_START + 202 // Genesect -#define SPECIES_GENESECT_DOUSE_DRIVE FORMS_START + 203 -#define SPECIES_GENESECT_SHOCK_DRIVE FORMS_START + 204 -#define SPECIES_GENESECT_BURN_DRIVE FORMS_START + 205 -#define SPECIES_GENESECT_CHILL_DRIVE FORMS_START + 206 +#define SPECIES_GENESECT_DOUSE_DRIVE FORMS_START + 203 +#define SPECIES_GENESECT_SHOCK_DRIVE FORMS_START + 204 +#define SPECIES_GENESECT_BURN_DRIVE FORMS_START + 205 +#define SPECIES_GENESECT_CHILL_DRIVE FORMS_START + 206 // Greninja -#define SPECIES_GRENINJA_BATTLE_BOND FORMS_START + 207 -#define SPECIES_GRENINJA_ASH FORMS_START + 208 +#define SPECIES_GRENINJA_BATTLE_BOND FORMS_START + 207 +#define SPECIES_GRENINJA_ASH FORMS_START + 208 // Vivillon -#define SPECIES_VIVILLON_POLAR FORMS_START + 209 -#define SPECIES_VIVILLON_TUNDRA FORMS_START + 210 -#define SPECIES_VIVILLON_CONTINENTAL FORMS_START + 211 -#define SPECIES_VIVILLON_GARDEN FORMS_START + 212 -#define SPECIES_VIVILLON_ELEGANT FORMS_START + 213 -#define SPECIES_VIVILLON_MEADOW FORMS_START + 214 -#define SPECIES_VIVILLON_MODERN FORMS_START + 215 -#define SPECIES_VIVILLON_MARINE FORMS_START + 216 -#define SPECIES_VIVILLON_ARCHIPELAGO FORMS_START + 217 -#define SPECIES_VIVILLON_HIGH_PLAINS FORMS_START + 218 -#define SPECIES_VIVILLON_SANDSTORM FORMS_START + 219 -#define SPECIES_VIVILLON_RIVER FORMS_START + 220 -#define SPECIES_VIVILLON_MONSOON FORMS_START + 221 -#define SPECIES_VIVILLON_SAVANNA FORMS_START + 222 -#define SPECIES_VIVILLON_SUN FORMS_START + 223 -#define SPECIES_VIVILLON_OCEAN FORMS_START + 224 -#define SPECIES_VIVILLON_JUNGLE FORMS_START + 225 -#define SPECIES_VIVILLON_FANCY FORMS_START + 226 -#define SPECIES_VIVILLON_POKE_BALL FORMS_START + 227 +#define SPECIES_VIVILLON_POLAR FORMS_START + 209 +#define SPECIES_VIVILLON_TUNDRA FORMS_START + 210 +#define SPECIES_VIVILLON_CONTINENTAL FORMS_START + 211 +#define SPECIES_VIVILLON_GARDEN FORMS_START + 212 +#define SPECIES_VIVILLON_ELEGANT FORMS_START + 213 +#define SPECIES_VIVILLON_MEADOW FORMS_START + 214 +#define SPECIES_VIVILLON_MODERN FORMS_START + 215 +#define SPECIES_VIVILLON_MARINE FORMS_START + 216 +#define SPECIES_VIVILLON_ARCHIPELAGO FORMS_START + 217 +#define SPECIES_VIVILLON_HIGH_PLAINS FORMS_START + 218 +#define SPECIES_VIVILLON_SANDSTORM FORMS_START + 219 +#define SPECIES_VIVILLON_RIVER FORMS_START + 220 +#define SPECIES_VIVILLON_MONSOON FORMS_START + 221 +#define SPECIES_VIVILLON_SAVANNA FORMS_START + 222 +#define SPECIES_VIVILLON_SUN FORMS_START + 223 +#define SPECIES_VIVILLON_OCEAN FORMS_START + 224 +#define SPECIES_VIVILLON_JUNGLE FORMS_START + 225 +#define SPECIES_VIVILLON_FANCY FORMS_START + 226 +#define SPECIES_VIVILLON_POKE_BALL FORMS_START + 227 // Flabébé -#define SPECIES_FLABEBE_YELLOW_FLOWER FORMS_START + 228 -#define SPECIES_FLABEBE_ORANGE_FLOWER FORMS_START + 229 -#define SPECIES_FLABEBE_BLUE_FLOWER FORMS_START + 230 -#define SPECIES_FLABEBE_WHITE_FLOWER FORMS_START + 231 +#define SPECIES_FLABEBE_YELLOW_FLOWER FORMS_START + 228 +#define SPECIES_FLABEBE_ORANGE_FLOWER FORMS_START + 229 +#define SPECIES_FLABEBE_BLUE_FLOWER FORMS_START + 230 +#define SPECIES_FLABEBE_WHITE_FLOWER FORMS_START + 231 // Floette -#define SPECIES_FLOETTE_YELLOW_FLOWER FORMS_START + 232 -#define SPECIES_FLOETTE_ORANGE_FLOWER FORMS_START + 233 -#define SPECIES_FLOETTE_BLUE_FLOWER FORMS_START + 234 -#define SPECIES_FLOETTE_WHITE_FLOWER FORMS_START + 235 -#define SPECIES_FLOETTE_ETERNAL_FLOWER FORMS_START + 236 +#define SPECIES_FLOETTE_YELLOW_FLOWER FORMS_START + 232 +#define SPECIES_FLOETTE_ORANGE_FLOWER FORMS_START + 233 +#define SPECIES_FLOETTE_BLUE_FLOWER FORMS_START + 234 +#define SPECIES_FLOETTE_WHITE_FLOWER FORMS_START + 235 +#define SPECIES_FLOETTE_ETERNAL_FLOWER FORMS_START + 236 // Florges -#define SPECIES_FLORGES_YELLOW_FLOWER FORMS_START + 237 -#define SPECIES_FLORGES_ORANGE_FLOWER FORMS_START + 238 -#define SPECIES_FLORGES_BLUE_FLOWER FORMS_START + 239 -#define SPECIES_FLORGES_WHITE_FLOWER FORMS_START + 240 +#define SPECIES_FLORGES_YELLOW_FLOWER FORMS_START + 237 +#define SPECIES_FLORGES_ORANGE_FLOWER FORMS_START + 238 +#define SPECIES_FLORGES_BLUE_FLOWER FORMS_START + 239 +#define SPECIES_FLORGES_WHITE_FLOWER FORMS_START + 240 // Furfrou -#define SPECIES_FURFROU_HEART_TRIM FORMS_START + 241 -#define SPECIES_FURFROU_STAR_TRIM FORMS_START + 242 -#define SPECIES_FURFROU_DIAMOND_TRIM FORMS_START + 243 -#define SPECIES_FURFROU_DEBUTANTE_TRIM FORMS_START + 244 -#define SPECIES_FURFROU_MATRON_TRIM FORMS_START + 245 -#define SPECIES_FURFROU_DANDY_TRIM FORMS_START + 246 -#define SPECIES_FURFROU_LA_REINE_TRIM FORMS_START + 247 -#define SPECIES_FURFROU_KABUKI_TRIM FORMS_START + 248 -#define SPECIES_FURFROU_PHARAOH_TRIM FORMS_START + 249 +#define SPECIES_FURFROU_HEART_TRIM FORMS_START + 241 +#define SPECIES_FURFROU_STAR_TRIM FORMS_START + 242 +#define SPECIES_FURFROU_DIAMOND_TRIM FORMS_START + 243 +#define SPECIES_FURFROU_DEBUTANTE_TRIM FORMS_START + 244 +#define SPECIES_FURFROU_MATRON_TRIM FORMS_START + 245 +#define SPECIES_FURFROU_DANDY_TRIM FORMS_START + 246 +#define SPECIES_FURFROU_LA_REINE_TRIM FORMS_START + 247 +#define SPECIES_FURFROU_KABUKI_TRIM FORMS_START + 248 +#define SPECIES_FURFROU_PHARAOH_TRIM FORMS_START + 249 // Meowstic -#define SPECIES_MEOWSTIC_FEMALE FORMS_START + 250 +#define SPECIES_MEOWSTIC_FEMALE FORMS_START + 250 // Aegislash -#define SPECIES_AEGISLASH_BLADE FORMS_START + 251 +#define SPECIES_AEGISLASH_BLADE FORMS_START + 251 // Pumpkaboo -#define SPECIES_PUMPKABOO_SMALL FORMS_START + 252 -#define SPECIES_PUMPKABOO_LARGE FORMS_START + 253 -#define SPECIES_PUMPKABOO_SUPER FORMS_START + 254 +#define SPECIES_PUMPKABOO_SMALL FORMS_START + 252 +#define SPECIES_PUMPKABOO_LARGE FORMS_START + 253 +#define SPECIES_PUMPKABOO_SUPER FORMS_START + 254 // Gourgeist -#define SPECIES_GOURGEIST_SMALL FORMS_START + 255 -#define SPECIES_GOURGEIST_LARGE FORMS_START + 256 -#define SPECIES_GOURGEIST_SUPER FORMS_START + 257 +#define SPECIES_GOURGEIST_SMALL FORMS_START + 255 +#define SPECIES_GOURGEIST_LARGE FORMS_START + 256 +#define SPECIES_GOURGEIST_SUPER FORMS_START + 257 // Xerneas -#define SPECIES_XERNEAS_ACTIVE FORMS_START + 258 +#define SPECIES_XERNEAS_ACTIVE FORMS_START + 258 // Zygarde -#define SPECIES_ZYGARDE_10 FORMS_START + 259 -#define SPECIES_ZYGARDE_10_POWER_CONSTRUCT FORMS_START + 260 -#define SPECIES_ZYGARDE_50_POWER_CONSTRUCT FORMS_START + 261 -#define SPECIES_ZYGARDE_COMPLETE FORMS_START + 262 +#define SPECIES_ZYGARDE_10 SPECIES_ZYGARDE_10_AURA_BREAK +#define SPECIES_ZYGARDE_10_AURA_BREAK FORMS_START + 259 +#define SPECIES_ZYGARDE_10_POWER_CONSTRUCT FORMS_START + 260 +#define SPECIES_ZYGARDE_50_POWER_CONSTRUCT FORMS_START + 261 +#define SPECIES_ZYGARDE_COMPLETE FORMS_START + 262 // Hoopa -#define SPECIES_HOOPA_UNBOUND FORMS_START + 263 +#define SPECIES_HOOPA_UNBOUND FORMS_START + 263 // Oricorio -#define SPECIES_ORICORIO_POM_POM FORMS_START + 264 -#define SPECIES_ORICORIO_PAU FORMS_START + 265 -#define SPECIES_ORICORIO_SENSU FORMS_START + 266 +#define SPECIES_ORICORIO_POM_POM FORMS_START + 264 +#define SPECIES_ORICORIO_PAU FORMS_START + 265 +#define SPECIES_ORICORIO_SENSU FORMS_START + 266 // Rockruff -#define SPECIES_ROCKRUFF_OWN_TEMPO FORMS_START + 267 +#define SPECIES_ROCKRUFF_OWN_TEMPO FORMS_START + 267 // Lycanroc -#define SPECIES_LYCANROC_MIDNIGHT FORMS_START + 268 -#define SPECIES_LYCANROC_DUSK FORMS_START + 269 +#define SPECIES_LYCANROC_MIDNIGHT FORMS_START + 268 +#define SPECIES_LYCANROC_DUSK FORMS_START + 269 // Wishiwashi -#define SPECIES_WISHIWASHI_SCHOOL FORMS_START + 270 +#define SPECIES_WISHIWASHI_SCHOOL FORMS_START + 270 // Silvally -#define SPECIES_SILVALLY_FIGHTING FORMS_START + 271 -#define SPECIES_SILVALLY_FLYING FORMS_START + 272 -#define SPECIES_SILVALLY_POISON FORMS_START + 273 -#define SPECIES_SILVALLY_GROUND FORMS_START + 274 -#define SPECIES_SILVALLY_ROCK FORMS_START + 275 -#define SPECIES_SILVALLY_BUG FORMS_START + 276 -#define SPECIES_SILVALLY_GHOST FORMS_START + 277 -#define SPECIES_SILVALLY_STEEL FORMS_START + 278 -#define SPECIES_SILVALLY_FIRE FORMS_START + 279 -#define SPECIES_SILVALLY_WATER FORMS_START + 280 -#define SPECIES_SILVALLY_GRASS FORMS_START + 281 -#define SPECIES_SILVALLY_ELECTRIC FORMS_START + 282 -#define SPECIES_SILVALLY_PSYCHIC FORMS_START + 283 -#define SPECIES_SILVALLY_ICE FORMS_START + 284 -#define SPECIES_SILVALLY_DRAGON FORMS_START + 285 -#define SPECIES_SILVALLY_DARK FORMS_START + 286 -#define SPECIES_SILVALLY_FAIRY FORMS_START + 287 +#define SPECIES_SILVALLY_FIGHTING FORMS_START + 271 +#define SPECIES_SILVALLY_FLYING FORMS_START + 272 +#define SPECIES_SILVALLY_POISON FORMS_START + 273 +#define SPECIES_SILVALLY_GROUND FORMS_START + 274 +#define SPECIES_SILVALLY_ROCK FORMS_START + 275 +#define SPECIES_SILVALLY_BUG FORMS_START + 276 +#define SPECIES_SILVALLY_GHOST FORMS_START + 277 +#define SPECIES_SILVALLY_STEEL FORMS_START + 278 +#define SPECIES_SILVALLY_FIRE FORMS_START + 279 +#define SPECIES_SILVALLY_WATER FORMS_START + 280 +#define SPECIES_SILVALLY_GRASS FORMS_START + 281 +#define SPECIES_SILVALLY_ELECTRIC FORMS_START + 282 +#define SPECIES_SILVALLY_PSYCHIC FORMS_START + 283 +#define SPECIES_SILVALLY_ICE FORMS_START + 284 +#define SPECIES_SILVALLY_DRAGON FORMS_START + 285 +#define SPECIES_SILVALLY_DARK FORMS_START + 286 +#define SPECIES_SILVALLY_FAIRY FORMS_START + 287 // Minior -#define SPECIES_MINIOR_METEOR_ORANGE FORMS_START + 288 -#define SPECIES_MINIOR_METEOR_YELLOW FORMS_START + 289 -#define SPECIES_MINIOR_METEOR_GREEN FORMS_START + 290 -#define SPECIES_MINIOR_METEOR_BLUE FORMS_START + 291 -#define SPECIES_MINIOR_METEOR_INDIGO FORMS_START + 292 -#define SPECIES_MINIOR_METEOR_VIOLET FORMS_START + 293 -#define SPECIES_MINIOR_CORE_RED FORMS_START + 294 -#define SPECIES_MINIOR_CORE_ORANGE FORMS_START + 295 -#define SPECIES_MINIOR_CORE_YELLOW FORMS_START + 296 -#define SPECIES_MINIOR_CORE_GREEN FORMS_START + 297 -#define SPECIES_MINIOR_CORE_BLUE FORMS_START + 298 -#define SPECIES_MINIOR_CORE_INDIGO FORMS_START + 299 -#define SPECIES_MINIOR_CORE_VIOLET FORMS_START + 300 +#define SPECIES_MINIOR_METEOR_ORANGE FORMS_START + 288 +#define SPECIES_MINIOR_METEOR_YELLOW FORMS_START + 289 +#define SPECIES_MINIOR_METEOR_GREEN FORMS_START + 290 +#define SPECIES_MINIOR_METEOR_BLUE FORMS_START + 291 +#define SPECIES_MINIOR_METEOR_INDIGO FORMS_START + 292 +#define SPECIES_MINIOR_METEOR_VIOLET FORMS_START + 293 +#define SPECIES_MINIOR_CORE SPECIES_MINIOR_CORE_RED +#define SPECIES_MINIOR_CORE_RED FORMS_START + 294 +#define SPECIES_MINIOR_CORE_ORANGE FORMS_START + 295 +#define SPECIES_MINIOR_CORE_YELLOW FORMS_START + 296 +#define SPECIES_MINIOR_CORE_GREEN FORMS_START + 297 +#define SPECIES_MINIOR_CORE_BLUE FORMS_START + 298 +#define SPECIES_MINIOR_CORE_INDIGO FORMS_START + 299 +#define SPECIES_MINIOR_CORE_VIOLET FORMS_START + 300 // Mimikyu -#define SPECIES_MIMIKYU_BUSTED FORMS_START + 301 +#define SPECIES_MIMIKYU_BUSTED FORMS_START + 301 // Necrozma -#define SPECIES_NECROZMA_DUSK_MANE FORMS_START + 302 -#define SPECIES_NECROZMA_DAWN_WINGS FORMS_START + 303 -#define SPECIES_NECROZMA_ULTRA FORMS_START + 304 +#define SPECIES_NECROZMA_DUSK_MANE FORMS_START + 302 +#define SPECIES_NECROZMA_DAWN_WINGS FORMS_START + 303 +#define SPECIES_NECROZMA_ULTRA FORMS_START + 304 // Magearna -#define SPECIES_MAGEARNA_ORIGINAL_COLOR FORMS_START + 305 +#define SPECIES_MAGEARNA_ORIGINAL_COLOR FORMS_START + 305 // Cramorant -#define SPECIES_CRAMORANT_GULPING FORMS_START + 306 -#define SPECIES_CRAMORANT_GORGING FORMS_START + 307 +#define SPECIES_CRAMORANT_GULPING FORMS_START + 306 +#define SPECIES_CRAMORANT_GORGING FORMS_START + 307 // Toxtricity -#define SPECIES_TOXTRICITY_LOW_KEY FORMS_START + 308 +#define SPECIES_TOXTRICITY_LOW_KEY FORMS_START + 308 // Sinistea -#define SPECIES_SINISTEA_ANTIQUE FORMS_START + 309 +#define SPECIES_SINISTEA_ANTIQUE FORMS_START + 309 // Polteageist -#define SPECIES_POLTEAGEIST_ANTIQUE FORMS_START + 310 +#define SPECIES_POLTEAGEIST_ANTIQUE FORMS_START + 310 // Alcremie -#define SPECIES_ALCREMIE_RUBY_CREAM FORMS_START + 311 -#define SPECIES_ALCREMIE_MATCHA_CREAM FORMS_START + 312 -#define SPECIES_ALCREMIE_MINT_CREAM FORMS_START + 313 -#define SPECIES_ALCREMIE_LEMON_CREAM FORMS_START + 314 -#define SPECIES_ALCREMIE_SALTED_CREAM FORMS_START + 315 -#define SPECIES_ALCREMIE_RUBY_SWIRL FORMS_START + 316 -#define SPECIES_ALCREMIE_CARAMEL_SWIRL FORMS_START + 317 -#define SPECIES_ALCREMIE_RAINBOW_SWIRL FORMS_START + 318 +#define SPECIES_ALCREMIE_RUBY_CREAM SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM +#define SPECIES_ALCREMIE_MATCHA_CREAM SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM +#define SPECIES_ALCREMIE_MINT_CREAM SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM +#define SPECIES_ALCREMIE_LEMON_CREAM SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM +#define SPECIES_ALCREMIE_SALTED_CREAM SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM +#define SPECIES_ALCREMIE_RUBY_SWIRL SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL +#define SPECIES_ALCREMIE_CARAMEL_SWIRL SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL +#define SPECIES_ALCREMIE_RAINBOW_SWIRL SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL +#define SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM FORMS_START + 311 +#define SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM FORMS_START + 312 +#define SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM FORMS_START + 313 +#define SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM FORMS_START + 314 +#define SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM FORMS_START + 315 +#define SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL FORMS_START + 316 +#define SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL FORMS_START + 317 +#define SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL FORMS_START + 318 // Eiscue -#define SPECIES_EISCUE_NOICE_FACE FORMS_START + 319 +#define SPECIES_EISCUE_NOICE_FACE FORMS_START + 319 // Indeedee -#define SPECIES_INDEEDEE_FEMALE FORMS_START + 320 +#define SPECIES_INDEEDEE_FEMALE FORMS_START + 320 // Morpeko -#define SPECIES_MORPEKO_HANGRY FORMS_START + 321 +#define SPECIES_MORPEKO_HANGRY FORMS_START + 321 // Zacian -#define SPECIES_ZACIAN_CROWNED_SWORD FORMS_START + 322 +#define SPECIES_ZACIAN_CROWNED_SWORD FORMS_START + 322 // Zamazenta -#define SPECIES_ZAMAZENTA_CROWNED_SHIELD FORMS_START + 323 +#define SPECIES_ZAMAZENTA_CROWNED_SHIELD FORMS_START + 323 // Eternatus -#define SPECIES_ETERNATUS_ETERNAMAX FORMS_START + 324 +#define SPECIES_ETERNATUS_ETERNAMAX FORMS_START + 324 // Urshifu -#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE FORMS_START + 325 +#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE FORMS_START + 325 // Zarude -#define SPECIES_ZARUDE_DADA FORMS_START + 326 +#define SPECIES_ZARUDE_DADA FORMS_START + 326 // Calyrex -#define SPECIES_CALYREX_ICE_RIDER FORMS_START + 327 -#define SPECIES_CALYREX_SHADOW_RIDER FORMS_START + 328 +#define SPECIES_CALYREX_ICE_RIDER FORMS_START + 327 +#define SPECIES_CALYREX_SHADOW_RIDER FORMS_START + 328 // Basculegion -#define SPECIES_BASCULEGION_FEMALE FORMS_START + 329 +#define SPECIES_BASCULEGION_FEMALE FORMS_START + 329 -#define FORMS_START SPECIES_ENAMORUS -#define SPECIES_EGG SPECIES_BASCULEGION_FEMALE + 1 +// More Alcremie +#define SPECIES_ALCREMIE_BERRY SPECIES_ALCREMIE_BERRY_VANILLA_CREAM +#define SPECIES_ALCREMIE_BERRY_VANILLA_CREAM FORMS_START + 330 +#define SPECIES_ALCREMIE_BERRY_RUBY_CREAM FORMS_START + 331 +#define SPECIES_ALCREMIE_BERRY_MATCHA_CREAM FORMS_START + 332 +#define SPECIES_ALCREMIE_BERRY_MINT_CREAM FORMS_START + 333 +#define SPECIES_ALCREMIE_BERRY_LEMON_CREAM FORMS_START + 334 +#define SPECIES_ALCREMIE_BERRY_SALTED_CREAM FORMS_START + 335 +#define SPECIES_ALCREMIE_BERRY_RUBY_SWIRL FORMS_START + 336 +#define SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL FORMS_START + 337 +#define SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL FORMS_START + 338 +#define SPECIES_ALCREMIE_LOVE SPECIES_ALCREMIE_LOVE_VANILLA_CREAM +#define SPECIES_ALCREMIE_LOVE_VANILLA_CREAM FORMS_START + 339 +#define SPECIES_ALCREMIE_LOVE_RUBY_CREAM FORMS_START + 340 +#define SPECIES_ALCREMIE_LOVE_MATCHA_CREAM FORMS_START + 341 +#define SPECIES_ALCREMIE_LOVE_MINT_CREAM FORMS_START + 342 +#define SPECIES_ALCREMIE_LOVE_LEMON_CREAM FORMS_START + 343 +#define SPECIES_ALCREMIE_LOVE_SALTED_CREAM FORMS_START + 344 +#define SPECIES_ALCREMIE_LOVE_RUBY_SWIRL FORMS_START + 345 +#define SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL FORMS_START + 346 +#define SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL FORMS_START + 347 +#define SPECIES_ALCREMIE_STAR SPECIES_ALCREMIE_STAR_VANILLA_CREAM +#define SPECIES_ALCREMIE_STAR_VANILLA_CREAM FORMS_START + 348 +#define SPECIES_ALCREMIE_STAR_RUBY_CREAM FORMS_START + 349 +#define SPECIES_ALCREMIE_STAR_MATCHA_CREAM FORMS_START + 350 +#define SPECIES_ALCREMIE_STAR_MINT_CREAM FORMS_START + 351 +#define SPECIES_ALCREMIE_STAR_LEMON_CREAM FORMS_START + 352 +#define SPECIES_ALCREMIE_STAR_SALTED_CREAM FORMS_START + 353 +#define SPECIES_ALCREMIE_STAR_RUBY_SWIRL FORMS_START + 354 +#define SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL FORMS_START + 355 +#define SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL FORMS_START + 356 +#define SPECIES_ALCREMIE_CLOVER SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM +#define SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM FORMS_START + 357 +#define SPECIES_ALCREMIE_CLOVER_RUBY_CREAM FORMS_START + 358 +#define SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM FORMS_START + 359 +#define SPECIES_ALCREMIE_CLOVER_MINT_CREAM FORMS_START + 360 +#define SPECIES_ALCREMIE_CLOVER_LEMON_CREAM FORMS_START + 361 +#define SPECIES_ALCREMIE_CLOVER_SALTED_CREAM FORMS_START + 362 +#define SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL FORMS_START + 363 +#define SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL FORMS_START + 364 +#define SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL FORMS_START + 365 +#define SPECIES_ALCREMIE_FLOWER SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM +#define SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM FORMS_START + 366 +#define SPECIES_ALCREMIE_FLOWER_RUBY_CREAM FORMS_START + 367 +#define SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM FORMS_START + 368 +#define SPECIES_ALCREMIE_FLOWER_MINT_CREAM FORMS_START + 369 +#define SPECIES_ALCREMIE_FLOWER_LEMON_CREAM FORMS_START + 370 +#define SPECIES_ALCREMIE_FLOWER_SALTED_CREAM FORMS_START + 371 +#define SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL FORMS_START + 372 +#define SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL FORMS_START + 373 +#define SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL FORMS_START + 374 +#define SPECIES_ALCREMIE_RIBBON SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM +#define SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM FORMS_START + 375 +#define SPECIES_ALCREMIE_RIBBON_RUBY_CREAM FORMS_START + 376 +#define SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM FORMS_START + 377 +#define SPECIES_ALCREMIE_RIBBON_MINT_CREAM FORMS_START + 378 +#define SPECIES_ALCREMIE_RIBBON_LEMON_CREAM FORMS_START + 379 +#define SPECIES_ALCREMIE_RIBBON_SALTED_CREAM FORMS_START + 380 +#define SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL FORMS_START + 381 +#define SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL FORMS_START + 382 +#define SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL FORMS_START + 383 + +#define GEN9_START SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL + +#define SPECIES_SPRIGATITO GEN9_START + 1 +#define SPECIES_FLORAGATO GEN9_START + 2 +#define SPECIES_MEOWSCARADA GEN9_START + 3 +#define SPECIES_FUECOCO GEN9_START + 4 +#define SPECIES_CROCALOR GEN9_START + 5 +#define SPECIES_SKELEDIRGE GEN9_START + 6 +#define SPECIES_QUAXLY GEN9_START + 7 +#define SPECIES_QUAXWELL GEN9_START + 8 +#define SPECIES_QUAQUAVAL GEN9_START + 9 +#define SPECIES_LECHONK GEN9_START + 10 +#define SPECIES_OINKOLOGNE SPECIES_OINKOLOGNE_MALE +#define SPECIES_OINKOLOGNE_MALE GEN9_START + 11 +#define SPECIES_OINKOLOGNE_FEMALE GEN9_START + 12 +#define SPECIES_TAROUNTULA GEN9_START + 13 +#define SPECIES_SPIDOPS GEN9_START + 14 +#define SPECIES_NYMBLE GEN9_START + 15 +#define SPECIES_LOKIX GEN9_START + 16 +#define SPECIES_PAWMI GEN9_START + 17 +#define SPECIES_PAWMO GEN9_START + 18 +#define SPECIES_PAWMOT GEN9_START + 19 +#define SPECIES_TANDEMAUS GEN9_START + 20 +#define SPECIES_MAUSHOLD SPECIES_MAUSHOLD_FAMILY_OF_THREE +#define SPECIES_MAUSHOLD_FAMILY_OF_THREE GEN9_START + 21 +#define SPECIES_MAUSHOLD_FAMILY_OF_FOUR GEN9_START + 22 +#define SPECIES_FIDOUGH GEN9_START + 23 +#define SPECIES_DACHSBUN GEN9_START + 24 +#define SPECIES_SMOLIV GEN9_START + 25 +#define SPECIES_DOLLIV GEN9_START + 26 +#define SPECIES_ARBOLIVA GEN9_START + 27 +#define SPECIES_SQUAWKABILLY SPECIES_SQUAWKABILLY_GREEN_PLUMAGE +#define SPECIES_SQUAWKABILLY_GREEN_PLUMAGE GEN9_START + 28 +#define SPECIES_SQUAWKABILLY_BLUE_PLUMAGE GEN9_START + 29 +#define SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE GEN9_START + 30 +#define SPECIES_SQUAWKABILLY_WHITE_PLUMAGE GEN9_START + 31 +#define SPECIES_NACLI GEN9_START + 32 +#define SPECIES_NACLSTACK GEN9_START + 33 +#define SPECIES_GARGANACL GEN9_START + 34 +#define SPECIES_CHARCADET GEN9_START + 35 +#define SPECIES_ARMAROUGE GEN9_START + 36 +#define SPECIES_CERULEDGE GEN9_START + 37 +#define SPECIES_TADBULB GEN9_START + 38 +#define SPECIES_BELLIBOLT GEN9_START + 39 +#define SPECIES_WATTREL GEN9_START + 40 +#define SPECIES_KILOWATTREL GEN9_START + 41 +#define SPECIES_MASCHIFF GEN9_START + 42 +#define SPECIES_MABOSSTIFF GEN9_START + 43 +#define SPECIES_SHROODLE GEN9_START + 44 +#define SPECIES_GRAFAIAI GEN9_START + 45 +#define SPECIES_BRAMBLIN GEN9_START + 46 +#define SPECIES_BRAMBLEGHAST GEN9_START + 47 +#define SPECIES_TOEDSCOOL GEN9_START + 48 +#define SPECIES_TOEDSCRUEL GEN9_START + 49 +#define SPECIES_KLAWF GEN9_START + 50 +#define SPECIES_CAPSAKID GEN9_START + 51 +#define SPECIES_SCOVILLAIN GEN9_START + 52 +#define SPECIES_RELLOR GEN9_START + 53 +#define SPECIES_RABSCA GEN9_START + 54 +#define SPECIES_FLITTLE GEN9_START + 55 +#define SPECIES_ESPATHRA GEN9_START + 56 +#define SPECIES_TINKATINK GEN9_START + 57 +#define SPECIES_TINKATUFF GEN9_START + 58 +#define SPECIES_TINKATON GEN9_START + 59 +#define SPECIES_WIGLETT GEN9_START + 60 +#define SPECIES_WUGTRIO GEN9_START + 61 +#define SPECIES_BOMBIRDIER GEN9_START + 62 +#define SPECIES_FINIZEN GEN9_START + 63 +#define SPECIES_PALAFIN SPECIES_PALAFIN_ZERO +#define SPECIES_PALAFIN_ZERO GEN9_START + 64 +#define SPECIES_PALAFIN_HERO GEN9_START + 65 +#define SPECIES_VAROOM GEN9_START + 66 +#define SPECIES_REVAVROOM GEN9_START + 67 +#define SPECIES_CYCLIZAR GEN9_START + 68 +#define SPECIES_ORTHWORM GEN9_START + 69 +#define SPECIES_GLIMMET GEN9_START + 70 +#define SPECIES_GLIMMORA GEN9_START + 71 +#define SPECIES_GREAVARD GEN9_START + 72 +#define SPECIES_HOUNDSTONE GEN9_START + 73 +#define SPECIES_FLAMIGO GEN9_START + 74 +#define SPECIES_CETODDLE GEN9_START + 75 +#define SPECIES_CETITAN GEN9_START + 76 +#define SPECIES_VELUZA GEN9_START + 77 +#define SPECIES_DONDOZO GEN9_START + 78 +#define SPECIES_TATSUGIRI SPECIES_TATSUGIRI_CURLY +#define SPECIES_TATSUGIRI_CURLY GEN9_START + 79 +#define SPECIES_TATSUGIRI_DROOPY GEN9_START + 80 +#define SPECIES_TATSUGIRI_STRETCHY GEN9_START + 81 +#define SPECIES_ANNIHILAPE GEN9_START + 82 +#define SPECIES_CLODSIRE GEN9_START + 83 +#define SPECIES_FARIGIRAF GEN9_START + 84 +#define SPECIES_DUDUNSPARCE SPECIES_DUDUNSPARCE_TWO_SEGMENT +#define SPECIES_DUDUNSPARCE_TWO_SEGMENT GEN9_START + 85 +#define SPECIES_DUDUNSPARCE_THREE_SEGMENT GEN9_START + 86 +#define SPECIES_KINGAMBIT GEN9_START + 87 +#define SPECIES_GREAT_TUSK GEN9_START + 88 +#define SPECIES_SCREAM_TAIL GEN9_START + 89 +#define SPECIES_BRUTE_BONNET GEN9_START + 90 +#define SPECIES_FLUTTER_MANE GEN9_START + 91 +#define SPECIES_SLITHER_WING GEN9_START + 92 +#define SPECIES_SANDY_SHOCKS GEN9_START + 93 +#define SPECIES_IRON_TREADS GEN9_START + 94 +#define SPECIES_IRON_BUNDLE GEN9_START + 95 +#define SPECIES_IRON_HANDS GEN9_START + 96 +#define SPECIES_IRON_JUGULIS GEN9_START + 97 +#define SPECIES_IRON_MOTH GEN9_START + 98 +#define SPECIES_IRON_THORNS GEN9_START + 99 +#define SPECIES_FRIGIBAX GEN9_START + 100 +#define SPECIES_ARCTIBAX GEN9_START + 101 +#define SPECIES_BAXCALIBUR GEN9_START + 102 +#define SPECIES_GIMMIGHOUL SPECIES_GIMMIGHOUL_CHEST +#define SPECIES_GIMMIGHOUL_CHEST GEN9_START + 103 +#define SPECIES_GIMMIGHOUL_ROAMING GEN9_START + 104 +#define SPECIES_GHOLDENGO GEN9_START + 105 +#define SPECIES_WO_CHIEN GEN9_START + 106 +#define SPECIES_CHIEN_PAO GEN9_START + 107 +#define SPECIES_TING_LU GEN9_START + 108 +#define SPECIES_CHI_YU GEN9_START + 109 +#define SPECIES_ROARING_MOON GEN9_START + 110 +#define SPECIES_IRON_VALIANT GEN9_START + 111 +#define SPECIES_KORAIDON GEN9_START + 112 +#define SPECIES_MIRAIDON GEN9_START + 113 +// Paldean Forms +#define SPECIES_TAUROS_PALDEAN_COMBAT_BREED GEN9_START + 114 +#define SPECIES_TAUROS_PALDEAN_BLAZE_BREED GEN9_START + 115 +#define SPECIES_TAUROS_PALDEAN_AQUA_BREED GEN9_START + 116 +#define SPECIES_WOOPER_PALDEAN GEN9_START + 117 +// Scarlet and Violet 1.2.0 +#define SPECIES_WALKING_WAKE GEN9_START + 118 +#define SPECIES_IRON_LEAVES GEN9_START + 119 +// Teal Mask +#define SPECIES_DIPPLIN GEN9_START + 120 +#define SPECIES_POLTCHAGEIST SPECIES_POLTCHAGEIST_COUNTERFEIT +#define SPECIES_POLTCHAGEIST_COUNTERFEIT GEN9_START + 121 +#define SPECIES_POLTCHAGEIST_ARTISAN GEN9_START + 122 +#define SPECIES_SINISTCHA SPECIES_SINISTCHA_UNREMARKABLE +#define SPECIES_SINISTCHA_UNREMARKABLE GEN9_START + 123 +#define SPECIES_SINISTCHA_MASTERPIECE GEN9_START + 124 +#define SPECIES_OKIDOGI GEN9_START + 125 +#define SPECIES_MUNKIDORI GEN9_START + 126 +#define SPECIES_FEZANDIPITI GEN9_START + 127 +#define SPECIES_OGERPON SPECIES_OGERPON_TEAL_MASK +#define SPECIES_OGERPON_TEAL_MASK GEN9_START + 128 +#define SPECIES_OGERPON_WELLSPRING_MASK GEN9_START + 129 +#define SPECIES_OGERPON_HEARTHFLAME_MASK GEN9_START + 130 +#define SPECIES_OGERPON_CORNERSTONE_MASK GEN9_START + 131 +#define SPECIES_OGERPON_TEAL_MASK_TERA GEN9_START + 132 +#define SPECIES_OGERPON_WELLSPRING_MASK_TERA GEN9_START + 133 +#define SPECIES_OGERPON_HEARTHFLAME_MASK_TERA GEN9_START + 134 +#define SPECIES_OGERPON_CORNERSTONE_MASK_TERA GEN9_START + 135 +#define SPECIES_URSALUNA_BLOODMOON GEN9_START + 136 + +#define GIGANTAMAX_START SPECIES_URSALUNA_BLOODMOON + +// Gigantamax Forms +#define SPECIES_VENUSAUR_GIGANTAMAX GIGANTAMAX_START + 1 +#define SPECIES_BLASTOISE_GIGANTAMAX GIGANTAMAX_START + 2 +#define SPECIES_CHARIZARD_GIGANTAMAX GIGANTAMAX_START + 3 +#define SPECIES_BUTTERFREE_GIGANTAMAX GIGANTAMAX_START + 4 +#define SPECIES_PIKACHU_GIGANTAMAX GIGANTAMAX_START + 5 +#define SPECIES_MEOWTH_GIGANTAMAX GIGANTAMAX_START + 6 +#define SPECIES_MACHAMP_GIGANTAMAX GIGANTAMAX_START + 7 +#define SPECIES_GENGAR_GIGANTAMAX GIGANTAMAX_START + 8 +#define SPECIES_KINGLER_GIGANTAMAX GIGANTAMAX_START + 9 +#define SPECIES_LAPRAS_GIGANTAMAX GIGANTAMAX_START + 10 +#define SPECIES_EEVEE_GIGANTAMAX GIGANTAMAX_START + 11 +#define SPECIES_SNORLAX_GIGANTAMAX GIGANTAMAX_START + 12 +#define SPECIES_GARBODOR_GIGANTAMAX GIGANTAMAX_START + 13 +#define SPECIES_MELMETAL_GIGANTAMAX GIGANTAMAX_START + 14 +#define SPECIES_RILLABOOM_GIGANTAMAX GIGANTAMAX_START + 15 +#define SPECIES_CINDERACE_GIGANTAMAX GIGANTAMAX_START + 16 +#define SPECIES_INTELEON_GIGANTAMAX GIGANTAMAX_START + 17 +#define SPECIES_CORVIKNIGHT_GIGANTAMAX GIGANTAMAX_START + 18 +#define SPECIES_ORBEETLE_GIGANTAMAX GIGANTAMAX_START + 19 +#define SPECIES_DREDNAW_GIGANTAMAX GIGANTAMAX_START + 20 +#define SPECIES_COALOSSAL_GIGANTAMAX GIGANTAMAX_START + 21 +#define SPECIES_FLAPPLE_GIGANTAMAX GIGANTAMAX_START + 22 +#define SPECIES_APPLETUN_GIGANTAMAX GIGANTAMAX_START + 23 +#define SPECIES_SANDACONDA_GIGANTAMAX GIGANTAMAX_START + 24 +#define SPECIES_TOXTRICITY_AMPED_GIGANTAMAX GIGANTAMAX_START + 25 +#define SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX GIGANTAMAX_START + 26 +#define SPECIES_CENTISKORCH_GIGANTAMAX GIGANTAMAX_START + 27 +#define SPECIES_HATTERENE_GIGANTAMAX GIGANTAMAX_START + 28 +#define SPECIES_GRIMMSNARL_GIGANTAMAX GIGANTAMAX_START + 29 +#define SPECIES_ALCREMIE_GIGANTAMAX GIGANTAMAX_START + 30 +#define SPECIES_COPPERAJAH_GIGANTAMAX GIGANTAMAX_START + 31 +#define SPECIES_DURALUDON_GIGANTAMAX GIGANTAMAX_START + 32 +#define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX GIGANTAMAX_START + 33 +#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX GIGANTAMAX_START + 34 + +#define SPECIES_EGG SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX + 1 #define NUM_SPECIES SPECIES_EGG diff --git a/include/data.h b/include/data.h index d2248820ea..8423329114 100644 --- a/include/data.h +++ b/include/data.h @@ -117,7 +117,8 @@ extern const struct CompressedSpriteSheet gMonFrontPicTableFemale[]; extern const struct Trainer gTrainers[]; extern const u8 gTrainerClassNames[][13]; extern const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1]; -extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; +extern const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1]; extern const u8 *const gZMoveNames[]; +extern const u8 *const gMaxMoveNames[]; #endif // GUARD_DATA_H diff --git a/include/field_weather.h b/include/field_weather.h index 8ce0cc9e50..b354d500e3 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -132,7 +132,7 @@ struct Weather s16 droughtTimer; s16 droughtState; u8 droughtUnused[9]; - s8 loadDroughtPalsIndex; + u8 loadDroughtPalsIndex; u8 loadDroughtPalsOffset; }; diff --git a/include/fieldmap.h b/include/fieldmap.h index 47072bd1be..ecb1e49c4d 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -22,6 +22,7 @@ #include "main.h" extern struct BackupMapLayout gBackupMapLayout; +extern u16 ALIGNED(4) sBackupMapData[MAX_MAP_DATA_SIZE]; u32 MapGridGetMetatileIdAt(int, int); u32 MapGridGetMetatileBehaviorAt(int, int); diff --git a/include/graphics.h b/include/graphics.h index 09d24fc31a..91c6edce8d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -215,6 +215,24 @@ extern const u32 gMonFrontPic_Electabuzz[]; extern const u32 gMonFrontPic_Magmar[]; extern const u32 gMonFrontPic_Pinsir[]; extern const u32 gMonFrontPic_Tauros[]; +extern const u32 gMonFrontPic_TaurosPaldeanCombatBreed[]; +extern const u32 gMonPalette_TaurosPaldeanCombatBreed[]; +extern const u32 gMonBackPic_TaurosPaldeanCombatBreed[]; +extern const u32 gMonShinyPalette_TaurosPaldeanCombatBreed[]; +extern const u8 gMonIcon_TaurosPaldeanCombatBreed[]; +// extern const u8 gMonFootprint_TaurosPaldeanCombatBreed[]; +extern const u32 gMonFrontPic_TaurosPaldeanBlazeBreed[]; +extern const u32 gMonPalette_TaurosPaldeanBlazeBreed[]; +extern const u32 gMonBackPic_TaurosPaldeanBlazeBreed[]; +extern const u32 gMonShinyPalette_TaurosPaldeanBlazeBreed[]; +extern const u8 gMonIcon_TaurosPaldeanBlazeBreed[]; +// extern const u8 gMonFootprint_TaurosPaldeanBlazeBreed[]; +extern const u32 gMonFrontPic_TaurosPaldeanAquaBreed[]; +extern const u32 gMonPalette_TaurosPaldeanAquaBreed[]; +extern const u32 gMonBackPic_TaurosPaldeanAquaBreed[]; +extern const u32 gMonShinyPalette_TaurosPaldeanAquaBreed[]; +extern const u8 gMonIcon_TaurosPaldeanAquaBreed[]; +// extern const u8 gMonFootprint_TaurosPaldeanAquaBreed[]; extern const u32 gMonFrontPic_Magikarp[]; extern const u32 gMonFrontPic_MagikarpF[]; extern const u32 gMonFrontPic_Gyarados[]; @@ -292,6 +310,12 @@ extern const u32 gMonFrontPic_Sunflora[]; extern const u32 gMonFrontPic_Yanma[]; extern const u32 gMonFrontPic_Wooper[]; extern const u32 gMonFrontPic_WooperF[]; +extern const u32 gMonFrontPic_WooperPaldean[]; +extern const u32 gMonPalette_WooperPaldean[]; +extern const u32 gMonBackPic_WooperPaldean[]; +extern const u32 gMonShinyPalette_WooperPaldean[]; +//extern const u8 gMonIcon_WooperPaldean[]; +extern const u8 gMonFootprint_WooperPaldean[]; extern const u32 gMonFrontPic_Quagsire[]; extern const u32 gMonFrontPic_QuagsireF[]; extern const u32 gMonFrontPic_Espeon[]; @@ -478,7 +502,7 @@ extern const u32 gMonFrontPic_Armaldo[]; extern const u32 gMonFrontPic_Feebas[]; extern const u32 gMonFrontPic_Milotic[]; extern const u32 gMonFrontPic_MiloticF[]; -extern const u32 gMonFrontPic_Castform[]; +extern const u32 gMonFrontPic_CastformNormal[]; extern const u32 gMonFrontPic_Kecleon[]; extern const u32 gMonFrontPic_Shuppet[]; extern const u32 gMonFrontPic_Banette[]; @@ -514,7 +538,7 @@ extern const u32 gMonFrontPic_Kyogre[]; extern const u32 gMonFrontPic_Groudon[]; extern const u32 gMonFrontPic_Rayquaza[]; extern const u32 gMonFrontPic_Jirachi[]; -extern const u32 gMonFrontPic_Deoxys[]; +extern const u32 gMonFrontPic_DeoxysNormal[]; #if P_GEN_4_POKEMON == TRUE extern const u32 gMonFrontPic_Turtwig[]; extern const u32 gMonFrontPic_Grotle[]; @@ -552,8 +576,8 @@ extern const u32 gMonFrontPic_Cranidos[]; extern const u32 gMonFrontPic_Rampardos[]; extern const u32 gMonFrontPic_Shieldon[]; extern const u32 gMonFrontPic_Bastiodon[]; -extern const u32 gMonFrontPic_Burmy[]; -extern const u32 gMonFrontPic_Wormadam[]; +extern const u32 gMonFrontPic_BurmyPlantCloak[]; +extern const u32 gMonFrontPic_WormadamPlantCloak[]; extern const u32 gMonFrontPic_Mothim[]; extern const u32 gMonFrontPic_Combee[]; extern const u32 gMonFrontPic_Vespiquen[]; @@ -562,9 +586,9 @@ extern const u32 gMonFrontPic_PachirisuF[]; extern const u32 gMonFrontPic_Buizel[]; extern const u32 gMonFrontPic_Floatzel[]; extern const u32 gMonFrontPic_Cherubi[]; -extern const u32 gMonFrontPic_Cherrim[]; -extern const u32 gMonFrontPic_Shellos[]; -extern const u32 gMonFrontPic_Gastrodon[]; +extern const u32 gMonFrontPic_CherrimOvercast[]; +extern const u32 gMonFrontPic_ShellosWestSea[]; +extern const u32 gMonFrontPic_GastrodonWestSea[]; extern const u32 gMonFrontPic_Ambipom[]; extern const u32 gMonFrontPic_AmbipomF[]; extern const u32 gMonFrontPic_Drifloon[]; @@ -642,12 +666,12 @@ extern const u32 gMonFrontPic_Dialga[]; extern const u32 gMonFrontPic_Palkia[]; extern const u32 gMonFrontPic_Heatran[]; extern const u32 gMonFrontPic_Regigigas[]; -extern const u32 gMonFrontPic_Giratina[]; +extern const u32 gMonFrontPic_GiratinaAltered[]; extern const u32 gMonFrontPic_Cresselia[]; extern const u32 gMonFrontPic_Phione[]; extern const u32 gMonFrontPic_Manaphy[]; extern const u32 gMonFrontPic_Darkrai[]; -extern const u32 gMonFrontPic_Shaymin[]; +extern const u32 gMonFrontPic_ShayminLand[]; extern const u32 gMonFrontPic_Arceus[]; #endif #if P_GEN_5_POKEMON == TRUE @@ -708,12 +732,12 @@ extern const u32 gMonFrontPic_Cottonee[]; extern const u32 gMonFrontPic_Whimsicott[]; extern const u32 gMonFrontPic_Petilil[]; extern const u32 gMonFrontPic_Lilligant[]; -extern const u32 gMonFrontPic_Basculin[]; +extern const u32 gMonFrontPic_BasculinRedStriped[]; extern const u32 gMonFrontPic_Sandile[]; extern const u32 gMonFrontPic_Krokorok[]; extern const u32 gMonFrontPic_Krookodile[]; extern const u32 gMonFrontPic_Darumaka[]; -extern const u32 gMonFrontPic_Darmanitan[]; +extern const u32 gMonFrontPic_DarmanitanStandardMode[]; extern const u32 gMonFrontPic_Maractus[]; extern const u32 gMonFrontPic_Dwebble[]; extern const u32 gMonFrontPic_Crustle[]; @@ -744,7 +768,7 @@ extern const u32 gMonFrontPic_Vanillite[]; extern const u32 gMonFrontPic_Vanillish[]; extern const u32 gMonFrontPic_Vanilluxe[]; extern const u32 gMonFrontPic_Deerling[]; -extern const u32 gMonFrontPic_Sawsbuck[]; +extern const u32 gMonFrontPic_SawsbuckSpring[]; extern const u32 gMonFrontPic_Emolga[]; extern const u32 gMonFrontPic_Karrablast[]; extern const u32 gMonFrontPic_Escavalier[]; @@ -801,14 +825,14 @@ extern const u32 gMonFrontPic_Volcarona[]; extern const u32 gMonFrontPic_Cobalion[]; extern const u32 gMonFrontPic_Terrakion[]; extern const u32 gMonFrontPic_Virizion[]; -extern const u32 gMonFrontPic_Tornadus[]; -extern const u32 gMonFrontPic_Thundurus[]; +extern const u32 gMonFrontPic_TornadusIncarnate[]; +extern const u32 gMonFrontPic_ThundurusIncarnate[]; extern const u32 gMonFrontPic_Reshiram[]; extern const u32 gMonFrontPic_Zekrom[]; -extern const u32 gMonFrontPic_Landorus[]; +extern const u32 gMonFrontPic_LandorusIncarnate[]; extern const u32 gMonFrontPic_Kyurem[]; -extern const u32 gMonFrontPic_Keldeo[]; -extern const u32 gMonFrontPic_Meloetta[]; +extern const u32 gMonFrontPic_KeldeoOrdinary[]; +extern const u32 gMonFrontPic_MeloettaAria[]; extern const u32 gMonFrontPic_Genesect[]; #endif #if P_GEN_6_POKEMON == TRUE @@ -828,7 +852,7 @@ extern const u32 gMonFrontPic_Fletchinder[]; extern const u32 gMonFrontPic_Talonflame[]; extern const u32 gMonFrontPic_Scatterbug[]; extern const u32 gMonFrontPic_Spewpa[]; -extern const u32 gMonFrontPic_Vivillon[]; +extern const u32 gMonFrontPic_VivillonIcySnow[]; extern const u32 gMonFrontPic_Litleo[]; extern const u32 gMonFrontPic_Pyroar[]; extern const u32 gMonFrontPic_PyroarF[]; @@ -839,12 +863,12 @@ extern const u32 gMonFrontPic_Skiddo[]; extern const u32 gMonFrontPic_Gogoat[]; extern const u32 gMonFrontPic_Pancham[]; extern const u32 gMonFrontPic_Pangoro[]; -extern const u32 gMonFrontPic_Furfrou[]; +extern const u32 gMonFrontPic_FurfrouNatural[]; extern const u32 gMonFrontPic_Espurr[]; -extern const u32 gMonFrontPic_Meowstic[]; +extern const u32 gMonFrontPic_MeowsticMale[]; extern const u32 gMonFrontPic_Honedge[]; extern const u32 gMonFrontPic_Doublade[]; -extern const u32 gMonFrontPic_Aegislash[]; +extern const u32 gMonFrontPic_AegislashShield[]; extern const u32 gMonFrontPic_Spritzee[]; extern const u32 gMonFrontPic_Aromatisse[]; extern const u32 gMonFrontPic_Swirlix[]; @@ -873,17 +897,17 @@ extern const u32 gMonFrontPic_Goodra[]; extern const u32 gMonFrontPic_Klefki[]; extern const u32 gMonFrontPic_Phantump[]; extern const u32 gMonFrontPic_Trevenant[]; -extern const u32 gMonFrontPic_Pumpkaboo[]; -extern const u32 gMonFrontPic_Gourgeist[]; +extern const u32 gMonFrontPic_PumpkabooAverage[]; +extern const u32 gMonFrontPic_GourgeistAverage[]; extern const u32 gMonFrontPic_Bergmite[]; extern const u32 gMonFrontPic_Avalugg[]; extern const u32 gMonFrontPic_Noibat[]; extern const u32 gMonFrontPic_Noivern[]; -extern const u32 gMonFrontPic_Xerneas[]; +extern const u32 gMonFrontPic_XerneasNeutral[]; extern const u32 gMonFrontPic_Yveltal[]; -extern const u32 gMonFrontPic_Zygarde[]; +extern const u32 gMonFrontPic_Zygarde50[]; extern const u32 gMonFrontPic_Diancie[]; -extern const u32 gMonFrontPic_Hoopa[]; +extern const u32 gMonFrontPic_HoopaConfined[]; extern const u32 gMonFrontPic_Volcanion[]; #endif #if P_GEN_7_POKEMON == TRUE @@ -906,12 +930,12 @@ extern const u32 gMonFrontPic_Charjabug[]; extern const u32 gMonFrontPic_Vikavolt[]; extern const u32 gMonFrontPic_Crabrawler[]; extern const u32 gMonFrontPic_Crabominable[]; -extern const u32 gMonFrontPic_Oricorio[]; +extern const u32 gMonFrontPic_OricorioBaile[]; extern const u32 gMonFrontPic_Cutiefly[]; extern const u32 gMonFrontPic_Ribombee[]; extern const u32 gMonFrontPic_Rockruff[]; -extern const u32 gMonFrontPic_Lycanroc[]; -extern const u32 gMonFrontPic_Wishiwashi[]; +extern const u32 gMonFrontPic_LycanrocMidday[]; +extern const u32 gMonFrontPic_WishiwashiSolo[]; extern const u32 gMonFrontPic_Mareanie[]; extern const u32 gMonFrontPic_Toxapex[]; extern const u32 gMonFrontPic_Mudbray[]; @@ -939,11 +963,11 @@ extern const u32 gMonFrontPic_Palossand[]; extern const u32 gMonFrontPic_Pyukumuku[]; extern const u32 gMonFrontPic_TypeNull[]; extern const u32 gMonFrontPic_Silvally[]; -extern const u32 gMonFrontPic_Minior[]; +extern const u32 gMonFrontPic_MiniorMeteor[]; extern const u32 gMonFrontPic_Komala[]; extern const u32 gMonFrontPic_Turtonator[]; extern const u32 gMonFrontPic_Togedemaru[]; -extern const u32 gMonFrontPic_Mimikyu[]; +extern const u32 gMonFrontPic_MimikyuDisguised[]; extern const u32 gMonFrontPic_Bruxish[]; extern const u32 gMonFrontPic_Drampa[]; extern const u32 gMonFrontPic_Dhelmise[]; @@ -1016,7 +1040,7 @@ extern const u32 gMonFrontPic_Cramorant[]; extern const u32 gMonFrontPic_Arrokuda[]; extern const u32 gMonFrontPic_Barraskewda[]; extern const u32 gMonFrontPic_Toxel[]; -extern const u32 gMonFrontPic_Toxtricity[]; +extern const u32 gMonFrontPic_ToxtricityAmped[]; extern const u32 gMonFrontPic_Sizzlipede[]; extern const u32 gMonFrontPic_Centiskorch[]; extern const u32 gMonFrontPic_Clobbopus[]; @@ -1042,9 +1066,9 @@ extern const u32 gMonFrontPic_Pincurchin[]; extern const u32 gMonFrontPic_Snom[]; extern const u32 gMonFrontPic_Frosmoth[]; extern const u32 gMonFrontPic_Stonjourner[]; -extern const u32 gMonFrontPic_Eiscue[]; -extern const u32 gMonFrontPic_Indeedee[]; -extern const u32 gMonFrontPic_Morpeko[]; +extern const u32 gMonFrontPic_EiscueFace[]; +extern const u32 gMonFrontPic_IndeedeeMale[]; +extern const u32 gMonFrontPic_MorpekoFullBelly[]; extern const u32 gMonFrontPic_Cufant[]; extern const u32 gMonFrontPic_Copperajah[]; extern const u32 gMonFrontPic_Dracozolt[]; @@ -1055,11 +1079,11 @@ extern const u32 gMonFrontPic_Duraludon[]; extern const u32 gMonFrontPic_Dreepy[]; extern const u32 gMonFrontPic_Drakloak[]; extern const u32 gMonFrontPic_Dragapult[]; -extern const u32 gMonFrontPic_Zacian[]; -extern const u32 gMonFrontPic_Zamazenta[]; +extern const u32 gMonFrontPic_ZacianHeroOfManyBattles[]; +extern const u32 gMonFrontPic_ZamazentaHeroOfManyBattles[]; extern const u32 gMonFrontPic_Eternatus[]; extern const u32 gMonFrontPic_Kubfu[]; -extern const u32 gMonFrontPic_Urshifu[]; +extern const u32 gMonFrontPic_UrshifuSingleStrikeStyle[]; extern const u32 gMonFrontPic_Zarude[]; extern const u32 gMonFrontPic_Regieleki[]; extern const u32 gMonFrontPic_Regidrago[]; @@ -1069,10 +1093,16 @@ extern const u32 gMonFrontPic_Calyrex[]; extern const u32 gMonFrontPic_Wyrdeer[]; extern const u32 gMonFrontPic_Kleavor[]; extern const u32 gMonFrontPic_Ursaluna[]; -extern const u32 gMonFrontPic_Basculegion[]; +extern const u32 gMonFrontPic_UrsalunaBloodmoon[]; +extern const u32 gMonPalette_UrsalunaBloodmoon[]; +extern const u32 gMonBackPic_UrsalunaBloodmoon[]; +extern const u32 gMonShinyPalette_UrsalunaBloodmoon[]; +extern const u8 gMonIcon_UrsalunaBloodmoon[]; +extern const u8 gMonFootprint_UrsalunaBloodmoon[]; +extern const u32 gMonFrontPic_BasculegionMale[]; extern const u32 gMonFrontPic_Sneasler[]; extern const u32 gMonFrontPic_Overqwil[]; -extern const u32 gMonFrontPic_Enamorus[]; +extern const u32 gMonFrontPic_EnamorusIncarnate[]; #endif extern const u32 gMonFrontPic_VenusaurMega[]; extern const u32 gMonFrontPic_CharizardMegaX[]; @@ -1165,7 +1195,7 @@ extern const u32 gMonFrontPic_ZigzagoonGalarian[]; extern const u32 gMonFrontPic_LinooneGalarian[]; #if P_GEN_5_POKEMON == TRUE extern const u32 gMonFrontPic_DarumakaGalarian[]; -extern const u32 gMonFrontPic_DarmanitanGalarian[]; +extern const u32 gMonFrontPic_DarmanitanGalarianStandardMode[]; extern const u32 gMonFrontPic_YamaskGalarian[]; extern const u32 gMonFrontPic_StunfiskGalarian[]; #endif @@ -1262,7 +1292,7 @@ extern const u32 gMonFrontPic_ShayminSky[]; extern const u32 gMonFrontPic_BasculinBlueStriped[]; extern const u32 gMonFrontPic_BasculinWhiteStriped[]; extern const u32 gMonFrontPic_DarmanitanZenMode[]; -extern const u32 gMonFrontPic_DarmanitanZenModeGalarian[]; +extern const u32 gMonFrontPic_DarmanitanGalarianZenMode[]; extern const u32 gMonFrontPic_SawsbuckSummer[]; extern const u32 gMonFrontPic_SawsbuckAutumn[]; extern const u32 gMonFrontPic_SawsbuckWinter[]; @@ -1338,14 +1368,6 @@ extern const u32 gMonFrontPic_MagearnaOriginalColor[]; extern const u32 gMonFrontPic_CramorantGulping[]; extern const u32 gMonFrontPic_CramorantGorging[]; extern const u32 gMonFrontPic_ToxtricityLowKey[]; -extern const u32 gMonFrontPic_AlcremieRubyCream[]; -extern const u32 gMonFrontPic_AlcremieMatchaCream[]; -extern const u32 gMonFrontPic_AlcremieMintCream[]; -extern const u32 gMonFrontPic_AlcremieLemonCream[]; -extern const u32 gMonFrontPic_AlcremieSaltedCream[]; -extern const u32 gMonFrontPic_AlcremieRubySwirl[]; -extern const u32 gMonFrontPic_AlcremieCaramelSwirl[]; -extern const u32 gMonFrontPic_AlcremieRainbowSwirl[]; extern const u32 gMonFrontPic_EiscueNoiceFace[]; extern const u32 gMonFrontPic_IndeedeeFemale[]; extern const u32 gMonFrontPic_MorpekoHangry[]; @@ -1770,7 +1792,7 @@ extern const u32 gMonBackPic_Armaldo[]; extern const u32 gMonBackPic_Feebas[]; extern const u32 gMonBackPic_Milotic[]; extern const u32 gMonBackPic_MiloticF[]; -extern const u32 gMonBackPic_Castform[]; +extern const u32 gMonBackPic_CastformNormal[]; extern const u32 gMonBackPic_Kecleon[]; extern const u32 gMonBackPic_Shuppet[]; extern const u32 gMonBackPic_Banette[]; @@ -1806,7 +1828,7 @@ extern const u32 gMonBackPic_Kyogre[]; extern const u32 gMonBackPic_Groudon[]; extern const u32 gMonBackPic_Rayquaza[]; extern const u32 gMonBackPic_Jirachi[]; -extern const u32 gMonBackPic_Deoxys[]; +extern const u32 gMonBackPic_DeoxysNormal[]; #if P_GEN_4_POKEMON == TRUE extern const u32 gMonBackPic_Turtwig[]; extern const u32 gMonBackPic_Grotle[]; @@ -1842,8 +1864,8 @@ extern const u32 gMonBackPic_Cranidos[]; extern const u32 gMonBackPic_Rampardos[]; extern const u32 gMonBackPic_Shieldon[]; extern const u32 gMonBackPic_Bastiodon[]; -extern const u32 gMonBackPic_Burmy[]; -extern const u32 gMonBackPic_Wormadam[]; +extern const u32 gMonBackPic_BurmyPlantCloak[]; +extern const u32 gMonBackPic_WormadamPlantCloak[]; extern const u32 gMonBackPic_Mothim[]; extern const u32 gMonBackPic_Combee[]; extern const u32 gMonBackPic_Vespiquen[]; @@ -1853,9 +1875,9 @@ extern const u32 gMonBackPic_BuizelF[]; extern const u32 gMonBackPic_Floatzel[]; extern const u32 gMonBackPic_FloatzelF[]; extern const u32 gMonBackPic_Cherubi[]; -extern const u32 gMonBackPic_Cherrim[]; -extern const u32 gMonBackPic_Shellos[]; -extern const u32 gMonBackPic_Gastrodon[]; +extern const u32 gMonBackPic_CherrimOvercast[]; +extern const u32 gMonBackPic_ShellosWestSea[]; +extern const u32 gMonBackPic_GastrodonWestSea[]; extern const u32 gMonBackPic_Ambipom[]; extern const u32 gMonBackPic_AmbipomF[]; extern const u32 gMonBackPic_Drifloon[]; @@ -1929,12 +1951,12 @@ extern const u32 gMonBackPic_Dialga[]; extern const u32 gMonBackPic_Palkia[]; extern const u32 gMonBackPic_Heatran[]; extern const u32 gMonBackPic_Regigigas[]; -extern const u32 gMonBackPic_Giratina[]; +extern const u32 gMonBackPic_GiratinaAltered[]; extern const u32 gMonBackPic_Cresselia[]; extern const u32 gMonBackPic_Phione[]; extern const u32 gMonBackPic_Manaphy[]; extern const u32 gMonBackPic_Darkrai[]; -extern const u32 gMonBackPic_Shaymin[]; +extern const u32 gMonBackPic_ShayminLand[]; extern const u32 gMonBackPic_Arceus[]; #endif #if P_GEN_5_POKEMON == TRUE @@ -1995,12 +2017,12 @@ extern const u32 gMonBackPic_Cottonee[]; extern const u32 gMonBackPic_Whimsicott[]; extern const u32 gMonBackPic_Petilil[]; extern const u32 gMonBackPic_Lilligant[]; -extern const u32 gMonBackPic_Basculin[]; +extern const u32 gMonBackPic_BasculinRedStriped[]; extern const u32 gMonBackPic_Sandile[]; extern const u32 gMonBackPic_Krokorok[]; extern const u32 gMonBackPic_Krookodile[]; extern const u32 gMonBackPic_Darumaka[]; -extern const u32 gMonBackPic_Darmanitan[]; +extern const u32 gMonBackPic_DarmanitanStandardMode[]; extern const u32 gMonBackPic_Maractus[]; extern const u32 gMonBackPic_Dwebble[]; extern const u32 gMonBackPic_Crustle[]; @@ -2031,7 +2053,7 @@ extern const u32 gMonBackPic_Vanillite[]; extern const u32 gMonBackPic_Vanillish[]; extern const u32 gMonBackPic_Vanilluxe[]; extern const u32 gMonBackPic_Deerling[]; -extern const u32 gMonBackPic_Sawsbuck[]; +extern const u32 gMonBackPic_SawsbuckSpring[]; extern const u32 gMonBackPic_Emolga[]; extern const u32 gMonBackPic_Karrablast[]; extern const u32 gMonBackPic_Escavalier[]; @@ -2088,14 +2110,14 @@ extern const u32 gMonBackPic_Volcarona[]; extern const u32 gMonBackPic_Cobalion[]; extern const u32 gMonBackPic_Terrakion[]; extern const u32 gMonBackPic_Virizion[]; -extern const u32 gMonBackPic_Tornadus[]; -extern const u32 gMonBackPic_Thundurus[]; +extern const u32 gMonBackPic_TornadusIncarnate[]; +extern const u32 gMonBackPic_ThundurusIncarnate[]; extern const u32 gMonBackPic_Reshiram[]; extern const u32 gMonBackPic_Zekrom[]; -extern const u32 gMonBackPic_Landorus[]; +extern const u32 gMonBackPic_LandorusIncarnate[]; extern const u32 gMonBackPic_Kyurem[]; -extern const u32 gMonBackPic_Keldeo[]; -extern const u32 gMonBackPic_Meloetta[]; +extern const u32 gMonBackPic_KeldeoOrdinary[]; +extern const u32 gMonBackPic_MeloettaAria[]; extern const u32 gMonBackPic_Genesect[]; #endif #if P_GEN_6_POKEMON == TRUE @@ -2115,7 +2137,7 @@ extern const u32 gMonBackPic_Fletchinder[]; extern const u32 gMonBackPic_Talonflame[]; extern const u32 gMonBackPic_Scatterbug[]; extern const u32 gMonBackPic_Spewpa[]; -extern const u32 gMonBackPic_Vivillon[]; +extern const u32 gMonBackPic_VivillonIcySnow[]; extern const u32 gMonBackPic_Litleo[]; extern const u32 gMonBackPic_Pyroar[]; extern const u32 gMonBackPic_PyroarF[]; @@ -2126,12 +2148,12 @@ extern const u32 gMonBackPic_Skiddo[]; extern const u32 gMonBackPic_Gogoat[]; extern const u32 gMonBackPic_Pancham[]; extern const u32 gMonBackPic_Pangoro[]; -extern const u32 gMonBackPic_Furfrou[]; +extern const u32 gMonBackPic_FurfrouNatural[]; extern const u32 gMonBackPic_Espurr[]; -extern const u32 gMonBackPic_Meowstic[]; +extern const u32 gMonBackPic_MeowsticMale[]; extern const u32 gMonBackPic_Honedge[]; extern const u32 gMonBackPic_Doublade[]; -extern const u32 gMonBackPic_Aegislash[]; +extern const u32 gMonBackPic_AegislashShield[]; extern const u32 gMonBackPic_Spritzee[]; extern const u32 gMonBackPic_Aromatisse[]; extern const u32 gMonBackPic_Swirlix[]; @@ -2160,17 +2182,17 @@ extern const u32 gMonBackPic_Goodra[]; extern const u32 gMonBackPic_Klefki[]; extern const u32 gMonBackPic_Phantump[]; extern const u32 gMonBackPic_Trevenant[]; -extern const u32 gMonBackPic_Pumpkaboo[]; -extern const u32 gMonBackPic_Gourgeist[]; +extern const u32 gMonBackPic_PumpkabooAverage[]; +extern const u32 gMonBackPic_GourgeistAverage[]; extern const u32 gMonBackPic_Bergmite[]; extern const u32 gMonBackPic_Avalugg[]; extern const u32 gMonBackPic_Noibat[]; extern const u32 gMonBackPic_Noivern[]; -extern const u32 gMonBackPic_Xerneas[]; +extern const u32 gMonBackPic_XerneasNeutral[]; extern const u32 gMonBackPic_Yveltal[]; -extern const u32 gMonBackPic_Zygarde[]; +extern const u32 gMonBackPic_Zygarde50[]; extern const u32 gMonBackPic_Diancie[]; -extern const u32 gMonBackPic_Hoopa[]; +extern const u32 gMonBackPic_HoopaConfined[]; extern const u32 gMonBackPic_Volcanion[]; #endif #if P_GEN_7_POKEMON == TRUE @@ -2193,12 +2215,12 @@ extern const u32 gMonBackPic_Charjabug[]; extern const u32 gMonBackPic_Vikavolt[]; extern const u32 gMonBackPic_Crabrawler[]; extern const u32 gMonBackPic_Crabominable[]; -extern const u32 gMonBackPic_Oricorio[]; +extern const u32 gMonBackPic_OricorioBaile[]; extern const u32 gMonBackPic_Cutiefly[]; extern const u32 gMonBackPic_Ribombee[]; extern const u32 gMonBackPic_Rockruff[]; -extern const u32 gMonBackPic_Lycanroc[]; -extern const u32 gMonBackPic_Wishiwashi[]; +extern const u32 gMonBackPic_LycanrocMidday[]; +extern const u32 gMonBackPic_WishiwashiSolo[]; extern const u32 gMonBackPic_Mareanie[]; extern const u32 gMonBackPic_Toxapex[]; extern const u32 gMonBackPic_Mudbray[]; @@ -2226,11 +2248,11 @@ extern const u32 gMonBackPic_Palossand[]; extern const u32 gMonBackPic_Pyukumuku[]; extern const u32 gMonBackPic_TypeNull[]; extern const u32 gMonBackPic_Silvally[]; -extern const u32 gMonBackPic_Minior[]; +extern const u32 gMonBackPic_MiniorMeteor[]; extern const u32 gMonBackPic_Komala[]; extern const u32 gMonBackPic_Turtonator[]; extern const u32 gMonBackPic_Togedemaru[]; -extern const u32 gMonBackPic_Mimikyu[]; +extern const u32 gMonBackPic_MimikyuDisguised[]; extern const u32 gMonBackPic_Bruxish[]; extern const u32 gMonBackPic_Drampa[]; extern const u32 gMonBackPic_Dhelmise[]; @@ -2303,7 +2325,7 @@ extern const u32 gMonBackPic_Cramorant[]; extern const u32 gMonBackPic_Arrokuda[]; extern const u32 gMonBackPic_Barraskewda[]; extern const u32 gMonBackPic_Toxel[]; -extern const u32 gMonBackPic_Toxtricity[]; +extern const u32 gMonBackPic_ToxtricityAmped[]; extern const u32 gMonBackPic_Sizzlipede[]; extern const u32 gMonBackPic_Centiskorch[]; extern const u32 gMonBackPic_Clobbopus[]; @@ -2329,9 +2351,9 @@ extern const u32 gMonBackPic_Pincurchin[]; extern const u32 gMonBackPic_Snom[]; extern const u32 gMonBackPic_Frosmoth[]; extern const u32 gMonBackPic_Stonjourner[]; -extern const u32 gMonBackPic_Eiscue[]; -extern const u32 gMonBackPic_Indeedee[]; -extern const u32 gMonBackPic_Morpeko[]; +extern const u32 gMonBackPic_EiscueIceFace[]; +extern const u32 gMonBackPic_IndeedeeMale[]; +extern const u32 gMonBackPic_MorpekoFullBelly[]; extern const u32 gMonBackPic_Cufant[]; extern const u32 gMonBackPic_Copperajah[]; extern const u32 gMonBackPic_Dracozolt[]; @@ -2342,11 +2364,11 @@ extern const u32 gMonBackPic_Duraludon[]; extern const u32 gMonBackPic_Dreepy[]; extern const u32 gMonBackPic_Drakloak[]; extern const u32 gMonBackPic_Dragapult[]; -extern const u32 gMonBackPic_Zacian[]; -extern const u32 gMonBackPic_Zamazenta[]; +extern const u32 gMonBackPic_ZacianHeroOfManyBattles[]; +extern const u32 gMonBackPic_ZamazentaHeroOfManyBattles[]; extern const u32 gMonBackPic_Eternatus[]; extern const u32 gMonBackPic_Kubfu[]; -extern const u32 gMonBackPic_Urshifu[]; +extern const u32 gMonBackPic_UrshifuSingleStrikeStyle[]; extern const u32 gMonBackPic_Zarude[]; extern const u32 gMonBackPic_Regieleki[]; extern const u32 gMonBackPic_Regidrago[]; @@ -2356,10 +2378,10 @@ extern const u32 gMonBackPic_Calyrex[]; extern const u32 gMonBackPic_Wyrdeer[]; extern const u32 gMonBackPic_Kleavor[]; extern const u32 gMonBackPic_Ursaluna[]; -extern const u32 gMonBackPic_Basculegion[]; +extern const u32 gMonBackPic_BasculegionMale[]; extern const u32 gMonBackPic_Sneasler[]; extern const u32 gMonBackPic_Overqwil[]; -extern const u32 gMonBackPic_Enamorus[]; +extern const u32 gMonBackPic_EnamorusIncarnate[]; #endif extern const u32 gMonBackPic_VenusaurMega[]; extern const u32 gMonBackPic_CharizardMegaX[]; @@ -2452,7 +2474,7 @@ extern const u32 gMonBackPic_ZigzagoonGalarian[]; extern const u32 gMonBackPic_LinooneGalarian[]; #if P_GEN_5_POKEMON == TRUE extern const u32 gMonBackPic_DarumakaGalarian[]; -extern const u32 gMonBackPic_DarmanitanGalarian[]; +extern const u32 gMonBackPic_DarmanitanGalarianStandardMode[]; extern const u32 gMonBackPic_YamaskGalarian[]; extern const u32 gMonBackPic_StunfiskGalarian[]; #endif @@ -2549,7 +2571,7 @@ extern const u32 gMonBackPic_ShayminSky[]; extern const u32 gMonBackPic_BasculinBlueStriped[]; extern const u32 gMonBackPic_BasculinWhiteStriped[]; extern const u32 gMonBackPic_DarmanitanZenMode[]; -extern const u32 gMonBackPic_DarmanitanZenModeGalarian[]; +extern const u32 gMonBackPic_DarmanitanGalarianZenMode[]; extern const u32 gMonBackPic_SawsbuckSummer[]; extern const u32 gMonBackPic_SawsbuckAutumn[]; extern const u32 gMonBackPic_SawsbuckWinter[]; @@ -2623,14 +2645,6 @@ extern const u32 gMonBackPic_MagearnaOriginalColor[]; extern const u32 gMonBackPic_CramorantGulping[]; extern const u32 gMonBackPic_CramorantGorging[]; extern const u32 gMonBackPic_ToxtricityLowKey[]; -extern const u32 gMonBackPic_AlcremieRubyCream[]; -extern const u32 gMonBackPic_AlcremieMatchaCream[]; -extern const u32 gMonBackPic_AlcremieMintCream[]; -extern const u32 gMonBackPic_AlcremieLemonCream[]; -extern const u32 gMonBackPic_AlcremieSaltedCream[]; -extern const u32 gMonBackPic_AlcremieRubySwirl[]; -extern const u32 gMonBackPic_AlcremieCaramelSwirl[]; -extern const u32 gMonBackPic_AlcremieRainbowSwirl[]; extern const u32 gMonBackPic_EiscueNoiceFace[]; extern const u32 gMonBackPic_IndeedeeFemale[]; extern const u32 gMonBackPic_MorpekoHangry[]; @@ -2643,6 +2657,39 @@ extern const u32 gMonBackPic_CalyrexIceRider[]; extern const u32 gMonBackPic_CalyrexShadowRider[]; extern const u32 gMonBackPic_EnamorusTherian[]; extern const u32 gMonBackPic_BasculegionFemale[]; +extern const u32 gMonBackPic_VenusaurGigantamax[]; +extern const u32 gMonBackPic_CharizardGigantamax[]; +extern const u32 gMonBackPic_BlastoiseGigantamax[]; +extern const u32 gMonBackPic_ButterfreeGigantamax[]; +extern const u32 gMonBackPic_PikachuGigantamax[]; +extern const u32 gMonBackPic_MeowthGigantamax[]; +extern const u32 gMonBackPic_MachampGigantamax[]; +extern const u32 gMonBackPic_GengarGigantamax[]; +extern const u32 gMonBackPic_KinglerGigantamax[]; +extern const u32 gMonBackPic_LaprasGigantamax[]; +extern const u32 gMonBackPic_EeveeGigantamax[]; +extern const u32 gMonBackPic_SnorlaxGigantamax[]; +extern const u32 gMonBackPic_GarbodorGigantamax[]; +extern const u32 gMonBackPic_MelmetalGigantamax[]; +extern const u32 gMonBackPic_RillaboomGigantamax[]; +extern const u32 gMonBackPic_CinderaceGigantamax[]; +extern const u32 gMonBackPic_InteleonGigantamax[]; +extern const u32 gMonBackPic_CorviknightGigantamax[]; +extern const u32 gMonBackPic_OrbeetleGigantamax[]; +extern const u32 gMonBackPic_DrednawGigantamax[]; +extern const u32 gMonBackPic_CoalossalGigantamax[]; +extern const u32 gMonBackPic_FlappleGigantamax[]; +extern const u32 gMonBackPic_AppletunGigantamax[]; +extern const u32 gMonBackPic_SandacondaGigantamax[]; +extern const u32 gMonBackPic_ToxtricityGigantamax[]; +extern const u32 gMonBackPic_CentiskorchGigantamax[]; +extern const u32 gMonBackPic_HattereneGigantamax[]; +extern const u32 gMonBackPic_GrimmsnarlGigantamax[]; +extern const u32 gMonBackPic_AlcremieGigantamax[]; +extern const u32 gMonBackPic_CopperajahGigantamax[]; +extern const u32 gMonBackPic_DuraludonGigantamax[]; +extern const u32 gMonBackPic_UrshifuSingleStrikeGigantamax[]; +extern const u32 gMonBackPic_UrshifuRapidStrikeGigantamax[]; #endif extern const u32 gMonPalette_CircledQuestionMark[]; @@ -2997,7 +3044,7 @@ extern const u32 gMonPalette_Anorith[]; extern const u32 gMonPalette_Armaldo[]; extern const u32 gMonPalette_Feebas[]; extern const u32 gMonPalette_Milotic[]; -extern const u32 gMonPalette_Castform[]; +extern const u32 gMonPalette_CastformNormal[]; extern const u32 gMonPalette_Kecleon[]; extern const u32 gMonPalette_Shuppet[]; extern const u32 gMonPalette_Banette[]; @@ -3032,7 +3079,7 @@ extern const u32 gMonPalette_Kyogre[]; extern const u32 gMonPalette_Groudon[]; extern const u32 gMonPalette_Rayquaza[]; extern const u32 gMonPalette_Jirachi[]; -extern const u32 gMonPalette_Deoxys[]; +extern const u32 gMonPalette_DeoxysNormal[]; #if P_GEN_4_POKEMON == TRUE extern const u32 gMonPalette_Turtwig[]; extern const u32 gMonPalette_Grotle[]; @@ -3059,8 +3106,8 @@ extern const u32 gMonPalette_Cranidos[]; extern const u32 gMonPalette_Rampardos[]; extern const u32 gMonPalette_Shieldon[]; extern const u32 gMonPalette_Bastiodon[]; -extern const u32 gMonPalette_Burmy[]; -extern const u32 gMonPalette_Wormadam[]; +extern const u32 gMonPalette_BurmyPlantCloak[]; +extern const u32 gMonPalette_WormadamPlantCloak[]; extern const u32 gMonPalette_Mothim[]; extern const u32 gMonPalette_Combee[]; extern const u32 gMonPalette_CombeeF[]; @@ -3069,9 +3116,9 @@ extern const u32 gMonPalette_Pachirisu[]; extern const u32 gMonPalette_Buizel[]; extern const u32 gMonPalette_Floatzel[]; extern const u32 gMonPalette_Cherubi[]; -extern const u32 gMonPalette_Cherrim[]; -extern const u32 gMonPalette_Shellos[]; -extern const u32 gMonPalette_Gastrodon[]; +extern const u32 gMonPalette_CherrimOvercast[]; +extern const u32 gMonPalette_ShellosWestSea[]; +extern const u32 gMonPalette_GastrodonWestSea[]; extern const u32 gMonPalette_Ambipom[]; extern const u32 gMonPalette_Drifloon[]; extern const u32 gMonPalette_Drifblim[]; @@ -3137,12 +3184,12 @@ extern const u32 gMonPalette_Dialga[]; extern const u32 gMonPalette_Palkia[]; extern const u32 gMonPalette_Heatran[]; extern const u32 gMonPalette_Regigigas[]; -extern const u32 gMonPalette_Giratina[]; +extern const u32 gMonPalette_GiratinaAltered[]; extern const u32 gMonPalette_Cresselia[]; extern const u32 gMonPalette_Phione[]; extern const u32 gMonPalette_Manaphy[]; extern const u32 gMonPalette_Darkrai[]; -extern const u32 gMonPalette_Shaymin[]; +extern const u32 gMonPalette_ShayminLand[]; extern const u32 gMonPalette_Arceus[]; #endif #if P_GEN_5_POKEMON == TRUE @@ -3203,12 +3250,12 @@ extern const u32 gMonPalette_Cottonee[]; extern const u32 gMonPalette_Whimsicott[]; extern const u32 gMonPalette_Petilil[]; extern const u32 gMonPalette_Lilligant[]; -extern const u32 gMonPalette_Basculin[]; +extern const u32 gMonPalette_BasculinRedStriped[]; extern const u32 gMonPalette_Sandile[]; extern const u32 gMonPalette_Krokorok[]; extern const u32 gMonPalette_Krookodile[]; extern const u32 gMonPalette_Darumaka[]; -extern const u32 gMonPalette_Darmanitan[]; +extern const u32 gMonPalette_DarmanitanStandardMode[]; extern const u32 gMonPalette_Maractus[]; extern const u32 gMonPalette_Dwebble[]; extern const u32 gMonPalette_Crustle[]; @@ -3238,8 +3285,8 @@ extern const u32 gMonPalette_Swanna[]; extern const u32 gMonPalette_Vanillite[]; extern const u32 gMonPalette_Vanillish[]; extern const u32 gMonPalette_Vanilluxe[]; -extern const u32 gMonPalette_Deerling[]; -extern const u32 gMonPalette_Sawsbuck[]; +extern const u32 gMonPalette_DeerlingSpring[]; +extern const u32 gMonPalette_SawsbuckSpring[]; extern const u32 gMonPalette_Emolga[]; extern const u32 gMonPalette_Karrablast[]; extern const u32 gMonPalette_Escavalier[]; @@ -3296,14 +3343,14 @@ extern const u32 gMonPalette_Volcarona[]; extern const u32 gMonPalette_Cobalion[]; extern const u32 gMonPalette_Terrakion[]; extern const u32 gMonPalette_Virizion[]; -extern const u32 gMonPalette_Tornadus[]; -extern const u32 gMonPalette_Thundurus[]; +extern const u32 gMonPalette_TornadusIncarnate[]; +extern const u32 gMonPalette_ThundurusIncarnate[]; extern const u32 gMonPalette_Reshiram[]; extern const u32 gMonPalette_Zekrom[]; -extern const u32 gMonPalette_Landorus[]; +extern const u32 gMonPalette_LandorusIncarnate[]; extern const u32 gMonPalette_Kyurem[]; -extern const u32 gMonPalette_Keldeo[]; -extern const u32 gMonPalette_Meloetta[]; +extern const u32 gMonPalette_KeldeoOrdinary[]; +extern const u32 gMonPalette_MeloettaAria[]; extern const u32 gMonPalette_Genesect[]; #endif #if P_GEN_6_POKEMON == TRUE @@ -3323,22 +3370,22 @@ extern const u32 gMonPalette_Fletchinder[]; extern const u32 gMonPalette_Talonflame[]; extern const u32 gMonPalette_Scatterbug[]; extern const u32 gMonPalette_Spewpa[]; -extern const u32 gMonPalette_Vivillon[]; +extern const u32 gMonPalette_VivillonIcySnow[]; extern const u32 gMonPalette_Litleo[]; extern const u32 gMonPalette_Pyroar[]; -extern const u32 gMonPalette_Flabebe[]; -extern const u32 gMonPalette_Floette[]; -extern const u32 gMonPalette_Florges[]; +extern const u32 gMonPalette_FlabebeRedFlower[]; +extern const u32 gMonPalette_FloetteRedFlower[]; +extern const u32 gMonPalette_FlorgesRedFlower[]; extern const u32 gMonPalette_Skiddo[]; extern const u32 gMonPalette_Gogoat[]; extern const u32 gMonPalette_Pancham[]; extern const u32 gMonPalette_Pangoro[]; -extern const u32 gMonPalette_Furfrou[]; +extern const u32 gMonPalette_FurfrouNatural[]; extern const u32 gMonPalette_Espurr[]; -extern const u32 gMonPalette_Meowstic[]; +extern const u32 gMonPalette_MeowsticMale[]; extern const u32 gMonPalette_Honedge[]; extern const u32 gMonPalette_Doublade[]; -extern const u32 gMonPalette_Aegislash[]; +extern const u32 gMonPalette_AegislashShield[]; extern const u32 gMonPalette_Spritzee[]; extern const u32 gMonPalette_Aromatisse[]; extern const u32 gMonPalette_Swirlix[]; @@ -3373,11 +3420,11 @@ extern const u32 gMonPalette_Bergmite[]; extern const u32 gMonPalette_Avalugg[]; extern const u32 gMonPalette_Noibat[]; extern const u32 gMonPalette_Noivern[]; -extern const u32 gMonPalette_Xerneas[]; +extern const u32 gMonPalette_XerneasNeutral[]; extern const u32 gMonPalette_Yveltal[]; -extern const u32 gMonPalette_Zygarde[]; +extern const u32 gMonPalette_Zygarde50[]; extern const u32 gMonPalette_Diancie[]; -extern const u32 gMonPalette_Hoopa[]; +extern const u32 gMonPalette_HoopaConfined[]; extern const u32 gMonPalette_Volcanion[]; #endif #if P_GEN_7_POKEMON == TRUE @@ -3400,12 +3447,12 @@ extern const u32 gMonPalette_Charjabug[]; extern const u32 gMonPalette_Vikavolt[]; extern const u32 gMonPalette_Crabrawler[]; extern const u32 gMonPalette_Crabominable[]; -extern const u32 gMonPalette_Oricorio[]; +extern const u32 gMonPalette_OricorioBaile[]; extern const u32 gMonPalette_Cutiefly[]; extern const u32 gMonPalette_Ribombee[]; extern const u32 gMonPalette_Rockruff[]; -extern const u32 gMonPalette_Lycanroc[]; -extern const u32 gMonPalette_Wishiwashi[]; +extern const u32 gMonPalette_LycanrocMidday[]; +extern const u32 gMonPalette_WishiwashiSolo[]; extern const u32 gMonPalette_Mareanie[]; extern const u32 gMonPalette_Toxapex[]; extern const u32 gMonPalette_Mudbray[]; @@ -3432,12 +3479,12 @@ extern const u32 gMonPalette_Sandygast[]; extern const u32 gMonPalette_Palossand[]; extern const u32 gMonPalette_Pyukumuku[]; extern const u32 gMonPalette_TypeNull[]; -extern const u32 gMonPalette_Silvally[]; -extern const u32 gMonPalette_Minior[]; +extern const u32 gMonPalette_SilvallyNormal[]; +extern const u32 gMonPalette_MiniorMeteor[]; extern const u32 gMonPalette_Komala[]; extern const u32 gMonPalette_Turtonator[]; extern const u32 gMonPalette_Togedemaru[]; -extern const u32 gMonPalette_Mimikyu[]; +extern const u32 gMonPalette_MimikyuDisguised[]; extern const u32 gMonPalette_Bruxish[]; extern const u32 gMonPalette_Drampa[]; extern const u32 gMonPalette_Dhelmise[]; @@ -3510,7 +3557,7 @@ extern const u32 gMonPalette_Cramorant[]; extern const u32 gMonPalette_Arrokuda[]; extern const u32 gMonPalette_Barraskewda[]; extern const u32 gMonPalette_Toxel[]; -extern const u32 gMonPalette_Toxtricity[]; +extern const u32 gMonPalette_ToxtricityAmped[]; extern const u32 gMonPalette_Sizzlipede[]; extern const u32 gMonPalette_Centiskorch[]; extern const u32 gMonPalette_Clobbopus[]; @@ -3536,9 +3583,9 @@ extern const u32 gMonPalette_Pincurchin[]; extern const u32 gMonPalette_Snom[]; extern const u32 gMonPalette_Frosmoth[]; extern const u32 gMonPalette_Stonjourner[]; -extern const u32 gMonPalette_Eiscue[]; -extern const u32 gMonPalette_Indeedee[]; -extern const u32 gMonPalette_Morpeko[]; +extern const u32 gMonPalette_EiscueIceFace[]; +extern const u32 gMonPalette_IndeedeeMale[]; +extern const u32 gMonPalette_MorpekoFullBelly[]; extern const u32 gMonPalette_Cufant[]; extern const u32 gMonPalette_Copperajah[]; extern const u32 gMonPalette_Dracozolt[]; @@ -3549,11 +3596,11 @@ extern const u32 gMonPalette_Duraludon[]; extern const u32 gMonPalette_Dreepy[]; extern const u32 gMonPalette_Drakloak[]; extern const u32 gMonPalette_Dragapult[]; -extern const u32 gMonPalette_Zacian[]; -extern const u32 gMonPalette_Zamazenta[]; +extern const u32 gMonPalette_ZacianHeroOfManyBattles[]; +extern const u32 gMonPalette_ZamazentaHeroOfManyBattles[]; extern const u32 gMonPalette_Eternatus[]; extern const u32 gMonPalette_Kubfu[]; -extern const u32 gMonPalette_Urshifu[]; +extern const u32 gMonPalette_UrshifuSingleStrikeStyle[]; extern const u32 gMonPalette_Zarude[]; extern const u32 gMonPalette_Regieleki[]; extern const u32 gMonPalette_Regidrago[]; @@ -3563,10 +3610,10 @@ extern const u32 gMonPalette_Calyrex[]; extern const u32 gMonPalette_Wyrdeer[]; extern const u32 gMonPalette_Kleavor[]; extern const u32 gMonPalette_Ursaluna[]; -extern const u32 gMonPalette_Basculegion[]; +extern const u32 gMonPalette_BasculegionMale[]; extern const u32 gMonPalette_Sneasler[]; extern const u32 gMonPalette_Overqwil[]; -extern const u32 gMonPalette_Enamorus[]; +extern const u32 gMonPalette_EnamorusIncarnate[]; #endif extern const u32 gMonPalette_VenusaurMega[]; extern const u32 gMonPalette_CharizardMegaX[]; @@ -3659,7 +3706,7 @@ extern const u32 gMonPalette_ZigzagoonGalarian[]; extern const u32 gMonPalette_LinooneGalarian[]; #if P_GEN_5_POKEMON == TRUE extern const u32 gMonPalette_DarumakaGalarian[]; -extern const u32 gMonPalette_DarmanitanGalarian[]; +extern const u32 gMonPalette_DarmanitanGalarianStandardMode[]; extern const u32 gMonPalette_YamaskGalarian[]; extern const u32 gMonPalette_StunfiskGalarian[]; #endif @@ -3745,7 +3792,7 @@ extern const u32 gMonPalette_ArceusFairy[]; extern const u32 gMonPalette_BasculinBlueStriped[]; extern const u32 gMonPalette_BasculinWhiteStriped[]; extern const u32 gMonPalette_DarmanitanZenMode[]; -extern const u32 gMonPalette_DarmanitanZenModeGalarian[]; +extern const u32 gMonPalette_DarmanitanGalarianZenMode[]; extern const u32 gMonPalette_DeerlingSummer[]; extern const u32 gMonPalette_DeerlingAutumn[]; extern const u32 gMonPalette_DeerlingWinter[]; @@ -3855,14 +3902,6 @@ extern const u32 gMonPalette_MagearnaOriginalColor[]; extern const u32 gMonPalette_CramorantGulping[]; extern const u32 gMonPalette_CramorantGorging[]; extern const u32 gMonPalette_ToxtricityLowKey[]; -extern const u32 gMonPalette_AlcremieRubyCream[]; -extern const u32 gMonPalette_AlcremieMatchaCream[]; -extern const u32 gMonPalette_AlcremieMintCream[]; -extern const u32 gMonPalette_AlcremieLemonCream[]; -extern const u32 gMonPalette_AlcremieSaltedCream[]; -extern const u32 gMonPalette_AlcremieRubySwirl[]; -extern const u32 gMonPalette_AlcremieCaramelSwirl[]; -extern const u32 gMonPalette_AlcremieRainbowSwirl[]; extern const u32 gMonPalette_EiscueNoiceFace[]; extern const u32 gMonPalette_IndeedeeFemale[]; extern const u32 gMonPalette_MorpekoHangry[]; @@ -3875,6 +3914,39 @@ extern const u32 gMonPalette_CalyrexIceRider[]; extern const u32 gMonPalette_CalyrexShadowRider[]; extern const u32 gMonPalette_EnamorusTherian[]; extern const u32 gMonPalette_BasculegionFemale[]; +extern const u32 gMonPalette_VenusaurGigantamax[]; +extern const u32 gMonPalette_CharizardGigantamax[]; +extern const u32 gMonPalette_BlastoiseGigantamax[]; +extern const u32 gMonPalette_ButterfreeGigantamax[]; +extern const u32 gMonPalette_PikachuGigantamax[]; +extern const u32 gMonPalette_MeowthGigantamax[]; +extern const u32 gMonPalette_MachampGigantamax[]; +extern const u32 gMonPalette_GengarGigantamax[]; +extern const u32 gMonPalette_KinglerGigantamax[]; +extern const u32 gMonPalette_LaprasGigantamax[]; +extern const u32 gMonPalette_EeveeGigantamax[]; +extern const u32 gMonPalette_SnorlaxGigantamax[]; +extern const u32 gMonPalette_GarbodorGigantamax[]; +extern const u32 gMonPalette_MelmetalGigantamax[]; +extern const u32 gMonPalette_RillaboomGigantamax[]; +extern const u32 gMonPalette_CinderaceGigantamax[]; +extern const u32 gMonPalette_InteleonGigantamax[]; +extern const u32 gMonPalette_CorviknightGigantamax[]; +extern const u32 gMonPalette_OrbeetleGigantamax[]; +extern const u32 gMonPalette_DrednawGigantamax[]; +extern const u32 gMonPalette_CoalossalGigantamax[]; +extern const u32 gMonPalette_FlappleGigantamax[]; +extern const u32 gMonPalette_AppletunGigantamax[]; +extern const u32 gMonPalette_SandacondaGigantamax[]; +extern const u32 gMonPalette_ToxtricityGigantamax[]; +extern const u32 gMonPalette_CentiskorchGigantamax[]; +extern const u32 gMonPalette_HattereneGigantamax[]; +extern const u32 gMonPalette_GrimmsnarlGigantamax[]; +extern const u32 gMonPalette_AlcremieGigantamax[]; +extern const u32 gMonPalette_CopperajahGigantamax[]; +extern const u32 gMonPalette_DuraludonGigantamax[]; +extern const u32 gMonPalette_UrshifuSingleStrikeGigantamax[]; +extern const u32 gMonPalette_UrshifuRapidStrikeGigantamax[]; #endif extern const u32 gMonPalette_Egg[]; @@ -4230,7 +4302,7 @@ extern const u32 gMonShinyPalette_Anorith[]; extern const u32 gMonShinyPalette_Armaldo[]; extern const u32 gMonShinyPalette_Feebas[]; extern const u32 gMonShinyPalette_Milotic[]; -extern const u32 gMonShinyPalette_Castform[]; +extern const u32 gMonShinyPalette_CastformNormal[]; extern const u32 gMonShinyPalette_Kecleon[]; extern const u32 gMonShinyPalette_Shuppet[]; extern const u32 gMonShinyPalette_Banette[]; @@ -4265,7 +4337,7 @@ extern const u32 gMonShinyPalette_Kyogre[]; extern const u32 gMonShinyPalette_Groudon[]; extern const u32 gMonShinyPalette_Rayquaza[]; extern const u32 gMonShinyPalette_Jirachi[]; -extern const u32 gMonShinyPalette_Deoxys[]; +extern const u32 gMonShinyPalette_DeoxysNormal[]; #if P_GEN_4_POKEMON == TRUE extern const u32 gMonShinyPalette_Turtwig[]; extern const u32 gMonShinyPalette_Grotle[]; @@ -4292,8 +4364,8 @@ extern const u32 gMonShinyPalette_Cranidos[]; extern const u32 gMonShinyPalette_Rampardos[]; extern const u32 gMonShinyPalette_Shieldon[]; extern const u32 gMonShinyPalette_Bastiodon[]; -extern const u32 gMonShinyPalette_Burmy[]; -extern const u32 gMonShinyPalette_Wormadam[]; +extern const u32 gMonShinyPalette_BurmyPlantCloak[]; +extern const u32 gMonShinyPalette_WormadamPlantCloak[]; extern const u32 gMonShinyPalette_Mothim[]; extern const u32 gMonShinyPalette_Combee[]; extern const u32 gMonShinyPalette_CombeeF[]; @@ -4302,9 +4374,9 @@ extern const u32 gMonShinyPalette_Pachirisu[]; extern const u32 gMonShinyPalette_Buizel[]; extern const u32 gMonShinyPalette_Floatzel[]; extern const u32 gMonShinyPalette_Cherubi[]; -extern const u32 gMonShinyPalette_Cherrim[]; -extern const u32 gMonShinyPalette_Shellos[]; -extern const u32 gMonShinyPalette_Gastrodon[]; +extern const u32 gMonShinyPalette_CherrimOvercast[]; +extern const u32 gMonShinyPalette_ShellosWestSea[]; +extern const u32 gMonShinyPalette_GastrodonWestSea[]; extern const u32 gMonShinyPalette_Ambipom[]; extern const u32 gMonShinyPalette_Drifloon[]; extern const u32 gMonShinyPalette_Drifblim[]; @@ -4370,12 +4442,12 @@ extern const u32 gMonShinyPalette_Dialga[]; extern const u32 gMonShinyPalette_Palkia[]; extern const u32 gMonShinyPalette_Heatran[]; extern const u32 gMonShinyPalette_Regigigas[]; -extern const u32 gMonShinyPalette_Giratina[]; +extern const u32 gMonShinyPalette_GiratinaAltered[]; extern const u32 gMonShinyPalette_Cresselia[]; extern const u32 gMonShinyPalette_Phione[]; extern const u32 gMonShinyPalette_Manaphy[]; extern const u32 gMonShinyPalette_Darkrai[]; -extern const u32 gMonShinyPalette_Shaymin[]; +extern const u32 gMonShinyPalette_ShayminLand[]; extern const u32 gMonShinyPalette_Arceus[]; #endif #if P_GEN_5_POKEMON == TRUE @@ -4436,12 +4508,12 @@ extern const u32 gMonShinyPalette_Cottonee[]; extern const u32 gMonShinyPalette_Whimsicott[]; extern const u32 gMonShinyPalette_Petilil[]; extern const u32 gMonShinyPalette_Lilligant[]; -extern const u32 gMonShinyPalette_Basculin[]; +extern const u32 gMonShinyPalette_BasculinRedStriped[]; extern const u32 gMonShinyPalette_Sandile[]; extern const u32 gMonShinyPalette_Krokorok[]; extern const u32 gMonShinyPalette_Krookodile[]; extern const u32 gMonShinyPalette_Darumaka[]; -extern const u32 gMonShinyPalette_Darmanitan[]; +extern const u32 gMonShinyPalette_DarmanitanStandardMode[]; extern const u32 gMonShinyPalette_Maractus[]; extern const u32 gMonShinyPalette_Dwebble[]; extern const u32 gMonShinyPalette_Crustle[]; @@ -4471,8 +4543,8 @@ extern const u32 gMonShinyPalette_Swanna[]; extern const u32 gMonShinyPalette_Vanillite[]; extern const u32 gMonShinyPalette_Vanillish[]; extern const u32 gMonShinyPalette_Vanilluxe[]; -extern const u32 gMonShinyPalette_Deerling[]; -extern const u32 gMonShinyPalette_Sawsbuck[]; +extern const u32 gMonShinyPalette_DeerlingSpring[]; +extern const u32 gMonShinyPalette_SawsbuckSpring[]; extern const u32 gMonShinyPalette_Emolga[]; extern const u32 gMonShinyPalette_Karrablast[]; extern const u32 gMonShinyPalette_Escavalier[]; @@ -4529,14 +4601,14 @@ extern const u32 gMonShinyPalette_Volcarona[]; extern const u32 gMonShinyPalette_Cobalion[]; extern const u32 gMonShinyPalette_Terrakion[]; extern const u32 gMonShinyPalette_Virizion[]; -extern const u32 gMonShinyPalette_Tornadus[]; -extern const u32 gMonShinyPalette_Thundurus[]; +extern const u32 gMonShinyPalette_TornadusIncarnate[]; +extern const u32 gMonShinyPalette_ThundurusIncarnate[]; extern const u32 gMonShinyPalette_Reshiram[]; extern const u32 gMonShinyPalette_Zekrom[]; -extern const u32 gMonShinyPalette_Landorus[]; +extern const u32 gMonShinyPalette_LandorusIncarnate[]; extern const u32 gMonShinyPalette_Kyurem[]; -extern const u32 gMonShinyPalette_Keldeo[]; -extern const u32 gMonShinyPalette_Meloetta[]; +extern const u32 gMonShinyPalette_KeldeoOrdinary[]; +extern const u32 gMonShinyPalette_MeloettaAria[]; extern const u32 gMonShinyPalette_Genesect[]; #endif #if P_GEN_6_POKEMON == TRUE @@ -4556,22 +4628,22 @@ extern const u32 gMonShinyPalette_Fletchinder[]; extern const u32 gMonShinyPalette_Talonflame[]; extern const u32 gMonShinyPalette_Scatterbug[]; extern const u32 gMonShinyPalette_Spewpa[]; -extern const u32 gMonShinyPalette_Vivillon[]; +extern const u32 gMonShinyPalette_VivillonIcySnow[]; extern const u32 gMonShinyPalette_Litleo[]; extern const u32 gMonShinyPalette_Pyroar[]; -extern const u32 gMonShinyPalette_Flabebe[]; -extern const u32 gMonShinyPalette_Floette[]; -extern const u32 gMonShinyPalette_Florges[]; +extern const u32 gMonShinyPalette_FlabebeRedFlower[]; +extern const u32 gMonShinyPalette_FloetteRedFlower[]; +extern const u32 gMonShinyPalette_FlorgesRedFlower[]; extern const u32 gMonShinyPalette_Skiddo[]; extern const u32 gMonShinyPalette_Gogoat[]; extern const u32 gMonShinyPalette_Pancham[]; extern const u32 gMonShinyPalette_Pangoro[]; -extern const u32 gMonShinyPalette_Furfrou[]; +extern const u32 gMonShinyPalette_FurfrouNatural[]; extern const u32 gMonShinyPalette_Espurr[]; -extern const u32 gMonShinyPalette_Meowstic[]; +extern const u32 gMonShinyPalette_MeowsticMale[]; extern const u32 gMonShinyPalette_Honedge[]; extern const u32 gMonShinyPalette_Doublade[]; -extern const u32 gMonShinyPalette_Aegislash[]; +extern const u32 gMonShinyPalette_AegislashShield[]; extern const u32 gMonShinyPalette_Spritzee[]; extern const u32 gMonShinyPalette_Aromatisse[]; extern const u32 gMonShinyPalette_Swirlix[]; @@ -4606,11 +4678,11 @@ extern const u32 gMonShinyPalette_Bergmite[]; extern const u32 gMonShinyPalette_Avalugg[]; extern const u32 gMonShinyPalette_Noibat[]; extern const u32 gMonShinyPalette_Noivern[]; -extern const u32 gMonShinyPalette_Xerneas[]; +extern const u32 gMonShinyPalette_XerneasNeutral[]; extern const u32 gMonShinyPalette_Yveltal[]; -extern const u32 gMonShinyPalette_Zygarde[]; +extern const u32 gMonShinyPalette_Zygarde50[]; extern const u32 gMonShinyPalette_Diancie[]; -extern const u32 gMonShinyPalette_Hoopa[]; +extern const u32 gMonShinyPalette_HoopaConfined[]; extern const u32 gMonShinyPalette_Volcanion[]; #endif #if P_GEN_7_POKEMON == TRUE @@ -4633,12 +4705,12 @@ extern const u32 gMonShinyPalette_Charjabug[]; extern const u32 gMonShinyPalette_Vikavolt[]; extern const u32 gMonShinyPalette_Crabrawler[]; extern const u32 gMonShinyPalette_Crabominable[]; -extern const u32 gMonShinyPalette_Oricorio[]; +extern const u32 gMonShinyPalette_OricorioBaile[]; extern const u32 gMonShinyPalette_Cutiefly[]; extern const u32 gMonShinyPalette_Ribombee[]; extern const u32 gMonShinyPalette_Rockruff[]; -extern const u32 gMonShinyPalette_Lycanroc[]; -extern const u32 gMonShinyPalette_Wishiwashi[]; +extern const u32 gMonShinyPalette_LycanrocMidday[]; +extern const u32 gMonShinyPalette_WishiwashiSolo[]; extern const u32 gMonShinyPalette_Mareanie[]; extern const u32 gMonShinyPalette_Toxapex[]; extern const u32 gMonShinyPalette_Mudbray[]; @@ -4665,12 +4737,12 @@ extern const u32 gMonShinyPalette_Sandygast[]; extern const u32 gMonShinyPalette_Palossand[]; extern const u32 gMonShinyPalette_Pyukumuku[]; extern const u32 gMonShinyPalette_TypeNull[]; -extern const u32 gMonShinyPalette_Silvally[]; -extern const u32 gMonShinyPalette_Minior[]; +extern const u32 gMonShinyPalette_SilvallyNormal[]; +extern const u32 gMonShinyPalette_MiniorMeteor[]; extern const u32 gMonShinyPalette_Komala[]; extern const u32 gMonShinyPalette_Turtonator[]; extern const u32 gMonShinyPalette_Togedemaru[]; -extern const u32 gMonShinyPalette_Mimikyu[]; +extern const u32 gMonShinyPalette_MimikyuDisguised[]; extern const u32 gMonShinyPalette_Bruxish[]; extern const u32 gMonShinyPalette_Drampa[]; extern const u32 gMonShinyPalette_Dhelmise[]; @@ -4743,7 +4815,7 @@ extern const u32 gMonShinyPalette_Cramorant[]; extern const u32 gMonShinyPalette_Arrokuda[]; extern const u32 gMonShinyPalette_Barraskewda[]; extern const u32 gMonShinyPalette_Toxel[]; -extern const u32 gMonShinyPalette_Toxtricity[]; +extern const u32 gMonShinyPalette_ToxtricityAmped[]; extern const u32 gMonShinyPalette_Sizzlipede[]; extern const u32 gMonShinyPalette_Centiskorch[]; extern const u32 gMonShinyPalette_Clobbopus[]; @@ -4769,9 +4841,9 @@ extern const u32 gMonShinyPalette_Pincurchin[]; extern const u32 gMonShinyPalette_Snom[]; extern const u32 gMonShinyPalette_Frosmoth[]; extern const u32 gMonShinyPalette_Stonjourner[]; -extern const u32 gMonShinyPalette_Eiscue[]; -extern const u32 gMonShinyPalette_Indeedee[]; -extern const u32 gMonShinyPalette_Morpeko[]; +extern const u32 gMonShinyPalette_EiscueIceFace[]; +extern const u32 gMonShinyPalette_IndeedeeMale[]; +extern const u32 gMonShinyPalette_MorpekoFullBelly[]; extern const u32 gMonShinyPalette_Cufant[]; extern const u32 gMonShinyPalette_Copperajah[]; extern const u32 gMonShinyPalette_Dracozolt[]; @@ -4782,11 +4854,11 @@ extern const u32 gMonShinyPalette_Duraludon[]; extern const u32 gMonShinyPalette_Dreepy[]; extern const u32 gMonShinyPalette_Drakloak[]; extern const u32 gMonShinyPalette_Dragapult[]; -extern const u32 gMonShinyPalette_Zacian[]; -extern const u32 gMonShinyPalette_Zamazenta[]; +extern const u32 gMonShinyPalette_ZacianHeroOfManyBattles[]; +extern const u32 gMonShinyPalette_ZamazentaHeroOfManyBattles[]; extern const u32 gMonShinyPalette_Eternatus[]; extern const u32 gMonShinyPalette_Kubfu[]; -extern const u32 gMonShinyPalette_Urshifu[]; +extern const u32 gMonShinyPalette_UrshifuSingleStrikeStyle[]; extern const u32 gMonShinyPalette_Zarude[]; extern const u32 gMonShinyPalette_Regieleki[]; extern const u32 gMonShinyPalette_Regidrago[]; @@ -4796,10 +4868,10 @@ extern const u32 gMonShinyPalette_Calyrex[]; extern const u32 gMonShinyPalette_Wyrdeer[]; extern const u32 gMonShinyPalette_Kleavor[]; extern const u32 gMonShinyPalette_Ursaluna[]; -extern const u32 gMonShinyPalette_Basculegion[]; +extern const u32 gMonShinyPalette_BasculegionMale[]; extern const u32 gMonShinyPalette_Sneasler[]; extern const u32 gMonShinyPalette_Overqwil[]; -extern const u32 gMonShinyPalette_Enamorus[]; +extern const u32 gMonShinyPalette_EnamorusIncarnate[]; #endif extern const u32 gMonShinyPalette_VenusaurMega[]; extern const u32 gMonShinyPalette_CharizardMegaX[]; @@ -4892,7 +4964,7 @@ extern const u32 gMonShinyPalette_ZigzagoonGalarian[]; extern const u32 gMonShinyPalette_LinooneGalarian[]; #if P_GEN_5_POKEMON == TRUE extern const u32 gMonShinyPalette_DarumakaGalarian[]; -extern const u32 gMonShinyPalette_DarmanitanGalarian[]; +extern const u32 gMonShinyPalette_DarmanitanGalarianStandardMode[]; extern const u32 gMonShinyPalette_YamaskGalarian[]; extern const u32 gMonShinyPalette_StunfiskGalarian[]; #endif @@ -4978,7 +5050,7 @@ extern const u32 gMonShinyPalette_ArceusFairy[]; extern const u32 gMonShinyPalette_BasculinBlueStriped[]; extern const u32 gMonShinyPalette_BasculinWhiteStriped[]; extern const u32 gMonShinyPalette_DarmanitanZenMode[]; -extern const u32 gMonShinyPalette_DarmanitanZenModeGalarian[]; +extern const u32 gMonShinyPalette_DarmanitanGalarianZenMode[]; extern const u32 gMonShinyPalette_DeerlingSummer[]; extern const u32 gMonShinyPalette_DeerlingAutumn[]; extern const u32 gMonShinyPalette_DeerlingWinter[]; @@ -5082,14 +5154,6 @@ extern const u32 gMonShinyPalette_MagearnaOriginalColor[]; extern const u32 gMonShinyPalette_CramorantGulping[]; extern const u32 gMonShinyPalette_CramorantGorging[]; extern const u32 gMonShinyPalette_ToxtricityLowKey[]; -extern const u32 gMonShinyPalette_AlcremieRubyCream[]; -extern const u32 gMonShinyPalette_AlcremieMatchaCream[]; -extern const u32 gMonShinyPalette_AlcremieMintCream[]; -extern const u32 gMonShinyPalette_AlcremieLemonCream[]; -extern const u32 gMonShinyPalette_AlcremieSaltedCream[]; -extern const u32 gMonShinyPalette_AlcremieRubySwirl[]; -extern const u32 gMonShinyPalette_AlcremieCaramelSwirl[]; -extern const u32 gMonShinyPalette_AlcremieRainbowSwirl[]; extern const u32 gMonShinyPalette_EiscueNoiceFace[]; extern const u32 gMonShinyPalette_IndeedeeFemale[]; extern const u32 gMonShinyPalette_MorpekoHangry[]; @@ -5102,6 +5166,39 @@ extern const u32 gMonShinyPalette_CalyrexIceRider[]; extern const u32 gMonShinyPalette_CalyrexShadowRider[]; extern const u32 gMonShinyPalette_EnamorusTherian[]; extern const u32 gMonShinyPalette_BasculegionFemale[]; +extern const u32 gMonShinyPalette_VenusaurGigantamax[]; +extern const u32 gMonShinyPalette_CharizardGigantamax[]; +extern const u32 gMonShinyPalette_BlastoiseGigantamax[]; +extern const u32 gMonShinyPalette_ButterfreeGigantamax[]; +extern const u32 gMonShinyPalette_PikachuGigantamax[]; +extern const u32 gMonShinyPalette_MeowthGigantamax[]; +extern const u32 gMonShinyPalette_MachampGigantamax[]; +extern const u32 gMonShinyPalette_GengarGigantamax[]; +extern const u32 gMonShinyPalette_KinglerGigantamax[]; +extern const u32 gMonShinyPalette_LaprasGigantamax[]; +extern const u32 gMonShinyPalette_EeveeGigantamax[]; +extern const u32 gMonShinyPalette_SnorlaxGigantamax[]; +extern const u32 gMonShinyPalette_GarbodorGigantamax[]; +extern const u32 gMonShinyPalette_MelmetalGigantamax[]; +extern const u32 gMonShinyPalette_RillaboomGigantamax[]; +extern const u32 gMonShinyPalette_CinderaceGigantamax[]; +extern const u32 gMonShinyPalette_InteleonGigantamax[]; +extern const u32 gMonShinyPalette_CorviknightGigantamax[]; +extern const u32 gMonShinyPalette_OrbeetleGigantamax[]; +extern const u32 gMonShinyPalette_DrednawGigantamax[]; +extern const u32 gMonShinyPalette_CoalossalGigantamax[]; +extern const u32 gMonShinyPalette_FlappleGigantamax[]; +extern const u32 gMonShinyPalette_AppletunGigantamax[]; +extern const u32 gMonShinyPalette_SandacondaGigantamax[]; +extern const u32 gMonShinyPalette_ToxtricityGigantamax[]; +extern const u32 gMonShinyPalette_CentiskorchGigantamax[]; +extern const u32 gMonShinyPalette_HattereneGigantamax[]; +extern const u32 gMonShinyPalette_GrimmsnarlGigantamax[]; +extern const u32 gMonShinyPalette_AlcremieGigantamax[]; +extern const u32 gMonShinyPalette_CopperajahGigantamax[]; +extern const u32 gMonShinyPalette_DuraludonGigantamax[]; +extern const u32 gMonShinyPalette_UrshifuSingleStrikeGigantamax[]; +extern const u32 gMonShinyPalette_UrshifuRapidStrikeGigantamax[]; #endif extern const u8 gMonIcon_QuestionMark[]; @@ -5130,6 +5227,9 @@ extern const u8 gMonIcon_Fearow[]; extern const u8 gMonIcon_Ekans[]; extern const u8 gMonIcon_Arbok[]; extern const u8 gMonIcon_Pikachu[]; +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE +extern const u8 gMonIcon_PikachuF[]; +#endif extern const u8 gMonIcon_Raichu[]; extern const u8 gMonIcon_Sandshrew[]; extern const u8 gMonIcon_Sandslash[]; @@ -5307,6 +5407,9 @@ extern const u8 gMonIcon_Slowking[]; extern const u8 gMonIcon_Misdreavus[]; extern const u8 gMonIcon_Unown[]; extern const u8 gMonIcon_Wobbuffet[]; +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE +extern const u8 gMonIcon_WobbuffetF[]; +#endif extern const u8 gMonIcon_Girafarig[]; extern const u8 gMonIcon_Pineco[]; extern const u8 gMonIcon_Forretress[]; @@ -5455,7 +5558,7 @@ extern const u8 gMonIcon_Anorith[]; extern const u8 gMonIcon_Armaldo[]; extern const u8 gMonIcon_Feebas[]; extern const u8 gMonIcon_Milotic[]; -extern const u8 gMonIcon_Castform[]; +extern const u8 gMonIcon_CastformNormal[]; extern const u8 gMonIcon_Kecleon[]; extern const u8 gMonIcon_Shuppet[]; extern const u8 gMonIcon_Banette[]; @@ -5490,7 +5593,7 @@ extern const u8 gMonIcon_Kyogre[]; extern const u8 gMonIcon_Groudon[]; extern const u8 gMonIcon_Rayquaza[]; extern const u8 gMonIcon_Jirachi[]; -extern const u8 gMonIcon_Deoxys[]; +extern const u8 gMonIcon_DeoxysNormal[]; #if P_GEN_4_POKEMON == TRUE extern const u8 gMonIcon_Turtwig[]; extern const u8 gMonIcon_Grotle[]; @@ -5517,8 +5620,8 @@ extern const u8 gMonIcon_Cranidos[]; extern const u8 gMonIcon_Rampardos[]; extern const u8 gMonIcon_Shieldon[]; extern const u8 gMonIcon_Bastiodon[]; -extern const u8 gMonIcon_Burmy[]; -extern const u8 gMonIcon_Wormadam[]; +extern const u8 gMonIcon_BurmyPlantCloak[]; +extern const u8 gMonIcon_WormadamPlantCloak[]; extern const u8 gMonIcon_Mothim[]; extern const u8 gMonIcon_Combee[]; extern const u8 gMonIcon_Vespiquen[]; @@ -5526,9 +5629,9 @@ extern const u8 gMonIcon_Pachirisu[]; extern const u8 gMonIcon_Buizel[]; extern const u8 gMonIcon_Floatzel[]; extern const u8 gMonIcon_Cherubi[]; -extern const u8 gMonIcon_Cherrim[]; -extern const u8 gMonIcon_Shellos[]; -extern const u8 gMonIcon_Gastrodon[]; +extern const u8 gMonIcon_CherrimOvercast[]; +extern const u8 gMonIcon_ShellosWestSea[]; +extern const u8 gMonIcon_GastrodonWestSea[]; extern const u8 gMonIcon_Ambipom[]; extern const u8 gMonIcon_Drifloon[]; extern const u8 gMonIcon_Drifblim[]; @@ -5556,7 +5659,7 @@ extern const u8 gMonIcon_Riolu[]; extern const u8 gMonIcon_Lucario[]; extern const u8 gMonIcon_Hippopotas[]; extern const u8 gMonIcon_Hippowdon[]; -#if P_HIPPO_GENDER_DIFF_ICONS == TRUE +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE extern const u8 gMonIcon_HippopotasF[]; extern const u8 gMonIcon_HippowdonF[]; #endif @@ -5596,12 +5699,12 @@ extern const u8 gMonIcon_Dialga[]; extern const u8 gMonIcon_Palkia[]; extern const u8 gMonIcon_Heatran[]; extern const u8 gMonIcon_Regigigas[]; -extern const u8 gMonIcon_Giratina[]; +extern const u8 gMonIcon_GiratinaAltered[]; extern const u8 gMonIcon_Cresselia[]; extern const u8 gMonIcon_Phione[]; extern const u8 gMonIcon_Manaphy[]; extern const u8 gMonIcon_Darkrai[]; -extern const u8 gMonIcon_Shaymin[]; +extern const u8 gMonIcon_ShayminLand[]; extern const u8 gMonIcon_Arceus[]; #endif #if P_GEN_5_POKEMON == TRUE @@ -5662,12 +5765,12 @@ extern const u8 gMonIcon_Cottonee[]; extern const u8 gMonIcon_Whimsicott[]; extern const u8 gMonIcon_Petilil[]; extern const u8 gMonIcon_Lilligant[]; -extern const u8 gMonIcon_Basculin[]; +extern const u8 gMonIcon_BasculinRedStriped[]; extern const u8 gMonIcon_Sandile[]; extern const u8 gMonIcon_Krokorok[]; extern const u8 gMonIcon_Krookodile[]; extern const u8 gMonIcon_Darumaka[]; -extern const u8 gMonIcon_Darmanitan[]; +extern const u8 gMonIcon_DarmanitanStandardMode[]; extern const u8 gMonIcon_Maractus[]; extern const u8 gMonIcon_Dwebble[]; extern const u8 gMonIcon_Crustle[]; @@ -5697,8 +5800,8 @@ extern const u8 gMonIcon_Swanna[]; extern const u8 gMonIcon_Vanillite[]; extern const u8 gMonIcon_Vanillish[]; extern const u8 gMonIcon_Vanilluxe[]; -extern const u8 gMonIcon_Deerling[]; -extern const u8 gMonIcon_Sawsbuck[]; +extern const u8 gMonIcon_DeerlingSpring[]; +extern const u8 gMonIcon_SawsbuckSpring[]; extern const u8 gMonIcon_Emolga[]; extern const u8 gMonIcon_Karrablast[]; extern const u8 gMonIcon_Escavalier[]; @@ -5755,14 +5858,14 @@ extern const u8 gMonIcon_Volcarona[]; extern const u8 gMonIcon_Cobalion[]; extern const u8 gMonIcon_Terrakion[]; extern const u8 gMonIcon_Virizion[]; -extern const u8 gMonIcon_Tornadus[]; -extern const u8 gMonIcon_Thundurus[]; +extern const u8 gMonIcon_TornadusIncarnate[]; +extern const u8 gMonIcon_ThundurusIncarnate[]; extern const u8 gMonIcon_Reshiram[]; extern const u8 gMonIcon_Zekrom[]; -extern const u8 gMonIcon_Landorus[]; +extern const u8 gMonIcon_LandorusIncarnate[]; extern const u8 gMonIcon_Kyurem[]; -extern const u8 gMonIcon_Keldeo[]; -extern const u8 gMonIcon_Meloetta[]; +extern const u8 gMonIcon_KeldeoOrdinary[]; +extern const u8 gMonIcon_MeloettaAria[]; extern const u8 gMonIcon_Genesect[]; #endif #if P_GEN_6_POKEMON == TRUE @@ -5782,23 +5885,23 @@ extern const u8 gMonIcon_Fletchinder[]; extern const u8 gMonIcon_Talonflame[]; extern const u8 gMonIcon_Scatterbug[]; extern const u8 gMonIcon_Spewpa[]; -extern const u8 gMonIcon_Vivillon[]; +extern const u8 gMonIcon_VivillonIcySnow[]; extern const u8 gMonIcon_Litleo[]; extern const u8 gMonIcon_Pyroar[]; extern const u8 gMonIcon_PyroarF[]; -extern const u8 gMonIcon_Flabebe[]; -extern const u8 gMonIcon_Floette[]; -extern const u8 gMonIcon_Florges[]; +extern const u8 gMonIcon_FlabebeRedFlower[]; +extern const u8 gMonIcon_FloetteRedFlower[]; +extern const u8 gMonIcon_FlorgesRedFlower[]; extern const u8 gMonIcon_Skiddo[]; extern const u8 gMonIcon_Gogoat[]; extern const u8 gMonIcon_Pancham[]; extern const u8 gMonIcon_Pangoro[]; -extern const u8 gMonIcon_Furfrou[]; +extern const u8 gMonIcon_FurfrouNatural[]; extern const u8 gMonIcon_Espurr[]; -extern const u8 gMonIcon_Meowstic[]; +extern const u8 gMonIcon_MeowsticMale[]; extern const u8 gMonIcon_Honedge[]; extern const u8 gMonIcon_Doublade[]; -extern const u8 gMonIcon_Aegislash[]; +extern const u8 gMonIcon_AegislashShield[]; extern const u8 gMonIcon_Spritzee[]; extern const u8 gMonIcon_Aromatisse[]; extern const u8 gMonIcon_Swirlix[]; @@ -5833,11 +5936,11 @@ extern const u8 gMonIcon_Bergmite[]; extern const u8 gMonIcon_Avalugg[]; extern const u8 gMonIcon_Noibat[]; extern const u8 gMonIcon_Noivern[]; -extern const u8 gMonIcon_Xerneas[]; +extern const u8 gMonIcon_XerneasNeutral[]; extern const u8 gMonIcon_Yveltal[]; -extern const u8 gMonIcon_Zygarde[]; +extern const u8 gMonIcon_Zygarde50[]; extern const u8 gMonIcon_Diancie[]; -extern const u8 gMonIcon_Hoopa[]; +extern const u8 gMonIcon_HoopaConfined[]; extern const u8 gMonIcon_Volcanion[]; #endif #if P_GEN_7_POKEMON == TRUE @@ -5860,12 +5963,12 @@ extern const u8 gMonIcon_Charjabug[]; extern const u8 gMonIcon_Vikavolt[]; extern const u8 gMonIcon_Crabrawler[]; extern const u8 gMonIcon_Crabominable[]; -extern const u8 gMonIcon_Oricorio[]; +extern const u8 gMonIcon_OricorioBaile[]; extern const u8 gMonIcon_Cutiefly[]; extern const u8 gMonIcon_Ribombee[]; extern const u8 gMonIcon_Rockruff[]; -extern const u8 gMonIcon_Lycanroc[]; -extern const u8 gMonIcon_Wishiwashi[]; +extern const u8 gMonIcon_LycanrocMidday[]; +extern const u8 gMonIcon_WishiwashiSolo[]; extern const u8 gMonIcon_Mareanie[]; extern const u8 gMonIcon_Toxapex[]; extern const u8 gMonIcon_Mudbray[]; @@ -5893,11 +5996,11 @@ extern const u8 gMonIcon_Palossand[]; extern const u8 gMonIcon_Pyukumuku[]; extern const u8 gMonIcon_TypeNull[]; extern const u8 gMonIcon_Silvally[]; -extern const u8 gMonIcon_Minior[]; +extern const u8 gMonIcon_MiniorMeteor[]; extern const u8 gMonIcon_Komala[]; extern const u8 gMonIcon_Turtonator[]; extern const u8 gMonIcon_Togedemaru[]; -extern const u8 gMonIcon_Mimikyu[]; +extern const u8 gMonIcon_MimikyuDisguised[]; extern const u8 gMonIcon_Bruxish[]; extern const u8 gMonIcon_Drampa[]; extern const u8 gMonIcon_Dhelmise[]; @@ -5970,7 +6073,7 @@ extern const u8 gMonIcon_Cramorant[]; extern const u8 gMonIcon_Arrokuda[]; extern const u8 gMonIcon_Barraskewda[]; extern const u8 gMonIcon_Toxel[]; -extern const u8 gMonIcon_Toxtricity[]; +extern const u8 gMonIcon_ToxtricityAmped[]; extern const u8 gMonIcon_Sizzlipede[]; extern const u8 gMonIcon_Centiskorch[]; extern const u8 gMonIcon_Clobbopus[]; @@ -5990,15 +6093,23 @@ extern const u8 gMonIcon_Sirfetchd[]; extern const u8 gMonIcon_MrRime[]; extern const u8 gMonIcon_Runerigus[]; extern const u8 gMonIcon_Milcery[]; -extern const u8 gMonIcon_Alcremie[]; +extern const u8 gMonIcon_AlcremieStrawberryVanillaCream[]; +//extern const u8 gMonIcon_AlcremieStrawberryRubyCream[]; +//extern const u8 gMonIcon_AlcremieStrawberryMatchaCream[]; +//extern const u8 gMonIcon_AlcremieStrawberryMintCream[]; +//extern const u8 gMonIcon_AlcremieStrawberryLemonCream[]; +//extern const u8 gMonIcon_AlcremieStrawberrySaltedCream[]; +//extern const u8 gMonIcon_AlcremieStrawberryRubySwirl[]; +//extern const u8 gMonIcon_AlcremieStrawberryCaramelSwirl[]; +//extern const u8 gMonIcon_AlcremieStrawberryRainbowSwirl[]; extern const u8 gMonIcon_Falinks[]; extern const u8 gMonIcon_Pincurchin[]; extern const u8 gMonIcon_Snom[]; extern const u8 gMonIcon_Frosmoth[]; extern const u8 gMonIcon_Stonjourner[]; -extern const u8 gMonIcon_Eiscue[]; -extern const u8 gMonIcon_Indeedee[]; -extern const u8 gMonIcon_Morpeko[]; +extern const u8 gMonIcon_EiscueIceFace[]; +extern const u8 gMonIcon_IndeedeeMale[]; +extern const u8 gMonIcon_MorpekoFullBelly[]; extern const u8 gMonIcon_Cufant[]; extern const u8 gMonIcon_Copperajah[]; extern const u8 gMonIcon_Dracozolt[]; @@ -6009,11 +6120,11 @@ extern const u8 gMonIcon_Duraludon[]; extern const u8 gMonIcon_Dreepy[]; extern const u8 gMonIcon_Drakloak[]; extern const u8 gMonIcon_Dragapult[]; -extern const u8 gMonIcon_Zacian[]; -extern const u8 gMonIcon_Zamazenta[]; +extern const u8 gMonIcon_ZacianHeroOfManyBattles[]; +extern const u8 gMonIcon_ZamazentaHeroOfManyBattles[]; extern const u8 gMonIcon_Eternatus[]; extern const u8 gMonIcon_Kubfu[]; -extern const u8 gMonIcon_Urshifu[]; +extern const u8 gMonIcon_UrshifuSingleStrikeStyle[]; extern const u8 gMonIcon_Zarude[]; extern const u8 gMonIcon_Regieleki[]; extern const u8 gMonIcon_Regidrago[]; @@ -6023,10 +6134,10 @@ extern const u8 gMonIcon_Calyrex[]; extern const u8 gMonIcon_Wyrdeer[]; extern const u8 gMonIcon_Kleavor[]; extern const u8 gMonIcon_Ursaluna[]; -extern const u8 gMonIcon_Basculegion[]; +extern const u8 gMonIcon_BasculegionMale[]; extern const u8 gMonIcon_Sneasler[]; extern const u8 gMonIcon_Overqwil[]; -extern const u8 gMonIcon_Enamorus[]; +extern const u8 gMonIcon_EnamorusIncarnate[]; #endif extern const u8 gMonIcon_VenusaurMega[]; extern const u8 gMonIcon_CharizardMegaX[]; @@ -6119,7 +6230,7 @@ extern const u8 gMonIcon_ZigzagoonGalarian[]; extern const u8 gMonIcon_LinooneGalarian[]; #if P_GEN_5_POKEMON == TRUE extern const u8 gMonIcon_DarumakaGalarian[]; -extern const u8 gMonIcon_DarmanitanGalarian[]; +extern const u8 gMonIcon_DarmanitanGalarianStandardMode[]; extern const u8 gMonIcon_YamaskGalarian[]; extern const u8 gMonIcon_StunfiskGalarian[]; #endif @@ -6158,6 +6269,7 @@ extern const u8 gMonIcon_PikachuUnovaCap[]; extern const u8 gMonIcon_PikachuKalosCap[]; extern const u8 gMonIcon_PikachuAlolaCap[]; extern const u8 gMonIcon_PikachuPartnerCap[]; +extern const u8 gMonIcon_PikachuWorldCap[]; extern const u8 gMonIcon_PichuSpikyEared[]; extern const u8 gMonIcon_UnownB[]; extern const u8 gMonIcon_UnownC[]; @@ -6214,7 +6326,7 @@ extern const u8 gMonIcon_ShayminSky[]; extern const u8 gMonIcon_BasculinBlueStriped[]; extern const u8 gMonIcon_BasculinWhiteStriped[]; extern const u8 gMonIcon_DarmanitanZenMode[]; -extern const u8 gMonIcon_DarmanitanZenModeGalarian[]; +extern const u8 gMonIcon_DarmanitanGalarianZenMode[]; extern const u8 gMonIcon_DeerlingSummer[]; extern const u8 gMonIcon_DeerlingAutumn[]; extern const u8 gMonIcon_DeerlingWinter[]; @@ -6303,14 +6415,6 @@ extern const u8 gMonIcon_MagearnaOriginalColor[]; extern const u8 gMonIcon_CramorantGulping[]; extern const u8 gMonIcon_CramorantGorging[]; extern const u8 gMonIcon_ToxtricityLowKey[]; -//extern const u8 gMonIcon_AlcremieRubyCream[]; -//extern const u8 gMonIcon_AlcremieMatchaCream[]; -//extern const u8 gMonIcon_AlcremieMintCream[]; -//extern const u8 gMonIcon_AlcremieLemonCream[]; -//extern const u8 gMonIcon_AlcremieSaltedCream[]; -//extern const u8 gMonIcon_AlcremieRubySwirl[]; -//extern const u8 gMonIcon_AlcremieCaramelSwirl[]; -//extern const u8 gMonIcon_AlcremieRainbowSwirl[]; extern const u8 gMonIcon_EiscueNoiceFace[]; extern const u8 gMonIcon_IndeedeeFemale[]; extern const u8 gMonIcon_MorpekoHangry[]; @@ -6322,6 +6426,39 @@ extern const u8 gMonIcon_CalyrexIceRider[]; extern const u8 gMonIcon_CalyrexShadowRider[]; extern const u8 gMonIcon_EnamorusTherian[]; extern const u8 gMonIcon_BasculegionFemale[]; +extern const u8 gMonIcon_VenusaurGigantamax[]; +extern const u8 gMonIcon_CharizardGigantamax[]; +extern const u8 gMonIcon_BlastoiseGigantamax[]; +extern const u8 gMonIcon_ButterfreeGigantamax[]; +extern const u8 gMonIcon_PikachuGigantamax[]; +extern const u8 gMonIcon_MeowthGigantamax[]; +extern const u8 gMonIcon_MachampGigantamax[]; +extern const u8 gMonIcon_GengarGigantamax[]; +extern const u8 gMonIcon_KinglerGigantamax[]; +extern const u8 gMonIcon_LaprasGigantamax[]; +extern const u8 gMonIcon_EeveeGigantamax[]; +extern const u8 gMonIcon_SnorlaxGigantamax[]; +extern const u8 gMonIcon_GarbodorGigantamax[]; +extern const u8 gMonIcon_MelmetalGigantamax[]; +extern const u8 gMonIcon_RillaboomGigantamax[]; +extern const u8 gMonIcon_CinderaceGigantamax[]; +extern const u8 gMonIcon_InteleonGigantamax[]; +extern const u8 gMonIcon_CorviknightGigantamax[]; +extern const u8 gMonIcon_OrbeetleGigantamax[]; +extern const u8 gMonIcon_DrednawGigantamax[]; +extern const u8 gMonIcon_CoalossalGigantamax[]; +extern const u8 gMonIcon_FlappleGigantamax[]; +extern const u8 gMonIcon_AppletunGigantamax[]; +extern const u8 gMonIcon_SandacondaGigantamax[]; +extern const u8 gMonIcon_ToxtricityGigantamax[]; +extern const u8 gMonIcon_CentiskorchGigantamax[]; +extern const u8 gMonIcon_HattereneGigantamax[]; +extern const u8 gMonIcon_GrimmsnarlGigantamax[]; +extern const u8 gMonIcon_AlcremieGigantamax[]; +extern const u8 gMonIcon_CopperajahGigantamax[]; +extern const u8 gMonIcon_DuraludonGigantamax[]; +extern const u8 gMonIcon_UrshifuSingleStrikeGigantamax[]; +extern const u8 gMonIcon_UrshifuRapidStrikeGigantamax[]; #endif extern const u8 gMonIcon_Egg[]; @@ -7203,7 +7340,97 @@ extern const u8 gMonFootprint_Sirfetchd[]; extern const u8 gMonFootprint_Mr_Rime[]; extern const u8 gMonFootprint_Runerigus[]; extern const u8 gMonFootprint_Milcery[]; +extern const u32 gMonFrontPic_AlcremieStrawberry[]; +extern const u32 gMonPalette_AlcremieStrawberryVanillaCream[]; +extern const u32 gMonPalette_AlcremieStrawberryRubyCream[]; +extern const u32 gMonPalette_AlcremieStrawberryMatchaCream[]; +extern const u32 gMonPalette_AlcremieStrawberryMintCream[]; +extern const u32 gMonPalette_AlcremieStrawberryLemonCream[]; +extern const u32 gMonPalette_AlcremieStrawberrySaltedCream[]; +extern const u32 gMonPalette_AlcremieStrawberryRubySwirl[]; +extern const u32 gMonPalette_AlcremieStrawberryCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieStrawberryRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieStrawberry[]; +extern const u32 gMonShinyPalette_AlcremieStrawberry[]; extern const u8 gMonFootprint_Alcremie[]; +extern const u32 gMonFrontPic_AlcremieBerry[]; +extern const u32 gMonPalette_AlcremieBerryVanillaCream[]; +extern const u32 gMonPalette_AlcremieBerryRubyCream[]; +extern const u32 gMonPalette_AlcremieBerryMatchaCream[]; +extern const u32 gMonPalette_AlcremieBerryMintCream[]; +extern const u32 gMonPalette_AlcremieBerryLemonCream[]; +extern const u32 gMonPalette_AlcremieBerrySaltedCream[]; +extern const u32 gMonPalette_AlcremieBerryRubySwirl[]; +extern const u32 gMonPalette_AlcremieBerryCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieBerryRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieBerry[]; +extern const u32 gMonShinyPalette_AlcremieBerry[]; +//extern const u8 gMonIcon_AlcremieBerry[]; +extern const u32 gMonFrontPic_AlcremieLove[]; +extern const u32 gMonPalette_AlcremieLoveVanillaCream[]; +extern const u32 gMonPalette_AlcremieLoveRubyCream[]; +extern const u32 gMonPalette_AlcremieLoveMatchaCream[]; +extern const u32 gMonPalette_AlcremieLoveMintCream[]; +extern const u32 gMonPalette_AlcremieLoveLemonCream[]; +extern const u32 gMonPalette_AlcremieLoveSaltedCream[]; +extern const u32 gMonPalette_AlcremieLoveRubySwirl[]; +extern const u32 gMonPalette_AlcremieLoveCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieLoveRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieLove[]; +extern const u32 gMonShinyPalette_AlcremieLove[]; +//extern const u8 gMonIcon_AlcremieLove[]; +extern const u32 gMonFrontPic_AlcremieStar[]; +extern const u32 gMonPalette_AlcremieStarVanillaCream[]; +extern const u32 gMonPalette_AlcremieStarRubyCream[]; +extern const u32 gMonPalette_AlcremieStarMatchaCream[]; +extern const u32 gMonPalette_AlcremieStarMintCream[]; +extern const u32 gMonPalette_AlcremieStarLemonCream[]; +extern const u32 gMonPalette_AlcremieStarSaltedCream[]; +extern const u32 gMonPalette_AlcremieStarRubySwirl[]; +extern const u32 gMonPalette_AlcremieStarCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieStarRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieStar[]; +extern const u32 gMonShinyPalette_AlcremieStar[]; +//extern const u8 gMonIcon_AlcremieStar[]; +extern const u32 gMonFrontPic_AlcremieClover[]; +extern const u32 gMonPalette_AlcremieCloverVanillaCream[]; +extern const u32 gMonPalette_AlcremieCloverRubyCream[]; +extern const u32 gMonPalette_AlcremieCloverMatchaCream[]; +extern const u32 gMonPalette_AlcremieCloverMintCream[]; +extern const u32 gMonPalette_AlcremieCloverLemonCream[]; +extern const u32 gMonPalette_AlcremieCloverSaltedCream[]; +extern const u32 gMonPalette_AlcremieCloverRubySwirl[]; +extern const u32 gMonPalette_AlcremieCloverCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieCloverRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieClover[]; +extern const u32 gMonShinyPalette_AlcremieClover[]; +//extern const u8 gMonIcon_AlcremieClover[]; +extern const u32 gMonFrontPic_AlcremieFlower[]; +extern const u32 gMonPalette_AlcremieFlowerVanillaCream[]; +extern const u32 gMonPalette_AlcremieFlowerRubyCream[]; +extern const u32 gMonPalette_AlcremieFlowerMatchaCream[]; +extern const u32 gMonPalette_AlcremieFlowerMintCream[]; +extern const u32 gMonPalette_AlcremieFlowerLemonCream[]; +extern const u32 gMonPalette_AlcremieFlowerSaltedCream[]; +extern const u32 gMonPalette_AlcremieFlowerRubySwirl[]; +extern const u32 gMonPalette_AlcremieFlowerCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieFlowerRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieFlower[]; +extern const u32 gMonShinyPalette_AlcremieFlower[]; +//extern const u8 gMonIcon_AlcremieFlower[]; +extern const u32 gMonFrontPic_AlcremieRibbon[]; +extern const u32 gMonPalette_AlcremieRibbonVanillaCream[]; +extern const u32 gMonPalette_AlcremieRibbonRubyCream[]; +extern const u32 gMonPalette_AlcremieRibbonMatchaCream[]; +extern const u32 gMonPalette_AlcremieRibbonMintCream[]; +extern const u32 gMonPalette_AlcremieRibbonLemonCream[]; +extern const u32 gMonPalette_AlcremieRibbonSaltedCream[]; +extern const u32 gMonPalette_AlcremieRibbonRubySwirl[]; +extern const u32 gMonPalette_AlcremieRibbonCaramelSwirl[]; +extern const u32 gMonPalette_AlcremieRibbonRainbowSwirl[]; +extern const u32 gMonBackPic_AlcremieRibbon[]; +extern const u32 gMonShinyPalette_AlcremieRibbon[]; +//extern const u8 gMonIcon_AlcremieRibbon[]; extern const u8 gMonFootprint_Falinks[]; extern const u8 gMonFootprint_Pincurchin[]; extern const u8 gMonFootprint_Snom[]; @@ -7240,6 +7467,785 @@ extern const u8 gMonFootprint_Calyrex[]; //extern const u8 gMonFootprint_Sneasler[]; //extern const u8 gMonFootprint_Overqwil[]; //extern const u8 gMonFootprint_Enamorus[]; +extern const u32 gMonFrontPic_VenusaurGigantamax[]; +extern const u32 gMonFrontPic_CharizardGigantamax[]; +extern const u32 gMonFrontPic_BlastoiseGigantamax[]; +extern const u32 gMonFrontPic_ButterfreeGigantamax[]; +extern const u32 gMonFrontPic_PikachuGigantamax[]; +extern const u32 gMonFrontPic_MeowthGigantamax[]; +extern const u32 gMonFrontPic_MachampGigantamax[]; +extern const u32 gMonFrontPic_GengarGigantamax[]; +extern const u32 gMonFrontPic_KinglerGigantamax[]; +extern const u32 gMonFrontPic_LaprasGigantamax[]; +extern const u32 gMonFrontPic_EeveeGigantamax[]; +extern const u32 gMonFrontPic_SnorlaxGigantamax[]; +extern const u32 gMonFrontPic_GarbodorGigantamax[]; +extern const u32 gMonFrontPic_MelmetalGigantamax[]; +extern const u32 gMonFrontPic_RillaboomGigantamax[]; +extern const u32 gMonFrontPic_CinderaceGigantamax[]; +extern const u32 gMonFrontPic_InteleonGigantamax[]; +extern const u32 gMonFrontPic_CorviknightGigantamax[]; +extern const u32 gMonFrontPic_OrbeetleGigantamax[]; +extern const u32 gMonFrontPic_DrednawGigantamax[]; +extern const u32 gMonFrontPic_CoalossalGigantamax[]; +extern const u32 gMonFrontPic_FlappleGigantamax[]; +extern const u32 gMonFrontPic_AppletunGigantamax[]; +extern const u32 gMonFrontPic_SandacondaGigantamax[]; +extern const u32 gMonFrontPic_ToxtricityGigantamax[]; +extern const u32 gMonFrontPic_CentiskorchGigantamax[]; +extern const u32 gMonFrontPic_HattereneGigantamax[]; +extern const u32 gMonFrontPic_GrimmsnarlGigantamax[]; +extern const u32 gMonFrontPic_AlcremieGigantamax[]; +extern const u32 gMonFrontPic_CopperajahGigantamax[]; +extern const u32 gMonFrontPic_DuraludonGigantamax[]; +extern const u32 gMonFrontPic_UrshifuSingleStrikeGigantamax[]; +extern const u32 gMonFrontPic_UrshifuRapidStrikeGigantamax[]; +#endif +#if P_GEN_9_POKEMON == TRUE +extern const u32 gMonFrontPic_Sprigatito[]; +extern const u32 gMonPalette_Sprigatito[]; +extern const u32 gMonBackPic_Sprigatito[]; +extern const u32 gMonShinyPalette_Sprigatito[]; +extern const u8 gMonIcon_Sprigatito[]; +extern const u8 gMonFootprint_Sprigatito[]; +extern const u32 gMonFrontPic_Floragato[]; +extern const u32 gMonPalette_Floragato[]; +extern const u32 gMonBackPic_Floragato[]; +extern const u32 gMonShinyPalette_Floragato[]; +extern const u8 gMonIcon_Floragato[]; +extern const u8 gMonFootprint_Floragato[]; +extern const u32 gMonFrontPic_Meowscarada[]; +extern const u32 gMonPalette_Meowscarada[]; +extern const u32 gMonBackPic_Meowscarada[]; +extern const u32 gMonShinyPalette_Meowscarada[]; +extern const u8 gMonIcon_Meowscarada[]; +extern const u8 gMonFootprint_Meowscarada[]; +extern const u32 gMonFrontPic_Fuecoco[]; +extern const u32 gMonPalette_Fuecoco[]; +extern const u32 gMonBackPic_Fuecoco[]; +extern const u32 gMonShinyPalette_Fuecoco[]; +extern const u8 gMonIcon_Fuecoco[]; +extern const u8 gMonFootprint_Fuecoco[]; +extern const u32 gMonFrontPic_Crocalor[]; +extern const u32 gMonPalette_Crocalor[]; +extern const u32 gMonBackPic_Crocalor[]; +extern const u32 gMonShinyPalette_Crocalor[]; +extern const u8 gMonIcon_Crocalor[]; +extern const u8 gMonFootprint_Crocalor[]; +extern const u32 gMonFrontPic_Skeledirge[]; +extern const u32 gMonPalette_Skeledirge[]; +extern const u32 gMonBackPic_Skeledirge[]; +extern const u32 gMonShinyPalette_Skeledirge[]; +extern const u8 gMonIcon_Skeledirge[]; +extern const u8 gMonFootprint_Skeledirge[]; +extern const u32 gMonFrontPic_Quaxly[]; +extern const u32 gMonPalette_Quaxly[]; +extern const u32 gMonBackPic_Quaxly[]; +extern const u32 gMonShinyPalette_Quaxly[]; +extern const u8 gMonIcon_Quaxly[]; +extern const u8 gMonFootprint_Quaxly[]; +extern const u32 gMonFrontPic_Quaxwell[]; +extern const u32 gMonPalette_Quaxwell[]; +extern const u32 gMonBackPic_Quaxwell[]; +extern const u32 gMonShinyPalette_Quaxwell[]; +extern const u8 gMonIcon_Quaxwell[]; +extern const u8 gMonFootprint_Quaxwell[]; +extern const u32 gMonFrontPic_Quaquaval[]; +extern const u32 gMonPalette_Quaquaval[]; +extern const u32 gMonBackPic_Quaquaval[]; +extern const u32 gMonShinyPalette_Quaquaval[]; +extern const u8 gMonIcon_Quaquaval[]; +extern const u8 gMonFootprint_Quaquaval[]; +extern const u32 gMonFrontPic_Lechonk[]; +extern const u32 gMonPalette_Lechonk[]; +extern const u32 gMonBackPic_Lechonk[]; +extern const u32 gMonShinyPalette_Lechonk[]; +extern const u8 gMonIcon_Lechonk[]; +extern const u8 gMonFootprint_Lechonk[]; +extern const u32 gMonFrontPic_OinkologneMale[]; +extern const u32 gMonPalette_OinkologneMale[]; +extern const u32 gMonBackPic_OinkologneMale[]; +extern const u32 gMonShinyPalette_OinkologneMale[]; +extern const u8 gMonIcon_OinkologneMale[]; +extern const u8 gMonFootprint_Oinkologne[]; +extern const u32 gMonFrontPic_OinkologneFemale[]; +extern const u32 gMonPalette_OinkologneFemale[]; +extern const u32 gMonBackPic_OinkologneFemale[]; +extern const u32 gMonShinyPalette_OinkologneFemale[]; +extern const u8 gMonIcon_OinkologneFemale[]; +extern const u8 gMonFootprint_OinkologneFemale[]; +extern const u32 gMonFrontPic_Tarountula[]; +extern const u32 gMonPalette_Tarountula[]; +extern const u32 gMonBackPic_Tarountula[]; +extern const u32 gMonShinyPalette_Tarountula[]; +extern const u8 gMonIcon_Tarountula[]; +extern const u8 gMonFootprint_Tarountula[]; +extern const u32 gMonFrontPic_Spidops[]; +extern const u32 gMonPalette_Spidops[]; +extern const u32 gMonBackPic_Spidops[]; +extern const u32 gMonShinyPalette_Spidops[]; +extern const u8 gMonIcon_Spidops[]; +extern const u8 gMonFootprint_Spidops[]; +extern const u32 gMonFrontPic_Nymble[]; +extern const u32 gMonPalette_Nymble[]; +extern const u32 gMonBackPic_Nymble[]; +extern const u32 gMonShinyPalette_Nymble[]; +extern const u8 gMonIcon_Nymble[]; +extern const u8 gMonFootprint_Nymble[]; +extern const u32 gMonFrontPic_Lokix[]; +extern const u32 gMonPalette_Lokix[]; +extern const u32 gMonBackPic_Lokix[]; +extern const u32 gMonShinyPalette_Lokix[]; +extern const u8 gMonIcon_Lokix[]; +extern const u8 gMonFootprint_Lokix[]; +extern const u32 gMonFrontPic_Pawmi[]; +extern const u32 gMonPalette_Pawmi[]; +extern const u32 gMonBackPic_Pawmi[]; +extern const u32 gMonShinyPalette_Pawmi[]; +extern const u8 gMonIcon_Pawmi[]; +extern const u8 gMonFootprint_Pawmi[]; +extern const u32 gMonFrontPic_Pawmo[]; +extern const u32 gMonPalette_Pawmo[]; +extern const u32 gMonBackPic_Pawmo[]; +extern const u32 gMonShinyPalette_Pawmo[]; +extern const u8 gMonIcon_Pawmo[]; +extern const u8 gMonFootprint_Pawmo[]; +extern const u32 gMonFrontPic_Pawmot[]; +extern const u32 gMonPalette_Pawmot[]; +extern const u32 gMonBackPic_Pawmot[]; +extern const u32 gMonShinyPalette_Pawmot[]; +extern const u8 gMonIcon_Pawmot[]; +extern const u8 gMonFootprint_Pawmot[]; +extern const u32 gMonFrontPic_Tandemaus[]; +extern const u32 gMonPalette_Tandemaus[]; +extern const u32 gMonBackPic_Tandemaus[]; +extern const u32 gMonShinyPalette_Tandemaus[]; +extern const u8 gMonIcon_Tandemaus[]; +extern const u8 gMonFootprint_Tandemaus[]; +extern const u32 gMonFrontPic_MausholdFamilyOfThree[]; +extern const u32 gMonPalette_Maushold[]; +extern const u32 gMonBackPic_MausholdFamilyOfThree[]; +extern const u32 gMonShinyPalette_Maushold[]; +extern const u8 gMonIcon_MausholdFamilyOfThree[]; +extern const u8 gMonFootprint_Maushold[]; +extern const u32 gMonFrontPic_MausholdFamilyOfFour[]; +extern const u32 gMonBackPic_MausholdFamilyOfFour[]; +extern const u8 gMonIcon_MausholdFamilyOfFour[]; +extern const u32 gMonFrontPic_Fidough[]; +extern const u32 gMonPalette_Fidough[]; +extern const u32 gMonBackPic_Fidough[]; +extern const u32 gMonShinyPalette_Fidough[]; +extern const u8 gMonIcon_Fidough[]; +extern const u8 gMonFootprint_Fidough[]; +extern const u32 gMonFrontPic_Dachsbun[]; +extern const u32 gMonPalette_Dachsbun[]; +extern const u32 gMonBackPic_Dachsbun[]; +extern const u32 gMonShinyPalette_Dachsbun[]; +extern const u8 gMonIcon_Dachsbun[]; +extern const u8 gMonFootprint_Dachsbun[]; +extern const u32 gMonFrontPic_Smoliv[]; +extern const u32 gMonPalette_Smoliv[]; +extern const u32 gMonBackPic_Smoliv[]; +extern const u32 gMonShinyPalette_Smoliv[]; +extern const u8 gMonIcon_Smoliv[]; +extern const u8 gMonFootprint_Smoliv[]; +extern const u32 gMonFrontPic_Dolliv[]; +extern const u32 gMonPalette_Dolliv[]; +extern const u32 gMonBackPic_Dolliv[]; +extern const u32 gMonShinyPalette_Dolliv[]; +extern const u8 gMonIcon_Dolliv[]; +extern const u8 gMonFootprint_Dolliv[]; +extern const u32 gMonFrontPic_Arboliva[]; +extern const u32 gMonPalette_Arboliva[]; +extern const u32 gMonBackPic_Arboliva[]; +extern const u32 gMonShinyPalette_Arboliva[]; +extern const u8 gMonIcon_Arboliva[]; +extern const u8 gMonFootprint_Arboliva[]; +extern const u32 gMonFrontPic_Squawkabilly[]; +extern const u32 gMonPalette_SquawkabillyGreenPlumage[]; +extern const u32 gMonPalette_SquawkabillyBluePlumage[]; +extern const u32 gMonPalette_SquawkabillyYellowPlumage[]; +extern const u32 gMonPalette_SquawkabillyWhitePlumage[]; +extern const u32 gMonBackPic_Squawkabilly[]; +extern const u32 gMonShinyPalette_SquawkabillyGreenPlumage[]; +extern const u32 gMonShinyPalette_SquawkabillyBluePlumage[]; +extern const u32 gMonShinyPalette_SquawkabillyYellowPlumage[]; +extern const u32 gMonShinyPalette_SquawkabillyWhitePlumage[]; +extern const u8 gMonIcon_SquawkabillyGreenPlumage[]; +extern const u8 gMonIcon_SquawkabillyBluePlumage[]; +extern const u8 gMonIcon_SquawkabillyYellowPlumage[]; +extern const u8 gMonIcon_SquawkabillyWhitePlumage[]; +extern const u8 gMonFootprint_Squawkabilly[]; +extern const u32 gMonFrontPic_Nacli[]; +extern const u32 gMonPalette_Nacli[]; +extern const u32 gMonBackPic_Nacli[]; +extern const u32 gMonShinyPalette_Nacli[]; +extern const u8 gMonIcon_Nacli[]; +extern const u8 gMonFootprint_Nacli[]; +extern const u32 gMonFrontPic_Naclstack[]; +extern const u32 gMonPalette_Naclstack[]; +extern const u32 gMonBackPic_Naclstack[]; +extern const u32 gMonShinyPalette_Naclstack[]; +extern const u8 gMonIcon_Naclstack[]; +extern const u8 gMonFootprint_Naclstack[]; +extern const u32 gMonFrontPic_Garganacl[]; +extern const u32 gMonPalette_Garganacl[]; +extern const u32 gMonBackPic_Garganacl[]; +extern const u32 gMonShinyPalette_Garganacl[]; +extern const u8 gMonIcon_Garganacl[]; +extern const u8 gMonFootprint_Garganacl[]; +extern const u32 gMonFrontPic_Charcadet[]; +extern const u32 gMonPalette_Charcadet[]; +extern const u32 gMonBackPic_Charcadet[]; +extern const u32 gMonShinyPalette_Charcadet[]; +extern const u8 gMonIcon_Charcadet[]; +extern const u8 gMonFootprint_Charcadet[]; +extern const u32 gMonFrontPic_Armarouge[]; +extern const u32 gMonPalette_Armarouge[]; +extern const u32 gMonBackPic_Armarouge[]; +extern const u32 gMonShinyPalette_Armarouge[]; +extern const u8 gMonIcon_Armarouge[]; +extern const u8 gMonFootprint_Armarouge[]; +extern const u32 gMonFrontPic_Ceruledge[]; +extern const u32 gMonPalette_Ceruledge[]; +extern const u32 gMonBackPic_Ceruledge[]; +extern const u32 gMonShinyPalette_Ceruledge[]; +extern const u8 gMonIcon_Ceruledge[]; +extern const u8 gMonFootprint_Ceruledge[]; +extern const u32 gMonFrontPic_Tadbulb[]; +extern const u32 gMonPalette_Tadbulb[]; +extern const u32 gMonBackPic_Tadbulb[]; +extern const u32 gMonShinyPalette_Tadbulb[]; +extern const u8 gMonIcon_Tadbulb[]; +extern const u8 gMonFootprint_Tadbulb[]; +extern const u32 gMonFrontPic_Bellibolt[]; +extern const u32 gMonPalette_Bellibolt[]; +extern const u32 gMonBackPic_Bellibolt[]; +extern const u32 gMonShinyPalette_Bellibolt[]; +extern const u8 gMonIcon_Bellibolt[]; +extern const u8 gMonFootprint_Bellibolt[]; +extern const u32 gMonFrontPic_Wattrel[]; +extern const u32 gMonPalette_Wattrel[]; +extern const u32 gMonBackPic_Wattrel[]; +extern const u32 gMonShinyPalette_Wattrel[]; +extern const u8 gMonIcon_Wattrel[]; +extern const u8 gMonFootprint_Wattrel[]; +extern const u32 gMonFrontPic_Kilowattrel[]; +extern const u32 gMonPalette_Kilowattrel[]; +extern const u32 gMonBackPic_Kilowattrel[]; +extern const u32 gMonShinyPalette_Kilowattrel[]; +extern const u8 gMonIcon_Kilowattrel[]; +extern const u8 gMonFootprint_Kilowattrel[]; +extern const u32 gMonFrontPic_Maschiff[]; +extern const u32 gMonPalette_Maschiff[]; +extern const u32 gMonBackPic_Maschiff[]; +extern const u32 gMonShinyPalette_Maschiff[]; +extern const u8 gMonIcon_Maschiff[]; +extern const u8 gMonFootprint_Maschiff[]; +extern const u32 gMonFrontPic_Mabosstiff[]; +extern const u32 gMonPalette_Mabosstiff[]; +extern const u32 gMonBackPic_Mabosstiff[]; +extern const u32 gMonShinyPalette_Mabosstiff[]; +extern const u8 gMonIcon_Mabosstiff[]; +extern const u8 gMonFootprint_Mabosstiff[]; +extern const u32 gMonFrontPic_Shroodle[]; +extern const u32 gMonPalette_Shroodle[]; +extern const u32 gMonBackPic_Shroodle[]; +extern const u32 gMonShinyPalette_Shroodle[]; +extern const u8 gMonIcon_Shroodle[]; +extern const u8 gMonFootprint_Shroodle[]; +extern const u32 gMonFrontPic_Grafaiai[]; +extern const u32 gMonPalette_Grafaiai[]; +extern const u32 gMonBackPic_Grafaiai[]; +extern const u32 gMonShinyPalette_Grafaiai[]; +extern const u8 gMonIcon_Grafaiai[]; +extern const u8 gMonFootprint_Grafaiai[]; +extern const u32 gMonFrontPic_Bramblin[]; +extern const u32 gMonPalette_Bramblin[]; +extern const u32 gMonBackPic_Bramblin[]; +extern const u32 gMonShinyPalette_Bramblin[]; +extern const u8 gMonIcon_Bramblin[]; +extern const u8 gMonFootprint_Bramblin[]; +extern const u32 gMonFrontPic_Brambleghast[]; +extern const u32 gMonPalette_Brambleghast[]; +extern const u32 gMonBackPic_Brambleghast[]; +extern const u32 gMonShinyPalette_Brambleghast[]; +extern const u8 gMonIcon_Brambleghast[]; +extern const u8 gMonFootprint_Brambleghast[]; +extern const u32 gMonFrontPic_Toedscool[]; +extern const u32 gMonPalette_Toedscool[]; +extern const u32 gMonBackPic_Toedscool[]; +extern const u32 gMonShinyPalette_Toedscool[]; +extern const u8 gMonIcon_Toedscool[]; +extern const u8 gMonFootprint_Toedscool[]; +extern const u32 gMonFrontPic_Toedscruel[]; +extern const u32 gMonPalette_Toedscruel[]; +extern const u32 gMonBackPic_Toedscruel[]; +extern const u32 gMonShinyPalette_Toedscruel[]; +extern const u8 gMonIcon_Toedscruel[]; +extern const u8 gMonFootprint_Toedscruel[]; +extern const u32 gMonFrontPic_Klawf[]; +extern const u32 gMonPalette_Klawf[]; +extern const u32 gMonBackPic_Klawf[]; +extern const u32 gMonShinyPalette_Klawf[]; +extern const u8 gMonIcon_Klawf[]; +extern const u8 gMonFootprint_Klawf[]; +extern const u32 gMonFrontPic_Capsakid[]; +extern const u32 gMonPalette_Capsakid[]; +extern const u32 gMonBackPic_Capsakid[]; +extern const u32 gMonShinyPalette_Capsakid[]; +extern const u8 gMonIcon_Capsakid[]; +extern const u8 gMonFootprint_Capsakid[]; +extern const u32 gMonFrontPic_Scovillain[]; +extern const u32 gMonPalette_Scovillain[]; +extern const u32 gMonBackPic_Scovillain[]; +extern const u32 gMonShinyPalette_Scovillain[]; +extern const u8 gMonIcon_Scovillain[]; +extern const u8 gMonFootprint_Scovillain[]; +extern const u32 gMonFrontPic_Rellor[]; +extern const u32 gMonPalette_Rellor[]; +extern const u32 gMonBackPic_Rellor[]; +extern const u32 gMonShinyPalette_Rellor[]; +extern const u8 gMonIcon_Rellor[]; +extern const u8 gMonFootprint_Rellor[]; +extern const u32 gMonFrontPic_Rabsca[]; +extern const u32 gMonPalette_Rabsca[]; +extern const u32 gMonBackPic_Rabsca[]; +extern const u32 gMonShinyPalette_Rabsca[]; +extern const u8 gMonIcon_Rabsca[]; +extern const u8 gMonFootprint_Rabsca[]; +extern const u32 gMonFrontPic_Flittle[]; +extern const u32 gMonPalette_Flittle[]; +extern const u32 gMonBackPic_Flittle[]; +extern const u32 gMonShinyPalette_Flittle[]; +extern const u8 gMonIcon_Flittle[]; +extern const u8 gMonFootprint_Flittle[]; +extern const u32 gMonFrontPic_Espathra[]; +extern const u32 gMonPalette_Espathra[]; +extern const u32 gMonBackPic_Espathra[]; +extern const u32 gMonShinyPalette_Espathra[]; +extern const u8 gMonIcon_Espathra[]; +extern const u8 gMonFootprint_Espathra[]; +extern const u32 gMonFrontPic_Tinkatink[]; +extern const u32 gMonPalette_Tinkatink[]; +extern const u32 gMonBackPic_Tinkatink[]; +extern const u32 gMonShinyPalette_Tinkatink[]; +extern const u8 gMonIcon_Tinkatink[]; +extern const u8 gMonFootprint_Tinkatink[]; +extern const u32 gMonFrontPic_Tinkatuff[]; +extern const u32 gMonPalette_Tinkatuff[]; +extern const u32 gMonBackPic_Tinkatuff[]; +extern const u32 gMonShinyPalette_Tinkatuff[]; +extern const u8 gMonIcon_Tinkatuff[]; +extern const u8 gMonFootprint_Tinkatuff[]; +extern const u32 gMonFrontPic_Tinkaton[]; +extern const u32 gMonPalette_Tinkaton[]; +extern const u32 gMonBackPic_Tinkaton[]; +extern const u32 gMonShinyPalette_Tinkaton[]; +extern const u8 gMonIcon_Tinkaton[]; +extern const u8 gMonFootprint_Tinkaton[]; +extern const u32 gMonFrontPic_Wiglett[]; +extern const u32 gMonPalette_Wiglett[]; +extern const u32 gMonBackPic_Wiglett[]; +extern const u32 gMonShinyPalette_Wiglett[]; +extern const u8 gMonIcon_Wiglett[]; +extern const u8 gMonFootprint_Wiglett[]; +extern const u32 gMonFrontPic_Wugtrio[]; +extern const u32 gMonPalette_Wugtrio[]; +extern const u32 gMonBackPic_Wugtrio[]; +extern const u32 gMonShinyPalette_Wugtrio[]; +extern const u8 gMonIcon_Wugtrio[]; +extern const u8 gMonFootprint_Wugtrio[]; +extern const u32 gMonFrontPic_Bombirdier[]; +extern const u32 gMonPalette_Bombirdier[]; +extern const u32 gMonBackPic_Bombirdier[]; +extern const u32 gMonShinyPalette_Bombirdier[]; +extern const u8 gMonIcon_Bombirdier[]; +extern const u8 gMonFootprint_Bombirdier[]; +extern const u32 gMonFrontPic_Finizen[]; +extern const u32 gMonPalette_Finizen[]; +extern const u32 gMonBackPic_Finizen[]; +extern const u32 gMonShinyPalette_Finizen[]; +extern const u8 gMonIcon_Finizen[]; +extern const u8 gMonFootprint_Finizen[]; +extern const u32 gMonFrontPic_PalafinZero[]; +extern const u32 gMonPalette_PalafinZero[]; +extern const u32 gMonBackPic_PalafinZero[]; +extern const u32 gMonShinyPalette_PalafinZero[]; +extern const u8 gMonIcon_PalafinZero[]; +extern const u8 gMonFootprint_PalafinHero[]; +extern const u32 gMonFrontPic_PalafinHero[]; +extern const u32 gMonPalette_PalafinHero[]; +extern const u32 gMonBackPic_PalafinHero[]; +extern const u32 gMonShinyPalette_PalafinHero[]; +extern const u8 gMonIcon_PalafinHero[]; +extern const u8 gMonFootprint_PalafinHero[]; +extern const u32 gMonFrontPic_Varoom[]; +extern const u32 gMonPalette_Varoom[]; +extern const u32 gMonBackPic_Varoom[]; +extern const u32 gMonShinyPalette_Varoom[]; +extern const u8 gMonIcon_Varoom[]; +extern const u8 gMonFootprint_Varoom[]; +extern const u32 gMonFrontPic_Revavroom[]; +extern const u32 gMonPalette_Revavroom[]; +extern const u32 gMonBackPic_Revavroom[]; +extern const u32 gMonShinyPalette_Revavroom[]; +extern const u8 gMonIcon_Revavroom[]; +extern const u8 gMonFootprint_Revavroom[]; +extern const u32 gMonFrontPic_Cyclizar[]; +extern const u32 gMonPalette_Cyclizar[]; +extern const u32 gMonBackPic_Cyclizar[]; +extern const u32 gMonShinyPalette_Cyclizar[]; +extern const u8 gMonIcon_Cyclizar[]; +extern const u8 gMonFootprint_Cyclizar[]; +extern const u32 gMonFrontPic_Orthworm[]; +extern const u32 gMonPalette_Orthworm[]; +extern const u32 gMonBackPic_Orthworm[]; +extern const u32 gMonShinyPalette_Orthworm[]; +extern const u8 gMonIcon_Orthworm[]; +extern const u8 gMonFootprint_Orthworm[]; +extern const u32 gMonFrontPic_Glimmet[]; +extern const u32 gMonPalette_Glimmet[]; +extern const u32 gMonBackPic_Glimmet[]; +extern const u32 gMonShinyPalette_Glimmet[]; +extern const u8 gMonIcon_Glimmet[]; +extern const u8 gMonFootprint_Glimmet[]; +extern const u32 gMonFrontPic_Glimmora[]; +extern const u32 gMonPalette_Glimmora[]; +extern const u32 gMonBackPic_Glimmora[]; +extern const u32 gMonShinyPalette_Glimmora[]; +extern const u8 gMonIcon_Glimmora[]; +extern const u8 gMonFootprint_Glimmora[]; +extern const u32 gMonFrontPic_Greavard[]; +extern const u32 gMonPalette_Greavard[]; +extern const u32 gMonBackPic_Greavard[]; +extern const u32 gMonShinyPalette_Greavard[]; +extern const u8 gMonIcon_Greavard[]; +extern const u8 gMonFootprint_Greavard[]; +extern const u32 gMonFrontPic_Houndstone[]; +extern const u32 gMonPalette_Houndstone[]; +extern const u32 gMonBackPic_Houndstone[]; +extern const u32 gMonShinyPalette_Houndstone[]; +extern const u8 gMonIcon_Houndstone[]; +extern const u8 gMonFootprint_Houndstone[]; +extern const u32 gMonFrontPic_Flamigo[]; +extern const u32 gMonPalette_Flamigo[]; +extern const u32 gMonBackPic_Flamigo[]; +extern const u32 gMonShinyPalette_Flamigo[]; +extern const u8 gMonIcon_Flamigo[]; +extern const u8 gMonFootprint_Flamigo[]; +extern const u32 gMonFrontPic_Cetoddle[]; +extern const u32 gMonPalette_Cetoddle[]; +extern const u32 gMonBackPic_Cetoddle[]; +extern const u32 gMonShinyPalette_Cetoddle[]; +extern const u8 gMonIcon_Cetoddle[]; +extern const u8 gMonFootprint_Cetoddle[]; +extern const u32 gMonFrontPic_Cetitan[]; +extern const u32 gMonPalette_Cetitan[]; +extern const u32 gMonBackPic_Cetitan[]; +extern const u32 gMonShinyPalette_Cetitan[]; +extern const u8 gMonIcon_Cetitan[]; +extern const u8 gMonFootprint_Cetitan[]; +extern const u32 gMonFrontPic_Veluza[]; +extern const u32 gMonPalette_Veluza[]; +extern const u32 gMonBackPic_Veluza[]; +extern const u32 gMonShinyPalette_Veluza[]; +extern const u8 gMonIcon_Veluza[]; +extern const u8 gMonFootprint_Veluza[]; +extern const u32 gMonFrontPic_Dondozo[]; +extern const u32 gMonPalette_Dondozo[]; +extern const u32 gMonBackPic_Dondozo[]; +extern const u32 gMonShinyPalette_Dondozo[]; +extern const u8 gMonIcon_Dondozo[]; +extern const u8 gMonFootprint_Dondozo[]; +extern const u32 gMonFrontPic_TatsugiriCurly[]; +extern const u32 gMonFrontPic_TatsugiriDroopy[]; +extern const u32 gMonFrontPic_TatsugiriStretchy[]; +extern const u32 gMonPalette_TatsugiriCurly[]; +extern const u32 gMonPalette_TatsugiriDroopy[]; +extern const u32 gMonPalette_TatsugiriStretchy[]; +extern const u32 gMonBackPic_TatsugiriCurly[]; +extern const u32 gMonBackPic_TatsugiriDroopy[]; +extern const u32 gMonBackPic_TatsugiriStretchy[]; +extern const u32 gMonShinyPalette_TatsugiriCurly[]; +extern const u32 gMonShinyPalette_TatsugiriDroopy[]; +extern const u32 gMonShinyPalette_TatsugiriStretchy[]; +extern const u8 gMonIcon_TatsugiriCurly[]; +extern const u8 gMonIcon_TatsugiriDroopy[]; +extern const u8 gMonIcon_TatsugiriStretchy[]; +extern const u8 gMonFootprint_Tatsugiri[]; +extern const u32 gMonFrontPic_Annihilape[]; +extern const u32 gMonPalette_Annihilape[]; +extern const u32 gMonBackPic_Annihilape[]; +extern const u32 gMonShinyPalette_Annihilape[]; +extern const u8 gMonIcon_Annihilape[]; +extern const u8 gMonFootprint_Annihilape[]; +extern const u32 gMonFrontPic_Clodsire[]; +extern const u32 gMonPalette_Clodsire[]; +extern const u32 gMonBackPic_Clodsire[]; +extern const u32 gMonShinyPalette_Clodsire[]; +extern const u8 gMonIcon_Clodsire[]; +extern const u8 gMonFootprint_Clodsire[]; +extern const u32 gMonFrontPic_Farigiraf[]; +extern const u32 gMonPalette_Farigiraf[]; +extern const u32 gMonBackPic_Farigiraf[]; +extern const u32 gMonShinyPalette_Farigiraf[]; +extern const u8 gMonIcon_Farigiraf[]; +extern const u8 gMonFootprint_Farigiraf[]; +extern const u32 gMonFrontPic_DudunsparceTwoSegment[]; +extern const u32 gMonPalette_Dudunsparce[]; +extern const u32 gMonBackPic_DudunsparceTwoSegment[]; +extern const u32 gMonShinyPalette_Dudunsparce[]; +extern const u8 gMonIcon_Dudunsparce[]; +extern const u8 gMonFootprint_Dudunsparce[]; +extern const u32 gMonFrontPic_DudunsparceThreeSegment[]; +extern const u32 gMonBackPic_DudunsparceThreeSegment[]; +extern const u32 gMonFrontPic_Kingambit[]; +extern const u32 gMonPalette_Kingambit[]; +extern const u32 gMonBackPic_Kingambit[]; +extern const u32 gMonShinyPalette_Kingambit[]; +extern const u8 gMonIcon_Kingambit[]; +extern const u8 gMonFootprint_Kingambit[]; +extern const u32 gMonFrontPic_GreatTusk[]; +extern const u32 gMonPalette_GreatTusk[]; +extern const u32 gMonBackPic_GreatTusk[]; +extern const u32 gMonShinyPalette_GreatTusk[]; +extern const u8 gMonIcon_GreatTusk[]; +extern const u8 gMonFootprint_GreatTusk[]; +extern const u32 gMonFrontPic_ScreamTail[]; +extern const u32 gMonPalette_ScreamTail[]; +extern const u32 gMonBackPic_ScreamTail[]; +extern const u32 gMonShinyPalette_ScreamTail[]; +extern const u8 gMonIcon_ScreamTail[]; +extern const u8 gMonFootprint_ScreamTail[]; +extern const u32 gMonFrontPic_BruteBonnet[]; +extern const u32 gMonPalette_BruteBonnet[]; +extern const u32 gMonBackPic_BruteBonnet[]; +extern const u32 gMonShinyPalette_BruteBonnet[]; +extern const u8 gMonIcon_BruteBonnet[]; +extern const u8 gMonFootprint_BruteBonnet[]; +extern const u32 gMonFrontPic_FlutterMane[]; +extern const u32 gMonPalette_FlutterMane[]; +extern const u32 gMonBackPic_FlutterMane[]; +extern const u32 gMonShinyPalette_FlutterMane[]; +extern const u8 gMonIcon_FlutterMane[]; +extern const u8 gMonFootprint_FlutterMane[]; +extern const u32 gMonFrontPic_SlitherWing[]; +extern const u32 gMonPalette_SlitherWing[]; +extern const u32 gMonBackPic_SlitherWing[]; +extern const u32 gMonShinyPalette_SlitherWing[]; +extern const u8 gMonIcon_SlitherWing[]; +extern const u8 gMonFootprint_SlitherWing[]; +extern const u32 gMonFrontPic_SandyShocks[]; +extern const u32 gMonPalette_SandyShocks[]; +extern const u32 gMonBackPic_SandyShocks[]; +extern const u32 gMonShinyPalette_SandyShocks[]; +extern const u8 gMonIcon_SandyShocks[]; +extern const u8 gMonFootprint_SandyShocks[]; +extern const u32 gMonFrontPic_IronTreads[]; +extern const u32 gMonPalette_IronTreads[]; +extern const u32 gMonBackPic_IronTreads[]; +extern const u32 gMonShinyPalette_IronTreads[]; +extern const u8 gMonIcon_IronTreads[]; +extern const u8 gMonFootprint_IronTreads[]; +extern const u32 gMonFrontPic_IronBundle[]; +extern const u32 gMonPalette_IronBundle[]; +extern const u32 gMonBackPic_IronBundle[]; +extern const u32 gMonShinyPalette_IronBundle[]; +extern const u8 gMonIcon_IronBundle[]; +extern const u8 gMonFootprint_IronBundle[]; +extern const u32 gMonFrontPic_IronHands[]; +extern const u32 gMonPalette_IronHands[]; +extern const u32 gMonBackPic_IronHands[]; +extern const u32 gMonShinyPalette_IronHands[]; +extern const u8 gMonIcon_IronHands[]; +extern const u8 gMonFootprint_IronHands[]; +extern const u32 gMonFrontPic_IronJugulis[]; +extern const u32 gMonPalette_IronJugulis[]; +extern const u32 gMonBackPic_IronJugulis[]; +extern const u32 gMonShinyPalette_IronJugulis[]; +extern const u8 gMonIcon_IronJugulis[]; +extern const u8 gMonFootprint_IronJugulis[]; +extern const u32 gMonFrontPic_IronMoth[]; +extern const u32 gMonPalette_IronMoth[]; +extern const u32 gMonBackPic_IronMoth[]; +extern const u32 gMonShinyPalette_IronMoth[]; +extern const u8 gMonIcon_IronMoth[]; +extern const u8 gMonFootprint_IronMoth[]; +extern const u32 gMonFrontPic_IronThorns[]; +extern const u32 gMonPalette_IronThorns[]; +extern const u32 gMonBackPic_IronThorns[]; +extern const u32 gMonShinyPalette_IronThorns[]; +extern const u8 gMonIcon_IronThorns[]; +extern const u8 gMonFootprint_IronThorns[]; +extern const u32 gMonFrontPic_Frigibax[]; +extern const u32 gMonPalette_Frigibax[]; +extern const u32 gMonBackPic_Frigibax[]; +extern const u32 gMonShinyPalette_Frigibax[]; +extern const u8 gMonIcon_Frigibax[]; +extern const u8 gMonFootprint_Frigibax[]; +extern const u32 gMonFrontPic_Arctibax[]; +extern const u32 gMonPalette_Arctibax[]; +extern const u32 gMonBackPic_Arctibax[]; +extern const u32 gMonShinyPalette_Arctibax[]; +extern const u8 gMonIcon_Arctibax[]; +extern const u8 gMonFootprint_Arctibax[]; +extern const u32 gMonFrontPic_Baxcalibur[]; +extern const u32 gMonPalette_Baxcalibur[]; +extern const u32 gMonBackPic_Baxcalibur[]; +extern const u32 gMonShinyPalette_Baxcalibur[]; +extern const u8 gMonIcon_Baxcalibur[]; +extern const u8 gMonFootprint_Baxcalibur[]; +extern const u32 gMonFrontPic_GimmighoulChest[]; +extern const u32 gMonPalette_GimmighoulChest[]; +extern const u32 gMonBackPic_GimmighoulChest[]; +extern const u32 gMonShinyPalette_GimmighoulChest[]; +extern const u8 gMonIcon_GimmighoulChest[]; +extern const u8 gMonFootprint_Gimmighoul[]; +extern const u32 gMonFrontPic_GimmighoulRoaming[]; +extern const u32 gMonPalette_GimmighoulRoaming[]; +extern const u32 gMonBackPic_GimmighoulRoaming[]; +extern const u32 gMonShinyPalette_GimmighoulRoaming[]; +extern const u8 gMonIcon_GimmighoulRoaming[]; +extern const u32 gMonFrontPic_Gholdengo[]; +extern const u32 gMonPalette_Gholdengo[]; +extern const u32 gMonBackPic_Gholdengo[]; +extern const u32 gMonShinyPalette_Gholdengo[]; +extern const u8 gMonIcon_Gholdengo[]; +extern const u8 gMonFootprint_Gholdengo[]; +extern const u32 gMonFrontPic_WoChien[]; +extern const u32 gMonPalette_WoChien[]; +extern const u32 gMonBackPic_WoChien[]; +extern const u32 gMonShinyPalette_WoChien[]; +extern const u8 gMonIcon_WoChien[]; +extern const u8 gMonFootprint_WoChien[]; +extern const u32 gMonFrontPic_ChienPao[]; +extern const u32 gMonPalette_ChienPao[]; +extern const u32 gMonBackPic_ChienPao[]; +extern const u32 gMonShinyPalette_ChienPao[]; +extern const u8 gMonIcon_ChienPao[]; +extern const u8 gMonFootprint_ChienPao[]; +extern const u32 gMonFrontPic_TingLu[]; +extern const u32 gMonPalette_TingLu[]; +extern const u32 gMonBackPic_TingLu[]; +extern const u32 gMonShinyPalette_TingLu[]; +extern const u8 gMonIcon_TingLu[]; +extern const u8 gMonFootprint_TingLu[]; +extern const u32 gMonFrontPic_ChiYu[]; +extern const u32 gMonPalette_ChiYu[]; +extern const u32 gMonBackPic_ChiYu[]; +extern const u32 gMonShinyPalette_ChiYu[]; +extern const u8 gMonIcon_ChiYu[]; +extern const u8 gMonFootprint_ChiYu[]; +extern const u32 gMonFrontPic_RoaringMoon[]; +extern const u32 gMonPalette_RoaringMoon[]; +extern const u32 gMonBackPic_RoaringMoon[]; +extern const u32 gMonShinyPalette_RoaringMoon[]; +extern const u8 gMonIcon_RoaringMoon[]; +extern const u8 gMonFootprint_RoaringMoon[]; +extern const u32 gMonFrontPic_IronValiant[]; +extern const u32 gMonPalette_IronValiant[]; +extern const u32 gMonBackPic_IronValiant[]; +extern const u32 gMonShinyPalette_IronValiant[]; +extern const u8 gMonIcon_IronValiant[]; +extern const u8 gMonFootprint_IronValiant[]; +extern const u32 gMonFrontPic_Koraidon[]; +extern const u32 gMonPalette_Koraidon[]; +extern const u32 gMonBackPic_Koraidon[]; +extern const u32 gMonShinyPalette_Koraidon[]; +extern const u8 gMonIcon_Koraidon[]; +extern const u8 gMonFootprint_Koraidon[]; +extern const u32 gMonFrontPic_Miraidon[]; +extern const u32 gMonPalette_Miraidon[]; +extern const u32 gMonBackPic_Miraidon[]; +extern const u32 gMonShinyPalette_Miraidon[]; +extern const u8 gMonIcon_Miraidon[]; +extern const u8 gMonFootprint_Miraidon[]; +extern const u32 gMonFrontPic_WalkingWake[]; +extern const u32 gMonPalette_WalkingWake[]; +extern const u32 gMonBackPic_WalkingWake[]; +extern const u32 gMonShinyPalette_WalkingWake[]; +extern const u8 gMonIcon_WalkingWake[]; +extern const u8 gMonFootprint_WalkingWake[]; +extern const u32 gMonFrontPic_IronLeaves[]; +extern const u32 gMonPalette_IronLeaves[]; +extern const u32 gMonBackPic_IronLeaves[]; +extern const u32 gMonShinyPalette_IronLeaves[]; +extern const u8 gMonIcon_IronLeaves[]; +extern const u8 gMonFootprint_IronLeaves[]; +extern const u32 gMonFrontPic_Dipplin[]; +extern const u32 gMonPalette_Dipplin[]; +extern const u32 gMonBackPic_Dipplin[]; +extern const u32 gMonShinyPalette_Dipplin[]; +extern const u8 gMonIcon_Dipplin[]; +extern const u8 gMonFootprint_Dipplin[]; +extern const u32 gMonFrontPic_Poltchageist[]; +extern const u32 gMonPalette_Poltchageist[]; +extern const u32 gMonBackPic_Poltchageist[]; +extern const u32 gMonShinyPalette_Poltchageist[]; +extern const u8 gMonIcon_Poltchageist[]; +extern const u8 gMonFootprint_Poltchageist[]; +extern const u32 gMonFrontPic_Sinistcha[]; +extern const u32 gMonPalette_Sinistcha[]; +extern const u32 gMonBackPic_Sinistcha[]; +extern const u32 gMonShinyPalette_Sinistcha[]; +extern const u8 gMonIcon_Sinistcha[]; +extern const u8 gMonFootprint_Sinistcha[]; +extern const u32 gMonFrontPic_Okidogi[]; +extern const u32 gMonPalette_Okidogi[]; +extern const u32 gMonBackPic_Okidogi[]; +extern const u32 gMonShinyPalette_Okidogi[]; +extern const u8 gMonIcon_Okidogi[]; +extern const u8 gMonFootprint_Okidogi[]; +extern const u32 gMonFrontPic_Munkidori[]; +extern const u32 gMonPalette_Munkidori[]; +extern const u32 gMonBackPic_Munkidori[]; +extern const u32 gMonShinyPalette_Munkidori[]; +extern const u8 gMonIcon_Munkidori[]; +extern const u8 gMonFootprint_Munkidori[]; +extern const u32 gMonFrontPic_Fezandipiti[]; +extern const u32 gMonPalette_Fezandipiti[]; +extern const u32 gMonBackPic_Fezandipiti[]; +extern const u32 gMonShinyPalette_Fezandipiti[]; +extern const u8 gMonIcon_Fezandipiti[]; +extern const u8 gMonFootprint_Fezandipiti[]; +extern const u32 gMonFrontPic_OgerponTealMask[]; +extern const u32 gMonPalette_OgerponTealMask[]; +extern const u32 gMonBackPic_OgerponTealMask[]; +extern const u32 gMonShinyPalette_OgerponTealMask[]; +extern const u8 gMonIcon_OgerponTealMask[]; +extern const u32 gMonFrontPic_OgerponWellspringMask[]; +extern const u32 gMonPalette_OgerponWellspringMask[]; +extern const u32 gMonBackPic_OgerponWellspringMask[]; +extern const u32 gMonShinyPalette_OgerponWellspringMask[]; +extern const u8 gMonIcon_OgerponWellspringMask[]; +extern const u32 gMonFrontPic_OgerponHearthflameMask[]; +extern const u32 gMonPalette_OgerponHearthflameMask[]; +extern const u32 gMonBackPic_OgerponHearthflameMask[]; +extern const u32 gMonShinyPalette_OgerponHearthflameMask[]; +extern const u8 gMonIcon_OgerponHearthflameMask[]; +extern const u32 gMonFrontPic_OgerponCornerstoneMask[]; +extern const u32 gMonPalette_OgerponCornerstoneMask[]; +extern const u32 gMonBackPic_OgerponCornerstoneMask[]; +extern const u32 gMonShinyPalette_OgerponCornerstoneMask[]; +extern const u8 gMonIcon_OgerponCornerstoneMask[]; +extern const u32 gMonFrontPic_OgerponTealMaskTera[]; +extern const u32 gMonPalette_OgerponTealMaskTera[]; +extern const u32 gMonBackPic_OgerponTealMaskTera[]; +extern const u32 gMonShinyPalette_OgerponTealMaskTera[]; +extern const u32 gMonFrontPic_OgerponWellspringMaskTera[]; +extern const u32 gMonPalette_OgerponWellspringMaskTera[]; +extern const u32 gMonBackPic_OgerponWellspringMaskTera[]; +extern const u32 gMonShinyPalette_OgerponWellspringMaskTera[]; +extern const u32 gMonFrontPic_OgerponHearthflameMaskTera[]; +extern const u32 gMonPalette_OgerponHearthflameMaskTera[]; +extern const u32 gMonBackPic_OgerponHearthflameMaskTera[]; +extern const u32 gMonShinyPalette_OgerponHearthflameMaskTera[]; +extern const u32 gMonFrontPic_OgerponCornerstoneMaskTera[]; +extern const u32 gMonPalette_OgerponCornerstoneMaskTera[]; +extern const u32 gMonBackPic_OgerponCornerstoneMaskTera[]; +extern const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[]; +extern const u8 gMonFootprint_Ogerpon[]; #endif // trainer sprites @@ -7676,41 +8682,6 @@ extern const u32 gPokedexSearchMenu_Gfx[]; extern const u32 gPokedexSearchMenuHoenn_Tilemap[]; extern const u32 gPokedexSearchMenuNational_Tilemap[]; extern const u16 gPokedexSearchMenu_Pal[]; -// pokedex HGSS -#if POKEDEX_PLUS_HGSS == TRUE -extern const u16 gPokedexPlusHGSS_Default_Pal[]; -extern const u16 gPokedexPlusHGSS_National_Pal[]; -extern const u16 gPokedexPlusHGSS_MenuSearch_Pal[]; -extern const u16 gPokedexPlusHGSS_SearchResults_Pal[]; -extern const u16 gPokedexPlusHGSS_Default_dark_Pal[]; -extern const u16 gPokedexPlusHGSS_National_dark_Pal[]; -extern const u16 gPokedexPlusHGSS_MenuSearch_dark_Pal[]; -extern const u16 gPokedexPlusHGSS_SearchResults_dark_Pal[]; -extern const u32 gPokedexPlusHGSS_MenuList_Gfx[]; -extern const u32 gPokedexPlusHGSS_MenuList_DECA_Gfx[]; -extern const u32 gPokedexPlusHGSS_Interface_Gfx[]; -extern const u32 gPokedexPlusHGSS_Interface_DECA_Gfx[]; -extern const u32 gPokedexPlusHGSS_Menu_1_Gfx[]; -extern const u32 gPokedexPlusHGSS_Menu_2_Gfx[]; -extern const u32 gPokedexPlusHGSS_Menu_3_Gfx[]; -extern const u32 gPokedexPlusHGSS_MenuSearch_Gfx[]; -extern const u32 gPokedexPlusHGSS_MenuSearch_DECA_Gfx[]; -extern const u32 gPokedexPlusHGSS_StartMenuMain_Tilemap[]; -extern const u32 gPokedexPlusHGSS_StartMenuSearchResults_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap_Clear[]; -extern const u32 gPokedexPlusHGSS_ScreenList_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenListUnderlay_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenInfo_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenStats_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenEvolution_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenEvolution_Tilemap_PE[]; -extern const u32 gPokedexPlusHGSS_ScreenForms_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenCry_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenSize_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenSearchHoenn_Tilemap[]; -extern const u32 gPokedexPlusHGSS_ScreenSearchNational_Tilemap[]; -#endif // berry tag screen extern const u32 gBerryCheck_Gfx[]; @@ -8192,6 +9163,12 @@ extern const u32 gItemIcon_LinkingCord[]; extern const u32 gItemIconPalette_LinkingCord[]; extern const u32 gItemIcon_PeatBlock[]; extern const u32 gItemIconPalette_PeatBlock[]; +extern const u32 gItemIcon_SyrupyApple[]; +extern const u32 gItemIconPalette_SyrupyApple[]; +extern const u32 gItemIcon_UnremarkableTeacup[]; +extern const u32 gItemIconPalette_UnremarkableTeacup[]; +extern const u32 gItemIcon_MasterpieceTeacup[]; +extern const u32 gItemIconPalette_MasterpieceTeacup[]; // Nectars extern const u32 gItemIcon_RedNectar[]; extern const u32 gItemIconPalette_RedNectar[]; @@ -8904,6 +9881,8 @@ extern const u32 gItemIcon_CatchingCharm[]; extern const u32 gItemIconPalette_CatchingCharm[]; extern const u32 gItemIcon_ExpCharm[]; extern const u32 gItemIconPalette_ExpCharm[]; +extern const u32 gItemIcon_GlimmeringCharm[]; +extern const u32 gItemIconPalette_GlimmeringCharm[]; // Form-changing Key Items extern const u32 gItemIcon_RotomCatalog[]; extern const u32 gItemIconPalette_RotomCatalog[]; @@ -9006,8 +9985,8 @@ extern const u32 gItemIcon_MagmaEmblem[]; extern const u32 gItemIconPalette_MagmaEmblem[]; extern const u32 gItemIcon_ContestPass[]; extern const u32 gItemIconPalette_ContestPass[]; -extern const u32 gItemIcon_OaksParcel[]; -extern const u32 gItemIconPalette_OaksParcel[]; +extern const u32 gItemIcon_Parcel[]; +extern const u32 gItemIconPalette_Parcel[]; extern const u32 gItemIcon_SecretKey[]; extern const u32 gItemIconPalette_SecretKey[]; extern const u32 gItemIcon_BikeVoucher[]; @@ -9093,6 +10072,25 @@ extern const u32 gItemIconPalette_LustrousGlobe[]; extern const u32 gItemIcon_BerserkGene[]; extern const u32 gItemIconPalette_BerserkGene[]; +extern const u32 gItemIcon_FairyFeather[]; +extern const u32 gItemIconPalette_FairyFeather[]; + +extern const u32 gItemIcon_Mochi[]; +extern const u32 gItemIconPalette_HealthMochi[]; +extern const u32 gItemIconPalette_MuscleMochi[]; +extern const u32 gItemIconPalette_ResistMochi[]; +extern const u32 gItemIconPalette_GeniusMochi[]; +extern const u32 gItemIconPalette_CleverMochi[]; +extern const u32 gItemIconPalette_SwiftMochi[]; +extern const u32 gItemIconPalette_FreshStartMochi[]; + +extern const u32 gItemIcon_WellspringMask[]; +extern const u32 gItemIconPalette_WellspringMask[]; +extern const u32 gItemIcon_HearthflameMask[]; +extern const u32 gItemIconPalette_HearthflameMask[]; +extern const u32 gItemIcon_CornerstoneMask[]; +extern const u32 gItemIconPalette_CornerstoneMask[]; + extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; @@ -10216,6 +11214,13 @@ extern const u32 gBattleAnimSpriteGfx_Teapot[]; extern const u32 gBattleAnimSpritePal_Teapot[]; extern const u32 gBattleAnimSpriteGfx_WoodHammerHammer[]; extern const u32 gBattleAnimSpritePal_WoodHammerHammer[]; +extern const u32 gBattleAnimSpriteGfx_Snowflakes[]; +extern const u32 gBattleAnimSpritePal_Snowflakes[]; +extern const u32 gBattleAnimSpriteGfx_SyrupBlob[]; +extern const u32 gBattleAnimSpriteGfx_SyrupShell[]; +extern const u32 gBattleAnimSpriteGfx_SyrupSplat[]; +extern const u32 gBattleAnimSpritePal_SyrupRed[]; +extern const u32 gBattleAnimSpritePal_SyrupYellow[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; diff --git a/include/item.h b/include/item.h index d130500c07..da6faa4864 100644 --- a/include/item.h +++ b/include/item.h @@ -9,17 +9,17 @@ typedef void (*ItemUseFunc)(u8); struct Item { + u32 price; + u16 secondaryId; + ItemUseFunc fieldUseFunc; + const u8 *description; u8 name[ITEM_NAME_LENGTH]; - u16 price; u8 holdEffect; u8 holdEffectParam; - const u8 *description; u8 importance; u8 pocket; u8 type; - ItemUseFunc fieldUseFunc; u8 battleUsage; - u16 secondaryId; u8 flingPower; }; diff --git a/include/item_menu.h b/include/item_menu.h index 09ddd729c4..d4ae5a4c5f 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -107,5 +107,6 @@ void UpdatePocketItemList(u8 pocketId); void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId)); void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback); void CloseItemMessage(u8 taskId); +void ItemMenu_RotomCatalog(u8 taskId); #endif //GUARD_ITEM_MENU_H diff --git a/include/item_use.h b/include/item_use.h index 6b3d0c590e..a4dd92663d 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -13,6 +13,7 @@ void ItemUseOutOfBattle_WailmerPail(u8); void ItemUseOutOfBattle_Medicine(u8); void ItemUseOutOfBattle_AbilityCapsule(u8); void ItemUseOutOfBattle_AbilityPatch(u8); +void ItemUseOutOfBattle_ResetEVs(u8); void ItemUseOutOfBattle_ReduceEV(u8); void ItemUseOutOfBattle_SacredAsh(u8); void ItemUseOutOfBattle_PPRecovery(u8); @@ -28,6 +29,8 @@ void ItemUseOutOfBattle_Berry(u8); void ItemUseOutOfBattle_EnigmaBerry(u8); void ItemUseOutOfBattle_FormChange(u8); void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8); +void ItemUseOutOfBattle_RotomCatalog(u8); +void ItemUseOutOfBattle_ZygardeCube(u8); void ItemUseOutOfBattle_Honey(u8); void ItemUseOutOfBattle_CannotUse(u8); void ItemUseOutOfBattle_ExpShare(u8); diff --git a/include/party_menu.h b/include/party_menu.h index 38139cc962..304eae1266 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -53,6 +53,7 @@ void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task); void ItemUseCB_Medicine(u8 taskId, TaskFunc task); void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); +void ItemUseCB_ResetEVs(u8 taskId, TaskFunc task); void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task); void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task); void ItemUseCB_PPUp(u8 taskId, TaskFunc task); @@ -65,6 +66,8 @@ void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task); void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task); void ItemUseCB_FormChange(u8 taskId, TaskFunc task); void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task); +void ItemUseCB_RotomCatalog(u8 taskId, TaskFunc task); +void ItemUseCB_ZygardeCube(u8 taskId, TaskFunc task); const u8* GetItemEffect(u16 item); u8 GetItemEffectType(u16 item); void CB2_PartyMenuFromStartMenu(void); diff --git a/include/pokedex_plus_hgss.h b/include/pokedex_plus_hgss.h index 68a4ddce4f..a309924236 100644 --- a/include/pokedex_plus_hgss.h +++ b/include/pokedex_plus_hgss.h @@ -1,10 +1,7 @@ #ifndef GUARD_POKEDEX_PLUS_HGSS_H #define GUARD_POKEDEX_PLUS_HGSS_H -#if POKEDEX_PLUS_HGSS == TRUE void CB2_OpenPokedexPlusHGSS(void); -u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum); void Task_DisplayCaughtMonDexPageHGSS(u8); -#endif #endif // GUARD_POKEDEX_PLUS_HGSS_H diff --git a/include/pokemon.h b/include/pokemon.h index 526103e58a..30abf8a037 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -333,6 +333,7 @@ struct SpeciesInfo /*0x24*/ /* 0x1F */ u8 bodyColor : 7; u8 noFlip : 1; /* 0x20 */ u16 flags; + /* 0x22 */ u8 gigantamax:1; }; struct BattleMove @@ -356,6 +357,7 @@ struct BattleMove u32 mirrorMoveBanned:1; u32 ignoresKingsRock:1; u32 highCritRatio:1; + u32 twoTurnMove:1; u32 punchingMove:1; u32 sheerForceBoost:1; u32 bitingMove:1; @@ -378,13 +380,19 @@ struct BattleMove u32 thawsUser:1; u32 ignoresSubstitute:1; u32 strikeCount:4; // Max 15 hits. Defaults to 1 if not set. May apply its effect on each hit. - u32 meFirstBanned:1; + u32 forcePressure:1; + u32 cantUseTwice:1; u32 gravityBanned:1; + u32 healBlockBanned:1; + u32 meFirstBanned:1; u32 mimicBanned:1; u32 metronomeBanned:1; u32 copycatBanned:1; + u32 assistBanned:1; // Matches same moves as copycatBanned + semi-invulnerable moves and Mirror Coat. u32 sleepTalkBanned:1; u32 instructBanned:1; + u32 encoreBanned:1; + u32 parentalBondBanned:1; }; #define SPINDA_SPOT_WIDTH 16 @@ -619,6 +627,7 @@ bool32 SpeciesHasGenderDifferences(u16 species); bool32 TryFormChange(u32 monId, u32 side, u16 method); void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method); u32 GetMonFriendshipScore(struct Pokemon *pokemon); +u32 GetMonAffectionHearts(struct Pokemon *pokemon); void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality); u8 CalculatePartyCount(struct Pokemon *party); u16 SanitizeSpeciesId(u16 species); diff --git a/include/random.h b/include/random.h index db1dea3983..8d801ebe74 100644 --- a/include/random.h +++ b/include/random.h @@ -76,6 +76,10 @@ enum RandomTag RNG_FLAME_BODY, RNG_FORCE_RANDOM_SWITCH, RNG_FROZEN, + RNG_G_MAX_STUN_SHOCK, + RNG_G_MAX_BEFUDDLE, + RNG_G_MAX_REPLENISH, + RNG_G_MAX_SNOOZE, RNG_HITS, RNG_HOLD_EFFECT_FLINCH, RNG_INFATUATION, @@ -92,6 +96,7 @@ enum RandomTag RNG_TRI_ATTACK, RNG_TRIPLE_ARROWS_DEFENSE_DOWN, RNG_TRIPLE_ARROWS_FLINCH, + RNG_QUICK_DRAW, }; #define RandomWeighted(tag, ...) \ diff --git a/include/rtc.h b/include/rtc.h index 7a3d3d524b..d94beafcdc 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -17,6 +17,23 @@ #define RTC_ERR_FLAG_MASK 0x0FF0 +#define MORNING_EVO_HOUR_BEGIN 6 +#define MORNING_EVO_HOUR_END 10 + +#define DAY_EVO_HOUR_BEGIN 10 +#define DAY_EVO_HOUR_END 19 + +#define DUSK_EVO_HOUR_BEGIN 19 +#define DUSK_EVO_HOUR_END 20 + +#define NIGHT_EVO_HOUR_BEGIN 20 +#define NIGHT_EVO_HOUR_END 6 + +#define TIME_MORNING 0 +#define TIME_DAY 1 +#define TIME_DUSK 2 +#define TIME_NIGHT 3 + extern struct Time gLocalTime; void RtcDisableInterrupts(void); @@ -40,6 +57,8 @@ void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day); void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day); void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t); void RtcCalcLocalTime(void); +bool8 IsBetweenHours(s32 hours, s32 begin, s32 end); +u8 GetTimeOfDay(void); void RtcInitLocalTimeOffset(s32 hour, s32 minute); void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds); void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2); diff --git a/include/strings.h b/include/strings.h index 797b1898ab..cd56d71e36 100644 --- a/include/strings.h +++ b/include/strings.h @@ -538,134 +538,6 @@ extern const u8 gText_SearchingPleaseWait[]; extern const u8 gText_SearchCompleted[]; extern const u8 gText_NoMatchingPkmnWereFound[]; extern const u8 gText_SelectorArrow[]; -//PokedexPlus HGSS_Ui -#if POKEDEX_PLUS_HGSS == TRUE -extern const u8 gText_Stats_Buttons[]; -extern const u8 gText_Stats_Buttons_Decapped[]; -extern const u8 gText_Stats_HP[]; -extern const u8 gText_Stats_Attack[]; -extern const u8 gText_Stats_Defense[]; -extern const u8 gText_Stats_Speed[]; -extern const u8 gText_Stats_SpAttack[]; -extern const u8 gText_Stats_SpDefense[]; -extern const u8 gText_Stats_EV_Plus1[]; -extern const u8 gText_Stats_EV_Plus2[]; -extern const u8 gText_Stats_EV_Plus3[]; -extern const u8 gText_Stats_EvStr1Str2[]; -extern const u8 gText_Stats_MoveSelectedMax[]; -extern const u8 gText_Stats_MoveLevel[]; -extern const u8 gText_Stats_Gender_0[]; -extern const u8 gText_Stats_Gender_12_5[]; -extern const u8 gText_Stats_Gender_25[]; -extern const u8 gText_Stats_Gender_50[]; -extern const u8 gText_Stats_Gender_75[]; -extern const u8 gText_Stats_Gender_87_5[]; -extern const u8 gText_Stats_Gender_100[]; -extern const u8 gText_Stats_CatchRate[]; -extern const u8 gText_Stats_CatchRate_Legend[]; -extern const u8 gText_Stats_CatchRate_VeryHard[]; -extern const u8 gText_Stats_CatchRate_Difficult[]; -extern const u8 gText_Stats_CatchRate_Medium[]; -extern const u8 gText_Stats_CatchRate_Relaxed[]; -extern const u8 gText_Stats_CatchRate_Easy[]; -extern const u8 gText_Stats_ExpYield[]; -extern const u8 gText_Stats_EggCycles[]; -extern const u8 gText_Stats_EggCycles_VeryFast[]; -extern const u8 gText_Stats_EggCycles_Fast[]; -extern const u8 gText_Stats_EggCycles_Normal[]; -extern const u8 gText_Stats_EggCycles_Slow[]; -extern const u8 gText_Stats_Growthrate[]; -extern const u8 gText_Stats_Friendship[]; -extern const u8 gText_Stats_Friendship_BigAnger[]; -extern const u8 gText_Stats_Friendship_Neutral[]; -extern const u8 gText_Stats_Friendship_Happy[]; -extern const u8 gText_Stats_Friendship_BigSmile[]; -extern const u8 gText_Stats_MEDIUM_FAST[]; -extern const u8 gText_Stats_ERRATIC[]; -extern const u8 gText_Stats_FLUCTUATING[]; -extern const u8 gText_Stats_MEDIUM_SLOW[]; -extern const u8 gText_Stats_FAST[]; -extern const u8 gText_Stats_SLOW[]; -extern const u8 gText_Stats_ContestHeart[]; -extern const u8 gText_PlusSymbol[]; -extern const u8 gText_Stats_Minus[]; -extern const u8 gText_Stats_eggGroup[]; -extern const u8 gText_Stats_eggGroup_Groups[]; -extern const u8 gText_Stats_eggGroup_MONSTER[]; -extern const u8 gText_Stats_eggGroup_WATER_1[]; -extern const u8 gText_Stats_eggGroup_BUG[]; -extern const u8 gText_Stats_eggGroup_FLYING[]; -extern const u8 gText_Stats_eggGroup_FIELD[]; -extern const u8 gText_Stats_eggGroup_FAIRY[]; -extern const u8 gText_Stats_eggGroup_GRASS[]; -extern const u8 gText_Stats_eggGroup_HUMAN_LIKE[]; -extern const u8 gText_Stats_eggGroup_WATER_3[]; -extern const u8 gText_Stats_eggGroup_MINERAL[]; -extern const u8 gText_Stats_eggGroup_AMORPHOUS[]; -extern const u8 gText_Stats_eggGroup_WATER_2[]; -extern const u8 gText_Stats_eggGroup_DITTO[]; -extern const u8 gText_Stats_eggGroup_DRAGON[]; -extern const u8 gText_Stats_eggGroup_UNDISCOVERED[]; -extern const u8 gText_Dex_SEEN[]; -extern const u8 gText_Dex_OWN[]; - -extern const u8 gText_EVO_Buttons[]; -extern const u8 gText_EVO_Buttons_Decapped[]; -extern const u8 gText_EVO_Buttons_PE[]; -extern const u8 gText_EVO_Buttons_Decapped_PE[]; -extern const u8 gText_EVO_Name[]; -extern const u8 gText_EVO_PreEvo[]; -extern const u8 gText_EVO_PreEvo_PE_Mega[]; -extern const u8 gText_EVO_FRIENDSHIP[]; -extern const u8 gText_EVO_FRIENDSHIP_DAY[]; -extern const u8 gText_EVO_FRIENDSHIP_NIGHT[]; -extern const u8 gText_EVO_LEVEL[]; -extern const u8 gText_EVO_TRADE[]; -extern const u8 gText_EVO_TRADE_ITEM[]; -extern const u8 gText_EVO_ITEM[]; -extern const u8 gText_EVO_LEVEL_ATK_GT_DEF[]; -extern const u8 gText_EVO_LEVEL_ATK_EQ_DEF[]; -extern const u8 gText_EVO_LEVEL_ATK_LT_DEF[]; -extern const u8 gText_EVO_LEVEL_SILCOON[]; -extern const u8 gText_EVO_LEVEL_CASCOON[]; -extern const u8 gText_EVO_LEVEL_NINJASK[]; -extern const u8 gText_EVO_LEVEL_SHEDINJA[]; -extern const u8 gText_EVO_BEAUTY[]; -extern const u8 gText_EVO_LEVEL_FEMALE[]; -extern const u8 gText_EVO_LEVEL_MALE[]; -extern const u8 gText_EVO_LEVEL_NIGHT[]; -extern const u8 gText_EVO_LEVEL_DAY[]; -extern const u8 gText_EVO_LEVEL_DUSK[]; -extern const u8 gText_EVO_ITEM_HOLD_DAY[]; -extern const u8 gText_EVO_ITEM_HOLD_NIGHT[]; -extern const u8 gText_EVO_MOVE[]; -extern const u8 gText_EVO_MOVE_TYPE[]; -extern const u8 gText_EVO_MAPSEC[]; -extern const u8 gText_EVO_ITEM_MALE[]; -extern const u8 gText_EVO_ITEM_FEMALE[]; -extern const u8 gText_EVO_LEVEL_RAIN[]; -extern const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[]; -extern const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[]; -extern const u8 gText_EVO_TRADE_SPECIFIC_MON[]; -extern const u8 gText_EVO_SPECIFIC_MAP[]; -extern const u8 gText_EVO_LEVEL_NATURE_AMPED[]; -extern const u8 gText_EVO_LEVEL_NATURE_LOW_KEY[]; -extern const u8 gText_EVO_CRITICAL_HITS[]; -extern const u8 gText_EVO_SCRIPT_TRIGGER_DMG[]; -extern const u8 gText_EVO_DARK_SCROLL[]; -extern const u8 gText_EVO_WATER_SCROLL[]; -extern const u8 gText_EVO_ITEM_NIGHT[]; -extern const u8 gText_EVO_ITEM_DAY[]; -extern const u8 gText_EVO_ITEM_HOLD[]; -extern const u8 gText_EVO_UNKNOWN[]; -extern const u8 gText_EVO_NONE[]; - -extern const u8 gText_FORMS_Buttons_PE[]; -extern const u8 gText_FORMS_Buttons_Decapped_PE[]; -extern const u8 gText_FORMS_Buttons_Submenu_PE[]; -extern const u8 gText_FORMS_Buttons_Submenu_Decapped_PE[]; -extern const u8 gText_FORMS_NONE[]; -#endif // birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; @@ -1447,6 +1319,19 @@ extern const u8 CableClub_Text_YouMayBattleHere[]; extern const u8 CableClub_Text_CanMixRecords[]; extern const u8 CableClub_Text_CanMakeBerryPowder[]; +// Rotom Catalog text +extern const u8 gText_LightBulb[]; +extern const u8 gText_MicrowaveOven[]; +extern const u8 gText_WashingMachine[]; +extern const u8 gText_Refrigerator[]; +extern const u8 gText_ElectricFan[]; +extern const u8 gText_LawnMower[]; +extern const u8 gText_Exit[]; + +// Zygarde Cube text +extern const u8 gText_ChangeForm[]; +extern const u8 gText_ChangeAbility[]; + // Frontier records. extern const u8 gText_WinStreak[]; extern const u8 gText_Record[]; @@ -2258,6 +2143,7 @@ extern const u8 gText_BoostPp[]; extern const u8 gText_DoWhatWithItem[]; extern const u8 gText_DoWhatWithMail[]; extern const u8 gText_AlreadyHoldingOne[]; +extern const u8 gText_WhichAppliance[]; extern const u8 gText_NoUse[]; extern const u8 gText_Able[]; extern const u8 gText_First_PM[]; @@ -3166,4 +3052,6 @@ extern const u8 gText_TellHimTheWords[]; extern const u8 gText_ExpShareOn[]; extern const u8 gText_ExpShareOff[]; +extern const u8 gText_BasePointsResetToZero[]; + #endif // GUARD_STRINGS_H diff --git a/include/test/battle.h b/include/test/battle.h index 1e264f95bd..616c81964a 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -199,6 +199,17 @@ * - Instead of player and opponent there is playerLeft, playerRight, * opponentLeft, and opponentRight. * + * AI_SINGLE_BATTLE_TEST(name, results...) and AI_DOUBLE_BATTLE_TEST(name, results...) + * Define battles where opponent mons are controlled by AI, the same that runs + * when battling regular Trainers. The flags for AI should be specified by + * the AI_FLAGS command. + * The rules remain the same as with the SINGLE and DOUBLE battle tests + * with some differences: + * - opponent's action is specified by the EXPECT_MOVE(s) / EXPECT_SEND_OUT / EXPECT_SWITCH commands + * - we don't control what opponent actually does, instead we make sure the opponent does what we expect it to do + * - we still control the player's action the same way + * - apart from the EXPECTED commands, there's also a new SCORE_ and SCORE__VAL commands + * * KNOWN_FAILING * Marks a test as not passing due to a bug. If there is an issue number * associated with the bug it should be included in a comment. If the @@ -289,6 +300,11 @@ * Note if Moves is specified then MOVE will not automatically add moves * to the moveset. * + * AI_FLAGS + * Specifies which AI flags are run during the test. Has use only for AI tests. + * The most common combination is AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT) + * which is the general 'smart' AI. + * * WHEN * Contains the choices that battlers make during the battle. * @@ -470,6 +486,7 @@ #include "recorded_battle.h" #include "util.h" #include "constants/abilities.h" +#include "constants/battle_ai.h" #include "constants/battle_anim.h" #include "constants/battle_move_effects.h" #include "constants/hold_effects.h" @@ -483,11 +500,12 @@ #define BATTLE_TEST_STACK_SIZE 1024 #define MAX_TURNS 16 #define MAX_QUEUED_EVENTS 25 +#define MAX_EXPECTED_ACTIONS 10 -enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES, BATTLE_TEST_WILD }; +enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES, BATTLE_TEST_WILD, BATTLE_TEST_AI_SINGLES, BATTLE_TEST_AI_DOUBLES }; -typedef void (*SingleBattleTestFunction)(void *, u32, struct BattlePokemon *, struct BattlePokemon *); -typedef void (*DoubleBattleTestFunction)(void *, u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*SingleBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*DoubleBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); struct BattleTest { @@ -584,6 +602,42 @@ struct BattlerTurn struct TurnRNG rng; }; +struct ExpectedAIAction +{ + u16 sourceLine; + u8 type:4; // which action + u8 moveSlots:4; // Expected move(s) to be chosen or not, marked as bits. + u8 target:4; // move target or id of mon which gets sent out + u8 explicitTarget:1; // For double battles, if it's set it requires the move to hit a specific target, otherwise any target is fine. + u8 pass:1; // No matter what AI does, it always passes. + u8 notMove:1; // We're expecting AI to choose any move EXCEPT the specified one. + u8 actionSet:1; // Action was set and is expected to happen. Set only for battlers controlled by AI. +}; + +#define MAX_AI_SCORE_COMPARISION_PER_TURN 4 +#define MAX_AI_LOG_LINES 10 + +struct ExpectedAiScore +{ + // We can compare AI's move score to a value or to another move's score. + u8 moveSlot1:2; + u8 moveSlot2:2; + u8 target:2; + s8 value; // value + u8 cmp:3; // Uses battle script command's CMP_ macros + u8 toValue:1; // compare to value, not to move + u8 set:1; + u16 sourceLine; +}; + +struct AILogLine +{ + const char *file; + u16 line:15; + u16 set:1; // Whether score was set, or added/subtracted + s16 score; +}; + struct BattleTestData { u8 stack[BATTLE_TEST_STACK_SIZE]; @@ -606,6 +660,8 @@ struct BattleTestData u8 turns; u8 actionBattlers; u8 moveBattlers; + bool8 hasAI:1; + bool8 logAI:1; struct RecordedBattleSave recordedBattle; u8 battleRecordTypes[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; @@ -619,14 +675,20 @@ struct BattleTestData u8 queueGroupStart; u8 queuedEvent; struct QueuedEvent queuedEvents[MAX_QUEUED_EVENTS]; + u8 expectedAiActionIndex[MAX_BATTLERS_COUNT]; + u8 aiActionsPlayed[MAX_BATTLERS_COUNT]; + struct ExpectedAIAction expectedAiActions[MAX_BATTLERS_COUNT][MAX_EXPECTED_ACTIONS]; + struct ExpectedAiScore expectedAiScores[MAX_BATTLERS_COUNT][MAX_TURNS][MAX_AI_SCORE_COMPARISION_PER_TURN]; // Max 4 comparisions per turn + struct AILogLine aiLogLines[MAX_BATTLERS_COUNT][MAX_MON_MOVES][MAX_AI_LOG_LINES]; + u8 aiLogPrintedForMove[MAX_BATTLERS_COUNT]; // Marks ai score log as printed for move, so the same log isn't displayed multiple times. }; struct BattleTestRunnerState { u8 battlersCount; - u8 parametersCount; // Valid only in BattleTest_Setup. - u8 parameters; - u8 runParameter; + u16 parametersCount; // Valid only in BattleTest_Setup. + u16 parameters; + u16 runParameter; u16 rngTag; u16 rngTrialOffset; u16 trials; @@ -650,7 +712,7 @@ struct BattleTestRunnerState }; extern const struct TestRunner gBattleTestRunner; -extern struct BattleTestRunnerState *gBattleTestRunnerState; +extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__) #define MEMBERS_0() @@ -682,9 +744,9 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; TO_DO; \ } -#define SINGLE_BATTLE_TEST(_name, ...) \ +#define BATTLE_TEST_ARGS_SINGLE(_name, _type, ...) \ struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *); \ __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ { \ .name = _name, \ @@ -692,17 +754,17 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; .runner = &gBattleTestRunner, \ .data = (void *)&(const struct BattleTest) \ { \ - .type = BATTLE_TEST_SINGLES, \ + .type = _type, \ .sourceLine = __LINE__, \ .function = { .singles = (SingleBattleTestFunction)CAT(Test, __LINE__) }, \ .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ }, \ }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent) + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent) -#define WILD_BATTLE_TEST(_name, ...) \ +#define BATTLE_TEST_ARGS_DOUBLE(_name, _type, ...) \ struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ { \ .name = _name, \ @@ -710,31 +772,21 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; .runner = &gBattleTestRunner, \ .data = (void *)&(const struct BattleTest) \ { \ - .type = BATTLE_TEST_WILD, \ - .sourceLine = __LINE__, \ - .function = { .singles = (SingleBattleTestFunction)CAT(Test, __LINE__) }, \ - .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ - }, \ - }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent) - -#define DOUBLE_BATTLE_TEST(_name, ...) \ - struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ - __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ - { \ - .name = _name, \ - .filename = __FILE__, \ - .runner = &gBattleTestRunner, \ - .data = (void *)&(const struct BattleTest) \ - { \ - .type = BATTLE_TEST_DOUBLES, \ + .type = _type, \ .sourceLine = __LINE__, \ .function = { .doubles = (DoubleBattleTestFunction)CAT(Test, __LINE__) }, \ .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ }, \ }; \ - static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + + +#define SINGLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_SINGLE(_name, BATTLE_TEST_SINGLES, __VA_ARGS__) +#define WILD_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_SINGLE(_name, BATTLE_TEST_WILD, __VA_ARGS__) +#define AI_SINGLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_SINGLE(_name, BATTLE_TEST_AI_SINGLES, __VA_ARGS__) + +#define DOUBLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_DOUBLE(_name, BATTLE_TEST_DOUBLES, __VA_ARGS__) +#define AI_DOUBLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_DOUBLE(_name, BATTLE_TEST_AI_DOUBLES, __VA_ARGS__) /* Parametrize */ @@ -763,6 +815,8 @@ struct moveWithPP { #define GIVEN for (; gBattleTestRunnerState->runGiven; gBattleTestRunnerState->runGiven = FALSE) #define RNGSeed(seed) RNGSeed_(__LINE__, seed) +#define AI_FLAGS(flags) AIFlags_(__LINE__, flags) +#define AI_LOG AILogScores(__LINE__) #define PLAYER(species) for (OpenPokemon(__LINE__, B_SIDE_PLAYER, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) #define OPPONENT(species) for (OpenPokemon(__LINE__, B_SIDE_OPPONENT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) @@ -779,7 +833,7 @@ struct moveWithPP { #define SpDefense(spDefense) SpDefense_(__LINE__, spDefense) #define Speed(speed) Speed_(__LINE__, speed) #define Item(item) Item_(__LINE__, item) -#define Moves(move1, ...) Moves_(__LINE__, (const u16 [MAX_MON_MOVES]) { move1, __VA_ARGS__ }) +#define Moves(move1, ...) do { u16 moves_[MAX_MON_MOVES] = {move1, __VA_ARGS__}; Moves_(__LINE__, moves_); } while(0) #define MovesWithPP(movewithpp1, ...) MovesWithPP_(__LINE__, (struct moveWithPP[MAX_MON_MOVES]) {movewithpp1, __VA_ARGS__}) #define Friendship(friendship) Friendship_(__LINE__, friendship) #define Status1(status1) Status1_(__LINE__, status1) @@ -789,6 +843,8 @@ void OpenPokemon(u32 sourceLine, u32 side, u32 species); void ClosePokemon(u32 sourceLine); void RNGSeed_(u32 sourceLine, u32 seed); +void AIFlags_(u32 sourceLine, u32 flags); +void AILogScores(u32 sourceLine); void Gender_(u32 sourceLine, u32 gender); void Nature_(u32 sourceLine, u32 nature); void Ability_(u32 sourceLine, u32 ability); @@ -801,12 +857,28 @@ void SpAttack_(u32 sourceLine, u32 spAttack); void SpDefense_(u32 sourceLine, u32 spDefense); void Speed_(u32 sourceLine, u32 speed); void Item_(u32 sourceLine, u32 item); -void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]); +void Moves_(u32 sourceLine, u16 moves[MAX_MON_MOVES]); void MovesWithPP_(u32 sourceLine, struct moveWithPP moveWithPP[MAX_MON_MOVES]); void Friendship_(u32 sourceLine, u32 friendship); void Status1_(u32 sourceLine, u32 status1); void OTName_(u32 sourceLine, const u8 *otName); +// Created for easy use of EXPECT_MOVES, so the user can provide 1, 2, 3 or 4 moves for AI which can pass the test. +struct FourMoves +{ + u16 moves[MAX_MON_MOVES]; +}; + +struct TestAIScoreStruct +{ + u32 move1; + bool8 explicitMove1; + u32 valueOrMoveId2; + bool8 explicitValueOrMoveId2; + struct BattlePokemon *target; + bool8 explicitTarget; +}; + #define PLAYER_PARTY (gBattleTestRunnerState->data.recordedBattle.playerParty) #define OPPONENT_PARTY (gBattleTestRunnerState->data.recordedBattle.opponentParty) @@ -819,6 +891,22 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define TURN for (OpenTurn(__LINE__); gBattleTestRunnerState->data.turnState == TURN_OPEN; CloseTurn(__LINE__)) #define MOVE(battler, ...) Move(__LINE__, battler, (struct MoveContext) { APPEND_TRUE(__VA_ARGS__) }) + +#define EXPECT_MOVE(battler, ...) ExpectMove(__LINE__, battler, (struct MoveContext) { APPEND_TRUE(__VA_ARGS__) }) +#define NOT_EXPECT_MOVE(battler, _move) ExpectMove(__LINE__, battler, (struct MoveContext) { .move = _move, .explicitMove = TRUE, .notExpected = TRUE, .explicitNotExpected = TRUE, }) +#define EXPECT_MOVES(battler, ...) ExpectMoves(__LINE__, battler, FALSE, (struct FourMoves) {{ __VA_ARGS__ }}) +#define NOT_EXPECT_MOVES(battler, ...) ExpectMoves(__LINE__, battler, TRUE, (struct FourMoves) {{ __VA_ARGS__ }}) +#define EXPECT_SEND_OUT(battler, partyIndex) ExpectSendOut(__LINE__, battler, partyIndex) +#define EXPECT_SWITCH(battler, partyIndex) ExpectSwitch(__LINE__, battler, partyIndex) +#define SCORE_EQ(battler, ...) Score(__LINE__, battler, CMP_EQUAL, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_NE(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_GT(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_LT(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_EQ_VAL(battler, ...) Score(__LINE__, battler, CMP_EQUAL, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_NE_VAL(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_GT_VAL(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) +#define SCORE_LT_VAL(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } ) + #define FORCED_MOVE(battler) ForcedMove(__LINE__, battler) #define SWITCH(battler, partyIndex) Switch(__LINE__, battler, partyIndex) #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) @@ -843,8 +931,12 @@ struct MoveContext u16 ultraBurst:1; u16 explicitUltraBurst:1; // TODO: u8 zMove:1; + u16 dynamax:1; + u16 explicitDynamax:1; u16 allowed:1; u16 explicitAllowed:1; + u16 notExpected:1; // Has effect only with EXPECT_MOVE + u16 explicitNotExpected:1; struct BattlePokemon *target; bool8 explicitTarget; struct TurnRNG rng; @@ -864,6 +956,11 @@ struct ItemContext void OpenTurn(u32 sourceLine); void CloseTurn(u32 sourceLine); void Move(u32 sourceLine, struct BattlePokemon *, struct MoveContext); +void ExpectMove(u32 sourceLine, struct BattlePokemon *, struct MoveContext); +void ExpectMoves(u32 sourceLine, struct BattlePokemon *battler, bool32 notExpected, struct FourMoves moves); +void ExpectSendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex); +void ExpectSwitch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex); +void Score(u32 sourceLine, struct BattlePokemon *battler, u32 cmp, bool32 toValue, struct TestAIScoreStruct cmpCtx); void ForcedMove(u32 sourceLine, struct BattlePokemon *); void Switch(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); void SkipTurn(u32 sourceLine, struct BattlePokemon *); diff --git a/include/test/test.h b/include/test/test.h index 5b3ab8af0c..e9c920bd0b 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -47,6 +47,7 @@ struct TestRunnerState u8 expectedResult; bool8 expectLeaks:1; bool8 inBenchmark:1; + bool8 tearDown:1; u32 timeoutSeconds; }; diff --git a/include/test_runner.h b/include/test_runner.h index 199b2e6cb1..e0df88b0a6 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -14,6 +14,11 @@ void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp); void TestRunner_Battle_RecordMessage(const u8 *message); void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1); void TestRunner_Battle_AfterLastTurn(void); +void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target); +void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex); +void TestRunner_Battle_CheckAiMoveScores(u32 battlerId); +void TestRunner_Battle_AISetScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score); +void TestRunner_Battle_AIAdjustScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score); void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); @@ -28,6 +33,11 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex); #define TestRunner_Battle_RecordMessage(...) (void)0 #define TestRunner_Battle_RecordStatus1(...) (void)0 #define TestRunner_Battle_AfterLastTurn(...) (void)0 +#define TestRunner_Battle_CheckChosenMove(...) (void)0 +#define TestRunner_Battle_CheckSwitch(...) (void)0 +#define TestRunner_Battle_CheckAiMoveScores(...) (void)0 +#define TestRunner_Battle_AISetScore(...) (void)0 +#define TestRunner_Battle_AIAdjustScore(...) (void)0 #define TestRunner_Battle_CheckBattleRecordActionType(...) (void)0 diff --git a/include/util.h b/include/util.h index 8f2079a0ba..3c90f136a6 100644 --- a/include/util.h +++ b/include/util.h @@ -13,7 +13,7 @@ int CountTrailingZeroBits(u32 value); u16 CalcCRC16(const u8 *data, s32 length); u16 CalcCRC16WithTable(const u8 *data, u32 length); u32 CalcByteArraySum(const u8 *data, u32 length); -void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor); +void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u32 blendColor); void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha); void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output); diff --git a/include/wild_encounter.h b/include/wild_encounter.h index bef89d8950..13e7600684 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -31,6 +31,7 @@ extern bool8 gIsFishingEncounter; extern bool8 gIsSurfingEncounter; void DisableWildEncounters(bool8 disabled); +u8 PickWildMonNature(void); bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior); bool8 SweetScentWildEncounter(void); bool8 DoesCurrentMapHaveFishingMons(void); diff --git a/ld_script.txt b/ld_script.txt index a68d1a2a2c..6b7d115b22 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -52,6 +52,7 @@ SECTIONS { { src/rom_header.o(.text); src/rom_header_gf.o(.text.*); + src/rom_header_rhh.o(.text.*); src/crt0.o(.text); src/main.o(.text); gflib/malloc.o(.text); @@ -1325,6 +1326,8 @@ SECTIONS { data/*.o(.rodata); } = 0 + __rom_end = .; + /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ diff --git a/ld_script_modern.txt b/ld_script_modern.txt index 082d694291..7a14cfa52c 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -51,6 +51,7 @@ SECTIONS { { src/rom_header.o(.text*); src/rom_header_gf.o(.text.*); + src/rom_header_rhh.o(.text.*); src/crt0.o(.text); src/main.o(.text); gflib/*.o(.text*); @@ -130,6 +131,8 @@ SECTIONS { src/graphics.o(.rodata); } =0 + __rom_end = .; + /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ diff --git a/ld_script_test.txt b/ld_script_test.txt index f4abad98ab..447d7a2b87 100644 --- a/ld_script_test.txt +++ b/ld_script_test.txt @@ -62,6 +62,7 @@ SECTIONS { { src/rom_header.o(.text); src/rom_header_gf.o(.text.*); + src/rom_header_rhh.o(.text.*); src/*.o(.text); gflib/*.o(.text); } =0 @@ -114,6 +115,8 @@ SECTIONS { test/*.o(.rodata*); } =0 + __rom_end = .; + /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index dc15e0f047..1ffa1b8732 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1939,7 +1939,7 @@ gCryTable:: .endif .if P_GEN_7_POKEMON == TRUE @ Oricorio - cry Cry_OricorioPomPom + cry_uncomp Cry_OricorioPomPom cry Cry_OricorioPau cry Cry_OricorioSensu @ Rockruff @@ -2082,6 +2082,61 @@ gCryTable:: cry Cry_CalyrexShadowRider @ Basculegion cry Cry_Basculegion + @ Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie + cry Cry_Alcremie .else @ Cramorant cry Cry_Unown @@ -2101,6 +2156,7 @@ gCryTable:: cry Cry_Unown cry Cry_Unown cry Cry_Unown + cry Cry_Unown @ Eiscue cry Cry_Unown @ Indeedee @@ -2122,6 +2178,403 @@ gCryTable:: cry Cry_Unown @ Basculegion cry Cry_Unown + @ Alcremie + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown +.endif +.if P_GEN_9_POKEMON == TRUE + cry Cry_Sprigatito + cry Cry_Floragato + cry Cry_Meowscarada + cry Cry_Fuecoco + cry Cry_Crocalor + cry Cry_Skeledirge + cry Cry_Quaxly + cry Cry_Quaxwell + cry Cry_Quaquaval + cry Cry_Lechonk + cry Cry_Oinkologne + cry Cry_OinkologneFemale + cry Cry_Tarountula + cry Cry_Spidops + cry Cry_Nymble + cry Cry_Lokix + cry Cry_Pawmi + cry Cry_Pawmo + cry Cry_Pawmot + cry Cry_Tandemaus + cry Cry_Maushold + cry Cry_MausholdFamilyOfFour + cry Cry_Fidough + cry Cry_Dachsbun + cry Cry_Smoliv + cry Cry_Dolliv + cry Cry_Arboliva + cry Cry_Squawkabilly + cry Cry_Squawkabilly + cry Cry_Squawkabilly + cry Cry_Squawkabilly + cry Cry_Nacli + cry Cry_Naclstack + cry Cry_Garganacl + cry Cry_Charcadet + cry Cry_Armarouge + cry Cry_Ceruledge + cry Cry_Tadbulb + cry Cry_Bellibolt + cry Cry_Wattrel + cry Cry_Kilowattrel + cry Cry_Maschiff + cry Cry_Mabosstiff + cry Cry_Shroodle + cry Cry_Grafaiai + cry Cry_Bramblin + cry Cry_Brambleghast + cry Cry_Toedscool + cry Cry_Toedscruel + cry Cry_Klawf + cry Cry_Capsakid + cry Cry_Scovillain + cry Cry_Rellor + cry Cry_Rabsca + cry Cry_Flittle + cry Cry_Espathra + cry Cry_Tinkatink + cry Cry_Tinkatuff + cry Cry_Tinkaton + cry Cry_Wiglett + cry Cry_Wugtrio + cry Cry_Bombirdier + cry Cry_Finizen + cry Cry_Palafin + cry Cry_PalafinHero + cry Cry_Varoom + cry Cry_Revavroom + cry Cry_Cyclizar + cry Cry_Orthworm + cry Cry_Glimmet + cry Cry_Glimmora + cry Cry_Greavard + cry Cry_Houndstone + cry Cry_Flamigo + cry Cry_Cetoddle + cry Cry_Cetitan + cry Cry_Veluza + cry Cry_Dondozo + cry Cry_Tatsugiri + cry Cry_TatsugiriDroopy + cry Cry_TatsugiriStretchy + cry Cry_Annihilape + cry Cry_Clodsire + cry Cry_Farigiraf + cry Cry_Dudunsparce + cry Cry_Dudunsparce + cry Cry_Kingambit + cry Cry_GreatTusk + cry Cry_ScreamTail + cry Cry_BruteBonnet + cry Cry_FlutterMane + cry Cry_SlitherWing + cry Cry_SandyShocks + cry Cry_IronTreads + cry Cry_IronBundle + cry Cry_IronHands + cry Cry_IronJugulis + cry Cry_IronMoth + cry Cry_IronThorns + cry Cry_Frigibax + cry Cry_Arctibax + cry Cry_Baxcalibur + cry Cry_Gimmighoul + cry Cry_Gimmighoul + cry Cry_Gholdengo + cry Cry_WoChien + cry Cry_ChienPao + cry Cry_TingLu + cry Cry_ChiYu + cry Cry_RoaringMoon + cry Cry_IronValiant + cry Cry_Koraidon + cry Cry_Miraidon +.else + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown +.endif +@ Paldean Forms + cry Cry_Tauros + cry Cry_Tauros + cry Cry_Tauros + cry Cry_Wooper +.if P_GEN_9_POKEMON == TRUE + cry Cry_WalkingWake + cry Cry_IronLeaves + cry Cry_Dipplin + cry Cry_Poltchageist + cry Cry_Poltchageist + cry Cry_Sinistcha + cry Cry_Sinistcha + cry Cry_Okidogi + cry Cry_Munkidori + cry Cry_Fezandipiti + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon + cry Cry_Ogerpon +.else + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown +.endif +.if P_GEN_8_POKEMON == TRUE + cry Cry_Ursaluna +.else + cry Cry_Unown +.endif +@ Gigantamax Forms + cry Cry_Venusaur + cry Cry_Charizard + cry Cry_Blastoise + cry Cry_Butterfree + cry Cry_Pikachu + cry Cry_Meowth + cry Cry_Machamp + cry Cry_Gengar + cry Cry_Kingler + cry Cry_Lapras + cry Cry_Eevee + cry Cry_Snorlax +.if P_GEN_5_POKEMON == TRUE + cry Cry_Garbodor +.else + cry Cry_Unown +.endif +.if P_GEN_7_POKEMON == TRUE + cry Cry_Melmetal +.else + cry Cry_Unown +.endif +.if P_GEN_8_POKEMON == TRUE + cry Cry_Rillaboom + cry Cry_Cinderace + cry Cry_Inteleon + cry Cry_Corviknight + cry Cry_Orbeetle + cry Cry_Drednaw + cry Cry_Coalossal + cry Cry_Flapple + cry Cry_Appletun + cry Cry_Sandaconda + cry Cry_Toxtricity + cry Cry_Centiskorch + cry Cry_Hatterene + cry Cry_Grimmsnarl + cry Cry_Alcremie + cry Cry_Copperajah + cry Cry_Duraludon + cry Cry_Urshifu + cry Cry_Urshifu +.else + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown + cry Cry_Unown .endif .align 2 @@ -4035,7 +4488,7 @@ gCryTable_Reverse:: .endif .if P_GEN_7_POKEMON == TRUE @ Oricorio - cry_reverse Cry_OricorioPomPom + cry_reverse_uncomp Cry_OricorioPomPom cry_reverse Cry_OricorioPau cry_reverse Cry_OricorioSensu @ Rockruff @@ -4169,6 +4622,61 @@ gCryTable_Reverse:: cry_reverse Cry_CalyrexShadowRider @ Basculegion cry_reverse Cry_Basculegion + @ Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie + cry_reverse Cry_Alcremie .else cry_reverse Cry_Unown cry_reverse Cry_Unown @@ -4194,4 +4702,400 @@ gCryTable_Reverse:: cry_reverse Cry_Unown cry_reverse Cry_Unown cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown +.endif +.if P_GEN_9_POKEMON == TRUE + cry_reverse Cry_Sprigatito + cry_reverse Cry_Floragato + cry_reverse Cry_Meowscarada + cry_reverse Cry_Fuecoco + cry_reverse Cry_Crocalor + cry_reverse Cry_Skeledirge + cry_reverse Cry_Quaxly + cry_reverse Cry_Quaxwell + cry_reverse Cry_Quaquaval + cry_reverse Cry_Lechonk + cry_reverse Cry_Oinkologne + cry_reverse Cry_OinkologneFemale + cry_reverse Cry_Tarountula + cry_reverse Cry_Spidops + cry_reverse Cry_Nymble + cry_reverse Cry_Lokix + cry_reverse Cry_Pawmi + cry_reverse Cry_Pawmo + cry_reverse Cry_Pawmot + cry_reverse Cry_Tandemaus + cry_reverse Cry_Maushold + cry_reverse Cry_MausholdFamilyOfFour + cry_reverse Cry_Fidough + cry_reverse Cry_Dachsbun + cry_reverse Cry_Smoliv + cry_reverse Cry_Dolliv + cry_reverse Cry_Arboliva + cry_reverse Cry_Squawkabilly + cry_reverse Cry_Squawkabilly + cry_reverse Cry_Squawkabilly + cry_reverse Cry_Squawkabilly + cry_reverse Cry_Nacli + cry_reverse Cry_Naclstack + cry_reverse Cry_Garganacl + cry_reverse Cry_Charcadet + cry_reverse Cry_Armarouge + cry_reverse Cry_Ceruledge + cry_reverse Cry_Tadbulb + cry_reverse Cry_Bellibolt + cry_reverse Cry_Wattrel + cry_reverse Cry_Kilowattrel + cry_reverse Cry_Maschiff + cry_reverse Cry_Mabosstiff + cry_reverse Cry_Shroodle + cry_reverse Cry_Grafaiai + cry_reverse Cry_Bramblin + cry_reverse Cry_Brambleghast + cry_reverse Cry_Toedscool + cry_reverse Cry_Toedscruel + cry_reverse Cry_Klawf + cry_reverse Cry_Capsakid + cry_reverse Cry_Scovillain + cry_reverse Cry_Rellor + cry_reverse Cry_Rabsca + cry_reverse Cry_Flittle + cry_reverse Cry_Espathra + cry_reverse Cry_Tinkatink + cry_reverse Cry_Tinkatuff + cry_reverse Cry_Tinkaton + cry_reverse Cry_Wiglett + cry_reverse Cry_Wugtrio + cry_reverse Cry_Bombirdier + cry_reverse Cry_Finizen + cry_reverse Cry_Palafin + cry_reverse Cry_PalafinHero + cry_reverse Cry_Varoom + cry_reverse Cry_Revavroom + cry_reverse Cry_Cyclizar + cry_reverse Cry_Orthworm + cry_reverse Cry_Glimmet + cry_reverse Cry_Glimmora + cry_reverse Cry_Greavard + cry_reverse Cry_Houndstone + cry_reverse Cry_Flamigo + cry_reverse Cry_Cetoddle + cry_reverse Cry_Cetitan + cry_reverse Cry_Veluza + cry_reverse Cry_Dondozo + cry_reverse Cry_Tatsugiri + cry_reverse Cry_TatsugiriDroopy + cry_reverse Cry_TatsugiriStretchy + cry_reverse Cry_Annihilape + cry_reverse Cry_Clodsire + cry_reverse Cry_Farigiraf + cry_reverse Cry_Dudunsparce + cry_reverse Cry_Dudunsparce + cry_reverse Cry_Kingambit + cry_reverse Cry_GreatTusk + cry_reverse Cry_ScreamTail + cry_reverse Cry_BruteBonnet + cry_reverse Cry_FlutterMane + cry_reverse Cry_SlitherWing + cry_reverse Cry_SandyShocks + cry_reverse Cry_IronTreads + cry_reverse Cry_IronBundle + cry_reverse Cry_IronHands + cry_reverse Cry_IronJugulis + cry_reverse Cry_IronMoth + cry_reverse Cry_IronThorns + cry_reverse Cry_Frigibax + cry_reverse Cry_Arctibax + cry_reverse Cry_Baxcalibur + cry_reverse Cry_Gimmighoul + cry_reverse Cry_Gimmighoul + cry_reverse Cry_Gholdengo + cry_reverse Cry_WoChien + cry_reverse Cry_ChienPao + cry_reverse Cry_TingLu + cry_reverse Cry_ChiYu + cry_reverse Cry_RoaringMoon + cry_reverse Cry_IronValiant + cry_reverse Cry_Koraidon + cry_reverse Cry_Miraidon +.else + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown +.endif +@ Paldean Forms + cry_reverse Cry_Tauros + cry_reverse Cry_Tauros + cry_reverse Cry_Tauros + cry_reverse Cry_Wooper +.if P_GEN_9_POKEMON == TRUE + cry_reverse Cry_WalkingWake + cry_reverse Cry_IronLeaves + cry_reverse Cry_Dipplin + cry_reverse Cry_Poltchageist + cry_reverse Cry_Poltchageist + cry_reverse Cry_Sinistcha + cry_reverse Cry_Sinistcha + cry_reverse Cry_Okidogi + cry_reverse Cry_Munkidori + cry_reverse Cry_Fezandipiti + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon + cry_reverse Cry_Ogerpon +.else + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown +.endif +.if P_GEN_8_POKEMON == TRUE + cry_reverse Cry_Ursaluna +.else + cry_reverse Cry_Unown +.endif + @ Gigantamax Forms + cry_reverse Cry_Venusaur + cry_reverse Cry_Charizard + cry_reverse Cry_Blastoise + cry_reverse Cry_Butterfree + cry_reverse Cry_Pikachu + cry_reverse Cry_Meowth + cry_reverse Cry_Machamp + cry_reverse Cry_Gengar + cry_reverse Cry_Kingler + cry_reverse Cry_Lapras + cry_reverse Cry_Eevee + cry_reverse Cry_Snorlax +.if P_GEN_5_POKEMON == TRUE + cry_reverse Cry_Garbodor +.else + cry_reverse Cry_Unown +.endif +.if P_GEN_7_POKEMON == TRUE + cry_reverse Cry_Melmetal +.else + cry_reverse Cry_Unown +.endif +.if P_GEN_8_POKEMON == TRUE + cry_reverse Cry_Rillaboom + cry_reverse Cry_Cinderace + cry_reverse Cry_Inteleon + cry_reverse Cry_Corviknight + cry_reverse Cry_Orbeetle + cry_reverse Cry_Drednaw + cry_reverse Cry_Coalossal + cry_reverse Cry_Flapple + cry_reverse Cry_Appletun + cry_reverse Cry_Sandaconda + cry_reverse Cry_Toxtricity + cry_reverse Cry_Centiskorch + cry_reverse Cry_Hatterene + cry_reverse Cry_Grimmsnarl + cry_reverse Cry_Alcremie + cry_reverse Cry_Copperajah + cry_reverse Cry_Duraludon + cry_reverse Cry_Urshifu + cry_reverse Cry_Urshifu +.else + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown + cry_reverse Cry_Unown .endif diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 3020a8f1a5..80182fbb65 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -4288,7 +4288,7 @@ Cry_HoopaUnbound:: .if P_GEN_7_POKEMON == TRUE .align 2 Cry_OricorioPomPom:: - .incbin "sound/direct_sound_samples/cries/oricorio_pom_pom.bin" + .incbin "sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.bin" .align 2 Cry_OricorioPau:: @@ -4364,6 +4364,476 @@ Cry_CalyrexIceRider:: Cry_CalyrexShadowRider:: .incbin "sound/direct_sound_samples/cries/calyrex_shadow_rider.bin" +.endif +.if P_GEN_9_POKEMON == TRUE + .align 2 +Cry_Sprigatito:: + .incbin "sound/direct_sound_samples/cries/sprigatito.bin" + + .align 2 +Cry_Floragato:: + .incbin "sound/direct_sound_samples/cries/floragato.bin" + + .align 2 +Cry_Meowscarada:: + .incbin "sound/direct_sound_samples/cries/meowscarada.bin" + + .align 2 +Cry_Fuecoco:: + .incbin "sound/direct_sound_samples/cries/fuecoco.bin" + + .align 2 +Cry_Crocalor:: + .incbin "sound/direct_sound_samples/cries/crocalor.bin" + + .align 2 +Cry_Skeledirge:: + .incbin "sound/direct_sound_samples/cries/skeledirge.bin" + + .align 2 +Cry_Quaxly:: + .incbin "sound/direct_sound_samples/cries/quaxly.bin" + + .align 2 +Cry_Quaxwell:: + .incbin "sound/direct_sound_samples/cries/quaxwell.bin" + + .align 2 +Cry_Quaquaval:: + .incbin "sound/direct_sound_samples/cries/quaquaval.bin" + + .align 2 +Cry_Lechonk:: + .incbin "sound/direct_sound_samples/cries/lechonk.bin" + + .align 2 +Cry_Oinkologne:: + .incbin "sound/direct_sound_samples/cries/oinkologne.bin" + + .align 2 +Cry_OinkologneFemale:: + .incbin "sound/direct_sound_samples/cries/oinkologne_female.bin" + + .align 2 +Cry_Tarountula:: + .incbin "sound/direct_sound_samples/cries/tarountula.bin" + + .align 2 +Cry_Spidops:: + .incbin "sound/direct_sound_samples/cries/spidops.bin" + + .align 2 +Cry_Nymble:: + .incbin "sound/direct_sound_samples/cries/nymble.bin" + + .align 2 +Cry_Lokix:: + .incbin "sound/direct_sound_samples/cries/lokix.bin" + + .align 2 +Cry_Pawmi:: + .incbin "sound/direct_sound_samples/cries/pawmi.bin" + + .align 2 +Cry_Pawmo:: + .incbin "sound/direct_sound_samples/cries/pawmo.bin" + + .align 2 +Cry_Pawmot:: + .incbin "sound/direct_sound_samples/cries/pawmot.bin" + + .align 2 +Cry_Tandemaus:: + .incbin "sound/direct_sound_samples/cries/tandemaus.bin" + + .align 2 +Cry_Maushold:: + .incbin "sound/direct_sound_samples/cries/maushold.bin" + + .align 2 +Cry_MausholdFamilyOfFour:: + .incbin "sound/direct_sound_samples/cries/maushold_family_of_four.bin" + + .align 2 +Cry_Fidough:: + .incbin "sound/direct_sound_samples/cries/fidough.bin" + + .align 2 +Cry_Dachsbun:: + .incbin "sound/direct_sound_samples/cries/dachsbun.bin" + + .align 2 +Cry_Smoliv:: + .incbin "sound/direct_sound_samples/cries/smoliv.bin" + + .align 2 +Cry_Dolliv:: + .incbin "sound/direct_sound_samples/cries/dolliv.bin" + + .align 2 +Cry_Arboliva:: + .incbin "sound/direct_sound_samples/cries/arboliva.bin" + + .align 2 +Cry_Squawkabilly:: + .incbin "sound/direct_sound_samples/cries/squawkabilly.bin" + + .align 2 +Cry_Nacli:: + .incbin "sound/direct_sound_samples/cries/nacli.bin" + + .align 2 +Cry_Naclstack:: + .incbin "sound/direct_sound_samples/cries/naclstack.bin" + + .align 2 +Cry_Garganacl:: + .incbin "sound/direct_sound_samples/cries/garganacl.bin" + + .align 2 +Cry_Charcadet:: + .incbin "sound/direct_sound_samples/cries/charcadet.bin" + + .align 2 +Cry_Armarouge:: + .incbin "sound/direct_sound_samples/cries/armarouge.bin" + + .align 2 +Cry_Ceruledge:: + .incbin "sound/direct_sound_samples/cries/ceruledge.bin" + + .align 2 +Cry_Tadbulb:: + .incbin "sound/direct_sound_samples/cries/tadbulb.bin" + + .align 2 +Cry_Bellibolt:: + .incbin "sound/direct_sound_samples/cries/bellibolt.bin" + + .align 2 +Cry_Wattrel:: + .incbin "sound/direct_sound_samples/cries/wattrel.bin" + + .align 2 +Cry_Kilowattrel:: + .incbin "sound/direct_sound_samples/cries/kilowattrel.bin" + + .align 2 +Cry_Maschiff:: + .incbin "sound/direct_sound_samples/cries/maschiff.bin" + + .align 2 +Cry_Mabosstiff:: + .incbin "sound/direct_sound_samples/cries/mabosstiff.bin" + + .align 2 +Cry_Shroodle:: + .incbin "sound/direct_sound_samples/cries/shroodle.bin" + + .align 2 +Cry_Grafaiai:: + .incbin "sound/direct_sound_samples/cries/grafaiai.bin" + + .align 2 +Cry_Bramblin:: + .incbin "sound/direct_sound_samples/cries/bramblin.bin" + + .align 2 +Cry_Brambleghast:: + .incbin "sound/direct_sound_samples/cries/brambleghast.bin" + + .align 2 +Cry_Toedscool:: + .incbin "sound/direct_sound_samples/cries/toedscool.bin" + + .align 2 +Cry_Toedscruel:: + .incbin "sound/direct_sound_samples/cries/toedscruel.bin" + + .align 2 +Cry_Klawf:: + .incbin "sound/direct_sound_samples/cries/klawf.bin" + + .align 2 +Cry_Capsakid:: + .incbin "sound/direct_sound_samples/cries/capsakid.bin" + + .align 2 +Cry_Scovillain:: + .incbin "sound/direct_sound_samples/cries/scovillain.bin" + + .align 2 +Cry_Rellor:: + .incbin "sound/direct_sound_samples/cries/rellor.bin" + + .align 2 +Cry_Rabsca:: + .incbin "sound/direct_sound_samples/cries/rabsca.bin" + + .align 2 +Cry_Flittle:: + .incbin "sound/direct_sound_samples/cries/flittle.bin" + + .align 2 +Cry_Espathra:: + .incbin "sound/direct_sound_samples/cries/espathra.bin" + + .align 2 +Cry_Tinkatink:: + .incbin "sound/direct_sound_samples/cries/tinkatink.bin" + + .align 2 +Cry_Tinkatuff:: + .incbin "sound/direct_sound_samples/cries/tinkatuff.bin" + + .align 2 +Cry_Tinkaton:: + .incbin "sound/direct_sound_samples/cries/tinkaton.bin" + + .align 2 +Cry_Wiglett:: + .incbin "sound/direct_sound_samples/cries/wiglett.bin" + + .align 2 +Cry_Wugtrio:: + .incbin "sound/direct_sound_samples/cries/wugtrio.bin" + + .align 2 +Cry_Bombirdier:: + .incbin "sound/direct_sound_samples/cries/bombirdier.bin" + + .align 2 +Cry_Finizen:: + .incbin "sound/direct_sound_samples/cries/finizen.bin" + + .align 2 +Cry_Palafin:: + .incbin "sound/direct_sound_samples/cries/palafin.bin" + + .align 2 +Cry_PalafinHero:: + .incbin "sound/direct_sound_samples/cries/palafin_hero.bin" + + .align 2 +Cry_Varoom:: + .incbin "sound/direct_sound_samples/cries/varoom.bin" + + .align 2 +Cry_Revavroom:: + .incbin "sound/direct_sound_samples/cries/revavroom.bin" + + .align 2 +Cry_Cyclizar:: + .incbin "sound/direct_sound_samples/cries/cyclizar.bin" + + .align 2 +Cry_Orthworm:: + .incbin "sound/direct_sound_samples/cries/orthworm.bin" + + .align 2 +Cry_Glimmet:: + .incbin "sound/direct_sound_samples/cries/glimmet.bin" + + .align 2 +Cry_Glimmora:: + .incbin "sound/direct_sound_samples/cries/glimmora.bin" + + .align 2 +Cry_Greavard:: + .incbin "sound/direct_sound_samples/cries/greavard.bin" + + .align 2 +Cry_Houndstone:: + .incbin "sound/direct_sound_samples/cries/houndstone.bin" + + .align 2 +Cry_Flamigo:: + .incbin "sound/direct_sound_samples/cries/flamigo.bin" + + .align 2 +Cry_Cetoddle:: + .incbin "sound/direct_sound_samples/cries/cetoddle.bin" + + .align 2 +Cry_Cetitan:: + .incbin "sound/direct_sound_samples/cries/cetitan.bin" + + .align 2 +Cry_Veluza:: + .incbin "sound/direct_sound_samples/cries/veluza.bin" + + .align 2 +Cry_Dondozo:: + .incbin "sound/direct_sound_samples/cries/dondozo.bin" + + .align 2 +Cry_Tatsugiri:: + .incbin "sound/direct_sound_samples/cries/tatsugiri.bin" + + .align 2 +Cry_TatsugiriDroopy:: + .incbin "sound/direct_sound_samples/cries/tatsugiri_droopy.bin" + + .align 2 +Cry_TatsugiriStretchy:: + .incbin "sound/direct_sound_samples/cries/tatsugiri_stretchy.bin" + + .align 2 +Cry_Annihilape:: + .incbin "sound/direct_sound_samples/cries/annihilape.bin" + + .align 2 +Cry_Clodsire:: + .incbin "sound/direct_sound_samples/cries/clodsire.bin" + + .align 2 +Cry_Farigiraf:: + .incbin "sound/direct_sound_samples/cries/farigiraf.bin" + + .align 2 +Cry_Dudunsparce:: + .incbin "sound/direct_sound_samples/cries/dudunsparce.bin" + + .align 2 +Cry_Kingambit:: + .incbin "sound/direct_sound_samples/cries/kingambit.bin" + + .align 2 +Cry_GreatTusk:: + .incbin "sound/direct_sound_samples/cries/greattusk.bin" + + .align 2 +Cry_ScreamTail:: + .incbin "sound/direct_sound_samples/cries/screamtail.bin" + + .align 2 +Cry_BruteBonnet:: + .incbin "sound/direct_sound_samples/cries/brutebonnet.bin" + + .align 2 +Cry_FlutterMane:: + .incbin "sound/direct_sound_samples/cries/fluttermane.bin" + + .align 2 +Cry_SlitherWing:: + .incbin "sound/direct_sound_samples/cries/slitherwing.bin" + + .align 2 +Cry_SandyShocks:: + .incbin "sound/direct_sound_samples/cries/sandyshocks.bin" + + .align 2 +Cry_IronTreads:: + .incbin "sound/direct_sound_samples/cries/irontreads.bin" + + .align 2 +Cry_IronBundle:: + .incbin "sound/direct_sound_samples/cries/ironbundle.bin" + + .align 2 +Cry_IronHands:: + .incbin "sound/direct_sound_samples/cries/ironhands.bin" + + .align 2 +Cry_IronJugulis:: + .incbin "sound/direct_sound_samples/cries/ironjugulis.bin" + + .align 2 +Cry_IronMoth:: + .incbin "sound/direct_sound_samples/cries/ironmoth.bin" + + .align 2 +Cry_IronThorns:: + .incbin "sound/direct_sound_samples/cries/ironthorns.bin" + + .align 2 +Cry_Frigibax:: + .incbin "sound/direct_sound_samples/cries/frigibax.bin" + + .align 2 +Cry_Arctibax:: + .incbin "sound/direct_sound_samples/cries/arctibax.bin" + + .align 2 +Cry_Baxcalibur:: + .incbin "sound/direct_sound_samples/cries/baxcalibur.bin" + + .align 2 +Cry_Gimmighoul:: + .incbin "sound/direct_sound_samples/cries/gimmighoul.bin" + + .align 2 +Cry_Gholdengo:: + .incbin "sound/direct_sound_samples/cries/gholdengo.bin" + + .align 2 +Cry_WoChien:: + .incbin "sound/direct_sound_samples/cries/wochien.bin" + + .align 2 +Cry_ChienPao:: + .incbin "sound/direct_sound_samples/cries/chienpao.bin" + + .align 2 +Cry_TingLu:: + .incbin "sound/direct_sound_samples/cries/tinglu.bin" + + .align 2 +Cry_ChiYu:: + .incbin "sound/direct_sound_samples/cries/chiyu.bin" + + .align 2 +Cry_RoaringMoon:: + .incbin "sound/direct_sound_samples/cries/roaringmoon.bin" + + .align 2 +Cry_IronValiant:: + .incbin "sound/direct_sound_samples/cries/ironvaliant.bin" + + .align 2 +Cry_Koraidon:: + .incbin "sound/direct_sound_samples/cries/koraidon.bin" + + .align 2 +Cry_Miraidon:: + .incbin "sound/direct_sound_samples/cries/miraidon.bin" + + .align 2 +Cry_WalkingWake:: + .incbin "sound/direct_sound_samples/cries/walkingwake.bin" + + .align 2 +Cry_IronLeaves:: + .incbin "sound/direct_sound_samples/cries/ironleaves.bin" + + .align 2 +Cry_Dipplin:: + .incbin "sound/direct_sound_samples/cries/dipplin.bin" + + .align 2 +Cry_Poltchageist:: + .incbin "sound/direct_sound_samples/cries/poltchageist.bin" + + .align 2 +Cry_Sinistcha:: + .incbin "sound/direct_sound_samples/cries/sinistcha.bin" + + .align 2 +Cry_Okidogi:: + .incbin "sound/direct_sound_samples/cries/okidogi.bin" + + .align 2 +Cry_Munkidori:: + .incbin "sound/direct_sound_samples/cries/munkidori.bin" + + .align 2 +Cry_Fezandipiti:: + .incbin "sound/direct_sound_samples/cries/fezandipiti.bin" + + .align 2 +Cry_Ogerpon:: + .incbin "sound/direct_sound_samples/cries/ogerpon.bin" + .endif .align 2 diff --git a/sound/direct_sound_samples/cries/accelgor.aif b/sound/direct_sound_samples/cries/accelgor.aif index 7fb5e4c96a..39efe9c55e 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/alomomola.aif b/sound/direct_sound_samples/cries/alomomola.aif index a12e3bc235..8f9ee13a3b 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/amoonguss.aif b/sound/direct_sound_samples/cries/amoonguss.aif index fcdbea91eb..ddc8c6114b 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/annihilape.aif b/sound/direct_sound_samples/cries/annihilape.aif new file mode 100644 index 0000000000..889c521929 Binary files /dev/null and b/sound/direct_sound_samples/cries/annihilape.aif differ diff --git a/sound/direct_sound_samples/cries/applin.aif b/sound/direct_sound_samples/cries/applin.aif index f7461b1b60..828eeaeafa 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 ff138d5ce7..0efccf6a4e 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/arboliva.aif b/sound/direct_sound_samples/cries/arboliva.aif new file mode 100644 index 0000000000..1b73da2ec9 Binary files /dev/null and b/sound/direct_sound_samples/cries/arboliva.aif differ diff --git a/sound/direct_sound_samples/cries/archen.aif b/sound/direct_sound_samples/cries/archen.aif index 2f008dcf75..fd5b7729b2 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 f721fe2d71..7b65583da9 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 new file mode 100644 index 0000000000..e0b31b19ab Binary files /dev/null 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 2f5a78bab8..02d83dbb55 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/armarouge.aif b/sound/direct_sound_samples/cries/armarouge.aif new file mode 100644 index 0000000000..578c73392b Binary files /dev/null and b/sound/direct_sound_samples/cries/armarouge.aif differ diff --git a/sound/direct_sound_samples/cries/arrokuda.aif b/sound/direct_sound_samples/cries/arrokuda.aif index 7cb9470b3f..863b6d2fb5 100644 Binary files a/sound/direct_sound_samples/cries/arrokuda.aif and b/sound/direct_sound_samples/cries/arrokuda.aif differ diff --git a/sound/direct_sound_samples/cries/audino.aif b/sound/direct_sound_samples/cries/audino.aif index 278fc4ca12..7430d0b680 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/axew.aif b/sound/direct_sound_samples/cries/axew.aif index 1fbaa3adac..1dbe950c38 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/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif index a1405ee8d7..80551d7904 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 afeef551ee..cb2184d82d 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/baxcalibur.aif b/sound/direct_sound_samples/cries/baxcalibur.aif new file mode 100644 index 0000000000..fd8f5eff6d Binary files /dev/null and b/sound/direct_sound_samples/cries/baxcalibur.aif differ diff --git a/sound/direct_sound_samples/cries/beartic.aif b/sound/direct_sound_samples/cries/beartic.aif index 2b5fd99af6..45d1e8bc5e 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/beheeyem.aif b/sound/direct_sound_samples/cries/beheeyem.aif index c5bf9839ff..3ddec74ab6 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/bellibolt.aif b/sound/direct_sound_samples/cries/bellibolt.aif new file mode 100644 index 0000000000..b7fc6d0175 Binary files /dev/null and b/sound/direct_sound_samples/cries/bellibolt.aif differ diff --git a/sound/direct_sound_samples/cries/bisharp.aif b/sound/direct_sound_samples/cries/bisharp.aif index ac3bf36d33..edbcc7b296 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/blitzle.aif b/sound/direct_sound_samples/cries/blitzle.aif index c7db171eb1..40e4672af7 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 e275af2097..436cb1219f 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/bombirdier.aif b/sound/direct_sound_samples/cries/bombirdier.aif new file mode 100644 index 0000000000..27f334acbb Binary files /dev/null and b/sound/direct_sound_samples/cries/bombirdier.aif differ diff --git a/sound/direct_sound_samples/cries/bouffalant.aif b/sound/direct_sound_samples/cries/bouffalant.aif index b4dc574ce4..fbca85e639 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/brambleghast.aif b/sound/direct_sound_samples/cries/brambleghast.aif new file mode 100644 index 0000000000..404e7d1dc6 Binary files /dev/null and b/sound/direct_sound_samples/cries/brambleghast.aif differ diff --git a/sound/direct_sound_samples/cries/bramblin.aif b/sound/direct_sound_samples/cries/bramblin.aif new file mode 100644 index 0000000000..0c8a4a5dab Binary files /dev/null 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 d352294484..8c20dd2b73 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/brutebonnet.aif b/sound/direct_sound_samples/cries/brutebonnet.aif new file mode 100644 index 0000000000..3a6369e8be Binary files /dev/null and b/sound/direct_sound_samples/cries/brutebonnet.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 e911a2fe15..2a27827908 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 96b7b7266b..07cc384332 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/capsakid.aif b/sound/direct_sound_samples/cries/capsakid.aif new file mode 100644 index 0000000000..7a906ead56 Binary files /dev/null and b/sound/direct_sound_samples/cries/capsakid.aif differ diff --git a/sound/direct_sound_samples/cries/carracosta.aif b/sound/direct_sound_samples/cries/carracosta.aif index 8f676d83e3..dc379b5fab 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/ceruledge.aif b/sound/direct_sound_samples/cries/ceruledge.aif new file mode 100644 index 0000000000..86048249dd Binary files /dev/null and b/sound/direct_sound_samples/cries/ceruledge.aif differ diff --git a/sound/direct_sound_samples/cries/cetitan.aif b/sound/direct_sound_samples/cries/cetitan.aif new file mode 100644 index 0000000000..45302ff844 Binary files /dev/null and b/sound/direct_sound_samples/cries/cetitan.aif differ diff --git a/sound/direct_sound_samples/cries/cetoddle.aif b/sound/direct_sound_samples/cries/cetoddle.aif new file mode 100644 index 0000000000..f85f3d201f Binary files /dev/null and b/sound/direct_sound_samples/cries/cetoddle.aif differ diff --git a/sound/direct_sound_samples/cries/charcadet.aif b/sound/direct_sound_samples/cries/charcadet.aif new file mode 100644 index 0000000000..60f5512ca6 Binary files /dev/null and b/sound/direct_sound_samples/cries/charcadet.aif differ diff --git a/sound/direct_sound_samples/cries/chienpao.aif b/sound/direct_sound_samples/cries/chienpao.aif new file mode 100644 index 0000000000..1e3d573881 Binary files /dev/null and b/sound/direct_sound_samples/cries/chienpao.aif differ diff --git a/sound/direct_sound_samples/cries/chiyu.aif b/sound/direct_sound_samples/cries/chiyu.aif new file mode 100644 index 0000000000..55ca0598b7 Binary files /dev/null and b/sound/direct_sound_samples/cries/chiyu.aif differ diff --git a/sound/direct_sound_samples/cries/cinccino.aif b/sound/direct_sound_samples/cries/cinccino.aif index 005771f78a..b4df2ea076 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/clobbopus.aif b/sound/direct_sound_samples/cries/clobbopus.aif index 363dba933c..886a5208be 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 new file mode 100644 index 0000000000..bdbadd64fb Binary files /dev/null and b/sound/direct_sound_samples/cries/clodsire.aif differ diff --git a/sound/direct_sound_samples/cries/cofagrigus.aif b/sound/direct_sound_samples/cries/cofagrigus.aif index b971f50bb7..5c5c426e37 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/conkeldurr.aif b/sound/direct_sound_samples/cries/conkeldurr.aif index 8fc66c6b67..96e991d493 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/copperajah.aif b/sound/direct_sound_samples/cries/copperajah.aif index a705d9acd6..97484e695b 100644 Binary files a/sound/direct_sound_samples/cries/copperajah.aif and b/sound/direct_sound_samples/cries/copperajah.aif differ diff --git a/sound/direct_sound_samples/cries/corviknight.aif b/sound/direct_sound_samples/cries/corviknight.aif index 93fd03f874..8a7e200da3 100644 Binary files a/sound/direct_sound_samples/cries/corviknight.aif and b/sound/direct_sound_samples/cries/corviknight.aif differ diff --git a/sound/direct_sound_samples/cries/corvisquire.aif b/sound/direct_sound_samples/cries/corvisquire.aif index 5e8954e3f9..3c786aca4c 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/crocalor.aif b/sound/direct_sound_samples/cries/crocalor.aif new file mode 100644 index 0000000000..897aaa860d Binary files /dev/null and b/sound/direct_sound_samples/cries/crocalor.aif differ diff --git a/sound/direct_sound_samples/cries/crustle.aif b/sound/direct_sound_samples/cries/crustle.aif index d4a3836469..92cc8ec07b 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 4e4ead6c17..1f8255f7a0 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 6f739fdd94..a4c7f2cf8e 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/cyclizar.aif b/sound/direct_sound_samples/cries/cyclizar.aif new file mode 100644 index 0000000000..1d145154ec Binary files /dev/null and b/sound/direct_sound_samples/cries/cyclizar.aif differ diff --git a/sound/direct_sound_samples/cries/dachsbun.aif b/sound/direct_sound_samples/cries/dachsbun.aif new file mode 100644 index 0000000000..492020a716 Binary files /dev/null and b/sound/direct_sound_samples/cries/dachsbun.aif differ diff --git a/sound/direct_sound_samples/cries/darmanitan.aif b/sound/direct_sound_samples/cries/darmanitan.aif index 97efdf8b97..9ea80bd5df 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/darumaka.aif b/sound/direct_sound_samples/cries/darumaka.aif index 863f3deb94..9c58dda411 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/deerling.aif b/sound/direct_sound_samples/cries/deerling.aif index 09ace4dc73..50cf0bfc50 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 bf3987c296..583747a615 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/dewott.aif b/sound/direct_sound_samples/cries/dewott.aif index 4f45de41a0..3f7724df60 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/dipplin.aif b/sound/direct_sound_samples/cries/dipplin.aif new file mode 100644 index 0000000000..61df2de523 Binary files /dev/null and b/sound/direct_sound_samples/cries/dipplin.aif differ diff --git a/sound/direct_sound_samples/cries/dolliv.aif b/sound/direct_sound_samples/cries/dolliv.aif new file mode 100644 index 0000000000..d0aae0c9ec Binary files /dev/null and b/sound/direct_sound_samples/cries/dolliv.aif differ diff --git a/sound/direct_sound_samples/cries/dondozo.aif b/sound/direct_sound_samples/cries/dondozo.aif new file mode 100644 index 0000000000..eddac5cc27 Binary files /dev/null and b/sound/direct_sound_samples/cries/dondozo.aif differ diff --git a/sound/direct_sound_samples/cries/dragapult.aif b/sound/direct_sound_samples/cries/dragapult.aif index 349500041d..7e34c9bb1b 100644 Binary files a/sound/direct_sound_samples/cries/dragapult.aif and b/sound/direct_sound_samples/cries/dragapult.aif differ diff --git a/sound/direct_sound_samples/cries/drakloak.aif b/sound/direct_sound_samples/cries/drakloak.aif index b90afafdaf..3b19d47687 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/dreepy.aif b/sound/direct_sound_samples/cries/dreepy.aif index 29c78e8d54..b79126b119 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/drilbur.aif b/sound/direct_sound_samples/cries/drilbur.aif index 8ec6e9095d..25314b0aec 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/druddigon.aif b/sound/direct_sound_samples/cries/druddigon.aif index 52c25e3049..7467ee40b0 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 d556d55684..837566a018 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 new file mode 100644 index 0000000000..1adc2bb7c9 Binary files /dev/null and b/sound/direct_sound_samples/cries/dudunsparce.aif differ diff --git a/sound/direct_sound_samples/cries/duosion.aif b/sound/direct_sound_samples/cries/duosion.aif index 3003a3a00c..7f931b961c 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 d3e32043b8..c60490fd6b 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/dwebble.aif b/sound/direct_sound_samples/cries/dwebble.aif index 0667723241..687cf87450 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 7e73ba7d1d..4739bd80db 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 efd8a146ff..b8e362b754 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/eldegoss.aif b/sound/direct_sound_samples/cries/eldegoss.aif index 9725035f71..6c7bbe5129 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/emboar.aif b/sound/direct_sound_samples/cries/emboar.aif index 68b4bd7efc..4cdd5e0afc 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 25aba1ea86..c32a727451 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/enamorus.aif b/sound/direct_sound_samples/cries/enamorus.aif index 40957d49da..71068d9b7b 100644 Binary files a/sound/direct_sound_samples/cries/enamorus.aif and b/sound/direct_sound_samples/cries/enamorus.aif differ diff --git a/sound/direct_sound_samples/cries/enamorus_therian.aif b/sound/direct_sound_samples/cries/enamorus_therian.aif index 416f59abb1..4286a98b69 100644 Binary files a/sound/direct_sound_samples/cries/enamorus_therian.aif and b/sound/direct_sound_samples/cries/enamorus_therian.aif differ diff --git a/sound/direct_sound_samples/cries/escavalier.aif b/sound/direct_sound_samples/cries/escavalier.aif index 55ee1ef583..513f53d415 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/espathra.aif b/sound/direct_sound_samples/cries/espathra.aif new file mode 100644 index 0000000000..5a196762b1 Binary files /dev/null and b/sound/direct_sound_samples/cries/espathra.aif differ diff --git a/sound/direct_sound_samples/cries/eternatus.aif b/sound/direct_sound_samples/cries/eternatus.aif index 8bd6c5b262..1dede8fdc4 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/eternatus_eternamax.aif b/sound/direct_sound_samples/cries/eternatus_eternamax.aif index c4c5bc86d3..7c6b292d4d 100644 Binary files a/sound/direct_sound_samples/cries/eternatus_eternamax.aif and b/sound/direct_sound_samples/cries/eternatus_eternamax.aif differ diff --git a/sound/direct_sound_samples/cries/excadrill.aif b/sound/direct_sound_samples/cries/excadrill.aif index 7709bee7d7..8b2ef0869e 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/falinks.aif b/sound/direct_sound_samples/cries/falinks.aif index 1fa3e973c7..6fa1af8df4 100644 Binary files a/sound/direct_sound_samples/cries/falinks.aif and b/sound/direct_sound_samples/cries/falinks.aif differ diff --git a/sound/direct_sound_samples/cries/farigiraf.aif b/sound/direct_sound_samples/cries/farigiraf.aif new file mode 100644 index 0000000000..573520315d Binary files /dev/null and b/sound/direct_sound_samples/cries/farigiraf.aif differ diff --git a/sound/direct_sound_samples/cries/ferroseed.aif b/sound/direct_sound_samples/cries/ferroseed.aif index 4073bf6ffb..24856cdd24 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 e041923fc7..5e2d7a2579 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/fezandipiti.aif b/sound/direct_sound_samples/cries/fezandipiti.aif new file mode 100644 index 0000000000..d24a32b9c7 Binary files /dev/null and b/sound/direct_sound_samples/cries/fezandipiti.aif differ diff --git a/sound/direct_sound_samples/cries/fidough.aif b/sound/direct_sound_samples/cries/fidough.aif new file mode 100644 index 0000000000..44609a2dd7 Binary files /dev/null and b/sound/direct_sound_samples/cries/fidough.aif differ diff --git a/sound/direct_sound_samples/cries/finizen.aif b/sound/direct_sound_samples/cries/finizen.aif new file mode 100644 index 0000000000..07af24f696 Binary files /dev/null and b/sound/direct_sound_samples/cries/finizen.aif differ diff --git a/sound/direct_sound_samples/cries/flamigo.aif b/sound/direct_sound_samples/cries/flamigo.aif new file mode 100644 index 0000000000..bed56a7f31 Binary files /dev/null and b/sound/direct_sound_samples/cries/flamigo.aif differ diff --git a/sound/direct_sound_samples/cries/flittle.aif b/sound/direct_sound_samples/cries/flittle.aif new file mode 100644 index 0000000000..d81016a64d Binary files /dev/null and b/sound/direct_sound_samples/cries/flittle.aif differ diff --git a/sound/direct_sound_samples/cries/floragato.aif b/sound/direct_sound_samples/cries/floragato.aif new file mode 100644 index 0000000000..4fc8832423 Binary files /dev/null and b/sound/direct_sound_samples/cries/floragato.aif differ diff --git a/sound/direct_sound_samples/cries/fluttermane.aif b/sound/direct_sound_samples/cries/fluttermane.aif new file mode 100644 index 0000000000..ad4c636fe7 Binary files /dev/null and b/sound/direct_sound_samples/cries/fluttermane.aif differ diff --git a/sound/direct_sound_samples/cries/fraxure.aif b/sound/direct_sound_samples/cries/fraxure.aif index 43fcf42217..25464a1ff7 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 new file mode 100644 index 0000000000..10c5b819aa Binary files /dev/null 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 b63a21f478..c59a0a542f 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/frosmoth.aif b/sound/direct_sound_samples/cries/frosmoth.aif index b38071ab8a..324034d15e 100644 Binary files a/sound/direct_sound_samples/cries/frosmoth.aif and b/sound/direct_sound_samples/cries/frosmoth.aif differ diff --git a/sound/direct_sound_samples/cries/fuecoco.aif b/sound/direct_sound_samples/cries/fuecoco.aif new file mode 100644 index 0000000000..4c0d7eb07a Binary files /dev/null and b/sound/direct_sound_samples/cries/fuecoco.aif differ diff --git a/sound/direct_sound_samples/cries/galvantula.aif b/sound/direct_sound_samples/cries/galvantula.aif index f2989d840d..d682377565 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 28f95184a6..ed906101f3 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/garganacl.aif b/sound/direct_sound_samples/cries/garganacl.aif new file mode 100644 index 0000000000..3c530cea53 Binary files /dev/null and b/sound/direct_sound_samples/cries/garganacl.aif differ diff --git a/sound/direct_sound_samples/cries/genesect.aif b/sound/direct_sound_samples/cries/genesect.aif index 4c0e306be7..e088634591 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/gholdengo.aif b/sound/direct_sound_samples/cries/gholdengo.aif new file mode 100644 index 0000000000..4cef67ba29 Binary files /dev/null and b/sound/direct_sound_samples/cries/gholdengo.aif differ diff --git a/sound/direct_sound_samples/cries/gigalith.aif b/sound/direct_sound_samples/cries/gigalith.aif index 98cffe443c..e5c2f6419e 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 new file mode 100644 index 0000000000..dac736784e Binary files /dev/null and b/sound/direct_sound_samples/cries/gimmighoul.aif differ diff --git a/sound/direct_sound_samples/cries/gimmighoul_roaming.aif b/sound/direct_sound_samples/cries/gimmighoul_roaming.aif new file mode 100644 index 0000000000..9f3c4483e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/gimmighoul_roaming.aif differ diff --git a/sound/direct_sound_samples/cries/glastrier.aif b/sound/direct_sound_samples/cries/glastrier.aif index c0b87d2532..6109f1ca0b 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/glimmet.aif b/sound/direct_sound_samples/cries/glimmet.aif new file mode 100644 index 0000000000..38fc118b26 Binary files /dev/null and b/sound/direct_sound_samples/cries/glimmet.aif differ diff --git a/sound/direct_sound_samples/cries/glimmora.aif b/sound/direct_sound_samples/cries/glimmora.aif new file mode 100644 index 0000000000..64fb682289 Binary files /dev/null and b/sound/direct_sound_samples/cries/glimmora.aif differ diff --git a/sound/direct_sound_samples/cries/golett.aif b/sound/direct_sound_samples/cries/golett.aif index 3610df2a56..f0f31bda7e 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/golurk.aif b/sound/direct_sound_samples/cries/golurk.aif index b9bd6914b7..1795ca8f4a 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/gothita.aif b/sound/direct_sound_samples/cries/gothita.aif index 78e9b18806..93089d6200 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/gothorita.aif b/sound/direct_sound_samples/cries/gothorita.aif index 10ea224c66..d0b1217c18 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/grafaiai.aif b/sound/direct_sound_samples/cries/grafaiai.aif new file mode 100644 index 0000000000..d8e8511eec Binary files /dev/null and b/sound/direct_sound_samples/cries/grafaiai.aif differ diff --git a/sound/direct_sound_samples/cries/greattusk.aif b/sound/direct_sound_samples/cries/greattusk.aif new file mode 100644 index 0000000000..4ca76ff6c0 Binary files /dev/null and b/sound/direct_sound_samples/cries/greattusk.aif differ diff --git a/sound/direct_sound_samples/cries/greavard.aif b/sound/direct_sound_samples/cries/greavard.aif new file mode 100644 index 0000000000..434c1dceb0 Binary files /dev/null and b/sound/direct_sound_samples/cries/greavard.aif differ diff --git a/sound/direct_sound_samples/cries/grookey.aif b/sound/direct_sound_samples/cries/grookey.aif index 8822e50be0..919063484f 100644 Binary files a/sound/direct_sound_samples/cries/grookey.aif and b/sound/direct_sound_samples/cries/grookey.aif differ diff --git a/sound/direct_sound_samples/cries/gurdurr.aif b/sound/direct_sound_samples/cries/gurdurr.aif index 086b02012d..8cb56e5a70 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/hatenna.aif b/sound/direct_sound_samples/cries/hatenna.aif index 8743bd35fb..3c431dd65f 100644 Binary files a/sound/direct_sound_samples/cries/hatenna.aif and b/sound/direct_sound_samples/cries/hatenna.aif differ diff --git a/sound/direct_sound_samples/cries/hatterene.aif b/sound/direct_sound_samples/cries/hatterene.aif index 89b683927f..db21eb2e20 100644 Binary files a/sound/direct_sound_samples/cries/hatterene.aif and b/sound/direct_sound_samples/cries/hatterene.aif differ diff --git a/sound/direct_sound_samples/cries/hattrem.aif b/sound/direct_sound_samples/cries/hattrem.aif index 2fb276f62c..57f46a4979 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/haxorus.aif b/sound/direct_sound_samples/cries/haxorus.aif index 7ac1694156..7fc4043d36 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 6fff3da9dc..a73dd97e4a 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/herdier.aif b/sound/direct_sound_samples/cries/herdier.aif index 5e863c94cf..e57234c8b0 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/hoopa_unbound.aif b/sound/direct_sound_samples/cries/hoopa_unbound.aif index 4130b2e3b5..8867fe42a3 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/houndstone.aif b/sound/direct_sound_samples/cries/houndstone.aif new file mode 100644 index 0000000000..145cc79682 Binary files /dev/null and b/sound/direct_sound_samples/cries/houndstone.aif differ diff --git a/sound/direct_sound_samples/cries/indeedee_female.aif b/sound/direct_sound_samples/cries/indeedee_female.aif index 93279b4ee8..3edae13bad 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/inteleon.aif b/sound/direct_sound_samples/cries/inteleon.aif index 83668dcdcb..d5c6d367f7 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/ironbundle.aif b/sound/direct_sound_samples/cries/ironbundle.aif new file mode 100644 index 0000000000..59af7aa504 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironbundle.aif differ diff --git a/sound/direct_sound_samples/cries/ironhands.aif b/sound/direct_sound_samples/cries/ironhands.aif new file mode 100644 index 0000000000..d9e5b995f0 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironhands.aif differ diff --git a/sound/direct_sound_samples/cries/ironjugulis.aif b/sound/direct_sound_samples/cries/ironjugulis.aif new file mode 100644 index 0000000000..8409934f89 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironjugulis.aif differ diff --git a/sound/direct_sound_samples/cries/ironleaves.aif b/sound/direct_sound_samples/cries/ironleaves.aif new file mode 100644 index 0000000000..45e0a420e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironleaves.aif differ diff --git a/sound/direct_sound_samples/cries/ironmoth.aif b/sound/direct_sound_samples/cries/ironmoth.aif new file mode 100644 index 0000000000..fb90d30481 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironmoth.aif differ diff --git a/sound/direct_sound_samples/cries/ironthorns.aif b/sound/direct_sound_samples/cries/ironthorns.aif new file mode 100644 index 0000000000..e73b9d553e Binary files /dev/null and b/sound/direct_sound_samples/cries/ironthorns.aif differ diff --git a/sound/direct_sound_samples/cries/irontreads.aif b/sound/direct_sound_samples/cries/irontreads.aif new file mode 100644 index 0000000000..e3b0471711 Binary files /dev/null and b/sound/direct_sound_samples/cries/irontreads.aif differ diff --git a/sound/direct_sound_samples/cries/ironvaliant.aif b/sound/direct_sound_samples/cries/ironvaliant.aif new file mode 100644 index 0000000000..04220e9f62 Binary files /dev/null and b/sound/direct_sound_samples/cries/ironvaliant.aif differ diff --git a/sound/direct_sound_samples/cries/jellicent.aif b/sound/direct_sound_samples/cries/jellicent.aif index 3664a9d41c..4c75c484f2 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/joltik.aif b/sound/direct_sound_samples/cries/joltik.aif index 0c6caea6e5..cd1fa592c9 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/karrablast.aif b/sound/direct_sound_samples/cries/karrablast.aif index 7b22594e06..cf06ec45a8 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/kilowattrel.aif b/sound/direct_sound_samples/cries/kilowattrel.aif new file mode 100644 index 0000000000..d54d4a43b5 Binary files /dev/null and b/sound/direct_sound_samples/cries/kilowattrel.aif differ diff --git a/sound/direct_sound_samples/cries/kingambit.aif b/sound/direct_sound_samples/cries/kingambit.aif new file mode 100644 index 0000000000..38a3d1b6cc Binary files /dev/null and b/sound/direct_sound_samples/cries/kingambit.aif differ diff --git a/sound/direct_sound_samples/cries/klang.aif b/sound/direct_sound_samples/cries/klang.aif index 462187f3e1..bb17984d2c 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/klawf.aif b/sound/direct_sound_samples/cries/klawf.aif new file mode 100644 index 0000000000..8359e13b17 Binary files /dev/null and b/sound/direct_sound_samples/cries/klawf.aif differ diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif index 1052cabd3a..cf23d5b623 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 a3a78f58db..21076028de 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/koraidon.aif b/sound/direct_sound_samples/cries/koraidon.aif new file mode 100644 index 0000000000..6ab93ad73e Binary files /dev/null and b/sound/direct_sound_samples/cries/koraidon.aif differ diff --git a/sound/direct_sound_samples/cries/krokorok.aif b/sound/direct_sound_samples/cries/krokorok.aif index d8f34f86ae..2cf4ceff1f 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 e8cd8277e3..4aa7ea4aed 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/kyurem.aif b/sound/direct_sound_samples/cries/kyurem.aif index 2b09fee159..036d6cf689 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/lampent.aif b/sound/direct_sound_samples/cries/lampent.aif index 2037c0bb2b..2f11c2ecfb 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.aif b/sound/direct_sound_samples/cries/landorus.aif index f0937509f3..189c776668 100644 Binary files a/sound/direct_sound_samples/cries/landorus.aif and b/sound/direct_sound_samples/cries/landorus.aif differ diff --git a/sound/direct_sound_samples/cries/landorus_therian.aif b/sound/direct_sound_samples/cries/landorus_therian.aif index a790c8ecfe..edd6fa349b 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/larvesta.aif b/sound/direct_sound_samples/cries/larvesta.aif index 6822dca90b..4f3e484c8e 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/leavanny.aif b/sound/direct_sound_samples/cries/leavanny.aif index c165448787..8399bb1cf3 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/lechonk.aif b/sound/direct_sound_samples/cries/lechonk.aif new file mode 100644 index 0000000000..f1ab3af238 Binary files /dev/null and b/sound/direct_sound_samples/cries/lechonk.aif differ diff --git a/sound/direct_sound_samples/cries/liepard.aif b/sound/direct_sound_samples/cries/liepard.aif index 1f97b7e1ac..7432857bc1 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/lilligant.aif b/sound/direct_sound_samples/cries/lilligant.aif index fd940814e4..311c5affa8 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 e7c8bc6ba3..9a77e2596d 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/litwick.aif b/sound/direct_sound_samples/cries/litwick.aif index 930ca829e6..6759c29beb 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 new file mode 100644 index 0000000000..c323e2658c Binary files /dev/null and b/sound/direct_sound_samples/cries/lokix.aif differ diff --git a/sound/direct_sound_samples/cries/lycanroc_dusk.aif b/sound/direct_sound_samples/cries/lycanroc_dusk.aif index 1149e558bf..61d985e64a 100644 Binary files a/sound/direct_sound_samples/cries/lycanroc_dusk.aif and b/sound/direct_sound_samples/cries/lycanroc_dusk.aif differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midnight.aif b/sound/direct_sound_samples/cries/lycanroc_midnight.aif index 0b68038fd4..f470d006b5 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 new file mode 100644 index 0000000000..ccf661e6ca Binary files /dev/null and b/sound/direct_sound_samples/cries/mabosstiff.aif differ diff --git a/sound/direct_sound_samples/cries/mandibuzz.aif b/sound/direct_sound_samples/cries/mandibuzz.aif index 9911fa2c68..3f12088d0a 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/maractus.aif b/sound/direct_sound_samples/cries/maractus.aif index bf98f2c744..16058d97cc 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/maschiff.aif b/sound/direct_sound_samples/cries/maschiff.aif new file mode 100644 index 0000000000..ee93b59ade Binary files /dev/null and b/sound/direct_sound_samples/cries/maschiff.aif differ diff --git a/sound/direct_sound_samples/cries/maushold.aif b/sound/direct_sound_samples/cries/maushold.aif new file mode 100644 index 0000000000..7412a1af6a Binary files /dev/null and b/sound/direct_sound_samples/cries/maushold.aif differ diff --git a/sound/direct_sound_samples/cries/maushold_family_of_four.aif b/sound/direct_sound_samples/cries/maushold_family_of_four.aif new file mode 100644 index 0000000000..c7c0aee6ee Binary files /dev/null and b/sound/direct_sound_samples/cries/maushold_family_of_four.aif differ diff --git a/sound/direct_sound_samples/cries/mega_abomasnow.aif b/sound/direct_sound_samples/cries/mega_abomasnow.aif index 600efe7481..11a0aec059 100644 Binary files a/sound/direct_sound_samples/cries/mega_abomasnow.aif and b/sound/direct_sound_samples/cries/mega_abomasnow.aif differ diff --git a/sound/direct_sound_samples/cries/mega_absol.aif b/sound/direct_sound_samples/cries/mega_absol.aif index e1539ce3b2..415b6132f6 100644 Binary files a/sound/direct_sound_samples/cries/mega_absol.aif and b/sound/direct_sound_samples/cries/mega_absol.aif differ diff --git a/sound/direct_sound_samples/cries/mega_aerodactyl.aif b/sound/direct_sound_samples/cries/mega_aerodactyl.aif index 762e2cb1ca..9aa15062ce 100644 Binary files a/sound/direct_sound_samples/cries/mega_aerodactyl.aif and b/sound/direct_sound_samples/cries/mega_aerodactyl.aif differ diff --git a/sound/direct_sound_samples/cries/mega_aggron.aif b/sound/direct_sound_samples/cries/mega_aggron.aif index 9466c9e70a..0e1778509f 100644 Binary files a/sound/direct_sound_samples/cries/mega_aggron.aif and b/sound/direct_sound_samples/cries/mega_aggron.aif differ diff --git a/sound/direct_sound_samples/cries/mega_alakazam.aif b/sound/direct_sound_samples/cries/mega_alakazam.aif index 149bcb7d00..be09f22777 100644 Binary files a/sound/direct_sound_samples/cries/mega_alakazam.aif and b/sound/direct_sound_samples/cries/mega_alakazam.aif differ diff --git a/sound/direct_sound_samples/cries/mega_altaria.aif b/sound/direct_sound_samples/cries/mega_altaria.aif index a050f74798..bf2a7daec2 100644 Binary files a/sound/direct_sound_samples/cries/mega_altaria.aif and b/sound/direct_sound_samples/cries/mega_altaria.aif differ diff --git a/sound/direct_sound_samples/cries/mega_ampharos.aif b/sound/direct_sound_samples/cries/mega_ampharos.aif index d92b123d37..e24e628667 100644 Binary files a/sound/direct_sound_samples/cries/mega_ampharos.aif and b/sound/direct_sound_samples/cries/mega_ampharos.aif differ diff --git a/sound/direct_sound_samples/cries/mega_audino.aif b/sound/direct_sound_samples/cries/mega_audino.aif index f1d90100d5..04d815001e 100644 Binary files a/sound/direct_sound_samples/cries/mega_audino.aif and b/sound/direct_sound_samples/cries/mega_audino.aif differ diff --git a/sound/direct_sound_samples/cries/mega_banette.aif b/sound/direct_sound_samples/cries/mega_banette.aif index c951f854f9..974f74c31e 100644 Binary files a/sound/direct_sound_samples/cries/mega_banette.aif and b/sound/direct_sound_samples/cries/mega_banette.aif differ diff --git a/sound/direct_sound_samples/cries/mega_beedrill.aif b/sound/direct_sound_samples/cries/mega_beedrill.aif index 26fb431d4c..8072fef185 100644 Binary files a/sound/direct_sound_samples/cries/mega_beedrill.aif and b/sound/direct_sound_samples/cries/mega_beedrill.aif differ diff --git a/sound/direct_sound_samples/cries/mega_blastoise.aif b/sound/direct_sound_samples/cries/mega_blastoise.aif index d340b3ce9f..a25f49c30c 100644 Binary files a/sound/direct_sound_samples/cries/mega_blastoise.aif and b/sound/direct_sound_samples/cries/mega_blastoise.aif differ diff --git a/sound/direct_sound_samples/cries/mega_blaziken.aif b/sound/direct_sound_samples/cries/mega_blaziken.aif index 30d7c622d9..ef5f08153e 100644 Binary files a/sound/direct_sound_samples/cries/mega_blaziken.aif and b/sound/direct_sound_samples/cries/mega_blaziken.aif differ diff --git a/sound/direct_sound_samples/cries/mega_camerupt.aif b/sound/direct_sound_samples/cries/mega_camerupt.aif index 744817dac8..0c7966b8ea 100644 Binary files a/sound/direct_sound_samples/cries/mega_camerupt.aif and b/sound/direct_sound_samples/cries/mega_camerupt.aif differ diff --git a/sound/direct_sound_samples/cries/mega_charizard_x.aif b/sound/direct_sound_samples/cries/mega_charizard_x.aif index 2e541e2372..5f88d12355 100644 Binary files a/sound/direct_sound_samples/cries/mega_charizard_x.aif and b/sound/direct_sound_samples/cries/mega_charizard_x.aif differ diff --git a/sound/direct_sound_samples/cries/mega_charizard_y.aif b/sound/direct_sound_samples/cries/mega_charizard_y.aif index 6da97b62ab..e04d518ee1 100644 Binary files a/sound/direct_sound_samples/cries/mega_charizard_y.aif and b/sound/direct_sound_samples/cries/mega_charizard_y.aif differ diff --git a/sound/direct_sound_samples/cries/mega_diancie.aif b/sound/direct_sound_samples/cries/mega_diancie.aif index 8fc5139099..be62683153 100644 Binary files a/sound/direct_sound_samples/cries/mega_diancie.aif and b/sound/direct_sound_samples/cries/mega_diancie.aif differ diff --git a/sound/direct_sound_samples/cries/mega_gallade.aif b/sound/direct_sound_samples/cries/mega_gallade.aif index 4a12523dfe..0af522f68f 100644 Binary files a/sound/direct_sound_samples/cries/mega_gallade.aif and b/sound/direct_sound_samples/cries/mega_gallade.aif differ diff --git a/sound/direct_sound_samples/cries/mega_garchomp.aif b/sound/direct_sound_samples/cries/mega_garchomp.aif index 420cf6689e..65637139f2 100644 Binary files a/sound/direct_sound_samples/cries/mega_garchomp.aif and b/sound/direct_sound_samples/cries/mega_garchomp.aif differ diff --git a/sound/direct_sound_samples/cries/mega_gardevoir.aif b/sound/direct_sound_samples/cries/mega_gardevoir.aif index 1b384b37b7..71ba65d455 100644 Binary files a/sound/direct_sound_samples/cries/mega_gardevoir.aif and b/sound/direct_sound_samples/cries/mega_gardevoir.aif differ diff --git a/sound/direct_sound_samples/cries/mega_gengar.aif b/sound/direct_sound_samples/cries/mega_gengar.aif index 980a228b7d..7967d6dcfb 100644 Binary files a/sound/direct_sound_samples/cries/mega_gengar.aif and b/sound/direct_sound_samples/cries/mega_gengar.aif differ diff --git a/sound/direct_sound_samples/cries/mega_glalie.aif b/sound/direct_sound_samples/cries/mega_glalie.aif index a123a386a9..44261f5271 100644 Binary files a/sound/direct_sound_samples/cries/mega_glalie.aif and b/sound/direct_sound_samples/cries/mega_glalie.aif differ diff --git a/sound/direct_sound_samples/cries/mega_gyarados.aif b/sound/direct_sound_samples/cries/mega_gyarados.aif index 1b939a6ce2..5e310a4638 100644 Binary files a/sound/direct_sound_samples/cries/mega_gyarados.aif and b/sound/direct_sound_samples/cries/mega_gyarados.aif differ diff --git a/sound/direct_sound_samples/cries/mega_heracross.aif b/sound/direct_sound_samples/cries/mega_heracross.aif index 99e4aded08..67faa6f196 100644 Binary files a/sound/direct_sound_samples/cries/mega_heracross.aif and b/sound/direct_sound_samples/cries/mega_heracross.aif differ diff --git a/sound/direct_sound_samples/cries/mega_houndoom.aif b/sound/direct_sound_samples/cries/mega_houndoom.aif index dcbc965505..7bf51ba800 100644 Binary files a/sound/direct_sound_samples/cries/mega_houndoom.aif and b/sound/direct_sound_samples/cries/mega_houndoom.aif differ diff --git a/sound/direct_sound_samples/cries/mega_kangaskhan.aif b/sound/direct_sound_samples/cries/mega_kangaskhan.aif index e5069d2d34..cd95a87d39 100644 Binary files a/sound/direct_sound_samples/cries/mega_kangaskhan.aif and b/sound/direct_sound_samples/cries/mega_kangaskhan.aif differ diff --git a/sound/direct_sound_samples/cries/mega_latias.aif b/sound/direct_sound_samples/cries/mega_latias.aif index 5d107897a1..0dc1b89906 100644 Binary files a/sound/direct_sound_samples/cries/mega_latias.aif and b/sound/direct_sound_samples/cries/mega_latias.aif differ diff --git a/sound/direct_sound_samples/cries/mega_latios.aif b/sound/direct_sound_samples/cries/mega_latios.aif index 39394be44b..88a896035b 100644 Binary files a/sound/direct_sound_samples/cries/mega_latios.aif and b/sound/direct_sound_samples/cries/mega_latios.aif differ diff --git a/sound/direct_sound_samples/cries/mega_lopunny.aif b/sound/direct_sound_samples/cries/mega_lopunny.aif index 45a0dbb839..1331ca106b 100644 Binary files a/sound/direct_sound_samples/cries/mega_lopunny.aif and b/sound/direct_sound_samples/cries/mega_lopunny.aif differ diff --git a/sound/direct_sound_samples/cries/mega_lucario.aif b/sound/direct_sound_samples/cries/mega_lucario.aif index f9af050ada..1a100f4dab 100644 Binary files a/sound/direct_sound_samples/cries/mega_lucario.aif and b/sound/direct_sound_samples/cries/mega_lucario.aif differ diff --git a/sound/direct_sound_samples/cries/mega_manectric.aif b/sound/direct_sound_samples/cries/mega_manectric.aif index d78d845302..ad38ec0ffc 100644 Binary files a/sound/direct_sound_samples/cries/mega_manectric.aif and b/sound/direct_sound_samples/cries/mega_manectric.aif differ diff --git a/sound/direct_sound_samples/cries/mega_mawile.aif b/sound/direct_sound_samples/cries/mega_mawile.aif index bfcd306bc3..a6e7ec8c83 100644 Binary files a/sound/direct_sound_samples/cries/mega_mawile.aif and b/sound/direct_sound_samples/cries/mega_mawile.aif differ diff --git a/sound/direct_sound_samples/cries/mega_medicham.aif b/sound/direct_sound_samples/cries/mega_medicham.aif index eb1153e055..f00672f3cb 100644 Binary files a/sound/direct_sound_samples/cries/mega_medicham.aif and b/sound/direct_sound_samples/cries/mega_medicham.aif differ diff --git a/sound/direct_sound_samples/cries/mega_metagross.aif b/sound/direct_sound_samples/cries/mega_metagross.aif index 8e3c48bab0..3f9ca589cf 100644 Binary files a/sound/direct_sound_samples/cries/mega_metagross.aif and b/sound/direct_sound_samples/cries/mega_metagross.aif differ diff --git a/sound/direct_sound_samples/cries/mega_mewtwo_x.aif b/sound/direct_sound_samples/cries/mega_mewtwo_x.aif index 8c82b90961..c484f7b9eb 100644 Binary files a/sound/direct_sound_samples/cries/mega_mewtwo_x.aif and b/sound/direct_sound_samples/cries/mega_mewtwo_x.aif differ diff --git a/sound/direct_sound_samples/cries/mega_mewtwo_y.aif b/sound/direct_sound_samples/cries/mega_mewtwo_y.aif index 0947d8351f..87a5d54ad9 100644 Binary files a/sound/direct_sound_samples/cries/mega_mewtwo_y.aif and b/sound/direct_sound_samples/cries/mega_mewtwo_y.aif differ diff --git a/sound/direct_sound_samples/cries/mega_pidgeot.aif b/sound/direct_sound_samples/cries/mega_pidgeot.aif index 05add9bdd7..89b846a1cc 100644 Binary files a/sound/direct_sound_samples/cries/mega_pidgeot.aif and b/sound/direct_sound_samples/cries/mega_pidgeot.aif differ diff --git a/sound/direct_sound_samples/cries/mega_pinsir.aif b/sound/direct_sound_samples/cries/mega_pinsir.aif index 4d5f59daee..f6f2b6649f 100644 Binary files a/sound/direct_sound_samples/cries/mega_pinsir.aif and b/sound/direct_sound_samples/cries/mega_pinsir.aif differ diff --git a/sound/direct_sound_samples/cries/mega_rayquaza.aif b/sound/direct_sound_samples/cries/mega_rayquaza.aif index 1e5c3c7ed7..1b78a94e93 100644 Binary files a/sound/direct_sound_samples/cries/mega_rayquaza.aif and b/sound/direct_sound_samples/cries/mega_rayquaza.aif differ diff --git a/sound/direct_sound_samples/cries/mega_sableye.aif b/sound/direct_sound_samples/cries/mega_sableye.aif index 6f628fb576..47d4a869ec 100644 Binary files a/sound/direct_sound_samples/cries/mega_sableye.aif and b/sound/direct_sound_samples/cries/mega_sableye.aif differ diff --git a/sound/direct_sound_samples/cries/mega_salamence.aif b/sound/direct_sound_samples/cries/mega_salamence.aif index cf75bfbf8e..90ce0b6ff8 100644 Binary files a/sound/direct_sound_samples/cries/mega_salamence.aif and b/sound/direct_sound_samples/cries/mega_salamence.aif differ diff --git a/sound/direct_sound_samples/cries/mega_sceptile.aif b/sound/direct_sound_samples/cries/mega_sceptile.aif index fca1708831..50a16a1ee3 100644 Binary files a/sound/direct_sound_samples/cries/mega_sceptile.aif and b/sound/direct_sound_samples/cries/mega_sceptile.aif differ diff --git a/sound/direct_sound_samples/cries/mega_scizor.aif b/sound/direct_sound_samples/cries/mega_scizor.aif index 3705ec707a..c970f8083b 100644 Binary files a/sound/direct_sound_samples/cries/mega_scizor.aif and b/sound/direct_sound_samples/cries/mega_scizor.aif differ diff --git a/sound/direct_sound_samples/cries/mega_sharpedo.aif b/sound/direct_sound_samples/cries/mega_sharpedo.aif index b6eff10ff3..454ec15892 100644 Binary files a/sound/direct_sound_samples/cries/mega_sharpedo.aif and b/sound/direct_sound_samples/cries/mega_sharpedo.aif differ diff --git a/sound/direct_sound_samples/cries/mega_slowbro.aif b/sound/direct_sound_samples/cries/mega_slowbro.aif index 4fcda7dc4e..6ae2a0fb68 100644 Binary files a/sound/direct_sound_samples/cries/mega_slowbro.aif and b/sound/direct_sound_samples/cries/mega_slowbro.aif differ diff --git a/sound/direct_sound_samples/cries/mega_steelix.aif b/sound/direct_sound_samples/cries/mega_steelix.aif index 998d0d7d9c..dfb068e161 100644 Binary files a/sound/direct_sound_samples/cries/mega_steelix.aif and b/sound/direct_sound_samples/cries/mega_steelix.aif differ diff --git a/sound/direct_sound_samples/cries/mega_swampert.aif b/sound/direct_sound_samples/cries/mega_swampert.aif index 6b65b03ed6..c19ec99835 100644 Binary files a/sound/direct_sound_samples/cries/mega_swampert.aif and b/sound/direct_sound_samples/cries/mega_swampert.aif differ diff --git a/sound/direct_sound_samples/cries/mega_tyranitar.aif b/sound/direct_sound_samples/cries/mega_tyranitar.aif index 5df44e79b4..020118b388 100644 Binary files a/sound/direct_sound_samples/cries/mega_tyranitar.aif and b/sound/direct_sound_samples/cries/mega_tyranitar.aif differ diff --git a/sound/direct_sound_samples/cries/mega_venusaur.aif b/sound/direct_sound_samples/cries/mega_venusaur.aif index f67c278a41..cec11aaae2 100644 Binary files a/sound/direct_sound_samples/cries/mega_venusaur.aif and b/sound/direct_sound_samples/cries/mega_venusaur.aif differ diff --git a/sound/direct_sound_samples/cries/melmetal.aif b/sound/direct_sound_samples/cries/melmetal.aif index aea0ec1c74..d9a2e0928b 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 9d2e0a254d..d2be5ac97f 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 54abac63ab..c3bd648e3a 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/meowscarada.aif b/sound/direct_sound_samples/cries/meowscarada.aif new file mode 100644 index 0000000000..981a07a206 Binary files /dev/null and b/sound/direct_sound_samples/cries/meowscarada.aif differ diff --git a/sound/direct_sound_samples/cries/mienfoo.aif b/sound/direct_sound_samples/cries/mienfoo.aif index 3e826b31b9..f948e6f3d9 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 3f9199c7ac..652be57339 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/minccino.aif b/sound/direct_sound_samples/cries/minccino.aif index 9299615cef..c10f3f7c9f 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/miraidon.aif b/sound/direct_sound_samples/cries/miraidon.aif new file mode 100644 index 0000000000..f07c1c360c Binary files /dev/null and b/sound/direct_sound_samples/cries/miraidon.aif differ diff --git a/sound/direct_sound_samples/cries/morpeko.aif b/sound/direct_sound_samples/cries/morpeko.aif index 06937a3b1e..2feb33beb8 100644 Binary files a/sound/direct_sound_samples/cries/morpeko.aif and b/sound/direct_sound_samples/cries/morpeko.aif differ diff --git a/sound/direct_sound_samples/cries/morpeko_hangry.aif b/sound/direct_sound_samples/cries/morpeko_hangry.aif index a09a85770d..84a89a2c01 100644 Binary files a/sound/direct_sound_samples/cries/morpeko_hangry.aif and b/sound/direct_sound_samples/cries/morpeko_hangry.aif differ diff --git a/sound/direct_sound_samples/cries/munkidori.aif b/sound/direct_sound_samples/cries/munkidori.aif new file mode 100644 index 0000000000..7cb192732e Binary files /dev/null and b/sound/direct_sound_samples/cries/munkidori.aif differ diff --git a/sound/direct_sound_samples/cries/munna.aif b/sound/direct_sound_samples/cries/munna.aif index 923f951826..35167be4a2 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/nacli.aif b/sound/direct_sound_samples/cries/nacli.aif new file mode 100644 index 0000000000..b29d579ee2 Binary files /dev/null and b/sound/direct_sound_samples/cries/nacli.aif differ diff --git a/sound/direct_sound_samples/cries/naclstack.aif b/sound/direct_sound_samples/cries/naclstack.aif new file mode 100644 index 0000000000..973fb82281 Binary files /dev/null and b/sound/direct_sound_samples/cries/naclstack.aif differ diff --git a/sound/direct_sound_samples/cries/noibat.aif b/sound/direct_sound_samples/cries/noibat.aif index c77342cc1c..a00200aab0 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/nymble.aif b/sound/direct_sound_samples/cries/nymble.aif new file mode 100644 index 0000000000..b74a198b2b Binary files /dev/null and b/sound/direct_sound_samples/cries/nymble.aif differ diff --git a/sound/direct_sound_samples/cries/ogerpon.aif b/sound/direct_sound_samples/cries/ogerpon.aif new file mode 100644 index 0000000000..e5cb2f7bad Binary files /dev/null and b/sound/direct_sound_samples/cries/ogerpon.aif differ diff --git a/sound/direct_sound_samples/cries/oinkologne.aif b/sound/direct_sound_samples/cries/oinkologne.aif new file mode 100644 index 0000000000..611794de31 Binary files /dev/null and b/sound/direct_sound_samples/cries/oinkologne.aif differ diff --git a/sound/direct_sound_samples/cries/oinkologne_female.aif b/sound/direct_sound_samples/cries/oinkologne_female.aif new file mode 100644 index 0000000000..885f2e3a7d Binary files /dev/null and b/sound/direct_sound_samples/cries/oinkologne_female.aif differ diff --git a/sound/direct_sound_samples/cries/okidogi.aif b/sound/direct_sound_samples/cries/okidogi.aif new file mode 100644 index 0000000000..afa9cfbddd Binary files /dev/null and b/sound/direct_sound_samples/cries/okidogi.aif differ diff --git a/sound/direct_sound_samples/cries/orbeetle.aif b/sound/direct_sound_samples/cries/orbeetle.aif index fdf498b9a0..e1ede8361a 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_pom_pom.aif b/sound/direct_sound_samples/cries/oricorio_pom_pom.aif deleted file mode 100644 index bb4c1f27a0..0000000000 Binary files a/sound/direct_sound_samples/cries/oricorio_pom_pom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/orthworm.aif b/sound/direct_sound_samples/cries/orthworm.aif new file mode 100644 index 0000000000..a3be4aecc0 Binary files /dev/null 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 6e78b950dc..87b28da484 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 56b3d97558..b5428ce944 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/palafin.aif b/sound/direct_sound_samples/cries/palafin.aif new file mode 100644 index 0000000000..3ee6bdb321 Binary files /dev/null and b/sound/direct_sound_samples/cries/palafin.aif differ diff --git a/sound/direct_sound_samples/cries/palafin_hero.aif b/sound/direct_sound_samples/cries/palafin_hero.aif new file mode 100644 index 0000000000..ff02e6a0e0 Binary files /dev/null and b/sound/direct_sound_samples/cries/palafin_hero.aif differ diff --git a/sound/direct_sound_samples/cries/palpitoad.aif b/sound/direct_sound_samples/cries/palpitoad.aif index 637965880f..a22b007bf0 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/panpour.aif b/sound/direct_sound_samples/cries/panpour.aif index ba8b78d040..080e974b09 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 b380d2fb0c..f5cd1a8b6c 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 f8409cb13c..204046866e 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/patrat.aif b/sound/direct_sound_samples/cries/patrat.aif index 37015b78d8..1bfddd3f9f 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/pawmi.aif b/sound/direct_sound_samples/cries/pawmi.aif new file mode 100644 index 0000000000..fa9a9197cb Binary files /dev/null and b/sound/direct_sound_samples/cries/pawmi.aif differ diff --git a/sound/direct_sound_samples/cries/pawmo.aif b/sound/direct_sound_samples/cries/pawmo.aif new file mode 100644 index 0000000000..7fbf646c2f Binary files /dev/null and b/sound/direct_sound_samples/cries/pawmo.aif differ diff --git a/sound/direct_sound_samples/cries/pawmot.aif b/sound/direct_sound_samples/cries/pawmot.aif new file mode 100644 index 0000000000..6175b50542 Binary files /dev/null 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 bb41ae40f3..db95da2044 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/petilil.aif b/sound/direct_sound_samples/cries/petilil.aif index 05a9cd7836..ce243e499e 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/pidove.aif b/sound/direct_sound_samples/cries/pidove.aif index 1459e7c082..faec9a046c 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 73c005364e..3cb8d0a850 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/poltchageist.aif b/sound/direct_sound_samples/cries/poltchageist.aif new file mode 100644 index 0000000000..d861a0022b Binary files /dev/null and b/sound/direct_sound_samples/cries/poltchageist.aif differ diff --git a/sound/direct_sound_samples/cries/polteageist.aif b/sound/direct_sound_samples/cries/polteageist.aif index d002d7b537..f9051a25c4 100644 Binary files a/sound/direct_sound_samples/cries/polteageist.aif and b/sound/direct_sound_samples/cries/polteageist.aif differ diff --git a/sound/direct_sound_samples/cries/primal_groudon.aif b/sound/direct_sound_samples/cries/primal_groudon.aif index c47922bb20..c883269470 100644 Binary files a/sound/direct_sound_samples/cries/primal_groudon.aif and b/sound/direct_sound_samples/cries/primal_groudon.aif differ diff --git a/sound/direct_sound_samples/cries/primal_kyogre.aif b/sound/direct_sound_samples/cries/primal_kyogre.aif index 50ae7ed92d..605b8944ce 100644 Binary files a/sound/direct_sound_samples/cries/primal_kyogre.aif and b/sound/direct_sound_samples/cries/primal_kyogre.aif differ diff --git a/sound/direct_sound_samples/cries/purrloin.aif b/sound/direct_sound_samples/cries/purrloin.aif index 85cde5c7bb..23791edb2b 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/quaquaval.aif b/sound/direct_sound_samples/cries/quaquaval.aif new file mode 100644 index 0000000000..d04fac23ff Binary files /dev/null and b/sound/direct_sound_samples/cries/quaquaval.aif differ diff --git a/sound/direct_sound_samples/cries/quaxly.aif b/sound/direct_sound_samples/cries/quaxly.aif new file mode 100644 index 0000000000..81606b4a19 Binary files /dev/null and b/sound/direct_sound_samples/cries/quaxly.aif differ diff --git a/sound/direct_sound_samples/cries/quaxwell.aif b/sound/direct_sound_samples/cries/quaxwell.aif new file mode 100644 index 0000000000..62669362ea Binary files /dev/null and b/sound/direct_sound_samples/cries/quaxwell.aif differ diff --git a/sound/direct_sound_samples/cries/rabsca.aif b/sound/direct_sound_samples/cries/rabsca.aif new file mode 100644 index 0000000000..9d36d01cdc Binary files /dev/null and b/sound/direct_sound_samples/cries/rabsca.aif differ diff --git a/sound/direct_sound_samples/cries/regieleki.aif b/sound/direct_sound_samples/cries/regieleki.aif index f13c7223a7..75061bccff 100644 Binary files a/sound/direct_sound_samples/cries/regieleki.aif and b/sound/direct_sound_samples/cries/regieleki.aif differ diff --git a/sound/direct_sound_samples/cries/rellor.aif b/sound/direct_sound_samples/cries/rellor.aif new file mode 100644 index 0000000000..0a2f79805f Binary files /dev/null and b/sound/direct_sound_samples/cries/rellor.aif differ diff --git a/sound/direct_sound_samples/cries/reuniclus.aif b/sound/direct_sound_samples/cries/reuniclus.aif index 677130d8b1..75d92858c4 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 new file mode 100644 index 0000000000..731e2496c7 Binary files /dev/null and b/sound/direct_sound_samples/cries/revavroom.aif differ diff --git a/sound/direct_sound_samples/cries/rillaboom.aif b/sound/direct_sound_samples/cries/rillaboom.aif index 183354a787..c6a8b8932d 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/roaringmoon.aif b/sound/direct_sound_samples/cries/roaringmoon.aif new file mode 100644 index 0000000000..3c258496dc Binary files /dev/null and b/sound/direct_sound_samples/cries/roaringmoon.aif differ diff --git a/sound/direct_sound_samples/cries/roggenrola.aif b/sound/direct_sound_samples/cries/roggenrola.aif index 9ce801a0bb..c4764dc82b 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 f5264b9e27..036d3e2f17 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/rufflet.aif b/sound/direct_sound_samples/cries/rufflet.aif index 5d59c04ea3..2aff67b5cf 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/sandaconda.aif b/sound/direct_sound_samples/cries/sandaconda.aif index f71b725323..13dd2b5ec2 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 2718b02388..9e52575b7c 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/sandyshocks.aif b/sound/direct_sound_samples/cries/sandyshocks.aif new file mode 100644 index 0000000000..d26cfc8817 Binary files /dev/null and b/sound/direct_sound_samples/cries/sandyshocks.aif differ diff --git a/sound/direct_sound_samples/cries/sawk.aif b/sound/direct_sound_samples/cries/sawk.aif index 5ae99e1cfe..ebfe11e4a8 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 8204786ee6..745d3761d3 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/scorbunny.aif b/sound/direct_sound_samples/cries/scorbunny.aif index 92fac55602..120dd0f888 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/scovillain.aif b/sound/direct_sound_samples/cries/scovillain.aif new file mode 100644 index 0000000000..d84cb24087 Binary files /dev/null and b/sound/direct_sound_samples/cries/scovillain.aif differ diff --git a/sound/direct_sound_samples/cries/scrafty.aif b/sound/direct_sound_samples/cries/scrafty.aif index 974fb0e139..218c897f4a 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 3c024a8f40..5b6958fcaf 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/screamtail.aif b/sound/direct_sound_samples/cries/screamtail.aif new file mode 100644 index 0000000000..a64bbdb051 Binary files /dev/null and b/sound/direct_sound_samples/cries/screamtail.aif differ diff --git a/sound/direct_sound_samples/cries/seismitoad.aif b/sound/direct_sound_samples/cries/seismitoad.aif index 2a88a1e771..267979cc0b 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/serperior.aif b/sound/direct_sound_samples/cries/serperior.aif index a14fa9f221..73ea832cd4 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 dbe5c10634..aa687c02d6 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/sewaddle.aif b/sound/direct_sound_samples/cries/sewaddle.aif index 58ac188020..9918b44645 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/shaymin_sky.aif b/sound/direct_sound_samples/cries/shaymin_sky.aif index bd1cb0ed0f..3a340b56ec 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/shroodle.aif b/sound/direct_sound_samples/cries/shroodle.aif new file mode 100644 index 0000000000..b60ef3ade3 Binary files /dev/null and b/sound/direct_sound_samples/cries/shroodle.aif differ diff --git a/sound/direct_sound_samples/cries/sigilyph.aif b/sound/direct_sound_samples/cries/sigilyph.aif index 544ebccd6a..cce44936cf 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/silicobra.aif b/sound/direct_sound_samples/cries/silicobra.aif index 886c6c8b79..3b9f5e13fc 100644 Binary files a/sound/direct_sound_samples/cries/silicobra.aif and b/sound/direct_sound_samples/cries/silicobra.aif differ diff --git a/sound/direct_sound_samples/cries/simipour.aif b/sound/direct_sound_samples/cries/simipour.aif index 77640cd8b0..47ac114690 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 078e699570..0117cf73fc 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 2a767ae0fc..c6f9ec2297 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/sinistcha.aif b/sound/direct_sound_samples/cries/sinistcha.aif new file mode 100644 index 0000000000..e9a619c3f0 Binary files /dev/null and b/sound/direct_sound_samples/cries/sinistcha.aif differ diff --git a/sound/direct_sound_samples/cries/sinistea.aif b/sound/direct_sound_samples/cries/sinistea.aif index 35ace612b0..912a0800f9 100644 Binary files a/sound/direct_sound_samples/cries/sinistea.aif and b/sound/direct_sound_samples/cries/sinistea.aif differ diff --git a/sound/direct_sound_samples/cries/skeledirge.aif b/sound/direct_sound_samples/cries/skeledirge.aif new file mode 100644 index 0000000000..720e102019 Binary files /dev/null and b/sound/direct_sound_samples/cries/skeledirge.aif differ diff --git a/sound/direct_sound_samples/cries/slitherwing.aif b/sound/direct_sound_samples/cries/slitherwing.aif new file mode 100644 index 0000000000..d61cadb5eb Binary files /dev/null and b/sound/direct_sound_samples/cries/slitherwing.aif differ diff --git a/sound/direct_sound_samples/cries/slowpoke_galarian.aif b/sound/direct_sound_samples/cries/slowpoke_galarian.aif index d26b930f06..2cb7b8a5f3 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/smoliv.aif b/sound/direct_sound_samples/cries/smoliv.aif new file mode 100644 index 0000000000..f30f88a1c3 Binary files /dev/null and b/sound/direct_sound_samples/cries/smoliv.aif differ diff --git a/sound/direct_sound_samples/cries/sneasler.aif b/sound/direct_sound_samples/cries/sneasler.aif index fa2fbef2bc..77b4f99a21 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 fac1d4afd5..f7f9790a16 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 bacc67ff42..5166e1a384 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/solosis.aif b/sound/direct_sound_samples/cries/solosis.aif index fa095e378a..875f608407 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/spectrier.aif b/sound/direct_sound_samples/cries/spectrier.aif index 1db3088e5d..058cc9f8c5 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/spidops.aif b/sound/direct_sound_samples/cries/spidops.aif new file mode 100644 index 0000000000..e1f2c32715 Binary files /dev/null and b/sound/direct_sound_samples/cries/spidops.aif differ diff --git a/sound/direct_sound_samples/cries/sprigatito.aif b/sound/direct_sound_samples/cries/sprigatito.aif new file mode 100644 index 0000000000..5d6b5c966d Binary files /dev/null and b/sound/direct_sound_samples/cries/sprigatito.aif differ diff --git a/sound/direct_sound_samples/cries/squawkabilly.aif b/sound/direct_sound_samples/cries/squawkabilly.aif new file mode 100644 index 0000000000..140243d802 Binary files /dev/null and b/sound/direct_sound_samples/cries/squawkabilly.aif differ diff --git a/sound/direct_sound_samples/cries/stoutland.aif b/sound/direct_sound_samples/cries/stoutland.aif index 0f8ff740ce..3175b64767 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/stunfisk.aif b/sound/direct_sound_samples/cries/stunfisk.aif index 309dd54c96..5dbdb6dc9c 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/swadloon.aif b/sound/direct_sound_samples/cries/swadloon.aif index d5b3a25c64..5de0315920 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/swanna.aif b/sound/direct_sound_samples/cries/swanna.aif index ac9fe12aef..d7b01aed3b 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/tadbulb.aif b/sound/direct_sound_samples/cries/tadbulb.aif new file mode 100644 index 0000000000..6944fa31dc Binary files /dev/null and b/sound/direct_sound_samples/cries/tadbulb.aif differ diff --git a/sound/direct_sound_samples/cries/tandemaus.aif b/sound/direct_sound_samples/cries/tandemaus.aif new file mode 100644 index 0000000000..c6aeb27e0c Binary files /dev/null and b/sound/direct_sound_samples/cries/tandemaus.aif differ diff --git a/sound/direct_sound_samples/cries/tarountula.aif b/sound/direct_sound_samples/cries/tarountula.aif new file mode 100644 index 0000000000..a08f51ee20 Binary files /dev/null and b/sound/direct_sound_samples/cries/tarountula.aif differ diff --git a/sound/direct_sound_samples/cries/tatsugiri.aif b/sound/direct_sound_samples/cries/tatsugiri.aif new file mode 100644 index 0000000000..ad84b37285 Binary files /dev/null and b/sound/direct_sound_samples/cries/tatsugiri.aif differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_droopy.aif b/sound/direct_sound_samples/cries/tatsugiri_droopy.aif new file mode 100644 index 0000000000..38b0a7949a Binary files /dev/null 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 new file mode 100644 index 0000000000..ad1fbe930b Binary files /dev/null and b/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif differ diff --git a/sound/direct_sound_samples/cries/tepig.aif b/sound/direct_sound_samples/cries/tepig.aif index 63b19c40bc..fa226ef1f1 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 dcae3a4658..77e5c71ca2 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 5192e50ac8..176d1065d6 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/thwackey.aif b/sound/direct_sound_samples/cries/thwackey.aif index bd30a0c0e0..dff37f5c80 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 1374144d52..839bfb59b7 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/tinglu.aif b/sound/direct_sound_samples/cries/tinglu.aif new file mode 100644 index 0000000000..82cbff16f3 Binary files /dev/null and b/sound/direct_sound_samples/cries/tinglu.aif differ diff --git a/sound/direct_sound_samples/cries/tinkatink.aif b/sound/direct_sound_samples/cries/tinkatink.aif new file mode 100644 index 0000000000..24b50dbbf0 Binary files /dev/null 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 new file mode 100644 index 0000000000..c48068f692 Binary files /dev/null and b/sound/direct_sound_samples/cries/tinkaton.aif differ diff --git a/sound/direct_sound_samples/cries/tinkatuff.aif b/sound/direct_sound_samples/cries/tinkatuff.aif new file mode 100644 index 0000000000..aa096ef113 Binary files /dev/null and b/sound/direct_sound_samples/cries/tinkatuff.aif differ diff --git a/sound/direct_sound_samples/cries/tirtouga.aif b/sound/direct_sound_samples/cries/tirtouga.aif index 0df1a695ad..d32ec5ef3c 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/toedscool.aif b/sound/direct_sound_samples/cries/toedscool.aif new file mode 100644 index 0000000000..a153ed4d87 Binary files /dev/null and b/sound/direct_sound_samples/cries/toedscool.aif differ diff --git a/sound/direct_sound_samples/cries/toedscruel.aif b/sound/direct_sound_samples/cries/toedscruel.aif new file mode 100644 index 0000000000..87fc37decd Binary files /dev/null and b/sound/direct_sound_samples/cries/toedscruel.aif differ diff --git a/sound/direct_sound_samples/cries/tornadus.aif b/sound/direct_sound_samples/cries/tornadus.aif index 17107f6e2a..30f96ec8fe 100644 Binary files a/sound/direct_sound_samples/cries/tornadus.aif and b/sound/direct_sound_samples/cries/tornadus.aif differ diff --git a/sound/direct_sound_samples/cries/toxel.aif b/sound/direct_sound_samples/cries/toxel.aif index a53da654a5..2f1304295b 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/tranquill.aif b/sound/direct_sound_samples/cries/tranquill.aif index f5c652fb11..e11795686b 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/trubbish.aif b/sound/direct_sound_samples/cries/trubbish.aif index 321f1baa11..7bde68d8ca 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/tympole.aif b/sound/direct_sound_samples/cries/tympole.aif index 774317ffba..172aab0560 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 bbb08cfdc7..647040c17a 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/uncomp_klefki.aif b/sound/direct_sound_samples/cries/uncomp_klefki.aif index 4ffa19b575..4af6a9d6d1 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 new file mode 100644 index 0000000000..a37b0537ec Binary files /dev/null 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 dadbed9480..4a3a8a9b07 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/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif index 7f054dc5cb..f2e96997f1 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/vanillish.aif b/sound/direct_sound_samples/cries/vanillish.aif index e53b51040b..07fe3555e4 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 72bbe2485d..e982d31bee 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 45f2d085de..94b6f03492 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/varoom.aif b/sound/direct_sound_samples/cries/varoom.aif new file mode 100644 index 0000000000..731bdce2d6 Binary files /dev/null and b/sound/direct_sound_samples/cries/varoom.aif differ diff --git a/sound/direct_sound_samples/cries/veluza.aif b/sound/direct_sound_samples/cries/veluza.aif new file mode 100644 index 0000000000..9bcf8974ff Binary files /dev/null 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 43a6639815..4ccde9b768 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/victini.aif b/sound/direct_sound_samples/cries/victini.aif index 31801a064c..4bd7d7c1ca 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/virizion.aif b/sound/direct_sound_samples/cries/virizion.aif index 296aaa829e..06cf7a86f3 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/vullaby.aif b/sound/direct_sound_samples/cries/vullaby.aif index 41beb9ed60..97df0d14f9 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/walkingwake.aif b/sound/direct_sound_samples/cries/walkingwake.aif new file mode 100644 index 0000000000..88518dd200 Binary files /dev/null and b/sound/direct_sound_samples/cries/walkingwake.aif differ diff --git a/sound/direct_sound_samples/cries/watchog.aif b/sound/direct_sound_samples/cries/watchog.aif index e5f35aa07b..a3bd8a0f7e 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 new file mode 100644 index 0000000000..7390eea50a Binary files /dev/null and b/sound/direct_sound_samples/cries/wattrel.aif differ diff --git a/sound/direct_sound_samples/cries/whirlipede.aif b/sound/direct_sound_samples/cries/whirlipede.aif index 09628dce6e..f2b6c5fa69 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/wiglett.aif b/sound/direct_sound_samples/cries/wiglett.aif new file mode 100644 index 0000000000..d377681aef Binary files /dev/null and b/sound/direct_sound_samples/cries/wiglett.aif differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_school.aif b/sound/direct_sound_samples/cries/wishiwashi_school.aif index 6236328ff7..ab0ac98535 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/wochien.aif b/sound/direct_sound_samples/cries/wochien.aif new file mode 100644 index 0000000000..fa201694eb Binary files /dev/null and b/sound/direct_sound_samples/cries/wochien.aif differ diff --git a/sound/direct_sound_samples/cries/woobat.aif b/sound/direct_sound_samples/cries/woobat.aif index 4aa987aa04..d66f5bd157 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/wugtrio.aif b/sound/direct_sound_samples/cries/wugtrio.aif new file mode 100644 index 0000000000..6c92cae873 Binary files /dev/null and b/sound/direct_sound_samples/cries/wugtrio.aif differ diff --git a/sound/direct_sound_samples/cries/wyrdeer.aif b/sound/direct_sound_samples/cries/wyrdeer.aif index 4e932c758c..4d0c83dc51 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/zacian_crowned_sword.aif b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif index 19d9d66737..5e47f9275b 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 5542b20a65..1e7eae771b 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/zarude.aif b/sound/direct_sound_samples/cries/zarude.aif index 61c87f5a3b..d1a2a76aa4 100644 Binary files a/sound/direct_sound_samples/cries/zarude.aif and b/sound/direct_sound_samples/cries/zarude.aif differ diff --git a/sound/direct_sound_samples/cries/zebstrika.aif b/sound/direct_sound_samples/cries/zebstrika.aif index ed075a857f..74ef8d943a 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/zoroark.aif b/sound/direct_sound_samples/cries/zoroark.aif index 6184a67bd5..7cd45de062 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 aa5e686446..039955ac19 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/zweilous.aif b/sound/direct_sound_samples/cries/zweilous.aif index a4db324683..987f436d9a 100644 Binary files a/sound/direct_sound_samples/cries/zweilous.aif and b/sound/direct_sound_samples/cries/zweilous.aif differ diff --git a/src/apprentice.c b/src/apprentice.c index 2142a91f71..e7d67a43e2 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -351,7 +351,7 @@ static u16 GetRandomAlternateMove(u8 monId) else // == APPRENTICE_LVL_MODE_OPEN level = 60; // Despite being open level, level up moves are only read up to level 60 - for (j = 0; learnset[j].move != LEVEL_UP_END; j++) + for (j = 0; learnset[j].move != LEVEL_UP_MOVE_END; j++) { if (learnset[j].level > level) break; @@ -468,7 +468,7 @@ static void GetLatestLearnedMoves(u16 species, u16 *moves) level = 60; learnset = gLevelUpLearnsets[species]; - for (i = 0; learnset[i].move != LEVEL_UP_END; i++) + for (i = 0; learnset[i].move != LEVEL_UP_MOVE_END; i++) { if (learnset[i].level > level) break; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b397b05e69..0a9e0a269a 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -30,7 +30,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi); static u32 ChooseMoveOrAction_Doubles(u32 battlerAi); -static inline void BattleAI_DoAIProcessing(struct AI_ThinkingStruct *aiThink, u32 battler); +static inline void BattleAI_DoAIProcessing(struct AI_ThinkingStruct *aiThink, u32 battlerAi, u32 battlerDef); static bool32 IsPinchBerryItemEffect(u32 holdEffect); // ewram @@ -118,7 +118,7 @@ void BattleAI_SetupItems(void) static u32 GetWildAiFlags(void) { u32 avgLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); - u32 flags; + u32 flags = 0; if (IsDoubleBattle()) avgLevel = (GetMonData(&gEnemyParty[0], MON_DATA_LEVEL) + GetMonData(&gEnemyParty[1], MON_DATA_LEVEL)) / 2; @@ -174,7 +174,7 @@ void BattleAI_SetupFlags(void) // sBattler_AI set in ComputeBattleAiScores void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) { - s32 i, move, dmg; + s32 i; u8 moveLimitations; // Clear AI data but preserve the flags. @@ -186,9 +186,9 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { if (defaultScoreMoves & 1) - AI_THINKING_STRUCT->score[i] = 100; + SET_SCORE(battler, i, AI_SCORE_DEFAULT); else - AI_THINKING_STRUCT->score[i] = 0; + SET_SCORE(battler, i, 0); defaultScoreMoves >>= 1; } @@ -199,7 +199,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { if (gBitTable[i] & moveLimitations) - AI_THINKING_STRUCT->score[i] = 0; + SET_SCORE(battler, i, 0); } //sBattler_AI = battler; @@ -219,6 +219,9 @@ u32 BattleAI_ChooseMoveOrAction(void) // Clear protect structures, some flags may be set during AI calcs // e.g. pranksterElevated from GetMovePriority memset(&gProtectStructs, 0, MAX_BATTLERS_COUNT * sizeof(struct ProtectStruct)); + #if TESTING + TestRunner_Battle_CheckAiMoveScores(sBattler_AI); + #endif // TESTING return ret; } @@ -385,7 +388,6 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 aiData->effectiveness[battlerAtk][battlerDef][i] = effectiveness; } } - SetMovesDamageResults(battlerAtk, moves); } void SetAiLogicDataForTurn(struct AiLogicData *aiData) @@ -414,7 +416,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) static bool32 AI_SwitchMonIfSuitable(u32 battler) { - u32 monToSwitchId = GetMostSuitableMonToSwitchInto(battler); + u32 monToSwitchId = AI_DATA->mostSuitableMonId; if (monToSwitchId != PARTY_SIZE) { AI_DATA->shouldSwitchMon |= gBitTable[battler]; @@ -489,7 +491,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi) u8 currentMoveArray[MAX_MON_MOVES]; u8 consideredMoveArray[MAX_MON_MOVES]; u32 numOfBestMoves; - s32 i, id; + s32 i; u32 flags = AI_THINKING_STRUCT->aiFlags; AI_DATA->partnerMove = 0; // no ally @@ -497,7 +499,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi) { if (flags & 1) { - BattleAI_DoAIProcessing(AI_THINKING_STRUCT, battlerAi); + BattleAI_DoAIProcessing(AI_THINKING_STRUCT, battlerAi, gBattlerTarget); } flags >>= 1; AI_THINKING_STRUCT->aiLogicId++; @@ -505,6 +507,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi) for (i = 0; i < MAX_MON_MOVES; i++) { gBattleStruct->aiFinalScore[battlerAi][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i]; + } // Check special AI actions. @@ -571,7 +574,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) gBattlerTarget = i; - AI_DATA->partnerMove = GetAllyChosenMove(i); + AI_DATA->partnerMove = GetAllyChosenMove(battlerAi); AI_THINKING_STRUCT->aiLogicId = 0; AI_THINKING_STRUCT->movesetIndex = 0; flags = AI_THINKING_STRUCT->aiFlags; @@ -579,7 +582,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) { if (flags & 1) { - BattleAI_DoAIProcessing(AI_THINKING_STRUCT, battlerAi); + BattleAI_DoAIProcessing(AI_THINKING_STRUCT, battlerAi, gBattlerTarget); } flags >>= 1; AI_THINKING_STRUCT->aiLogicId++; @@ -623,7 +626,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) bestMovePointsForTarget[i] = mostViableMovesScores[0]; // Don't use a move against ally if it has less than 100 points. - if (i == BATTLE_PARTNER(battlerAi) && bestMovePointsForTarget[i] < 100) + if (i == BATTLE_PARTNER(battlerAi) && bestMovePointsForTarget[i] < AI_SCORE_DEFAULT) { bestMovePointsForTarget[i] = -1; } @@ -663,25 +666,37 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) return actionOrMoveIndex[gBattlerTarget]; } -static inline void BattleAI_DoAIProcessing(struct AI_ThinkingStruct *aiThink, u32 battler) +static inline bool32 ShouldConsiderMoveForBattler(u32 battlerAi, u32 battlerDef, u32 move) +{ + if (battlerAi == BATTLE_PARTNER(battlerDef)) + { + if (gBattleMoves[move].target == MOVE_TARGET_BOTH || gBattleMoves[move].target == MOVE_TARGET_OPPONENTS_FIELD) + return FALSE; + } + return TRUE; +} + +static inline void BattleAI_DoAIProcessing(struct AI_ThinkingStruct *aiThink, u32 battlerAi, u32 battlerDef) { do { - if (gBattleMons[battler].pp[aiThink->movesetIndex] == 0) + if (gBattleMons[battlerAi].pp[aiThink->movesetIndex] == 0) aiThink->moveConsidered = MOVE_NONE; else - aiThink->moveConsidered = gBattleMons[battler].moves[aiThink->movesetIndex]; + aiThink->moveConsidered = gBattleMons[battlerAi].moves[aiThink->movesetIndex]; + // There is no point in calculating scores for all 3 battlers(2 opponents + 1 ally) with certain moves. if (aiThink->moveConsidered != MOVE_NONE - && aiThink->score[aiThink->movesetIndex] > 0) + && aiThink->score[aiThink->movesetIndex] > 0 + && ShouldConsiderMoveForBattler(battlerAi, battlerDef, aiThink->moveConsidered)) { if (aiThink->aiLogicId < ARRAY_COUNT(sBattleAiFuncTable) && sBattleAiFuncTable[aiThink->aiLogicId] != NULL) { // Call AI function aiThink->score[aiThink->movesetIndex] = - sBattleAiFuncTable[aiThink->aiLogicId](battler, - gBattlerTarget, + sBattleAiFuncTable[aiThink->aiLogicId](battlerAi, + battlerDef, aiThink->moveConsidered, aiThink->score[aiThink->movesetIndex]); } @@ -705,7 +720,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 moveEffect = gBattleMoves[move].effect; s32 moveType; u32 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); - u32 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move); struct AiLogicData *aiData = AI_DATA; u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); @@ -745,6 +759,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) RETURN_SCORE_MINUS(20); // if target off screen and we go first, don't use move + if (IsChargingMove(battlerAtk, moveEffect) && CanTargetFaintAi(battlerDef, battlerAtk)) + RETURN_SCORE_MINUS(10); + // check if negates type switch (effectiveness) { @@ -769,11 +786,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_WILL_O_WISP: case EFFECT_TOXIC: case EFFECT_LEECH_SEED: - score -= 5; + ADJUST_SCORE(-5); break; case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. - score -= 5; + ADJUST_SCORE(-5); break; } break; @@ -854,6 +871,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && move != MOVE_PLAY_NICE && move != MOVE_NOBLE_ROAR && move != MOVE_TEARFUL_LOOK && move != MOVE_VENOM_DRENCH) RETURN_SCORE_MINUS(10); break; + case ABILITY_ILLUMINATE: + if (B_ILLUMINATE_EFFECT < GEN_9) + break; + // fallthrough case ABILITY_KEEN_EYE: if (moveEffect == EFFECT_ACCURACY_DOWN || moveEffect == EFFECT_ACCURACY_DOWN_2) RETURN_SCORE_MINUS(10); @@ -922,11 +943,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // ignore def ability check // gen7+ dark type mons immune to priority->elevated moves from prankster - #if B_PRANKSTER_DARK_TYPES >= GEN_7 - if (aiData->abilities[battlerAtk] == ABILITY_PRANKSTER && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && IS_MOVE_STATUS(move) + if (B_PRANKSTER_DARK_TYPES >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) + && aiData->abilities[battlerAtk] == ABILITY_PRANKSTER && IS_MOVE_STATUS(move) && !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER))) RETURN_SCORE_MINUS(10); - #endif // terrain & effect checks if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) @@ -992,40 +1012,40 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; // check move damage case EFFECT_SLEEP: if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_EXPLOSION: if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE)) - score -= 2; + ADJUST_SCORE(-2); if (effectiveness == AI_EFFECTIVENESS_x0) { - score -= 10; + ADJUST_SCORE(-10); } else if (IsAbilityOnField(ABILITY_DAMP) && !DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) { - score -= 10; + ADJUST_SCORE(-10); } else if (CountUsablePartyMons(battlerAtk) == 0) { if (CountUsablePartyMons(battlerDef) != 0) - score -= 10; + ADJUST_SCORE(-10); else - score--; + ADJUST_SCORE(-1); } break; case EFFECT_DREAM_EATER: if (!AI_IsBattlerAsleepOrComatose(battlerDef)) - score -= 8; + ADJUST_SCORE(-8); else if (effectiveness == AI_EFFECTIVENESS_x0) - score -= 10; + ADJUST_SCORE(-10); break; // stat raising effects case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: case EFFECT_ATTACK_UP_USER_ALLY: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_STUFF_CHEEKS: if (ItemId_GetPocket(gBattleMons[battlerAtk].item) != POCKET_BERRIES) @@ -1036,131 +1056,130 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_DEFENSE_UP_3: case EFFECT_DEFENSE_CURL: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_ATTACK_UP: case EFFECT_SPECIAL_ATTACK_UP_2: case EFFECT_SPECIAL_ATTACK_UP_3: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_DEFENSE_UP: case EFFECT_SPECIAL_DEFENSE_UP_2: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ACCURACY_UP: case EFFECT_ACCURACY_UP_2: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ACC)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_EVASION_UP: case EFFECT_EVASION_UP_2: case EFFECT_MINIMIZE: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_EVASION)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_COSMIC_POWER: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_BULK_UP: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_CALM_MIND: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_DRAGON_DANCE: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_COIL: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ACC)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 8; + ADJUST_SCORE(-8); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_ATTACK_ACCURACY_UP: //hone claws if (aiData->abilities[battlerAtk] != ABILITY_CONTRARY) { if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= MAX_STAT_STAGE && (gBattleMons[battlerAtk].statStages[STAT_ACC] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))) - score -= 10; + ADJUST_SCORE(-10); break; } else { - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_CHARGE: if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP) - score -= 20; + ADJUST_SCORE(-20); else if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC)) - score -= 10; - #if B_CHARGE_SPDEF_RAISE >= GEN_5 - else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 5; - #endif + ADJUST_SCORE(-10); + else if (B_CHARGE_SPDEF_RAISE >= GEN_5 + && !BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) + ADJUST_SCORE(-5); break; case EFFECT_QUIVER_DANCE: case EFFECT_GEOMANCY: if (gBattleMons[battlerAtk].statStages[STAT_SPATK] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED)) - score -= 8; + ADJUST_SCORE(-8); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_VICTORY_DANCE: if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED)) - score -= 8; + ADJUST_SCORE(-8); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_SHIFT_GEAR: if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_SHELL_SMASH: if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) { if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 8; + ADJUST_SCORE(-8); } else { if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 8; + ADJUST_SCORE(-8); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPEED)) - score -= 6; + ADJUST_SCORE(-6); } break; case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up if ((!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK)) || (!HasDamagingMove(battlerAtk))) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ROTOTILLER: if (isDoubleBattle) @@ -1174,14 +1193,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK)))) { - score -= 10; + ADJUST_SCORE(-10); } } else if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) && AI_IsBattlerGrounded(battlerAtk) && (BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK)))) { - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_GEAR_UP: @@ -1189,14 +1208,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // same as growth, work up if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 8; + ADJUST_SCORE(-8); break; } else if (!isDoubleBattle) { - score -= 10; // no partner and our stats wont rise, so don't use + ADJUST_SCORE(-10); // no partner and our stats wont rise, so don't use } if (isDoubleBattle) @@ -1205,29 +1224,29 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if ((!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) && (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) - score -= 10; + ADJUST_SCORE(-10); } else if (aiData->abilities[battlerAtk] != ABILITY_PLUS && aiData->abilities[battlerAtk] != ABILITY_MINUS) { - score -= 10; // nor our or our partner's ability is plus/minus + ADJUST_SCORE(-10); // nor our or our partner's ability is plus/minus } } break; case EFFECT_ACUPRESSURE: if (DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || AreBattlersStatsMaxed(battlerDef)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MAGNETIC_FLUX: if (aiData->abilities[battlerAtk] == ABILITY_PLUS || aiData->abilities[battlerAtk] == ABILITY_MINUS) { if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 8; + ADJUST_SCORE(-8); } else if (!isDoubleBattle) { - score -= 10; // our stats wont rise from this move + ADJUST_SCORE(-10); // our stats wont rise from this move } if (isDoubleBattle) @@ -1235,13 +1254,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS) { if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) - score -= 8; + ADJUST_SCORE(-8); } else if (aiData->abilities[battlerAtk] != ABILITY_PLUS && aiData->abilities[battlerAtk] != ABILITY_MINUS) { - score -= 10; // nor our or our partner's ability is plus/minus + ADJUST_SCORE(-10); // nor our or our partner's ability is plus/minus } } break; @@ -1249,310 +1268,293 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_HYPER_CUTTER) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_DEF)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SPEED_BOOST) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPDEF)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ACC)) - score -= 10; - else if (aiData->abilities[battlerDef] == ABILITY_KEEN_EYE) - score -= 8; + ADJUST_SCORE(-10); + else if (aiData->abilities[battlerDef] == ABILITY_KEEN_EYE || (B_ILLUMINATE_EFFECT >= GEN_9 && aiData->abilities[battlerDef] == ABILITY_ILLUMINATE)) + ADJUST_SCORE(-8); break; case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_EVASION)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TICKLE: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) - score -= 10; + ADJUST_SCORE(-10); else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_DEF)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_VENOM_DRENCH: if (!(gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { - score -= 10; + ADJUST_SCORE(-10); } else { if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) - score -= 10; + ADJUST_SCORE(-10); else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) - score -= 8; + ADJUST_SCORE(-8); else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) - score -= 6; + ADJUST_SCORE(-6); } break; case EFFECT_NOBLE_ROAR: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) - score -= 10; + ADJUST_SCORE(-10); else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_CAPTIVATE: if (!AreBattlersOfOppositeGender(battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); break; // other case EFFECT_HAZE: if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { - score -= 10; // partner already using haze + ADJUST_SCORE(-10); // partner already using haze } else { for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE) - score -= 10; // Don't want to reset our boosted stats + ADJUST_SCORE(-10); // Don't want to reset our boosted stats } for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE) - score -= 10; //Don't want to reset enemy lowered stats + ADJUST_SCORE(-10); //Don't want to reset enemy lowered stats } } break; //case EFFECT_BIDE: - //case EFFECT_SUPER_FANG: //case EFFECT_RECHARGE: - case EFFECT_LEVEL_DAMAGE: - case EFFECT_PSYWAVE: //case EFFECT_COUNTER: - //case EFFECT_FLAIL: - case EFFECT_RETURN: case EFFECT_PRESENT: - case EFFECT_FRUSTRATION: case EFFECT_SONICBOOM: //case EFFECT_MIRROR_COAT: - case EFFECT_SKULL_BASH: case EFFECT_FOCUS_PUNCH: - case EFFECT_SUPERPOWER: //case EFFECT_ENDEAVOR: - case EFFECT_LOW_KICK: // AI_CBM_HighRiskForDamage if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_COUNTER: case EFFECT_MIRROR_COAT: if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) - score--; + ADJUST_SCORE(-1); if (predictedMove == MOVE_NONE || GetBattleMoveSplit(predictedMove) == SPLIT_STATUS || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ROAR: if (CountUsablePartyMons(battlerDef) == 0) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TOXIC_THREAD: if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) - score--; // may still want to just poison + ADJUST_SCORE(-1); // may still want to just poison //fallthrough case EFFECT_POISON: case EFFECT_TOXIC: if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_LIGHT_SCREEN: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LIGHTSCREEN || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_REFLECT: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_REFLECT || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_AURORA_VEIL: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) || !(weather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_OHKO: - #if B_SHEER_COLD_IMMUNITY >= GEN_7 - if (move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) return 0; - #endif if (!ShouldTryOHKO(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MIST: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_MIST || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FOCUS_ENERGY: if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CONFUSE: case EFFECT_SWAGGER: case EFFECT_FLATTER: if (!AI_CanConfuse(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PARALYZE: if (!AI_CanParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SUBSTITUTE: if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) - score -= 8; + ADJUST_SCORE(-8); else if (aiData->hpPercents[battlerAtk] <= 25) - score -= 10; - #if B_SOUND_SUBSTITUTE >= GEN_6 - else if (HasSoundMove(battlerDef)) - score -= 8; - #endif + ADJUST_SCORE(-10); + else if (HasSubstituteIgnoringMove(battlerDef)) + ADJUST_SCORE(-8); break; case EFFECT_LEECH_SEED: if (gStatuses3[battlerDef] & STATUS3_LEECHSEED || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_LIQUID_OOZE) - score -= 3; + ADJUST_SCORE(-3); break; case EFFECT_DISABLE: if (gDisableStructs[battlerDef].disableTimer == 0 - #if B_MENTAL_HERB >= GEN_5 - && aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB - #endif + && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) - score -= 10; // no anticipated move to disable + ADJUST_SCORE(-10); // no anticipated move to disable } else if (predictedMove == MOVE_NONE) { - score -= 10; + ADJUST_SCORE(-10); } } else { - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_ENCORE: if (gDisableStructs[battlerDef].encoreTimer == 0 - #if B_MENTAL_HERB >= GEN_5 - && aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB - #endif + && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) - score -= 10; // no anticipated move to encore + ADJUST_SCORE(-10); // no anticipated move to encore } else if (predictedMove == MOVE_NONE) { - score -= 10; + ADJUST_SCORE(-10); } } else { - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_SNORE: case EFFECT_SLEEP_TALK: if (IsWakeupTurn(battlerAtk) || !AI_IsBattlerAsleepOrComatose(battlerAtk)) - score -= 10; // if mon will wake up, is not asleep, or is not comatose + ADJUST_SCORE(-10); // if mon will wake up, is not asleep, or is not comatose break; case EFFECT_MEAN_LOOK: if (IsBattlerTrapped(battlerDef, TRUE) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_NIGHTMARE: if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) - score -= 10; + ADJUST_SCORE(-10); else if (!AI_IsBattlerAsleepOrComatose(battlerDef)) - score -= 8; + ADJUST_SCORE(-8); else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) { if (gBattleMons[battlerDef].status2 & STATUS2_CURSED || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] <= 50) - score -= 6; + ADJUST_SCORE(-6); } else // regular curse { if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_DEF)) - score -= 8; + ADJUST_SCORE(-8); } break; case EFFECT_SPIKES: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) - score -= 10; + ADJUST_SCORE(-10); else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].spikesAmount == 2) - score -= 10; // only one mon needs to set up the last layer of Spikes + ADJUST_SCORE(-10); // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) //Only one mon needs to set up Stealth Rocks - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TOXIC_SPIKES: if (gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount >= 2) - score -= 10; + ADJUST_SCORE(-10); else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount == 1) - score -= 10; // only one mon needs to set up the last layer of Toxic Spikes + ADJUST_SCORE(-10); // only one mon needs to set up the last layer of Toxic Spikes break; case EFFECT_STICKY_WEB: if (gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) - score -= 10; + ADJUST_SCORE(-10); else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) - score -= 10; // only one mon needs to set up Sticky Web + ADJUST_SCORE(-10); // only one mon needs to set up Sticky Web break; case EFFECT_FORESIGHT: if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 9; + ADJUST_SCORE(-9); break; case EFFECT_PERISH_SONG: if (isDoubleBattle) @@ -1562,85 +1564,85 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && aiData->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_SOUNDPROOF && CountUsablePartyMons(FOE(battlerAtk)) >= 1) { - score -= 10; //Don't wipe your team if you're going to lose + ADJUST_SCORE(-10); //Don't wipe your team if you're going to lose } else if ((!IsBattlerAlive(FOE(battlerAtk)) || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF || gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG) && (!IsBattlerAlive(BATTLE_PARTNER(FOE(battlerAtk))) || aiData->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_SOUNDPROOF || gStatuses3[BATTLE_PARTNER(FOE(battlerAtk))] & STATUS3_PERISH_SONG)) { - score -= 10; //Both enemies are perish songed + ADJUST_SCORE(-10); //Both enemies are perish songed } else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - score -= 10; + ADJUST_SCORE(-10); } } else { if (CountUsablePartyMons(battlerAtk) == 0 && aiData->abilities[battlerAtk] != ABILITY_SOUNDPROOF && CountUsablePartyMons(battlerDef) >= 1) - score -= 10; + ADJUST_SCORE(-10); if (gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF) - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_SANDSTORM: if (weather & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY) - || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), aiData->partnerMove)) - score -= 8; + || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); break; case EFFECT_SUNNY_DAY: if (weather & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY) - || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), aiData->partnerMove)) - score -= 8; + || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); break; case EFFECT_RAIN_DANCE: if (weather & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY) - || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), aiData->partnerMove)) - score -= 8; + || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); break; case EFFECT_HAIL: if (weather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) - || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), aiData->partnerMove)) - score -= 8; + || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); else if (weather & B_WEATHER_SNOW) - score -= 2; // mainly to prevent looping between hail and snow + ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow break; case EFFECT_SNOWSCAPE: if (weather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) - || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), aiData->partnerMove)) - score -= 8; + || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); else if (weather & B_WEATHER_HAIL) - score -= 2; // mainly to prevent looping between hail and snow + ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow break; case EFFECT_ATTRACT: if (!AI_CanBeInfatuated(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SAFEGUARD: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_SAFEGUARD || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MAGNITUDE: if (aiData->abilities[battlerDef] == ABILITY_LEVITATE) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PARTING_SHOT: if (CountUsablePartyMons(battlerAtk) == 0) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_BATON_PASS: if (CountUsablePartyMons(battlerAtk) == 0) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) || AnyStatIsRaised(battlerAtk)) break; else - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_HIT_ESCAPE: break; @@ -1649,70 +1651,64 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; // check damage/accuracy //Spin checks if (!(gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY)) - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_BELLY_DRUM: if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] <= 60) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FUTURE_SIGHT: if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_FUTUREATTACK || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_FUTUREATTACK) - score -= 12; + ADJUST_SCORE(-12); else - score += 5; + ADJUST_SCORE(5); break; case EFFECT_TELEPORT: - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FAKE_OUT: if (!gDisableStructs[battlerAtk].isFirstTurn) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_STOCKPILE: if (gDisableStructs[battlerAtk].stockpileCounter >= 3) - score -= 10; - break; - case EFFECT_SPIT_UP: - if (gDisableStructs[battlerAtk].stockpileCounter <= 1) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SWALLOW: if (gDisableStructs[battlerAtk].stockpileCounter == 0) { - score -= 10; + ADJUST_SCORE(-10); } else { if (AtMaxHp(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] >= 80) - score -= 5; // do it if nothing better + ADJUST_SCORE(-5); // do it if nothing better } break; case EFFECT_TORMENT: if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - score -= 10; + ADJUST_SCORE(-10); break; } - #if B_MENTAL_HERB >= GEN_5 - if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_MENTAL_HERB) - score -= 6; - #endif + if (B_MENTAL_HERB >= GEN_5 && aiData->holdEffects[battlerDef] == HOLD_EFFECT_MENTAL_HERB) + ADJUST_SCORE(-6); break; case EFFECT_WILL_O_WISP: if (!AI_CanBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MEMENTO: if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[battlerDef].statStages[STAT_SPATK] == MIN_STAT_STAGE) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FOLLOW_ME: case EFFECT_HELPING_HAND: @@ -1721,70 +1717,70 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) || (aiData->partnerMove != MOVE_NONE && IS_MOVE_STATUS(aiData->partnerMove)) || *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(battlerAtk)) != PARTY_SIZE) //Partner is switching out. - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TRICK: case EFFECT_KNOCK_OFF: if (aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_INGRAIN: if (gStatuses3[battlerAtk] & STATUS3_ROOTED) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_AQUA_RING: if (gStatuses3[battlerAtk] & STATUS3_AQUA_RING) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_RECYCLE: if (GetUsedHeldItem(battlerAtk) == 0 || gBattleMons[battlerAtk].item != 0) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_IMPRISON: if (gStatuses3[battlerAtk] & STATUS3_IMPRISONED_OTHERS) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_REFRESH: if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_FROSTBITE))) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PSYCHO_SHIFT: if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && !AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && !AI_CanBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && !AI_CanGiveFrostbite(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS && !AI_CanParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP && !AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else - score -= 10; // attacker has no status to transmit + ADJUST_SCORE(-10); // attacker has no status to transmit break; case EFFECT_MUD_SPORT: if (gFieldStatuses & STATUS_FIELD_MUDSPORT || gStatuses4[battlerAtk] & STATUS4_MUD_SPORT || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_WATER_SPORT: if (gFieldStatuses & STATUS_FIELD_WATERSPORT || gStatuses4[battlerAtk] & STATUS4_WATER_SPORT || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ABSORB: if (aiData->abilities[battlerDef] == ABILITY_LIQUID_OOZE) - score -= 6; + ADJUST_SCORE(-6); break; case EFFECT_STRENGTH_SAP: if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) - score -= 10; + ADJUST_SCORE(-10); else if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_COPYCAT: case EFFECT_MIRROR_MOVE: @@ -1792,77 +1788,77 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_FLOWER_SHIELD: if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) && !(isDoubleBattle && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS))) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_AROMATIC_MIST: if (!isDoubleBattle || gBattleMons[BATTLE_PARTNER(battlerAtk)].hp == 0 || !BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_BIDE: if (!HasDamagingMove(battlerDef) || aiData->hpPercents[battlerAtk] < 30 //Close to death || gBattleMons[battlerDef].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) //No point in biding if can't take damage - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_HIT_SWITCH_TARGET: if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; // don't scare away pokemon twice + ADJUST_SCORE(-10); // don't scare away pokemon twice else if (aiData->hpPercents[battlerDef] < 10 && GetBattlerSecondaryDamage(battlerDef)) - score -= 10; // don't blow away mon that will faint soon + ADJUST_SCORE(-10); // don't blow away mon that will faint soon else if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CONVERSION: //Check first move type if (IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_REST: if (!AI_CanSleep(battlerAtk, aiData->abilities[battlerAtk])) - score -= 10; + ADJUST_SCORE(-10); //fallthrough case EFFECT_RESTORE_HP: case EFFECT_SOFTBOILED: case EFFECT_ROOST: if (AtMaxHp(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] >= 90) - score -= 9; //No point in healing, but should at least do it if nothing better + ADJUST_SCORE(-9); //No point in healing, but should at least do it if nothing better break; case EFFECT_MORNING_SUN: case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: if ((AI_GetWeather(aiData) & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL))) - score -= 3; + ADJUST_SCORE(-3); else if (AtMaxHp(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] >= 90) - score -= 9; //No point in healing, but should at least do it if nothing better + ADJUST_SCORE(-9); //No point in healing, but should at least do it if nothing better break; case EFFECT_PURIFY: if (!(gBattleMons[battlerDef].status1 & STATUS1_ANY)) - score -= 10; + ADJUST_SCORE(-10); else if (battlerDef == BATTLE_PARTNER(battlerAtk)) break; //Always heal your ally else if (AtMaxHp(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] >= 90) - score -= 8; //No point in healing, but should at least do it if nothing better + ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better break; case EFFECT_SUPER_FANG: if (aiData->hpPercents[battlerDef] < 50) - score -= 4; + ADJUST_SCORE(-4); break; case EFFECT_RECOIL_IF_MISS: - if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_GetMoveAccuracy(battlerAtk, battlerDef, move) < 75) - score -= 6; + if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75) + ADJUST_SCORE(-6); break; case EFFECT_RECOIL_25: if (AI_IsDamagedByRecoil(battlerAtk)) { u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 4); if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) - score -= 10; + ADJUST_SCORE(-10); break; } break; @@ -1872,7 +1868,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 3); if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) - score -= 10; + ADJUST_SCORE(-10); break; } break; @@ -1881,7 +1877,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 2); if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex)) - score -= 10; + ADJUST_SCORE(-10); break; } break; @@ -1895,24 +1891,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || (IsBattlerGrounded(BATTLE_PARTNER(battlerDef)) && AI_IsTerrainAffected(BATTLE_PARTNER(battlerDef), STATUS_FIELD_MISTY_TERRAIN)) || (DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), move)))) { - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_TRANSFORM: if (gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED || (gBattleMons[battlerDef].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))) //Leave out Illusion b/c AI is supposed to be fooled - score -= 10; - break; - case EFFECT_TWO_TURNS_ATTACK: - if (aiData->holdEffects[battlerAtk] != HOLD_EFFECT_POWER_HERB && CanTargetFaintAi(battlerDef, battlerAtk)) - score -= 6; - break; - case EFFECT_RECHARGE: - if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2) - score -= 10; - else if (aiData->abilities[battlerAtk] != ABILITY_TRUANT - && !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) - score -= 2; + ADJUST_SCORE(-10); break; case EFFECT_SPITE: case EFFECT_MIMIC: @@ -1920,12 +1905,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) - score -= 10; + ADJUST_SCORE(-10); } else if (predictedMove == MOVE_NONE) { // TODO predicted move separate from gLastMoves - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_METRONOME: @@ -1933,7 +1918,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ENDEAVOR: case EFFECT_PAIN_SPLIT: if (gBattleMons[battlerAtk].hp > (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CONVERSION_2: @@ -1944,34 +1929,34 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD || aiData->abilities[battlerDef] == ABILITY_NO_GUARD || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_LASER_FOCUS: if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS) - score -= 10; + ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SHELL_ARMOR || aiData->abilities[battlerDef] == ABILITY_BATTLE_ARMOR) - score -= 8; + ADJUST_SCORE(-8); break; case EFFECT_SKETCH: if (gLastMoves[battlerDef] == MOVE_NONE) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_DESTINY_BOND: if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FALSE_SWIPE: // TODO break; case EFFECT_HEAL_BELL: if (!AnyPartyMemberStatused(battlerAtk, gBattleMoves[move].soundMove) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_HIT_PREVENT_ESCAPE: break; case EFFECT_ENDURE: if (gBattleMons[battlerAtk].hp == 1 || GetBattlerSecondaryDamage(battlerAtk)) //Don't use Endure if you'll die after using it - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PROTECT: { @@ -1983,14 +1968,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case MOVE_CRAFTY_SHIELD: if (!isDoubleBattle) { - score -= 10; + ADJUST_SCORE(-10); decreased = TRUE; } break; case MOVE_MAT_BLOCK: if (!gDisableStructs[battlerAtk].isFirstTurn) { - score -= 10; + ADJUST_SCORE(-10); decreased = TRUE; } break; @@ -2000,7 +1985,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])) { - score -= 10; + ADJUST_SCORE(-10); break; } @@ -2012,18 +1997,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && aiData->abilities[battlerDef] != ABILITY_MOXIE && aiData->abilities[battlerDef] != ABILITY_BEAST_BOOST) { - score -= 10; //Don't protect if you're going to faint after protecting + ADJUST_SCORE(-10); //Don't protect if you're going to faint after protecting } else if (gDisableStructs[battlerAtk].protectUses == 1 && Random() % 100 < 50) { if (!isDoubleBattle) - score -= 6; + ADJUST_SCORE(-6); else - score -= 10; //Don't try double protecting in doubles + ADJUST_SCORE(-10); //Don't try double protecting in doubles } else if (gDisableStructs[battlerAtk].protectUses >= 2) { - score -= 10; + ADJUST_SCORE(-10); } } @@ -2040,20 +2025,20 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_MIRACLE_EYE: if (gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) - score -= 10; + ADJUST_SCORE(-10); if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 9; + ADJUST_SCORE(-9); break; case EFFECT_BURN_UP: if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FIRE)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_DOUBLE_SHOCK: if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_ELECTRIC)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_DEFOG: if (gSideStatuses[GetBattlerSide(battlerDef)] @@ -2063,14 +2048,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { - score -= 10; //Only need one hazards removal + ADJUST_SCORE(-10); //Only need one hazards removal break; } } if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY) { - score -= 10; //Don't blow away opposing hazards + ADJUST_SCORE(-10); //Don't blow away opposing hazards break; } @@ -2079,7 +2064,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsHazardMoveEffect(gBattleMoves[aiData->partnerMove].effect) // partner is going to set up hazards && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog { - score -= 10; + ADJUST_SCORE(-10); break; // Don't use Defog if partner is going to set up hazards } } @@ -2087,7 +2072,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // evasion check if (gBattleMons[battlerDef].statStages[STAT_EVASION] == MIN_STAT_STAGE || ((aiData->abilities[battlerDef] == ABILITY_CONTRARY) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PSYCH_UP: // haze stats check @@ -2095,110 +2080,103 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE) - score -= 10; // Don't want to reset our boosted stats + ADJUST_SCORE(-10); // Don't want to reset our boosted stats } for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE) - score -= 10; //Don't want to copy enemy lowered stats + ADJUST_SCORE(-10); //Don't want to copy enemy lowered stats } } break; case EFFECT_SPECTRAL_THIEF: break; - case EFFECT_SOLAR_BEAM: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB - || ((AI_GetWeather(aiData) & B_WEATHER_SUN) && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) - break; - if (CanTargetFaintAi(battlerDef, battlerAtk)) //Attacker can be knocked out - score -= 4; - break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER && gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE) - score -= 10; // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you + ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you if (BattlerWillFaintFromWeather(battlerAtk, aiData->abilities[battlerAtk]) && (move == MOVE_FLY || move == MOVE_BOUNCE)) - score -= 10; // Attacker will faint while in the air + ADJUST_SCORE(-10); // Attacker will faint while in the air break; case EFFECT_HEALING_WISH: //healing wish, lunar dance if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (IsPartyFullyHealedExceptBattler(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FINAL_GAMBIT: if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_NATURE_POWER: return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(), score); case EFFECT_TAUNT: if (gDisableStructs[battlerDef].tauntTimer > 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_BESTOW: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_NONE || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item)) // AI knows its own item - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ROLE_PLAY: if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef] || aiData->abilities[battlerDef] == ABILITY_NONE || IsRolePlayBannedAbilityAtk(aiData->abilities[battlerAtk]) || IsRolePlayBannedAbility(aiData->abilities[battlerDef])) - score -= 10; + ADJUST_SCORE(-10); else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5)) - score -= 4; + ADJUST_SCORE(-4); break; case EFFECT_WISH: if (gWishFutureKnock.wishCounter[battlerAtk] != 0) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ASSIST: if (CountUsablePartyMons(battlerAtk) == 0) - score -= 10; // no teammates to assist from + ADJUST_SCORE(-10); // no teammates to assist from break; case EFFECT_MAGIC_COAT: if (!HasMagicCoatAffectedMove(battlerDef)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_BELCH: if (ItemId_GetPocket(GetUsedHeldItem(battlerAtk)) != POCKET_BERRIES) - score -= 10; // attacker has not consumed a berry + ADJUST_SCORE(-10); // attacker has not consumed a berry break; case EFFECT_YAWN: if (gStatuses3[battlerDef] & STATUS3_YAWN) - score -= 10; + ADJUST_SCORE(-10); else if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SKILL_SWAP: if (aiData->abilities[battlerAtk] == ABILITY_NONE || aiData->abilities[battlerDef] == ABILITY_NONE || IsSkillSwapBannedAbility(aiData->abilities[battlerAtk]) || IsSkillSwapBannedAbility(aiData->abilities[battlerDef]) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_WORRY_SEED: if (aiData->abilities[battlerDef] == ABILITY_INSOMNIA || IsWorrySeedBannedAbility(aiData->abilities[battlerDef]) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_GASTRO_ACID: if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID || IsGastroAcidBannedAbility(aiData->abilities[battlerDef])) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ENTRAINMENT: if (aiData->abilities[battlerAtk] == ABILITY_NONE || IsEntrainmentBannedAbilityAttacker(aiData->abilities[battlerAtk]) || IsEntrainmentTargetOrSimpleBeamBannedAbility(aiData->abilities[battlerDef]) || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CORE_ENFORCER: break; @@ -2206,50 +2184,50 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (aiData->abilities[battlerDef] == ABILITY_SIMPLE || IsEntrainmentTargetOrSimpleBeamBannedAbility(aiData->abilities[battlerDef]) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SNATCH: if (!HasSnatchAffectedMove(battlerDef) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_POWER_TRICK: if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].defense >= gBattleMons[battlerAtk].attack && !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_POWER_SWAP: // Don't use if attacker's stat stages are higher than opponents if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= gBattleMons[battlerDef].statStages[STAT_ATK] && gBattleMons[battlerAtk].statStages[STAT_SPATK] >= gBattleMons[battlerDef].statStages[STAT_SPATK]) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_GUARD_SWAP: // Don't use if attacker's stat stages are higher than opponents if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].statStages[STAT_DEF] >= gBattleMons[battlerDef].statStages[STAT_DEF] && gBattleMons[battlerAtk].statStages[STAT_SPDEF] >= gBattleMons[battlerDef].statStages[STAT_SPDEF]) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SPEED_SWAP: if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { - score -= 10; + ADJUST_SCORE(-10); } else { if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && (gBattleMons[battlerAtk].speed <= gBattleMons[battlerDef].speed)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].speed >= gBattleMons[battlerDef].speed) - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_HEART_SWAP: if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { - score -= 10; + ADJUST_SCORE(-10); } else { @@ -2259,14 +2237,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 defNegativeStages = CountNegativeStatStages(battlerDef); if (atkPositiveStages >= defPositiveStages && atkNegativeStages <= defNegativeStages) - score -= 10; + ADJUST_SCORE(-10); break; } break; case EFFECT_POWER_SPLIT: if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { - score -= 10; + ADJUST_SCORE(-10); } else { @@ -2276,14 +2254,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 defSpAttack = gBattleMons[battlerDef].spAttack; if (atkAttack + atkSpAttack >= defAttack + defSpAttack) // Combined attacker stats are > than combined target stats - score -= 10; + ADJUST_SCORE(-10); break; } break; case EFFECT_GUARD_SPLIT: if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { - score -= 10; + ADJUST_SCORE(-10); } else { @@ -2293,7 +2271,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 defSpDefense = gBattleMons[battlerDef].spDefense; if (atkDefense + atkSpDefense >= defDefense + defSpDefense) //Combined attacker stats are > than combined target stats - score -= 10; + ADJUST_SCORE(-10); break; } break; @@ -2301,36 +2279,36 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (predictedMove != MOVE_NONE) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) - score -= 10; // Target is predicted to go first, Me First will fail + ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail else return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); } else { - score -= 10; //Target is predicted to switch most likely + ADJUST_SCORE(-10); //Target is predicted to switch most likely } break; case EFFECT_NATURAL_GIFT: if (aiData->abilities[battlerAtk] == ABILITY_KLUTZ || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_GRASSY_TERRAIN: if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ELECTRIC_TERRAIN: if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PSYCHIC_TERRAIN: if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MISTY_TERRAIN: if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_PLEDGE: if (isDoubleBattle && gBattleMons[BATTLE_PARTNER(battlerAtk)].hp > 0) @@ -2341,50 +2319,50 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) // && gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 != 1) // Will wake up this turn - how would AI know - score -= 10; // Don't use combo move if your partner will cause failure + ADJUST_SCORE(-10); // Don't use combo move if your partner will cause failure } } break; case EFFECT_TRICK_ROOM: if (PartnerMoveIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, MOVE_TRICK_ROOM)) { - score -= 10; + ADJUST_SCORE(-10); } else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room Up { if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) // Attacker side slower than target side - score -= 10; // Keep the Trick Room up + ADJUST_SCORE(-10); // Keep the Trick Room up } else { if (GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) // Attacker side faster than target side - score -= 10; // Keep the Trick Room down + ADJUST_SCORE(-10); // Keep the Trick Room down } break; case EFFECT_MAGIC_ROOM: if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_WONDER_ROOM: if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_GRAVITY: if ((gFieldStatuses & STATUS_FIELD_GRAVITY && !IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FLYING) && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_AIR_BALLOON) // Should revert Gravity in this case || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ION_DELUGE: if (gFieldStatuses & STATUS_FIELD_ION_DELUGE || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_FLING: if (!CanFling(battlerAtk)) { - score -= 10; + ADJUST_SCORE(-10); } else { @@ -2394,24 +2372,24 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { case MOVE_EFFECT_BURN: if (!AI_CanBurn(battlerAtk, battlerDef, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case MOVE_EFFECT_PARALYSIS: if (!AI_CanParalyze(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case MOVE_EFFECT_POISON: if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case MOVE_EFFECT_TOXIC: if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case MOVE_EFFECT_FREEZE: if (!CanBeFrozen(battlerDef, TRUE) || MoveBlockedBySubstitute(move, battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); break; }*/ } @@ -2421,12 +2399,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || gDisableStructs[battlerDef].embargoTimer != 0 || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_POWDER: if (!HasMoveWithType(battlerDef, TYPE_FIRE) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TELEKINESIS: if (gStatuses3[battlerDef] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) @@ -2434,39 +2412,39 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_THROAT_CHOP: break; case EFFECT_HEAL_BLOCK: if (gDisableStructs[battlerDef].healBlockTimer != 0 || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SOAK: if (PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) - || (gBattleMons[battlerDef].type1 == TYPE_WATER - && gBattleMons[battlerDef].type2 == TYPE_WATER - && gBattleMons[battlerDef].type3 == TYPE_MYSTERY)) - score -= 10; // target is already water-only + || (GetBattlerType(battlerDef, 0) == TYPE_WATER + && GetBattlerType(battlerDef, 1) == TYPE_WATER + && GetBattlerType(battlerDef, 2) == TYPE_MYSTERY)) + ADJUST_SCORE(-10); // target is already water-only break; case EFFECT_THIRD_TYPE: switch (move) { case MOVE_TRICK_OR_TREAT: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case MOVE_FORESTS_CURSE: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; } break; case EFFECT_HEAL_PULSE: // and floral healing if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) // Don't heal enemies { - score -= 10; + ADJUST_SCORE(-10); break; } // fallthrough @@ -2476,16 +2454,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) return 0; if (AtMaxHp(battlerDef)) - score -= 10; + ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2) - score -= 5; + ADJUST_SCORE(-5); } break; case EFFECT_ELECTRIFY: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TOPSY_TURVY: if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) @@ -2495,18 +2473,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (targetPositiveStages == 0 //No good stat changes to make bad || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); else if (targetNegativeStages < targetPositiveStages) - score -= 5; //More stages would be made positive than negative + ADJUST_SCORE(-5); //More stages would be made positive than negative } break; case EFFECT_FAIRY_LOCK: if ((gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_DO_NOTHING: - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_INSTRUCT: { @@ -2518,19 +2496,19 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (instructedMove == MOVE_NONE || gBattleMoves[instructedMove].instructBanned - || MoveRequiresRecharging(instructedMove) - || MoveCallsOtherMove(instructedMove) + || gBattleMoves[instructedMove].twoTurnMove + || gBattleMoves[instructedMove].effect == EFFECT_RECHARGE || IsZMove(instructedMove) || (gLockedMoves[battlerDef] != 0 && gLockedMoves[battlerDef] != 0xFFFF) || gBattleMons[battlerDef].status2 & STATUS2_MULTIPLETURNS || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - score -= 10; + ADJUST_SCORE(-10); } else if (isDoubleBattle) { if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - score -= 10; + ADJUST_SCORE(-10); } else { @@ -2541,9 +2519,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD) && instructedMove != MOVE_MIND_BLOWN && instructedMove != MOVE_STEEL_BEAM) - score -= 10; //Don't force the enemy to attack you again unless it can kill itself with Mind Blown + ADJUST_SCORE(-10); //Don't force the enemy to attack you again unless it can kill itself with Mind Blown else if (instructedMove != MOVE_MIND_BLOWN) - score -= 5; //Do something better + ADJUST_SCORE(-5); //Do something better } } break; @@ -2551,32 +2529,32 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!isDoubleBattle || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_AFTER_YOU: if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef) || !isDoubleBattle || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SUCKER_PUNCH: if (predictedMove != MOVE_NONE) { if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_TAILWIND: if (gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer != 0 || PartnerMoveIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, MOVE_TAILWIND) || (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1)) // Trick Room active and not ending this turn - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_LUCKY_CHANT: if (gSideTimers[GetBattlerSide(battlerAtk)].luckyChantTimer != 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_MAGNET_RISE: if (gFieldStatuses & STATUS_FIELD_GRAVITY @@ -2584,40 +2562,40 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_IRON_BALL || gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_MAGNET_RISE | STATUS3_SMACKED_DOWN) || !IsBattlerGrounded(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CAMOUFLAGE: if (!CanCamouflage(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_LAST_RESORT: if (!CanUseLastResort(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_SYNCHRONOISE: //Check holding ring target or is of same type if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_RING_TARGET - || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type1) - || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type2) - || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type3)) + || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 0)) + || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 1)) + || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 2))) break; else - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_ERUPTION: if (effectiveness <= AI_EFFECTIVENESS_x0_5) - score--; + ADJUST_SCORE(-1); if (aiData->hpPercents[battlerDef] < 50) - score--; + ADJUST_SCORE(-1); break; case EFFECT_VITAL_THROW: if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) - score--; // don't want to move last + ADJUST_SCORE(-1); // don't want to move last break; case EFFECT_FLAIL: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first || aiData->hpPercents[battlerAtk] > 50) - score -= 4; + ADJUST_SCORE(-4); break; //TODO //case EFFECT_PLASMA_FISTS: @@ -2628,39 +2606,39 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) //break; case EFFECT_SKY_DROP: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING)) - score -= 10; + ADJUST_SCORE(-10); if (BattlerWillFaintFromWeather(battlerAtk, aiData->abilities[battlerAtk]) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || GetBattlerWeight(battlerDef) >= 2000) //200.0 kg - score -= 10; + ADJUST_SCORE(-10); break; /*case EFFECT_NO_RETREAT: if (TrappedByNoRetreat(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_EXTREME_EVOBOOST: if (MainStatsMaxed(battlerAtk)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_CLANGOROUS_SOUL: if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) - score -= 10; + ADJUST_SCORE(-10); break;*/ case EFFECT_REVIVAL_BLESSING: if (GetFirstFaintedPartyIndex(battlerAtk) == PARTY_SIZE) - score -= 10; + ADJUST_SCORE(-10); else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) - score -= 10; + ADJUST_SCORE(-10); else if (CanTargetFaintAi(battlerDef, battlerAtk) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_JUNGLE_HEALING: if (AtMaxHp(battlerAtk) && AtMaxHp(BATTLE_PARTNER(battlerAtk)) && !(gBattleMons[battlerAtk].status1 & STATUS1_ANY) && !(gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY)) - score -= 10; + ADJUST_SCORE(-10); break; case EFFECT_TAKE_HEART: if ((!(gBattleMons[battlerAtk].status1 & STATUS1_ANY) @@ -2669,7 +2647,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || PartnerMoveIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, MOVE_AROMATHERAPY)) && !BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK) && !BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score -= 10; + ADJUST_SCORE(-10); + break; + case EFFECT_LOW_KICK: + if (IsDynamaxed(battlerDef)) + ADJUST_SCORE(-10); break; case EFFECT_PLACEHOLDER: return 0; // cannot even select @@ -2684,56 +2666,25 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 movesetIndex = AI_THINKING_STRUCT->movesetIndex; - bool32 aiFaster; if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; if (gBattleMoves[move].power == 0) - return score; // can't make anything faint with no power + return score; // can't make anything faint with no power - aiFaster = AI_STRIKES_FIRST(battlerAtk, battlerDef, move); if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && gBattleMoves[move].effect != EFFECT_EXPLOSION) { - // this move can faint the target - if (aiFaster || GetMovePriority(battlerAtk, move) > 0) - score += 5; // we go first or we're using priority move + if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + ADJUST_SCORE(5); // Move hits first and can faint the target else - score += 4; + ADJUST_SCORE(4); // Faints target but slower } - else + else if (CanTargetFaintAi(battlerDef, battlerAtk) + && GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER + && GetMovePriority(battlerAtk, move) > 0) { - // this move isn't expected to faint the target - if (gBattleMoves[move].highCritRatio) - score += 2; // crit makes it more likely to make them faint - - if (GetMoveDamageResult(battlerAtk, battlerDef, movesetIndex) == MOVE_POWER_OTHER) - score--; - - switch (AI_DATA->effectiveness[battlerAtk][battlerDef][movesetIndex]) - { - case AI_EFFECTIVENESS_x8: - score += 8; - break; - case AI_EFFECTIVENESS_x4: - score += 4; - break; - case AI_EFFECTIVENESS_x2: - if (AI_RandLessThan(176)) - score += 2; - else - score++; - break; - } - } - - //AI_TryToFaint_CheckIfDanger - if (!aiFaster && CanTargetFaintAi(battlerDef, battlerAtk)) - { // AI_TryToFaint_Danger - if (GetMoveDamageResult(battlerAtk, battlerDef, movesetIndex) != MOVE_POWER_BEST) - score--; - else - score++; + ADJUST_SCORE(2); // If slower and target can kill } return score; @@ -2765,14 +2716,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (gBattleMoves[aiData->partnerMove].effect) { case EFFECT_HELPING_HAND: - if (!IS_MOVE_STATUS(move)) - score += 5; + if (IS_MOVE_STATUS(move)) + ADJUST_SCORE(-7); break; case EFFECT_PERISH_SONG: if (!(gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))) { if (IsTrappingMoveEffect(effect) || predictedMove == MOVE_INGRAIN) - score++; + ADJUST_SCORE(1); } break; case EFFECT_ALWAYS_CRIT: @@ -2783,13 +2734,22 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // discourage raising our attack since it's about to be maxed out if (IsAttackBoostMoveEffect(effect)) - score -= 3; + ADJUST_SCORE(-3); // encourage moves hitting multiple opponents if (!IS_MOVE_STATUS(move) && (moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) - score += 3; + ADJUST_SCORE(3); } } break; + // Don't change weather if ally already decided to do so. + case EFFECT_SUNNY_DAY: + case EFFECT_HAIL: + case EFFECT_SNOWSCAPE: + case EFFECT_RAIN_DANCE: + case EFFECT_SANDSTORM: + if (IsMoveEffectWeather(move)) + ADJUST_SCORE(-10); + break; } } // check partner move effect @@ -2797,12 +2757,12 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_HELPING_HAND: - if (aiData->partnerMove != 0 && !HasDamagingMove(battlerAtkPartner)) - score -= 5; + if (!IsBattlerAlive(battlerAtkPartner) || !HasDamagingMove(battlerAtkPartner)) + ADJUST_SCORE(-5); break; case EFFECT_PERISH_SONG: if (aiData->partnerMove != 0 && HasTrappingMoveEffect(battlerAtkPartner)) - score++; + ADJUST_SCORE(1); break; case EFFECT_MAGNET_RISE: if (IsBattlerGrounded(battlerAtk) @@ -2854,113 +2814,110 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // check specific target if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { - if (GetMoveDamageResult(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == MOVE_POWER_OTHER) + // partner ability checks + if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) { - // partner ability checks - if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + switch (atkPartnerAbility) { - switch (atkPartnerAbility) + case ABILITY_VOLT_ABSORB: + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) { - case ABILITY_VOLT_ABSORB: - if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) - { - RETURN_SCORE_MINUS(10); - } - break; // handled in AI_HPAware - case ABILITY_MOTOR_DRIVE: - if (moveType == TYPE_ELECTRIC && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC - && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_WATER_ABSORB: - case ABILITY_DRY_SKIN: - if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) - { - RETURN_SCORE_MINUS(10); - } - break; // handled in AI_HPAware - case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER - && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_WATER_COMPACTION: - if (moveType == TYPE_WATER && GetMoveDamageResult(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == MOVE_POWER_WEAK) - { - RETURN_SCORE_PLUS(1); // only mon with this ability is weak to water so only make it okay if we do very little damage - } RETURN_SCORE_MINUS(10); - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE - && HasMoveWithType(battlerAtkPartner, TYPE_FIRE) - && !(gBattleResources->flags->flags[battlerAtkPartner] & RESOURCE_FLAG_FLASH_FIRE)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_SAP_SIPPER: - if (moveType == TYPE_GRASS - && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_JUSTIFIED: - if (moveType == TYPE_DARK - && !IS_MOVE_STATUS(move) - && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_RATTLED: - if (!IS_MOVE_STATUS(move) - && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_CONTRARY: - if (IsStatLoweringEffect(effect)) - { - RETURN_SCORE_PLUS(2); - } - break; - case ABILITY_DEFIANT: - if (IsStatLoweringEffect(effect) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) - { - RETURN_SCORE_PLUS(1); - } - break; - case ABILITY_COMPETITIVE: - if (IsStatLoweringEffect(effect) - && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) - { - RETURN_SCORE_PLUS(1); - } - break; } - } // ability checks - } // move power check + break; // handled in AI_HPAware + case ABILITY_MOTOR_DRIVE: + if (moveType == TYPE_ELECTRIC && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC + && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE)) + { + RETURN_SCORE_MINUS(10); + } + break; // handled in AI_HPAware + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER + && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_WATER_COMPACTION: + if (moveType == TYPE_WATER && GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) >= 4) + { + RETURN_SCORE_PLUS(1); // only mon with this ability is weak to water so only make it okay if we do very little damage + } + RETURN_SCORE_MINUS(10); + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE + && HasMoveWithType(battlerAtkPartner, TYPE_FIRE) + && !(gBattleResources->flags->flags[battlerAtkPartner] & RESOURCE_FLAG_FLASH_FIRE)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_SAP_SIPPER: + if (moveType == TYPE_GRASS + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_JUSTIFIED: + if (moveType == TYPE_DARK + && !IS_MOVE_STATUS(move) + && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_RATTLED: + if (!IS_MOVE_STATUS(move) + && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_CONTRARY: + if (IsStatLoweringEffect(effect)) + { + RETURN_SCORE_PLUS(2); + } + break; + case ABILITY_DEFIANT: + if (IsStatLoweringEffect(effect) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + case ABILITY_COMPETITIVE: + if (IsStatLoweringEffect(effect) + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) + { + RETURN_SCORE_PLUS(1); + } + break; + } + } // ability checks // attacker move effects specifically targeting partner if (!partnerProtecting) @@ -3040,9 +2997,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SOAK: if (atkPartnerAbility == ABILITY_WONDER_GUARD - && (gBattleMons[battlerAtkPartner].type1 != TYPE_WATER - || gBattleMons[battlerAtkPartner].type2 != TYPE_WATER - || gBattleMons[battlerAtkPartner].type3 != TYPE_WATER)) + && (GetBattlerType(battlerAtkPartner, 0) != TYPE_WATER + || GetBattlerType(battlerAtkPartner, 1) != TYPE_WATER + || GetBattlerType(battlerAtkPartner, 2) != TYPE_WATER)) { RETURN_SCORE_PLUS(1); } @@ -3082,7 +3039,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // attacker move effects } // check partner protecting - score -= 30; // otherwise, don't target partner + ADJUST_SCORE(-30); // otherwise, don't target partner } else // checking opponent { @@ -3091,9 +3048,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { case EFFECT_SKILL_SWAP: if (aiData->abilities[battlerAtk] == ABILITY_TRUANT) - score += 5; + ADJUST_SCORE(5); else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 0) || IsAbilityOfRating(aiData->abilities[battlerDef], 10)) - score += 2; // we want to transfer our bad ability or take their awesome ability + ADJUST_SCORE(2); // we want to transfer our bad ability or take their awesome ability break; case EFFECT_EARTHQUAKE: case EFFECT_MAGNITUDE: @@ -3101,14 +3058,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || (IsBattlerGrounded(battlerAtkPartner) && AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER && IsUngroundingEffect(gBattleMoves[aiData->partnerMove].effect))) - score += 2; + ADJUST_SCORE(2); else if (IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_FIRE) || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ELECTRIC) || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ROCK)) - score -= 10; // partner will be hit by earthquake and is weak to it + ADJUST_SCORE(-10); // partner will be hit by earthquake and is weak to it else if (IsBattlerAlive(battlerAtkPartner)) - score -= 3; + ADJUST_SCORE(-3); break; } @@ -3149,99 +3106,97 @@ static u32 CompareMoveAccuracies(u32 battlerAtk, u32 battlerDef, u32 moveSlot1, return 2; } -static u32 GetAIMostDamagingMoveId(u32 battlerAtk, u32 battlerDef) -{ - u32 i, id = 0; - u32 mostDmg = 0; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (AI_DATA->simulatedDmg[battlerAtk][battlerDef][i] > mostDmg) - id = i, mostDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]; - } - return id; -} - static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) { u32 i; - u32 noOfHits[MAX_MON_MOVES]; + bool32 multipleBestMoves = FALSE; + s32 viableMoveScores[MAX_MON_MOVES]; + s32 bestViableMoveScore; + s32 noOfHits[MAX_MON_MOVES]; s32 score = 0; + s32 leastHits = 1000; u16 *moves = GetMovesArray(battlerAtk); - bool8 isPowerfulIgnoredEffect[MAX_MON_MOVES]; + bool8 isChargingMoveEffect[MAX_MON_MOVES]; for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && gBattleMoves[moves[i]].power) { noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i); - isPowerfulIgnoredEffect[i] = IsInIgnoredPowerfulMoveEffects(gBattleMoves[moves[i]].effect); + if (noOfHits[i] < leastHits) + { + leastHits = noOfHits[i]; + } + viableMoveScores[i] = AI_SCORE_DEFAULT; + isChargingMoveEffect[i] = IsChargingMove(battlerAtk, gBattleMoves[moves[i]].effect); } else { - noOfHits[i] = 0; - isPowerfulIgnoredEffect[i] = FALSE; + noOfHits[i] = -1; + viableMoveScores[i] = 0; + isChargingMoveEffect[i] = FALSE; } + /* + MgbaPrintf_("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); + */ } - // if multiple moves can 0HKO, then compare the current move with the others - if (noOfHits[currId] == 1) + // Priority list: + // 1. Less no of hits to ko + // 2. Not charging + // 3. More accuracy + // 4. Better effect + + // Current move requires the least hits to KO. Compare with other moves. + if (leastHits == noOfHits[currId]) { for (i = 0; i < MAX_MON_MOVES; i++) { - if (noOfHits[i] != 1 || i == currId) + if (i == currId) continue; - - // prioritize moves without a risky secondary effect such as Overheat, Explosion or Hyper Beam - if (!isPowerfulIgnoredEffect[currId] && isPowerfulIgnoredEffect[i]) - score += 2; - else if (isPowerfulIgnoredEffect[currId] && !isPowerfulIgnoredEffect[i]) - score -= 2; - - if (!isPowerfulIgnoredEffect[currId]) + if (noOfHits[currId] == noOfHits[i]) { - // prioritize moves with higher accuracy + multipleBestMoves = TRUE; + // We need to make sure it's the current move which is objectively better. + if (isChargingMoveEffect[i] && !isChargingMoveEffect[currId]) + viableMoveScores[i] -= 3; + else if (!isChargingMoveEffect[i] && isChargingMoveEffect[currId]) + viableMoveScores[currId] -= 3; + switch (CompareMoveAccuracies(battlerAtk, battlerDef, currId, i)) { case 0: - score++; + viableMoveScores[i] -= 2; break; case 1: - score--; + viableMoveScores[currId] -= 2; break; } - - // prioritize moves without recoil - if (AI_IsDamagedByRecoil(battlerAtk)) + switch (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef, noOfHits[currId])) { - if (!IS_MOVE_RECOIL(moves[currId]) && IS_MOVE_RECOIL(moves[i])) - score++; - else if (IS_MOVE_RECOIL(moves[currId]) && !IS_MOVE_RECOIL(moves[i])) - score--; + case 0: + viableMoveScores[i] -= 1; + break; + case 1: + viableMoveScores[currId] -= 1; + break; } } } - } - else - { - // give priority to moves which can ko the target faster - for (i = 0; i < MAX_MON_MOVES; i++) + // Turns out the current move deals the most dmg compared to the other 3. + if (!multipleBestMoves) + ADJUST_SCORE(1); + else { - if (i != currId && noOfHits[i] < 5 && noOfHits[currId] != 1 && noOfHits[i] < noOfHits[currId]) + bestViableMoveScore = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { - if (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef) != 0) - score--; + if (viableMoveScores[i] > bestViableMoveScore) + bestViableMoveScore = viableMoveScores[i]; } - } - - // If 2 moves can KO the target in the same number of turns, - // but one of them always hits and there is a risk the other - // move could miss, prioritize the move with better accuracy. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (i != currId && noOfHits[currId] == noOfHits[i] - && CompareMoveAccuracies(battlerAtk, battlerDef, currId, i)) - score++; + // Unless a better move was found increase score of current move + if (viableMoveScores[currId] == bestViableMoveScore) + ADJUST_SCORE(1); } } @@ -3264,6 +3219,10 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score // We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those. bool32 sereneGraceBoost = (aiData->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100)); + // The AI should understand that while Dynamaxed, status moves function like Protect. + if (IsDynamaxed(battlerAtk) && gBattleMoves[move].split == SPLIT_STATUS) + moveEffect = EFFECT_PROTECT; + // Targeting partner, check benefits of doing that instead if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; @@ -3274,102 +3233,39 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score // check always hits if (!IS_MOVE_STATUS(move) && gBattleMoves[move].accuracy == 0) { - // If 2 moves can KO the target in the same number of turns, but one of them always hits and there is a risk the other move could miss, prioritize the always hits move. - if (gBattleMons[battlerDef].statStages[STAT_EVASION] > 6 || gBattleMons[battlerAtk].statStages[STAT_ACC] < 6) - { - u32 mostDmgMoveId = GetAIMostDamagingMoveId(battlerAtk, battlerDef); - u32 *dmgs = aiData->simulatedDmg[battlerAtk][battlerDef]; - if (GetNoOfHitsToKO(dmgs[mostDmgMoveId], gBattleMons[battlerDef].hp) == GetNoOfHitsToKO(dmgs[movesetIndex], gBattleMons[battlerDef].hp)) - score++; - } if (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 10 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 2) - score++; + ADJUST_SCORE(1); if (AI_RandLessThan(100) && (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 8 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 4)) - score++; + ADJUST_SCORE(1); } - // check high crit - if (gBattleMoves[move].highCritRatio && effectiveness >= AI_EFFECTIVENESS_x2 && AI_RandLessThan(128)) - score++; - // check already dead if (!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && CanTargetFaintAi(battlerAtk, battlerDef) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent should go first { if (atkPriority > 0) - score++; + ADJUST_SCORE(1); else - score--; + ADJUST_SCORE(-1); } - // check damage - if (gBattleMoves[move].power != 0 && GetMoveDamageResult(battlerAtk, battlerDef, movesetIndex) == MOVE_POWER_WEAK) - score--; - // check status move preference if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_PREFER_STATUS_MOVES && IS_MOVE_STATUS(move) && effectiveness != AI_EFFECTIVENESS_x0) - score++; + ADJUST_SCORE(1); // check thawing moves if ((gBattleMons[battlerAtk].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) && gBattleMoves[move].thawsUser) - score += (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? 20 : 10; + ADJUST_SCORE(10); - // check burn - if (gBattleMons[battlerAtk].status1 & STATUS1_BURN) + // check burn / frostbite + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING && AI_DATA->abilities[battlerAtk] == ABILITY_NATURAL_CURE) { - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_GUTS: - break; - case ABILITY_NATURAL_CURE: - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING - && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE)) - score = 90; // Force switch if all your attacking moves are physical and you have Natural Cure. - break; - default: - if (IS_MOVE_PHYSICAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) - score -= 2; - break; - } + if ((gBattleMons[battlerAtk].status1 & STATUS1_BURN && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE)) + || (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && HasOnlyMovesWithSplit(battlerAtk, SPLIT_SPECIAL, TRUE))) + ADJUST_SCORE(-20); // Force switch if all your attacking moves are physical and you have Natural Cure. } - // check frostbite - if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE) - { - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_GUTS: - break; - case ABILITY_NATURAL_CURE: - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING - && HasOnlyMovesWithSplit(battlerAtk, SPLIT_SPECIAL, TRUE)) - score = 90; // Force switch if all your attacking moves are special and you have Natural Cure. - break; - default: - if (IS_MOVE_SPECIAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) - score -= 2; - break; - } - } - - // attacker ability checks - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_MOXIE: - case ABILITY_BEAST_BOOST: - case ABILITY_CHILLING_NEIGH: - case ABILITY_GRIM_NEIGH: - case ABILITY_AS_ONE_ICE_RIDER: - case ABILITY_AS_ONE_SHADOW_RIDER: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first - { - if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0)) - score += 8; // prioritize killing target for stat boost - } - break; - } // ability checks - // move effect checks switch (moveEffect) { @@ -3381,17 +3277,14 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score IncreaseSleepScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_ABSORB: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) - score++; - if (effectiveness <= AI_EFFECTIVENESS_x0_5 && AI_RandLessThan(50)) - score -= 3; - break; + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= AI_EFFECTIVENESS_x1) + ADJUST_SCORE(2); case EFFECT_EXPLOSION: case EFFECT_MEMENTO: if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7) { if (aiData->hpPercents[battlerAtk] < 50 && AI_RandLessThan(128)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_MIRROR_MOVE: @@ -3404,45 +3297,45 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_ATTACK_UP_USER_ALLY: if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_PHYSICAL)) { - score -= 8; + ADJUST_SCORE(-8); break; } else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < 9) { if (aiData->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) { - score += 2; + ADJUST_SCORE(2); break; } } if (!AI_RandLessThan(100)) { - score--; + ADJUST_SCORE(-1); } break; case EFFECT_DEFENSE_UP: case EFFECT_DEFENSE_UP_2: case EFFECT_DEFENSE_UP_3: if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) - score -= 2; + ADJUST_SCORE(-2); if (aiData->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) - score += 2; + ADJUST_SCORE(2); else if (aiData->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200)) break; else if (aiData->hpPercents[battlerAtk] < 40) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_SPEED_UP: case EFFECT_SPEED_UP_2: if (!AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) { if (!AI_RandLessThan(70)) - score += 3; + ADJUST_SCORE(3); } else { - score -= 3; + ADJUST_SCORE(-3); } break; case EFFECT_SPECIAL_ATTACK_UP: @@ -3450,160 +3343,155 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SPECIAL_ATTACK_UP_3: if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_SPECIAL)) { - score -= 8; + ADJUST_SCORE(-8); break; } else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < 9) { if (aiData->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) { - score += 2; + ADJUST_SCORE(2); break; } } if (!AI_RandLessThan(100)) { - score--; + ADJUST_SCORE(-1); } break; case EFFECT_SPECIAL_DEFENSE_UP: case EFFECT_SPECIAL_DEFENSE_UP_2: if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) - score -= 2; + ADJUST_SCORE(-2); if (aiData->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128)) - score += 2; + ADJUST_SCORE(2); else if (aiData->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200)) break; else if (aiData->hpPercents[battlerAtk] < 40) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_ACCURACY_UP: case EFFECT_ACCURACY_UP_2: if (gBattleMons[battlerAtk].statStages[STAT_ACC] >= 9 && !AI_RandLessThan(50)) - score -= 2; + ADJUST_SCORE(-2); else if (aiData->hpPercents[battlerAtk] <= 70) - score -= 2; + ADJUST_SCORE(-2); else - score++; + ADJUST_SCORE(1); break; case EFFECT_EVASION_UP: case EFFECT_EVASION_UP_2: if (aiData->hpPercents[battlerAtk] > 90 && !AI_RandLessThan(100)) - score += 3; + ADJUST_SCORE(3); if (gBattleMons[battlerAtk].statStages[STAT_EVASION] > 9 && AI_RandLessThan(128)) - score--; + ADJUST_SCORE(-1); if ((gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) && aiData->hpPercents[battlerAtk] >= 50 && !AI_RandLessThan(80)) - score += 3; + ADJUST_SCORE(3); if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70)) - score += 3; + ADJUST_SCORE(3); if (gStatuses3[battlerAtk] & STATUS3_ROOTED && AI_RandLessThan(128)) - score += 2; + ADJUST_SCORE(2); if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70)) - score += 3; + ADJUST_SCORE(3); if (aiData->hpPercents[battlerAtk] < 70 || gBattleMons[battlerAtk].statStages[STAT_EVASION] == DEFAULT_STAT_STAGE) break; else if (aiData->hpPercents[battlerAtk] < 40 || aiData->hpPercents[battlerDef] < 40) - score -= 2; + ADJUST_SCORE(-2); else if (!AI_RandLessThan(70)) - score -= 2; + ADJUST_SCORE(-2); break; // stat lowering effects case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: if (!ShouldLowerAttack(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if (gBattleMons[battlerDef].statStages[STAT_ATK] < DEFAULT_STAT_STAGE) - score--; + ADJUST_SCORE(-1); else if (aiData->hpPercents[battlerAtk] <= 90) - score--; + ADJUST_SCORE(-1); if (gBattleMons[battlerDef].statStages[STAT_ATK] > 3 && !AI_RandLessThan(50)) - score -= 2; + ADJUST_SCORE(-2); else if (aiData->hpPercents[battlerDef] < 70) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: if (!ShouldLowerDefense(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if ((aiData->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) || (gBattleMons[battlerDef].statStages[STAT_DEF] <= 3 && !AI_RandLessThan(50))) - score -= 2; + ADJUST_SCORE(-2); if (aiData->hpPercents[battlerDef] <= 70) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) - score -= 3; + ADJUST_SCORE(-3); else if (!AI_RandLessThan(70)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: if (!ShouldLowerSpAtk(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if (gBattleMons[battlerDef].statStages[STAT_SPATK] < DEFAULT_STAT_STAGE) - score--; + ADJUST_SCORE(-1); else if (aiData->hpPercents[battlerAtk] <= 90) - score--; + ADJUST_SCORE(-1); if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 3 && !AI_RandLessThan(50)) - score -= 2; + ADJUST_SCORE(-2); else if (aiData->hpPercents[battlerDef] < 70) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: if (!ShouldLowerSpDef(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if ((aiData->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) || (gBattleMons[battlerDef].statStages[STAT_SPDEF] <= 3 && !AI_RandLessThan(50))) - score -= 2; + ADJUST_SCORE(-2); if (aiData->hpPercents[battlerDef] <= 70) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: if (ShouldLowerAccuracy(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if ((aiData->hpPercents[battlerAtk] < 70 || aiData->hpPercents[battlerDef] < 70) && AI_RandLessThan(100)) - score--; + ADJUST_SCORE(-1); if (gBattleMons[battlerDef].statStages[STAT_ACC] <= 4 && !AI_RandLessThan(80)) - score -= 2; + ADJUST_SCORE(-2); if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY && !AI_RandLessThan(70)) - score += 2; + ADJUST_SCORE(2); if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70)) - score += 2; + ADJUST_SCORE(2); if (gStatuses3[battlerDef] & STATUS3_ROOTED && AI_RandLessThan(128)) - score++; + ADJUST_SCORE(1); if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70)) - score += 2; + ADJUST_SCORE(2); if (aiData->hpPercents[battlerAtk] > 70 || gBattleMons[battlerDef].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) break; else if (aiData->hpPercents[battlerAtk] < 40 || aiData->hpPercents[battlerDef] < 40 || !AI_RandLessThan(70)) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: if (!ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - score -= 2; + ADJUST_SCORE(-2); if ((aiData->hpPercents[battlerAtk] < 70 || gBattleMons[battlerDef].statStages[STAT_EVASION] <= 3) && !AI_RandLessThan(50)) - score -= 2; + ADJUST_SCORE(-2); if (aiData->hpPercents[battlerDef] <= 70) - score -= 2; + ADJUST_SCORE(-2); if (gBattleMons[battlerAtk].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) - score++; + ADJUST_SCORE(1); if (gBattleMons[battlerDef].statStages[STAT_EVASION] < 7 || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_BIDE: if (aiData->hpPercents[battlerAtk] < 90) - score -= 2; + ADJUST_SCORE(-2); break; - case EFFECT_DREAM_EATER: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) - break; - score++; // if target is asleep, dream eater is a pretty good move even without draining - // fallthrough case EFFECT_ACUPRESSURE: break; case EFFECT_ATTACK_ACCURACY_UP: // hone claws @@ -3623,7 +3511,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) - score -= 3; + ADJUST_SCORE(-3); break; // fallthrough case EFFECT_ROAR: @@ -3638,11 +3526,11 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move) && aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && aiData->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET) - score -= 2; + ADJUST_SCORE(-2); break; case EFFECT_CONVERSION: if (!IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type)) - score++; + ADJUST_SCORE(1); break; case EFFECT_FLINCH_HIT: score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); @@ -3671,7 +3559,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score } if (ShouldRecover(battlerAtk, battlerDef, move, healPercent)) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_RESTORE_HP: @@ -3681,9 +3569,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: if (ShouldRecover(battlerAtk, battlerDef, move, 50)) - score += 3; + ADJUST_SCORE(3); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) - score++; + ADJUST_SCORE(1); break; case EFFECT_TOXIC: case EFFECT_POISON: @@ -3696,11 +3584,11 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_AURORA_VEIL: if (ShouldSetScreen(battlerAtk, battlerDef, moveEffect)) { - score += 5; + ADJUST_SCORE(5); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_LIGHT_CLAY) - score += 2; + ADJUST_SCORE(2); if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_REST: @@ -3718,17 +3606,17 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || aiData->abilities[battlerAtk] == ABILITY_EARLY_BIRD || (AI_GetWeather(aiData) & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && aiData->abilities[battlerAtk] == ABILITY_HYDRATION && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) { - score += 2; + ADJUST_SCORE(2); } else { - score++; + ADJUST_SCORE(1); } } break; case EFFECT_OHKO: if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS) - score += 5; + ADJUST_SCORE(5); break; case EFFECT_TRAP: if (HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN)) @@ -3738,11 +3626,11 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (IsBattlerTrapped(battlerDef, TRUE)) break; // in this case its a bad attacking move else if (ShouldTrap(battlerAtk, battlerDef, move)) - score += 5; + ADJUST_SCORE(5); break; case EFFECT_MIST: if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_FOCUS_ENERGY: case EFFECT_LASER_FOCUS: @@ -3750,22 +3638,14 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || aiData->abilities[battlerAtk] == ABILITY_SNIPER || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_SCOPE_LENS || HasHighCritRatioMove(battlerAtk)) - score += 2; + ADJUST_SCORE(2); break; - case EFFECT_CONFUSE_HIT: - if (sereneGraceBoost) - score++; - //fallthrough case EFFECT_CONFUSE: IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_PARALYZE: IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; - case EFFECT_GRAV_APPLE: - if (gFieldStatuses & STATUS_FIELD_GRAVITY) - score += 2; - // fall through case EFFECT_ATTACK_DOWN_HIT: case EFFECT_DEFENSE_DOWN_HIT: case EFFECT_SPECIAL_ATTACK_DOWN_HIT: @@ -3773,26 +3653,22 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_ACCURACY_DOWN_HIT: case EFFECT_EVASION_DOWN_HIT: if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_SPEED_DOWN_HIT: - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) - score -= 2; - else if (!AI_RandLessThan(70)) - score++; if (ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef])) { if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY) - score += 5; + ADJUST_SCORE(5); else - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_SUBSTITUTE: if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) - score += 3; + ADJUST_SCORE(3); if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_SLEEP) || HasMoveEffect(battlerDef, EFFECT_TOXIC) || HasMoveEffect(battlerDef, EFFECT_POISON) @@ -3800,9 +3676,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) || HasMoveEffect(battlerDef, EFFECT_CONFUSE) || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) - score += 2; + ADJUST_SCORE(2); if (!gBattleMons[battlerDef].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION && aiData->hpPercents[battlerAtk] > 70)) - score++; + ADJUST_SCORE(1); break; case EFFECT_MIMIC: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) @@ -3818,9 +3694,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || aiData->abilities[battlerDef] == ABILITY_LIQUID_OOZE || aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD) break; - score += 3; + ADJUST_SCORE(3); if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_DO_NOTHING: //todo - check z splash, z celebrate, z happy hour (lol) @@ -3836,12 +3712,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score switch (ShouldPivot(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, movesetIndex)) { case 0: // no - score -= 10; // technically should go in CheckBadMove, but this is easier/less computationally demanding + ADJUST_SCORE(-10); // technically should go in CheckBadMove, but this is easier/less computationally demanding break; case 1: // maybe break; case 2: // yes - score += 7; + ADJUST_SCORE(7); break; } } @@ -3851,21 +3727,18 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; // Can't switch //if (switchAbility == ABILITY_INTIMIDATE && PartyHasMoveSplit(battlerDef, SPLIT_PHYSICAL)) - //score += 7; + //ADJUST_SCORE(7); } break; case EFFECT_BATON_PASS: if (ShouldSwitch(battlerAtk) && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) || AnyStatIsRaised(battlerAtk))) - score += 5; + ADJUST_SCORE(5); break; case EFFECT_DISABLE: if (gDisableStructs[battlerDef].disableTimer == 0 - #if B_MENTAL_HERB >= GEN_5 - && aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB // mental herb - #endif - ) + && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // AI goes first { @@ -3873,26 +3746,23 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && gLastMoves[battlerDef] != 0xFFFF) { if (gLastMoves[battlerDef] == predictedMove) - score += 3; + ADJUST_SCORE(3); else if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) - score += 2; //Disable move that can kill attacker + ADJUST_SCORE(2); //Disable move that can kill attacker } } else if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove)) { - score++; // Disable annoying status moves + ADJUST_SCORE(1); // Disable annoying status moves } } break; case EFFECT_ENCORE: if (gDisableStructs[battlerDef].encoreTimer == 0 - #if B_MENTAL_HERB >= GEN_5 - && aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB // mental herb - #endif - ) + && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) { if (IsEncoreEncouragedEffect(gBattleMoves[gLastMoves[battlerDef]].effect)) - score += 3; + ADJUST_SCORE(3); } break; case EFFECT_PAIN_SPLIT: @@ -3900,31 +3770,31 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score u32 newHp = (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2; u32 healthBenchmark = (gBattleMons[battlerAtk].hp * 12) / 10; if (newHp > healthBenchmark && ShouldAbsorb(battlerAtk, battlerDef, move, aiData->simulatedDmg[battlerAtk][battlerDef][movesetIndex])) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_SLEEP_TALK: case EFFECT_SNORE: if (!IsWakeupTurn(battlerAtk) && gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) - score += 10; + ADJUST_SCORE(10); break; case EFFECT_LOCK_ON: if (HasMoveEffect(battlerAtk, EFFECT_OHKO)) - score += 3; + ADJUST_SCORE(3); else if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES && HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) - score += 3; + ADJUST_SCORE(3); else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 85, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) - score += 3; + ADJUST_SCORE(3); else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) - score++; + ADJUST_SCORE(1); break; case EFFECT_SPEED_UP_HIT: if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY && !AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_DESTINY_BOND: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_SPITE: //TODO - predicted move @@ -3932,15 +3802,14 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_WISH: case EFFECT_HEAL_BELL: if (ShouldUseWishAromatherapy(battlerAtk, battlerDef, move)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_THIEF: { bool32 canSteal = FALSE; - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE) canSteal = TRUE; - #endif if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) canSteal = TRUE; @@ -3958,29 +3827,29 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case HOLD_EFFECT_CHOICE_BAND: case HOLD_EFFECT_CHOICE_SCARF: case HOLD_EFFECT_CHOICE_SPECS: - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_TOXIC_ORB: if (ShouldPoisonSelf(battlerAtk, aiData->abilities[battlerAtk])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_FLAME_ORB: if (ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_BLACK_SLUDGE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_IRON_BALL: if (HasMoveEffect(battlerAtk, EFFECT_FLING)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_LAGGING_TAIL: case HOLD_EFFECT_STICKY_BARB: break; default: - score++; + ADJUST_SCORE(1); break; } } @@ -3992,18 +3861,18 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) && AI_IsBattlerAsleepOrComatose(battlerDef)) { - score += 5; + ADJUST_SCORE(5); if (IsBattlerTrapped(battlerDef, TRUE)) - score += 3; + ADJUST_SCORE(3); } break; case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) { if (IsBattlerTrapped(battlerDef, TRUE)) - score += 3; + ADJUST_SCORE(3); else - score++; + ADJUST_SCORE(1); break; } else @@ -4053,7 +3922,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE && !IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])) { - score += 3; + ADJUST_SCORE(3); break; } //fallthrough @@ -4068,12 +3937,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (gBattleMons[battlerAtk].hp > gBattleMons[battlerAtk].maxHP / 4 // Pinch berry couldn't have activated yet && IsPinchBerryItemEffect(aiData->holdEffects[battlerAtk])) { - score += 3; + ADJUST_SCORE(3); } else if (gBattleMons[battlerAtk].hp > 1) // Only spam endure for Flail/Reversal if you're not at Min Health { if (HasMoveEffect(battlerAtk, EFFECT_FLAIL) || HasMoveEffect(battlerAtk, EFFECT_ENDEAVOR)) - score += 3; + ADJUST_SCORE(3); } } break; @@ -4086,7 +3955,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) break; if (gDisableStructs[battlerAtk].isFirstTurn) - score += 2; + ADJUST_SCORE(2); //TODO - track entire opponent party data to determine hazard effectiveness break; case EFFECT_FORESIGHT: @@ -4096,27 +3965,27 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) && (HasMoveWithType(battlerAtk, TYPE_NORMAL) || HasMoveWithType(battlerAtk, TYPE_FIGHTING)))) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_MIRACLE_EYE: if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && (HasMoveWithType(battlerAtk, TYPE_PSYCHIC)))) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_PERISH_SONG: if (IsBattlerTrapped(battlerDef, TRUE)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_SANDSTORM: if (ShouldSetSandstorm(battlerAtk, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerAtk])) { - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_SMOOTH_ROCK) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_HAIL: @@ -4124,15 +3993,15 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) - score += 3; + ADJUST_SCORE(3); - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_SNOWSCAPE: @@ -4140,42 +4009,42 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) - score += 3; + ADJUST_SCORE(3); - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_RAIN_DANCE: if (ShouldSetRain(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) { - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_DAMP_ROCK) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) || HasMoveEffect(battlerDef, EFFECT_SOLAR_BEAM) || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) - score += 2; + ADJUST_SCORE(2); if (HasMoveWithType(battlerDef, TYPE_FIRE) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_SUNNY_DAY: if (ShouldSetSun(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) { - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_HEAT_ROCK) - score++; + ADJUST_SCORE(1); if (HasMoveWithType(battlerDef, TYPE_WATER) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_WATER)) - score++; + ADJUST_SCORE(1); if (HasMoveEffect(battlerDef, EFFECT_THUNDER) || HasMoveEffect(BATTLE_PARTNER(battlerDef), EFFECT_THUNDER)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_ATTACK_UP_HIT: @@ -4192,9 +4061,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0)) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first - score += 9; + ADJUST_SCORE(9); else - score += 3; + ADJUST_SCORE(3); } break; case EFFECT_BELLY_DRUM: @@ -4212,54 +4081,54 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { case STAT_ATK: if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score++; + ADJUST_SCORE(1); break; case STAT_SPATK: if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score++; + ADJUST_SCORE(1); break; case STAT_ACC: case STAT_EVASION: case STAT_SPEED: - score++; + ADJUST_SCORE(1); break; case STAT_DEF: case STAT_SPDEF: if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) - score++; + ADJUST_SCORE(1); break; } } } break; case EFFECT_SEMI_INVULNERABLE: - score++; + ADJUST_SCORE(1); if (predictedMove != MOVE_NONE && !isDoubleBattle) { if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first { if (gBattleMoves[predictedMove].effect == EFFECT_EXPLOSION || gBattleMoves[predictedMove].effect == EFFECT_PROTECT) - score += 3; + ADJUST_SCORE(3); } else if (gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) { - score += 3; + ADJUST_SCORE(3); } } break; case EFFECT_DEFENSE_CURL: if (HasMoveEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)) - score++; + ADJUST_SCORE(1); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); break; case EFFECT_FAKE_OUT: if (move == MOVE_FAKE_OUT) // filter out first impression { if (ShouldFakeOut(battlerAtk, battlerDef, move)) - score += 4; + ADJUST_SCORE(4); else - score -= 10; + ADJUST_SCORE(-10); } break; case EFFECT_STOCKPILE: @@ -4267,43 +4136,35 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; if (HasMoveEffect(battlerAtk, EFFECT_SWALLOW) || HasMoveEffect(battlerAtk, EFFECT_SPIT_UP)) - score += 2; + ADJUST_SCORE(2); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); break; - case EFFECT_SPIT_UP: - if (gDisableStructs[battlerAtk].stockpileCounter >= 2) - score++; - break; - case EFFECT_ROLLOUT: - if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL) - score += 8; - break; case EFFECT_SWAGGER: if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY) || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) - score++; + ADJUST_SCORE(1); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) - score += 2; + ADJUST_SCORE(2); IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_FLATTER: if (HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) - score += 2; + ADJUST_SCORE(2); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) - score += 2; + ADJUST_SCORE(2); IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_FURY_CUTTER: if (!isDoubleBattle && aiData->holdEffects[battlerAtk] == HOLD_EFFECT_METRONOME) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_ATTRACT: if (!isDoubleBattle && BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef]) @@ -4313,22 +4174,22 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (gBattleMons[battlerDef].status1 & STATUS1_ANY || (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) || IsBattlerTrapped(battlerDef, TRUE)) - score += 2; + ADJUST_SCORE(2); else - score++; + ADJUST_SCORE(1); break; case EFFECT_SAFEGUARD: if (!AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk)) - score++; + ADJUST_SCORE(1); //if (CountUsablePartyMons(battlerDef) != 0) - //score += 8; + //ADJUST_SCORE(8); break; case EFFECT_PURSUIT: /*TODO if (IsPredictedToSwitch(battlerDef, battlerAtk)) - score += 3; + ADJUST_SCORE(3); else if (IsPredictedToUsePursuitableMove(battlerDef, battlerAtk) && !MoveWouldHitFirst(move, battlerAtk, battlerDef)) //Pursuit against fast U-Turn - score += 3;*/ + ADJUST_SCORE(3);*/ break; case EFFECT_RAPID_SPIN: IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); // Gen 8 increases speed @@ -4336,7 +4197,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_DEFOG: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) { - score += 3; + ADJUST_SCORE(3); break; } @@ -4345,7 +4206,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case MOVE_DEFOG: if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST)) { - score += 3; + ADJUST_SCORE(3); } else if (!(gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SPIKES)) //Don't blow away hazards if you set them up { @@ -4361,16 +4222,16 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { if (gBattleMons[battlerDef].statStages[STAT_EVASION] > 7 || HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) - score += 2; // encourage lowering evasion if they are evasive or we have a move with low accuracy + ADJUST_SCORE(2); // encourage lowering evasion if they are evasive or we have a move with low accuracy else - score++; + ADJUST_SCORE(1); } } break; case MOVE_RAPID_SPIN: case MOVE_MORTAL_SPIN: if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED) - score += 3; + ADJUST_SCORE(3); break; } break; @@ -4388,58 +4249,57 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { u32 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)]; if (predictedMoveOnPartner != MOVE_NONE && !IS_MOVE_STATUS(predictedMoveOnPartner)) - score += 3; + ADJUST_SCORE(3); } break; case EFFECT_NATURE_POWER: return AI_CheckViability(battlerAtk, battlerDef, GetNaturePowerMove(), score); case EFFECT_CHARGE: if (HasDamagingMoveOfType(battlerAtk, TYPE_ELECTRIC)) - score += 2; - #if B_CHARGE_SPDEF_RAISE >= GEN_5 - IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); - #endif + ADJUST_SCORE(2); + if (B_CHARGE_SPDEF_RAISE >= GEN_5) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); break; case EFFECT_TAUNT: if (IS_MOVE_STATUS(predictedMove)) - score += 3; + ADJUST_SCORE(3); else if (HasMoveWithSplit(battlerDef, SPLIT_STATUS)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_TRICK: case EFFECT_BESTOW: switch (aiData->holdEffects[battlerAtk]) { case HOLD_EFFECT_CHOICE_SCARF: - score += 2; // assume its beneficial + ADJUST_SCORE(2); // assume its beneficial break; case HOLD_EFFECT_CHOICE_BAND: if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_CHOICE_SPECS: if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_TOXIC_ORB: if (!ShouldPoisonSelf(battlerAtk, aiData->abilities[battlerAtk])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_FLAME_ORB: if (!ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk]) && AI_CanBeBurned(battlerAtk, aiData->abilities[battlerDef])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_BLACK_SLUDGE: if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON) && aiData->abilities[battlerDef] != ABILITY_MAGIC_GUARD) - score += 3; + ADJUST_SCORE(3); break; case HOLD_EFFECT_IRON_BALL: if (!HasMoveEffect(battlerDef, EFFECT_FLING) || !IsBattlerGrounded(battlerDef)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_LAGGING_TAIL: case HOLD_EFFECT_STICKY_BARB: - score += 3; + ADJUST_SCORE(3); break; case HOLD_EFFECT_UTILITY_UMBRELLA: if (aiData->abilities[battlerAtk] != ABILITY_SOLAR_POWER && aiData->abilities[battlerAtk] != ABILITY_DRY_SKIN) @@ -4448,12 +4308,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { case ABILITY_SWIFT_SWIM: if (AI_GetWeather(aiData) & B_WEATHER_RAIN) - score += 3; // Slow 'em down + ADJUST_SCORE(3); // Slow 'em down break; case ABILITY_CHLOROPHYLL: case ABILITY_FLOWER_GIFT: if (AI_GetWeather(aiData) & B_WEATHER_SUN) - score += 3; // Slow 'em down + ADJUST_SCORE(3); // Slow 'em down break; } } @@ -4462,7 +4322,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score //if (!IsRaidBattle() && IsDynamaxed(battlerDef) && gNewBS->dynamaxData.timer[battlerDef] > 1 && if (HasDamagingMove(battlerAtk) || (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk)))) - score += 2; // Force 'em out next turn + ADJUST_SCORE(2); // Force 'em out next turn break; default: if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) @@ -4473,25 +4333,25 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case HOLD_EFFECT_TOXIC_ORB: if (ShouldPoisonSelf(battlerAtk, aiData->abilities[battlerAtk])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_FLAME_ORB: if (ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk])) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_BLACK_SLUDGE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON) || aiData->abilities[battlerAtk] == ABILITY_MAGIC_GUARD) - score += 3; + ADJUST_SCORE(3); break; case HOLD_EFFECT_IRON_BALL: if (HasMoveEffect(battlerAtk, EFFECT_FLING)) - score += 2; + ADJUST_SCORE(2); break; case HOLD_EFFECT_LAGGING_TAIL: case HOLD_EFFECT_STICKY_BARB: break; default: - score++; //other hold effects generally universally good + ADJUST_SCORE(1); //other hold effects generally universally good break; } } @@ -4502,49 +4362,49 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && !IsRolePlayBannedAbility(aiData->abilities[battlerDef]) && !IsAbilityOfRating(aiData->abilities[battlerAtk], 5) && IsAbilityOfRating(aiData->abilities[battlerDef], 5)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_INGRAIN: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) - score += 3; + ADJUST_SCORE(3); else - score++; + ADJUST_SCORE(1); break; case EFFECT_SUPERPOWER: case EFFECT_OVERHEAT: case EFFECT_MAKE_IT_RAIN: if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_MAGIC_COAT: if (IS_MOVE_STATUS(predictedMove) && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_RECYCLE: if (GetUsedHeldItem(battlerAtk) != ITEM_NONE) - score++; + ADJUST_SCORE(1); if (IsRecycleEncouragedItem(GetUsedHeldItem(battlerAtk))) - score++; + ADJUST_SCORE(1); if (aiData->abilities[battlerAtk] == ABILITY_RIPEN) { u32 item = GetUsedHeldItem(battlerAtk); u32 toHeal = (ItemId_GetHoldEffectParam(item) == 10) ? 10 : gBattleMons[battlerAtk].maxHP / ItemId_GetHoldEffectParam(item); if (IsStatBoostingBerry(item) && aiData->hpPercents[battlerAtk] > 60) - score++; + ADJUST_SCORE(1); else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0) && ((GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == 0 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) || !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0))) - score++; // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry + ADJUST_SCORE(1); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry } break; case EFFECT_BRICK_BREAK: if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_REFLECT) - score++; + ADJUST_SCORE(1); if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_LIGHTSCREEN) - score++; + ADJUST_SCORE(1); if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_AURORA_VEIL) - score++; + ADJUST_SCORE(1); break; case EFFECT_KNOCK_OFF: if (CanKnockOffItem(battlerDef, aiData->items[battlerDef])) @@ -4553,49 +4413,49 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { case HOLD_EFFECT_IRON_BALL: if (HasMoveEffect(battlerDef, EFFECT_FLING)) - score += 4; + ADJUST_SCORE(4); break; case HOLD_EFFECT_LAGGING_TAIL: case HOLD_EFFECT_STICKY_BARB: break; default: - score += 3; + ADJUST_SCORE(3); break; } } break; case EFFECT_SKILL_SWAP: if (GetAbilityRating(aiData->abilities[battlerDef]) > GetAbilityRating(aiData->abilities[battlerAtk])) - score++; + ADJUST_SCORE(1); break; case EFFECT_WORRY_SEED: case EFFECT_GASTRO_ACID: case EFFECT_SIMPLE_BEAM: if (IsAbilityOfRating(aiData->abilities[battlerDef], 5)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_ENTRAINMENT: if (IsAbilityOfRating(aiData->abilities[battlerDef], 5) || GetAbilityRating(aiData->abilities[battlerAtk]) <= 0) { if (aiData->abilities[battlerDef] != aiData->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID)) - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_IMPRISON: if (predictedMove != MOVE_NONE && HasMove(battlerAtk, predictedMove)) - score += 3; + ADJUST_SCORE(3); else if (gDisableStructs[battlerAtk].isFirstTurn == 0) - score++; + ADJUST_SCORE(1); break; case EFFECT_REFRESH: if (gBattleMons[battlerAtk].status1 & STATUS1_ANY) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_TAKE_HEART: if (gBattleMons[battlerAtk].status1 & STATUS1_ANY || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_PSYCHO_SHIFT: if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY) @@ -4613,25 +4473,25 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case EFFECT_SNATCH: if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].snatchAffected) - score += 3; // Steal move + ADJUST_SCORE(3); // Steal move break; case EFFECT_MUD_SPORT: if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC) && HasMoveWithType(battlerDef, TYPE_ELECTRIC)) - score++; + ADJUST_SCORE(1); break; case EFFECT_WATER_SPORT: if (!HasMoveWithType(battlerAtk, TYPE_FIRE) && (HasMoveWithType(battlerDef, TYPE_FIRE))) - score++; + ADJUST_SCORE(1); break; case EFFECT_TICKLE: if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && aiData->abilities[battlerDef] != ABILITY_CONTRARY && ShouldLowerDefense(battlerAtk, battlerDef, aiData->abilities[battlerDef])) { - score += 2; + ADJUST_SCORE(2); } else if (ShouldLowerAttack(battlerAtk, battlerDef, aiData->abilities[battlerDef])) { - score += 2; + ADJUST_SCORE(2); } break; case EFFECT_COSMIC_POWER: @@ -4648,7 +4508,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case EFFECT_GEOMANCY: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) - score += 3; + ADJUST_SCORE(3); //fallthrough case EFFECT_QUIVER_DANCE: IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); @@ -4662,7 +4522,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case EFFECT_SHELL_SMASH: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS) - score += 1; + ADJUST_SCORE(1); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); @@ -4676,24 +4536,24 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_GUARD_SWAP: if (gBattleMons[battlerDef].statStages[STAT_DEF] > gBattleMons[battlerAtk].statStages[STAT_DEF] && gBattleMons[battlerDef].statStages[STAT_SPDEF] >= gBattleMons[battlerAtk].statStages[STAT_SPDEF]) - score++; + ADJUST_SCORE(1); else if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > gBattleMons[battlerAtk].statStages[STAT_SPDEF] && gBattleMons[battlerDef].statStages[STAT_DEF] >= gBattleMons[battlerAtk].statStages[STAT_DEF]) - score++; + ADJUST_SCORE(1); break; case EFFECT_POWER_SWAP: if (gBattleMons[battlerDef].statStages[STAT_ATK] > gBattleMons[battlerAtk].statStages[STAT_ATK] && gBattleMons[battlerDef].statStages[STAT_SPATK] >= gBattleMons[battlerAtk].statStages[STAT_SPATK]) - score++; + ADJUST_SCORE(1); else if (gBattleMons[battlerDef].statStages[STAT_SPATK] > gBattleMons[battlerAtk].statStages[STAT_SPATK] && gBattleMons[battlerDef].statStages[STAT_ATK] >= gBattleMons[battlerAtk].statStages[STAT_ATK]) - score++; + ADJUST_SCORE(1); break; case EFFECT_POWER_TRICK: if (!(gStatuses3[battlerAtk] & STATUS3_POWER_TRICK)) { if (gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - score += 2; + ADJUST_SCORE(2); break; } break; @@ -4709,13 +4569,13 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score hasHigherStat = TRUE; } if (hasHigherStat && i == NUM_BATTLE_STATS) - score++; + ADJUST_SCORE(1); } break; case EFFECT_SPEED_SWAP: // TODO this is cheating a bit... if (gBattleMons[battlerDef].speed > gBattleMons[battlerAtk].speed) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_GUARD_SPLIT: { @@ -4725,7 +4585,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if ((newDefense > gBattleMons[battlerAtk].defense && newSpDef >= gBattleMons[battlerAtk].spDefense) || (newSpDef > gBattleMons[battlerAtk].spDefense && newDefense >= gBattleMons[battlerAtk].defense)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_POWER_SPLIT: @@ -4735,69 +4595,66 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if ((newAttack > gBattleMons[battlerAtk].attack && newSpAtk >= gBattleMons[battlerAtk].spAttack) || (newSpAtk > gBattleMons[battlerAtk].spAttack && newAttack >= gBattleMons[battlerAtk].attack)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_BUG_BITE: // And pluck if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) break; else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_INCINERATE: if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) break; else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_SMACK_DOWN: if (!IsBattlerGrounded(battlerDef)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_RELIC_SONG: if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed. { - if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense) - score += 3; // Change to Pirouette if can do more damage + if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_ARIA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense) + ADJUST_SCORE(3); // Change to Pirouette if can do more damage else if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_PIROUETTE && gBattleMons[battlerDef].spDefense < gBattleMons[battlerDef].defense) - score += 3; // Change to Aria if can do more damage + ADJUST_SCORE(3); // Change to Aria if can do more damage } break; case EFFECT_ELECTRIC_TERRAIN: case EFFECT_MISTY_TERRAIN: if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk)) - score += 10; + ADJUST_SCORE(10); //fallthrough case EFFECT_GRASSY_TERRAIN: case EFFECT_PSYCHIC_TERRAIN: - score += 2; + ADJUST_SCORE(2); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_PLEDGE: - if (isDoubleBattle) - { - if (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) - score += 3; // Partner might use pledge move - } + if (isDoubleBattle && HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) + ADJUST_SCORE(3); // Partner might use pledge move break; case EFFECT_TRICK_ROOM: if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) - score += 3; + ADJUST_SCORE(3); else if ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_MAGIC_ROOM: - score++; + ADJUST_SCORE(1); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_NONE && aiData->holdEffects[battlerDef] != HOLD_EFFECT_NONE) - score++; + ADJUST_SCORE(1); if (isDoubleBattle && aiData->holdEffects[BATTLE_PARTNER(battlerAtk)] == HOLD_EFFECT_NONE && aiData->holdEffects[BATTLE_PARTNER(battlerDef)] != HOLD_EFFECT_NONE) - score++; + ADJUST_SCORE(1); break; case EFFECT_WONDER_ROOM: if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) && gBattleMons[battlerAtk].defense < gBattleMons[battlerAtk].spDefense) || (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) && gBattleMons[battlerAtk].spDefense < gBattleMons[battlerAtk].defense)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_GRAVITY: if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) @@ -4805,9 +4662,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (HasSleepMoveWithLowAccuracy(battlerAtk, battlerDef)) // Has Gravity for a move like Hypnosis IncreaseSleepScore(battlerAtk, battlerDef, move, &score); else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) - score += 2; + ADJUST_SCORE(2); else - score++; + ADJUST_SCORE(1); } break; case EFFECT_ION_DELUGE: @@ -4815,7 +4672,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD) && gBattleMoves[predictedMove].type == TYPE_NORMAL) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_FLING: /* TODO @@ -4836,47 +4693,47 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case MOVE_EFFECT_FREEZE: if (AI_CanFreeze(battlerAtk, battlerDef)) - score += 3; + ADJUST_SCORE(3); break; }*/ break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_EMBARGO: if (aiData->holdEffects[battlerDef] != HOLD_EFFECT_NONE) - score++; + ADJUST_SCORE(1); break; case EFFECT_POWDER: if (predictedMove != MOVE_NONE && !IS_MOVE_STATUS(predictedMove) && gBattleMoves[predictedMove].type == TYPE_FIRE) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_TELEKINESIS: if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]) || !IsBattlerGrounded(battlerDef)) - score++; + ADJUST_SCORE(1); break; case EFFECT_THROAT_CHOP: if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].soundMove && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) - score += 3; // Ai goes first and predicts the target will use a sound move + ADJUST_SCORE(3); // Ai goes first and predicts the target will use a sound move else if (HasSoundMove(battlerDef)) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_HEAL_BLOCK: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMoveEffect(gBattleMoves[predictedMove].effect)) - score += 3; // Try to cancel healing move + ADJUST_SCORE(3); // Try to cancel healing move else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS || (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_SOAK: if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || HasMoveEffect(battlerAtk, EFFECT_FREEZE_DRY)) - score += 2; // Get some super effective moves + ADJUST_SCORE(2); // Get some super effective moves break; case EFFECT_THIRD_TYPE: if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD) - score += 2; // Give target more weaknesses + ADJUST_SCORE(2); // Give target more weaknesses break; case EFFECT_ELECTRIFY: if (predictedMove != MOVE_NONE @@ -4884,38 +4741,38 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) { - score += 3; + ADJUST_SCORE(3); } break; case EFFECT_TOPSY_TURVY: if (CountPositiveStatStages(battlerDef) > CountNegativeStatStages(battlerDef)) - score++; + ADJUST_SCORE(1); break; case EFFECT_FAIRY_LOCK: if (!IsBattlerTrapped(battlerDef, TRUE)) { if (ShouldTrap(battlerAtk, battlerDef, move)) - score += 8; + ADJUST_SCORE(8); } break; case EFFECT_QUASH: if (isDoubleBattle && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove) == AI_IS_SLOWER) // Attacker partner wouldn't go before target - score++; + ADJUST_SCORE(1); break; case EFFECT_TAILWIND: if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_LUCKY_CHANT: if (!isDoubleBattle) { - score++; + ADJUST_SCORE(1); } else { if (CountUsablePartyMons(battlerDef) > 0) - score += 8; + ADJUST_SCORE(8); } break; case EFFECT_MAGNET_RISE: @@ -4925,13 +4782,13 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first { if (gBattleMoves[predictedMove].type == TYPE_GROUND) - score += 3; // Cause the enemy's move to fail + ADJUST_SCORE(3); // Cause the enemy's move to fail break; } else // Opponent Goes First { if (HasDamagingMoveOfType(battlerDef, TYPE_GROUND)) - score += 2; + ADJUST_SCORE(2); break; } } @@ -4939,7 +4796,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_CAMOUFLAGE: if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) - score++; + ADJUST_SCORE(1); break; case EFFECT_FLAME_BURST: if (isDoubleBattle) @@ -4948,96 +4805,61 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score && aiData->hpPercents[BATTLE_PARTNER(battlerDef)] < 12 && aiData->abilities[BATTLE_PARTNER(battlerDef)] != ABILITY_MAGIC_GUARD && !IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) - score++; + ADJUST_SCORE(1); } break; case EFFECT_TOXIC_THREAD: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); break; - case EFFECT_SOLAR_BEAM: - if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, movesetIndex) >= 2 - && HasMoveEffect(battlerAtk, EFFECT_SUNNY_DAY) && (AI_GetWeather(aiData) & B_WEATHER_SUN)) // Use Sunny Day to boost damage. - score -= 3; - case EFFECT_TWO_TURNS_ATTACK: - case EFFECT_SKULL_BASH: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) - score += 2; - break; case EFFECT_COUNTER: if (!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE) { if (gDisableStructs[battlerDef].tauntTimer != 0) - score++; // target must use damaging move - if (GetMoveDamageResult(battlerDef, battlerAtk, predictedMoveSlot) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_PHYSICAL) - score += 3; + ADJUST_SCORE(1); // target must use damaging move + if (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2 && GetBattleMoveSplit(predictedMove) == SPLIT_PHYSICAL) + ADJUST_SCORE(3); } break; case EFFECT_MIRROR_COAT: if (!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE) { if (gDisableStructs[battlerDef].tauntTimer != 0) - score++; // target must use damaging move - if (GetMoveDamageResult(battlerDef, battlerAtk, predictedMoveSlot) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_SPECIAL) - score += 3; - } - break; - case EFFECT_FLAIL: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Ai goes first - { - if (aiData->hpPercents[battlerAtk] < 20) - score++; - else if (aiData->hpPercents[battlerAtk] < 8) - score += 2; + ADJUST_SCORE(1); // target must use damaging move + if (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2 && GetBattleMoveSplit(predictedMove) == SPLIT_SPECIAL) + ADJUST_SCORE(3); } break; case EFFECT_SHORE_UP: if ((AI_GetWeather(aiData) & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) - score += 3; + ADJUST_SCORE(3); else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) - score += 2; - break; - case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) - score++; + ADJUST_SCORE(2); break; case EFFECT_FOCUS_PUNCH: if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5) { if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])) - score += 2; + ADJUST_SCORE(2); else if (gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) - score++; + ADJUST_SCORE(1); } break; - case EFFECT_SMELLINGSALT: - if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) - score += 2; - break; - case EFFECT_WAKE_UP_SLAP: - if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - score += 2; - break; - case EFFECT_REVENGE: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - && !(gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) - score += 2; - break; case EFFECT_ENDEAVOR: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent faster { if (aiData->hpPercents[battlerAtk] < 40) - score++; + ADJUST_SCORE(1); } else if (aiData->hpPercents[battlerAtk] < 50) { - score++; + ADJUST_SCORE(1); } break; case EFFECT_REVIVAL_BLESSING: if (GetFirstFaintedPartyIndex(battlerAtk) != PARTY_SIZE) - score += 2; + ADJUST_SCORE(2); break; //case EFFECT_EXTREME_EVOBOOST: // TODO //break; @@ -5052,11 +4874,11 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25) || gBattleMons[battlerAtk].status1 & STATUS1_ANY || gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) - score += 3; + ADJUST_SCORE(3); break; case EFFECT_SALT_CURE: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)) - score += 2; + ADJUST_SCORE(2); break; } // move effect checks @@ -5165,7 +4987,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: case EFFECT_HIT_SET_ENTRY_HAZARD: - score += 2; + ADJUST_SCORE(2); break; default: break; @@ -5181,7 +5003,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; if (gBattleMoves[move].highCritRatio) - score += 2; + ADJUST_SCORE(2); switch (gBattleMoves[move].effect) { @@ -5204,7 +5026,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_REVENGE: case EFFECT_TEETER_DANCE: if (Random() & 1) - score += 2; + ADJUST_SCORE(2); break; default: break; @@ -5219,8 +5041,10 @@ static s32 AI_PreferStrongestMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; - if (GetMoveDamageResult(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == MOVE_POWER_BEST) - score += 2; + if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 1) + ADJUST_SCORE(3); + else if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 2) + ADJUST_SCORE(2); return score; } @@ -5232,7 +5056,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) || CountUsablePartyMons(battlerAtk) == 0 - || GetMoveDamageResult(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) != MOVE_POWER_OTHER + || gBattleMoves[move].power != 0 || !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS) || IsBattlerTrapped(battlerAtk, TRUE)) return score; @@ -5240,11 +5064,11 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor if (IsStatRaisingEffect(gBattleMoves[move].effect)) { if (gBattleResults.battleTurnCounter == 0) - score += 5; + ADJUST_SCORE(5); else if (AI_DATA->hpPercents[battlerAtk] < 60) - score -= 10; + ADJUST_SCORE(-10); else - score++; + ADJUST_SCORE(1); } // other specific checks @@ -5252,17 +5076,17 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor { case EFFECT_INGRAIN: if (!(gStatuses3[battlerAtk] & STATUS3_ROOTED)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_AQUA_RING: if (!(gStatuses3[battlerAtk] & STATUS3_AQUA_RING)) - score += 2; + ADJUST_SCORE(2); break; case EFFECT_PROTECT: if (gLastMoves[battlerAtk] == MOVE_PROTECT || gLastMoves[battlerAtk] == MOVE_DETECT) - score -= 2; + ADJUST_SCORE(-2); else - score += 2; + ADJUST_SCORE(2); break; case EFFECT_BATON_PASS: for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) @@ -5270,9 +5094,9 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor IncreaseStatUpScore(battlerAtk, battlerDef, i, &score); } if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING)) - score += 2; + ADJUST_SCORE(2); if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) - score -= 3; + ADJUST_SCORE(-3); break; default: break; @@ -5300,10 +5124,10 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (CanTargetFaintAi(FOE(battlerAtk), BATTLE_PARTNER(battlerAtk)) || (CanTargetFaintAi(BATTLE_PARTNER(FOE(battlerAtk)), BATTLE_PARTNER(battlerAtk)))) - score--; + ADJUST_SCORE(-1); if (AI_DATA->hpPercents[battlerDef] <= 50) - score++; + ADJUST_SCORE(1); } } else @@ -5328,7 +5152,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ROOST: case EFFECT_MEMENTO: case EFFECT_GRUDGE: - score -= 2; + ADJUST_SCORE(-2); break; default: break; @@ -5338,7 +5162,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // med hp if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect)) - score -= 2; + ADJUST_SCORE(-2); switch (effect) { @@ -5351,7 +5175,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_CONVERSION_2: case EFFECT_SAFEGUARD: case EFFECT_BELLY_DRUM: - score -= 2; + ADJUST_SCORE(-2); break; default: break; @@ -5361,7 +5185,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // low hp if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect)) - score -= 2; + ADJUST_SCORE(-2); // check other discouraged low hp effects switch (effect) @@ -5380,16 +5204,13 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_BELLY_DRUM: case EFFECT_PSYCH_UP: case EFFECT_MIRROR_COAT: - case EFFECT_SOLAR_BEAM: - case EFFECT_TWO_TURNS_ATTACK: - case EFFECT_ERUPTION: case EFFECT_TICKLE: case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: case EFFECT_SNOWSCAPE: case EFFECT_RAIN_DANCE: - score -= 2; + ADJUST_SCORE(-2); break; default: break; @@ -5400,7 +5221,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // consider target HP if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) { - score += 2; + ADJUST_SCORE(2); } else { @@ -5456,7 +5277,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_DRAGON_DANCE: case EFFECT_DEFENSE_UP_3: case EFFECT_SPECIAL_ATTACK_UP_3: - score -= 2; + ADJUST_SCORE(-2); break; default: break; @@ -5466,7 +5287,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // low HP if (IS_MOVE_STATUS(move)) - score -= 2; // don't use status moves if target is at low health + ADJUST_SCORE(-2); // don't use status moves if target is at low health } } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index b2f56326f7..4a35e824c0 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -28,7 +28,12 @@ static bool8 ShouldUseItem(u32 battler); static bool32 AiExpectsToFaintPlayer(u32 battler); static bool32 AI_ShouldHeal(u32 battler, u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount); -static bool32 IsAiPartyMonOHKOBy(u32 battlerAi, u32 battlerAtk, struct Pokemon *aiMon); + +static void InitializeSwitchinCandidate(struct Pokemon *mon) +{ + PokemonToBattleMon(mon, &AI_DATA->switchinCandidate.battleMon); + AI_DATA->switchinCandidate.hypotheticalStatus = FALSE; +} static bool32 IsAceMon(u32 battler, u32 monPartyId) { @@ -58,6 +63,156 @@ void GetAIPartyIndexes(u32 battler, s32 *firstId, s32 *lastId) } } +// Note that as many return statements as possible are INTENTIONALLY put after all of the loops; +// the function can take a max of about 0.06s to run, and this prevents the player from identifying +// whether the mon will switch or not by seeing how long the delay is before they select a move +static bool8 HasBadOdds(u32 battler) + +{ + //Variable initialization + u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness; + s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0; + u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = GetBattlerAbility(battler), opposingBattler, weather = AI_GetWeather(AI_DATA); + bool8 getsOneShot = FALSE, hasStatusMove = FALSE, hasSuperEffectiveMove = FALSE; + u16 typeEffectiveness = UQ_4_12(1.0), aiMoveEffect; //baseline typing damage + + // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer + if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING)) + return FALSE; + + // Won't bother configuring this for double battles + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + return FALSE; + + opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); + opposingBattler = GetBattlerAtPosition(opposingPosition); + + // Gets types of player (opposingBattler) and computer (battler) + atkType1 = gBattleMons[opposingBattler].type1; + atkType2 = gBattleMons[opposingBattler].type2; + defType1 = gBattleMons[battler].type1; + defType2 = gBattleMons[battler].type2; + + // Check AI moves for damage dealt + for (i = 0; i < MAX_MON_MOVES; i++) + { + aiMove = gBattleMons[battler].moves[i]; + aiMoveEffect = gBattleMoves[aiMove].effect; + if (aiMove != MOVE_NONE) + { + // Check if mon has an "important" status move + if (aiMoveEffect == EFFECT_REFLECT || aiMoveEffect == EFFECT_LIGHT_SCREEN + || aiMoveEffect == EFFECT_SPIKES || aiMoveEffect == EFFECT_TOXIC_SPIKES || aiMoveEffect == EFFECT_STEALTH_ROCK || aiMoveEffect == EFFECT_STICKY_WEB || aiMoveEffect == EFFECT_LEECH_SEED + || aiMoveEffect == EFFECT_EXPLOSION + || aiMoveEffect == EFFECT_SLEEP || aiMoveEffect == EFFECT_YAWN || aiMoveEffect == EFFECT_TOXIC || aiMoveEffect == EFFECT_WILL_O_WISP || aiMoveEffect == EFFECT_PARALYZE + || aiMoveEffect == EFFECT_TRICK || aiMoveEffect == EFFECT_TRICK_ROOM || aiMoveEffect== EFFECT_WONDER_ROOM || aiMoveEffect == EFFECT_PSYCHO_SHIFT || aiMoveEffect == EFFECT_FAKE_OUT + ) + { + hasStatusMove = TRUE; + } + + // Only check damage if move has power + if (gBattleMoves[aiMove].power != 0) + { + // Check if mon has a super effective move + if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + hasSuperEffectiveMove = TRUE; + + // Get maximum damage mon can deal + damageDealt = AI_DATA->simulatedDmg[battler][opposingBattler][i]; + if(damageDealt > maxDamageDealt) + { + maxDamageDealt = damageDealt; + aiBestMove = aiMove; + } + + } + } + } + + // Calculate type advantage + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); + if (atkType2 != atkType1) + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); + if (defType2 != defType1) + { + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType2))); + if (atkType2 != atkType1) + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType2))); + } + + // Get max damage mon could take + for (i = 0; i < MAX_MON_MOVES; i++) + { + playerMove = gBattleMons[opposingBattler].moves[i]; + if (playerMove != MOVE_NONE && gBattleMoves[playerMove].power != 0) + { + damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather); + if (damageTaken > maxDamageTaken) + maxDamageTaken = damageTaken; + } + } + + // Check if mon gets one shot + if(maxDamageTaken > gBattleMons[battler].hp) + { + getsOneShot = TRUE; + } + + // Check if current mon can outspeed and KO in spite of bad matchup, and don't switch out if it can + if(damageDealt > gBattleMons[opposingBattler].hp) + { + if (AI_WhoStrikesFirst(battler, opposingBattler, aiBestMove) == AI_IS_FASTER) + return FALSE; + } + + // If we don't have any other viable options, don't switch out + if (AI_DATA->mostSuitableMonId == PARTY_SIZE) + return FALSE; + + // Start assessing whether or not mon has bad odds + // Jump straight to swtiching out in cases where mon gets OHKO'd + if (((getsOneShot && gBattleMons[opposingBattler].speed > gBattleMons[battler].speed) // If the player OHKOs and outspeeds OR OHKOs, doesn't outspeed but isn't 2HKO'd + || (getsOneShot && gBattleMons[opposingBattler].speed <= gBattleMons[battler].speed && maxDamageDealt < gBattleMons[opposingBattler].hp / 2)) + && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator + || (aiAbility == ABILITY_REGENERATOR + && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) + { + // 50% chance to stay in regardless + if (Random() % 2 == 0) + return FALSE; + + // Switch mon out + *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + + // General bad type matchups have more wiggle room + if (typeEffectiveness >= UQ_4_12(2.0)) // If the player has at least a 2x type advantage + { + if (!hasSuperEffectiveMove // If the AI doesn't have a super effective move + && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator + || (aiAbility == ABILITY_REGENERATOR + && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) + { + // Then check if they have an important status move, which is worth using even in a bad matchup + if(hasStatusMove) + return FALSE; + + // 50% chance to stay in regardless + if (Random() % 2 == 0) + return FALSE; + + // Switch mon out + *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } + return FALSE; +} + static bool8 ShouldSwitchIfAllBadMoves(u32 battler) { if (AI_DATA->shouldSwitchMon & gBitTable[battler]) @@ -347,6 +502,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(u32 battler) if (gBattleMons[battler].statStages[STAT_EVASION] > (DEFAULT_STAT_STAGE + 3) && AI_DATA->abilities[opposingBattler] != ABILITY_UNAWARE && AI_DATA->abilities[opposingBattler] != ABILITY_KEEN_EYE + && (B_ILLUMINATE_EFFECT >= GEN_9 && AI_DATA->abilities[opposingBattler] != ABILITY_ILLUMINATE) && !(gBattleMons[battler].status2 & STATUS2_FORESIGHT) && !(gStatuses3[battler] & STATUS3_MIRACLE_EYED)) switchMon = FALSE; @@ -420,7 +576,6 @@ static bool8 ShouldSwitchIfGameStatePrompt(u32 battler) static bool8 ShouldSwitchIfAbilityBenefit(u32 battler) { - s32 monToSwitchId; s32 moduloChance = 4; //25% Chance Default s32 chanceReducer = 1; //No Reduce default. Increase to reduce @@ -437,12 +592,12 @@ static bool8 ShouldSwitchIfAbilityBenefit(u32 battler) moduloChance = 4; //25% //Attempt to cure bad ailment if (gBattleMons[battler].status1 & (STATUS1_SLEEP | STATUS1_FREEZE | STATUS1_TOXIC_POISON) - && GetMostSuitableMonToSwitchInto(battler) != PARTY_SIZE) + && AI_DATA->mostSuitableMonId != PARTY_SIZE) break; //Attempt to cure lesser ailment if ((gBattleMons[battler].status1 & STATUS1_ANY) && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) - && GetMostSuitableMonToSwitchInto(battler) != PARTY_SIZE + && AI_DATA->mostSuitableMonId != PARTY_SIZE && Random() % (moduloChance*chanceReducer) == 0) break; @@ -454,7 +609,7 @@ static bool8 ShouldSwitchIfAbilityBenefit(u32 battler) if (gBattleMons[battler].status1 & STATUS1_ANY) return FALSE; if ((gBattleMons[battler].hp <= ((gBattleMons[battler].maxHP * 2) / 3)) - && GetMostSuitableMonToSwitchInto(battler) != PARTY_SIZE + && AI_DATA->mostSuitableMonId != PARTY_SIZE && Random() % (moduloChance*chanceReducer) == 0) break; @@ -706,6 +861,8 @@ bool32 ShouldSwitch(u32 battler) return TRUE; if (ShouldSwitchIfAbilityBenefit(battler)) return TRUE; + if (HasBadOdds(battler)) + return TRUE; //Removing switch capabilites under specific conditions //These Functions prevent the "FindMonWithFlagsAndSuperEffective" from getting out of hand. @@ -742,7 +899,7 @@ void AI_TrySwitchOrUseItem(u32 battler) { if (*(gBattleStruct->AI_monToSwitchIntoId + battler) == PARTY_SIZE) { - s32 monToSwitchId = GetMostSuitableMonToSwitchInto(battler); + s32 monToSwitchId = AI_DATA->mostSuitableMonId; if (monToSwitchId == PARTY_SIZE) { if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) @@ -802,8 +959,6 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u { if (invalidMons & gBitTable[i]) continue; - if (IsAiPartyMonOHKOBy(battler, opposingBattler, &party[i])) - continue; for (j = 0; j < MAX_MON_MOVES; j++) { @@ -848,9 +1003,6 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u8 defType1 = gSpeciesInfo[species].types[0]; u8 defType2 = gSpeciesInfo[species].types[1]; - if (IsAiPartyMonOHKOBy(battler, opposingBattler, &party[i])) - continue; - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); if (atkType2 != atkType1) typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); @@ -897,6 +1049,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva int i, j; int dmg, bestDmg = 0; int bestMonId = PARTY_SIZE; + u32 aiMove; gMoveResultFlags = 0; // If we couldn't find the best mon in terms of typing, find the one that deals most damage. @@ -904,21 +1057,683 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva { if (gBitTable[i] & invalidMons) continue; - if (IsAiPartyMonOHKOBy(battler, opposingBattler, &party[i])) - continue; - - dmg = AI_CalcPartyMonBestMoveDamage(battler, opposingBattler, &party[i], NULL); - if (bestDmg < dmg) + InitializeSwitchinCandidate(&party[i]); + for (j = 0; j < MAX_MON_MOVES; j++) { - bestDmg = dmg; - bestMonId = i; + aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; + if (aiMove != MOVE_NONE && gBattleMoves[aiMove].power != 0) + { + aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE); + if (bestDmg < dmg) + { + bestDmg = dmg; + bestMonId = i; + } + } } } return bestMonId; } -u8 GetMostSuitableMonToSwitchInto(u32 battler) +static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) +{ + // List that makes mon not grounded + if (type1 == TYPE_FLYING || type2 == TYPE_FLYING || ability == ABILITY_LEVITATE + || (heldItemEffect == HOLD_EFFECT_AIR_BALLOON && ability != ABILITY_KLUTZ)) + { + // List that overrides being off the ground + if ((heldItemEffect == HOLD_EFFECT_IRON_BALL && ability != ABILITY_KLUTZ) || (gFieldStatuses & STATUS_FIELD_GRAVITY) || (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM)) + return TRUE; + else + return FALSE; + } + else + return TRUE; +} + +// Gets hazard damage +static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon) +{ + u8 defType1 = battleMon->type1, defType2 = battleMon->type2, tSpikesLayers; + u16 heldItemEffect = gItems[battleMon->item].holdEffect; + 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); + + // Check ways mon might avoid all hazards + if (ability != ABILITY_MAGIC_GUARD || (heldItemEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && + !((gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) || ability == ABILITY_KLUTZ))) + { + // Stealth Rock + if ((hazardFlags & SIDE_STATUS_STEALTH_ROCK) && heldItemEffect != HOLD_EFFECT_HEAVY_DUTY_BOOTS) + hazardDamage += GetStealthHazardDamageByTypesAndHP(gBattleMoves[MOVE_STEALTH_ROCK].type, defType1, defType2, battleMon->hp); + // Spikes + if ((hazardFlags & SIDE_STATUS_SPIKES) && IsMonGrounded(heldItemEffect, ability, defType1, defType2)) + { + spikesDamage = maxHP / ((5 - gSideTimers[GetBattlerSide(battler)].spikesAmount) * 2); + if (spikesDamage == 0) + spikesDamage = 1; + 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 + && status == 0 + && !(hazardFlags & SIDE_STATUS_SAFEGUARD) + && !(IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL)) + && !(IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + && !(IsAbilityStatusProtected(battler)) + && heldItemEffect != HOLD_EFFECT_CURE_PSN && heldItemEffect != HOLD_EFFECT_CURE_STATUS + && IsMonGrounded(heldItemEffect, ability, defType1, defType2))) + { + tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount; + if (tSpikesLayers == 1) + { + tSpikesDamage = maxHP / 8; + if (tSpikesDamage == 0) + tSpikesDamage = 1; + } + else if (tSpikesLayers >= 2) + { + tSpikesDamage = maxHP / 16; + if (tSpikesDamage == 0) + tSpikesDamage = 1; + } + hazardDamage += tSpikesDamage; + } + } + return hazardDamage; +} + +// Gets damage / healing from weather +static s32 GetSwitchinWeatherImpact(void) +{ + s32 weatherImpact = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; + u16 item = AI_DATA->switchinCandidate.battleMon.item; + + if (WEATHER_HAS_EFFECT) + { + // Damage + if (item != ITEM_SAFETY_GOGGLES) + { + if ((gBattleWeather & B_WEATHER_HAIL) && (AI_DATA->switchinCandidate.battleMon.type1 != TYPE_ICE || AI_DATA->switchinCandidate.battleMon.type2 != TYPE_ICE) + && ability != ABILITY_OVERCOAT && ability != ABILITY_SNOW_CLOAK && ability != ABILITY_ICE_BODY) + { + weatherImpact = maxHP / 16; + if (weatherImpact == 0) + weatherImpact = 1; + } + else if ((gBattleWeather & B_WEATHER_SANDSTORM) && (AI_DATA->switchinCandidate.battleMon.type1 != TYPE_GROUND && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_GROUND + && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_ROCK && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_ROCK + && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_STEEL && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_STEEL + && ability != ABILITY_OVERCOAT && ability != ABILITY_SAND_VEIL && ability != ABILITY_SAND_RUSH && ability != ABILITY_SAND_FORCE)) + { + weatherImpact = maxHP / 16; + if (weatherImpact == 0) + weatherImpact = 1; + } + } + if ((gBattleWeather & B_WEATHER_SUN) && (ability == ABILITY_SOLAR_POWER || ability == ABILITY_DRY_SKIN)) + { + weatherImpact = maxHP / 8; + if (weatherImpact == 0) + weatherImpact = 1; + } + + // Healing + if (gBattleWeather & B_WEATHER_RAIN) + { + if (ability == ABILITY_DRY_SKIN) + { + weatherImpact = maxHP / 8; + if (weatherImpact == 0) + weatherImpact = 1; + } + else if (ability == ABILITY_RAIN_DISH) + { + weatherImpact = maxHP / 16; + if (weatherImpact == 0) + weatherImpact = 1; + } + } + if (((gBattleWeather & B_WEATHER_HAIL) || (gBattleWeather & B_WEATHER_SNOW)) && ability == ABILITY_ICE_BODY) + { + weatherImpact = maxHP / 16; + if (weatherImpact == 0) + weatherImpact =1; + } + } + return weatherImpact; +} + +// Gets one turn of recurring healing +static u32 GetSwitchinRecurringHealing(void) +{ + u32 recurringHealing = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; + u16 item = AI_DATA->switchinCandidate.battleMon.item; + + // Items + if (ability != ABILITY_KLUTZ) + { + if (item == ITEM_BLACK_SLUDGE && (AI_DATA->switchinCandidate.battleMon.type1 == TYPE_POISON || AI_DATA->switchinCandidate.battleMon.type2 == TYPE_POISON)) + { + recurringHealing = maxHP / 16; + if (recurringHealing == 0) + recurringHealing = 1; + } + else if (item == ITEM_LEFTOVERS) + { + recurringHealing = maxHP / 16; + if (recurringHealing == 0) + recurringHealing = 1; + } + } // Intentionally omitting Shell Bell for its inconsistency + + // Abilities + if (ability == ABILITY_POISON_HEAL && (AI_DATA->switchinCandidate.battleMon.status1 & STATUS1_POISON)) + { + recurringHealing = maxHP / 8; + if (recurringHealing == 0) + recurringHealing = 1; + } + return recurringHealing; +} + +// Gets one turn of recurring damage +static u32 GetSwitchinRecurringDamage(void) +{ + u32 passiveDamage = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability; + u16 item = AI_DATA->switchinCandidate.battleMon.item; + + // Items + if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ) + { + if (item == ITEM_BLACK_SLUDGE && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_POISON && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_POISON) + { + passiveDamage = maxHP / 8; + if (passiveDamage == 0) + passiveDamage = 1; + } + else if (item == ITEM_LIFE_ORB && ability != ABILITY_SHEER_FORCE) + { + passiveDamage = maxHP / 10; + if (passiveDamage == 0) + passiveDamage = 1; + } + else if (item == ITEM_STICKY_BARB) + { + passiveDamage = maxHP / 8; + if(passiveDamage == 0) + passiveDamage = 1; + } + } + return passiveDamage; +} + +// Gets one turn of status damage +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 = gItems[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u32 status = AI_DATA->switchinCandidate.battleMon.status1, ability = AI_DATA->switchinCandidate.battleMon.ability, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP; + u32 statusDamage = 0; + + // Status condition damage + if ((status != 0) && AI_DATA->switchinCandidate.battleMon.ability != ABILITY_MAGIC_GUARD) + { + if (status & STATUS1_BURN) + { + #if B_BURN_DAMAGE >= GEN_7 + statusDamage = maxHP / 16; + #else + statusDamage = maxHP / 8; + #endif + if(ability == ABILITY_HEATPROOF) + statusDamage = statusDamage / 2; + if (statusDamage == 0) + statusDamage = 1; + } + else if (status & STATUS1_FROSTBITE) + { + #if B_BURN_DAMAGE >= GEN_7 + statusDamage = maxHP / 16; + #else + statusDamage = maxHP / 8; + #endif + if (statusDamage == 0) + statusDamage = 1; + } + else if ((status & STATUS1_POISON) && ability != ABILITY_POISON_HEAL) + { + statusDamage = maxHP / 8; + if (statusDamage == 0) + statusDamage = 1; + } + else if ((status & STATUS1_TOXIC_POISON) && ability != ABILITY_POISON_HEAL) + { + if ((status & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns + AI_DATA->switchinCandidate.battleMon.status1 += STATUS1_TOXIC_TURN(1); + statusDamage *= AI_DATA->switchinCandidate.battleMon.status1 & STATUS1_TOXIC_COUNTER >> 8; + if (statusDamage == 0) + statusDamage = 1; + } + } + + // Apply hypothetical poisoning from Toxic Spikes, which means the first turn of damage already added in GetSwitchinHazardsDamage + // Do this last to skip one iteration of Poison / Toxic damage, and start counting Toxic damage one turn later. + if (tSpikesLayers != 0 && (defType1 != TYPE_POISON && defType2 != TYPE_POISON + && ability != ABILITY_IMMUNITY && ability != ABILITY_POISON_HEAL + && status == 0 + && !(heldItemEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS + && (((gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) || ability == ABILITY_KLUTZ))) + && heldItemEffect != HOLD_EFFECT_CURE_PSN && heldItemEffect != HOLD_EFFECT_CURE_STATUS + && IsMonGrounded(heldItemEffect, ability, defType1, defType2))) + { + if (tSpikesLayers == 1) + { + AI_DATA->switchinCandidate.battleMon.status1 = STATUS1_POISON; // Assign "hypothetical" status to the switchin candidate so we can get the damage it would take from TSpikes + AI_DATA->switchinCandidate.hypotheticalStatus = TRUE; + } + if (tSpikesLayers == 2) + { + AI_DATA->switchinCandidate.battleMon.status1 = STATUS1_TOXIC_POISON; // Assign "hypothetical" status to the switchin candidate so we can get the damage it would take from TSpikes + AI_DATA->switchinCandidate.battleMon.status1 += STATUS1_TOXIC_TURN(1); + AI_DATA->switchinCandidate.hypotheticalStatus = TRUE; + } + } + return statusDamage; +} + +// Gets number of hits to KO factoring in hazards, healing held items, status, and weather +static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) +{ + u32 startingHP = AI_DATA->switchinCandidate.battleMon.hp - GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon); + s32 weatherImpact = GetSwitchinWeatherImpact(); // Signed to handle both damage and healing in the same value + u32 recurringDamage = GetSwitchinRecurringDamage(); + 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 = gItems[AI_DATA->switchinCandidate.battleMon.item].holdEffect; + u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = gItems[AI_DATA->switchinCandidate.battleMon.item].holdEffectParam; + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 opposingAbility = gBattleMons[opposingBattler].ability; + bool8 usedSingleUseHealingItem = FALSE; + s32 currentHP = startingHP; + + // No damage being dealt + if (damageTaken + statusDamage + recurringDamage == 0) + return startingHP; + + // Mon fainted to hazards + if (startingHP == 0) + return 1; + + // Find hits to KO + while (currentHP > 0) + { + // Remove weather damage when it would run out + if (weatherImpact != 0 && weatherDuration == 0) + weatherImpact = 0; + + // Take attack damage for the turn + currentHP = currentHP - damageTaken; + + // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) + if (currentHP != 0) + currentHP = currentHP + weatherImpact; + + // Check if we're at a single use healing item threshold + if (AI_DATA->switchinCandidate.battleMon.ability != ABILITY_KLUTZ && usedSingleUseHealingItem == FALSE) + { + if (currentHP < maxHP / 2) + { + if (item == ITEM_BERRY_JUICE) + { + singleUseItemHeal = holdEffectParam; + } + else if (opposingAbility != ABILITY_UNNERVE && heldItemEffect == HOLD_EFFECT_RESTORE_HP) + { + // By default, this should only encompass Oran Berry and Sitrus Berry. + singleUseItemHeal = holdEffectParam; + if (singleUseItemHeal == 0) + singleUseItemHeal = 1; + } + } + else if (currentHP < maxHP / CONFUSE_BERRY_HP_FRACTION + && opposingAbility != ABILITY_UNNERVE + && (item == ITEM_AGUAV_BERRY || item == ITEM_FIGY_BERRY || item == ITEM_IAPAPA_BERRY || item == ITEM_MAGO_BERRY || item == ITEM_WIKI_BERRY)) + { + singleUseItemHeal = maxHP / CONFUSE_BERRY_HEAL_FRACTION; + if (singleUseItemHeal == 0) + singleUseItemHeal = 1; + } + + // If we used one, apply it without overcapping our maxHP + if (singleUseItemHeal > 0) + { + if ((currentHP + singleUseItemHeal) > maxHP) + currentHP = maxHP; + else + currentHP = currentHP + singleUseItemHeal; + usedSingleUseHealingItem = TRUE; + } + } + + // Healing from items occurs before status so we can do the rest in one line + if (currentHP != 0) + currentHP = currentHP + recurringHealing - recurringDamage - statusDamage; + + // Recalculate toxic damage if needed + if (AI_DATA->switchinCandidate.battleMon.status1 & STATUS1_TOXIC_POISON) + statusDamage = GetSwitchinStatusDamage(battler); + + // Reduce weather duration + if (weatherDuration != 0) + weatherDuration--; + + hitsToKO++; + } + + // If mon had a hypothetical status from TSpikes, clear it + if (AI_DATA->switchinCandidate.hypotheticalStatus == TRUE) + { + AI_DATA->switchinCandidate.battleMon.status1 = 0; + AI_DATA->switchinCandidate.hypotheticalStatus = FALSE; + } + return hitsToKO; +} + +static u16 GetSwitchinTypeMatchup(u32 opposingBattler, struct BattlePokemon battleMon) +{ + + // Check type matchup + u16 typeEffectiveness = UQ_4_12(1.0); + u8 atkType1 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[0], atkType2 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[1], + defType1 = battleMon.type1, defType2 = battleMon.type2; + + // Multiply type effectiveness by a factor depending on type matchup + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); + if (atkType2 != atkType1) + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); + if (defType2 != defType1) + { + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType2))); + if (atkType2 != atkType1) + typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType2))); + } + return typeEffectiveness; +} + +static int GetRandomSwitchinWithBatonPass(int aliveCount, int bits, int firstId, int lastId, int currentMonId) +{ + // Breakout early if there aren't any Baton Pass mons to save computation time + if (bits == 0) + return PARTY_SIZE; + + // GetBestMonBatonPass randomly chooses between all mons that met Baton Pass check + if ((aliveCount == 2 || (aliveCount > 2 && Random() % 3 == 0)) && bits) + { + do + { + return (Random() % (lastId - firstId)) + firstId; + } while (!(bits & gBitTable[currentMonId])); + } + + // Catch any other cases (such as only one mon alive and it has Baton Pass) + else + return PARTY_SIZE; +} + +static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattler, struct BattlePokemon battleMon) +{ + int i = 0; + u32 playerMove; + s32 damageTaken = 0, maxDamageTaken = 0; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + playerMove = gBattleMons[opposingBattler].moves[i]; + if (playerMove != MOVE_NONE && gBattleMoves[playerMove].power != 0) + { + damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE); + if (damageTaken > maxDamageTaken) + maxDamageTaken = damageTaken; + } + } + return maxDamageTaken; +} + +// This function splits switching behaviour mid-battle from after a KO. +// Mid battle, it integrates GetBestMonTypeMatchup (vanilla with modifications), GetBestMonDefensive (custom), and GetBestMonBatonPass (vanilla with modifications) +// After a KO, integrates GetBestMonRevengeKiller (custom), GetBestMonTypeMatchup (vanilla with modifications), GetBestMonBatonPass (vanilla with modifications), and GetBestMonDmg (vanilla) +// the Type Matchup code will prioritize switching into a mon with the best type matchup and also a super effective move, or just best type matchup if no super effective move is found +// the Most Defensive code will prioritize switching into the mon that takes the most hits to KO, with a minimum of 4 hits required to be considered a valid option +// the Baton Pass code will prioritize switching into a mon with Baton Pass if it can get in, boost, and BP out without being KO'd, and randomizes between multiple valid options +// the Revenge Killer code will prioritize, in order, OHKO and outspeeds / OHKO, slower but not 2HKO'd / 2HKO, outspeeds and not OHKO'd / 2HKO, slower but not 3HKO'd +// 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, bool8 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; + int i, j, aliveCount = 0, bits = 0; + s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed + u32 aiMove, hitsToKO, hitsToKOThreshold, maxHitsToKO = 0; + s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, maxDamageDealt = 0, damageDealt = 0; + u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; + + if (isSwitchAfterKO) + hitsToKOThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free + else + hitsToKOThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free + + // 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; + } + // Save Ace Pokemon for last + else if (IsAceMon(battler, i)) + { + aceMonId = i; + continue; + } + else + aliveCount++; + + InitializeSwitchinCandidate(&party[i]); + + // While not really invalid per say, not really wise to switch into this mon + if (AI_DATA->switchinCandidate.battleMon.ability == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler)) + continue; + + // Get max number of hits for player to KO AI mon + hitsToKO = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); + + // Track max hits to KO and set GetBestMonDefensive if applicable + if(hitsToKO > maxHitsToKO) + { + maxHitsToKO = hitsToKO; + if(maxHitsToKO > defensiveMonHitKOThreshold) + defensiveMonId = i; + } + + typeMatchup = GetSwitchinTypeMatchup(opposingBattler, AI_DATA->switchinCandidate.battleMon); + + // Check that good type matchups gets at least two turns and set GetBestMonTypeMatchup if applicable + if (typeMatchup < bestResist) + { + if ((hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKO > hitsToKOThreshold + 1) // Need to take an extra hit if slower + { + bestResist = typeMatchup; + typeMatchupId = i; + } + } + + aiMonSpeed = AI_DATA->switchinCandidate.battleMon.speed; + + // Check through current mon's moves + for (j = 0; j < MAX_MON_MOVES; j++) + { + aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; + + // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn + if (isSwitchAfterKO && aiMove != MOVE_NONE && gBattleMoves[aiMove].power != 0) + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE); + + // 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 && ((hitsToKO > hitsToKOThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) + bits |= gBitTable[i]; + + // Check for mon with resistance and super effective move for GetBestMonTypeMatchup + if (aiMove != MOVE_NONE && gBattleMoves[aiMove].power != 0) + { + if (typeMatchup < bestResistEffective) + { + if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + { + // Assuming a super effective move would do significant damage or scare the player out, so not being as conservative here + if (hitsToKO > hitsToKOThreshold) + { + bestResistEffective = typeMatchup; + typeMatchupEffectiveId = i; + } + } + } + + // If a self destruction move doesn't OHKO, don't factor it into revenge killing + if (gBattleMoves[aiMove].effect == EFFECT_EXPLOSION && damageDealt < playerMonHP) + continue; + + // Check that mon isn't one shot and set GetBestMonDmg if applicable + if (damageDealt > maxDamageDealt) + { + if(hitsToKO > hitsToKOThreshold) + { + maxDamageDealt = damageDealt; + damageMonId = i; + } + } + + // Check if current mon can revenge kill in some capacity + // If AI mon can one shot + if (damageDealt > playerMonHP) + { + // If AI mon is faster and doesn't die to hazards + if ((aiMonSpeed > playerMonSpeed || gBattleMoves[aiMove].priority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) + { + // We have a revenge killer + revengeKillerId = i; + } + + // If AI mon is slower + else + { + // If AI mon can't be OHKO'd + if (hitsToKO > hitsToKOThreshold) + { + // We have a slow revenge killer + slowRevengeKillerId = i; + } + } + } + + // If AI mon can two shot + if (damageDealt > playerMonHP / 2) + { + // If AI mon is faster + if (aiMonSpeed > playerMonSpeed || gBattleMoves[aiMove].priority > 0) + { + // If AI mon can't be OHKO'd + if (hitsToKO > hitsToKOThreshold) + { + // We have a fast threaten + fastThreatenId = i; + } + } + // If AI mon is slower + else + { + // If AI mon can't be 2HKO'd + if (hitsToKO > hitsToKOThreshold + 1) + { + // We have a slow threaten + slowThreatenId = i; + } + } + } + } + } + } + + batonPassId = GetRandomSwitchinWithBatonPass(aliveCount, bits, firstId, lastId, i); + + // Different switching priorities depending on switching mid battle vs switching after a KO + if (isSwitchAfterKO) + { + // Return GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg + 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 GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass + 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. + else if (aceMonId != PARTY_SIZE + && (gBattleMoves[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gBattleMoves[gLastUsedMove].effect == EFFECT_PARTING_SHOT)) + return aceMonId; + } + return PARTY_SIZE; +} + +u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) { u32 opposingBattler = 0; u32 bestMonId = PARTY_SIZE; @@ -926,8 +1741,6 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler) s32 firstId = 0; s32 lastId = 0; // + 1 struct Pokemon *party; - s32 i, j, aliveCount = 0; - u32 invalidMons = 0, aceMonId = PARTY_SIZE; if (*(gBattleStruct->monToSwitchIntoId + battler) != PARTY_SIZE) return *(gBattleStruct->monToSwitchIntoId + battler); @@ -960,52 +1773,63 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler) else party = gEnemyParty; - // Get invalid slots ids. - for (i = firstId; i < lastId; i++) + // 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 & AI_FLAG_SMART_MON_CHOICES) { - if (!IsValidForBattle(&party[i]) - || gBattlerPartyIndexes[battlerIn1] == i - || 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.) - { - invalidMons |= gBitTable[i]; - } - else if (IsAceMon(battler, i))// Save Ace Pokemon for last. - { - aceMonId = i; - invalidMons |= gBitTable[i]; - } - else - { - aliveCount++; - } + bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchAfterMonKOd); + return bestMonId; } - bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount, battler, opposingBattler); - if (bestMonId != PARTY_SIZE) - return bestMonId; + // This all handled by the GetBestMonIntegrated function if the AI_FLAG_SMART_MON_CHOICES flag is set + else + { + s32 i, aliveCount = 0; + u32 invalidMons = 0, aceMonId = PARTY_SIZE; + // Get invalid slots ids. + for (i = firstId; i < lastId; i++) + { + if (!IsValidForBattle(&party[i]) + || gBattlerPartyIndexes[battlerIn1] == i + || 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.) + { + invalidMons |= gBitTable[i]; + } + else if (IsAceMon(battler, i))// Save Ace Pokemon for last. + { + aceMonId = i; + invalidMons |= gBitTable[i]; + } + else + { + aliveCount++; + } + } + bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount, battler, opposingBattler); + if (bestMonId != PARTY_SIZE) + return bestMonId; - bestMonId = GetBestMonTypeMatchup(party, firstId, lastId, invalidMons, battler, opposingBattler); - if (bestMonId != PARTY_SIZE) - return bestMonId; + bestMonId = GetBestMonTypeMatchup(party, firstId, lastId, invalidMons, battler, opposingBattler); + if (bestMonId != PARTY_SIZE) + return bestMonId; - bestMonId = GetBestMonDmg(party, firstId, lastId, invalidMons, battler, opposingBattler); - if (bestMonId != PARTY_SIZE) - return bestMonId; + bestMonId = GetBestMonDmg(party, firstId, lastId, invalidMons, battler, opposingBattler); + if (bestMonId != PARTY_SIZE) + return bestMonId; - // If ace mon is the last available Pokemon and switch move was used - switch to the mon. - if (aceMonId != PARTY_SIZE) - return aceMonId; + // If ace mon is the last available Pokemon and switch move was used - switch to the mon. + if (aceMonId != PARTY_SIZE) + return aceMonId; - return PARTY_SIZE; + return PARTY_SIZE; + } } static bool32 AiExpectsToFaintPlayer(u32 battler) { - bool32 canFaintPlayer; - u32 i; u8 target = gBattleStruct->aiChosenTarget[battler]; if (gBattleStruct->aiMoveOrAction[battler] > 3) @@ -1059,7 +1883,6 @@ static bool8 ShouldUseItem(u32 battler) { u16 item; const u8 *itemEffects; - u8 paramOffset; u8 battlerSide; item = gBattleResources->battleHistory->trainerItems[i]; @@ -1161,30 +1984,4 @@ static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount) } } return FALSE; -} - -static bool32 IsAiPartyMonOHKOBy(u32 battlerAi, u32 battlerAtk, struct Pokemon *aiMon) -{ - bool32 ret = FALSE; - struct BattlePokemon *savedBattleMons; - s32 hp = GetMonData(aiMon, MON_DATA_HP); - s32 bestDmg = AI_CalcPartyMonBestMoveDamage(battlerAtk, battlerAi, NULL, aiMon); - - switch (GetNoOfHitsToKO(bestDmg, hp)) - { - case 1: - ret = TRUE; - break; - case 2: // if AI mon is faster allow 2 turns - savedBattleMons = AllocSaveBattleMons(); - PokemonToBattleMon(aiMon, &gBattleMons[battlerAi]); - if (AI_WhoStrikesFirst(battlerAi, battlerAtk, 0) == AI_IS_SLOWER) - ret = TRUE; - else - ret = FALSE; - FreeRestoreBattleMons(savedBattleMons); - break; - } - - return ret; -} +} \ No newline at end of file diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 55ff27fbfb..b1cdcd583b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -363,61 +363,6 @@ static const u16 sEncouragedEncoreEffects[] = EFFECT_CAMOUFLAGE, }; -// For the purposes of determining the most powerful move in a moveset, these -// moves are treated the same as having a power of 0 or 1 -#define IGNORED_MOVES_END 0xFFFF -static const u16 sIgnoredPowerfulMoveEffects[] = -{ - EFFECT_EXPLOSION, - EFFECT_DREAM_EATER, - EFFECT_RECHARGE, - EFFECT_SKULL_BASH, - EFFECT_SOLAR_BEAM, - EFFECT_SPIT_UP, - EFFECT_FOCUS_PUNCH, - EFFECT_SUPERPOWER, - EFFECT_ERUPTION, - EFFECT_OVERHEAT, - EFFECT_MIND_BLOWN, - EFFECT_MAKE_IT_RAIN, - IGNORED_MOVES_END -}; - -static const u16 sIgnoreMoldBreakerMoves[] = -{ - MOVE_MOONGEIST_BEAM, - MOVE_SUNSTEEL_STRIKE, - MOVE_PHOTON_GEYSER, - MOVE_LIGHT_THAT_BURNS_THE_SKY, - MOVE_MENACING_MOONRAZE_MAELSTROM, - MOVE_SEARING_SUNRAZE_SMASH, -}; - -static const u16 sRechargeMoves[] = -{ - MOVE_HYPER_BEAM, - MOVE_BLAST_BURN, - MOVE_HYDRO_CANNON, - MOVE_FRENZY_PLANT, - MOVE_GIGA_IMPACT, - MOVE_ROCK_WRECKER, - MOVE_ROAR_OF_TIME, - MOVE_PRISMATIC_LASER, - MOVE_METEOR_ASSAULT, - MOVE_ETERNABEAM, -}; - -static const u16 sOtherMoveCallingMoves[] = -{ - MOVE_ASSIST, - MOVE_COPYCAT, - MOVE_ME_FIRST, - MOVE_METRONOME, - MOVE_MIRROR_MOVE, - MOVE_NATURE_POWER, - MOVE_SLEEP_TALK, -}; - // Functions u32 GetAIChosenMove(u32 battlerId) { @@ -651,10 +596,8 @@ bool32 IsBattlerTrapped(u32 battler, bool32 checkSwitch) { u32 holdEffect = AI_DATA->holdEffects[battler]; -#if B_GHOSTS_ESCAPE >= GEN_6 - if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return FALSE; -#endif if (checkSwitch && holdEffect == HOLD_EFFECT_SHED_SHELL) return FALSE; else if (!checkSwitch && GetBattlerAbility(battler) == ABILITY_RUN_AWAY) @@ -702,9 +645,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect) { if (ability == ABILITY_OVERCOAT - #if B_POWDER_GRASS >= GEN_6 - || IS_BATTLER_OF_TYPE(battler, TYPE_GRASS) - #endif + || (B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES) return FALSE; return TRUE; @@ -741,7 +682,14 @@ s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *type { SaveBattlerData(battlerAtk); SaveBattlerData(battlerDef); - AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA)); + return AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA)); +} + +static inline s32 LowestRollDmg(s32 dmg) +{ + dmg *= 100 - 15; + dmg /= 100; + return dmg; } s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather) @@ -802,11 +750,11 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critChance = GetCritHitChance(critChanceIndex); // With critChance getting closer to 1, dmg gets closer to critDmg. - dmg = (critDmg + normalDmg * (critChance - 1)) / (critChance); + dmg = LowestRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); } else { - dmg = normalDmg; + dmg = LowestRollDmg(normalDmg); } if (!gBattleStruct->zmove.active) @@ -839,8 +787,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes case EFFECT_FINAL_GAMBIT: dmg = gBattleMons[battlerAtk].hp; break; - #if B_BEAT_UP >= GEN_5 case EFFECT_BEAT_UP: + if (B_BEAT_UP >= GEN_5) { u32 partyCount = CalculatePartyCount(GetBattlerParty(battlerAtk)); u32 i; @@ -852,7 +800,6 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes gBattleStruct->beatUpSlot = 0; } break; - #endif } // Handle other multi-strike moves @@ -890,7 +837,7 @@ bool32 AI_IsDamagedByRecoil(u32 battler) } // Decide whether move having an additional effect for . -static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move) +static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s32 noOfHitsToKo) { u32 i; u32 abilityDef = AI_DATA->abilities[battlerDef]; @@ -966,32 +913,32 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move) return TRUE; break; case EFFECT_ATTACK_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK) && abilityDef != ABILITY_HYPER_CUTTER) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK) && abilityDef != ABILITY_HYPER_CUTTER && noOfHitsToKo != 1) return TRUE; break; case EFFECT_DEFENSE_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_DEF)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_DEF) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_SPEED_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPEED)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPEED) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_SPECIAL_ATTACK_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPATK)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPATK) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_SPECIAL_DEFENSE_DOWN_HIT: case EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPDEF)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_SPDEF) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_ACCURACY_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ACC)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_ACC) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_EVASION_DOWN_HIT: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_EVASION)) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_EVASION) && noOfHitsToKo != 1) return TRUE; break; case EFFECT_ALL_STATS_UP_HIT: @@ -1006,8 +953,43 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move) return FALSE; } +static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s32 noOfHitsToKo) +{ + u32 abilityAtk = AI_DATA->abilities[battlerAtk]; + u32 abilityDef = AI_DATA->abilities[battlerDef]; + + switch (gBattleMoves[move].effect) + { + case EFFECT_RECHARGE: + case EFFECT_SUPERPOWER: + case EFFECT_OVERHEAT: + case EFFECT_MAKE_IT_RAIN: + case EFFECT_MIND_BLOWN: + case EFFECT_STEEL_BEAM: + return TRUE; + case EFFECT_RECOIL_25: + case EFFECT_RECOIL_IF_MISS: + case EFFECT_RECOIL_50: + case EFFECT_RECOIL_33: + case EFFECT_RECOIL_33_STATUS: + if (AI_IsDamagedByRecoil(battlerAtk)) + return TRUE; + break; + case EFFECT_SPEED_DOWN_HIT: + case EFFECT_ATTACK_DOWN_HIT: + case EFFECT_DEFENSE_DOWN_HIT: + case EFFECT_SPECIAL_ATTACK_DOWN_HIT: + case EFFECT_SPECIAL_DEFENSE_DOWN_HIT: + case EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2: + if (noOfHitsToKo != 1 && abilityDef == ABILITY_CONTRARY && !IsMoldBreakerTypeAbility(abilityAtk)) + return TRUE; + break; + } + return FALSE; +} + // Checks if one of the moves has side effects or perks, assuming equal dmg or equal no of hits to KO -u32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef) +u32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo) { bool32 effect1, effect2; s32 defAbility = AI_DATA->abilities[battlerDef]; @@ -1022,22 +1004,17 @@ u32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef) if (IS_MOVE_PHYSICAL(move2) && !IS_MOVE_PHYSICAL(move1)) return 0; } - // Check recoil - if (AI_IsDamagedByRecoil(battlerAtk)) - { - if (IS_MOVE_RECOIL(move1) && !IS_MOVE_RECOIL(move2) && gBattleMoves[move2].effect != EFFECT_RECHARGE) - return 1; - if (IS_MOVE_RECOIL(move2) && !IS_MOVE_RECOIL(move1) && gBattleMoves[move1].effect != EFFECT_RECHARGE) - return 0; - } - // Check recharge - if (gBattleMoves[move1].effect == EFFECT_RECHARGE && gBattleMoves[move2].effect != EFFECT_RECHARGE) - return 1; - if (gBattleMoves[move2].effect == EFFECT_RECHARGE && gBattleMoves[move1].effect != EFFECT_RECHARGE) + + // Check additional effects. + effect1 = AI_IsMoveEffectInMinus(battlerAtk, battlerDef, move1, noOfHitsToKo); + effect2 = AI_IsMoveEffectInMinus(battlerAtk, battlerDef, move2, noOfHitsToKo); + if (effect2 && !effect1) return 0; - // Check additional effect. - effect1 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move1); - effect2 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move2); + if (effect1 && !effect2) + return 1; + + effect1 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move1, noOfHitsToKo); + effect2 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move2, noOfHitsToKo); if (effect2 && !effect1) return 1; if (effect1 && !effect2) @@ -1063,107 +1040,6 @@ u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex) return GetNoOfHitsToKOBattlerDmg(AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex], battlerDef); } -bool32 IsInIgnoredPowerfulMoveEffects(u32 effect) -{ - u32 i; - for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++) - { - if (effect == sIgnoredPowerfulMoveEffects[i]) - { - // Don't ingore Solar Beam if doesn't have a charging turn. - if (effect == EFFECT_SOLAR_BEAM && (AI_GetWeather(AI_DATA) & B_WEATHER_SUN)) - break; - return TRUE; - } - } - return FALSE; -} - -void SetMovesDamageResults(u32 battlerAtk, u16 *moves) -{ - s32 i, j, battlerDef, bestId, currId, hp, result; - s32 moveDmgs[MAX_MON_MOVES]; - bool32 isNotConsidered[MAX_MON_MOVES]; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - u32 move = moves[i]; - if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || gBattleMoves[move].power == 0 || IsInIgnoredPowerfulMoveEffects(gBattleMoves[move].effect)) - isNotConsidered[i] = TRUE; - else - isNotConsidered[i] = FALSE; - } - - for (i = 0; i < MAX_MON_MOVES; i++) - { - for (battlerDef = 0; battlerDef < MAX_BATTLERS_COUNT; battlerDef++) - { - if (battlerDef == battlerAtk) - continue; - - if (isNotConsidered[i]) - { - result = MOVE_POWER_OTHER; // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects - } - else - { - // Considered move has power and is not in sIgnoredPowerfulMoveEffects - // Check all other moves and calculate their power - for (j = 0; j < MAX_MON_MOVES; j++) - { - if (!isNotConsidered[j]) - moveDmgs[j] = AI_DATA->simulatedDmg[battlerAtk][battlerDef][j]; - else - moveDmgs[j] = 0; - } - - hp = gBattleMons[battlerDef].hp + (20 * gBattleMons[battlerDef].hp / 100); // 20 % add to make sure the battler is always fainted - // If a move can faint battler, it doesn't matter how much damage it does - for (j = 0; j < MAX_MON_MOVES; j++) - { - if (moveDmgs[j] > hp) - moveDmgs[j] = hp; - } - - // Find move which deals most damage, in case of a tie prioritize one with better effect. - for (bestId = 0, j = 1; j < MAX_MON_MOVES; j++) - { - if (moveDmgs[j] > moveDmgs[bestId]) - bestId = j; - if (moveDmgs[j] == moveDmgs[bestId]) - { - switch (AI_WhichMoveBetter(gBattleMons[battlerAtk].moves[bestId], gBattleMons[battlerAtk].moves[j], battlerAtk, battlerDef)) - { - case 2: - if (Random() & 1) - break; - case 1: - bestId = j; - break; - } - } - } - - currId = i; - if (currId == bestId) - result = MOVE_POWER_BEST; - else if ((moveDmgs[currId] >= hp || moveDmgs[bestId] < hp) // If current move can faint as well, or if neither can - && GetNoOfHitsToKO(moveDmgs[currId], hp) - GetNoOfHitsToKO(moveDmgs[bestId], hp) <= 2 // Consider a move weak if it needs to be used at least 2 times more to faint the target, compared to the best move. - && AI_WhichMoveBetter(gBattleMons[battlerAtk].moves[bestId], gBattleMons[battlerAtk].moves[currId], battlerAtk, battlerDef) != 0) - result = MOVE_POWER_GOOD; - else - result = MOVE_POWER_WEAK; - } - AI_DATA->moveDmgResult[battlerAtk][battlerDef][i] = result; - } - } -} - -u32 GetMoveDamageResult(u32 battlerAtk, u32 battlerDef, u32 moveIndex) -{ - return AI_DATA->moveDmgResult[battlerAtk][battlerDef][moveIndex]; -} - u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef) { int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; @@ -1232,7 +1108,6 @@ u32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered) { u32 fasterAI = 0, fasterPlayer = 0, i; s8 prioAI = 0; - s8 prioPlayer = 0; s8 prioBattler2 = 0; u16 *battler2Moves = GetMovesArray(battler2); @@ -1278,7 +1153,7 @@ u32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered) // Check if target has means to faint ai mon. bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) { - s32 i, dmg; + s32 i; u32 unusable = AI_DATA->moveLimitations[battlerDef]; u16 *moves = GetMovesArray(battlerDef); @@ -1467,20 +1342,10 @@ bool32 AI_IsBattlerGrounded(u32 battlerId) bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move) { - u32 i; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return FALSE; // AI handicap flag: doesn't understand ability suppression concept - for (i = 0; i < ARRAY_COUNT(sIgnoreMoldBreakerMoves); i++) - { - if (move == sIgnoreMoldBreakerMoves[i]) - return TRUE; - } - - if (atkAbility == ABILITY_MOLD_BREAKER - || atkAbility == ABILITY_TERAVOLT - || atkAbility == ABILITY_TURBOBLAZE) + if (IsMoldBreakerTypeAbility(atkAbility) || gBattleMoves[move].ignoresTargetAbility) return TRUE; return FALSE; @@ -1505,8 +1370,6 @@ u32 AI_GetWeather(struct AiLogicData *aiData) u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move) { - u32 target; - if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE && AI_IsTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN)) return MOVE_TARGET_BOTH; else @@ -1515,8 +1378,6 @@ u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move) bool32 IsAromaVeilProtectedMove(u32 move) { - u32 i; - switch (move) { case MOVE_DISABLE: @@ -1612,12 +1473,6 @@ bool32 IsMoveRedirectionPrevented(u32 move, u32 atkAbility) return FALSE; } -u32 AI_GetMoveAccuracy(u32 battlerAtk, u32 battlerDef, u32 move) -{ - return GetTotalAccuracy(battlerAtk, battlerDef, move, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], - AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]); -} - bool32 IsSemiInvulnerable(u32 battlerDef, u32 move) { if (gStatuses3[battlerDef] & STATUS3_PHANTOM_FORCE) @@ -1647,10 +1502,8 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) if (AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD) return TRUE; -#if B_TOXIC_NEVER_MISS >= GEN_6 - if (gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + if (B_TOXIC_NEVER_MISS >= GEN_6 && gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) return TRUE; -#endif // discouraged from hitting weather = AI_GetWeather(AI_DATA); @@ -1662,9 +1515,7 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) if ((((weather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) || (((weather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD))) || (gBattleMoves[move].effect == EFFECT_VITAL_THROW) - #if B_MINIMIZE_DMG_ACC >= GEN_6 - || ((gStatuses3[battlerDef] & STATUS3_MINIMIZED) && gBattleMoves[move].minimizeDoubleDamage) - #endif + || (B_MINIMIZE_DMG_ACC >= GEN_6 && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) && gBattleMoves[move].minimizeDoubleDamage) || (gBattleMoves[move].accuracy == 0)) { return TRUE; @@ -1676,7 +1527,7 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move) { u32 holdEffect = AI_DATA->holdEffects[battlerDef]; - u32 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move); + u32 accuracy = AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; gPotentialItemEffectBattler = battlerDef; if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < AI_DATA->holdEffectParams[battlerDef]) @@ -1697,10 +1548,8 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil else // test the odds { u32 odds = accuracy + (gBattleMons[battlerAtk].level - gBattleMons[battlerDef].level); - #if B_SHEER_COLD_ACC >= GEN_7 - if (move == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + if (B_SHEER_COLD_ACC >= GEN_7 && move == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; - #endif if (Random() % 100 + 1 < odds && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) return TRUE; } @@ -1824,49 +1673,46 @@ bool32 ShouldSetSnow(u32 battler, u32 ability, u32 holdEffect) void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score) { // TODO more sophisticated logic - u32 predictedEffect = gBattleMoves[predictedMove].effect; - u32 defAbility = AI_DATA->abilities[battlerDef]; u32 uses = gDisableStructs[battlerAtk].protectUses; /*if (GetMoveResultFlags(predictedMove) & (MOVE_RESULT_NO_EFFECT | MOVE_RESULT_MISSED)) { - (*score) -= 5; + ADJUST_SCORE_PTR(-5); return; }*/ if (uses == 0) { if (predictedMove != MOVE_NONE && predictedMove != 0xFFFF && !IS_MOVE_STATUS(predictedMove)) - (*score) += 2; + ADJUST_SCORE_PTR(2); else if (Random() % 256 < 100) - (*score)++; + ADJUST_SCORE_PTR(1); } else { if (IsDoubleBattle()) - (*score) -= 2 * min(uses, 3); + ADJUST_SCORE_PTR(-(2 * min(uses, 3))); else - (*score) -= min(uses, 3); + ADJUST_SCORE_PTR(-(min(uses, 3))); } if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_FROSTBITE) || gBattleMons[battlerAtk].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) || gStatuses3[battlerAtk] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) { - (*score)--; + ADJUST_SCORE_PTR(-1); } if (gBattleMons[battlerDef].status1 & STATUS1_TOXIC_POISON || gBattleMons[battlerDef].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) || gStatuses3[battlerDef] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) - (*score) += 2; + ADJUST_SCORE_PTR(2); } // stat stages bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) { - if ((gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) - || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE)) + if (gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) { if (AI_DATA->holdEffects[battler] == HOLD_EFFECT_CLEAR_AMULET || battlerAbility == ABILITY_CLEAR_BODY @@ -1874,6 +1720,14 @@ bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) || battlerAbility == ABILITY_FULL_METAL_BODY) return FALSE; + // If AI is faster and doesn't have any mons left, lowering speed doesn't give any + if (stat == STAT_SPEED) + { + if (AI_WhoStrikesFirst(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER + && CountUsablePartyMons(sBattler_AI) == 0 + && !HasMoveEffect(sBattler_AI, EFFECT_ELECTRO_BALL)) + return FALSE; + } return TRUE; } @@ -2026,6 +1880,7 @@ bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) && defAbility != ABILITY_WHITE_SMOKE && defAbility != ABILITY_FULL_METAL_BODY && defAbility != ABILITY_KEEN_EYE + && (B_ILLUMINATE_EFFECT >= GEN_9 && defAbility != ABILITY_ILLUMINATE) && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; @@ -2092,7 +1947,6 @@ bool32 HasMoveWithSplit(u32 battler, u32 split) if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetBattleMoveSplit(moves[i]) == split) return TRUE; } - return FALSE; } @@ -2157,7 +2011,7 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool || AI_GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) continue; - if (AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) <= accCheck) + if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) return TRUE; } } @@ -2178,7 +2032,7 @@ bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef) if (!(gBitTable[i] & moveLimitations)) { if (gBattleMoves[moves[i]].effect == EFFECT_SLEEP - && AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) < 85) + && AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] < 85) return TRUE; } } @@ -2308,9 +2162,6 @@ bool32 IsStatRaisingEffect(u32 effect) case EFFECT_EVASION_UP_2: case EFFECT_MINIMIZE: case EFFECT_DEFENSE_CURL: - #if B_CHARGE_SPDEF_RAISE >= GEN_5 - case EFFECT_CHARGE: - #endif case EFFECT_CALM_MIND: case EFFECT_COSMIC_POWER: case EFFECT_DRAGON_DANCE: @@ -2327,6 +2178,8 @@ bool32 IsStatRaisingEffect(u32 effect) case EFFECT_STOCKPILE: case EFFECT_VICTORY_DANCE: return TRUE; + case EFFECT_CHARGE: + return B_CHARGE_SPDEF_RAISE >= GEN_5; default: return FALSE; } @@ -2389,6 +2242,11 @@ bool32 HasDamagingMoveOfType(u32 battlerId, u32 type) return FALSE; } +bool32 HasSubstituteIgnoringMove(u32 battler) +{ + CHECK_MOVE_FLAG(ignoresSubstitute); +} + bool32 HasSoundMove(u32 battler) { CHECK_MOVE_FLAG(soundMove); @@ -2421,26 +2279,22 @@ bool32 IsEncoreEncouragedEffect(u32 moveEffect) return FALSE; } -bool32 MoveRequiresRecharging(u32 move) +bool32 IsChargingMove(u32 battlerAtk, u32 effect) { - u32 i; - for (i = 0; i < ARRAY_COUNT(sRechargeMoves); i++) + switch (effect) { - if (move == sRechargeMoves[i]) - return TRUE; + case EFFECT_SOLAR_BEAM: + if (AI_GetWeather(AI_DATA) & B_WEATHER_SUN) + return FALSE; + case EFFECT_SKULL_BASH: + case EFFECT_METEOR_BEAM: + case EFFECT_TWO_TURNS_ATTACK: + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB) + return FALSE; + return TRUE; + default: + return FALSE; } - return FALSE; -} - -bool32 MoveCallsOtherMove(u32 move) -{ - u32 i; - for (i = 0; i < ARRAY_COUNT(sOtherMoveCallingMoves); i++) - { - if (move == sOtherMoveCallingMoves[i]) - return TRUE; - } - return FALSE; } static u32 GetLeechSeedDamage(u32 battlerId) @@ -2449,7 +2303,7 @@ static u32 GetLeechSeedDamage(u32 battlerId) if ((gStatuses3[battlerId] & STATUS3_LEECHSEED) && gBattleMons[gStatuses3[battlerId] & STATUS3_LEECHSEED_BATTLER].hp != 0) { - damage = gBattleMons[battlerId].maxHP / 8; + damage = GetNonDynamaxMaxHP(battlerId) / 8; if (damage == 0) damage = 1; } @@ -2461,7 +2315,7 @@ static u32 GetNightmareDamage(u32 battlerId) u32 damage = 0; if ((gBattleMons[battlerId].status2 & STATUS2_NIGHTMARE) && gBattleMons[battlerId].status1 & STATUS1_SLEEP) { - damage = gBattleMons[battlerId].maxHP / 4; + damage = GetNonDynamaxMaxHP(battlerId) / 4; if (damage == 0) damage = 1; } @@ -2473,7 +2327,7 @@ static u32 GetCurseDamage(u32 battlerId) u32 damage = 0; if (gBattleMons[battlerId].status2 & STATUS2_CURSED) { - damage = gBattleMons[battlerId].maxHP / 4; + damage = GetNonDynamaxMaxHP(battlerId) / 4; if (damage == 0) damage = 1; } @@ -2488,15 +2342,10 @@ static u32 GetTrapDamage(u32 battlerId) if (gBattleMons[battlerId].status2 & STATUS2_WRAPPED) { if (holdEffect == HOLD_EFFECT_BINDING_BAND) - #if B_BINDING_DAMAGE >= GEN_6 - damage = gBattleMons[battlerId].maxHP / 6; + damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); else - damage = gBattleMons[battlerId].maxHP / 8; - #else - damage = gBattleMons[battlerId].maxHP / 8; - else - damage = gBattleMons[battlerId].maxHP / 16; - #endif + damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); + if (damage == 0) damage = 1; } @@ -2566,7 +2415,7 @@ static u32 GetWeatherDamage(u32 battlerId) && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) { - damage = gBattleMons[battlerId].maxHP / 16; + damage = GetNonDynamaxMaxHP(battlerId) / 16; if (damage == 0) damage = 1; } @@ -2577,7 +2426,7 @@ static u32 GetWeatherDamage(u32 battlerId) && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) { - damage = gBattleMons[battlerId].maxHP / 16; + damage = GetNonDynamaxMaxHP(battlerId) / 16; if (damage == 0) damage = 1; } @@ -2736,9 +2585,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 if (!IS_MOVE_STATUS(move) && (shouldSwitch || (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - #if B_STURDY >= GEN_5 - || defAbility == ABILITY_STURDY - #endif + || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))) return PIVOT; // pivot to break sash/sturdy/multiscale @@ -2746,9 +2593,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 else if (!hasStatBoost) { if (!IS_MOVE_STATUS(move) && (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - #if B_STURDY >= GEN_5 - || (defAbility == ABILITY_STURDY) - #endif + || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))) return PIVOT; // pivot to break sash/sturdy/multiscale @@ -2889,9 +2734,7 @@ bool32 CanKnockOffItem(u32 battler, u32 item) | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_SECRET_BASE - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE - | BATTLE_TYPE_TRAINER - #endif + | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) )) && GetBattlerSide(battler) == B_SIDE_PLAYER) return FALSE; @@ -3341,7 +3184,7 @@ bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 return FALSE; if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect - && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + && partnerMove != MOVE_NONE && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) { return TRUE; @@ -3356,7 +3199,7 @@ bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u3 return FALSE; if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect - && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE) + && partnerMove != MOVE_NONE) return TRUE; return FALSE; } @@ -3367,7 +3210,7 @@ bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef if (!IsDoubleBattle()) return FALSE; - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + if (partnerMove != MOVE_NONE && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef && (gBattleMoves[partnerMove].effect == EFFECT_SLEEP || gBattleMoves[partnerMove].effect == EFFECT_POISON @@ -3379,20 +3222,15 @@ bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef return FALSE; } -//PARTNER_MOVE_EFFECT_IS_WEATHER -bool32 PartnerMoveEffectIsWeather(u32 battlerAtkPartner, u32 partnerMove) +bool32 IsMoveEffectWeather(u32 move) { - if (!IsDoubleBattle()) - return FALSE; - - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE - && (gBattleMoves[partnerMove].effect == EFFECT_SUNNY_DAY - || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE - || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM - || gBattleMoves[partnerMove].effect == EFFECT_HAIL - || gBattleMoves[partnerMove].effect == EFFECT_SNOWSCAPE)) + if (move != MOVE_NONE + && (gBattleMoves[move].effect == EFFECT_SUNNY_DAY + || gBattleMoves[move].effect == EFFECT_RAIN_DANCE + || gBattleMoves[move].effect == EFFECT_SANDSTORM + || gBattleMoves[move].effect == EFFECT_HAIL + || gBattleMoves[move].effect == EFFECT_SNOWSCAPE)) return TRUE; - return FALSE; } @@ -3402,7 +3240,7 @@ bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove) if (!IsDoubleBattle()) return FALSE; - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE + if (partnerMove != MOVE_NONE && (gBattleMoves[partnerMove].effect == EFFECT_GRASSY_TERRAIN || gBattleMoves[partnerMove].effect == EFFECT_MISTY_TERRAIN || gBattleMoves[partnerMove].effect == EFFECT_ELECTRIC_TERRAIN @@ -3418,7 +3256,7 @@ bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck) if (!IsDoubleBattle()) return FALSE; - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && partnerMove == moveCheck) + if (partnerMove != MOVE_NONE && partnerMove == moveCheck) return TRUE; return FALSE; } @@ -3429,7 +3267,7 @@ bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 mo if (!IsDoubleBattle()) return FALSE; - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) + if (partnerMove != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) return TRUE; return FALSE; } @@ -3439,7 +3277,7 @@ bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMov { if (!IsDoubleBattle()) return FALSE; - if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove) + if (partnerMove != MOVE_NONE && move == partnerMove) return TRUE; return FALSE; } @@ -3447,7 +3285,7 @@ bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMov bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) { u32 i; - u32 firstId, lastId; + s32 firstId, lastId; struct Pokemon* party; bool32 hasStatus = FALSE; bool32 needHealing = FALSE; @@ -3528,32 +3366,16 @@ void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons) } // party logic -s32 AI_CalcPartyMonBestMoveDamage(u32 battlerAtk, u32 battlerDef, struct Pokemon *attackerMon, struct Pokemon *targetMon) +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool8 isPartyMonAttacker) { - s32 i, move, bestDmg, dmg; + s32 dmg; u8 effectiveness; struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); - - if (attackerMon != NULL) - PokemonToBattleMon(attackerMon, &gBattleMons[battlerAtk]); - if (targetMon != NULL) - PokemonToBattleMon(targetMon, &gBattleMons[battlerDef]); - - for (bestDmg = 0, i = 0; i < MAX_MON_MOVES; i++) - { - if (BattlerHasAi(battlerAtk)) - move = GetMonData(attackerMon, MON_DATA_MOVE1 + i); - else - move = AI_PARTY->mons[GetBattlerSide(battlerAtk)][gBattlerPartyIndexes[battlerAtk]].moves[i]; - - if (move != MOVE_NONE && gBattleMoves[move].power != 0) - { - dmg = AI_CalcDamageSaveBattlers(move, battlerAtk, battlerDef, &effectiveness, FALSE); - if (dmg > bestDmg) - bestDmg = dmg; - } - } - + if(isPartyMonAttacker) + gBattleMons[battlerAtk] = switchinCandidate; + else + gBattleMons[battlerDef] = switchinCandidate; + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA)); FreeRestoreBattleMons(savedBattleMons); return dmg; } @@ -3618,7 +3440,6 @@ bool32 IsPartyFullyHealedExceptBattler(u32 battlerId) bool32 PartyHasMoveSplit(u32 battlerId, u32 split) { - u32 firstId, lastId; struct Pokemon *party = GetBattlerParty(battlerId); u32 i, j; @@ -3754,39 +3575,39 @@ void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score) if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && AI_DATA->hpPercents[battlerAtk] > 40) { if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_2_STAGE) - *score += 2; + ADJUST_SCORE_PTR(2); else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_STAGE) - *(score)++; + ADJUST_SCORE_PTR(1); } if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY)) - *(score)++; + ADJUST_SCORE_PTR(1); break; case STAT_DEF: if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)|| IS_MOVE_PHYSICAL(gLastMoves[battlerDef])) && AI_DATA->hpPercents[battlerAtk] > 70) { if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_2_STAGE) - *score += 2; // seems better to raise def at higher HP + ADJUST_SCORE_PTR(2); // seems better to raise def at higher HP else if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_STAGE) - *(score)++; + ADJUST_SCORE_PTR(1); } break; case STAT_SPEED: if (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)) { if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_2_STAGE) - *score += 2; + ADJUST_SCORE_PTR(2); else if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_STAGE) - *(score)++; + ADJUST_SCORE_PTR(1); } break; case STAT_SPATK: if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL) && AI_DATA->hpPercents[battlerAtk] > 40) { if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_2_STAGE) - *score += 2; + ADJUST_SCORE_PTR(2); else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_STAGE) - *(score)++; + ADJUST_SCORE_PTR(1); } break; case STAT_SPDEF: @@ -3794,24 +3615,24 @@ void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score) && AI_DATA->hpPercents[battlerAtk] > 70) { if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_2_STAGE) - *score += 2; // seems better to raise spdef at higher HP + ADJUST_SCORE_PTR(2); // seems better to raise spdef at higher HP else if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_STAGE) - *(score)++; + ADJUST_SCORE_PTR(1); } break; case STAT_ACC: if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) - *score += 2; // has moves with less than 80% accuracy + ADJUST_SCORE_PTR(2); // has moves with less than 80% accuracy else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])) - *(score)++; + ADJUST_SCORE_PTR(1); break; case STAT_EVASION: if (!BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk])) { if (!GetBattlerSecondaryDamage(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_ROOTED)) - *score += 2; + ADJUST_SCORE_PTR(2); else - *(score)++; + ADJUST_SCORE_PTR(1); } break; } @@ -3826,18 +3647,18 @@ void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if (AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove) && AI_DATA->hpPercents[battlerDef] > 20) { if (!HasDamagingMove(battlerDef)) - *score += 2; + ADJUST_SCORE_PTR(2); if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL && HasMoveEffect(battlerAtk, EFFECT_PROTECT)) - (*score)++; // stall tactic + ADJUST_SCORE_PTR(1); // stall tactic if (HasMoveEffect(battlerAtk, EFFECT_VENOSHOCK) || HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(battlerAtk, EFFECT_VENOM_DRENCH) || AI_DATA->abilities[battlerAtk] == ABILITY_MERCILESS) - *(score) += 2; + ADJUST_SCORE_PTR(2); else - *(score)++; + ADJUST_SCORE_PTR(1); } } @@ -3849,15 +3670,15 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if (AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) { - (*score)++; // burning is good + ADJUST_SCORE_PTR(1); // burning is good if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)) { if (CanTargetFaintAi(battlerDef, battlerAtk)) - *score += 2; // burning the target to stay alive is cool + ADJUST_SCORE_PTR(2); // burning the target to stay alive is cool } if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) - (*score)++; + ADJUST_SCORE_PTR(1); } } @@ -3877,9 +3698,9 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) || HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT) || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - *score += 4; + ADJUST_SCORE_PTR(4); else - *score += 2; + ADJUST_SCORE_PTR(2); } } @@ -3890,16 +3711,16 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) return; if (AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) - *score += 2; + ADJUST_SCORE_PTR(2); else return; if ((HasMoveEffect(battlerAtk, EFFECT_DREAM_EATER) || HasMoveEffect(battlerAtk, EFFECT_NIGHTMARE)) && !(HasMoveEffect(battlerDef, EFFECT_SNORE) || HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK))) - (*score)++; + ADJUST_SCORE_PTR(1); if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) - (*score)++; + ADJUST_SCORE_PTR(1); } void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) @@ -3915,9 +3736,9 @@ void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION || (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT))) - *score += 3; + ADJUST_SCORE_PTR(3); else - *score += 2; + ADJUST_SCORE_PTR(2); } } @@ -3928,15 +3749,15 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score if (AI_CanGiveFrostbite(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) { - (*score)++; // frostbite is good + ADJUST_SCORE_PTR(1); // frostbite is good if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) { if (CanTargetFaintAi(battlerDef, battlerAtk)) - *score += 2; // frostbiting the target to stay alive is cool + ADJUST_SCORE_PTR(2); // frostbiting the target to stay alive is cool } if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) - (*score)++; + ADJUST_SCORE_PTR(1); } } @@ -3962,9 +3783,9 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { u8 effectiveness; - if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE && gBattleMons[battlerDef].species == SPECIES_MIMIKYU) + if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE && gBattleMons[battlerDef].species == SPECIES_MIMIKYU_DISGUISED) return FALSE; // Don't waste a Z-Move busting disguise - if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE && IS_MOVE_PHYSICAL(chosenMove)) + if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && 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)) diff --git a/src/battle_anim.c b/src/battle_anim.c index 8caa2850cb..c46c5cee4c 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -248,6 +248,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) switch (animType) { case ANIM_TYPE_GENERAL: + default: animsTable = gBattleAnims_General; break; case ANIM_TYPE_MOVE: @@ -1468,10 +1469,8 @@ static void LoadDefaultBg(void) { if (IsContest()) LoadContestBgAfterMoveAnim(); -#if B_TERRAIN_BG_CHANGE == TRUE - else if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + else if (B_TERRAIN_BG_CHANGE == TRUE && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) DrawTerrainTypeBattleBackground(); -#endif else DrawMainBattleBackground(); } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index d8addec01c..b79c94a6a3 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -158,6 +158,7 @@ static void AnimRockPolishSparkle(struct Sprite *); static void AnimPoisonJabProjectile(struct Sprite *); static void AnimNightSlash(struct Sprite *); static void AnimPluck(struct Sprite *); +static void AnimAcrobaticsSlashes(struct Sprite *); const union AnimCmd gPowderParticlesAnimCmds[] = { @@ -3006,6 +3007,61 @@ const struct SpriteTemplate gSeedFlareGreenCirclesTemplate = .callback = AnimPowerAbsorptionOrb }; +const struct SpriteTemplate gSteelBeamBigOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_STEEL_BEAM, + .paletteTag = ANIM_TAG_STEEL_BEAM, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarBeamBigOrb, +}; + +const struct SpriteTemplate gSteelBeamSmallOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_STEEL_BEAM, + .paletteTag = ANIM_TAG_STEEL_BEAM, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamSmallOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSolarBeamSmallOrb, +}; + +const struct SpriteTemplate gAcrobaticsSlashesSpriteTemplate = +{ + .tileTag = ANIM_TAG_WHITE_STREAK, + .paletteTag = ANIM_TAG_WHITE_STREAK, + .oam = &gOamData_AffineDouble_ObjBlend_32x8, + .anims = gRockPolishStreak_AnimCmds, + .images = NULL, + .affineAnims = gRockPolishStreak_AffineAnimCmds, + .callback = AnimAcrobaticsSlashes, +}; + +const struct SpriteTemplate gPsyshockOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_RED_ORB_2, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPoisonJabProjectile, +}; + +const struct SpriteTemplate gPsyshockSmokeSpriteTemplate = +{ + .tileTag = ANIM_TAG_GRAY_SMOKE, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + // functions static void AnimGrassKnot(struct Sprite *sprite) { @@ -6971,28 +7027,6 @@ void AnimTask_CompressTargetHorizontally(u8 taskId) task->func = AnimTask_CompressTargetStep; } -const struct SpriteTemplate gSteelBeamBigOrbSpriteTemplate = -{ - .tileTag = ANIM_TAG_STEEL_BEAM, - .paletteTag = ANIM_TAG_STEEL_BEAM, - .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = gSolarBeamBigOrbAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSolarBeamBigOrb, -}; - -const struct SpriteTemplate gSteelBeamSmallOrbSpriteTemplate = -{ - .tileTag = ANIM_TAG_STEEL_BEAM, - .paletteTag = ANIM_TAG_STEEL_BEAM, - .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = gSolarBeamSmallOrbAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSolarBeamSmallOrb, -}; - void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId) { if (--gTasks[taskId].data[0] == -1) @@ -7009,3 +7043,12 @@ void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId) if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); } + +static void AnimAcrobaticsSlashes(struct Sprite *sprite) +{ + int affineAnimNum = Random2() % ARRAY_COUNT(gRockPolishStreak_AffineAnimCmds); + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAffineAnim(sprite, affineAnimNum); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c old mode 100755 new mode 100644 index 822adc1733..2c8572cc8c --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -721,8 +721,6 @@ const struct SpriteTemplate gSweetScentPetalSpriteTemplate = .callback = AnimSweetScentPetal, }; -static const u16 sUnusedPalette[] = INCBIN_U16("graphics/battle_anims/unused/unknown.gbapal"); - const union AnimCmd gPainSplitAnimCmds[] = { ANIMCMD_FRAME(0, 5), diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index e49d2411de..7bd6a0268e 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -1447,7 +1447,6 @@ static void AnimPoltergeistItem(struct Sprite *sprite) void AnimTask_PulverizingPancakeWhiteShadow(u8 taskId) { struct Task *task; - s16 battler; u8 spriteId; s16 baseX, baseY; s16 x, y; diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index a89800492f..6119371757 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -750,7 +750,7 @@ static void SetBattlersXOffsetForShake(struct Task *task) void AnimTask_IsPowerOver99(u8 taskId) { - gBattleAnimArgs[15] = gAnimMovePower > 99; + gBattleAnimArgs[ARG_RET_ID] = gAnimMovePower > 99; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 41566d0471..fde1c228cf 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -46,6 +46,8 @@ static void AnimTask_Hail2(u8); static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c); static void AvalancheAnim_Step(struct Sprite *sprite); static void AvalancheAnim_Step2(struct Sprite *sprite); +static void AnimSnowflakes(struct Sprite *sprite); +static void AnimSnowflakes_Step(struct Sprite *sprite); static const union AnimCmd sAnim_Unused[] = { @@ -1673,3 +1675,69 @@ void AnimTask_GetIceBallCounter(u8 taskId) gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1; DestroyAnimVisualTask(taskId); } + +static const union AnimCmd sAnim_Snowflakes[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_Snowflakes[] = +{ + sAnim_Snowflakes, +}; + +const struct SpriteTemplate gSnowFlakesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SNOWFLAKES, + .paletteTag = ANIM_TAG_SNOWFLAKES, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = sAnims_Snowflakes, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSnowflakes, +}; + +void AnimTask_CreateSnowflakes(u8 taskId) +{ + u8 x, y; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1) + { + x = Random2() % DISPLAY_WIDTH; + y = Random2() % (DISPLAY_HEIGHT / 2); + CreateSprite(&gSnowFlakesSpriteTemplate, x, y, 4); + } + if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) + DestroyAnimVisualTask(taskId); +} + +static void AnimSnowflakes(struct Sprite *sprite) +{ + sprite->callback = AnimSnowflakes_Step; +} + +static void AnimSnowflakes_Step(struct Sprite *sprite) +{ + if (++sprite->data[0] <= 13) + { + sprite->x2++; + sprite->y2 += 2; + sprite->x2--; + } + if (sprite->animEnded) + DestroySprite(sprite); +} diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 1f04e01697..281b3087cc 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -81,8 +81,6 @@ static void SpriteCB_HorizontalSliceStep(struct Sprite *sprite); static void SpriteCB_HorizontalSlice(struct Sprite *sprite); static void SpriteCB_LashOutStrike(struct Sprite* sprite); static void AnimTask_TwinkleTackleLaunchStep(u8 taskId); -static void SpriteCB_ShellSmashShell(struct Sprite* sprite); -static void SpriteCB_ShellSmashShell_DestroyDuringFadeOut(struct Sprite* sprite); static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite); static void SpriteCB_SpriteOnMonUntilAffineAnimEnds(struct Sprite* sprite); static void SpriteCB_MoveSpriteUpwardsForDurationStep(struct Sprite* sprite); @@ -8283,7 +8281,7 @@ void AnimTask_ShellSmashShrinkAttacker(u8 taskId) task->func = AnimTask_DynamaxGrowthStep; } -static void AnimTask_DynamaxGrowthStep(u8 taskId) +static void AnimTask_DynamaxGrowthStep(u8 taskId) // from CFRU { struct Task* task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) @@ -8632,11 +8630,10 @@ void AnimTask_TerrainPulse(u8 taskId) void AnimTask_AffectionHangedOn(u8 taskId) { - gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget); + gBattleAnimArgs[0] = GetBattlerAffectionHearts(gBattleAnimTarget); DestroyAnimVisualTask(taskId); } - //Launches the stat ball for Power Shift //arg 0: X starting offset //arg 1: Y starting offset @@ -8727,6 +8724,7 @@ static void SpriteCB_LashOutStrike(struct Sprite* sprite) sprite->callback = AnimKnockOffStrike_Step; } +/* TODO - Use the ShellSmash Anim //Moves the shells towards the attacker and leaves them there until they fade out //arg 0: Initial x-pos //arg 1: Final x-pos @@ -8754,6 +8752,7 @@ static void SpriteCB_ShellSmashShell_DestroyDuringFadeOut(struct Sprite* sprite) if (GetGpuReg(REG_OFFSET_BLDALPHA) >= BLDALPHA_BLEND(0, 8)) //Fade out 1/2 done DestroyAnimSprite(sprite); } +*/ static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite) { @@ -9099,3 +9098,66 @@ static void SpriteCB_TripleArrowKick(struct Sprite* sprite) InitAnimArcTranslation(sprite); sprite->callback = SpriteCB_PowerShiftBallStep; //Arc until complete } + +// DYNAMAX +static const union AffineAnimCmd sDynamaxGrowthAffineAnimCmds[] = // from CFRU +{ + AFFINEANIMCMD_FRAME(-2, -2, 0, 64), //Double in size over 1 second + AFFINEANIMCMD_FRAME(0, 0, 0, 64), //Pause for 1 seconds + AFFINEANIMCMD_FRAME(16, 16, 0, 8), //Shrink back down in 1/8 of a second + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sDynamaxGrowthAttackAnimationAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(-4, -4, 0, 32), //Double in size quicker + AFFINEANIMCMD_FRAME(0, 0, 0, 32), //Pause for less + AFFINEANIMCMD_FRAME(16, 16, 0, 8), + AFFINEANIMCMD_END, +}; + +//Arg 0: Animation for attack +void AnimTask_DynamaxGrowth(u8 taskId) // from CFRU +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + if (gBattleAnimArgs[0] == 0) + PrepareAffineAnimInTaskData(task, spriteId, sDynamaxGrowthAffineAnimCmds); + else + PrepareAffineAnimInTaskData(task, spriteId, sDynamaxGrowthAttackAnimationAffineAnimCmds); + task->func = AnimTask_DynamaxGrowthStep; +} + +void AnimTask_GetWeatherToSet(u8 taskId) +{ + switch (gBattleMoves[gCurrentMove].argument) + { + case MAX_EFFECT_SUN: + gBattleAnimArgs[ARG_RET_ID] = 1; + break; + case MAX_EFFECT_RAIN: + gBattleAnimArgs[ARG_RET_ID] = 2; + break; + case MAX_EFFECT_SANDSTORM: + gBattleAnimArgs[ARG_RET_ID] = 3; + break; + case MAX_EFFECT_HAIL: + gBattleAnimArgs[ARG_RET_ID] = 4; + break; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SyrupBomb(u8 taskId) +{ + struct Pokemon *party = GetBattlerParty(gBattleAnimAttacker); + gBattleAnimArgs[0] = IsMonShiny(&party[gBattlerPartyIndexes[gBattleAnimAttacker]]); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_StickySyrup(u8 taskId) +{ + gBattleAnimArgs[0] = gAnimDisableStructPtr->syrupBombIsShiny; + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index 8905f5c475..0ed4e43090 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -14,6 +14,7 @@ static void AnimSuckerPunch(struct Sprite *sprite); static void AnimGunkShotParticlesStep(struct Sprite *sprite); static void AnimGunkShotParticles(struct Sprite *sprite); static void AnimGunkShotImpact(struct Sprite *sprite); +static void AnimAnimSyrupBomb(struct Sprite *); static const union AnimCmd sAnim_ToxicBubble[] = { @@ -305,6 +306,123 @@ const struct SpriteTemplate gGunkShotImpactSpriteTemplate = .callback = AnimGunkShotImpact, }; +static const union AnimCmd sAnim_SyrupCoat[] = +{ + ANIMCMD_FRAME(128, 10), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(0, 45), + ANIMCMD_FRAME(64, 15), + ANIMCMD_FRAME(128, 15), + ANIMCMD_FRAME(192, 20), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SyrupStick[] = +{ + ANIMCMD_FRAME(192, 5), + ANIMCMD_FRAME(128, 35), + ANIMCMD_FRAME(192, 20), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_SyrupCoat[] = +{ + sAnim_SyrupCoat, +}; + +static const union AnimCmd *const sAnims_SyrupStick[] = +{ + sAnim_SyrupStick, +}; + +const struct SpriteTemplate gSyrupRedProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_BLOB_RED, + .paletteTag = ANIM_TAG_SYRUP_BLOB_RED, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = AnimSludgeProjectile, +}; + +const struct SpriteTemplate gSyrupYellowProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_BLOB_YELLOW, + .paletteTag = ANIM_TAG_SYRUP_BLOB_YELLOW, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = AnimSludgeProjectile, +}; + +const struct SpriteTemplate gSyrupBombRedHitParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SPLAT_RED, + .paletteTag = ANIM_TAG_SYRUP_BLOB_RED, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = sAffineAnims_SludgeBombHit, + .callback = AnimSludgeBombHitParticle, +}; + +const struct SpriteTemplate gSyrupBombYellowHitParticleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SPLAT_YELLOW, + .paletteTag = ANIM_TAG_SYRUP_BLOB_YELLOW, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = sAffineAnims_SludgeBombHit, + .callback = AnimSludgeBombHitParticle, +}; + +const struct SpriteTemplate gSyrupBombRedShellSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SHELL_RED, + .paletteTag = ANIM_TAG_SYRUP_BLOB_RED, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnims_SyrupCoat, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAnimSyrupBomb, +}; + +const struct SpriteTemplate gSyrupBombYellowShellSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SHELL_YELLOW, + .paletteTag = ANIM_TAG_SYRUP_BLOB_YELLOW, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnims_SyrupCoat, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAnimSyrupBomb, +}; + +const struct SpriteTemplate gSyrupBombRedShellBSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SHELL_RED, + .paletteTag = ANIM_TAG_SYRUP_BLOB_RED, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnims_SyrupStick, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAnimSyrupBomb, +}; + +const struct SpriteTemplate gSyrupBombYellowShellBSpriteTemplate = +{ + .tileTag = ANIM_TAG_SYRUP_SHELL_YELLOW, + .paletteTag = ANIM_TAG_SYRUP_BLOB_YELLOW, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnims_SyrupStick, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAnimSyrupBomb, +}; + static void AnimGunkShotImpact(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); @@ -534,3 +652,26 @@ static void AnimBubbleEffect_Step(struct Sprite *sprite) if (sprite->affineAnimEnded) DestroyAnimSprite(sprite); } + +static void AnimSyrupBomb_Step(struct Sprite *sprite) +{ + if (sprite->data[1] > sprite->data[0] - 10) + sprite->invisible = sprite->data[1] & 1; + + if (sprite->data[1] == sprite->data[0]) + DestroyAnimSprite(sprite); + + sprite->data[1]++; +} + +static void AnimAnimSyrupBomb(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == ANIM_TARGET) + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 2; + } + + sprite->data[0] = gBattleAnimArgs[1]; + sprite->callback = AnimSyrupBomb_Step; +} diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index c1dc754c1f..6811c857b3 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -351,8 +351,7 @@ const struct SpriteTemplate gSeedFlareGreenWavesTemplate = static void AnimStealthRock(struct Sprite *sprite) { - u16 x; - u16 y; + s16 x, y; InitSpritePosToAnimAttacker(sprite, TRUE); SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y); diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 99e476da1d..491ca77a96 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -281,7 +281,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId) u16 species; int spriteId, newSpriteId; u16 var0; - u16 bg1Cnt; + u32 bg1Cnt; struct BattleAnimBgData animBgData; var0 = 0; @@ -350,7 +350,7 @@ static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId) { struct BattleAnimBgData animBgData; struct Sprite *sprite; - u16 bg1Cnt; + u32 bg1Cnt; gTasks[taskId].data[10] += 4; gBattle_BG1_Y -= 4; @@ -814,7 +814,7 @@ void StartMonScrollingBgMask(u8 taskId, int UNUSED unused, u16 scrollSpeed, u8 b { u16 species; u8 spriteId, spriteId2; - u16 bg1Cnt; + u32 bg1Cnt; struct BattleAnimBgData animBgData; u8 battler2; @@ -919,7 +919,7 @@ static void UpdateMonScrollingBgMask(u8 taskId) | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); if (!IsContest()) { - u16 bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + u32 bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); ((vBgCnt *)&bg1Cnt)->charBaseBlock = 0; SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); } diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 961f154baa..159b27dec9 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -57,9 +57,6 @@ static void AnimAquaTail(struct Sprite *sprite); static void AnimKnockOffAquaTail(struct Sprite *sprite); static void AnimKnockOffAquaTailStep(struct Sprite *sprite); -static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unused/water_gfx.4bpp"); -static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unused/water.bin"); - static const union AnimCmd sAnim_RainDrop[] = { ANIMCMD_FRAME(0, 2), @@ -587,6 +584,28 @@ const struct SpriteTemplate gAquaTailHitSpriteTemplate = .callback = AnimAquaTail, }; +static const union AnimCmd sAnimCmdAnimatedSpark2[] = { + ANIMCMD_FRAME((8 * 8) / (16 * 16) * 0, 8), + ANIMCMD_FRAME((8 * 8) / (16 * 16) * 1, 8), + ANIMCMD_FRAME((8 * 8) / (16 * 16) * 2, 8), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sAnimCmdTable_AnimatedSpark2[] = { + sAnimCmdAnimatedSpark2, +}; + +const struct SpriteTemplate gSparkBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnimCmdTable_AnimatedSpark2, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + static void AnimAquaTail(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); diff --git a/src/battle_bg.c b/src/battle_bg.c index c74ccc3c18..2e92658343 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -758,23 +758,31 @@ void DrawMainBattleBackground(void) LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } - else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - } - else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE) - { - LZDecompressVram(gBattleTerrainTiles_Water, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - } - else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA) - { - LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); + switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) + { + case SPECIES_GROUDON: + LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + break; + case SPECIES_KYOGRE: + LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + break; + case SPECIES_RAYQUAZA: + LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2))); + LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60); + break; + default: + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26))); + LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); + break; + } } else { @@ -856,11 +864,10 @@ void LoadBattleTextboxAndBackground(void) CopyBgTilemapBufferToVram(0); LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); LoadBattleMenuWindowGfx(); -#if B_TERRAIN_BG_CHANGE == TRUE - DrawTerrainTypeBattleBackground(); -#else - DrawMainBattleBackground(); -#endif + if (B_TERRAIN_BG_CHANGE == TRUE) + DrawTerrainTypeBattleBackground(); + else + DrawMainBattleBackground(); } static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY) @@ -1156,20 +1163,27 @@ void DrawBattleEntryBackground(void) CopyBgTilemapBufferToVram(2); } } - else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void *)(BG_SCREEN_ADDR(28))); - } - else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE) - { - LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void *)(BG_SCREEN_ADDR(28))); - } - else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA) - { - LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(28))); + switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) + { + case SPECIES_GROUDON: + LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28))); + break; + case SPECIES_KYOGRE: + LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28))); + break; + case SPECIES_RAYQUAZA: + LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1))); + LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28))); + break; + default: + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(BG_CHAR_ADDR(1))); + LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(BG_SCREEN_ADDR(28))); + break; + } } else { @@ -1224,9 +1238,17 @@ bool8 LoadChosenBattleElement(u8 caseId) { LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); } - else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2))); + switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) + { + case SPECIES_GROUDON: + LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2))); + break; + case SPECIES_KYOGRE: + LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(2))); + break; + } } else { @@ -1283,10 +1305,10 @@ bool8 LoadChosenBattleElement(u8 caseId) { LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); } - else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - if (gGameVersion == VERSION_RUBY) - LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26))); + if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON) + LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); else LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); } @@ -1345,10 +1367,10 @@ bool8 LoadChosenBattleElement(u8 caseId) { LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } - else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - if (gGameVersion == VERSION_RUBY) - LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); + if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON) + LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); else LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a74ca529b6..6b09f0d41f 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -38,6 +38,7 @@ #include "constants/songs.h" #include "constants/trainers.h" #include "trainer_hill.h" +#include "test_runner.h" static void OpponentHandleLoadMonSprite(u32 battler); static void OpponentHandleSwitchInAnim(u32 battler); @@ -559,10 +560,15 @@ static void OpponentHandleChooseMove(u32 battler) } if (ShouldUseZMove(battler, gBattlerTarget, chosenMove)) QueueZMove(battler, chosenMove); - if (CanMegaEvolve(battler)) // If opponent can mega evolve, do it. + // 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 on final Pokemon, do it. + else if (CanDynamax(battler) && CountAIAliveNonEggMonsExcept(gBattlerPartyIndexes[battler]) == 0) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_DYNAMAX) | (gBattlerTarget << 8)); else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } @@ -589,9 +595,8 @@ static void OpponentHandleChooseMove(u32 battler) target = GetBattlerAtPosition(Random() & 2); } while (!CanTargetBattler(battler, target, move)); - #if B_WILD_NATURAL_ENEMIES == TRUE // Don't bother to loop through table if the move can't attack ally - if (!(gBattleMoves[move].target & MOVE_TARGET_BOTH)) + if (B_WILD_NATURAL_ENEMIES == TRUE && !(gBattleMoves[move].target & MOVE_TARGET_BOTH)) { u16 i, speciesAttacker, speciesTarget, isPartnerEnemy = FALSE; static const u16 naturalEnemies[][2] = @@ -621,8 +626,9 @@ static void OpponentHandleChooseMove(u32 battler) BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (target << 8)); } else - #endif + { BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (target << 8)); + } } else BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); @@ -650,7 +656,7 @@ static void OpponentHandleChoosePokemon(u32 battler) // Switching out else if (*(gBattleStruct->AI_monToSwitchIntoId + battler) == PARTY_SIZE) { - chosenMonId = GetMostSuitableMonToSwitchInto(battler); + chosenMonId = GetMostSuitableMonToSwitchInto(battler, TRUE); if (chosenMonId == PARTY_SIZE) { s32 battler1, battler2, firstId, lastId; @@ -689,6 +695,9 @@ static void OpponentHandleChoosePokemon(u32 battler) *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; } + #if TESTING + TestRunner_Battle_CheckSwitch(battler, chosenMonId); + #endif // TESTING BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, chosenMonId, NULL); OpponentBufferExecCompleted(battler); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 516e299b43..48ab691dfa 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -202,7 +202,7 @@ static void CompleteOnBattlerSpritePosX_0(u32 battler) static u16 GetPrevBall(u16 ballId) { u16 ballPrev; - u32 i, j; + s32 i, j; CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++) { @@ -218,28 +218,29 @@ static u16 GetPrevBall(u16 ballId) } } i--; - return gBagPockets[BALLS_POCKET].itemSlots[i].itemId; + break; } } + return gBagPockets[BALLS_POCKET].itemSlots[i].itemId; } static u16 GetNextBall(u16 ballId) { - u16 ballNext; - u32 i; + u16 ballNext = 0; + s32 i; CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++) { if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i].itemId) { - i++; - ballNext = gBagPockets[BALLS_POCKET].itemSlots[i].itemId; - if (ballNext == ITEM_NONE) - return gBagPockets[BALLS_POCKET].itemSlots[0].itemId; // Zeroth slot - else - return ballNext; + ballNext = gBagPockets[BALLS_POCKET].itemSlots[i+1].itemId; + break; } } + if (ballNext == ITEM_NONE) + return gBagPockets[BALLS_POCKET].itemSlots[0].itemId; // Zeroth slot + else + return ballNext; } static void HandleInputChooseAction(u32 battler) @@ -388,6 +389,16 @@ static void HandleInputChooseAction(u32 battler) BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_CANCEL_PARTNER, 0); PlayerBufferExecCompleted(battler); } + else if (B_QUICK_MOVE_CURSOR_TO_RUN) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) // If wild battle, pressing B moves cursor to "Run". + { + PlaySE(SE_SELECT); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] = 3; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); + } + } } else if (JOY_NEW(START_BUTTON)) { @@ -438,6 +449,8 @@ static void HandleInputChooseTarget(u32 battler) 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 BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); @@ -598,6 +611,8 @@ static void HandleInputShowEntireFieldTargets(u32 battler) 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 BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideTriggerSprites(); @@ -628,6 +643,8 @@ static void HandleInputShowTargets(u32 battler) 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 BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideTriggerSprites(); @@ -689,6 +706,10 @@ static void HandleInputChooseMove(u32 battler) 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)) + moveTarget = gBattleMoves[GetMaxMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]])].target; + if (moveTarget & MOVE_TARGET_USER) gMultiUsePlayerCursor = battler; else @@ -716,25 +737,26 @@ static void HandleInputChooseMove(u32 battler) canSelectTarget = 0; } - #if B_SHOW_TARGETS == TRUE - // Show all available targets for multi-target moves - if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS) + if (B_SHOW_TARGETS == TRUE) { - u32 i = 0; - for (i = 0; i < gBattlersCount; i++) - TryShowAsTarget(i); + // Show all available targets for multi-target moves + if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS) + { + u32 i = 0; + for (i = 0; i < gBattlersCount; i++) + TryShowAsTarget(i); - canSelectTarget = 3; + canSelectTarget = 3; + } + else if (moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + { + TryShowAsTarget(gMultiUsePlayerCursor); + TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor)); + if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) + TryShowAsTarget(BATTLE_PARTNER(battler)); + canSelectTarget = 2; + } } - else if (moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) - { - TryShowAsTarget(gMultiUsePlayerCursor); - TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor)); - if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) - TryShowAsTarget(BATTLE_PARTNER(battler)); - canSelectTarget = 2; - } - #endif } switch (canSelectTarget) @@ -745,6 +767,8 @@ static void HandleInputChooseMove(u32 battler) 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 BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideTriggerSprites(); @@ -782,6 +806,7 @@ static void HandleInputChooseMove(u32 battler) { gBattleStruct->mega.playerSelect = FALSE; gBattleStruct->burst.playerSelect = FALSE; + gBattleStruct->dynamax.playerSelect = FALSE; gBattleStruct->zmove.viable = FALSE; BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF); HideTriggerSprites(); @@ -882,6 +907,14 @@ static void HandleInputChooseMove(u32 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); + } } } @@ -889,6 +922,7 @@ static void ReloadMoveNames(u32 battler) { gBattleStruct->mega.playerSelect = FALSE; gBattleStruct->burst.playerSelect = FALSE; + gBattleStruct->dynamax.playerSelect = FALSE; gBattleStruct->zmove.viewing = FALSE; MoveSelectionDestroyCursorAt(battler); MoveSelectionDisplayMoveNames(battler); @@ -1413,7 +1447,18 @@ static void Task_GiveExpToMon(u8 taskId) if (currExp + gainedExp >= nextLvlExp) { SetMonData(mon, MON_DATA_EXP, &nextLvlExp); + gBattleStruct->dynamax.levelUpHP = GetMonData(mon, MON_DATA_HP) \ + + UQ_4_12_TO_INT((gBattleScripting.levelUpHP * UQ_4_12(1.5)) + UQ_4_12_ROUND); CalculateMonStats(mon); + + // Reapply Dynamax HP multiplier after stats are recalculated. + if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler]) + { + ApplyDynamaxHPMultiplier(battler, mon); + gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP; + SetMonData(mon, MON_DATA_HP, &gBattleMons[battler].hp); + } + gainedExp -= nextLvlExp - currExp; BtlController_EmitTwoReturnValues(battler, BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); @@ -1486,7 +1531,18 @@ static void Task_GiveExpWithExpBar(u8 taskId) if (currExp + gainedExp >= expOnNextLvl) { SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl); + gBattleStruct->dynamax.levelUpHP = GetMonData(&gPlayerParty[monId], MON_DATA_HP) \ + + UQ_4_12_TO_INT((gBattleScripting.levelUpHP * UQ_4_12(1.5)) + UQ_4_12_ROUND); CalculateMonStats(&gPlayerParty[monId]); + + // Reapply Dynamax HP multiplier after stats are recalculated. + if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler]) + { + ApplyDynamaxHPMultiplier(battler, &gPlayerParty[monId]); + gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP; + SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleMons[battler].hp); + } + gainedExp -= expOnNextLvl - currExp; BtlController_EmitTwoReturnValues(battler, BUFFER_B, RET_VALUE_LEVELED_UP, gainedExp); gTasks[taskId].func = Task_LaunchLvlUpAnim; @@ -1633,7 +1689,11 @@ static void MoveSelectionDisplayMoveNames(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { MoveSelectionDestroyCursorAt(i); - StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]); + if ((gBattleStruct->dynamax.playerSelect && CanDynamax(battler)) + || IsDynamaxed(battler)) + StringCopy(gDisplayedStringBattle, gMoveNames[GetMaxMove(battler, moveInfo->moves[i])]); + else + StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]); // Prints on windows B_WIN_MOVE_NAME_1, B_WIN_MOVE_NAME_2, B_WIN_MOVE_NAME_3, B_WIN_MOVE_NAME_4 BattlePutTextOnWindow(gDisplayedStringBattle, i + B_WIN_MOVE_NAME_1); if (moveInfo->moves[i] != MOVE_NONE) @@ -1788,7 +1848,7 @@ static void PlayerHandleDrawTrainerPic(u32 battler) { bool32 isFrontPic; s16 xPos, yPos; - u32 trainerPicId, gender; + u32 trainerPicId; trainerPicId = PlayerGetTrainerBackPicId(); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) @@ -1977,6 +2037,7 @@ static void PlayerHandleChooseMove(u32 battler) InitMoveSelectionsVarsAndStrings(battler); gBattleStruct->mega.playerSelect = FALSE; gBattleStruct->burst.playerSelect = FALSE; + gBattleStruct->dynamax.playerSelect = FALSE; if (!IsMegaTriggerSpriteActive()) gBattleStruct->mega.triggerSpriteId = 0xFF; if (CanMegaEvolve(battler)) @@ -1985,6 +2046,10 @@ static void PlayerHandleChooseMove(u32 battler) 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; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 361460ac72..f56c14a076 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -399,7 +399,7 @@ static void PlayerPartnerHandleChoosePokemon(u32 battler) // Switching out else if (gBattleStruct->monToSwitchIntoId[battler] >= PARTY_SIZE || !IsValidForBattle(&gPlayerParty[gBattleStruct->monToSwitchIntoId[battler]])) { - chosenMonId = GetMostSuitableMonToSwitchInto(battler); + chosenMonId = GetMostSuitableMonToSwitchInto(battler, TRUE); if (chosenMonId == PARTY_SIZE || !IsValidForBattle(&gPlayerParty[chosenMonId])) // just switch to the next mon { diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 11f0fec8c5..58ef101ec9 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -437,25 +437,7 @@ static void RecordedOpponentHandleMoveAnimation(u32 battler) static void RecordedOpponentHandlePrintString(u32 battler) { - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); - BufferStringBattle(*stringId, battler); - - if (gTestRunnerEnabled) - { - TestRunner_Battle_RecordMessage(gDisplayedStringBattle); - if (gTestRunnerHeadless) - { - RecordedOpponentBufferExecCompleted(battler); - return; - } - } - - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[battler] = Controller_WaitForString; + BtlController_HandlePrintString(battler, FALSE, FALSE); } static void RecordedOpponentHandleChooseAction(u32 battler) diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index f372c0ff88..39e869867e 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -427,25 +427,7 @@ static void RecordedPlayerHandleMoveAnimation(u32 battler) static void RecordedPlayerHandlePrintString(u32 battler) { - u16 *stringId; - - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); - BufferStringBattle(*stringId, battler); - - if (gTestRunnerEnabled) - { - TestRunner_Battle_RecordMessage(gDisplayedStringBattle); - if (gTestRunnerHeadless) - { - RecordedPlayerBufferExecCompleted(battler); - return; - } - } - - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); - gBattlerControllerFuncs[battler] = Controller_WaitForString; + BtlController_HandlePrintString(battler, FALSE, FALSE); } static void ChooseActionInBattlePalace(u32 battler) diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 2069082d8c..b5a64c286b 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -184,6 +184,13 @@ static void HandleInputChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); } } + else if (B_QUICK_MOVE_CURSOR_TO_RUN && JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[battler]); + gActionSelectionCursor[battler] = 3; + ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); + } } static void Controller_WaitForHealthbox(u32 battler) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index a26e6afb8d..885e9394bb 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1508,13 +1508,14 @@ void BtlController_EmitSpriteInvisibility(u32 battler, u32 bufferId, bool8 isInv PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 4); } -void BtlController_EmitBattleAnimation(u32 battler, u32 bufferId, u8 animationId, u16 argument) +void BtlController_EmitBattleAnimation(u32 battler, u32 bufferId, u8 animationId, struct DisableStruct* disableStructPtr, u16 argument) { gBattleResources->transferBuffer[0] = CONTROLLER_BATTLEANIMATION; gBattleResources->transferBuffer[1] = animationId; gBattleResources->transferBuffer[2] = argument; gBattleResources->transferBuffer[3] = (argument & 0xFF00) >> 8; - PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 4); + memcpy(&gBattleResources->transferBuffer[4], disableStructPtr, sizeof(struct DisableStruct)); + PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 4 + sizeof(struct DisableStruct)); } // mode is a LINK_STANDBY_* constant @@ -2664,6 +2665,17 @@ void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 ar gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleResources->bufferA[battler][2]); BufferStringBattle(*stringId, battler); + + if (gTestRunnerEnabled) + { + TestRunner_Battle_RecordMessage(gDisplayedStringBattle); + if (gTestRunnerHeadless) + { + BattleControllerComplete(battler); + return; + } + } + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[battler] = Controller_WaitForString; if (updateTvData) @@ -3024,6 +3036,8 @@ void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 up u8 animationId = gBattleResources->bufferA[battler][1]; u16 argument = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[battler][4]; + if (TryHandleLaunchBattleTableAnimation(battler, battler, battler, animationId, argument)) BattleControllerComplete(battler); else diff --git a/src/battle_debug.c b/src/battle_debug.c index 110a6c1165..3fca57e38f 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -153,6 +153,7 @@ enum LIST_SIDE_STEALTH_ROCK, LIST_SIDE_TOXIC_SPIKES, LIST_SIDE_STICKY_WEB, + LIST_SIDE_STEELSURGE, }; enum @@ -228,6 +229,7 @@ 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_Steelsurge[] = _("Steelsurge"); static const u8 sText_AI[] = _("AI"); static const u8 sText_NoBadMoves[] = _("No Bad Moves"); static const u8 sText_Viability[] = _("Viability"); @@ -455,6 +457,7 @@ static const struct ListMenuItem sSideStatusListItems[] = {sText_StealthRock, LIST_SIDE_STEALTH_ROCK}, {sText_ToxicSpikes, LIST_SIDE_TOXIC_SPIKES}, {sText_StickyWeb, LIST_SIDE_STICKY_WEB}, + {sText_Steelsurge, LIST_SIDE_STEELSURGE}, }; static const struct ListMenuItem sSecondaryListItems[] = @@ -716,7 +719,7 @@ void CB2_BattleDebugMenu(void) data->currentMainListItemId = 0; data->activeWindow = ACTIVE_WIN_MAIN; data->secondaryListTaskId = 0xFF; - CopyWindowToVram(data->mainListWindowId, 3); + CopyWindowToVram(data->mainListWindowId, COPYWIN_FULL); gMain.state++; break; case 5: @@ -737,7 +740,7 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) { text[0] = CHAR_SPACE; StringCopy(text + 1, gMoveNames[gBattleMons[data->aiBattlerId].moves[i]]); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 0, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 0, i * 15, 0, NULL); for (count = 0, j = 0; j < MAX_BATTLERS_COUNT; j++) { if (data->spriteIds.aiIconSpriteIds[j] == 0xFF) @@ -746,18 +749,18 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) ConvertIntToDecimalStringN(text, gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 83 + count * 54, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL); ConvertIntToDecimalStringN(text, AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 110 + count * 54, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL); count++; } } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -841,7 +844,7 @@ static const u8 *const sAiInfoItemNames[] = static void PutAiInfoText(struct BattleDebugMenu *data) { - u32 i, j, count; + u32 i; u8 *text = Alloc(0x50); FillWindowPixelBuffer(data->aiMovesWindowId, 0x11); @@ -849,7 +852,7 @@ static void PutAiInfoText(struct BattleDebugMenu *data) // item names for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++) { - AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, sAiInfoItemNames[i], 3, i * 15, 0, NULL); } // items info @@ -861,13 +864,13 @@ static void PutAiInfoText(struct BattleDebugMenu *data) u16 holdEffect = AI_DATA->holdEffects[i]; u16 item = AI_DATA->items[i]; u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75; - AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL); - AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL); - AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, gAbilityNames[ability], x, 0, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, ItemId_GetName(item), x, 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, GetHoldEffectName(holdEffect), x, 30, 0, NULL); } } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -914,7 +917,7 @@ static void PutAiPartyText(struct BattleDebugMenu *data) AddTextPrinterParameterized5(data->aiMovesWindowId, FONT_SMALL_NARROW, text, i * 41, 35 + (j + 1) * 15, 0, NULL, 0, 0); } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -1177,7 +1180,7 @@ static void Task_DebugMenuProcessInput(u8 taskId) data->currentSecondaryListItemId = listItemId; data->modifyWindowId = AddWindow(&sModifyWindowTemplate); PutWindowTilemap(data->modifyWindowId); - CopyWindowToVram(data->modifyWindowId, 3); + CopyWindowToVram(data->modifyWindowId, COPYWIN_FULL); SetUpModifyArrows(data); PrintDigitChars(data); data->activeWindow = ACTIVE_WIN_MODIFY; @@ -1261,8 +1264,8 @@ static void PrintOnBattlerWindow(u8 windowId, u8 battlerId) StringCopy(&text[4], gBattleMons[battlerId].nickname); FillWindowPixelBuffer(windowId, 0x11); - AddTextPrinterParameterized(windowId, 1, text, 0, 0, 0, NULL); - CopyWindowToVram(windowId, 3); + AddTextPrinterParameterized(windowId, FONT_NORMAL, text, 0, 0, 0, NULL); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data) @@ -1368,7 +1371,7 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) listTemplate.windowId = data->secondaryListWindowId; data->secondaryListTaskId = ListMenuInit(&listTemplate, 0, 0); - CopyWindowToVram(data->secondaryListWindowId, 3); + CopyWindowToVram(data->secondaryListWindowId, COPYWIN_FULL); } static void PadString(const u8 *src, u8 *dst) @@ -1497,7 +1500,7 @@ static void PrintDigitChars(struct BattleDebugMenu *data) text[i] = EOS; - AddTextPrinterParameterized(data->modifyWindowId, 1, text, 3, 0, 0, NULL); + AddTextPrinterParameterized(data->modifyWindowId, FONT_NORMAL, text, 3, 0, 0, NULL); } static const u32 GetBitfieldToAndValue(u32 currBit, u32 bitsCount) @@ -1736,6 +1739,15 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB; } return &sideTimer->stickyWebAmount; + case LIST_SIDE_STEELSURGE: + if (changeStatus) + { + if (statusTrue) + *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEELSURGE; + else + *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEELSURGE; + } + return &sideTimer->steelsurgeAmount; default: return NULL; } diff --git a/src/battle_dome.c b/src/battle_dome.c index ad7c60dd1c..24bad30f6b 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2796,7 +2796,6 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) { int defType1, defType2, defAbility, moveType; - int i = 0; int typePower = TYPE_x1; if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || IS_MOVE_STATUS(move)) @@ -6017,7 +6016,7 @@ static void DecideRoundWinners(u8 roundId) gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); } // Frontier Brain always wins, check tournamentId2. - else if (DOME_TRAINERS[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) + else if (tournamentId2 != 0xFF && DOME_TRAINERS[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) { DOME_TRAINERS[tournamentId1].isEliminated = TRUE; DOME_TRAINERS[tournamentId1].eliminatedAt = roundId; diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c new file mode 100644 index 0000000000..a9370a4ab5 --- /dev/null +++ b/src/battle_dynamax.c @@ -0,0 +1,1297 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_scripts.h" +#include "battle_script_commands.h" +#include "data.h" +#include "event_data.h" +#include "graphics.h" +#include "item.h" +#include "pokemon.h" +#include "random.h" +#include "sprite.h" +#include "string_util.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/battle_string_ids.h" +#include "constants/flags.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" + +static u8 GetMaxPowerTier(u16 move); + +// Constant Data +static const u16 sMaxMoveTable[NUMBER_OF_MON_TYPES] = +{ + [TYPE_NORMAL] = MOVE_MAX_STRIKE, + [TYPE_FIGHTING] = MOVE_MAX_KNUCKLE, + [TYPE_FLYING] = MOVE_MAX_AIRSTREAM, + [TYPE_POISON] = MOVE_MAX_OOZE, + [TYPE_GROUND] = MOVE_MAX_QUAKE, + [TYPE_ROCK] = MOVE_MAX_ROCKFALL, + [TYPE_BUG] = MOVE_MAX_FLUTTERBY, + [TYPE_GHOST] = MOVE_MAX_PHANTASM, + [TYPE_STEEL] = MOVE_MAX_STEELSPIKE, + [TYPE_FIRE] = MOVE_MAX_FLARE, + [TYPE_WATER] = MOVE_MAX_GEYSER, + [TYPE_GRASS] = MOVE_MAX_OVERGROWTH, + [TYPE_ELECTRIC] = MOVE_MAX_LIGHTNING, + [TYPE_PSYCHIC] = MOVE_MAX_MINDSTORM, + [TYPE_ICE] = MOVE_MAX_HAILSTORM, + [TYPE_DRAGON] = MOVE_MAX_WYRMWIND, + [TYPE_DARK] = MOVE_MAX_DARKNESS, + [TYPE_FAIRY] = MOVE_MAX_STARFALL, +}; + +struct GMaxMove +{ + u16 species; + u8 moveType; + u16 gmaxMove; +}; + +static const struct GMaxMove sGMaxMoveTable[] = +{ + {SPECIES_VENUSAUR_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_VINE_LASH}, + {SPECIES_BLASTOISE_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_CANNONADE}, + {SPECIES_CHARIZARD_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_WILDFIRE}, + {SPECIES_BUTTERFREE_GIGANTAMAX, TYPE_BUG, MOVE_G_MAX_BEFUDDLE}, + {SPECIES_PIKACHU_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_VOLT_CRASH}, + {SPECIES_MEOWTH_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_GOLD_RUSH}, + {SPECIES_MACHAMP_GIGANTAMAX, TYPE_FIGHTING, MOVE_G_MAX_CHI_STRIKE}, + {SPECIES_GENGAR_GIGANTAMAX, TYPE_GHOST, MOVE_G_MAX_TERROR}, + {SPECIES_KINGLER_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_FOAM_BURST}, + {SPECIES_LAPRAS_GIGANTAMAX, TYPE_ICE, MOVE_G_MAX_RESONANCE}, + {SPECIES_EEVEE_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_CUDDLE}, + {SPECIES_SNORLAX_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_REPLENISH}, + {SPECIES_GARBODOR_GIGANTAMAX, TYPE_POISON, MOVE_G_MAX_MALODOR}, + {SPECIES_MELMETAL_GIGANTAMAX, TYPE_STEEL, MOVE_G_MAX_MELTDOWN}, + {SPECIES_RILLABOOM_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_DRUM_SOLO}, + {SPECIES_CINDERACE_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_FIREBALL}, + {SPECIES_INTELEON_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_HYDROSNIPE}, + {SPECIES_CORVIKNIGHT_GIGANTAMAX, TYPE_FLYING, MOVE_G_MAX_WIND_RAGE}, + {SPECIES_ORBEETLE_GIGANTAMAX, TYPE_PSYCHIC, MOVE_G_MAX_GRAVITAS}, + {SPECIES_DREDNAW_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_STONESURGE}, + {SPECIES_COALOSSAL_GIGANTAMAX, TYPE_ROCK, MOVE_G_MAX_VOLCALITH}, + {SPECIES_FLAPPLE_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_TARTNESS}, + {SPECIES_APPLETUN_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_SWEETNESS}, + {SPECIES_SANDACONDA_GIGANTAMAX, TYPE_GROUND, MOVE_G_MAX_SANDBLAST}, + {SPECIES_TOXTRICITY_AMPED_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, + {SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, + {SPECIES_CENTISKORCH_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_CENTIFERNO}, + {SPECIES_HATTERENE_GIGANTAMAX, TYPE_FAIRY, MOVE_G_MAX_SMITE}, + {SPECIES_GRIMMSNARL_GIGANTAMAX, TYPE_DARK, MOVE_G_MAX_SNOOZE}, + {SPECIES_ALCREMIE_GIGANTAMAX, TYPE_FAIRY, MOVE_G_MAX_FINALE}, + {SPECIES_COPPERAJAH_GIGANTAMAX, TYPE_STEEL, MOVE_G_MAX_STEELSURGE}, + {SPECIES_DURALUDON_GIGANTAMAX, TYPE_DRAGON, MOVE_G_MAX_DEPLETION}, + {SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX,TYPE_DARK, MOVE_G_MAX_ONE_BLOW}, + {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) +{ + 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; + + + // 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; + + // Check if species isn't allowed to Dynamax. + if (GET_BASE_SPECIES_ID(species) == SPECIES_ZACIAN + || GET_BASE_SPECIES_ID(species) == SPECIES_ZAMAZENTA + || 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) + 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)]) + 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) + // return FALSE; + + // No checks failed, all set! + return TRUE; +} + +// Returns whether a battler is transformed into a Gigantamax form. +bool32 IsGigantamaxed(u16 battlerId) +{ + // TODO: Incorporate Gigantamax factor. + if ((gSpeciesInfo[gBattleMons[battlerId].species].gigantamax)) + return TRUE; + return FALSE; +} + +// Applies the HP Multiplier for Dynamaxed Pokemon and Raid Bosses. +void ApplyDynamaxHPMultiplier(u32 battler, struct Pokemon* mon) +{ + if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA) + return; + else + { + u16 mult = UQ_4_12(1.5); // placeholder + u16 hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult) + UQ_4_12_ROUND); + u16 maxHP = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_MAX_HP) * mult) + UQ_4_12_ROUND); + SetMonData(mon, MON_DATA_HP, &hp); + SetMonData(mon, MON_DATA_MAX_HP, &maxHP); + } +} + +// Returns the non-Dynamax HP of a Pokemon. +u16 GetNonDynamaxHP(u16 battlerId) +{ + if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA) + return gBattleMons[battlerId].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); + return hp; + } +} + +// Returns the non-Dynamax Max HP of a Pokemon. +u16 GetNonDynamaxMaxHP(u32 battlerId) +{ + if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA) + return gBattleMons[battlerId].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); + return maxHP; + } +} + +// Sets flags used for Dynamaxing and checks Gigantamax forms. +void PrepareBattlerForDynamax(u16 battlerId) +{ + u8 side = GetBattlerSide(battlerId); + + gBattleStruct->dynamax.alreadyDynamaxed[side] = TRUE; + gBattleStruct->dynamax.dynamaxed[battlerId] = TRUE; + gBattleStruct->dynamax.dynamaxTurns[battlerId] = DYNAMAX_TURNS_COUNT; + + // Substitute is removed upon Dynamaxing. + gBattleMons[battlerId].status2 &= ~STATUS2_SUBSTITUTE; + ClearBehindSubstituteBit(battlerId); + + // Choiced Moves are reset upon Dynamaxing. + gBattleStruct->choicedMove[battlerId] = MOVE_NONE; + + // Try Gigantamax form change. + if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax. + TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX); +} + +// Unsets the flags used for Dynamaxing and reverts max HP if needed. +void UndoDynamax(u16 battlerId) +{ + u8 side = GetBattlerSide(battlerId); + u8 monId = gBattlerPartyIndexes[battlerId]; + + // Revert HP if battler is still Dynamaxed. + if (IsDynamaxed(battlerId)) + { + 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); + } + + // Makes sure there are no Dynamax flags set, including on switch / faint. + gBattleStruct->dynamax.dynamaxed[battlerId] = FALSE; + gBattleStruct->dynamax.dynamaxTurns[battlerId] = 0; + + // Undo form change if needed. + if (IsGigantamaxed(battlerId)) + TryBattleFormChange(battlerId, FORM_CHANGE_END_BATTLE); +} + +// Certain moves are blocked by Max Guard that normally ignore protection. +bool32 IsMoveBlockedByMaxGuard(u16 move) +{ + switch (move) + { + case MOVE_BLOCK: + case MOVE_FLOWER_SHIELD: + case MOVE_GEAR_UP: + case MOVE_MAGNETIC_FLUX: + case MOVE_PHANTOM_FORCE: + case MOVE_PSYCH_UP: + case MOVE_SHADOW_FORCE: + case MOVE_TEATIME: + case MOVE_TRANSFORM: + return TRUE; + } + return FALSE; +} + +// Weight-based moves (and some other moves in Raids) are blocked by Dynamax. +bool32 IsMoveBlockedByDynamax(u16 move) +{ + // TODO: Certain moves are banned in raids. + switch (gBattleMoves[move].effect) + { + case EFFECT_HEAT_CRASH: + case EFFECT_LOW_KICK: + return TRUE; + } + 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) +{ + // Gigantamax check + u32 i; + u16 species = gBattleMons[battlerId].species; + u16 targetSpecies = SPECIES_NONE; + + if (!gSpeciesInfo[species].gigantamax) + targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX); + + if (targetSpecies != SPECIES_NONE) + species = targetSpecies; + + if (gSpeciesInfo[species].gigantamax) + { + for (i = 0; i < ARRAY_COUNT(sGMaxMoveTable); i++) + { + if (sGMaxMoveTable[i].species == species && sGMaxMoveTable[i].moveType == type) + return sGMaxMoveTable[i].gmaxMove; + } + } + + // Regular Max Move + if (sMaxMoveTable[type] == MOVE_NONE) // failsafe + return sMaxMoveTable[0]; + return sMaxMoveTable[type]; +} + +// Returns the appropriate Max Move or G-Max Move for a battler to use. +u16 GetMaxMove(u16 battlerId, u16 baseMove) +{ + u16 move = baseMove; + if (baseMove == MOVE_NONE) // for move display + { + return MOVE_NONE; + } + else if (baseMove == MOVE_STRUGGLE) + { + return MOVE_STRUGGLE; + } + else if (gBattleMoves[baseMove].split == SPLIT_STATUS) + { + move = MOVE_MAX_GUARD; + } + else if (gBattleStruct->dynamicMoveType) + { + move = GetTypeBasedMaxMove(battlerId, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK); + gBattleStruct->dynamax.splits[battlerId] = gBattleMoves[baseMove].split; + } + else + { + move = GetTypeBasedMaxMove(battlerId, gBattleMoves[baseMove].type); + gBattleStruct->dynamax.splits[battlerId] = gBattleMoves[baseMove].split; + } + + return move; +} + +// First value is for Fighting, Poison and Multi-Attack. The second is for everything else. +enum +{ + MAX_POWER_TIER_1, // 70 or 90 damage + MAX_POWER_TIER_2, // 75 or 100 damage + MAX_POWER_TIER_3, // 80 or 110 damage + MAX_POWER_TIER_4, // 85 or 120 damage + MAX_POWER_TIER_5, // 90 or 130 damage + MAX_POWER_TIER_6, // 95 or 140 damage + MAX_POWER_TIER_7, // 100 or 130 damage + MAX_POWER_TIER_8, // 100 or 150 damage +}; + +// Gets the base power of a Max Move. +u8 GetMaxMovePower(u16 move) +{ + u8 tier; + // G-Max Drum Solo, G-Max Hydrosnipe, and G-Max Fireball always have 160 base power. + if (gBattleMoves[GetMaxMove(gBattlerAttacker, move)].argument == MAX_EFFECT_FIXED_POWER) + return 160; + + // Exceptions to all other rules below: + switch (move) + { + case MOVE_TRIPLE_KICK: return 80; + case MOVE_GEAR_GRIND: return 100; + case MOVE_DUAL_WINGBEAT: return 100; + case MOVE_TRIPLE_AXEL: return 140; + } + + tier = GetMaxPowerTier(move); + if (gBattleMoves[move].type == TYPE_FIGHTING + || gBattleMoves[move].type == TYPE_POISON + || move == MOVE_MULTI_ATTACK) + { + switch (tier) + { + default: + case MAX_POWER_TIER_1: return 70; + case MAX_POWER_TIER_2: return 75; + case MAX_POWER_TIER_3: return 80; + case MAX_POWER_TIER_4: return 85; + case MAX_POWER_TIER_5: return 90; + case MAX_POWER_TIER_6: return 95; + case MAX_POWER_TIER_7: return 100; + case MAX_POWER_TIER_8: return 100; + } + } + else + { + switch (tier) + { + default: + case MAX_POWER_TIER_1: return 90; + case MAX_POWER_TIER_2: return 100; + case MAX_POWER_TIER_3: return 110; + case MAX_POWER_TIER_4: return 120; + case MAX_POWER_TIER_5: return 130; + case MAX_POWER_TIER_6: return 140; + case MAX_POWER_TIER_7: return 130; + case MAX_POWER_TIER_8: return 150; + } + } +} + +static u8 GetMaxPowerTier(u16 move) +{ + if (gBattleMoves[move].strikeCount >= 2 && gBattleMoves[move].strikeCount <= 5) + { + switch(gBattleMoves[move].power) + { + case 0 ... 25: return MAX_POWER_TIER_2; + case 26 ... 30: return MAX_POWER_TIER_3; + case 31 ... 35: return MAX_POWER_TIER_4; + case 36 ... 50: return MAX_POWER_TIER_5; + default: + case 51 ... 60: return MAX_POWER_TIER_6; + } + } + + switch (gBattleMoves[move].effect) + { + case EFFECT_BIDE: + case EFFECT_SUPER_FANG: + case EFFECT_LEVEL_DAMAGE: + case EFFECT_PSYWAVE: + case EFFECT_COUNTER: + case EFFECT_PRESENT: + case EFFECT_BEAT_UP: + case EFFECT_WEATHER_BALL: + case EFFECT_FLING: + case EFFECT_ELECTRO_BALL: + case EFFECT_METAL_BURST: + case EFFECT_TERRAIN_PULSE: + case EFFECT_PUNISHMENT: + case EFFECT_TRUMP_CARD: + case EFFECT_SONICBOOM: + case EFFECT_SPIT_UP: + case EFFECT_NATURAL_GIFT: + case EFFECT_MIRROR_COAT: + case EFFECT_DRAGON_RAGE: + case EFFECT_FINAL_GAMBIT: + //case EFFECT_DRAGON_DARTS: + return MAX_POWER_TIER_2; + case EFFECT_OHKO: + case EFFECT_RETURN: + case EFFECT_FRUSTRATION: + case EFFECT_HEAT_CRASH: + case EFFECT_STORED_POWER: + case EFFECT_GYRO_BALL: + return MAX_POWER_TIER_5; + case EFFECT_MAGNITUDE: + case EFFECT_WRING_OUT: + return MAX_POWER_TIER_6; + case EFFECT_FLAIL: + case EFFECT_LOW_KICK: + return MAX_POWER_TIER_7; + case EFFECT_MULTI_HIT: + switch(gBattleMoves[move].power) + { + case 0 ... 15: return MAX_POWER_TIER_1; + case 16 ... 18: return MAX_POWER_TIER_2; + case 19 ... 20: return MAX_POWER_TIER_4; + default: + case 21 ... 25: return MAX_POWER_TIER_5; + } + } + + switch (gBattleMoves[move].power) + { + case 0 ... 40: return MAX_POWER_TIER_1; + case 45 ... 50: return MAX_POWER_TIER_2; + case 55 ... 60: return MAX_POWER_TIER_3; + case 65 ... 70: return MAX_POWER_TIER_4; + case 75 ... 100: return MAX_POWER_TIER_5; + case 110 ... 140: return MAX_POWER_TIER_6; + default: + case 150 ... 250: return MAX_POWER_TIER_8; + } +} + +// Returns whether a move is a Max Move or not. +bool32 IsMaxMove(u16 move) +{ + return move >= FIRST_MAX_MOVE && move <= LAST_MAX_MOVE; +} + +// Returns the full name of a Max Move for the move usage text. +const u8 *GetMaxMoveName(u16 move) +{ + if (IsMaxMove(move)) + return gMaxMoveNames[move - FIRST_MAX_MOVE]; + else + return gMaxMoveNames[0]; // Failsafe +} + +// Assigns the multistring to use for the "Damage Non- Types" G-Max effect. +void ChooseDamageNonTypesString(u8 type) +{ + switch (type) + { + case TYPE_GRASS: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRAPPED_WITH_VINES; + break; + case TYPE_WATER: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CAUGHT_IN_VORTEX; + break; + case TYPE_FIRE: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SURROUNDED_BY_FIRE; + break; + case TYPE_ROCK: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SURROUNDED_BY_ROCKS; + break; + } +} + +// Returns the status effect that should be applied by a G-Max Move. +static u32 GetMaxMoveStatusEffect(u16 move) +{ + u8 maxEffect = gBattleMoves[move].argument; + switch (maxEffect) + { + // Status 1 + case MAX_EFFECT_PARALYZE_FOES: + return STATUS1_PARALYSIS; + case MAX_EFFECT_POISON_FOES: + return STATUS1_POISON; + case MAX_EFFECT_POISON_PARALYZE_FOES: + { + static const u8 sStunShockEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON}; + return RandomElement(RNG_G_MAX_STUN_SHOCK, sStunShockEffects); + } + case MAX_EFFECT_EFFECT_SPORE_FOES: + { + static const u8 sBefuddleEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON, STATUS1_SLEEP}; + return RandomElement(RNG_G_MAX_BEFUDDLE, sBefuddleEffects); + } + // Status 2 + case MAX_EFFECT_CONFUSE_FOES: + case MAX_EFFECT_CONFUSE_FOES_PAY_DAY: + return STATUS2_CONFUSION; + case MAX_EFFECT_INFATUATE_FOES: + return STATUS2_INFATUATION; + case MAX_EFFECT_MEAN_LOOK: + return STATUS2_ESCAPE_PREVENTION; + case MAX_EFFECT_TORMENT_FOES: + return STATUS2_TORMENT; + default: + return STATUS1_NONE; + } +} + +// CALLNATIVE FUNCTIONS +#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd = (const void *)gBattlescriptCurrInstr +#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__) + +#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__) +#define MEMBERS_0() +#define MEMBERS_1(a) a; +#define MEMBERS_2(a, b) a; b; +#define MEMBERS_3(a, b, c) a; b; c; +#define MEMBERS_4(a, b, c, d) a; b; c; d; +#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e; +#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f; +#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g; +#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h; + +// Updates Dynamax HP multipliers and healthboxes. +void BS_UpdateDynamax(void) +{ + NATIVE_ARGS(); + u16 battler = gBattleScripting.battler; + struct Pokemon *mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]]; + + if (!IsGigantamaxed(battler)) // RecalcBattlerStats will get called on form change. + RecalcBattlerStats(battler, mon); + + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +// Activates the secondary effect of a Max Move. +void BS_SetMaxMoveEffect(void) +{ + NATIVE_ARGS(); + u16 effect = 0; + u8 maxEffect = gBattleMoves[gCurrentMove].argument; + + // Don't continue if the move didn't land. + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + + switch (maxEffect) + { + case MAX_EFFECT_RAISE_TEAM_ATTACK: + case MAX_EFFECT_RAISE_TEAM_DEFENSE: + case MAX_EFFECT_RAISE_TEAM_SPEED: + case MAX_EFFECT_RAISE_TEAM_SP_ATK: + case MAX_EFFECT_RAISE_TEAM_SP_DEF: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(gBattleMoves[gCurrentMove].argument, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + effect++; + } + break; + case MAX_EFFECT_LOWER_ATTACK: + case MAX_EFFECT_LOWER_DEFENSE: + case MAX_EFFECT_LOWER_SPEED: + case MAX_EFFECT_LOWER_SP_ATK: + case MAX_EFFECT_LOWER_SP_DEF: + case MAX_EFFECT_LOWER_SPEED_2_FOES: + case MAX_EFFECT_LOWER_EVASIVENESS_FOES: + if (!NoAliveMonsForEitherParty()) + { + u8 statId = 0; + u8 stage = 1; + switch (maxEffect) + { + case MAX_EFFECT_LOWER_SPEED_2_FOES: + statId = STAT_SPEED; + stage = 2; + break; + case MAX_EFFECT_LOWER_EVASIVENESS_FOES: + statId = STAT_EVASION; + break; + default: + // Max Effects are ordered by stat ID. + statId = gBattleMoves[gCurrentMove].argument - MAX_EFFECT_LOWER_ATTACK + 1; + break; + } + SET_STATCHANGER(statId, stage, TRUE); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectLowerStatFoes; + effect++; + } + break; + case MAX_EFFECT_SUN: + case MAX_EFFECT_RAIN: + case MAX_EFFECT_SANDSTORM: + case MAX_EFFECT_HAIL: + { + u8 weather, msg; + switch (maxEffect) + { + case MAX_EFFECT_SUN: + weather = ENUM_WEATHER_SUN; + msg = B_MSG_STARTED_SUNLIGHT; + break; + case MAX_EFFECT_RAIN: + weather = ENUM_WEATHER_RAIN; + msg = B_MSG_STARTED_RAIN; + break; + case MAX_EFFECT_SANDSTORM: + weather = ENUM_WEATHER_SANDSTORM; + msg = B_MSG_STARTED_SANDSTORM; + break; + case MAX_EFFECT_HAIL: + weather = ENUM_WEATHER_HAIL; + msg = B_MSG_STARTED_HAIL; + break; + } + if (TryChangeBattleWeather(gBattlerAttacker, weather, FALSE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = msg; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSetWeather; + effect++; + } + break; + } + case MAX_EFFECT_MISTY_TERRAIN: + case MAX_EFFECT_GRASSY_TERRAIN: + case MAX_EFFECT_ELECTRIC_TERRAIN: + case MAX_EFFECT_PSYCHIC_TERRAIN: + { + u32 statusFlag = 0; + switch (gBattleMoves[gCurrentMove].argument) + { + case MAX_EFFECT_MISTY_TERRAIN: + statusFlag = STATUS_FIELD_MISTY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + break; + case MAX_EFFECT_GRASSY_TERRAIN: + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + break; + case MAX_EFFECT_ELECTRIC_TERRAIN: + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + break; + case MAX_EFFECT_PSYCHIC_TERRAIN: + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + break; + } + if (!(gFieldStatuses & statusFlag) && statusFlag != 0) + { + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses |= statusFlag; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) + gFieldTimers.terrainTimer = 8; + else + gFieldTimers.terrainTimer = 5; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSetTerrain; + effect++; + } + break; + } + case MAX_EFFECT_VINE_LASH: + case MAX_EFFECT_CANNONADE: + case MAX_EFFECT_WILDFIRE: + case MAX_EFFECT_VOLCALITH: + { + u8 side = GetBattlerSide(gBattlerTarget); + if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) + { + gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; + gSideTimers[side].damageNonTypesTimer = 5; // damage is dealt for 4 turns, ends on 5th + gSideTimers[side].damageNonTypesType = gBattleMoves[gCurrentMove].type; + BattleScriptPush(gBattlescriptCurrInstr + 1); + ChooseDamageNonTypesString(gBattleMoves[gCurrentMove].type); + gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; + effect++; + } + break; + } + case MAX_EFFECT_STEALTH_ROCK: + if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEALTH_ROCK)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectStonesurge; + effect++; + } + break; + case MAX_EFFECT_STEELSURGE: + if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEELSURGE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SHARPSTEELFLOATS; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectSteelsurge; + effect++; + } + break; + case MAX_EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_SCREEN_ANY + || gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_HAZARDS_ANY + || gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_HAZARDS_ANY + || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_DefogTryHazards; + effect++; + } + break; + case MAX_EFFECT_AURORA_VEIL: + if (!(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_AURORA_VEIL)) + { + gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_AURORA_VEIL; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 8; + else + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 5; + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilBattlerId = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectAuroraVeilSuccess; + effect++; + } + break; + case MAX_EFFECT_GRAVITY: + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + { + gFieldStatuses |= STATUS_FIELD_GRAVITY; + gFieldTimers.gravityTimer = 5; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectGravitySuccess; + effect++; + } + break; + case MAX_EFFECT_SANDBLAST_FOES: + case MAX_EFFECT_FIRE_SPIN_FOES: + { + // Affects both opponents, but doesn't print strings so we can handle it here. + u8 battler; + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + { + if (GetBattlerSide(battler) != GetBattlerSide(gBattlerTarget)) + continue; + if (!(gBattleMons[battler].status2 & STATUS2_WRAPPED)) + { + gBattleMons[battler].status2 |= STATUS2_WRAPPED; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) + #if B_BINDING_TURNS >= GEN_5 + gDisableStructs[battler].wrapTurns = 7; + else + gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; + #else + gDisableStructs[battler].wrapTurns = 5; + else + gDisableStructs[battler].wrapTurns = (Random() % 4) + 2; + #endif + // The Wrap effect does not expire when the user switches, so here's some cheese. + gBattleStruct->wrappedBy[battler] = gBattlerTarget; + if (maxEffect == MAX_EFFECT_SANDBLAST_FOES) + gBattleStruct->wrappedMove[battler] = MOVE_SAND_TOMB; + else + gBattleStruct->wrappedMove[battler] = MOVE_FIRE_SPIN; + } + } + break; + } + case MAX_EFFECT_YAWN_FOE: + { + static const u8 sSnoozeEffects[] = {TRUE, FALSE}; + if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) + && CanSleep(gBattlerTarget) + && RandomElement(RNG_G_MAX_SNOOZE, sSnoozeEffects)) // 50% chance of success + { + gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectYawnSuccess; + effect++; + } + break; + } + case MAX_EFFECT_SPITE: + if (gLastMoves[gBattlerTarget] != MOVE_NONE + && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectTryReducePP; + effect++; + } + break; + case MAX_EFFECT_PARALYZE_FOES: + case MAX_EFFECT_POISON_FOES: + case MAX_EFFECT_POISON_PARALYZE_FOES: + case MAX_EFFECT_EFFECT_SPORE_FOES: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectStatus1Foes; + effect++; + break; + case MAX_EFFECT_CONFUSE_FOES_PAY_DAY: + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + u16 payday = gPaydayMoney; + gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 100); + if (payday > gPaydayMoney) + gPaydayMoney = 0xFFFF; + gBattleCommunication[CURSOR_POSITION] = 1; // add "Coins scattered." message + } + // fall through + case MAX_EFFECT_CONFUSE_FOES: + case MAX_EFFECT_INFATUATE_FOES: + case MAX_EFFECT_TORMENT_FOES: + case MAX_EFFECT_MEAN_LOOK: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectStatus2Foes; + effect++; + break; + case MAX_EFFECT_CRIT_PLUS: + gBattleStruct->bonusCritStages[gBattlerAttacker]++; + gBattleStruct->bonusCritStages[BATTLE_PARTNER(gBattlerAttacker)]++; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRaiseCritAlliesAnim; + effect++; + break; + case MAX_EFFECT_HEAL_TEAM: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectHealOneSixthAllies; + effect++; + break; + case MAX_EFFECT_AROMATHERAPY: + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectCureStatusAllies; + effect++; + break; + case MAX_EFFECT_RECYCLE_BERRIES: + { + static const u8 sReplenishEffects[] = {TRUE, FALSE}; + if (RandomElement(RNG_G_MAX_REPLENISH, sReplenishEffects)) // 50% chance of success + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_EffectRecycleBerriesAllies; + effect++; + } + break; + } + } + + if (!effect) + gBattlescriptCurrInstr = cmd->nextInstr; +} + +// Sets up sharp steel on the target's side. +void BS_SetSteelsurge(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (gSideStatuses[targetSide] & SIDE_STATUS_STEELSURGE) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gSideStatuses[targetSide] |= SIDE_STATUS_STEELSURGE; + gSideTimers[targetSide].steelsurgeAmount = 1; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +// Applies the status1 effect associated with a given G-Max Move. +// Could be expanded to function for any move. +void BS_TrySetStatus1(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u8 effect = 0; + u32 status1 = GetMaxMoveStatusEffect(gCurrentMove); + switch (status1) + { + case STATUS1_POISON: + if (CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + { + gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + effect++; + } + break; + case STATUS1_PARALYSIS: + if (CanBeParalyzed(gBattlerTarget)) + { + gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + effect++; + } + break; + case STATUS1_SLEEP: + if (CanSleep(gBattlerTarget)) + { + #if B_SLEEP_TURNS >= GEN_5 + gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 3) + 2); + #else + gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 4) + 3); + #endif + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + effect++; + } + break; + } + if (effect) + { + gEffectBattler = gBattlerTarget; + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// Applies the status2 effect associated with a given G-Max Move. +void BS_TrySetStatus2(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u8 effect = 0; + u32 status2 = GetMaxMoveStatusEffect(gCurrentMove); + switch (status2) + { + case STATUS2_CONFUSION: + if (CanBeConfused(gBattlerTarget)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleCommunication[MULTIUSE_STATE] = 1; + effect++; + } + break; + case STATUS2_INFATUATION: + { + u8 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality); + u8 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality); + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION) + && gBattleMons[gBattlerTarget].ability != ABILITY_OBLIVIOUS + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL) + && atkGender != defGender + && atkGender != MON_GENDERLESS + && defGender != MON_GENDERLESS) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleCommunication[MULTIUSE_STATE] = 2; + effect++; + } + break; + } + case STATUS2_ESCAPE_PREVENTION: + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + effect++; + } + break; + case STATUS2_TORMENT: + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL)) + { + gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; + gDisableStructs[gBattlerTarget].tormentTimer = 3; // 3 turns excluding current turn + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + effect++; + } + break; + } + if (effect) + { + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// 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) +{ + NATIVE_ARGS(const u8* failInstr); + gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 6; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + + if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) + gBattlescriptCurrInstr = cmd->failInstr; // fail + else + gBattlescriptCurrInstr = cmd->nextInstr; // can heal +} + +// Recycles the target's item if it is specifically holding a berry. +void BS_TryRecycleBerry(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u16* usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; + if (gBattleMons[gBattlerTarget].item == ITEM_NONE + && gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item + && ItemId_GetPocket(*usedHeldItem) == POCKET_BERRIES) + { + gLastUsedItem = *usedHeldItem; + *usedHeldItem = ITEM_NONE; + gBattleMons[gBattlerTarget].item = gLastUsedItem; + + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); + MarkBattlerForControllerExec(gBattlerTarget); + + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// Goes to the jump instruction if the target is Dynamaxed. +void BS_JumpIfDynamaxed(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + if (IsDynamaxed(gBattlerTarget)) + 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_factory.c b/src/battle_factory.c index 5d7a199dc3..4543bfbad4 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -741,8 +741,15 @@ u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle) u8 ivSet; bool8 useHigherIV = isLastBattle ? TRUE : FALSE; - if (challengeNum > 8) - ivSet = 7; +// The Factory has an out-of-bounds access when generating the rental draft for round 9 (challengeNum==8), +// or the "elevated" rentals from round 8 (challengeNum+1==8) +// This happens to land on a number higher than 31, which is interpreted as "random IVs" +#ifdef BUGFIX + if (challengeNum >= ARRAY_COUNT(sFixedIVTable)) +#else + if (challengeNum > ARRAY_COUNT(sFixedIVTable)) +#endif + ivSet = ARRAY_COUNT(sFixedIVTable) - 1; else ivSet = challengeNum; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 064241c6e3..f321ff75dd 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -591,13 +591,16 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) else { species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; - #if B_TRANSFORM_SHINY >= GEN_4 + if (B_TRANSFORM_SHINY >= GEN_4) + { currentPersonality = gTransformedPersonalities[battler]; currentOtId = gTransformedOtIds[battler]; - #else + } + else + { currentPersonality = monsPersonality; currentOtId = otId; - #endif + } } position = GetBattlerPosition(battler); @@ -631,6 +634,13 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) BlendPalette(paletteOffset, 16, 6, RGB_WHITE); CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } + + // dynamax tint + if (IsDynamaxed(battler)) + { + BlendPalette(paletteOffset, 16, 4, RGB(31, 0, 12)); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } } void BattleGfxSfxDummy2(u16 species) @@ -886,14 +896,12 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) { - #if B_TRANSFORM_SHINY >= GEN_4 - if (trackEnemyPersonality) + if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality) { personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); } else - #endif { personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); @@ -907,15 +915,13 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo } else { - #if B_TRANSFORM_SHINY >= GEN_4 - if (trackEnemyPersonality) + if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality) { personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); } else - #endif { personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); diff --git a/src/battle_interface.c b/src/battle_interface.c index d1e5757fb9..d3751f702f 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -754,12 +754,6 @@ static const struct SpriteTemplate sSpriteTemplate_BurstTrigger = #define hBar_HealthBoxSpriteId data[5] #define hBar_Data6 data[6] -static void InitLastUsedBallAssets(void) -{ - gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; - gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; -} - // This function is here to cover a specific case - one player's mon in a 2 vs 1 double battle. In this scenario - display singles layout. // The same goes for a 2 vs 1 where opponent has only one pokemon. u32 WhichBattleCoords(u32 battlerId) // 0 - singles, 1 - doubles @@ -780,7 +774,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) { s16 data6 = 0; u8 healthboxLeftSpriteId, healthboxRightSpriteId; - u8 healthbarSpriteId, megaIndicatorSpriteId; + u8 healthbarSpriteId; struct Sprite *healthBarSpritePtr; if (WhichBattleCoords(battlerId) == 0) // Singles @@ -995,10 +989,8 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) MegaIndicator_UpdateOamPriority(healthboxLeftSpriteId, priority); - #if B_HIDE_HEALTHBOX_IN_ANIMS - if (hideHPBoxes && IsBattlerAlive(i)) + if (B_HIDE_HEALTHBOX_IN_ANIMS == TRUE && hideHPBoxes && IsBattlerAlive(i)) TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId); - #endif } } @@ -1050,8 +1042,8 @@ 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. - if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler)) + // Don't print Lv char if mon is mega evolved or primal reverted or Dynamaxed. + if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler) || IsDynamaxed(battler)) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; @@ -1065,6 +1057,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); } windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); @@ -1090,7 +1083,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) static void PrintHpOnHealthbox(u32 spriteId, s16 currHp, s16 maxHp, u32 bgColor, u32 rightTile, u32 leftTile) { u8 *windowTileData; - u32 windowId, tilesCount, x, healthboxTileNum; + u32 windowId, tilesCount, x; u8 text[28], *txtPtr; void *objVram = (void *)(OBJ_VRAM0) + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP; @@ -1479,6 +1472,7 @@ void HideTriggerSprites(void) HideMegaTriggerSprite(); HideBurstTriggerSprite(); HideZMoveTriggerSprite(); + HideDynamaxTriggerSprite(); } void DestroyMegaTriggerSprite(void) @@ -1621,6 +1615,7 @@ enum INDICATOR_MEGA, INDICATOR_ALPHA, INDICATOR_OMEGA, + INDICATOR_DYNAMAX, INDICATOR_COUNT, }; @@ -1628,20 +1623,24 @@ static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_inte 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/alpha_indicator.gbapal"); +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_ALPHA_OMEGA_INDICATOR_PAL}, - [INDICATOR_OMEGA] = {sAlphaOmegaIndicatorPal, TAG_ALPHA_OMEGA_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} }; @@ -1666,8 +1665,9 @@ static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = static const u16 sMegaIndicatorTags[][2] = { [INDICATOR_MEGA] = {TAG_MEGA_INDICATOR_TILE, TAG_MEGA_INDICATOR_PAL}, - [INDICATOR_ALPHA] = {TAG_ALPHA_INDICATOR_TILE, TAG_ALPHA_OMEGA_INDICATOR_PAL}, - [INDICATOR_OMEGA] = {TAG_OMEGA_INDICATOR_TILE, TAG_ALPHA_OMEGA_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] = @@ -1692,11 +1692,11 @@ void MegaIndicator_LoadSpritesGfx(void) static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, struct Sprite *sprite) { - u32 side = GetBattlerSide(battlerId); bool32 megaEvolved = IsBattlerMegaEvolved(battlerId); bool32 primalReverted = IsBattlerPrimalReverted(battlerId); + bool32 dynamaxed = IsDynamaxed(battlerId); - if (!megaEvolved && !primalReverted) + if (!megaEvolved && !primalReverted && !dynamaxed) return TRUE; if (megaEvolved) @@ -1705,6 +1705,8 @@ static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, struct Sprite *spri 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]); @@ -1739,7 +1741,6 @@ static void MegaIndicator_UpdateOamPriority(u32 healthboxId, u32 oamPriority) static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level) { - u32 i; s16 xDelta = 0; u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId); @@ -1754,7 +1755,7 @@ static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level) static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId) { struct SpriteTemplate sprTemplate; - u32 position, level; + u32 position; u8 *spriteId; s16 xHealthbox = 0, y = 0; s32 x = 0; @@ -2614,15 +2615,12 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) if (whichBar == HEALTH_BAR) // health bar { + u16 hpFraction = B_FAST_HP_DRAIN == FALSE ? 1 : max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / B_HEALTHBAR_PIXELS, 1); currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, gBattleSpritesDataPtr->battleBars[battlerId].oldValue, gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, &gBattleSpritesDataPtr->battleBars[battlerId].currValue, - #if B_FAST_HP_DRAIN == TRUE - B_HEALTHBAR_PIXELS / 8, max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / B_HEALTHBAR_PIXELS, 1)); - #else - B_HEALTHBAR_PIXELS / 8, 1); - #endif + B_HEALTHBAR_PIXELS / 8, hpFraction); } else // exp bar { @@ -3239,10 +3237,12 @@ static void RestoreOverwrittenPixels(u8 *tiles) void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) { -#if B_ABILITY_POP_UP == TRUE const s16 (*coords)[2]; u8 spriteId1, spriteId2, battlerPosition, taskId; + if (B_ABILITY_POP_UP == FALSE) + return; + if (gTestRunnerEnabled) { TestRunner_Battle_RecordAbilityPopUp(battlerId, ability); @@ -3312,7 +3312,6 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) PrintBattlerOnAbilityPopUp(battlerId, spriteId1, spriteId2); PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32)); -#endif } void UpdateAbilityPopup(u8 battlerId) @@ -3395,18 +3394,10 @@ static const struct OamData sOamData_LastUsedBall = .objMode = 0, .mosaic = 0, .bpp = 0, -#if B_LAST_USED_BALL_CYCLE == TRUE - .shape = SPRITE_SHAPE(32x64), -#else - .shape = SPRITE_SHAPE(32x32), -#endif + .shape = (B_LAST_USED_BALL_CYCLE == TRUE ? SPRITE_SHAPE(32x64) : SPRITE_SHAPE(32x32)), .x = 0, .matrixNum = 0, -#if B_LAST_USED_BALL_CYCLE == TRUE - .size = SPRITE_SIZE(32x64), -#else - .size = SPRITE_SIZE(32x32), -#endif + .size = (B_LAST_USED_BALL_CYCLE == TRUE ? SPRITE_SIZE(32x64) : SPRITE_SIZE(32x32)), .tileNum = 0, .priority = 1, .paletteNum = 0, @@ -3457,9 +3448,8 @@ static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = bool32 CanThrowLastUsedBall(void) { -#if B_LAST_USED_BALL == FALSE - return FALSE; -#else + if (B_LAST_USED_BALL == FALSE) + return FALSE; if (!CanThrowBall()) return FALSE; if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER)) @@ -3468,12 +3458,12 @@ bool32 CanThrowLastUsedBall(void) return FALSE; return TRUE; -#endif } void TryAddLastUsedBallItemSprites(void) { -#if B_LAST_USED_BALL == TRUE + if (B_LAST_USED_BALL == FALSE) + return; if (gLastThrownBall == 0 || (gLastThrownBall != 0 && !CheckBagHasItem(gLastThrownBall, 1))) { @@ -3510,10 +3500,8 @@ void TryAddLastUsedBallItemSprites(void) gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore gLastUsedBallMenuPresent = TRUE; } -#if B_LAST_USED_BALL_CYCLE == TRUE - ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible -#endif -#endif + if (B_LAST_USED_BALL_CYCLE == TRUE) + ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible } static void DestroyLastUsedBallWinGfx(struct Sprite *sprite) @@ -3571,7 +3559,8 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite) static void TryHideOrRestoreLastUsedBall(u8 caseId) { -#if B_LAST_USED_BALL == TRUE + if (B_LAST_USED_BALL == FALSE) + return; if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES) return; @@ -3592,27 +3581,25 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId) gLastUsedBallMenuPresent = TRUE; break; } -#if B_LAST_USED_BALL_CYCLE == TRUE - ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible -#endif -#endif + if (B_LAST_USED_BALL_CYCLE == TRUE) + ArrowsChangeColorLastBallCycle(0); //Default the arrows to be invisible } void TryHideLastUsedBall(void) { -#if B_LAST_USED_BALL == TRUE - TryHideOrRestoreLastUsedBall(0); -#endif + if (B_LAST_USED_BALL == TRUE) + TryHideOrRestoreLastUsedBall(0); } void TryRestoreLastUsedBall(void) { -#if B_LAST_USED_BALL == TRUE + if (B_LAST_USED_BALL == FALSE) + return; + if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) TryHideOrRestoreLastUsedBall(1); else TryAddLastUsedBallItemSprites(); -#endif } static void SpriteCB_LastUsedBallBounce(struct Sprite *sprite) @@ -3672,13 +3659,13 @@ static void Task_BounceBall(u8 taskId) sprite->callback = SpriteCB_LastUsedBallBounce; //Show and bounce down task->sState++; } - break; + break; case 4: // Destroy Task if(!sprite->sMoving) { sprite->callback = SpriteCB_LastUsedBall; DestroyTask(taskId); - } + } } if (!gLastUsedBallMenuPresent) { diff --git a/src/battle_intro.c b/src/battle_intro.c index c303baaa66..90ff736f00 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -11,8 +11,6 @@ #include "trig.h" #include "constants/trainers.h" -static EWRAM_DATA u16 sBgCnt = 0; - extern const u8 gBattleAnimBgCntSet[]; extern const u8 gBattleAnimBgCntGet[]; @@ -40,39 +38,39 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) { if (bgId < 4) { - sBgCnt = GetGpuReg(gBattleAnimBgCntSet[bgId]); + u32 bgCnt = GetGpuReg(gBattleAnimBgCntSet[bgId]); switch (attributeId) { case BG_ANIM_SCREEN_SIZE: - ((struct BgCnt *)&sBgCnt)->screenSize = value; + ((struct BgCnt *)&bgCnt)->screenSize = value; break; case BG_ANIM_AREA_OVERFLOW_MODE: - ((struct BgCnt *)&sBgCnt)->areaOverflowMode = value; + ((struct BgCnt *)&bgCnt)->areaOverflowMode = value; break; case BG_ANIM_MOSAIC: - ((struct BgCnt *)&sBgCnt)->mosaic = value; + ((struct BgCnt *)&bgCnt)->mosaic = value; break; case BG_ANIM_CHAR_BASE_BLOCK: - ((struct BgCnt *)&sBgCnt)->charBaseBlock = value; + ((struct BgCnt *)&bgCnt)->charBaseBlock = value; break; case BG_ANIM_PRIORITY: - ((struct BgCnt *)&sBgCnt)->priority = value; + ((struct BgCnt *)&bgCnt)->priority = value; break; case BG_ANIM_PALETTES_MODE: - ((struct BgCnt *)&sBgCnt)->palettes = value; + ((struct BgCnt *)&bgCnt)->palettes = value; break; case BG_ANIM_SCREEN_BASE_BLOCK: - ((struct BgCnt *)&sBgCnt)->screenBaseBlock = value; + ((struct BgCnt *)&bgCnt)->screenBaseBlock = value; break; } - SetGpuReg(gBattleAnimBgCntSet[bgId], sBgCnt); + SetGpuReg(gBattleAnimBgCntSet[bgId], bgCnt); } } int GetAnimBgAttribute(u8 bgId, u8 attributeId) { - u16 bgCnt; + u32 bgCnt; if (bgId < 4) { @@ -118,7 +116,7 @@ void HandleIntroSlide(u8 terrain) { taskId = CreateTask(BattleIntroSlide3, 0); } - else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY) + else if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_KYOGRE) { terrain = BATTLE_TERRAIN_UNDERWATER; taskId = CreateTask(BattleIntroSlide2, 0); @@ -587,7 +585,6 @@ static void BattleIntroSlidePartner(u8 taskId) void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset) { int i, j; - u8 battler = GetBattlerAtPosition(battlerPosition); int offset = tilesOffset; CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition], tiles, BG_SCREEN_SIZE); LoadBgTiles(bgId, tiles, 0x1000, tilesOffset); diff --git a/src/battle_main.c b/src/battle_main.c index 046c6687a0..a9d1f91add 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -87,7 +87,6 @@ static void AskRecordBattle(void); static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite); static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite); static void SpriteCB_WildMonAnimate(struct Sprite *sprite); -static void SpriteCB_Flicker(struct Sprite *sprite); static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); static void SpriteCB_BlinkVisible(struct Sprite *sprite); static void SpriteCB_Idle(struct Sprite *sprite); @@ -103,8 +102,6 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(u32 battler); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckChosenMoveForEffectsBeforeTurnStarts(void); -static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void ReturnFromBattleToOverworld(void); @@ -134,16 +131,10 @@ EWRAM_DATA u16 gBattle_WIN0H = 0; EWRAM_DATA u16 gBattle_WIN0V = 0; EWRAM_DATA u16 gBattle_WIN1H = 0; EWRAM_DATA u16 gBattle_WIN1V = 0; -EWRAM_DATA u8 gDisplayedStringBattle[400] = {0}; +EWRAM_DATA u8 gDisplayedStringBattle[425] = {0}; // Increased in size to fit Juan's defeat text (SootopolisCity_Gym_1F_Text_JuanDefeat) EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0}; EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0}; -EWRAM_DATA u8 gBattleTextBuff3[30] = {0}; //expanded for stupidly long z move names -// The below array is never intentionally used. However, Juan's -// defeat text (SootopolisCity_Gym_1F_Text_JuanDefeat) is too long -// for gDisplayedStringBattle and overflows into this array. If it -// is removed (and none of the buffers above are increased in size) -// it will instead overflow into useful data. -EWRAM_DATA static u32 sFlickerArray[25] = {0}; +EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT + 13] = {0}; // expanded for stupidly long z move names EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u8 gBattleTerrain = 0; EWRAM_DATA u32 gUnusedFirstBattleVar1 = 0; // Never read @@ -236,7 +227,7 @@ EWRAM_DATA u32 gFieldStatuses = 0; EWRAM_DATA struct FieldTimer gFieldTimers = {0}; EWRAM_DATA u8 gBattlerAbility = 0; EWRAM_DATA u16 gPartnerSpriteId = 0; -EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; EWRAM_DATA u8 gLastUsedBall = 0; EWRAM_DATA u16 gLastThrownBall = 0; @@ -509,7 +500,6 @@ void CB2_InitBattle(void) static void CB2_InitBattleInternal(void) { s32 i; - u16 targetSpecies; SetHBlankCallback(NULL); SetVBlankCallback(NULL); @@ -606,14 +596,11 @@ static void CB2_InitBattleInternal(void) gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE; for (i = 0; i < PARTY_SIZE; i++) + { AdjustFriendship(&gPlayerParty[i], FRIENDSHIP_EVENT_LEAGUE_BATTLE); - // Apply party-wide start-of-battle form changes - for (i = 0; i < PARTY_SIZE; i++) - { - // Player's side + // Apply party-wide start-of-battle form changes for both sides. TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BEGIN_BATTLE); - // Opponent's side TryFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BEGIN_BATTLE); } @@ -1896,7 +1883,7 @@ static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) void ModifyPersonalityForNature(u32 *personality, u32 newNature) { u32 nature = GetNatureFromPersonality(*personality); - s32 diff = abs(nature - newNature); + s32 diff = abs((s32)nature - (s32)newNature); s32 sign = (nature > newNature) ? 1 : -1; if (diff > NUM_NATURES / 2) { @@ -1941,7 +1928,6 @@ void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMon u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { u32 personalityValue; - u8 fixedIV; s32 i, j; u8 monsCount; if (battleTypeFlags & BATTLE_TYPE_TRAINER && !(battleTypeFlags & (BATTLE_TYPE_FRONTIER @@ -2697,29 +2683,6 @@ void SpriteCallbackDummy_2(struct Sprite *sprite) } -#define sNumFlickers data[3] -#define sDelay data[4] - -static void SpriteCB_Flicker(struct Sprite *sprite) -{ - sprite->sDelay--; - if (sprite->sDelay == 0) - { - sprite->sDelay = 8; - sprite->invisible ^= 1; - sprite->sNumFlickers--; - if (sprite->sNumFlickers == 0) - { - sprite->invisible = FALSE; - sprite->callback = SpriteCallbackDummy_2; - // sFlickerArray[0] = 0; - } - } -} - -#undef sNumFlickers -#undef sDelay - extern const struct MonCoords gMonFrontPicCoords[]; void SpriteCB_FaintOpponentMon(struct Sprite *sprite) @@ -3238,12 +3201,19 @@ void SwitchInClearSetData(u32 battler) gSpecialStatuses[battler].physicalDmg = 0; gSpecialStatuses[battler].specialDmg = 0; + // 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. gSelectedMonPartyId = PARTY_SIZE; // Allow for illegal abilities within tests. + #if TESTING if (gTestRunnerEnabled) { u32 side = GetBattlerSide(battler); @@ -3251,13 +3221,15 @@ void SwitchInClearSetData(u32 battler) if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex); } + #endif // TESTING Ai_UpdateSwitchInData(battler); } -void FaintClearSetData(u32 battler) +const u8* FaintClearSetData(u32 battler) { s32 i; + const u8 *result = NULL; for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; @@ -3391,7 +3363,7 @@ void FaintClearSetData(u32 battler) { gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); gBattlerAttacker = otherSkyDropper; - gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 2; + result = BattleScript_ThrashConfuses; } } } @@ -3401,6 +3373,7 @@ void FaintClearSetData(u32 battler) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + return result; } static void DoBattleIntro(void) @@ -3516,11 +3489,10 @@ static void DoBattleIntro(void) } else // Skip party summary since it is a wild battle. { - #if B_FAST_INTRO == TRUE - *state = 7; // Don't wait for sprite, print message at the same time. - #else - *state = 6; // Wait for sprite to load. - #endif + if (B_FAST_INTRO == TRUE) + *state = 7; // Don't wait for sprite, print message at the same time. + else + *state = 6; // Wait for sprite to load. } break; case 5: // draw party summary in trainer battles @@ -3589,11 +3561,10 @@ static void DoBattleIntro(void) } else { - #if B_FAST_INTRO == TRUE - *state = 15; // Wait for text to be printed. - #else - *state = 14; // Wait for text and sprite. - #endif + if (B_FAST_INTRO == TRUE) + *state = 15; // Wait for text to be printed. + else + *state = 14; // Wait for text and sprite. } } break; @@ -3631,11 +3602,10 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); } - #if B_FAST_INTRO == TRUE - if (!(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) + if (B_FAST_INTRO == TRUE + && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) *state = 15; // Print at the same time as trainer sends out second mon. else - #endif (*state)++; break; case 14: // wait for opponent 2 send out @@ -3655,14 +3625,13 @@ static void DoBattleIntro(void) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); // A hack that makes fast intro work in trainer battles too. - #if B_FAST_INTRO == TRUE - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + if (B_FAST_INTRO == TRUE + && gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK)) && gSprites[gHealthboxSpriteIds[battler ^ BIT_SIDE]].callback == SpriteCallbackDummy) { return; } - #endif PrepareStringBattle(STRINGID_INTROSENDOUT, battler); } @@ -3750,6 +3719,7 @@ static void TryDoEventsBeforeFirstTurn(void) } // Allow for illegal abilities within tests. + #if TESTING if (gTestRunnerEnabled && gBattleStruct->switchInAbilitiesCounter == 0) { for (i = 0; i < gBattlersCount; ++i) @@ -3760,6 +3730,7 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex); } } + #endif // TESTING if (gBattleStruct->switchInAbilitiesCounter == 0) { @@ -3790,14 +3761,13 @@ static void TryDoEventsBeforeFirstTurn(void) // Totem boosts for (i = 0; i < gBattlersCount; i++) { - if (gTotemBoosts[i].stats != 0) + if (gQueuedStatBoosts[i].stats != 0 && !gProtectStructs[i].eatMirrorHerb && gProtectStructs[i].activateOpportunist == 0) { gBattlerAttacker = i; BattleScriptExecute(BattleScript_TotemVar); return; } } - memset(gTotemBoosts, 0, sizeof(gTotemBoosts)); // erase all totem boosts just to be safe // Check neutralizing gas if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0) @@ -3822,6 +3792,9 @@ static void TryDoEventsBeforeFirstTurn(void) return; } + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) + return; + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; @@ -3855,6 +3828,8 @@ static void TryDoEventsBeforeFirstTurn(void) gRandomTurnNumber = Random(); + memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts just to be safe + SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers if (gBattleTypeFlags & BATTLE_TYPE_ARENA) @@ -3994,10 +3969,8 @@ u8 IsRunningFromBattleImpossible(u32 battler) if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) return BATTLE_RUN_SUCCESS; - #if B_GHOSTS_ESCAPE >= GEN_6 - if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) - return BATTLE_RUN_SUCCESS; - #endif + if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + return BATTLE_RUN_SUCCESS; if (gBattleTypeFlags & BATTLE_TYPE_LINK) return BATTLE_RUN_SUCCESS; if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY) @@ -4079,6 +4052,7 @@ static void HandleTurnActionSelectionState(void) if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + AI_DATA->mostSuitableMonId = GetMostSuitableMonToSwitchInto(battler, FALSE); gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); } // fallthrough @@ -4280,6 +4254,8 @@ static void HandleTurnActionSelectionState(void) 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->dynamax.usingMaxMove[BATTLE_PARTNER(GetBattlerPosition(battler))] = FALSE; gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(battler))] = MOVE_NONE; BtlController_EmitEndBounceEffect(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -4367,14 +4343,31 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][3]); } - gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); + // 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); 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]; + + // Max Move check + if (ShouldUseMaxMove(battler, gChosenMoveByBattler[battler])) + { + gBattleStruct->dynamax.baseMove[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + gBattleStruct->dynamax.usingMaxMove[battler] = TRUE; + } gBattleCommunication[battler]++; + + if (gTestRunnerEnabled) + { + TestRunner_Battle_CheckChosenMove(battler, gChosenMoveByBattler[battler], gBattleStruct->moveTarget[battler]); + } } break; } @@ -4643,7 +4636,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) + else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && !IsDynamaxed(battler)) speed = (speed * 150) / 100; else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battler].species == SPECIES_DITTO && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) speed *= 2; @@ -4656,11 +4649,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) // paralysis drop if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET) - #if B_PARALYSIS_SPEED >= GEN_7 - speed /= 2; - #else - speed /= 4; - #endif + speed /= B_PARALYSIS_SPEED >= GEN_7 ? 2 : 4; return speed; } @@ -4691,10 +4680,13 @@ s8 GetMovePriority(u32 battler, u16 move) u16 ability = GetBattlerAbility(battler); priority = gBattleMoves[move].priority; + + // Max Guard check + if (gBattleStruct->dynamax.usingMaxMove[battler] && gBattleMoves[move].split == SPLIT_STATUS) + return gBattleMoves[MOVE_MAX_GUARD].priority; + if (ability == ABILITY_GALE_WINGS - #if B_GALE_WINGS >= GEN_7 - && BATTLER_MAX_HP(battler) - #endif + && (B_GALE_WINGS < GEN_7 || BATTLER_MAX_HP(battler)) && gBattleMoves[move].type == TYPE_FLYING) { priority++; @@ -4744,7 +4736,7 @@ u32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov // Battler 1 // Quick Draw - if (!ignoreChosenMoves && ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && Random() % 100 < 30) + if (!ignoreChosenMoves && ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && RandomPercentage(RNG_QUICK_DRAW, 30)) gProtectStructs[battler1].quickDraw = TRUE; // Quick Claw and Custap Berry if (!gProtectStructs[battler1].quickDraw @@ -4754,7 +4746,7 @@ u32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov // Battler 2 // Quick Draw - if (!ignoreChosenMoves && ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && Random() % 100 < 30) + if (!ignoreChosenMoves && ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && RandomPercentage(RNG_QUICK_DRAW, 30)) gProtectStructs[battler2].quickDraw = TRUE; // Quick Claw and Custap Berry if (!gProtectStructs[battler2].quickDraw @@ -4963,6 +4955,7 @@ static void TurnValuesCleanUp(bool8 var0) gProtectStructs[i].kingsShielded = FALSE; gProtectStructs[i].banefulBunkered = FALSE; gProtectStructs[i].quash = FALSE; + gProtectStructs[i].usedCustapBerry = FALSE; } else { @@ -5003,51 +4996,56 @@ static void PopulateArrayWithBattlers(u8 *battlers) battlers[i] = i; } -static bool32 TryDoMegaEvosBeforeMoves(void) +static bool32 TryDoGimmicksBeforeMoves(void) { - if (!(gHitMarker & HITMARKER_RUN) && (gBattleStruct->mega.toEvolve || gBattleStruct->burst.toBurst)) + if (!(gHitMarker & HITMARKER_RUN) + && (gBattleStruct->mega.toEvolve || gBattleStruct->burst.toBurst || gBattleStruct->dynamax.toDynamax)) { u32 i, battler; - struct Pokemon *party; - struct Pokemon *mon; - u8 megaOrder[MAX_BATTLERS_COUNT]; + u8 order[MAX_BATTLERS_COUNT]; - PopulateArrayWithBattlers(megaOrder); - SortBattlersBySpeed(megaOrder, FALSE); + PopulateArrayWithBattlers(order); + SortBattlersBySpeed(order, FALSE); for (i = 0; i < gBattlersCount; i++) { - if (gBattleStruct->mega.toEvolve & gBitTable[megaOrder[i]] - && !(gProtectStructs[megaOrder[i]].noValidMoves)) + // Dynamax Check + if (gBattleStruct->dynamax.toDynamax & gBitTable[order[i]]) { - gBattlerAttacker = megaOrder[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; - party = GetBattlerParty(gBattlerAttacker); - mon = &party[gBattlerPartyIndexes[gBattlerAttacker]]; if (GetBattleFormChangeTargetSpecies(gBattlerAttacker, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) BattleScriptExecute(BattleScript_WishMegaEvolution); else BattleScriptExecute(BattleScript_MegaEvolution); return TRUE; } - - if (gBattleStruct->burst.toBurst & gBitTable[megaOrder[i]] - && !(gProtectStructs[megaOrder[i]].noValidMoves)) + // Ultra Burst Check + if (gBattleStruct->burst.toBurst & gBitTable[order[i]] + && !(gProtectStructs[order[i]].noValidMoves)) { - battler = gBattlerAttacker = megaOrder[i]; + battler = gBattlerAttacker = order[i]; gBattleStruct->burst.toBurst &= ~(gBitTable[battler]); gLastUsedItem = gBattleMons[battler].item; - party = GetBattlerParty(battler); - mon = &party[gBattlerPartyIndexes[battler]]; BattleScriptExecute(BattleScript_UltraBurst); return TRUE; } } } - #if B_MEGA_EVO_TURN_ORDER >= GEN_7 + if (B_MEGA_EVO_TURN_ORDER >= GEN_7) TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved. - #endif return FALSE; } @@ -5056,7 +5054,6 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) if (!(gHitMarker & HITMARKER_RUN)) { u32 i; - struct Pokemon *mon; u8 battlers[MAX_BATTLERS_COUNT]; PopulateArrayWithBattlers(battlers); @@ -5129,7 +5126,6 @@ static void CheckQuickClaw_CustapBerryActivation(void) { if (gProtectStructs[battler].usedCustapBerry) { - gProtectStructs[battler].usedCustapBerry = FALSE; gLastUsedItem = gBattleMons[battler].item; PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); if (GetBattlerHoldEffect(battler, FALSE) == HOLD_EFFECT_CUSTAP_BERRY) @@ -5185,7 +5181,7 @@ static void RunTurnActionsFunctions(void) // Mega Evolve / Focus Punch-like moves after switching, items, running, but before using a move. if (gCurrentActionFuncId == B_ACTION_USE_MOVE && !gBattleStruct->effectsBeforeUsingMoveDone) { - if (TryDoMegaEvosBeforeMoves()) + if (TryDoGimmicksBeforeMoves()) return; else if (TryDoMoveEffectsBeforeMoves()) return; @@ -5399,9 +5395,16 @@ static void HandleEndTurn_FinishBattle(void) TestRunner_Battle_AfterLastTurn(); BeginFastPaletteFade(3); FadeOutMapMusic(5); - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS == TRUE + if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS == TRUE) TryRestoreHeldItems(); - #endif + + // Undo Dynamax HP multiplier before recalculating stats. + for (i = 0; i < gBattlersCount; ++i) + { + if (IsDynamaxed(i)) + UndoDynamax(i); + } + for (i = 0; i < PARTY_SIZE; i++) { bool8 changedForm = FALSE; @@ -5417,11 +5420,9 @@ static void HandleEndTurn_FinishBattle(void) gBattleStruct->changedSpecies[B_SIDE_PLAYER][i] = SPECIES_NONE; gBattleStruct->changedSpecies[B_SIDE_OPPONENT][i] = SPECIES_NONE; - #if B_RECALCULATE_STATS >= GEN_5 // Recalculate the stats of every party member before the end - if (!changedForm) + if (!changedForm && B_RECALCULATE_STATS >= GEN_5) CalculateMonStats(&gPlayerParty[i]); - #endif } // Clear battle mon species to avoid a bug on the next battle that causes // healthboxes loading incorrectly due to it trying to create a Mega Indicator @@ -5454,10 +5455,9 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_WALLY_TUTORIAL)) - #if B_EVOLUTION_AFTER_WHITEOUT <= GEN_5 - && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT) - #endif - ) + && (B_EVOLUTION_AFTER_WHITEOUT >= GEN_6 + || gBattleOutcome == B_OUTCOME_WON + || gBattleOutcome == B_OUTCOME_CAUGHT)) { gBattleMainFunc = TrySpecialEvolution; } @@ -5635,6 +5635,10 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) if (holdEffect == gBattleMoves[move].argument) gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_2; } + else if (gBattleMoves[move].effect == EFFECT_IVY_CUDGEL && holdEffect == HOLD_EFFECT_MASK) + { + gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_2; + } else if (gBattleMoves[move].effect == EFFECT_REVELATION_DANCE) { if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY) @@ -5644,6 +5648,13 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) else if (gBattleMons[battlerAtk].type3 != TYPE_MYSTERY) gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type3 | F_DYNAMIC_TYPE_2; } + else if (gBattleMoves[move].effect == EFFECT_RAGING_BULL + && (gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + { + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_2; + } else if (gBattleMoves[move].effect == EFFECT_NATURAL_GIFT) { if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES) @@ -5667,13 +5678,8 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } attackerAbility = GetBattlerAbility(battlerAtk); - GET_MOVE_TYPE(move, moveType); - if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) - || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) - { - gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; - } - else if (gBattleMoves[move].type == TYPE_NORMAL + + if (gBattleMoves[move].type == TYPE_NORMAL && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER && gBattleMoves[move].effect != EFFECT_WEATHER_BALL && gBattleMoves[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM @@ -5686,7 +5692,8 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) ) { gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_2; - gBattleStruct->ateBoost[battlerAtk] = 1; + if (!IsDynamaxed(battlerAtk)) + gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gBattleMoves[move].type != TYPE_NORMAL && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER @@ -5694,21 +5701,23 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) && attackerAbility == ABILITY_NORMALIZE) { gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; - gBattleStruct->ateBoost[battlerAtk] = 1; + if (!IsDynamaxed(battlerAtk)) + gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gBattleMoves[move].soundMove && attackerAbility == ABILITY_LIQUID_VOICE) { gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_2; } - else if (gStatuses4[battlerAtk] & STATUS4_PLASMA_FISTS && moveType == TYPE_NORMAL) - { - gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; - } else if (move == MOVE_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY) { gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_2; } + GET_MOVE_TYPE(move, moveType); + if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) + || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) + gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2; + // Check if a gem should activate. GET_MOVE_TYPE(move, moveType); if (holdEffect == HOLD_EFFECT_GEMS @@ -5732,9 +5741,9 @@ void SetTotemBoost(void) { if (*(&gSpecialVar_0x8001 + i)) { - gTotemBoosts[battler].stats |= (1 << i); - gTotemBoosts[battler].statChanges[i] = *(&gSpecialVar_0x8001 + i); - gTotemBoosts[battler].stats |= 0x80; // used as a flag for the "totem flared to life" script + gQueuedStatBoosts[battler].stats |= (1 << i); + gQueuedStatBoosts[battler].statChanges[i] = *(&gSpecialVar_0x8001 + i); + gQueuedStatBoosts[battler].stats |= 0x80; // used as a flag for the "totem flared to life" script } } } diff --git a/src/battle_message.c b/src/battle_message.c index 9ca01f8cf9..f2052e6919 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -532,12 +532,12 @@ static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; // New battle strings. -static const s8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); -static const s8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); -static const s8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); -static const s8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); -static const s8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); -static const s8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); +static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); +static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); +static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); +static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); +static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); +static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); @@ -702,7 +702,7 @@ static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is abso static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!"); static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); -static const u8 sText_StatWasNotLowered[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas not lowered!"); +static const u8 sText_ClearAmuletWontLowerStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} prevents\nits stats from being lowered!"); static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared."); static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); @@ -792,8 +792,21 @@ static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); +static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed steel floats\naround {B_DEF_TEAM2} team!"); +static const u8 sText_SharpSteelDmg[] = _("Sharp steel bit into {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nsharp steel!"); +static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The sharp steel disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} team got trapped\nwith vines!"); +static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Vine Lash's ferocious beating!"); +static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} team got caught\nin a vortex of water!"); +static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Cannonade's vortex!"); +static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} team was surrounded\nby flames!"); +static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up\nwithin G-Max Wildfire's flames!"); +static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} team was surrounded\nby rocks!"); +static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nrocks thrown out by G-Max Volcalith!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); +static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by\nthe power of Dynamax!"); static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); @@ -807,9 +820,15 @@ 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_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ZEROTOHEROTRANSFORMATION - BATTLESTRINGS_TABLE_START] = sText_ZeroToHeroTransformation, + [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, @@ -822,6 +841,17 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNREVIVEDREADYTOFIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnRevivedReadyToFight, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, + [STRINGID_PKMNHURTBYROCKSTHROWN - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByRocksThrown, + [STRINGID_TEAMSURROUNDEDBYROCKS - BATTLESTRINGS_TABLE_START] = sText_TeamSurroundedByRocks, + [STRINGID_PKMNBURNINGUP - BATTLESTRINGS_TABLE_START] = sText_PkmnBurningUp, + [STRINGID_TEAMSURROUNDEDBYFIRE - BATTLESTRINGS_TABLE_START] = sText_TeamSurroundedByFire, + [STRINGID_PKMNHURTBYVORTEX - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByVortex, + [STRINGID_TEAMCAUGHTINVORTEX - BATTLESTRINGS_TABLE_START] = sText_TeamCaughtInVortex, + [STRINGID_PKMNHURTBYVINES - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByVines, + [STRINGID_TEAMTRAPPEDWITHVINES - BATTLESTRINGS_TABLE_START] = sText_TeamTrappedWithVines, + [STRINGID_PKMNBLEWAWAYSHARPSTEEL - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwaySharpSteel, + [STRINGID_SHARPSTEELDMG - BATTLESTRINGS_TABLE_START] = sText_SharpSteelDmg, + [STRINGID_SHARPSTEELFLOATS - BATTLESTRINGS_TABLE_START] = sText_SharpSteelFloats, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, [STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility, @@ -896,7 +926,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ASANDSTORMKICKEDUP - BATTLESTRINGS_TABLE_START] = sText_ASandstormKickedUp, [STRINGID_BATTLERABILITYRAISEDSTAT - BATTLESTRINGS_TABLE_START] = sText_BattlerAbilityRaisedStat, [STRINGID_FETCHEDPOKEBALL - BATTLESTRINGS_TABLE_START] = sText_FetchedPokeBall, - [STRINGID_STATWASNOTLOWERED - BATTLESTRINGS_TABLE_START] = sText_StatWasNotLowered, + [STRINGID_CLEARAMULETWONTLOWERSTATS - BATTLESTRINGS_TABLE_START] = sText_ClearAmuletWontLowerStats, [STRINGID_CLOAKEDINAFREEZINGLIGHT - BATTLESTRINGS_TABLE_START] = sText_CloakedInAFreezingLight, [STRINGID_DESTINYKNOTACTIVATES - BATTLESTRINGS_TABLE_START] = sText_DestinyKnotActivates, [STRINGID_NOONEWILLBEABLETORUNAWAY - BATTLESTRINGS_TABLE_START] = sText_NoOneWillBeAbleToRun, @@ -1416,6 +1446,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesDisappearedFromTeam, [STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StealthRockDisappearedFromTeam, [STRINGID_STICKYWEBDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StickyWebDisappearedFromTeam, + [STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_SharpSteelDisappearedFromTeam, [STRINGID_IONDELUGEON - BATTLESTRINGS_TABLE_START] = sText_IonDelugeOn, [STRINGID_TOPSYTURVYSWITCHEDSTATS - BATTLESTRINGS_TABLE_START] = sText_TopsyTurvySwitchedStats, [STRINGID_TERRAINBECOMESMISTY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesMisty, @@ -1469,6 +1500,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ULTRABURSTREACTING - BATTLESTRINGS_TABLE_START] = sText_UltraBurstReacting, [STRINGID_ULTRABURSTCOMPLETED - BATTLESTRINGS_TABLE_START] = sText_UltraBurstCompleted, [STRINGID_TEAMGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_TeamGainedEXP, + [STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP - BATTLESTRINGS_TABLE_START] = sText_TargetCoveredInStickyCandySyrup, }; const u16 gTrainerUsedItemStringIds[] = @@ -1530,8 +1562,10 @@ const u16 gDmgHazardsStringIds[] = { [B_MSG_PKMNHURTBYSPIKES] = STRINGID_PKMNHURTBYSPIKES, [B_MSG_STEALTHROCKDMG] = STRINGID_STEALTHROCKDMG, + [B_MSG_SHARPSTEELDMG] = STRINGID_SHARPSTEELDMG, [B_MSG_POINTEDSTONESFLOAT] = STRINGID_POINTEDSTONESFLOAT, - [B_MSG_SPIKESSCATTERED] = STRINGID_SPIKESSCATTERED + [B_MSG_SPIKESSCATTERED] = STRINGID_SPIKESSCATTERED, + [B_MSG_SHARPSTEELFLOATS] = STRINGID_SHARPSTEELFLOATS, }; const u16 gSwitchInAbilityStringIds[] = @@ -1850,11 +1884,7 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING, [WEATHER_SUNNY] = STRINGID_ITISRAINING, [WEATHER_RAIN] = STRINGID_ITISRAINING, -#if B_OVERWORLD_SNOW >= GEN_9 - [WEATHER_SNOW] = STRINGID_STARTEDSNOW, -#else - [WEATHER_SNOW] = STRINGID_STARTEDHAIL, -#endif + [WEATHER_SNOW] = (B_OVERWORLD_SNOW >= GEN_9 ? STRINGID_STARTEDSNOW : STRINGID_STARTEDHAIL), [WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING, [WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING, [WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING, @@ -1957,6 +1987,27 @@ const u16 gStatusConditionsStringIds[] = STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNGOTFROSTBITE }; +const u16 gStatus2StringIds[] = +{ + STRINGID_PKMNWASCONFUSED, STRINGID_PKMNFELLINLOVE, STRINGID_TARGETCANTESCAPENOW, STRINGID_PKMNSUBJECTEDTOTORMENT +}; + +const u16 gDamageNonTypesStartStringIds[] = +{ + [B_MSG_TRAPPED_WITH_VINES] = STRINGID_TEAMTRAPPEDWITHVINES, + [B_MSG_CAUGHT_IN_VORTEX] = STRINGID_TEAMCAUGHTINVORTEX, + [B_MSG_SURROUNDED_BY_FIRE] = STRINGID_TEAMSURROUNDEDBYFIRE, + [B_MSG_SURROUNDED_BY_ROCKS] = STRINGID_TEAMSURROUNDEDBYROCKS, +}; + +const u16 gDamageNonTypesDmgStringIds[] = +{ + [B_MSG_HURT_BY_VINES] = STRINGID_PKMNHURTBYVINES, + [B_MSG_HURT_BY_VORTEX] = STRINGID_PKMNHURTBYVORTEX, + [B_MSG_BURNING_UP] = STRINGID_PKMNBURNINGUP, + [B_MSG_HURT_BY_ROCKS_THROWN] = STRINGID_PKMNHURTBYROCKSTHROWN, +}; + const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); @@ -2851,6 +2902,8 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_USEDMOVE: // pokemon used a move msg if (gBattleStruct->zmove.active && gBattleStruct->zmove.activeSplit != SPLIT_STATUS) StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove)); + else if (IsMaxMove(gBattleMsgDataPtr->currentMove)) + StringCopy(gBattleTextBuff3, GetMaxMoveName(gBattleMsgDataPtr->currentMove)); else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); else @@ -2948,7 +3001,7 @@ void BufferStringBattle(u16 stringID, u32 battler) u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { - BattleStringExpandPlaceholders(src, gDisplayedStringBattle); + return BattleStringExpandPlaceholders(src, gDisplayedStringBattle); } static const u8 *TryGetStatusString(u8 *src) @@ -3016,7 +3069,7 @@ static void GetBattlerNick(u32 battler, u8 *dst) static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) { - const u8 *toCpy; + const u8 *toCpy = NULL; if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) { @@ -3068,7 +3121,7 @@ static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, static const u8 *BattleStringGetOpponentName(u8 *text, u8 multiplayerId, u8 battler) { - const u8 *toCpy; + const u8 *toCpy = NULL; switch (GetBattlerPosition(battler)) { @@ -3088,7 +3141,7 @@ static const u8 *BattleStringGetOpponentName(u8 *text, u8 multiplayerId, u8 batt static const u8 *BattleStringGetPlayerName(u8 *text, u8 battler) { - const u8 *toCpy; + const u8 *toCpy = NULL; switch (GetBattlerPosition(battler)) { @@ -3164,7 +3217,6 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) // This buffer may hold either the name of a trainer, pokemon, or item. u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; - s32 i; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) multiplayerId = gRecordedBattleMultiplayerId; @@ -3745,7 +3797,7 @@ void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) // unused, since the value loaded into the buffer is not read; it loaded one of // two particles (either "?" or "?") which works in tandem with ChooseTypeOfMoveUsedString // below to effect changes in the meaning of the line. -static void ChooseMoveUsedParticle(u8 *textBuff) +static void UNUSED ChooseMoveUsedParticle(u8 *textBuff) { s32 counter = 0; u32 i = 0; @@ -3785,7 +3837,7 @@ static void ChooseMoveUsedParticle(u8 *textBuff) // // sText_ExclamationMark5 was " ????!" This resulted in a translation of // "'s attack!". -static void ChooseTypeOfMoveUsedString(u8 *dst) +static void UNUSED ChooseTypeOfMoveUsedString(u8 *dst) { s32 counter = 0; s32 i = 0; @@ -4028,9 +4080,8 @@ u32 BattlerHPPercentage(u32 battler, u32 operation, u32 threshold) case GREATER_THAN_OR_EQUAL: return gBattleMons[battler].hp >= (gBattleMons[battler].maxHP / threshold); case NOT_EQUAL: - return gBattleMons[battler].hp != (gBattleMons[battler].maxHP / threshold); default: - break; + return gBattleMons[battler].hp != (gBattleMons[battler].maxHP / threshold); } } diff --git a/src/battle_pike.c b/src/battle_pike.c index 9070fb6595..0692b68063 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -861,10 +861,7 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) break; case STATUS1_PARALYSIS: if (gSpeciesInfo[species].types[0] == TYPE_GROUND || gSpeciesInfo[species].types[1] == TYPE_GROUND - #if B_PARALYZE_ELECTRIC >= GEN_6 - || gSpeciesInfo[species].types[0] == TYPE_ELECTRIC || gSpeciesInfo[species].types[1] == TYPE_ELECTRIC - #endif - ) + || (B_PARALYZE_ELECTRIC >= GEN_6 && (gSpeciesInfo[species].types[0] == TYPE_ELECTRIC || gSpeciesInfo[species].types[1] == TYPE_ELECTRIC))) ret = TRUE; break; case STATUS1_BURN: @@ -916,11 +913,7 @@ static bool8 TryInflictRandomStatus(void) if (rand < 35) sStatusFlags = STATUS1_TOXIC_POISON; else if (rand < 60) - #if B_USE_FROSTBITE == TRUE - sStatusFlags = STATUS1_FROSTBITE; - #else - sStatusFlags = STATUS1_FREEZE; - #endif + sStatusFlags = B_USE_FROSTBITE ? STATUS1_FROSTBITE : STATUS1_FREEZE; else if (rand < 80) sStatusFlags = STATUS1_PARALYSIS; else if (rand < 90) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index ba3d620111..1f73ac5a9d 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -27,6 +27,7 @@ #include "overworld.h" #include "event_scripts.h" #include "graphics.h" +#include "wild_encounter.h" #include "constants/battle_frontier.h" #include "constants/battle_pyramid.h" #include "constants/event_objects.h" @@ -101,8 +102,13 @@ static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8, u8, u8, u8 *, u8, u // Const rom data. #define ABILITY_RANDOM 2 // For wild mons data. -#include "data/battle_frontier/battle_pyramid_level_50_wild_mons.h" -#include "data/battle_frontier/battle_pyramid_open_level_wild_mons.h" +#if BATTLE_PYRAMID_RANDOM_ENCOUNTERS == TRUE + #include "data/battle_frontier/battle_pyramid_wild_requirements.h" +#else + #include "data/battle_frontier/battle_pyramid_level_50_wild_mons.h" + #include "data/battle_frontier/battle_pyramid_open_level_wild_mons.h" +#endif + static const struct PyramidFloorTemplate sPyramidFloorTemplates[] = { @@ -1340,6 +1346,205 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId) gObjectEvents[gSelectedObjectEvent].initialCoords.y = gObjectEvents[gSelectedObjectEvent].currentCoords.y; } +#if BATTLE_PYRAMID_RANDOM_ENCOUNTERS == TRUE +// check if given species evolved from a specific evolutionary stone +// if nItems is passed as 0, it will check for any EVO_ITEM case +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; +static bool32 CheckBattlePyramidEvoRequirement(u16 species, const u16 *evoItems, u8 nItems) +{ + u32 i, j, k; + for (i = 0; i < NUM_SPECIES; i++) + { + for (j = 0; j < EVOS_PER_MON; j++) + { + if (gEvolutionTable[i][j].targetSpecies == species + && (gEvolutionTable[i][j].method == EVO_ITEM || gEvolutionTable[i][j].method == EVO_ITEM_MALE || gEvolutionTable[i][j].method == EVO_ITEM_FEMALE)) + { + if (nItems == 0) + { + // Any EVO_ITEM case will do + return TRUE; + } + else + { + // Otherwise, need to match specific set provided + for (k = 0; k < nItems; k++) { + if (gEvolutionTable[i][j].param == evoItems[k]) { + return TRUE; + } + } + } + } + } + } + return FALSE; +} + +extern u32 GetTotalBaseStat(u32 species); +void GenerateBattlePyramidWildMon(void) +{ + u8 name[POKEMON_NAME_LENGTH + 1]; + int i, j; + u32 id; + u32 lvl = gSaveBlock2Ptr->frontier.lvlMode; + u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / 7) % TOTAL_PYRAMID_ROUNDS; + const struct BattlePyramidRequirement *reqs = &sBattlePyramidRequirementsByRound[round]; + u16 species; + u32 bstLim; + u16 *moves = NULL; + u16 *abilities = NULL; + int moveCount = 0, abilityCount = 0; + + if (reqs->nMoves != 0) + moves = AllocZeroed(sizeof(u16) * reqs->nMoves); + + if (reqs->nAbilities != 0) + abilities = AllocZeroed(sizeof(u16) * reqs->nAbilities); + + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; + + id = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) - 1; // index in table (0-11) -> higher index is lower probability + bstLim = 450 + (25*round) + (5*id); // higher BST limit for 'rarer' wild mon rolls + + while (1) + { + species = Random() % FORMS_START; + // check type + if (reqs->type != TYPE_MYSTERY && gSpeciesInfo[species].types[0] != reqs->type && gSpeciesInfo[species].types[1] != reqs->type) + continue; + + // check base stat total + if (GetTotalBaseStat(species) > bstLim) + continue; + + // check moves + if (reqs->nMoves != 0) + { + moveCount = 0; + // get list of moves that can be learned + for (i = 0; i < reqs->nMoves; i++) + { + if (CanLearnTeachableMove(species, reqs->moves[i])) + { + moves[moveCount] = reqs->moves[i]; + moveCount++; + } + } + if (moveCount == 0) + continue; + } + + // check abilities + if (reqs->nAbilities != 0) + { + abilityCount = 0; + // get list of moves that can be learned + for (i = 0; i < reqs->nAbilities; i++) + { + for (j = 0; j < NUM_ABILITY_SLOTS; j++) + { + if (gSpeciesInfo[species].abilities[j] == reqs->abilities[i]) + { + abilities[abilityCount] = reqs->abilities[i]; + abilityCount++; + break; + } + } + } + if (abilityCount == 0) + continue; + } + // check evos + if (reqs->evoItems[0] != 0 && !CheckBattlePyramidEvoRequirement(species, reqs->evoItems, reqs->nEvoItems)) + continue; + + // we found a species we can use! + break; + } + + // Set species, name + SetMonData(&gEnemyParty[0], MON_DATA_SPECIES, &species); + StringCopy(name, gSpeciesNames[species]); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, &name); + + // set level + if (lvl != FRONTIER_LVL_50) + { + lvl = SetFacilityPtrsGetLevel(); + lvl -= (5 + (Random() % (TOTAL_PYRAMID_ROUNDS - round)/2)); + } + else + { + lvl = 50 - (5 + (Random() % (TOTAL_PYRAMID_ROUNDS - round)/4)); + } + SetMonData(&gEnemyParty[0], + MON_DATA_EXP, + &gExperienceTables[gSpeciesInfo[species].growthRate][lvl]); + + // Give initial moves and replace one with desired move + GiveBoxMonInitialMoveset(&gEnemyParty[0].box); + if (moves != NULL) + { + // get a random move to give + i = 0; + while (1) + { + id = moves[Random() % moveCount]; + if (!MonKnowsMove(&gEnemyParty[0], id)) + { + // replace random move + SetMonData(&gEnemyParty[0], MON_DATA_MOVE1 + Random() % MAX_MON_MOVES, &id); + break; + } + i++; + if (i == 20) + break; + } + Free(moves); + } + + // Initialize a random ability num + if (gSpeciesInfo[species].abilities[1]) + { + i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2; + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); + } + else + { + i = 0; + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); + } + + // Try to replace with desired ability + if (abilities != NULL) + { + i = 0; + while (1) + { + id = abilities[Random() % abilityCount]; + for (j = 0; j < NUM_ABILITY_SLOTS; j++) + { + if (id == gSpeciesInfo[species].abilities[j]) + { + // Set this ability num + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &id); + } + } + } + Free(abilities); + } + + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] >= 140) + { + id = (Random() % 17) + 15; + for (i = 0; i < NUM_STATS; i++) + SetMonData(&gEnemyParty[0], MON_DATA_HP_IV + i, &id); + } + + CalculateMonStats(&gEnemyParty[0]); +} +#else void GenerateBattlePyramidWildMon(void) { u8 name[POKEMON_NAME_LENGTH + 1]; @@ -1412,6 +1617,7 @@ void GenerateBattlePyramidWildMon(void) } CalculateMonStats(&gEnemyParty[0]); } +#endif u8 GetPyramidRunMultiplier(void) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c1d43a1b38..9268e99ca2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -79,7 +79,7 @@ // // The arguments can be accessed as cmd->failInstr and cmd->move. // gBattlescriptCurrInstr = cmd->nextInstr; advances to the next instruction. -#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd = (const void *)gBattlescriptCurrInstr +#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd UNUSED = (const void *)gBattlescriptCurrInstr #define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__) #define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__) @@ -336,9 +336,7 @@ static const u16 sWhiteOutBadgeMoney[9] = { 8, 16, 24, 36, 48, 64, 80, 100, 120 #define TAG_LVLUP_BANNER_MON_ICON 55130 -static bool8 IsTwoTurnsMove(u16 move); static void TrySetDestinyBondToHappen(void); -static u8 AttacksThisTurn(u8 battler, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2. static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr); static bool32 IsMonGettingExpSentOut(void); static void InitLevelUpBanner(void); @@ -356,6 +354,7 @@ static void TryUpdateRoundTurnOrder(void); static bool32 ChangeOrderTargetAfterAttacker(void); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); static void RemoveAllTerrains(void); +static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -980,7 +979,7 @@ static const u16 sFinalStrikeOnlyEffects[] = EFFECT_SECRET_POWER, EFFECT_SMACK_DOWN, EFFECT_SPARKLING_ARIA, - EFFECT_SMELLINGSALT, + EFFECT_SMELLING_SALTS, EFFECT_WAKE_UP_SLAP, EFFECT_HIT_ESCAPE, EFFECT_RECOIL_HP_25, @@ -1120,16 +1119,8 @@ static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] = [BATTLE_TERRAIN_DISTORTION_WORLD] = TYPE_NORMAL, [BATTLE_TERRAIN_SPACE] = TYPE_DRAGON, [BATTLE_TERRAIN_ULTRA_SPACE] = TYPE_PSYCHIC, -#if B_CAMOUFLAGE_TYPES >= GEN_5 - [BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND, - [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND, -#elif B_CAMOUFLAGE_TYPES == GEN_4 - [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK, - [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND, -#else - [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK, - [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL, -#endif + [BATTLE_TERRAIN_MOUNTAIN] = (B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK), + [BATTLE_TERRAIN_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL), }; // In Battle Palace, moves are chosen based on the pokemons nature rather than by the player @@ -1235,7 +1226,7 @@ static bool32 TryAegiFormChange(void) { default: return FALSE; - case SPECIES_AEGISLASH: // Shield -> Blade + case SPECIES_AEGISLASH_SHIELD: // Shield -> Blade if (IS_MOVE_STATUS(gCurrentMove)) return FALSE; gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_BLADE; @@ -1243,7 +1234,7 @@ static bool32 TryAegiFormChange(void) case SPECIES_AEGISLASH_BLADE: // Blade -> Shield if (gCurrentMove != MOVE_KINGS_SHIELD) return FALSE; - gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH; + gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_SHIELD; break; } @@ -1273,6 +1264,14 @@ static void Cmd_attackcanceler(void) u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); GET_MOVE_TYPE(gCurrentMove, moveType); + // Weight-based moves are blocked by Dynamax. + if (IsDynamaxed(gBattlerTarget) && IsMoveBlockedByDynamax(gCurrentMove)) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax; + return; + } + if (gBattleOutcome != 0) { gCurrentActionFuncId = B_ACTION_FINISHED; @@ -1284,10 +1283,8 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; return; } -#if B_STANCE_CHANGE_FAIL <= GEN_6 - if (TryAegiFormChange()) + if (B_STANCE_CHANGE_FAIL < GEN_7 && TryAegiFormChange()) return; -#endif if (AtkCanceller_UnableToUseMove(moveType)) return; @@ -1345,10 +1342,8 @@ static void Cmd_attackcanceler(void) gMoveResultFlags |= MOVE_RESULT_MISSED; return; } -#if B_STANCE_CHANGE_FAIL >= GEN_7 - if (TryAegiFormChange()) + if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryAegiFormChange()) return; -#endif gHitMarker &= ~HITMARKER_ALLOW_NO_PP; @@ -1370,14 +1365,14 @@ static void Cmd_attackcanceler(void) gHitMarker |= HITMARKER_OBEYS; // Check if no available target present on the field. if (NoTargetPresent(gBattlerAttacker, gCurrentMove) - && (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) + && (!gBattleMoves[gCurrentMove].twoTurnMove || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) { if (gBattleMoves[gCurrentMove].effect == EFFECT_FLING) // Edge case for removing a mon's item when there is no target available after using Fling. gBattlescriptCurrInstr = BattleScript_FlingFailConsumeItem; else gBattlescriptCurrInstr = BattleScript_FailedFromAtkString; - if (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) + if (!gBattleMoves[gCurrentMove].twoTurnMove || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) CancelMultiTurnMoves(gBattlerAttacker); return; } @@ -1386,7 +1381,6 @@ static void Cmd_attackcanceler(void) && gBattleMoves[gCurrentMove].magicCoatAffected && !gProtectStructs[gBattlerAttacker].usesBouncedMove) { - PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 0; // Edge case for bouncing a powder move against a grass type pokemon. @@ -1419,7 +1413,8 @@ static void Cmd_attackcanceler(void) } // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) - if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(gBattlerTarget)) + if ((gBattleStruct->zmove.active || IsMaxMove(gCurrentMove)) + && IS_BATTLER_PROTECTED(gBattlerTarget)) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; @@ -1430,7 +1425,6 @@ static void Cmd_attackcanceler(void) { if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].snatchAffected) { - PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH); gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE; gBattleScripting.battler = gBattlerByTurnOrder[i]; BattleScriptPushCursor(); @@ -1457,7 +1451,7 @@ static void Cmd_attackcanceler(void) } else if (IsBattlerProtected(gBattlerTarget, gCurrentMove) && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) + && ((!gBattleMoves[gCurrentMove].twoTurnMove || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) && gBattleMoves[gCurrentMove].effect != EFFECT_SUCKER_PUNCH) { if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) @@ -1537,18 +1531,13 @@ static bool8 JumpIfMoveAffectedByProtect(u16 move) static bool32 AccuracyCalcHelper(u16 move) { - if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + if ((gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + || (B_TOXIC_NEVER_MISS >= GEN_6 && gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) + || gStatuses4[gBattlerTarget] & STATUS4_GLAIVE_RUSH) { JumpIfMoveFailed(7, move); return TRUE; } -#if B_TOXIC_NEVER_MISS >= GEN_6 - else if (gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) - { - JumpIfMoveFailed(7, move); - return TRUE; - } -#endif // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { @@ -1588,14 +1577,12 @@ static bool32 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } - #if B_BLIZZARD_HAIL >= GEN_4 - else if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD) + else if (B_BLIZZARD_HAIL >= GEN_4 && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD) { - // thunder/hurricane ignore acc checks in rain unless target is holding utility umbrella + // Blizzard ignores acc checks in Hail in Gen4+ JumpIfMoveFailed(7, move); return TRUE; } - #endif } if (gBattleMoves[move].effect == EFFECT_VITAL_THROW) @@ -1604,13 +1591,13 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } -#if B_MINIMIZE_DMG_ACC >= GEN_6 - if ((gStatuses3[gBattlerTarget] & STATUS3_MINIMIZED) && gBattleMoves[move].minimizeDoubleDamage) + if (B_MINIMIZE_DMG_ACC >= GEN_6 + && (gStatuses3[gBattlerTarget] & STATUS3_MINIMIZED) + && gBattleMoves[move].minimizeDoubleDamage) { JumpIfMoveFailed(7, move); return TRUE; } -#endif if (gBattleMoves[move].accuracy == 0) { @@ -1633,7 +1620,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u gPotentialItemEffectBattler = battlerDef; accStage = gBattleMons[battlerAtk].statStages[STAT_ACC]; evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION]; - if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE) + if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE || (B_ILLUMINATE_EFFECT >= GEN_9 && atkAbility == ABILITY_ILLUMINATE)) evasionStage = DEFAULT_STAT_STAGE; if (gBattleMoves[move].ignoresTargetDefenseEvasionStages) evasionStage = DEFAULT_STAT_STAGE; @@ -1735,12 +1722,8 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u if (gFieldStatuses & STATUS_FIELD_GRAVITY) calc = (calc * 5) / 3; // 1.66 Gravity acc boost -#if B_AFFECTION_MECHANICS == TRUE - // With high affection/friendship there's a chance to evade a move by substracting 10% of its accuracy. - // I can't find exact information about that chance, so I'm just gonna write it as a 20% chance for now. - if (GetBattlerFriendshipScore(battlerDef) >= FRIENDSHIP_150_TO_199 && (Random() % 100) <= 20) + if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerDef) == AFFECTION_FIVE_HEARTS) calc = (calc * 90) / 100; -#endif return calc; } @@ -1764,7 +1747,7 @@ static void Cmd_accuracycheck(void) gBattlescriptCurrInstr = cmd->nextInstr; else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE)) gBattlescriptCurrInstr = cmd->failInstr; - else if (!JumpIfMoveAffectedByProtect(0)) + else if (!JumpIfMoveAffectedByProtect(gCurrentMove)) gBattlescriptCurrInstr = cmd->nextInstr; } else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT @@ -1835,35 +1818,27 @@ static void Cmd_ppreduce(void) CMD_ARGS(); s32 i, ppToDeduct = 1; + u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (gBattleControllerExecFlags) return; - if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure) + if (moveTarget == MOVE_TARGET_BOTH + || moveTarget == MOVE_TARGET_FOES_AND_ALLY + || moveTarget == MOVE_TARGET_ALL_BATTLERS + || gBattleMoves[gCurrentMove].forcePressure) { - switch (GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove)) + for (i = 0; i < gBattlersCount; i++) { - case MOVE_TARGET_FOES_AND_ALLY: - for (i = 0; i < gBattlersCount; i++) - { - if (i != gBattlerAttacker && IsBattlerAlive(i)) - ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); - } - break; - case MOVE_TARGET_BOTH: - case MOVE_TARGET_OPPONENTS_FIELD: - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) - ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); - } - break; - default: - if (gBattlerAttacker != gBattlerTarget && GetBattlerAbility(gBattlerTarget) == ABILITY_PRESSURE) - ppToDeduct++; - break; + if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) + ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); } } + else if (moveTarget != MOVE_TARGET_OPPONENTS_FIELD) + { + if (gBattlerAttacker != gBattlerTarget && GetBattlerAbility(gBattlerTarget) == ABILITY_PRESSURE) + ppToDeduct++; + } if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos]) { @@ -1909,15 +1884,14 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec { s32 critChance = 0; - if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT - || gStatuses3[battlerAtk] & STATUS3_CANT_SCORE_A_CRIT) + if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT || gStatuses3[battlerAtk] & STATUS3_CANT_SCORE_A_CRIT + || abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) { critChance = -1; } else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS || gBattleMoves[move].effect == EFFECT_ALWAYS_CRIT - || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) - || move == MOVE_SURGING_STRIKES) + || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { critChance = -2; } @@ -1928,17 +1902,13 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec + (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) + 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY) + 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk) - #if B_AFFECTION_MECHANICS == TRUE - + 2 * (GetBattlerFriendshipScore(battlerAtk) >= FRIENDSHIP_200_TO_254) - #endif - + (abilityAtk == ABILITY_SUPER_LUCK); + + 2 * (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerAtk) == AFFECTION_FIVE_HEARTS) + + (abilityAtk == ABILITY_SUPER_LUCK) + + gBattleStruct->bonusCritStages[gBattlerAttacker]; - if (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) - { - if (recordAbility && critChance >= 2) // Record ability only if move had at least +1 chance to get a crit. - RecordAbilityBattle(battlerDef, abilityDef); - critChance = -1; - } + // Record ability only if move had at least +3 chance to get a crit + if (critChance >= 3 && recordAbility && (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)) + RecordAbilityBattle(battlerDef, abilityDef); if (critChance >= ARRAY_COUNT(sCriticalHitChance)) critChance = ARRAY_COUNT(sCriticalHitChance) - 1; @@ -2019,7 +1989,7 @@ static void Cmd_adjustdamage(void) u8 holdEffect, param; u32 moveType; - u32 friendshipScore = GetBattlerFriendshipScore(gBattlerTarget); + u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); u32 rand = Random() % 100; GET_MOVE_TYPE(gCurrentMove, moveType); @@ -2041,36 +2011,29 @@ static void Cmd_adjustdamage(void) RecordItemEffectBattle(gBattlerTarget, holdEffect); gSpecialStatuses[gBattlerTarget].focusBanded = TRUE; } - #if B_STURDY >= GEN_5 - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STURDY && BATTLER_MAX_HP(gBattlerTarget)) + else if (B_STURDY >= GEN_5 && GetBattlerAbility(gBattlerTarget) == ABILITY_STURDY && BATTLER_MAX_HP(gBattlerTarget)) { RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY); gSpecialStatuses[gBattlerTarget].sturdied = TRUE; } - #endif else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && BATTLER_MAX_HP(gBattlerTarget)) { RecordItemEffectBattle(gBattlerTarget, holdEffect); gSpecialStatuses[gBattlerTarget].focusSashed = TRUE; } -#if B_AFFECTION_MECHANICS == TRUE - else if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER && friendshipScore >= FRIENDSHIP_100_TO_149) + else if (B_AFFECTION_MECHANICS == TRUE && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER && affectionScore >= AFFECTION_THREE_HEARTS) { - if ((friendshipScore == FRIENDSHIP_MAX && rand < 25) - || (friendshipScore == FRIENDSHIP_200_TO_254 && rand < 20) - || (friendshipScore == FRIENDSHIP_150_TO_199 && rand < 15) - || (friendshipScore == FRIENDSHIP_100_TO_149 && rand < 10)) + if ((affectionScore == AFFECTION_FIVE_HEARTS && rand < 20) + || (affectionScore == AFFECTION_FOUR_HEARTS && rand < 15) + || (affectionScore == AFFECTION_THREE_HEARTS && rand < 10)) gSpecialStatuses[gBattlerTarget].affectionEndured = TRUE; } -#endif if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured && !gSpecialStatuses[gBattlerTarget].focusBanded && !gSpecialStatuses[gBattlerTarget].focusSashed -#if B_AFFECTION_MECHANICS == TRUE - && !gSpecialStatuses[gBattlerTarget].affectionEndured -#endif + && (B_AFFECTION_MECHANICS == FALSE || !gSpecialStatuses[gBattlerTarget].affectionEndured) && !gSpecialStatuses[gBattlerTarget].sturdied) goto END; @@ -2091,12 +2054,10 @@ static void Cmd_adjustdamage(void) gMoveResultFlags |= MOVE_RESULT_STURDIED; gLastUsedAbility = ABILITY_STURDY; } -#if B_AFFECTION_MECHANICS == TRUE - else if (gSpecialStatuses[gBattlerTarget].affectionEndured) + else if (B_AFFECTION_MECHANICS == TRUE && gSpecialStatuses[gBattlerTarget].affectionEndured) { gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED_AFFECTION; } -#endif END: gBattlescriptCurrInstr = cmd->nextInstr; @@ -2126,12 +2087,12 @@ END: // of a move that is Super Effective against a Flying-type Pokémon. if (gBattleWeather & B_WEATHER_STRONG_WINDS) { - if ((gBattleMons[gBattlerTarget].type1 == TYPE_FLYING - && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type1) >= UQ_4_12(2.0)) - || (gBattleMons[gBattlerTarget].type2 == TYPE_FLYING - && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type2) >= UQ_4_12(2.0)) - || (gBattleMons[gBattlerTarget].type3 == TYPE_FLYING - && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type3) >= UQ_4_12(2.0))) + if ((GetBattlerType(gBattlerTarget, 0) == TYPE_FLYING + && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 0)) >= UQ_4_12(2.0)) + || (GetBattlerType(gBattlerTarget, 1) == TYPE_FLYING + && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 1)) >= UQ_4_12(2.0)) + || (GetBattlerType(gBattlerTarget, 2) == TYPE_FLYING + && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 2)) >= UQ_4_12(2.0))) { gBattlerAbility = gBattlerTarget; BattleScriptPushCursor(); @@ -2289,18 +2250,11 @@ static void Cmd_datahpupdate(void) { CMD_ARGS(u8 battler); - u32 battler, moveType; + u32 battler; if (gBattleControllerExecFlags) return; - if (gBattleStruct->dynamicMoveType == 0) - moveType = gBattleMoves[gCurrentMove].type; - else if (!(gBattleStruct->dynamicMoveType & F_DYNAMIC_TYPE_1)) - moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; - else - moveType = gBattleMoves[gCurrentMove].type; - if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { battler = GetBattlerForBattleScript(cmd->battler); @@ -2585,8 +2539,7 @@ static void Cmd_resultmessage(void) { stringId = STRINGID_BUTITFAILED; } - #if B_AFFECTION_MECHANICS == TRUE - else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED_AFFECTION) + else if (B_AFFECTION_MECHANICS == TRUE && (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED_AFFECTION)) { gSpecialStatuses[gBattlerTarget].affectionEndured = FALSE; gMoveResultFlags &= ~MOVE_RESULT_FOE_ENDURED_AFFECTION; @@ -2594,7 +2547,6 @@ static void Cmd_resultmessage(void) gBattlescriptCurrInstr = BattleScript_AffectionBasedEndurance; return; } - #endif else { gBattleCommunication[MSG_DISPLAY] = 0; @@ -2756,7 +2708,7 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem) void SetMoveEffect(bool32 primary, u32 certain) { - s32 i, byTwo, affectsUser = 0; + s32 i, affectsUser = 0; bool32 statusChanged = FALSE; bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; @@ -2824,7 +2776,7 @@ void SetMoveEffect(bool32 primary, u32 certain) && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) INCREMENT_RESET_RETURN - if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) + if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) @@ -2835,6 +2787,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) // status change { + const u8 *cancelMultiTurnMovesResult = NULL; switch (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]) { case STATUS1_SLEEP: @@ -2854,7 +2807,9 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!CanSleep(gEffectBattler)) break; - CancelMultiTurnMoves(gEffectBattler); + cancelMultiTurnMovesResult = CancelMultiTurnMoves(gEffectBattler); + if (cancelMultiTurnMovesResult) + gBattlescriptCurrInstr = cancelMultiTurnMovesResult; statusChanged = TRUE; break; case STATUS1_POISON: @@ -2936,7 +2891,9 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!CanBeFrozen(gEffectBattler)) break; - CancelMultiTurnMoves(gEffectBattler); + cancelMultiTurnMovesResult = CancelMultiTurnMoves(gEffectBattler); + if (cancelMultiTurnMovesResult) + gBattlescriptCurrInstr = cancelMultiTurnMovesResult; statusChanged = TRUE; break; case STATUS1_PARALYSIS: @@ -3039,13 +2996,16 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP) - #if B_SLEEP_TURNS >= GEN_5 - gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); - #else - gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); - #endif + { + if (B_SLEEP_TURNS >= GEN_5) + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); + else + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); + } else + { gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; + } gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; @@ -3118,37 +3078,27 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_FLINCH: - if (battlerAbility == ABILITY_INNER_FOCUS) + if (battlerAbility == ABILITY_INNER_FOCUS + && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { - if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN) - { - gLastUsedAbility = ABILITY_INNER_FOCUS; - gBattlerAbility = gEffectBattler; - RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS); - gBattlescriptCurrInstr = BattleScript_FlinchPrevention; - } - else - { - gBattlescriptCurrInstr++; - } + gLastUsedAbility = ABILITY_INNER_FOCUS; + gBattlerAbility = gEffectBattler; + RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS); + gBattlescriptCurrInstr = BattleScript_FlinchPrevention; } - else + else if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber + && !IsDynamaxed(gEffectBattler)) { - if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber) - gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; - gBattlescriptCurrInstr++; + gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; } + gBattlescriptCurrInstr++; break; case MOVE_EFFECT_UPROAR: if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR)) { gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - #if B_UPROAR_TURNS >= GEN_5 - gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN(3); - #else - gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN((Random() & 3) + 2); - #endif + gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN(B_UPROAR_TURNS >= GEN_5 ? 3 : (Random() & 3) + 2); BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; @@ -3190,11 +3140,12 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - #if B_USE_FROSTBITE == TRUE - static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FROSTBITE, MOVE_EFFECT_PARALYSIS }; - #else - static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FREEZE, MOVE_EFFECT_PARALYSIS }; - #endif + static const u8 sTriAttackEffects[] = + { + MOVE_EFFECT_BURN, + B_USE_FROSTBITE == TRUE ? MOVE_EFFECT_FROSTBITE : MOVE_EFFECT_FREEZE, + MOVE_EFFECT_PARALYSIS + }; gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); SetMoveEffect(FALSE, 0); } @@ -3214,15 +3165,9 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED; if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) - #if B_BINDING_TURNS >= GEN_5 - gDisableStructs[gEffectBattler].wrapTurns = 7; + gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? 7 : 5; else - gDisableStructs[gEffectBattler].wrapTurns = (Random() % 2) + 4; - #else - gDisableStructs[gEffectBattler].wrapTurns = 5; - else - gDisableStructs[gEffectBattler].wrapTurns = (Random() % 4) + 2; - #endif + gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? (Random() % 2) + 4 : (Random() % 4) + 2; gBattleStruct->wrappedMove[gEffectBattler] = gCurrentMove; gBattleStruct->wrappedBy[gEffectBattler] = gBattlerAttacker; @@ -3514,6 +3459,8 @@ void SetMoveEffect(bool32 primary, u32 certain) { if (gBattleMons[gBattlerTarget].statStages[i] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[i] != MAX_STAT_STAGE) { + bool32 byTwo = FALSE; + gBattleStruct->stolenStats[0] |= gBitTable[i]; // Store by how many stages to raise the stat. gBattleStruct->stolenStats[i] = gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE; @@ -3569,10 +3516,7 @@ void SetMoveEffect(bool32 primary, u32 certain) break; case MOVE_EFFECT_INCINERATE: if ((gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX) - #if B_INCINERATE_GEMS >= GEN_6 - || (GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS) - #endif - ) + || (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS)) { gLastUsedItem = gBattleMons[gEffectBattler].item; gBattleMons[gEffectBattler].item = 0; @@ -3599,21 +3543,6 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; } break; - case MOVE_EFFECT_RELIC_SONG: - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)) - { - if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA) - { - gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); - } - else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) - { - gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); - } - } - break; case MOVE_EFFECT_TRAP_BOTH: if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) { @@ -3685,6 +3614,19 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr++; } } + + break; + case MOVE_EFFECT_SYRUP_BOMB: + if (!(gStatuses4[gEffectBattler] & STATUS4_SYRUP_BOMB)) + { + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + + gStatuses4[gEffectBattler] |= STATUS4_SYRUP_BOMB; + gDisableStructs[gEffectBattler].syrupBombTimer = 3; + gDisableStructs[gEffectBattler].syrupBombIsShiny = IsMonShiny(&party[gBattlerPartyIndexes[gBattlerAttacker]]); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_SyrupBombActivates; + } break; } } @@ -3808,7 +3750,8 @@ static void Cmd_tryfaintmon(void) gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES, NULL); gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } - if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0) + if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0 + && !IsDynamaxed(gBattlerAttacker)) { gHitMarker &= ~HITMARKER_DESTINYBOND; BattleScriptPush(gBattlescriptCurrInstr); @@ -3859,7 +3802,7 @@ static void Cmd_cleareffectsonfaint(void) if (gBattleControllerExecFlags == 0) { u32 battler = GetBattlerForBattleScript(cmd->battler); - + const u8 *clearDataResult = NULL; if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[battler].hp == 0) { gBattleMons[battler].status1 = 0; @@ -3867,8 +3810,11 @@ static void Cmd_cleareffectsonfaint(void) MarkBattlerForControllerExec(battler); } - FaintClearSetData(battler); // Effects like attractions, trapping, etc. - gBattlescriptCurrInstr = cmd->nextInstr; + clearDataResult = FaintClearSetData(battler); // Effects like attractions, trapping, etc. + if (clearDataResult) + gBattlescriptCurrInstr = clearDataResult; + else + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -4118,16 +4064,17 @@ static void Cmd_getexp(void) if (orderId < PARTY_SIZE) gBattleStruct->expGettersOrder[orderId] = PARTY_SIZE; - #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6) - calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 5; - #else - calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; - #endif + calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level; + if (B_SCALED_EXP >= GEN_5 && B_SCALED_EXP != GEN_6) + calculatedExp /= 5; + else + calculatedExp /= 7; if (B_TRAINER_EXP_MULTIPLIER <= GEN_7 && gBattleTypeFlags & BATTLE_TYPE_TRAINER) calculatedExp = (calculatedExp * 150) / 100; - #if B_SPLIT_EXP < GEN_6 + if (B_SPLIT_EXP < GEN_6) + { if (viaExpShare) // at least one mon is getting exp via exp share { *exp = SAFE_DIV(calculatedExp / 2, viaSentIn); @@ -4145,12 +4092,14 @@ static void Cmd_getexp(void) *exp = 1; gBattleStruct->expShareExpValue = 0; } - #else + } + else + { *exp = calculatedExp; gBattleStruct->expShareExpValue = calculatedExp / 2; if (gBattleStruct->expShareExpValue == 0) gBattleStruct->expShareExpValue = 1; - #endif + } gBattleScripting.getexpState++; gBattleStruct->expOrderId = 0; @@ -4175,9 +4124,8 @@ static void Cmd_getexp(void) { gBattleScripting.getexpState = 5; gBattleMoveDamage = 0; // used for exp - #if B_MAX_LEVEL_EV_GAINS >= GEN_5 - MonGainEVs(&gPlayerParty[*expMonId], gBattleMons[gBattlerFainted].species); - #endif + if (B_MAX_LEVEL_EV_GAINS >= GEN_5) + MonGainEVs(&gPlayerParty[*expMonId], gBattleMons[gBattlerFainted].species); } else { @@ -4201,11 +4149,7 @@ static void Cmd_getexp(void) gBattleMoveDamage = 0; if ((holdEffect == HOLD_EFFECT_EXP_SHARE || IsGen6ExpShareEnabled()) -#if B_SPLIT_EXP >= GEN_6 - // only give exp share bonus in later gens if the mon wasn't sent out - && gBattleMoveDamage == 0 -#endif - ) + && (B_SPLIT_EXP < GEN_6 || gBattleMoveDamage == 0)) // only give exp share bonus in later gens if the mon wasn't sent out { gBattleMoveDamage += gBattleStruct->expShareExpValue; } @@ -4358,7 +4302,6 @@ static void Cmd_getexp(void) } } -#if B_MULTI_BATTLE_WHITEOUT >= GEN_4 static bool32 NoAliveMonsForPlayerAndPartner(void) { u32 i; @@ -4378,7 +4321,6 @@ static bool32 NoAliveMonsForPlayerAndPartner(void) return (HP_count == 0); } -#endif static bool32 NoAliveMonsForPlayer(void) { @@ -4443,8 +4385,7 @@ static void Cmd_checkteamslost(void) if (gBattleControllerExecFlags) return; -#if B_MULTI_BATTLE_WHITEOUT >= GEN_4 - if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) + if (B_MULTI_BATTLE_WHITEOUT >= GEN_4 && gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) { if (NoAliveMonsForPlayerAndPartner()) gBattleOutcome |= B_OUTCOME_LOST; @@ -4454,10 +4395,6 @@ static void Cmd_checkteamslost(void) if (NoAliveMonsForPlayer()) gBattleOutcome |= B_OUTCOME_LOST; } -#else - if (NoAliveMonsForPlayer()) - gBattleOutcome |= B_OUTCOME_LOST; -#endif if (NoAliveMonsForOpponent()) gBattleOutcome |= B_OUTCOME_WON; @@ -4919,34 +4856,8 @@ static void Cmd_setroost(void) CMD_ARGS(); gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; - - // Pure flying type. - if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) - { - gBattleStruct->roostTypes[gBattlerAttacker][0] = TYPE_FLYING; - gBattleStruct->roostTypes[gBattlerAttacker][1] = TYPE_FLYING; -#if B_ROOST_PURE_FLYING >= GEN_5 - SET_BATTLER_TYPE(gBattlerAttacker, TYPE_NORMAL); -#else - SET_BATTLER_TYPE(gBattlerAttacker, TYPE_MYSTERY); -#endif - } - // Dual type with flying type. - else if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING || gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) - { - gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; - gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; - if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING) - gBattleMons[gBattlerAttacker].type1 = TYPE_MYSTERY; - else if (gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) - gBattleMons[gBattlerAttacker].type2 = TYPE_MYSTERY; - } - // Non-flying type. - else - { - gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; - gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; - } + gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; + gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -4977,14 +4888,12 @@ static void Cmd_endselectionscript(void) static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *nextInstr) { -#if B_TERRAIN_BG_CHANGE == FALSE - if (animId == B_ANIM_RESTORE_BG) + if (B_TERRAIN_BG_CHANGE == FALSE && animId == B_ANIM_RESTORE_BG) { // workaround for .if not working gBattlescriptCurrInstr = nextInstr; return; } -#endif if (animId == B_ANIM_STATS_CHANGE || animId == B_ANIM_SNATCH_MOVE @@ -4995,7 +4904,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n || animId == B_ANIM_PRIMAL_REVERSION || animId == B_ANIM_ULTRA_BURST) { - BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, *argPtr); + BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = nextInstr; } @@ -5010,7 +4919,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n || animId == B_ANIM_HAIL_CONTINUES || animId == B_ANIM_SNOW_CONTINUES) { - BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, *argPtr); + BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = nextInstr; } @@ -5020,7 +4929,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n } else { - BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, *argPtr); + BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = nextInstr; } @@ -5096,9 +5005,15 @@ static void Cmd_playstatchangeanimation(void) // Handle Contrary and Simple if (ability == ABILITY_CONTRARY) + { flags ^= STAT_CHANGE_NEGATIVE; + RecordAbilityBattle(battler, ability); + } else if (ability == ABILITY_SIMPLE) + { flags |= STAT_CHANGE_BY_TWO; + RecordAbilityBattle(battler, ability); + } if (flags & STAT_CHANGE_NEGATIVE) // goes down { @@ -5125,6 +5040,7 @@ static void Cmd_playstatchangeanimation(void) && ability != ABILITY_FULL_METAL_BODY && ability != ABILITY_WHITE_SMOKE && !(ability == ABILITY_KEEN_EYE && currStat == STAT_ACC) + && !(B_ILLUMINATE_EFFECT >= GEN_9 && ability == ABILITY_ILLUMINATE && currStat == STAT_ACC) && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK) && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF)) { @@ -5178,7 +5094,7 @@ static void Cmd_playstatchangeanimation(void) } else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) { - BtlController_EmitBattleAnimation(battler, BUFFER_A, B_ANIM_STATS_CHANGE, statAnimId); + BtlController_EmitBattleAnimation(battler, BUFFER_A, B_ANIM_STATS_CHANGE, &gDisableStructs[battler], statAnimId); MarkBattlerForControllerExec(battler); if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) gBattleScripting.statAnimPlayed = TRUE; @@ -5282,7 +5198,7 @@ static void Cmd_moveend(void) if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD); @@ -5296,11 +5212,10 @@ static void Cmd_moveend(void) i = gBattlerAttacker; gBattlerAttacker = gBattlerTarget; gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable - #if B_KINGS_SHIELD_LOWER_ATK >= GEN_8 - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1; - #else - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2; - #endif + if (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) + gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1; + else + gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; @@ -5374,10 +5289,7 @@ static void Cmd_moveend(void) && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget && (moveType == TYPE_FIRE - #if B_BURN_HIT_THAW >= GEN_6 - || gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT - #endif - ) + || (B_BURN_HIT_THAW >= GEN_6 && gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT)) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; @@ -5453,6 +5365,12 @@ static void Cmd_moveend(void) effect = TRUE; gBattleScripting.moveendState++; break; + case MOVEEND_OPPORTUNIST: + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) + effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers + else + gBattleScripting.moveendState++; + break; case MOVEEND_STATUS_IMMUNITY_ABILITIES: // status immunities if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers @@ -5678,6 +5596,8 @@ static void Cmd_moveend(void) { gLastPrintedMoves[gBattlerAttacker] = gChosenMove; gLastUsedMove = gCurrentMove; + if (IsMaxMove(gCurrentMove)) + gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMove[gBattlerAttacker]; } } if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) @@ -6057,19 +5977,17 @@ static void Cmd_moveend(void) BattleScriptPushCursor(); if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER) { - #if B_ABILITY_POP_UP == TRUE - gBattlescriptCurrInstr = BattleScript_EmergencyExit; - #else - gBattlescriptCurrInstr = BattleScript_EmergencyExitNoPopUp; - #endif + if (B_ABILITY_POP_UP == TRUE) + gBattlescriptCurrInstr = BattleScript_EmergencyExit; + else + gBattlescriptCurrInstr = BattleScript_EmergencyExitNoPopUp; } else { - #if B_ABILITY_POP_UP == TRUE - gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; - #else - gBattlescriptCurrInstr = BattleScript_EmergencyExitWildNoPopUp; - #endif + if (B_ABILITY_POP_UP == TRUE) + gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; + else + gBattlescriptCurrInstr = BattleScript_EmergencyExitWildNoPopUp; } return; } @@ -6080,10 +5998,8 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { if ((gSpecialStatuses[i].berryReduced - #if B_SYMBIOSIS_GEMS >= GEN_7 - || gSpecialStatuses[i].gemBoost - #endif - ) && SYMBIOSIS_CHECK(i, BATTLE_PARTNER(i))) + || (B_SYMBIOSIS_GEMS >= GEN_7 && gSpecialStatuses[i].gemBoost)) + && SYMBIOSIS_CHECK(i, BATTLE_PARTNER(i))) { BestowItem(BATTLE_PARTNER(i), i); gLastUsedAbility = gBattleMons[BATTLE_PARTNER(i)].ability; @@ -6102,12 +6018,11 @@ static void Cmd_moveend(void) if (gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget) *(gBattleStruct->moveTarget + gBattlerAttacker) = gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget & 0x3; - #if B_RAMPAGE_CANCELLING >= GEN_5 - if (gBattleMoves[gCurrentMove].effect == EFFECT_RAMPAGE // If we're rampaging + if (B_RAMPAGE_CANCELLING >= GEN_5 + && gBattleMoves[gCurrentMove].effect == EFFECT_RAMPAGE // If we're rampaging && (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) // And it is unusable && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn CancelMultiTurnMoves(gBattlerAttacker); // Cancel it - #endif gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].usesBouncedMove = FALSE; @@ -6892,7 +6807,7 @@ static void Cmd_switchineffects(void) && IsBattlerGrounded(battler)) { u8 spikesDmg = (5 - gSideTimers[GetBattlerSide(battler)].spikesAmount) * 2; - gBattleMoveDamage = gBattleMons[battler].maxHP / (spikesDmg); + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (spikesDmg); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -6956,6 +6871,17 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_StickyWebOnSwitchIn; } + else if (!(gDisableStructs[battler].steelSurgeDone) + && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_STEELSURGE) + && IsBattlerAffectedByHazards(battler, FALSE) + && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD) + { + gDisableStructs[battler].steelSurgeDone = TRUE; + gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_G_MAX_STEELSURGE].type, battler); + + if (gBattleMoveDamage != 0) + SetDmgHazardsBattlescript(battler, B_MSG_SHARPSTEELDMG); + } else if (gBattleMons[battler].hp != gBattleMons[battler].maxHP && gBattleStruct->zmove.healReplacement) { gBattleStruct->zmove.healReplacement = FALSE; @@ -6987,12 +6913,15 @@ static void Cmd_switchineffects(void) { if (DoSwitchInAbilitiesItems(battler)) return; + else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0)) + return; } gDisableStructs[battler].stickyWebDone = FALSE; gDisableStructs[battler].spikesDone = FALSE; gDisableStructs[battler].toxicSpikesDone = FALSE; gDisableStructs[battler].stealthRockDone = FALSE; + gDisableStructs[battler].steelSurgeDone = FALSE; for (i = 0; i < gBattlersCount; i++) { @@ -7081,6 +7010,7 @@ static void Cmd_returntoball(void) u32 battler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitReturnMonToBall(battler, BUFFER_A, TRUE); MarkBattlerForControllerExec(battler); + TryBattleFormChange(battler, FORM_CHANGE_BATTLE_SWITCH); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -7632,7 +7562,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) && gBattleStruct->ateBerry[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]] && !BATTLER_MAX_HP(battler)) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 3; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -7667,9 +7597,7 @@ static bool32 TrySymbiosis(u32 battler, u32 itemId) && gBattleStruct->changedItems[battler] == ITEM_NONE && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_BUTTON && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_PACK - #if B_SYMBIOSIS_GEMS >= GEN_7 - && !(gSpecialStatuses[battler].gemBoost) - #endif + && (B_SYMBIOSIS_GEMS < GEN_7 || !(gSpecialStatuses[battler].gemBoost)) && gCurrentMove != MOVE_FLING //Fling and damage-reducing berries are handled separately. && !gSpecialStatuses[battler].berryReduced && SYMBIOSIS_CHECK(battler, BATTLE_PARTNER(battler))) @@ -8233,15 +8161,14 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); - #if B_DEFOG_CLEARS_TERRAIN >= GEN_8 - if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + if (B_DEFOG_CLEARS_TERRAIN >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { RemoveAllTerrains(); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TerrainEnds_Ret; return TRUE; } - #endif // B_DEFOG_CLEARS_TERRAIN } return FALSE; @@ -8389,14 +8316,13 @@ static bool32 IsTeatimeAffected(u32 battler) sideTimerOpp->structField = BATTLE_OPPOSITE(temp); \ } \ -static bool32 CourtChangeSwapSideStatuses(void) +static void CourtChangeSwapSideStatuses(void) { struct SideTimer *sideTimerPlayer = &gSideTimers[B_SIDE_PLAYER]; struct SideTimer *sideTimerOpp = &gSideTimers[B_SIDE_OPPONENT]; u32 temp; // TODO: add Pledge-related effects - // TODO: add Gigantamax-related effects // Swap timers and statuses COURTCHANGE_SWAP(SIDE_STATUS_REFLECT, reflectTimer, temp) @@ -8411,6 +8337,8 @@ static bool32 CourtChangeSwapSideStatuses(void) COURTCHANGE_SWAP(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, temp); COURTCHANGE_SWAP(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, temp); COURTCHANGE_SWAP(SIDE_STATUS_STICKY_WEB, stickyWebAmount, temp); + COURTCHANGE_SWAP(SIDE_STATUS_STEELSURGE, steelsurgeAmount, temp); + COURTCHANGE_SWAP(SIDE_STATUS_DAMAGE_NON_TYPES, damageNonTypesTimer, temp); // Change battler IDs of swapped effects. Needed for the correct string when they expire // E.g. "Foe's Reflect wore off!" @@ -8425,6 +8353,9 @@ static bool32 CourtChangeSwapSideStatuses(void) // Track which side originally set the Sticky Web SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); + + // Swap what type set the Gigantamax damage over time effect + SWAP(sideTimerPlayer->damageNonTypesType, sideTimerOpp->damageNonTypesType, temp); } static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type) @@ -8512,7 +8443,7 @@ static void Cmd_various(void) CMD_ARGS(u8 battler, u8 id); struct Pokemon *mon; - s32 i, j; + s32 i; u8 data[10]; u32 side, battler, bits; @@ -8739,7 +8670,7 @@ static void Cmd_various(void) } else { - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -8813,7 +8744,13 @@ static void Cmd_various(void) case VARIOUS_CANCEL_MULTI_TURN_MOVES: { VARIOUS_ARGS(); - CancelMultiTurnMoves(battler); + const u8 *result; + result = CancelMultiTurnMoves(battler); + if (result) + { + gBattlescriptCurrInstr = result; + return; + } break; } case VARIOUS_SET_MAGIC_COAT_TARGET: @@ -9086,6 +9023,7 @@ static void Cmd_various(void) 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; } case VARIOUS_SAVE_TARGET: @@ -9195,6 +9133,7 @@ static void Cmd_various(void) case ABILITY_SCHOOLING: case ABILITY_COMATOSE: case ABILITY_SHIELDS_DOWN: case ABILITY_DISGUISE: case ABILITY_RKS_SYSTEM: case ABILITY_TRACE: + case ABILITY_ZERO_TO_HERO: break; default: gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace @@ -9252,11 +9191,7 @@ static void Cmd_various(void) && !NoAliveMonsForEitherParty() && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - #if B_FELL_STINGER_STAT_RAISE >= GEN_7 - SET_STATCHANGER(STAT_ATK, 3, FALSE); - #else - SET_STATCHANGER(STAT_ATK, 2, FALSE); - #endif + SET_STATCHANGER(STAT_ATK, (B_FELL_STINGER_STAT_RAISE >= GEN_7 ? 3 : 2), FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; @@ -9341,7 +9276,8 @@ static void Cmd_various(void) } else { - if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability) + if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability + || IsDynamaxed(gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9369,9 +9305,9 @@ static void Cmd_various(void) else { if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gBattleMoves[gCurrentMove].pulseMove) - gBattleMoveDamage = -(gBattleMons[battler].maxHP * 75 / 100); + gBattleMoveDamage = -(GetNonDynamaxMaxHP(battler) * 75 / 100); else - gBattleMoveDamage = -(gBattleMons[battler].maxHP / 2); + gBattleMoveDamage = -(GetNonDynamaxMaxHP(battler) / 2); if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; @@ -9445,42 +9381,11 @@ static void Cmd_various(void) } return; } - case VARIOUS_TRY_REFLECT_TYPE: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerTarget].species == SPECIES_ARCEUS || gBattleMons[gBattlerTarget].species == SPECIES_SILVALLY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 != TYPE_MYSTERY) - { - gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type2; - gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else if (gBattleMons[gBattlerTarget].type1 != TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) - { - gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; - gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type1; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; - gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } case VARIOUS_TRY_SOAK: { VARIOUS_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type - && gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type) + if (GetBattlerType(gBattlerTarget, 0) == gBattleMoves[gCurrentMove].type + && GetBattlerType(gBattlerTarget, 1) == gBattleMoves[gCurrentMove].type) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9503,8 +9408,10 @@ static void Cmd_various(void) // Change species. if (cmd->case_ == 0) { + /* What was the idea here? if (!gBattleTextBuff1) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species); + */ BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battler]], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); MarkBattlerForControllerExec(battler); } @@ -9603,13 +9510,16 @@ static void Cmd_various(void) case VARIOUS_TRY_COPYCAT: { VARIOUS_ARGS(const u8 *failInstr); - if (gLastUsedMove == MOVE_UNAVAILABLE || gBattleMoves[gLastUsedMove].copycatBanned) + if (gLastUsedMove == MOVE_NONE || gLastUsedMove == MOVE_UNAVAILABLE || gBattleMoves[gLastUsedMove].copycatBanned) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gCalledMove = gLastUsedMove; + if (IsMaxMove(gLastUsedMove)) + gCalledMove = gBattleStruct->dynamax.lastUsedBaseMove; + else + gCalledMove = gLastUsedMove; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -9620,7 +9530,8 @@ static void Cmd_various(void) { VARIOUS_ARGS(const u8 *failInstr); u16 move = gLastMoves[gBattlerTarget]; - if (move == MOVE_UNAVAILABLE || gBattleMoves[move].instructBanned) + if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || gBattleMoves[move].effect == EFFECT_RECHARGE + || gBattleMoves[move].instructBanned || gBattleMoves[move].twoTurnMove || IsDynamaxed(gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -9795,7 +9706,7 @@ static void Cmd_various(void) { VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerGrounded(battler)) - gBattlescriptCurrInstr = gBattlescriptCurrInstr = cmd->jumpInstr; + gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; return; @@ -9907,7 +9818,7 @@ static void Cmd_various(void) { VARIOUS_ARGS(const u8 *jumpInstr); battler = gBattlerAttacker; - if (gTotemBoosts[battler].stats == 0) + if (gQueuedStatBoosts[battler].stats == 0) { gBattlescriptCurrInstr = cmd->nextInstr; // stats done, exit } @@ -9915,19 +9826,19 @@ static void Cmd_various(void) { for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) { - if (gTotemBoosts[battler].stats & (1 << i)) + if (gQueuedStatBoosts[battler].stats & (1 << i)) { - if (gTotemBoosts[battler].statChanges[i] <= -1) - SET_STATCHANGER(i + 1, abs(gTotemBoosts[battler].statChanges[i]), TRUE); + if (gQueuedStatBoosts[battler].statChanges[i] <= -1) + SET_STATCHANGER(i + 1, abs(gQueuedStatBoosts[battler].statChanges[i]), TRUE); else - SET_STATCHANGER(i + 1, gTotemBoosts[battler].statChanges[i], FALSE); + SET_STATCHANGER(i + 1, gQueuedStatBoosts[battler].statChanges[i], FALSE); - gTotemBoosts[battler].stats &= ~(1 << i); + gQueuedStatBoosts[battler].stats &= ~(1 << i); gBattleScripting.battler = battler; gBattlerTarget = battler; - if (gTotemBoosts[battler].stats & 0x80) + if (gQueuedStatBoosts[battler].stats & 0x80) { - gTotemBoosts[battler].stats &= ~0x80; // set 'aura flared to life' flag + gQueuedStatBoosts[battler].stats &= ~0x80; // set 'aura flared to life' flag gBattlescriptCurrInstr = BattleScript_TotemFlaredToLife; } else @@ -10072,7 +9983,7 @@ static void Cmd_various(void) case VARIOUS_TRY_HEAL_QUARTER_HP: { VARIOUS_ARGS(const u8 *failInstr); - gBattleMoveDamage = gBattleMons[battler].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -10312,13 +10223,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } - case VARIOUS_APPLY_PLASMA_FISTS: - { - VARIOUS_ARGS(); - for (i = 0; i < gBattlersCount; i++) - gStatuses4[i] |= STATUS4_PLASMA_FISTS; - break; - } case VARIOUS_JUMP_IF_SPECIES: { VARIOUS_ARGS(u16 species, const u8 *jumpInstr); @@ -10402,7 +10306,7 @@ static void Cmd_various(void) VARIOUS_ARGS(const u8 *failInstr); bool8 atLeastOneStatBoosted = FALSE; - u16 hpFraction = max(1, gBattleMons[gBattlerAttacker].maxHP / 3); + u16 hpFraction = max(1, GetNonDynamaxMaxHP(gBattlerAttacker) / 3); for (i = 1; i < NUM_STATS; i++) { @@ -10423,22 +10327,6 @@ static void Cmd_various(void) } return; } - case VARIOUS_SET_OCTOLOCK: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gDisableStructs[battler].octolock) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gDisableStructs[battler].octolock = TRUE; - gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } case VARIOUS_CHECK_POLTERGEIST: { VARIOUS_ARGS(const u8 *failInstr); @@ -10824,12 +10712,17 @@ static void Cmd_setprotectlike(void) else if (gCurrentMove == MOVE_OBSTRUCT) { gProtectStructs[gBattlerAttacker].obstructed = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + } + else if (gCurrentMove == MOVE_MAX_GUARD) + { + gProtectStructs[gBattlerAttacker].maxGuarded = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; } else if (gCurrentMove == MOVE_SILK_TRAP) { gProtectStructs[gBattlerAttacker].silkTrapped = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; } gDisableStructs[gBattlerAttacker].protectUses++; @@ -10944,7 +10837,7 @@ static void Cmd_tryhealhalfhealth(void) if (cmd->battler == BS_ATTACKER) gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -10996,7 +10889,6 @@ static void Cmd_trymirrormove(void) } else // no valid moves found { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -11077,14 +10969,19 @@ static void Cmd_manipulatedamage(void) gBattleMoveDamage *= -1; break; case DMG_RECOIL_FROM_MISS: - #if B_RECOIL_IF_MISS_DMG >= GEN_5 - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; - #elif B_RECOIL_IF_MISS_DMG == GEN_4 - if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage) - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; - #else - gBattleMoveDamage /= 2; - #endif + if (B_RECOIL_IF_MISS_DMG >= GEN_5) + { + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + } + else if (B_RECOIL_IF_MISS_DMG == GEN_4) + { + if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage) + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + } + else + { + gBattleMoveDamage /= 2; + } if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; break; @@ -11092,24 +10989,24 @@ static void Cmd_manipulatedamage(void) gBattleMoveDamage *= 2; break; case DMG_1_8_TARGET_HP: - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; break; case DMG_FULL_ATTACKER_HP: - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker); break; case DMG_CURR_ATTACKER_HP: - gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp; + gBattleMoveDamage = GetNonDynamaxHP(gBattlerAttacker); break; case DMG_BIG_ROOT: gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); break; case DMG_1_2_ATTACKER_HP: - gBattleMoveDamage = (gBattleMons[gBattlerAttacker].maxHP + 1) / 2; // Half of Max HP Rounded UP + gBattleMoveDamage = (GetNonDynamaxMaxHP(gBattlerAttacker) + 1) / 2; // Half of Max HP Rounded UP break; case DMG_RECOIL_FROM_IMMUNE: - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; break; } @@ -11208,11 +11105,8 @@ static void Cmd_jumpifuproarwakes(void) { CMD_ARGS(const u8 *jumpInstr); - const u8 *jumpInstr = cmd->jumpInstr; - u32 ability = GetBattlerAbility(gBattlerTarget); - if (UproarWakeUpCheck(gBattlerTarget)) - gBattlescriptCurrInstr = jumpInstr; + gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } @@ -11294,7 +11188,7 @@ static void Cmd_stockpiletohpheal(void) } else { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -11387,6 +11281,8 @@ static u16 ReverseStatChangeMoveEffect(u16 moveEffect) return MOVE_EFFECT_ACC_PLUS_2; case MOVE_EFFECT_EVS_MINUS_2: return MOVE_EFFECT_EVS_PLUS_2; + default: + return 0; } } @@ -11422,6 +11318,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr { statValue ^= STAT_BUFF_NEGATIVE; gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE; + RecordAbilityBattle(battler, battlerAbility); if (flags & STAT_CHANGE_UPDATE_MOVE_EFFECT) { flags &= ~STAT_CHANGE_UPDATE_MOVE_EFFECT; @@ -11464,16 +11361,9 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr return STAT_CHANGE_DIDNT_WORK; } else if ((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET - || battlerAbility == ABILITY_CLEAR_BODY - || battlerAbility == ABILITY_FULL_METAL_BODY - || battlerAbility == ABILITY_WHITE_SMOKE) - && (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE) + || CanAbilityPreventStatLoss(battlerAbility, GetBattlerAbility(gBattlerAttacker) == ABILITY_INTIMIDATE)) + && (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE) { - if (battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET) - { - RecordItemEffectBattle(battler, HOLD_EFFECT_CLEAR_AMULET); - } - if (flags == STAT_CHANGE_ALLOW_PTR) { if (gSpecialStatuses[battler].statLowered) @@ -11486,7 +11376,9 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr gBattleScripting.battler = battler; if (battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET) { + gLastUsedItem = gBattleMons[battler].item; gBattlescriptCurrInstr = BattleScript_ItemNoStatLoss; + RecordItemEffectBattle(battler, HOLD_EFFECT_CLEAR_AMULET); } else { @@ -11522,6 +11414,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } else if (!certain && ((battlerAbility == ABILITY_KEEN_EYE && statId == STAT_ACC) + || (B_ILLUMINATE_EFFECT >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE && statId == STAT_ACC) || (battlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK) || (battlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF))) { @@ -11640,12 +11533,19 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr { if (GetBattlerSide(index) == GetBattlerSide(battler)) continue; // Only triggers on opposing side - if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB + if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST + && 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) { gProtectStructs[index].eatMirrorHerb = 1; - gTotemBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk - gTotemBoosts[index].statChanges[statId - 1] = statValue; + gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk + gQueuedStatBoosts[index].statChanges[statId - 1] = statValue; } } } @@ -11703,7 +11603,7 @@ static void Cmd_normalisebuffs(void) { CMD_ARGS(); - s32 i, j; + s32 i; for (i = 0; i < gBattlersCount; i++) TryResetBattlerStatChanges(i); @@ -11750,13 +11650,12 @@ static void Cmd_setmultihitcounter(void) else { // WARNING: These seem to be unused, see SetRandomMultiHitCounter. - #if B_MULTI_HIT_CHANCE >= GEN_5 + if (B_MULTI_HIT_CHANCE >= GEN_5) // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); - #else + else // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); - #endif } } @@ -11782,7 +11681,6 @@ static void Cmd_forcerandomswitch(void) s32 firstMonId; s32 lastMonId = 0; // + 1 - s32 monsCount; struct Pokemon *party = NULL; u8 validMons[PARTY_SIZE]; s32 validMonsCount = 0; @@ -11838,7 +11736,6 @@ static void Cmd_forcerandomswitch(void) { firstMonId = 0; lastMonId = 6; - monsCount = 6; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -11856,7 +11753,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE / 2; } - monsCount = PARTY_SIZE / 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -11873,7 +11769,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE / 2; } - monsCount = PARTY_SIZE / 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -11883,7 +11778,6 @@ static void Cmd_forcerandomswitch(void) { firstMonId = 0; lastMonId = PARTY_SIZE; - monsCount = PARTY_SIZE; } else { @@ -11897,7 +11791,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE / 2; } - monsCount = PARTY_SIZE / 2; } battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; @@ -11906,7 +11799,6 @@ static void Cmd_forcerandomswitch(void) { firstMonId = 0; lastMonId = PARTY_SIZE; - monsCount = PARTY_SIZE; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -11914,7 +11806,6 @@ static void Cmd_forcerandomswitch(void) { firstMonId = 0; lastMonId = PARTY_SIZE; - monsCount = PARTY_SIZE; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } @@ -11973,68 +11864,44 @@ static void Cmd_tryconversiontypechange(void) CMD_ARGS(const u8 *failInstr); u8 validMoves = 0; - u8 moveChecked; - u8 moveType; + u8 moveChecked = 0; + u8 moveType = 0; -#if B_UPDATED_CONVERSION >= GEN_6 - // Changes user's type to its first move's type - for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++) + if (B_UPDATED_CONVERSION >= GEN_6) { - if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE) + // Changes user's type to its first move's type + for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++) { - moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; - break; + if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE) + { + moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; + break; + } + } + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + gBattlescriptCurrInstr = cmd->nextInstr; } - } - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) - { - gBattlescriptCurrInstr = cmd->failInstr; } else { - SET_BATTLER_TYPE(gBattlerAttacker, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr = cmd->nextInstr; - } -#else - // Randomly changes user's type to one of its moves' type - while (validMoves < MAX_MON_MOVES) - { - if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE) - break; - - validMoves++; - } - - for (moveChecked = 0; moveChecked < validMoves; moveChecked++) - { - moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; - - if (moveType == TYPE_MYSTERY) + // Randomly changes user's type to one of its moves' type + while (validMoves < MAX_MON_MOVES) { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - moveType = TYPE_GHOST; - else - moveType = TYPE_NORMAL; + if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE) + break; + + validMoves++; } - if (moveType != gBattleMons[gBattlerAttacker].type1 - && moveType != gBattleMons[gBattlerAttacker].type2 - && moveType != gBattleMons[gBattlerAttacker].type3) - { - break; - } - } - if (moveChecked == validMoves) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - do + for (moveChecked = 0; moveChecked < validMoves; moveChecked++) { - while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); - moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; if (moveType == TYPE_MYSTERY) @@ -12044,15 +11911,42 @@ static void Cmd_tryconversiontypechange(void) else moveType = TYPE_NORMAL; } + if (moveType != gBattleMons[gBattlerAttacker].type1 + && moveType != gBattleMons[gBattlerAttacker].type2 + && moveType != gBattleMons[gBattlerAttacker].type3) + { + break; + } } - while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3); - SET_BATTLER_TYPE(gBattlerAttacker, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + if (moveChecked == validMoves) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + do + { + while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); - gBattlescriptCurrInstr = cmd->nextInstr; + moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; + + if (moveType == TYPE_MYSTERY) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + moveType = TYPE_GHOST; + else + moveType = TYPE_NORMAL; + } + } + while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3); + + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + + gBattlescriptCurrInstr = cmd->nextInstr; + } } -#endif } static void Cmd_givepaydaymoney(void) @@ -12110,6 +12004,15 @@ static void Cmd_tryKO(void) u32 holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); u16 targetAbility = GetBattlerAbility(gBattlerTarget); + // Dynamaxed Pokemon cannot be hit by OHKO moves. + if (IsDynamaxed(gBattlerTarget)) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + gPotentialItemEffectBattler = gBattlerTarget; if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < GetBattlerHoldEffectParam(gBattlerTarget)) @@ -12143,10 +12046,8 @@ static void Cmd_tryKO(void) else { u16 odds = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); - #if B_SHEER_COLD_ACC >= GEN_7 - if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + if (B_SHEER_COLD_ACC >= GEN_7 && gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; - #endif if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) lands = TRUE; } @@ -12164,13 +12065,11 @@ static void Cmd_tryKO(void) gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; gLastUsedItem = gBattleMons[gBattlerTarget].item; } - #if B_AFFECTION_MECHANICS == TRUE - else if (gSpecialStatuses[gBattlerTarget].affectionEndured) + else if (B_AFFECTION_MECHANICS == TRUE && gSpecialStatuses[gBattlerTarget].affectionEndured) { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED_AFFECTION; } - #endif else { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp; @@ -12195,7 +12094,7 @@ static void Cmd_damagetohalftargethp(void) { CMD_ARGS(); - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2; + gBattleMoveDamage = GetNonDynamaxHP(gBattlerTarget) / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -12239,7 +12138,7 @@ static void Cmd_weatherdamage(void) && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; } @@ -12252,7 +12151,7 @@ static void Cmd_weatherdamage(void) && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK)) { gBattlerAbility = gBattlerAttacker; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -12264,7 +12163,7 @@ static void Cmd_weatherdamage(void) && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; } @@ -12442,8 +12341,8 @@ static void Cmd_setsubstitute(void) { CMD_ARGS(); - u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4; - if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0) + u32 hp = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; + if (GetNonDynamaxMaxHP(gBattlerAttacker) / 4 == 0) hp = 1; if (gBattleMons[gBattlerAttacker].hp <= hp) @@ -12453,7 +12352,7 @@ static void Cmd_setsubstitute(void) } else { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games) + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -12473,6 +12372,7 @@ static void Cmd_mimicattackcopy(void) if ((gBattleMoves[gLastMoves[gBattlerTarget]].mimicBanned) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) + || gLastMoves[gBattlerTarget] == MOVE_NONE || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) { gBattlescriptCurrInstr = cmd->failInstr; @@ -12553,12 +12453,7 @@ static void Cmd_psywavedamageeffect(void) { CMD_ARGS(); - s32 randDamage; -#if B_PSYWAVE_DMG >= GEN_6 - randDamage = (Random() % 101); -#else - randDamage = (Random() % 11) * 10; -#endif + s32 randDamage = B_PSYWAVE_DMG >= GEN_6 ? (Random() % 101) : ((Random() % 11) * 10); gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12585,7 +12480,6 @@ static void Cmd_counterdamagecalculator(void) } else { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = cmd->failInstr; } } @@ -12613,7 +12507,6 @@ static void Cmd_mirrorcoatdamagecalculator(void) } else { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = cmd->failInstr; } } @@ -12635,13 +12528,12 @@ static void Cmd_disablelastusedattack(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i]) gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i]; - #if B_DISABLE_TURNS == GEN_3 - gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; - #elif B_DISABLE_TURNS == GEN_4 - gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4; - #else - gDisableStructs[gBattlerTarget].disableTimer = 4; - #endif + if (B_DISABLE_TURNS >= GEN_5) + gDisableStructs[gBattlerTarget].disableTimer = 4; + else if (B_DISABLE_TURNS >= GEN_4) + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4; // 4-7 turns + else + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; // 2-5 turns gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -12656,18 +12548,26 @@ static void Cmd_trysetencore(void) s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) + if (IsMaxMove(gLastMoves[gBattlerTarget]) && !IsDynamaxed(gBattlerTarget)) { - if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) - break; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMove[gBattlerTarget]) + break; + } + } + else + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) + break; + } } - if (gLastMoves[gBattlerTarget] == MOVE_NONE - || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE - || gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE - || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) + if ((gBattleMoves[gLastMoves[gBattlerTarget]].encoreBanned) + || gLastMoves[gBattlerTarget] == MOVE_NONE + || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) { i = MAX_MON_MOVES; } @@ -12678,7 +12578,6 @@ static void Cmd_trysetencore(void) gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; gDisableStructs[gBattlerTarget].encoredMovePos = i; gDisableStructs[gBattlerTarget].encoreTimer = 3; - gDisableStructs[gBattlerTarget].encoreTimer; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -12693,8 +12592,8 @@ static void Cmd_painsplitdmgcalc(void) if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { - s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2; - s32 painSplitHp = gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - hpDiff; + s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + GetNonDynamaxHP(gBattlerTarget)) / 2; + s32 painSplitHp = gBattleMoveDamage = GetNonDynamaxHP(gBattlerTarget) - hpDiff; u8 *storeLoc = (void *)(&gBattleScripting.painSplitHp); storeLoc[0] = (painSplitHp); @@ -12723,7 +12622,7 @@ static void Cmd_settypetorandomresistance(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker]) + else if (gBattleMoves[gLastLandedMoves[gBattlerAttacker]].twoTurnMove && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) { gBattlescriptCurrInstr = cmd->failInstr; @@ -12832,40 +12731,6 @@ static void Cmd_copymovepermanently(void) } } -static bool8 IsTwoTurnsMove(u16 move) -{ - if (gBattleMoves[move].effect == EFFECT_SKULL_BASH - || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK - || gBattleMoves[move].effect == EFFECT_SOLAR_BEAM - || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE - || gBattleMoves[move].effect == EFFECT_BIDE - || gBattleMoves[move].effect == EFFECT_METEOR_BEAM - || gBattleMoves[move].effect == EFFECT_GEOMANCY) - return TRUE; - else - return FALSE; -} - -// unused -static u8 AttacksThisTurn(u8 battler, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2 -{ - // first argument is unused - if (gBattleMoves[move].effect == EFFECT_SOLAR_BEAM - && IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) - return 2; - - if (gBattleMoves[move].effect == EFFECT_SKULL_BASH - || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK - || gBattleMoves[move].effect == EFFECT_SOLAR_BEAM - || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE - || gBattleMoves[move].effect == EFFECT_BIDE) - { - if ((gHitMarker & HITMARKER_CHARGING)) - return 1; - } - return 2; -} - static void Cmd_trychoosesleeptalkmove(void) { CMD_ARGS(const u8 *failInstr); @@ -12874,8 +12739,8 @@ static void Cmd_trychoosesleeptalkmove(void) for (i = 0; i < MAX_MON_MOVES; i++) { - if ((gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].sleepTalkBanned) - || IsTwoTurnsMove(gBattleMons[gBattlerAttacker].moves[i])) + if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].sleepTalkBanned + || gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].twoTurnMove) { unusableMovesBits |= gBitTable[i]; } @@ -12888,6 +12753,8 @@ static void Cmd_trychoosesleeptalkmove(void) } else // at least one move can be chosen { + // Set Sleep Talk as used move, so it works with Last Resort. + gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; do { movePosition = MOD(Random(), MAX_MON_MOVES); @@ -12939,11 +12806,7 @@ static void Cmd_settailwind(void) { gSideStatuses[side] |= SIDE_STATUS_TAILWIND; gSideTimers[side].tailwindBattlerId = gBattlerAttacker; - #if B_TAILWIND_TURNS >= GEN_5 - gSideTimers[side].tailwindTimer = 4; - #else - gSideTimers[side].tailwindTimer = 3; - #endif + gSideTimers[side].tailwindTimer = B_TAILWIND_TURNS >= GEN_5 ? 4 : 3; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -12961,23 +12824,30 @@ static void Cmd_tryspiteppreduce(void) { s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) + // Get move slot to reduce PP. + if (IsMaxMove(gLastMoves[gBattlerTarget])) { - if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) - break; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleStruct->dynamax.baseMove[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; + } + } + else + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; + } } - #if B_CAN_SPITE_FAIL <= GEN_3 - if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1) - #else - if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) - #endif + if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > (B_CAN_SPITE_FAIL >= GEN_4 ? 0 : 1)) { - #if B_PP_REDUCED_BY_SPITE <= GEN_3 - s32 ppToDeduct = (Random() & 3) + 2; - #else - s32 ppToDeduct = 4; - #endif + s32 ppToDeduct = B_PP_REDUCED_BY_SPITE >= GEN_4 ? 4 : (Random() & 3) + 2; + // G-Max Depletion only deducts 2 PP. + if (IsMaxMove(gCurrentMove) && gBattleMoves[gCurrentMove].argument == MAX_EFFECT_SPITE) + ppToDeduct = 2; if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; @@ -13121,7 +12991,7 @@ static void Cmd_cursetarget(void) else { gBattleMons[gBattlerTarget].status2 |= STATUS2_CURSED; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -13137,7 +13007,6 @@ static void Cmd_trysetspikes(void) if (gSideTimers[targetSide].spikesAmount == 3) { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = cmd->failInstr; } else @@ -13178,8 +13047,6 @@ static void Cmd_trysetperishsong(void) } } - PressurePPLoseOnUsingPerishSong(gBattlerAttacker); - if (notAffectedCount == gBattlersCount) gBattlescriptCurrInstr = cmd->failInstr; else @@ -13287,7 +13154,7 @@ static void Cmd_presentdamagecalculation(void) } else { - gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -13453,9 +13320,9 @@ static void Cmd_maxattackhalvehp(void) { CMD_ARGS(const u8 *failInstr); - u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2; + u32 halfHp = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - if (!(gBattleMons[gBattlerAttacker].maxHP / 2)) + if (!(GetNonDynamaxMaxHP(gBattlerAttacker) / 2)) halfHp = 1; // Belly Drum fails if the user's current HP is less than half its maximum, or if the user's Attack is already at +6 (even if the user has Contrary). @@ -13463,7 +13330,7 @@ static void Cmd_maxattackhalvehp(void) && gBattleMons[gBattlerAttacker].hp > halfHp) { gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = MAX_STAT_STAGE; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -13540,6 +13407,13 @@ static void Cmd_rapidspinfree(void) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_StealthRockFree; } + else if (gSideStatuses[atkSide] & SIDE_STATUS_STEELSURGE) + { + gSideStatuses[atkSide] &= ~SIDE_STATUS_STEELSURGE; + gSideTimers[atkSide].steelsurgeAmount = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SteelsurgeFree; + } else { gBattlescriptCurrInstr = cmd->nextInstr; @@ -13564,18 +13438,18 @@ static void Cmd_recoverbasedonsunlight(void) if (gCurrentMove == MOVE_SHORE_UP) { if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM) - gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30; + gBattleMoveDamage = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; else - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; } else { if (!(gBattleWeather & B_WEATHER_ANY) || !WEATHER_HAS_EFFECT || GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; else if (gBattleWeather & B_WEATHER_SUN) - gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30; + gBattleMoveDamage = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; else // not sunny weather - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; } if (gBattleMoveDamage == 0) @@ -13763,16 +13637,19 @@ static void Cmd_trymemento(void) { CMD_ARGS(const u8 *failInstr); - #if B_MEMENTO_FAIL == GEN_3 - if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE + if (B_MEMENTO_FAIL >= GEN_4 + && (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED + || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE + || IsBattlerProtected(gBattlerTarget, gCurrentMove) + || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) + { + // Failed, target was protected. + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (B_MEMENTO_FAIL < GEN_4 + && gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE && gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) - #else - if (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED - || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE - || IsBattlerProtected(gBattlerTarget, gCurrentMove) - || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - #endif { // Failed, unprotected target already has minimum Attack and Special Attack. gBattlescriptCurrInstr = cmd->failInstr; @@ -13831,7 +13708,7 @@ u16 GetNaturePowerMove(void) return MOVE_ENERGY_BALL; else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) return MOVE_PSYCHIC; - else if (sNaturePowerMoves == MOVE_NONE) + else if (sNaturePowerMoves[gBattleTerrain] == MOVE_NONE) return MOVE_TRI_ATTACK; return sNaturePowerMoves[gBattleTerrain]; } @@ -13858,13 +13735,15 @@ static void Cmd_settorment(void) { CMD_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) + if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT + || IsDynamaxed(gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; + gDisableStructs[gBattlerTarget].tormentTimer = PERMANENT_TORMENT; // permanent gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13883,26 +13762,29 @@ static void Cmd_settaunt(void) { CMD_ARGS(const u8 *failInstr); -#if B_OBLIVIOUS_TAUNT >= GEN_6 - if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + if (B_OBLIVIOUS_TAUNT >= GEN_6 && GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; gLastUsedAbility = ABILITY_OBLIVIOUS; RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); } - else -#endif - if (gDisableStructs[gBattlerTarget].tauntTimer == 0) + else if (gDisableStructs[gBattlerTarget].tauntTimer == 0) { - #if B_TAUNT_TURNS >= GEN_5 - u8 turns = 4; + u8 turns; + if (B_TAUNT_TURNS >= GEN_5) + { + turns = 4; if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker)) turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia) - #elif B_TAUNT_TURNS == GEN_4 - u8 turns = (Random() & 2) + 3; - #else - u8 turns = 2; - #endif + } + else if (B_TAUNT_TURNS >= GEN_4) + { + turns = (Random() & 2) + 3; + } + else + { + turns = 2; + } gDisableStructs[gBattlerTarget].tauntTimer = turns; gBattlescriptCurrInstr = cmd->nextInstr; @@ -13946,9 +13828,7 @@ static void Cmd_tryswapitems(void) | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_RECORDED_LINK - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE - | BATTLE_TYPE_TRAINER - #endif + | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) )))) { gBattlescriptCurrInstr = cmd->failInstr; @@ -14087,14 +13967,17 @@ static void Cmd_trywish(void) break; case 1: // heal effect PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishPartyId[gBattlerTarget]) - #if B_WISH_HP_SOURCE >= GEN_5 - if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - gBattleMoveDamage = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); + if (B_WISH_HP_SOURCE >= GEN_5) + { + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) + gBattleMoveDamage = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); + else + gBattleMoveDamage = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); + } else - gBattleMoveDamage = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2); - #else - gBattleMoveDamage = max(1, gBattleMons[gBattlerTarget].maxHP / 2); - #endif + { + gBattleMoveDamage = max(1, GetNonDynamaxMaxHP(gBattlerAttacker) / 2); + } gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) @@ -14173,13 +14056,13 @@ static void Cmd_setdamagetohealthdifference(void) { CMD_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp) + if (GetNonDynamaxHP(gBattlerTarget) <= gBattleMons[gBattlerAttacker].hp) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - gBattleMons[gBattlerAttacker].hp; + gBattleMoveDamage = GetNonDynamaxHP(gBattlerTarget) - gBattleMons[gBattlerAttacker].hp; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -14240,7 +14123,7 @@ static void Cmd_tryswapabilities(void) } else { - if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || IsDynamaxed(gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -14268,7 +14151,6 @@ static void Cmd_tryimprison(void) u8 battler, sideAttacker; sideAttacker = GetBattlerSide(gBattlerAttacker); - PressurePPLoseOnUsingImprison(gBattlerAttacker); for (battler = 0; battler < gBattlersCount; battler++) { if (sideAttacker != GetBattlerSide(battler)) @@ -14363,9 +14245,7 @@ static void Cmd_assistattackselect(void) { u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - if (gBattleMoves[move].copycatBanned - || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE - || gBattleMoves[move].effect == EFFECT_SKY_DROP) + if (gBattleMoves[move].assistBanned) continue; validMoves[chooseableMovesNo++] = move; @@ -14392,8 +14272,6 @@ static void Cmd_trysetmagiccoat(void) { CMD_ARGS(const u8 *failInstr); - gBattlerTarget = gBattlerAttacker; - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { gBattlescriptCurrInstr = cmd->failInstr; @@ -14410,7 +14288,6 @@ static void Cmd_trysetsnatch(void) { CMD_ARGS(const u8 *failInstr); - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { gBattlescriptCurrInstr = cmd->failInstr; @@ -14450,7 +14327,7 @@ static void Cmd_switchoutabilities(void) MarkBattlerForControllerExec(battler); break; case ABILITY_REGENERATOR: - gBattleMoveDamage = gBattleMons[battler].maxHP / 3; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 3; gBattleMoveDamage += gBattleMons[battler].hp; if (gBattleMoveDamage > gBattleMons[battler].maxHP) gBattleMoveDamage = gBattleMons[battler].maxHP; @@ -14515,31 +14392,26 @@ u16 GetSecretPowerMoveEffect(void) { switch (gBattleTerrain) { - #if B_SECRET_POWER_EFFECT >= GEN_6 - case BATTLE_TERRAIN_GRASS: moveEffect = MOVE_EFFECT_SLEEP; break; - case BATTLE_TERRAIN_UNDERWATER: moveEffect = MOVE_EFFECT_ATK_MINUS_1; break; - case BATTLE_TERRAIN_POND: moveEffect = MOVE_EFFECT_ATK_MINUS_1; break; - case BATTLE_TERRAIN_MOUNTAIN: moveEffect = MOVE_EFFECT_ACC_MINUS_1; break; - case BATTLE_TERRAIN_PUDDLE: moveEffect = MOVE_EFFECT_SPD_MINUS_1; break; - #elif B_SECRET_POWER_EFFECT >= GEN_5 - case BATTLE_TERRAIN_GRASS: moveEffect = MOVE_EFFECT_SLEEP; break; - case BATTLE_TERRAIN_UNDERWATER: moveEffect = MOVE_EFFECT_DEF_MINUS_1; break; - case BATTLE_TERRAIN_POND: moveEffect = MOVE_EFFECT_ATK_MINUS_1; break; - case BATTLE_TERRAIN_MOUNTAIN: moveEffect = MOVE_EFFECT_ACC_MINUS_1; break; - case BATTLE_TERRAIN_PUDDLE: moveEffect = MOVE_EFFECT_SPD_MINUS_1; break; - #elif B_SECRET_POWER_EFFECT >= GEN_4 - case BATTLE_TERRAIN_GRASS: moveEffect = MOVE_EFFECT_SLEEP; break; - case BATTLE_TERRAIN_UNDERWATER: moveEffect = MOVE_EFFECT_DEF_MINUS_1; break; - case BATTLE_TERRAIN_POND: moveEffect = MOVE_EFFECT_ATK_MINUS_1; break; - case BATTLE_TERRAIN_MOUNTAIN: moveEffect = MOVE_EFFECT_FLINCH; break; - case BATTLE_TERRAIN_PUDDLE: moveEffect = MOVE_EFFECT_ACC_MINUS_1; break; - #else - case BATTLE_TERRAIN_GRASS: moveEffect = MOVE_EFFECT_POISON; break; - case BATTLE_TERRAIN_UNDERWATER: moveEffect = MOVE_EFFECT_DEF_MINUS_1; break; - case BATTLE_TERRAIN_POND: moveEffect = MOVE_EFFECT_SPD_MINUS_1; break; - case BATTLE_TERRAIN_MOUNTAIN: moveEffect = MOVE_EFFECT_CONFUSION; break; - case BATTLE_TERRAIN_PUDDLE: moveEffect = MOVE_EFFECT_ACC_MINUS_1; break; - #endif + case BATTLE_TERRAIN_GRASS: + moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON); + break; + case BATTLE_TERRAIN_UNDERWATER: + moveEffect = (B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1); + break; + case BATTLE_TERRAIN_POND: + moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1); + break; + case BATTLE_TERRAIN_MOUNTAIN: + if (B_SECRET_POWER_EFFECT >= GEN_5) + moveEffect = MOVE_EFFECT_ACC_MINUS_1; + else if (B_SECRET_POWER_EFFECT >= GEN_4) + moveEffect = MOVE_EFFECT_FLINCH; + else + moveEffect = MOVE_EFFECT_CONFUSION; + break; + case BATTLE_TERRAIN_PUDDLE: + moveEffect = (B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1); + break; case BATTLE_TERRAIN_LONG_GRASS: moveEffect = MOVE_EFFECT_SLEEP; break; @@ -14562,11 +14434,7 @@ u16 GetSecretPowerMoveEffect(void) break; case BATTLE_TERRAIN_SNOW: case BATTLE_TERRAIN_ICE: - #if B_USE_FROSTBITE == TRUE - moveEffect = MOVE_EFFECT_FROSTBITE; - #else - moveEffect = MOVE_EFFECT_FREEZE; - #endif + moveEffect = (B_USE_FROSTBITE == TRUE ? MOVE_EFFECT_FROSTBITE : MOVE_EFFECT_FREEZE); break; case BATTLE_TERRAIN_VOLCANO: moveEffect = MOVE_EFFECT_BURN; @@ -14673,7 +14541,8 @@ static void Cmd_settypebasedhalvers(void) if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) { - #if B_SPORT_TURNS >= GEN_6 + if (B_SPORT_TURNS >= GEN_6) + { if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT)) { gFieldStatuses |= STATUS_FIELD_MUDSPORT; @@ -14681,18 +14550,21 @@ static void Cmd_settypebasedhalvers(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; worked = TRUE; } - #else + } + else + { if (!(gStatuses4[gBattlerAttacker] & STATUS4_MUD_SPORT)) { gStatuses4[gBattlerAttacker] |= STATUS4_MUD_SPORT; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; worked = TRUE; } - #endif + } } else // Water Sport { - #if B_SPORT_TURNS >= GEN_6 + if (B_SPORT_TURNS >= GEN_6) + { if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT)) { gFieldStatuses |= STATUS_FIELD_WATERSPORT; @@ -14700,14 +14572,16 @@ static void Cmd_settypebasedhalvers(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; worked = TRUE; } - #else + } + else + { if (!(gStatuses4[gBattlerAttacker] & STATUS4_WATER_SPORT)) { gStatuses4[gBattlerAttacker] |= STATUS4_WATER_SPORT; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; worked = TRUE; } - #endif + } } if (worked) @@ -14720,10 +14594,6 @@ bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) { if (!(gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE)) return FALSE; -#if B_SOUND_SUBSTITUTE >= GEN_6 - else if (gBattleMoves[move].soundMove) - return FALSE; -#endif else if (gBattleMoves[move].ignoresSubstitute) return FALSE; else if (GetBattlerAbility(battlerAtk) == ABILITY_INFILTRATOR) @@ -14734,7 +14604,7 @@ bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) bool32 DoesDisguiseBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) { - if (gBattleMons[battlerDef].species != SPECIES_MIMIKYU + if (gBattleMons[battlerDef].species != SPECIES_MIMIKYU_DISGUISED || gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED || IS_MOVE_STATUS(move) || gHitMarker & HITMARKER_IGNORE_DISGUISE @@ -14870,18 +14740,15 @@ static void Cmd_removelightscreenreflect(void) u8 side; bool32 failed; -#if B_BRICK_BREAK >= GEN_4 -// From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally - side = GetBattlerSide(gBattlerTarget); -#else - side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; -#endif + if (B_BRICK_BREAK >= GEN_4) + side = GetBattlerSide(gBattlerTarget); // From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally + else + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; -#if B_BRICK_BREAK >= GEN_5 - failed = (gMoveResultFlags & MOVE_RESULT_NO_EFFECT); -#else - failed = FALSE; -#endif + if (B_BRICK_BREAK >= GEN_5) + failed = (gMoveResultFlags & MOVE_RESULT_NO_EFFECT); + else + failed = FALSE; if (!failed && (gSideTimers[side].reflectTimer @@ -14964,81 +14831,59 @@ static void Cmd_handleballthrow(void) case ITEM_ULTRA_BALL: ballMultiplier = 200; break; - #if B_SPORT_BALL_MODIFIER <= GEN_7 case ITEM_SPORT_BALL: - #endif + if (B_SPORT_BALL_MODIFIER <= GEN_7) + ballMultiplier = 150; case ITEM_GREAT_BALL: case ITEM_SAFARI_BALL: ballMultiplier = 150; break; case ITEM_NET_BALL: if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG)) - #if B_NET_BALL_MODIFIER >= GEN_7 - ballMultiplier = 350; - #else - ballMultiplier = 300; - #endif + ballMultiplier = B_NET_BALL_MODIFIER >= GEN_7 ? 350 : 300; break; case ITEM_DIVE_BALL: if (GetCurrentMapType() == MAP_TYPE_UNDERWATER - #if B_DIVE_BALL_MODIFIER >= GEN_4 - || gIsFishingEncounter || gIsSurfingEncounter - #endif - ) + || (B_DIVE_BALL_MODIFIER >= GEN_4 && (gIsFishingEncounter || gIsSurfingEncounter))) ballMultiplier = 350; break; case ITEM_NEST_BALL: - #if B_NEST_BALL_MODIFIER >= GEN_6 - //((41 - Pokémon's level) ÷ 10)× if Pokémon's level is between 1 and 29, 1× otherwise. - if (gBattleMons[gBattlerTarget].level < 30) - ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); - #elif B_NEST_BALL_MODIFIER == GEN_5 - //((41 - Pokémon's level) ÷ 10)×, minimum 1× - if (gBattleMons[gBattlerTarget].level < 31) - ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); - #else - //((40 - Pokémon's level) ÷ 10)×, minimum 1× - if (gBattleMons[gBattlerTarget].level < 40) + if (B_NEST_BALL_MODIFIER >= GEN_6) { + //((41 - Pokémon's level) ÷ 10)× if Pokémon's level is between 1 and 29, 1× otherwise. + if (gBattleMons[gBattlerTarget].level < 30) + ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); + } + else if (B_NEST_BALL_MODIFIER >= GEN_5) + { + //((41 - Pokémon's level) ÷ 10)×, minimum 1× + if (gBattleMons[gBattlerTarget].level < 31) + ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); + } + else if (gBattleMons[gBattlerTarget].level < 40) + { + //((40 - Pokémon's level) ÷ 10)×, minimum 1× ballMultiplier = 400 - (gBattleMons[gBattlerTarget].level * 10); if (ballMultiplier <= 90) ballMultiplier = 100; } - #endif break; case ITEM_REPEAT_BALL: - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) - #if B_REPEAT_BALL_MODIFIER >= GEN_7 - ballMultiplier = 350; - #else - ballMultiplier = 300; - #endif - break; + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) + ballMultiplier = (B_REPEAT_BALL_MODIFIER >= GEN_7 ? 350 : 300); + break; case ITEM_TIMER_BALL: - #if B_TIMER_BALL_MODIFIER >= GEN_5 - ballMultiplier = (gBattleResults.battleTurnCounter * 30) + 100; - #else - ballMultiplier = (gBattleResults.battleTurnCounter * 10) + 100; - #endif + ballMultiplier = 100 + (gBattleResults.battleTurnCounter * (B_TIMER_BALL_MODIFIER >= GEN_5 ? 30 : 10)); if (ballMultiplier > 400) ballMultiplier = 400; break; case ITEM_DUSK_BALL: - RtcCalcLocalTime(); - if ((gLocalTime.hours >= 20 && gLocalTime.hours <= 3) || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) - #if B_DUSK_BALL_MODIFIER >= GEN_7 - ballMultiplier = 300; - #else - ballMultiplier = 350; - #endif + if ((GetTimeOfDay() == TIME_DUSK || GetTimeOfDay() == TIME_NIGHT) || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) + ballMultiplier = (B_DUSK_BALL_MODIFIER >= GEN_7 ? 300 : 350); break; case ITEM_QUICK_BALL: if (gBattleResults.battleTurnCounter == 0) - #if B_QUICK_BALL_MODIFIER >= GEN_5 - ballMultiplier = 500; - #else - ballMultiplier = 400; - #endif + ballMultiplier = (B_QUICK_BALL_MODIFIER >= GEN_5 ? 500 : 400); break; case ITEM_LEVEL_BALL: if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level) @@ -15050,11 +14895,7 @@ static void Cmd_handleballthrow(void) break; case ITEM_LURE_BALL: if (gIsFishingEncounter) - #if B_LURE_BALL_MODIFIER >= GEN_7 - ballMultiplier = 500; - #else - ballMultiplier = 300; - #endif + ballMultiplier = (B_LURE_BALL_MODIFIER >= GEN_7 ? 500 : 300); break; case ITEM_MOON_BALL: for (i = 0; i < EVOS_PER_MON; i++) @@ -15080,44 +14921,45 @@ static void Cmd_handleballthrow(void) break; case ITEM_HEAVY_BALL: i = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1); - #if B_HEAVY_BALL_MODIFIER >= GEN_7 - if (i < 1000) - ballAddition = -20; - else if (i < 2000) - ballAddition = 0; - else if (i < 3000) - ballAddition = 20; + if (B_HEAVY_BALL_MODIFIER >= GEN_7) + { + if (i < 1000) + ballAddition = -20; + else if (i < 2000) + ballAddition = 0; + else if (i < 3000) + ballAddition = 20; + else + ballAddition = 30; + } + else if (B_HEAVY_BALL_MODIFIER >= GEN_4) + { + if (i < 2048) + ballAddition = -20; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + } else - ballAddition = 30; - #elif B_HEAVY_BALL_MODIFIER >= GEN_4 - if (i < 2048) - ballAddition = -20; - else if (i < 3072) - ballAddition = 20; - else if (i < 4096) - ballAddition = 30; - else - ballAddition = 40; - #else - if (i < 1024) - ballAddition = -20; - else if (i < 2048) - ballAddition = 0; - else if (i < 3072) - ballAddition = 20; - else if (i < 4096) - ballAddition = 30; - else - ballAddition = 40; - #endif + { + if (i < 1024) + ballAddition = -20; + else if (i < 2048) + ballAddition = 0; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + } break; case ITEM_DREAM_BALL: - #if B_DREAM_BALL_MODIFIER >= GEN_8 - if (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE) + if (B_DREAM_BALL_MODIFIER >= GEN_8 && (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)) ballMultiplier = 400; - #else - ballMultiplier = 100; - #endif break; case ITEM_BEAST_BALL: ballMultiplier = 10; @@ -15497,17 +15339,14 @@ static void Cmd_removeattackerstatus1(void) gBattlescriptCurrInstr = cmd->nextInstr; } +// CMD_ARGS is not needed for these functions as they end the script execution. static void Cmd_finishaction(void) { - CMD_ARGS(); - gCurrentActionFuncId = B_ACTION_FINISHED; } static void Cmd_finishturn(void) { - CMD_ARGS(); - gCurrentActionFuncId = B_ACTION_FINISHED; gCurrentTurnActionNumber = gBattlersCount; } @@ -15672,7 +15511,6 @@ void BS_CalcMetalBurstDmg(void) } else { - gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; gBattlescriptCurrInstr = cmd->failInstr; } } @@ -15743,8 +15581,12 @@ void BS_DoStockpileStatChangesWearOff(void) static bool32 CriticalCapture(u32 odds) { -#if B_CRITICAL_CAPTURE == TRUE - u32 numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); + u32 numCaught; + + if (B_CRITICAL_CAPTURE == FALSE) + return FALSE; + + numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); if (numCaught <= (NATIONAL_DEX_COUNT * 30) / 650) odds = 0; @@ -15767,46 +15609,15 @@ static bool32 CriticalCapture(u32 odds) return TRUE; return FALSE; -#else - return FALSE; -#endif } -static const u16 sParentalBondBannedEffects[] = -{ - EFFECT_BEAT_UP, - EFFECT_BIDE, // Note: Bide should work with Parental Bond. This will be addressed in future. - EFFECT_ENDEAVOR, - EFFECT_EXPLOSION, - EFFECT_FINAL_GAMBIT, - EFFECT_FLING, - EFFECT_GEOMANCY, - EFFECT_METEOR_BEAM, - EFFECT_MULTI_HIT, - EFFECT_OHKO, - EFFECT_ROLLOUT, - EFFECT_SEMI_INVULNERABLE, - EFFECT_SKULL_BASH, - EFFECT_SKY_DROP, - EFFECT_SOLAR_BEAM, - EFFECT_TRIPLE_KICK, - EFFECT_TWO_TURNS_ATTACK, - EFFECT_UPROAR, -}; - bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) { - if (move != MOVE_NONE && move != MOVE_STRUGGLE + if (move != MOVE_NONE && move != MOVE_UNAVAILABLE && move != MOVE_STRUGGLE + && !gBattleMoves[move].parentalBondBanned && gBattleMoves[move].split != SPLIT_STATUS - && !gBattleMoves[move].strikeCount > 2) + && gBattleMoves[move].strikeCount < 2) { - u32 i; - for (i = 0; i < ARRAY_COUNT(sParentalBondBannedEffects); i++) - { - if (gBattleMoves[move].effect == sParentalBondBannedEffects[i]) - return FALSE; - } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { switch (GetBattlerMoveTargetType(battler, move)) @@ -15843,6 +15654,25 @@ static bool8 IsFinalStrikeEffect(u16 move) return FALSE; } +static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 byIntimidate) +{ + switch (abilityDef) + { + case ABILITY_CLEAR_BODY: + case ABILITY_FULL_METAL_BODY: + case ABILITY_WHITE_SMOKE: + return TRUE; + case ABILITY_INNER_FOCUS: + case ABILITY_SCRAPPY: + case ABILITY_OWN_TEMPO: + case ABILITY_OBLIVIOUS: + if (byIntimidate && (B_UPDATED_INTIMIDATE >= GEN_8)) + return TRUE; + break; + } + return FALSE; +} + void BS_CheckParentalBondCounter(void) { NATIVE_ARGS(u8 counter, const u8 *jumpInstr); @@ -15903,7 +15733,7 @@ static void TryUpdateRoundTurnOrder(void) u32 i; u32 j = 0; u32 k = 0; - u32 currRounder; + u32 currRounder = 0; u8 roundUsers[3] = {0xFF, 0xFF, 0xFF}; u8 nonRoundUsers[3] = {0xFF, 0xFF, 0xFF}; for (i = 0; i < gBattlersCount; i++) @@ -15991,7 +15821,7 @@ void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBat *expAmount = (*expAmount * 150) / 100; if (B_UNEVOLVED_EXP_MULTIPLIER >= GEN_6 && IsMonPastEvolutionLevel(&gPlayerParty[expGetterMonId])) *expAmount = (*expAmount * 4915) / 4096; - if (B_AFFECTION_MECHANICS == TRUE && GetBattlerFriendshipScore(expGetterMonId) >= FRIENDSHIP_50_TO_99) + if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(expGetterMonId) >= AFFECTION_FOUR_HEARTS) *expAmount = (*expAmount * 4915) / 4096; if (CheckBagHasItem(ITEM_EXP_CHARM, 1)) //is also for other exp boosting Powers if/when implemented *expAmount = (*expAmount * 150) / 100; @@ -16364,3 +16194,94 @@ void BS_JumpIfTerrainAffected(void) else gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_TryReflectType(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species); + u8 targetType1 = GetBattlerType(gBattlerTarget, 0); + u8 targetType2 = GetBattlerType(gBattlerTarget, 1); + u8 targetType3 = GetBattlerType(gBattlerTarget, 2); + + if (targetBaseSpecies == SPECIES_ARCEUS || targetBaseSpecies == SPECIES_SILVALLY) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (IS_BATTLER_TYPELESS(gBattlerTarget)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (targetType1 == TYPE_MYSTERY && targetType2 == TYPE_MYSTERY && targetType3 != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].type2 = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetType1 == TYPE_MYSTERY && targetType2 != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = targetType2; + gBattleMons[gBattlerAttacker].type2 = targetType2; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetType1 != TYPE_MYSTERY && targetType2 == TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = targetType1; + gBattleMons[gBattlerAttacker].type2 = targetType1; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattleMons[gBattlerAttacker].type1 = targetType1; + gBattleMons[gBattlerAttacker].type2 = targetType2; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TrySetOctolock(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gDisableStructs[battler].octolock) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[battler].octolock = TRUE; + gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_SetGlaiveRush(void) +{ + NATIVE_ARGS(); + + gStatuses4[gBattlerAttacker] |= STATUS4_GLAIVE_RUSH; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryRelicSong(void) +{ + NATIVE_ARGS(); + + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)) + { + if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA) + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; + else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_ARIA; + + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_AttackerFormChangeMoveEffect; + } + else + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_setup.c b/src/battle_setup.c index 88c239e181..e8ffcd8908 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -590,18 +590,21 @@ void BattleSetup_StartLegendaryBattle(void) { default: case SPECIES_GROUDON: - gBattleTypeFlags |= BATTLE_TYPE_GROUDON; + case SPECIES_GROUDON_PRIMAL: CreateBattleStartTask(B_TRANSITION_GROUDON, MUS_VS_KYOGRE_GROUDON); break; case SPECIES_KYOGRE: - gBattleTypeFlags |= BATTLE_TYPE_KYOGRE; + case SPECIES_KYOGRE_PRIMAL: CreateBattleStartTask(B_TRANSITION_KYOGRE, MUS_VS_KYOGRE_GROUDON); break; case SPECIES_RAYQUAZA: - gBattleTypeFlags |= BATTLE_TYPE_RAYQUAZA; + case SPECIES_RAYQUAZA_MEGA: CreateBattleStartTask(B_TRANSITION_RAYQUAZA, MUS_VS_RAYQUAZA); break; - case SPECIES_DEOXYS: + case SPECIES_DEOXYS_NORMAL: + case SPECIES_DEOXYS_ATTACK: + case SPECIES_DEOXYS_DEFENSE: + case SPECIES_DEOXYS_SPEED: CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RG_VS_DEOXYS); break; case SPECIES_LUGIA: @@ -623,7 +626,7 @@ void StartGroudonKyogreBattle(void) { LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; - gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; if (gGameVersion == VERSION_RUBY) CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_VS_KYOGRE_GROUDON); // GROUDON @@ -643,7 +646,7 @@ void StartRegiBattle(void) LockPlayerFieldControls(); gMain.savedCallback = CB2_EndScriptedWildBattle; - gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES); switch (species) diff --git a/src/battle_tower.c b/src/battle_tower.c index edacc53a98..c30406f798 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3004,7 +3004,7 @@ void TryHideBattleTowerReporter(void) static void FillPartnerParty(u16 trainerId) { s32 i, j; - u32 ivs, level; + u32 ivs, level, personality; u32 friendship; u16 monId; u32 otID; @@ -3054,22 +3054,22 @@ static void FillPartnerParty(u16 trainerId) u32 otIdType = OT_ID_RANDOM_NO_SHINY; do { - j = Random32(); - } while (IsShinyOtIdPersonality(otID, j)); + personality = Random32(); + } while (IsShinyOtIdPersonality(otID, personality)); if (partyData[i].gender == TRAINER_MON_MALE) - j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); + personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); else if (partyData[i].gender == TRAINER_MON_FEMALE) - j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); + personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); if (partyData[i].nature != 0) - ModifyPersonalityForNature(&j, partyData[i].nature - 1); + ModifyPersonalityForNature(&personality, partyData[i].nature - 1); if (partyData[i].isShiny) { otIdType = OT_ID_PRESET; - otID = HIHALF(j) ^ LOHALF(j); + otID = HIHALF(personality) ^ LOHALF(personality); } - CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, j, otIdType, otID); + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, personality, otIdType, otID); SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); CustomTrainerPartyAssignMoves(&gPlayerParty[i+3], &partyData[i]); diff --git a/src/battle_transition.c b/src/battle_transition.c index 11f9cddf4b..ae42db1fef 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1196,7 +1196,7 @@ static bool8 Swirl_Init(struct Task *task) InitTransitionData(); ScanlineEffect_Clear(); BeginNormalPaletteFade(PALETTES_ALL, 4, 0, 16, RGB_BLACK); - SetSinWave(gScanlineEffectRegBuffers[1], sTransitionData->cameraX, 0, 2, 0, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[1], sTransitionData->cameraX, 0, 2, 0, DISPLAY_HEIGHT); SetVBlankCallback(VBlankCB_Swirl); SetHBlankCallback(HBlankCB_Swirl); @@ -1213,7 +1213,7 @@ static bool8 Swirl_End(struct Task *task) task->tSinIndex += 4; task->tAmplitude += 8; - SetSinWave(gScanlineEffectRegBuffers[0], sTransitionData->cameraX, task->tSinIndex, 2, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], sTransitionData->cameraX, task->tSinIndex, 2, task->tAmplitude, DISPLAY_HEIGHT); if (!gPaletteFade.active) { @@ -1468,7 +1468,7 @@ static bool8 BigPokeball_SetGfx(struct Task *task) SET_TILE(tilemap, i, j, *bigPokeballMap); } - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return TRUE; @@ -1480,7 +1480,7 @@ static bool8 Aqua_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sTeamAqua_Tilemap, tilemap); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; @@ -1492,7 +1492,7 @@ static bool8 Magma_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sTeamMagma_Tilemap, tilemap); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; @@ -1505,7 +1505,7 @@ static bool8 Regice_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LoadPalette(sRegice_Palette, BG_PLTT_ID(15), sizeof(sRegice_Palette)); CpuCopy16(sRegice_Tilemap, tilemap, 0x500); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; @@ -1518,7 +1518,7 @@ static bool8 Registeel_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LoadPalette(sRegisteel_Palette, BG_PLTT_ID(15), sizeof(sRegisteel_Palette)); CpuCopy16(sRegisteel_Tilemap, tilemap, 0x500); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; @@ -1531,7 +1531,7 @@ static bool8 Regirock_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LoadPalette(sRegirock_Palette, BG_PLTT_ID(15), sizeof(sRegirock_Palette)); CpuCopy16(sRegirock_Tilemap, tilemap, 0x500); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return FALSE; @@ -1623,7 +1623,7 @@ static bool8 PatternWeave_Blend1(struct Task *task) task->tSinIndex += 8; task->tAmplitude -= 256; - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); sTransitionData->VBlank_DMA++; return FALSE; @@ -1643,7 +1643,7 @@ static bool8 PatternWeave_Blend2(struct Task *task) task->tSinIndex += 8; task->tAmplitude -= 256; - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); sTransitionData->VBlank_DMA++; return FALSE; @@ -1655,7 +1655,7 @@ static bool8 PatternWeave_FinishAppear(struct Task *task) task->tSinIndex += 8; task->tAmplitude -= 256; - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude >> 8, DISPLAY_HEIGHT); if (task->tAmplitude <= 0) { @@ -4253,7 +4253,7 @@ static bool8 FrontierLogoWiggle_SetGfx(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap); - SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); + SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; return TRUE; diff --git a/src/battle_tv.c b/src/battle_tv.c index 361b6fa2b9..af485df70d 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -253,7 +253,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_MEMENTO] = 7, [EFFECT_FACADE] = 1, [EFFECT_FOCUS_PUNCH] = 7, - [EFFECT_SMELLINGSALT] = 1, + [EFFECT_SMELLING_SALTS] = 1, [EFFECT_FOLLOW_ME] = 5, [EFFECT_NATURE_POWER] = 0, [EFFECT_CHARGE] = 4, diff --git a/src/battle_util.c b/src/battle_util.c index 0bffc5f3f2..fcd6de48b7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -62,7 +62,6 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler); static u32 GetFlingPowerFromItemId(u32 itemId); static void SetRandomMultiHitCounter(); static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item); -static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier); static uq4_12_t GetSupremeOverlordModifier(u32 battler); static bool32 CanBeInfinitelyConfused(u32 battler); @@ -114,6 +113,7 @@ static const u16 sSkillSwapBannedAbilities[] = ABILITY_ICE_FACE, ABILITY_HUNGER_SWITCH, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static const u16 sRolePlayBannedAbilities[] = @@ -139,6 +139,7 @@ static const u16 sRolePlayBannedAbilities[] = ABILITY_ICE_FACE, ABILITY_HUNGER_SWITCH, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static const u16 sRolePlayBannedAttackerAbilities[] = @@ -155,6 +156,7 @@ static const u16 sRolePlayBannedAttackerAbilities[] = ABILITY_POWER_CONSTRUCT, ABILITY_ICE_FACE, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static const u16 sWorrySeedBannedAbilities[] = @@ -171,6 +173,7 @@ static const u16 sWorrySeedBannedAbilities[] = ABILITY_TRUANT, ABILITY_ICE_FACE, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static const u16 sGastroAcidBannedAbilities[] = @@ -189,6 +192,7 @@ static const u16 sGastroAcidBannedAbilities[] = ABILITY_SHIELDS_DOWN, ABILITY_STANCE_CHANGE, ABILITY_ZEN_MODE, + ABILITY_ZERO_TO_HERO, }; static const u16 sEntrainmentBannedAttackerAbilities[] = @@ -207,6 +211,7 @@ static const u16 sEntrainmentBannedAttackerAbilities[] = ABILITY_ICE_FACE, ABILITY_HUNGER_SWITCH, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] = @@ -222,6 +227,7 @@ static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] = ABILITY_BATTLE_BOND, ABILITY_ICE_FACE, ABILITY_GULP_MISSILE, + ABILITY_ZERO_TO_HERO, }; static u8 CalcBeatUpPower(void) @@ -323,8 +329,6 @@ void HandleAction_UseMove(void) gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; } - moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - if (gBattleMons[gBattlerAttacker].hp != 0) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -337,6 +341,15 @@ void HandleAction_UseMove(void) SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); GET_MOVE_TYPE(gChosenMove, moveType); + // check max move used + if (gBattleStruct->dynamax.usingMaxMove[gBattlerAttacker]) + { + gCurrentMove = gChosenMove = GetMaxMove(gBattlerAttacker, gCurrentMove); + gBattleStruct->dynamax.activeSplit = gBattleStruct->dynamax.splits[gBattlerAttacker]; + } + + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + // choose target side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove) @@ -550,7 +563,7 @@ void HandleAction_UseItem(void) gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + ClearVariousBattlerFlags(gBattlerAttacker); gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ItemId_GetBattleUsage(gLastUsedItem) - 1]; @@ -577,12 +590,10 @@ bool32 TryRunFromBattle(u32 battler) gProtectStructs[battler].fleeType = FLEE_ITEM; effect++; } - #if B_GHOSTS_ESCAPE >= GEN_6 - else if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) { effect++; } - #endif else if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY) { if (InBattlePyramid()) @@ -676,7 +687,7 @@ void HandleAction_Run(void) { if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away { - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + ClearVariousBattlerFlags(gBattlerAttacker); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE_2; gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; @@ -828,10 +839,8 @@ void HandleAction_NothingIsFainted(void) void HandleAction_ActionFinished(void) { - #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 u32 i, j; bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou; - #endif *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = gSelectedMonPartyId = PARTY_SIZE; gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; @@ -854,9 +863,9 @@ 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 - if (!afterYouActive) + if (B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 && !afterYouActive) { // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action @@ -886,7 +895,6 @@ void HandleAction_ActionFinished(void) } } } - #endif } static const u8 sAbilitiesAffectedByMoldBreaker[] = @@ -992,6 +1000,7 @@ static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] = [ABILITY_STANCE_CHANGE] = 1, [ABILITY_TRACE] = 1, [ABILITY_ZEN_MODE] = 1, + [ABILITY_ZERO_TO_HERO] = 1, }; static const u8 sHoldEffectToType[][2] = @@ -1213,93 +1222,6 @@ u8 GetBattlerForBattleScript(u8 caseId) return ret; } -void PressurePPLose(u8 target, u8 attacker, u16 move) -{ - int moveIndex; - - if (GetBattlerAbility(target) != ABILITY_PRESSURE) - return; - - for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - if (gBattleMons[attacker].moves[moveIndex] == move) - break; - } - - if (moveIndex == MAX_MON_MOVES) - return; - - if (gBattleMons[attacker].pp[moveIndex] != 0) - gBattleMons[attacker].pp[moveIndex]--; - - if (MOVE_IS_PERMANENT(attacker, moveIndex)) - { - BtlController_EmitSetMonData(attacker, BUFFER_A, REQUEST_PPMOVE1_BATTLE + moveIndex, 0, 1, &gBattleMons[attacker].pp[moveIndex]); - MarkBattlerForControllerExec(attacker); - } -} - -void PressurePPLoseOnUsingImprison(u8 attacker) -{ - int i, j; - int imprisonPos = MAX_MON_MOVES; - u8 atkSide = GetBattlerSide(attacker); - - for (i = 0; i < gBattlersCount; i++) - { - if (atkSide != GetBattlerSide(i) && GetBattlerAbility(i) == ABILITY_PRESSURE) - { - for (j = 0; j < MAX_MON_MOVES; j++) - { - if (gBattleMons[attacker].moves[j] == MOVE_IMPRISON) - break; - } - if (j != MAX_MON_MOVES) - { - imprisonPos = j; - if (gBattleMons[attacker].pp[j] != 0) - gBattleMons[attacker].pp[j]--; - } - } - } - - if (imprisonPos != MAX_MON_MOVES && MOVE_IS_PERMANENT(attacker, imprisonPos)) - { - BtlController_EmitSetMonData(attacker, BUFFER_A, REQUEST_PPMOVE1_BATTLE + imprisonPos, 0, 1, &gBattleMons[attacker].pp[imprisonPos]); - MarkBattlerForControllerExec(attacker); - } -} - -void PressurePPLoseOnUsingPerishSong(u8 attacker) -{ - int i, j; - int perishSongPos = MAX_MON_MOVES; - - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerAbility(i) == ABILITY_PRESSURE && i != attacker) - { - for (j = 0; j < MAX_MON_MOVES; j++) - { - if (gBattleMons[attacker].moves[j] == MOVE_PERISH_SONG) - break; - } - if (j != MAX_MON_MOVES) - { - perishSongPos = j; - if (gBattleMons[attacker].pp[j] != 0) - gBattleMons[attacker].pp[j]--; - } - } - } - - if (perishSongPos != MAX_MON_MOVES && MOVE_IS_PERMANENT(attacker, perishSongPos)) - { - BtlController_EmitSetMonData(attacker, BUFFER_A, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[attacker].pp[perishSongPos]); - MarkBattlerForControllerExec(attacker); - } -} - static void UNUSED MarkAllBattlersForControllerExec(void) { int i; @@ -1342,9 +1264,9 @@ void MarkBattlerReceivedLinkData(u32 battler) gBattleControllerExecFlags &= ~((1 << 28) << battler); } -void CancelMultiTurnMoves(u32 battler) +const u8* CancelMultiTurnMoves(u32 battler) { - u8 i; + const u8 *result = NULL; gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE); gBattleMons[battler].status2 &= ~(STATUS2_UPROAR); @@ -1399,14 +1321,14 @@ void CancelMultiTurnMoves(u32 battler) else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 0) { gBattlerAttacker = otherSkyDropper; - gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 3; + result = BattleScript_ThrashConfuses; } // If this CancelMultiTurnMoves is occuring due to receiving Sleep/Freeze status else if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) { gBattlerAttacker = otherSkyDropper; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 1; + result = BattleScript_ThrashConfuses; } } } @@ -1421,6 +1343,8 @@ void CancelMultiTurnMoves(u32 battler) gDisableStructs[battler].rolloutTimer = 0; gDisableStructs[battler].furyCutterCounter = 0; + + return result; } bool32 WasUnableToUseMove(u32 battler) @@ -1575,27 +1499,7 @@ bool32 IsHealBlockPreventingMove(u32 battler, u32 move) if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) return FALSE; - switch (gBattleMoves[move].effect) - { -#if B_HEAL_BLOCKING >= GEN_6 - case EFFECT_ABSORB: - case EFFECT_STRENGTH_SAP: - case EFFECT_DREAM_EATER: -#endif - case EFFECT_MORNING_SUN: - case EFFECT_SYNTHESIS: - case EFFECT_MOONLIGHT: - case EFFECT_RESTORE_HP: - case EFFECT_REST: - case EFFECT_ROOST: - case EFFECT_HEALING_WISH: - case EFFECT_WISH: - case EFFECT_HEAL_PULSE: - case EFFECT_JUNGLE_HEALING: - return TRUE; - default: - return FALSE; - } + return gBattleMoves[move].healBlockBanned; } static bool32 IsBelchPreventingMove(u32 battler, u32 move) @@ -1606,15 +1510,18 @@ static bool32 IsBelchPreventingMove(u32 battler, u32 move) return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & gBitTable[gBattlerPartyIndexes[battler]]); } +// Dynamax bypasses all selection prevention except Taunt and Assault Vest. +#define DYNAMAX_BYPASS_CHECK !gBattleStruct->dynamax.playerSelect && !IsDynamaxed(gBattlerAttacker) + u32 TrySetCantSelectMoveBattleScript(u32 battler) { u32 limitations = 0; - u8 moveId = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); + u8 moveId = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST | RET_DYNAMAX); u32 move = gBattleMons[battler].moves[moveId]; u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = battler; gCurrentMove = move; @@ -1630,7 +1537,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) { CancelMultiTurnMoves(battler); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1647,7 +1554,10 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].tauntTimer != 0 && IS_MOVE_STATUS(move)) { - gCurrentMove = move; + if (IsDynamaxed(gBattlerAttacker)) + gCurrentMove = MOVE_MAX_GUARD; + else + gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { gPalaceSelectionBattleScripts[battler] = BattleScript_SelectingNotAllowedMoveTauntInPalace; @@ -1660,7 +1570,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].throatChopTimer != 0 && gBattleMoves[move].soundMove) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].throatChopTimer != 0 && gBattleMoves[move].soundMove) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1675,7 +1585,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(battler, move)) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1690,7 +1600,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move)) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1705,7 +1615,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1720,7 +1630,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(battler, move)) + if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(battler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1735,7 +1645,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (move == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[battler].item) != POCKET_BERRIES) + if (DYNAMAX_BYPASS_CHECK && move == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[battler].item) != POCKET_BERRIES) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1750,7 +1660,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (gBattleMoves[move].effect == EFFECT_GIGATON_HAMMER && move == gLastResultingMoves[battler]) + if (gBattleMoves[move].cantUseTwice && move == gLastResultingMoves[battler]) { gCurrentMove = move; PREPARE_MOVE_BUFFER(gBattleTextBuff1, gCurrentMove); @@ -1767,7 +1677,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } gPotentialItemEffectBattler = battler; - if (HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) + if (DYNAMAX_BYPASS_CHECK && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) { gCurrentMove = *choicedMove; gLastUsedItem = gBattleMons[battler].item; @@ -1784,7 +1694,10 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && move != MOVE_ME_FIRST) { - gCurrentMove = move; + if (IsDynamaxed(gBattlerAttacker)) + gCurrentMove = MOVE_MAX_GUARD; + else + gCurrentMove = move; gLastUsedItem = gBattleMons[battler].item; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -1797,7 +1710,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) limitations++; } } - if ((GetBattlerAbility(battler) == ABILITY_GORILLA_TACTICS) && *choicedMove != MOVE_NONE + if (DYNAMAX_BYPASS_CHECK && (GetBattlerAbility(battler) == ABILITY_GORILLA_TACTICS) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) { gCurrentMove = *choicedMove; @@ -1902,7 +1815,8 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) // Gorilla Tactics else if (check & MOVE_LIMITATION_CHOICE_ITEM && GetBattlerAbility(battler) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battler].moves[i]) unusableMoves |= gBitTable[i]; - else if (check & MOVE_LIMITATION_GIGATON_HAMMER && gBattleMoves[gBattleMons[battler].moves[i]].effect == EFFECT_GIGATON_HAMMER && gBattleMons[battler].moves[i] == gLastResultingMoves[battler]) + // Can't Use Twice flag + else if (check & MOVE_LIMITATION_CANT_USE_TWICE && gBattleMoves[gBattleMons[battler].moves[i]].cantUseTwice && gBattleMons[battler].moves[i] == gLastResultingMoves[battler]) unusableMoves |= gBitTable[i]; } return unusableMoves; @@ -1950,23 +1864,23 @@ u8 GetImprisonedMovesCount(u32 battler, u16 move) return imprisonedMoves; } -u32 GetBattlerFriendshipScore(u32 battler) +u32 GetBattlerAffectionHearts(u32 battler) { u8 side = GetBattlerSide(battler); struct Pokemon *party = GetSideParty(side); u16 species = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES); if (side != B_SIDE_PLAYER) - return FRIENDSHIP_NONE; + return AFFECTION_NO_HEARTS; else if (gSpeciesInfo[species].flags & SPECIES_FLAG_MEGA_EVOLUTION || (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_SECRET_BASE))) - return FRIENDSHIP_NONE; + return AFFECTION_NO_HEARTS; - return GetMonFriendshipScore(&party[gBattlerPartyIndexes[battler]]); + return GetMonAffectionHearts(&party[gBattlerPartyIndexes[battler]]); } static void TryToRevertMimicry(void) @@ -1996,6 +1910,7 @@ enum ENDTURN_SUN, ENDTURN_HAIL, ENDTURN_SNOW, + ENDTURN_DAMAGE_NON_TYPES, ENDTURN_GRAVITY, ENDTURN_WATER_SPORT, ENDTURN_MUD_SPORT, @@ -2375,6 +2290,34 @@ u8 DoFieldEndTurnEffects(void) } gBattleStruct->turnCountersTracker++; break; + case ENDTURN_DAMAGE_NON_TYPES: + while (gBattleStruct->turnSideTracker < 2) + { + side = gBattleStruct->turnSideTracker; + if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES) + { + 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); + } + } + gBattleStruct->turnSideTracker++; + if (effect != 0) + break; + } + if (!effect) + { + gBattleStruct->turnCountersTracker++; + gBattleStruct->turnSideTracker = 0; + } + break; case ENDTURN_TRICK_ROOM: if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && --gFieldTimers.trickRoomTimer == 0) { @@ -2419,25 +2362,21 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: - #if B_SPORT_TURNS >= GEN_6 - if (gFieldStatuses & STATUS_FIELD_WATERSPORT && --gFieldTimers.waterSportTimer == 0) - { - gFieldStatuses &= ~STATUS_FIELD_WATERSPORT; - BattleScriptExecute(BattleScript_WaterSportEnds); - effect++; - } - #endif + if (gFieldStatuses & STATUS_FIELD_WATERSPORT && --gFieldTimers.waterSportTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_WATERSPORT; + BattleScriptExecute(BattleScript_WaterSportEnds); + effect++; + } gBattleStruct->turnCountersTracker++; break; case ENDTURN_MUD_SPORT: - #if B_SPORT_TURNS >= GEN_6 - if (gFieldStatuses & STATUS_FIELD_MUDSPORT && --gFieldTimers.mudSportTimer == 0) - { - gFieldStatuses &= ~STATUS_FIELD_MUDSPORT; - BattleScriptExecute(BattleScript_MudSportEnds); - effect++; - } - #endif + if (gFieldStatuses & STATUS_FIELD_MUDSPORT && --gFieldTimers.mudSportTimer == 0) + { + gFieldStatuses &= ~STATUS_FIELD_MUDSPORT; + BattleScriptExecute(BattleScript_MudSportEnds); + effect++; + } gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRAVITY: @@ -2482,16 +2421,15 @@ u8 DoFieldEndTurnEffects(void) case ENDTURN_STATUS_HEAL: for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) { - #if B_AFFECTION_MECHANICS == TRUE - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER - && GetBattlerFriendshipScore(gBattlerAttacker) >= FRIENDSHIP_150_TO_199 + if (B_AFFECTION_MECHANICS == TRUE + && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER + && GetBattlerAffectionHearts(gBattlerAttacker) >= AFFECTION_FOUR_HEARTS && (Random() % 100 < 20)) { gBattleCommunication[MULTISTRING_CHOOSER] = 1; BattleScriptExecute(BattleScript_AffectionBasedStatusHeal); break; } - #endif } gBattleStruct->turnCountersTracker++; break; @@ -2540,9 +2478,11 @@ enum ENDTURN_POWDER, ENDTURN_THROAT_CHOP, ENDTURN_SLOW_START, - ENDTURN_PLASMA_FISTS, ENDTURN_CUD_CHEW, + ENDTURN_TORMENT, // supposedly this goes after Taunt, before Encore, but Encore is first right now? ENDTURN_SALT_CURE, + ENDTURN_SYRUP_BOMB, + ENDTURN_DYNAMAX, ENDTURN_BATTLER_COUNT }; @@ -2589,7 +2529,7 @@ u8 DoBattlerEndTurnEffects(void) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) && gBattleMons[battler].hp != 0) { - gBattleMoveDamage = GetDrainedBigRootHp(battler, gBattleMons[battler].maxHP / 16); + gBattleMoveDamage = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16); BattleScriptExecute(BattleScript_IngrainTurnHeal); effect++; } @@ -2601,7 +2541,7 @@ u8 DoBattlerEndTurnEffects(void) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) && gBattleMons[battler].hp != 0) { - gBattleMoveDamage = GetDrainedBigRootHp(battler, gBattleMons[battler].maxHP / 16); + gBattleMoveDamage = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16); BattleScriptExecute(BattleScript_AquaRingHeal); effect++; } @@ -2635,7 +2575,7 @@ u8 DoBattlerEndTurnEffects(void) MAGIC_GUARD_CHECK; gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleScripting.animArg1 = gBattlerTarget; @@ -2655,7 +2595,7 @@ u8 DoBattlerEndTurnEffects(void) { if (!BATTLER_MAX_HP(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -2665,7 +2605,7 @@ u8 DoBattlerEndTurnEffects(void) } else { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_PoisonTurnDmg); @@ -2684,7 +2624,7 @@ u8 DoBattlerEndTurnEffects(void) { if (!BATTLER_MAX_HP(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -2694,7 +2634,7 @@ u8 DoBattlerEndTurnEffects(void) } else { - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; if ((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns @@ -2711,11 +2651,7 @@ u8 DoBattlerEndTurnEffects(void) && gBattleMons[battler].hp != 0) { MAGIC_GUARD_CHECK; - #if B_BURN_DAMAGE >= GEN_7 - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; - #else - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; - #endif + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (ability == ABILITY_HEATPROOF) { if (gBattleMoveDamage > (gBattleMoveDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would. @@ -2734,11 +2670,7 @@ u8 DoBattlerEndTurnEffects(void) && gBattleMons[battler].hp != 0) { MAGIC_GUARD_CHECK; - #if B_BURN_DAMAGE >= GEN_7 - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; - #else - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; - #endif + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_FrostbiteTurnDmg); @@ -2755,7 +2687,7 @@ u8 DoBattlerEndTurnEffects(void) // persist even after the affected Pokemon has been awakened by Shed Skin. if (gBattleMons[battler].status1 & STATUS1_SLEEP) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_NightmareTurnDmg); @@ -2773,7 +2705,7 @@ u8 DoBattlerEndTurnEffects(void) && gBattleMons[battler].hp != 0) { MAGIC_GUARD_CHECK; - gBattleMoveDamage = gBattleMons[battler].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_CurseTurnDmg); @@ -2793,15 +2725,9 @@ u8 DoBattlerEndTurnEffects(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[battler]); gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; if (GetBattlerHoldEffect(gBattleStruct->wrappedBy[battler], TRUE) == HOLD_EFFECT_BINDING_BAND) - #if B_BINDING_DAMAGE >= GEN_6 - gBattleMoveDamage = gBattleMons[battler].maxHP / 6; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); else - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; - #else - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; - else - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; - #endif + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -2819,12 +2745,7 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_OCTOLOCK: { - u16 battlerAbility = GetBattlerAbility(battler); - if (gDisableStructs[battler].octolock - && !(GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_CLEAR_AMULET - || battlerAbility == ABILITY_CLEAR_BODY - || battlerAbility == ABILITY_FULL_METAL_BODY - || battlerAbility == ABILITY_WHITE_SMOKE)) + if (gDisableStructs[battler].octolock) { gBattlerTarget = battler; BattleScriptExecute(BattleScript_OctolockEndTurn); @@ -2992,11 +2913,11 @@ u8 DoBattlerEndTurnEffects(void) } else { - #if B_SLEEP_TURNS >= GEN_5 - gBattleMons[battler].status1 |= ((Random() % 3) + 2); - #else - gBattleMons[battler].status1 |= ((Random() % 4) + 3); - #endif + if (B_SLEEP_TURNS >= GEN_5) + gBattleMons[battler].status1 |= ((Random() % 3) + 2); + else + gBattleMons[battler].status1 |= ((Random() % 4) + 3); + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); MarkBattlerForControllerExec(battler); BattleScriptExecute(BattleScript_YawnMakesAsleep); @@ -3066,11 +2987,7 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_ROOST: // Return flying type. if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) - { gBattleResources->flags->flags[battler] &= ~RESOURCE_FLAG_ROOST; - gBattleMons[battler].type1 = gBattleStruct->roostTypes[battler][0]; - gBattleMons[battler].type2 = gBattleStruct->roostTypes[battler][1]; - } gBattleStruct->turnEffectsTracker++; break; case ENDTURN_ELECTRIFY: @@ -3097,10 +3014,6 @@ u8 DoBattlerEndTurnEffects(void) } gBattleStruct->turnEffectsTracker++; break; - case ENDTURN_PLASMA_FISTS: - gStatuses4[battler] &= ~STATUS4_PLASMA_FISTS; - gBattleStruct->turnEffectsTracker++; - break; case ENDTURN_CUD_CHEW: if (GetBattlerAbility(battler) == ABILITY_CUD_CHEW && !gDisableStructs[battler].cudChew && ItemId_GetPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES) gDisableStructs[battler].cudChew = TRUE; @@ -3122,6 +3035,40 @@ u8 DoBattlerEndTurnEffects(void) } gBattleStruct->turnEffectsTracker++; break; + case ENDTURN_SYRUP_BOMB: + if ((gStatuses4[battler] & STATUS4_SYRUP_BOMB) && (gBattleMons[battler].hp != 0)) + { + if (gDisableStructs[battler].syrupBombTimer > 0 && --gDisableStructs[battler].syrupBombTimer == 0) + gStatuses4[battler] &= ~STATUS4_SYRUP_BOMB; + gBattlerTarget = battler; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SYRUP_BOMB); + gBattlescriptCurrInstr = BattleScript_SyrupBombEndTurn; + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_TORMENT: + if (gDisableStructs[battler].tormentTimer != PERMANENT_TORMENT + && --gDisableStructs[battler].tormentTimer == 0) + { + gBattleMons[battler].status2 &= ~STATUS2_TORMENT; + BattleScriptExecute(BattleScript_TormentEnds); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_DYNAMAX: + if (IsDynamaxed(battler) + && --gBattleStruct->dynamax.dynamaxTurns[battler] == 0) + { + gBattleScripting.battler = battler; + UndoDynamax(battler); + BattleScriptExecute(BattleScript_DynamaxEnds); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_BATTLER_COUNT: // done gBattleStruct->turnEffectsTracker = 0; gBattleStruct->turnEffectsBattlerId++; @@ -3278,27 +3225,25 @@ bool32 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState = 3; else gBattleStruct->faintedActionsState = 1; - #if B_FAINT_SWITCH_IN >= GEN_4 // Don't switch mons until all pokemon performed their actions or the battle's over. - if (gBattleOutcome == 0 + if (B_FAINT_SWITCH_IN >= GEN_4 + && gBattleOutcome == 0 && !NoAliveMonsForEitherParty() && gCurrentTurnActionNumber != gBattlersCount) { gAbsentBattlerFlags |= gBitTable[gBattlerFainted]; return FALSE; } - #endif break; case 3: - #if B_FAINT_SWITCH_IN >= GEN_4 // Don't switch mons until all pokemon performed their actions or the battle's over. - if (gBattleOutcome == 0 + if (B_FAINT_SWITCH_IN >= GEN_4 + && gBattleOutcome == 0 && !NoAliveMonsForEitherParty() && gCurrentTurnActionNumber != gBattlersCount) { return FALSE; } - #endif gBattleStruct->faintedActionsBattlerId = 0; gBattleStruct->faintedActionsState++; // fall through @@ -3374,6 +3319,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) case CANCELLER_FLAGS: // flags clear gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_DESTINY_BOND; gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE; + gStatuses4[gBattlerAttacker] &= ~ STATUS4_GLAIVE_RUSH; gBattleScripting.tripleKickPower = 0; gBattleStruct->atkCancellerTracker++; break; @@ -3552,11 +3498,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { // confusion dmg - #if B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 - if (RandomWeighted(RNG_CONFUSION, 2, 1)) - #else - if (RandomWeighted(RNG_CONFUSION, 1, 1)) - #endif + if (RandomWeighted(RNG_CONFUSION, (B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 2 : 1), 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; gBattlerTarget = gBattlerAttacker; @@ -3670,11 +3612,8 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) case CANCELLER_POWDER_MOVE: if ((gBattleMoves[gCurrentMove].powderMove) && (gBattlerAttacker != gBattlerTarget)) { - #if B_POWDER_GRASS >= GEN_6 - if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT) - #else - if (GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT) - #endif + if (B_POWDER_GRASS >= GEN_6 + && (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT)) { gBattlerAbility = gBattlerTarget; effect = 1; @@ -3700,7 +3639,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) if (moveType == TYPE_FIRE) { gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; effect = 1; } @@ -3779,8 +3718,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 3, 0) } } - #if B_BEAT_UP >= GEN_5 - else if (gBattleMoves[gCurrentMove].effect == EFFECT_BEAT_UP) + else if (B_BEAT_UP >= GEN_5 && gBattleMoves[gCurrentMove].effect == EFFECT_BEAT_UP) { struct Pokemon* party = GetBattlerParty(gBattlerAttacker); int i; @@ -3797,7 +3735,6 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->beatUpSlot = 0; PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } - #endif gBattleStruct->atkCancellerTracker++; break; case CANCELLER_END: @@ -3829,6 +3766,8 @@ u8 AtkCanceller_UnableToUseMove2(void) if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN && IsBattlerGrounded(gBattlerTarget) && GetChosenMovePriority(gBattlerAttacker) > 0 + && gBattleMoves[gCurrentMove].target != MOVE_TARGET_ALL_BATTLERS + && gBattleMoves[gCurrentMove].target != MOVE_TARGET_OPPONENTS_FIELD && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { CancelMultiTurnMoves(gBattlerAttacker); @@ -4027,14 +3966,12 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility) { return FALSE; } -#if B_ABILITY_WEATHER <= GEN_5 - else if (viaAbility && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1])) + else if (B_ABILITY_WEATHER < GEN_6 && viaAbility && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1])) { gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]); ShouldChangeFormInWeather(battler); return TRUE; } -#endif else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]))) { gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]); @@ -4166,12 +4103,20 @@ static uq4_12_t GetSupremeOverlordModifier(u32 battler) return modifier; } +static bool32 HadMoreThanHalfHpNowHasLess(u32 battler) +{ + // Had more than half of hp before, now has less + return (gBattleStruct->hpBefore[battler] >= gBattleMons[battler].maxHP / 2 + && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2); +} + u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) { u32 effect = 0; - u32 speciesAtk, speciesDef; u32 moveType, move; + u32 side; u32 i, j; + struct Pokemon *mon; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) return 0; @@ -4179,9 +4124,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gBattlerAttacker >= gBattlersCount) gBattlerAttacker = battler; - speciesAtk = gBattleMons[gBattlerAttacker].species; - speciesDef = gBattleMons[gBattlerTarget].species; - if (special) gLastUsedAbility = special; else @@ -4205,24 +4147,25 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 switch (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { case STATUS_FIELD_ELECTRIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; break; case STATUS_FIELD_MISTY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; break; case STATUS_FIELD_GRASSY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; break; case STATUS_FIELD_PSYCHIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; break; } BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; } - #if B_THUNDERSTORM_TERRAIN == TRUE - else if (GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) + else if (B_THUNDERSTORM_TERRAIN == TRUE + && GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM + && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) { // overworld weather started rain, so just do electric terrain anim gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); @@ -4230,16 +4173,15 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; } - #endif - #if B_FOG_TERRAIN == TRUE - else if ((GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) + else if (B_FOG_TERRAIN == TRUE + && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) + && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); gBattleCommunication[MULTISTRING_CHOOSER] = 0; BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; } - #endif break; case ABILITYEFFECT_SWITCH_IN_WEATHER: gBattleScripting.battler = battler; @@ -4276,16 +4218,17 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case WEATHER_SNOW: if (!(gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) { - #if B_OVERWORLD_SNOW >= GEN_9 + if (B_OVERWORLD_SNOW >= GEN_9) + { gBattleWeather = B_WEATHER_SNOW; gBattleScripting.animArg1 = B_ANIM_SNOW_CONTINUES; - effect++; - #else + } + else + { gBattleWeather = B_WEATHER_HAIL; gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES; - effect++; - #endif - + } + effect++; } break; } @@ -4373,7 +4316,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler)) && TryResetBattlerStatChanges(BATTLE_PARTNER(battler))) { - u32 i; gEffectBattler = BATTLE_PARTNER(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_CURIOUS_MEDICINE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -4570,19 +4512,16 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_SNOW_WARNING: - #if B_SNOW_WARNING >= GEN_9 - if (TryChangeBattleWeather(battler, ENUM_WEATHER_SNOW, TRUE)) + if (B_SNOW_WARNING >= GEN_9 && TryChangeBattleWeather(battler, ENUM_WEATHER_SNOW, TRUE)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow); effect++; } - #else - if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE)) + else if (B_SNOW_WARNING < GEN_9 && TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail); effect++; } - #endif else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -4764,6 +4703,20 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; + case ABILITY_ZERO_TO_HERO: + side = GetBattlerSide(battler); + mon = &GetSideParty(side)[gBattlerPartyIndexes[battler]]; + + if (!gSpecialStatuses[battler].switchInAbilityDone + && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_PALAFIN_HERO + && !gBattleStruct->transformZeroToHero[gBattlerPartyIndexes[battler]][side]) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattleStruct->transformZeroToHero[gBattlerPartyIndexes[battler]][side] = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_ZeroToHeroActivates); + effect++; + } + break; } break; case ABILITYEFFECT_ENDTURN: // 1 @@ -4793,7 +4746,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); - gBattleMoveDamage = gBattleMons[battler].maxHP / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8); + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -4844,11 +4797,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gDisableStructs[battler].isFirstTurn != 2) { u32 validToRaise = 0, validToLower = 0; - #if B_MOODY_ACC_EVASION < GEN_8 - u32 statsNum = NUM_BATTLE_STATS; - #else - u32 statsNum = NUM_STATS; - #endif + u32 statsNum = B_MOODY_ACC_EVASION >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS; for (i = STAT_ATK; i < statsNum; i++) { @@ -4895,7 +4844,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) { BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates); - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; effect++; @@ -4998,7 +4947,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattlescriptCurrInstr = BattleScript_GoodAsGoldActivates; effect = 1; } - else if (gLastUsedAbility == ABILITY_ICE_FACE && IS_MOVE_PHYSICAL(move) && gBattleMons[gBattlerTarget].species == SPECIES_EISCUE) + else if (gLastUsedAbility == ABILITY_ICE_FACE && IS_MOVE_PHYSICAL(move) && gBattleMons[gBattlerTarget].species == SPECIES_EISCUE_ICE_FACE) { gBattleMons[gBattlerTarget].species = SPECIES_EISCUE_NOICE_FACE; if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) @@ -5043,10 +4992,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE - #if B_FLASH_FIRE_FROZEN <= GEN_4 - && !(gBattleMons[battler].status1 & STATUS1_FREEZE) - #endif - ) + && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battler].status1 & STATUS1_FREEZE))) { if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE)) { @@ -5087,11 +5033,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (effect == 1) // Drain Hp ability. { -#if B_HEAL_BLOCKING >= GEN_5 - if (BATTLER_MAX_HP(battler) || gStatuses3[battler] & STATUS3_HEAL_BLOCK) -#else - if (BATTLER_MAX_HP(battler)) -#endif + if (BATTLER_MAX_HP(battler) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless; @@ -5105,7 +5047,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; - gBattleMoveDamage = gBattleMons[battler].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -5128,11 +5070,13 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattlescriptCurrInstr = BattleScript_MoveStatDrain_PPLoss; SET_STATCHANGER(statId, statAmount, FALSE); - #if B_ABSORBING_ABILITY_STRING < GEN_5 - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); - #endif + if (B_ABSORBING_ABILITY_STRING < GEN_5) + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); } } + + if (effect) + gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. } break; case ABILITYEFFECT_MOVE_END: // Think contact abilities. @@ -5197,9 +5141,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) - // Had more than half of hp before, now has less - && gBattleStruct->hpBefore[battler] >= gBattleMons[battler].maxHP / 2 - && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2 + && HadMoreThanHalfHpNowHasLess(battler) && (gMultiHitCounter == 0 || gMultiHitCounter == 1) && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) @@ -5236,8 +5178,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) && IS_MOVE_PHYSICAL(gCurrentMove) - && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if speed cannot be raised - || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) // Don't activate if defense cannot be lowered + && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if both Speed and Defense cannot be raised. + || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) { if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE && CanBattlerSwitch(gBattlerAttacker)) gProtectStructs[battler].disableEjectPack = TRUE; // Set flag for target @@ -5254,6 +5196,7 @@ 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) { gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove; @@ -5304,7 +5247,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && TARGET_TURN_DAMAGED - && IsMoveMakingContact(move, gBattlerAttacker)) + && IsMoveMakingContact(move, gBattlerAttacker) + && !IsDynamaxed(gBattlerTarget)) { switch (gBattleMons[gBattlerAttacker].ability) { @@ -5321,6 +5265,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_STANCE_CHANGE: case ABILITY_WONDER_GUARD: case ABILITY_ZEN_MODE: + case ABILITY_ZERO_TO_HERO: break; default: if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) @@ -5393,11 +5338,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && IsMoveMakingContact(move, gBattlerAttacker)) { - #if B_ROUGH_SKIN_DMG >= GEN_4 - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; - #else - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; - #endif + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / (B_ROUGH_SKIN_DMG >= GEN_4 ? 8 : 16); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -5421,7 +5362,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } else { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPushCursor(); @@ -5625,7 +5566,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; } @@ -5638,7 +5579,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; } @@ -5678,8 +5619,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED + && (gMultiHitCounter == 0 || gMultiHitCounter == 1) // Activates after all hits from a multi-hit move. && IsBattlerAlive(gBattlerTarget) - && (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerTarget].maxHP / 2) + && HadMoreThanHalfHpNowHasLess(gBattlerTarget) && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))) { gBattlerAttacker = gBattlerTarget; @@ -5744,9 +5686,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && RandomWeighted(RNG_STENCH, 9, 1) && !IS_MOVE_STATUS(move) - && !gBattleMoves[gCurrentMove].effect != EFFECT_FLINCH_HIT - && !gBattleMoves[gCurrentMove].effect != EFFECT_FLINCH_STATUS - && !gBattleMoves[gCurrentMove].effect != EFFECT_TRIPLE_ARROWS) + && gBattleMoves[gCurrentMove].effect != EFFECT_FLINCH_HIT + && gBattleMoves[gCurrentMove].effect != EFFECT_FLINCH_STATUS + && gBattleMoves[gCurrentMove].effect != EFFECT_TRIPLE_ARROWS) { gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; BattleScriptPushCursor(); @@ -5795,6 +5737,27 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; } break; + case ABILITYEFFECT_OPPORTUNIST: + /* Similar to ABILITYEFFECT_IMMUNITY in that it loops through all battlers. + * Is called after ABILITYEFFECT_ON_SWITCHIN to copy any boosts + * from switch in abilities e.g. intrepid sword, as + */ + for (battler = 0; battler < gBattlersCount; battler++) + { + switch (GetBattlerAbility(battler)) + { + case ABILITY_OPPORTUNIST: + if (gProtectStructs[battler].activateOpportunist == 2) { + gBattleScripting.savedBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerAttacker = gBattlerAbility = battler; + gProtectStructs[battler].activateOpportunist--; + BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange); + effect = 1; + } + break; + } + } + break; case ABILITYEFFECT_IMMUNITY: // 5 for (battler = 0; battler < gBattlersCount; battler++) { @@ -5853,6 +5816,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect = 4; break; } + if (effect != 0) { switch (effect) @@ -5894,10 +5858,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY)) { gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - #if B_SYNCHRONIZE_TOXIC < GEN_5 - if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) - gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; - #endif + if (B_SYNCHRONIZE_TOXIC < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER; gBattleScripting.battler = gBattlerAbility = gBattlerTarget; @@ -6049,7 +6011,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]) { gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = FALSE; - gBattleMons[battler].species = SPECIES_EISCUE; + gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } @@ -6139,6 +6101,7 @@ bool32 IsNeutralizingGasBannedAbility(u32 ability) case ABILITY_ICE_FACE: case ABILITY_AS_ONE_ICE_RIDER: case ABILITY_AS_ONE_SHADOW_RIDER: + case ABILITY_ZERO_TO_HERO: return TRUE; default: return FALSE; @@ -6171,6 +6134,11 @@ bool32 IsMyceliumMightOnField(void) return FALSE; } +bool32 IsMoldBreakerTypeAbility(u32 ability) +{ + return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE); +} + u32 GetBattlerAbility(u32 battler) { if (gStatuses3[battler] & STATUS3_GASTRO_ACID) @@ -6182,9 +6150,7 @@ u32 GetBattlerAbility(u32 battler) if (IsMyceliumMightOnField()) return ABILITY_NONE; - if ((((gBattleMons[gBattlerAttacker].ability == ABILITY_MOLD_BREAKER - || gBattleMons[gBattlerAttacker].ability == ABILITY_TERAVOLT - || gBattleMons[gBattlerAttacker].ability == ABILITY_TURBOBLAZE) + if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability) && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID)) || gBattleMoves[gCurrentMove].ignoresTargetAbility) && sAbilitiesAffectedByMoldBreaker[gBattleMons[battler].ability] @@ -6240,15 +6206,10 @@ u32 IsAbilityOnFieldExcept(u32 battler, u32 ability) u32 IsAbilityPreventingEscape(u32 battler) { u32 id; -#if B_GHOSTS_ESCAPE >= GEN_6 - if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return 0; -#endif -#if B_SHADOW_TAG_ESCAPE >= GEN_4 - if ((id = IsAbilityOnOpposingSide(battler, ABILITY_SHADOW_TAG)) && GetBattlerAbility(battler) != ABILITY_SHADOW_TAG) -#else - if ((id = IsAbilityOnOpposingSide(battler, ABILITY_SHADOW_TAG))) -#endif + if ((id = IsAbilityOnOpposingSide(battler, ABILITY_SHADOW_TAG)) + && (B_SHADOW_TAG_ESCAPE >= GEN_4 && GetBattlerAbility(battler) != ABILITY_SHADOW_TAG)) return id; if ((id = IsAbilityOnOpposingSide(battler, ABILITY_ARENA_TRAP)) && IsBattlerGrounded(battler)) return id; @@ -6262,10 +6223,8 @@ bool32 CanBattlerEscape(u32 battler) // no ability check { if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_SHED_SHELL) return TRUE; -#if B_GHOSTS_ESCAPE >= GEN_6 - else if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; -#endif else if (gBattleMons[battler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) return FALSE; else if (gStatuses3[battler] & STATUS3_ROOTED) @@ -6320,6 +6279,7 @@ bool32 CanSleep(u32 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) @@ -6338,6 +6298,7 @@ bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget) || gBattleMons[battlerTarget].status1 & STATUS1_ANY || ability == ABILITY_IMMUNITY || ability == ABILITY_COMATOSE + || ability == ABILITY_PURIFYING_SALT || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) || IsAbilityStatusProtected(battlerTarget) || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) @@ -6355,6 +6316,7 @@ bool32 CanBeBurned(u32 battler) || 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; @@ -6364,13 +6326,11 @@ bool32 CanBeBurned(u32 battler) bool32 CanBeParalyzed(u32 battler) { u16 ability = GetBattlerAbility(battler); - if ( - #if B_PARALYZE_ELECTRIC >= GEN_6 - IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC) || - #endif - gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD + 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)) @@ -6386,6 +6346,7 @@ bool32 CanBeFrozen(u32 battler) || 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)) @@ -6400,6 +6361,7 @@ bool32 CanGetFrostbite(u32 battler) || 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)) @@ -6441,23 +6403,14 @@ bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId) return FALSE; } -#if B_CONFUSE_BERRIES_HEAL >= GEN_7 - #define CONFUSE_BERRY_HP_FRACTION 4 -#else - #define CONFUSE_BERRY_HP_FRACTION 2 -#endif - static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2) { - if (HasEnoughHpToEatBerry(battler, CONFUSE_BERRY_HP_FRACTION, itemId) -#if B_HEAL_BLOCKING >= GEN_5 - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) -#endif - ) + if (HasEnoughHpToEatBerry(battler, (B_CONFUSE_BERRIES_HEAL >= GEN_7 ? 4 : 2), itemId) + && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId); - gBattleMoveDamage = gBattleMons[battler].maxHP / GetBattlerItemHoldEffectParam(battler, itemId); + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / GetBattlerItemHoldEffectParam(battler, itemId); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -6489,8 +6442,6 @@ static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2) return 0; } -#undef CONFUSE_BERRY_HP_FRACTION - static u8 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, bool32 end2) { if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId)) @@ -6596,9 +6547,7 @@ static u8 TrySetEnigmaBerry(u32 battler) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && ((TARGET_TURN_DAMAGED && gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) -#if B_HEAL_BLOCKING >= GEN_5 - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) -#endif + && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { gBattleScripting.battler = battler; gBattleMoveDamage = (gBattleMons[battler].maxHP * 25 / 100) * -1; @@ -6630,6 +6579,7 @@ static u8 DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 split) else SET_STATCHANGER(statId, 1, FALSE); + gBattleScripting.battler = battler; gBattleScripting.animArg1 = 14 + statId; gBattleScripting.animArg2 = 0; BattleScriptPushCursor(); @@ -6713,13 +6663,11 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, bool32 execute) static u8 ItemHealHp(u32 battler, u32 itemId, bool32 end2, bool32 percentHeal) { if (!(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) - #if B_HEAL_BLOCKING >= GEN_5 - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) - #endif + && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) && HasEnoughHpToEatBerry(battler, 2, itemId)) { if (percentHeal) - gBattleMoveDamage = (gBattleMons[battler].maxHP * GetBattlerItemHoldEffectParam(battler, itemId) / 100) * -1; + gBattleMoveDamage = (GetNonDynamaxMaxHP(battler) * GetBattlerItemHoldEffectParam(battler, itemId) / 100) * -1; else gBattleMoveDamage = GetBattlerItemHoldEffectParam(battler, itemId) * -1; @@ -6761,46 +6709,47 @@ static bool32 GetMentalHerbEffect(u32 battler) StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); ret = TRUE; } -#if B_MENTAL_HERB >= GEN_5 - // Check taunt - if (gDisableStructs[battler].tauntTimer != 0) + if (B_MENTAL_HERB >= GEN_5) { - gDisableStructs[battler].tauntTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); - ret = TRUE; + // Check taunt + if (gDisableStructs[battler].tauntTimer != 0) + { + gDisableStructs[battler].tauntTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); + ret = TRUE; + } + // Check encore + if (gDisableStructs[battler].encoreTimer != 0) + { + gDisableStructs[battler].encoredMove = 0; + gDisableStructs[battler].encoreTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED + ret = TRUE; + } + // Check torment + if (gBattleMons[battler].status2 & STATUS2_TORMENT) + { + gBattleMons[battler].status2 &= ~STATUS2_TORMENT; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; + ret = TRUE; + } + // Check heal block + if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) + { + gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; + ret = TRUE; + } + // Check disable + if (gDisableStructs[battler].disableTimer != 0) + { + gDisableStructs[battler].disableTimer = 0; + gDisableStructs[battler].disabledMove = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; + ret = TRUE; + } } - // Check encore - if (gDisableStructs[battler].encoreTimer != 0) - { - gDisableStructs[battler].encoredMove = 0; - gDisableStructs[battler].encoreTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED - ret = TRUE; - } - // Check torment - if (gBattleMons[battler].status2 & STATUS2_TORMENT) - { - gBattleMons[battler].status2 &= ~STATUS2_TORMENT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; - ret = TRUE; - } - // Check heal block - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) - { - gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; - ret = TRUE; - } - // Check disable - if (gDisableStructs[battler].disableTimer != 0) - { - gDisableStructs[battler].disableTimer = 0; - gDisableStructs[battler].disabledMove = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; - ret = TRUE; - } -#endif return ret; } @@ -6831,64 +6780,78 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect) switch (holdEffect) { -#if B_HP_BERRIES >= GEN_4 case HOLD_EFFECT_MICLE_BERRY: - effect = TrySetMicleBerry(battler, gLastUsedItem, FALSE); + if (B_HP_BERRIES >= GEN_4) + effect = TrySetMicleBerry(battler, gLastUsedItem, FALSE); break; case HOLD_EFFECT_RESTORE_HP: - effect = ItemHealHp(battler, gLastUsedItem, FALSE, FALSE); + if (B_HP_BERRIES >= GEN_4) + effect = ItemHealHp(battler, gLastUsedItem, FALSE, FALSE); break; -#endif -#if B_BERRIES_INSTANT >= GEN_4 case HOLD_EFFECT_RESTORE_PCT_HP: - effect = ItemHealHp(battler, gLastUsedItem, FALSE, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battler, gLastUsedItem, FALSE, TRUE); break; case HOLD_EFFECT_RESTORE_PP: - effect = ItemRestorePp(battler, gLastUsedItem, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemRestorePp(battler, gLastUsedItem, FALSE); break; case HOLD_EFFECT_CONFUSE_SPICY: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, FALSE); break; case HOLD_EFFECT_CONFUSE_DRY: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, FALSE); break; case HOLD_EFFECT_CONFUSE_SWEET: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, FALSE); break; case HOLD_EFFECT_CONFUSE_BITTER: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, FALSE); break; case HOLD_EFFECT_CONFUSE_SOUR: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, FALSE); break; case HOLD_EFFECT_ATTACK_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, FALSE); break; case HOLD_EFFECT_DEFENSE_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, FALSE); break; case HOLD_EFFECT_SPEED_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, FALSE); break; case HOLD_EFFECT_SP_ATTACK_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, FALSE); break; case HOLD_EFFECT_SP_DEFENSE_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, FALSE); break; case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move - effect = TrySetEnigmaBerry(battler); + if (B_BERRIES_INSTANT >= GEN_4) + effect = TrySetEnigmaBerry(battler); break; case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move - effect = DamagedStatBoostBerryEffect(battler, STAT_DEF, SPLIT_PHYSICAL); + if (B_BERRIES_INSTANT >= GEN_4) + effect = DamagedStatBoostBerryEffect(battler, STAT_DEF, SPLIT_PHYSICAL); break; case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move - effect = DamagedStatBoostBerryEffect(battler, STAT_SPDEF, SPLIT_SPECIAL); + if (B_BERRIES_INSTANT >= GEN_4) + effect = DamagedStatBoostBerryEffect(battler, STAT_SPDEF, SPLIT_SPECIAL); break; case HOLD_EFFECT_RANDOM_STAT_UP: - effect = RandomStatRaiseBerry(battler, gLastUsedItem, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = RandomStatRaiseBerry(battler, gLastUsedItem, FALSE); break; -#endif case HOLD_EFFECT_CURE_PAR: if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) { @@ -7051,8 +7014,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) { int i = 0, moveType; u8 effect = ITEM_NO_EFFECT; - u8 changedPP = 0; - u32 battlerHoldEffect, atkHoldEffect; + u32 battlerHoldEffect = 0, atkHoldEffect; u8 atkHoldEffectParam; u16 atkItem; @@ -7096,39 +7058,50 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) BattleScriptExecute(BattleScript_WhiteHerbEnd2); } break; - #if B_BERRIES_INSTANT >= GEN_4 case HOLD_EFFECT_CONFUSE_SPICY: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, TRUE); break; case HOLD_EFFECT_CONFUSE_DRY: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, TRUE); break; case HOLD_EFFECT_CONFUSE_SWEET: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, TRUE); break; case HOLD_EFFECT_CONFUSE_BITTER: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, TRUE); break; case HOLD_EFFECT_CONFUSE_SOUR: - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, TRUE); break; case HOLD_EFFECT_ATTACK_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, TRUE); break; case HOLD_EFFECT_DEFENSE_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, TRUE); break; case HOLD_EFFECT_SPEED_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, TRUE); break; case HOLD_EFFECT_SP_ATTACK_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, TRUE); break; case HOLD_EFFECT_SP_DEFENSE_UP: - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, TRUE); break; case HOLD_EFFECT_CRITICAL_UP: - if (!(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY) && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, gLastUsedItem), gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && !(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY) + && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, gLastUsedItem), gLastUsedItem)) { gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; gBattleScripting.battler = battler; @@ -7137,10 +7110,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_RANDOM_STAT_UP: - effect = RandomStatRaiseBerry(battler, gLastUsedItem, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = RandomStatRaiseBerry(battler, gLastUsedItem, TRUE); break; case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && gBattleMons[battler].status1 & STATUS1_PARALYSIS + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~STATUS1_PARALYSIS; BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); @@ -7148,7 +7124,9 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_PSN_ANY) + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); BattleScriptExecute(BattleScript_BerryCurePsnEnd2); @@ -7156,7 +7134,9 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[battler].status1 & STATUS1_BURN && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_BURN) + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~STATUS1_BURN; BattleScriptExecute(BattleScript_BerryCureBrnEnd2); @@ -7164,13 +7144,17 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[battler].status1 & STATUS1_FREEZE && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_FREEZE) + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~STATUS1_FREEZE; BattleScriptExecute(BattleScript_BerryCureFrzEnd2); effect = ITEM_STATUS_CHANGE; } - if (gBattleMons[battler].status1 & STATUS1_FROSTBITE && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_FROSTBITE) + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~STATUS1_FROSTBITE; BattleScriptExecute(BattleScript_BerryCureFsbEnd2); @@ -7178,7 +7162,9 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[battler].status1 & STATUS1_SLEEP && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_SLEEP) + && !UnnerveOn(battler, gLastUsedItem)) { gBattleMons[battler].status1 &= ~STATUS1_SLEEP; gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; @@ -7187,7 +7173,9 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_STATUS: - if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) && !UnnerveOn(battler, gLastUsedItem)) + if (B_BERRIES_INSTANT >= GEN_4 + && (gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) + && !UnnerveOn(battler, gLastUsedItem)) { i = 0; if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) @@ -7232,12 +7220,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_RESTORE_HP: - effect = ItemHealHp(battler, gLastUsedItem, TRUE, FALSE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battler, gLastUsedItem, TRUE, FALSE); break; case HOLD_EFFECT_RESTORE_PCT_HP: - effect = ItemHealHp(battler, gLastUsedItem, TRUE, TRUE); + if (B_BERRIES_INSTANT >= GEN_4) + effect = ItemHealHp(battler, gLastUsedItem, TRUE, TRUE); break; - #endif case HOLD_EFFECT_AIR_BALLOON: effect = ITEM_EFFECT_OTHER; gBattleScripting.battler = battler; @@ -7358,7 +7347,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } else if (GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD && !moveTurn) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_ItemHurtEnd2); @@ -7369,13 +7358,10 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_LEFTOVERS: LEFTOVERS: -#if B_HEAL_BLOCKING >= GEN_5 - if (gBattleMons[battler].hp < gBattleMons[battler].maxHP && !moveTurn && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) -#else - if (gBattleMons[battler].hp < gBattleMons[battler].maxHP && !moveTurn) -#endif + if (gBattleMons[battler].hp < gBattleMons[battler].maxHP && !moveTurn + && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 16; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; @@ -7622,10 +7608,8 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) case HOLD_EFFECT_FLINCH: { u16 ability = GetBattlerAbility(gBattlerAttacker); - #if B_SERENE_GRACE_BOOST >= GEN_5 - if (ability == ABILITY_SERENE_GRACE) + if (B_SERENE_GRACE_BOOST >= GEN_5 && ability == ABILITY_SERENE_GRACE) atkHoldEffectParam *= 2; - #endif if (gBattleMoveDamage != 0 // Need to have done damage && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED @@ -7648,7 +7632,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) { gBattleStruct->blunderPolicy = FALSE; gLastUsedItem = atkItem; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPEED, 2, FALSE); + SET_STATCHANGER(STAT_SPEED, 2, FALSE); effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; @@ -7664,11 +7648,8 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) if (gSpecialStatuses[gBattlerAttacker].damagedMons // Need to have done damage && gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP -#if B_HEAL_BLOCKING >= GEN_5 - && gBattleMons[gBattlerAttacker].hp != 0 && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) -#else - && gBattleMons[gBattlerAttacker].hp != 0) -#endif + && gBattleMons[gBattlerAttacker].hp != 0 + && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { gLastUsedItem = atkItem; gPotentialItemEffectBattler = gBattlerAttacker; @@ -7688,7 +7669,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD && gSpecialStatuses[gBattlerAttacker].damagedMons) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 10; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 10; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; effect = ITEM_HP_CHANGE; @@ -7706,7 +7687,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) { gLastUsedItem = atkItem; gBattleScripting.battler = gBattlerAttacker; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE); + SET_STATCHANGER(STAT_SPATK, 1, FALSE); effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; @@ -7734,7 +7715,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) && IsBattlerAlive(gBattlerAttacker) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 6; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 6; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; effect = ITEM_HP_CHANGE; @@ -7762,7 +7743,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE); + SET_STATCHANGER(STAT_ATK, 1, FALSE); } break; case HOLD_EFFECT_LUMINOUS_MOSS: @@ -7773,7 +7754,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPDEF, 1, FALSE); + SET_STATCHANGER(STAT_SPDEF, 1, FALSE); } break; case HOLD_EFFECT_CELL_BATTERY: @@ -7784,7 +7765,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE); + SET_STATCHANGER(STAT_ATK, 1, FALSE); } break; case HOLD_EFFECT_ABSORB_BULB: @@ -7795,7 +7776,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE); + SET_STATCHANGER(STAT_SPATK, 1, FALSE); } break; case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move @@ -7808,7 +7789,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) && IS_MOVE_PHYSICAL(gCurrentMove) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; if (GetBattlerAbility(battler) == ABILITY_RIPEN) @@ -7828,7 +7809,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) && IS_MOVE_SPECIAL(gCurrentMove) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; if (GetBattlerAbility(battler) == ABILITY_RIPEN) @@ -7893,7 +7874,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) case HOLD_EFFECT_STICKY_BARB: // Not an orb per se, but similar effect, and needs to NOT activate with pickpocket if (battlerAbility != ABILITY_MAGIC_GUARD) { - gBattleMoveDamage = gBattleMons[battler].maxHP / 8; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_ItemHurtEnd2); @@ -7920,11 +7901,12 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) return effect; } -void ClearFuryCutterDestinyBondGrudge(u32 battler) +void ClearVariousBattlerFlags(u32 battler) { gDisableStructs[battler].furyCutterCounter = 0; gBattleMons[battler].status2 &= ~STATUS2_DESTINY_BOND; gStatuses3[battler] &= ~STATUS3_GRUDGE; + gStatuses4[battler] &= ~ STATUS4_GLAIVE_RUSH; } void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands @@ -7959,7 +7941,7 @@ u32 SetRandomTarget(u32 battler) u32 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBattler = 0; - u32 i, moveTarget, side; + u32 moveTarget, side; if (setTarget != NO_TARGET_OVERRIDE) moveTarget = setTarget - 1; @@ -8036,12 +8018,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) static bool32 IsBattlerModernFatefulEncounter(u32 battler) { - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - return TRUE; - if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS - && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) - return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); + return TRUE; } u8 IsMonDisobedient(void) @@ -8064,28 +8041,33 @@ u8 IsMonDisobedient(void) return 0; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) return 0; - #if B_OBEDIENCE_MECHANICS < GEN_8 - if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + if (B_OBEDIENCE_MECHANICS < GEN_8 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) return 0; - #endif - if (FlagGet(FLAG_BADGE08_GET)) + if (FlagGet(FLAG_BADGE08_GET)) // Rain Badge, ignore obedience altogether return 0; obedienceLevel = 10; - if (FlagGet(FLAG_BADGE02_GET)) + if (FlagGet(FLAG_BADGE01_GET)) // Stone Badge + obedienceLevel = 20; + if (FlagGet(FLAG_BADGE02_GET)) // Knuckle Badge obedienceLevel = 30; - if (FlagGet(FLAG_BADGE04_GET)) + if (FlagGet(FLAG_BADGE03_GET)) // Dynamo Badge + obedienceLevel = 40; + if (FlagGet(FLAG_BADGE04_GET)) // Heat Badge obedienceLevel = 50; - if (FlagGet(FLAG_BADGE06_GET)) + if (FlagGet(FLAG_BADGE05_GET)) // Balance Badge + obedienceLevel = 60; + if (FlagGet(FLAG_BADGE06_GET)) // Feather Badge obedienceLevel = 70; + if (FlagGet(FLAG_BADGE07_GET)) // Mind Badge + obedienceLevel = 80; } -#if B_OBEDIENCE_MECHANICS >= GEN_8 - if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + if (B_OBEDIENCE_MECHANICS >= GEN_8 + && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) levelReferenced = gBattleMons[gBattlerAttacker].metLevel; else -#endif levelReferenced = gBattleMons[gBattlerAttacker].level; if (levelReferenced <= obedienceLevel) @@ -8241,26 +8223,24 @@ bool32 IsBattlerProtected(u32 battler, u32 move) return FALSE; } - if (move == MOVE_TEATIME) - { + // Z-Moves and Max Moves bypass protection (except Max Guard). + if ((IsMaxMove(move) || gBattleStruct->zmove.active) + && (!gProtectStructs[battler].maxGuarded + || gBattleMoves[move].argument == MAX_EFFECT_BYPASS_PROTECT)) return FALSE; - } - // Z-Moves and Max Moves bypass protection - if (gBattleStruct->zmove.active) - { - return FALSE; - } + // Max Guard is silly about the moves it blocks, including Teatime. + if (gProtectStructs[battler].maxGuarded && IsMoveBlockedByMaxGuard(move)) + return TRUE; // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. // This means extra logic is needed to handle Shell Side Arm. if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST - && (gBattleMoves[move].makesContact || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory))) + && (gBattleMoves[move].makesContact || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory)) + && !gProtectStructs[battler].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist return FALSE; else if (gBattleMoves[move].ignoresProtect) return FALSE; - else if (gBattleMoves[move].effect == EFFECT_FEINT) - return FALSE; else if (gProtectStructs[battler].protected) return TRUE; else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_WIDE_GUARD @@ -8274,6 +8254,8 @@ bool32 IsBattlerProtected(u32 battler, u32 move) return TRUE; else if (gProtectStructs[battler].kingsShielded && gBattleMoves[move].power != 0) return TRUE; + else if (gProtectStructs[battler].maxGuarded) + return TRUE; else if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_QUICK_GUARD && GetChosenMovePriority(gBattlerAttacker) > 0) return TRUE; @@ -8296,10 +8278,8 @@ static bool32 IsBattlerGrounded2(u32 battler, bool32 considerInverse) return TRUE; if (gFieldStatuses & STATUS_FIELD_GRAVITY) return TRUE; -#if B_ROOTED_GROUNDING >= GEN_4 - if (gStatuses3[battler] & STATUS3_ROOTED) + if (B_ROOTED_GROUNDING >= GEN_4 && gStatuses3[battler] & STATUS3_ROOTED) return TRUE; -#endif if (gStatuses3[battler] & STATUS3_SMACKED_DOWN) return TRUE; if (gStatuses3[battler] & STATUS3_TELEKINESIS) @@ -8611,7 +8591,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP || abilityDef == ABILITY_COMATOSE) basePower *= 2; break; - case EFFECT_SMELLINGSALT: + case EFFECT_SMELLING_SALTS: if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) basePower *= 2; break; @@ -8692,10 +8672,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 break; case EFFECT_PAYBACK: if (GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef) - #if B_PAYBACK_SWITCH_BOOST >= GEN_5 - && (gDisableStructs[battlerDef].isFirstTurn != 2) - #endif - ) + && (B_PAYBACK_SWITCH_BOOST < GEN_5 || gDisableStructs[battlerDef].isFirstTurn != 2)) basePower *= 2; break; case EFFECT_BOLT_BEAK: @@ -8726,25 +8703,22 @@ 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: - #ifdef B_DYNAMAX if (IsDynamaxed(battlerDef)) basePower *= 2; - #endif break; case EFFECT_HIDDEN_POWER: { - #if B_HIDDEN_POWER_DMG < GEN_6 - u8 powerBits; + if (B_HIDDEN_POWER_DMG < GEN_6) + { + u8 powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) + | ((gBattleMons[battlerAtk].attackIV & 2) << 0) + | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) + | ((gBattleMons[battlerAtk].speedIV & 2) << 2) + | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) + | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); - powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) - | ((gBattleMons[battlerAtk].attackIV & 2) << 0) - | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) - | ((gBattleMons[battlerAtk].speedIV & 2) << 2) - | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) - | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); - - basePower = (40 * powerBits) / 63 + 30; - #endif + basePower = (40 * powerBits) / 63 + 30; + } break; } case EFFECT_GRAV_APPLE: @@ -8765,14 +8739,16 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower *= 2; break; case EFFECT_BEAT_UP: - #if B_BEAT_UP >= GEN_5 - basePower = CalcBeatUpPower(); - #endif + if (B_BEAT_UP >= GEN_5) + basePower = CalcBeatUpPower(); break; case EFFECT_PSYBLADE: if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); break; + case EFFECT_MAX_MOVE: + basePower = GetMaxMovePower(gBattleMons[battlerAtk].moves[gBattleStruct->chosenMovePositions[battlerAtk]]); + break; } // Move-specific base power changes @@ -8833,20 +8809,13 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); break; case EFFECT_KNOCK_OFF: - #if B_KNOCK_OFF_DMG >= GEN_6 - if (gBattleMons[battlerDef].item != ITEM_NONE + if (B_KNOCK_OFF_DMG >= GEN_6 + && gBattleMons[battlerDef].item != ITEM_NONE && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - #endif break; } -#if B_TERRAIN_TYPE_BOOST >= GEN_8 - #define TERRAIN_TYPE_BOOST UQ_4_12(1.3) -#else - #define TERRAIN_TYPE_BOOST UQ_4_12(1.5) -#endif - // various effects if (gProtectStructs[battlerAtk].helpingHand) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); @@ -8857,25 +8826,19 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN) && moveType == TYPE_GRASS) - modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); + modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN) && moveType == TYPE_DRAGON) modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN) && moveType == TYPE_ELECTRIC) - modifier = uq4_12_multiply(modifier, TERRAIN_TYPE_BOOST); + 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, TERRAIN_TYPE_BOOST); - #if B_SPORT_TURNS >= GEN_6 - if ((moveType == TYPE_ELECTRIC && gFieldStatuses & STATUS_FIELD_MUDSPORT) - || (moveType == TYPE_FIRE && gFieldStatuses & STATUS_FIELD_WATERSPORT)) - #else - if ((moveType == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0)) - || (moveType == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) - #endif - #if B_SPORT_DMG_REDUCTION >= GEN_5 - modifier = uq4_12_multiply(modifier, UQ_4_12(0.23)); - #else - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - #endif + 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)); + 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)); // attacker's abilities switch (atkAbility) @@ -8910,9 +8873,9 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); break; case ABILITY_RIVALRY: - if (AreBattlersOfOppositeGender(battlerAtk, battlerDef)) + if (AreBattlersOfSameGender(battlerAtk, battlerDef)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); - else + else if (AreBattlersOfOppositeGender(battlerAtk, battlerDef)) modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); break; case ABILITY_ANALYTIC: @@ -8969,7 +8932,11 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 break; case ABILITY_TRANSISTOR: if (moveType == TYPE_ELECTRIC) + #if B_TRANSISTOR_BOOST >= GEN_9 + modifier = uq4_12_multiply(modifier, UQ_4_12(5325 / 4096)); + #else modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + #endif break; case ABILITY_DRAGONS_MAW: if (moveType == TYPE_DRAGON) @@ -9026,18 +8993,6 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, UQ_4_12(1.33)); } - if (IsAbilityOnField(ABILITY_VESSEL_OF_RUIN) && atkAbility != ABILITY_VESSEL_OF_RUIN && IS_MOVE_SPECIAL(gCurrentMove)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); - - if (IsAbilityOnField(ABILITY_SWORD_OF_RUIN) && defAbility != ABILITY_SWORD_OF_RUIN && IS_MOVE_PHYSICAL(gCurrentMove)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); - - if (IsAbilityOnField(ABILITY_TABLETS_OF_RUIN) && atkAbility != ABILITY_TABLETS_OF_RUIN && IS_MOVE_PHYSICAL(gCurrentMove)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); - - if (IsAbilityOnField(ABILITY_BEADS_OF_RUIN) && defAbility != ABILITY_BEADS_OF_RUIN && IS_MOVE_SPECIAL(gCurrentMove)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); - // attacker partner's abilities if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) { @@ -9121,11 +9076,9 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, holdEffectModifier); break; case HOLD_EFFECT_SOUL_DEW: - #if B_SOUL_DEW_BOOST >= GEN_7 - if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) - #else - if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IS_MOVE_SPECIAL(move)) - #endif + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) + && ((B_SOUL_DEW_BOOST >= GEN_7 && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) + || (B_SOUL_DEW_BOOST < GEN_7 && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IS_MOVE_SPECIAL(move)))) modifier = uq4_12_multiply(modifier, holdEffectModifier); break; case HOLD_EFFECT_BUG_POWER: @@ -9167,7 +9120,6 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 } return uq4_12_multiply_by_int_half_down(modifier, basePower); } -#undef TERRAIN_TYPE_BOOST static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk) { @@ -9263,26 +9215,24 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - #if B_PLUS_MINUS_INTERACTION >= GEN_5 case ABILITY_PLUS: + if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); + if (partnerAbility == ABILITY_MINUS + || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_PLUS)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + } + break; case ABILITY_MINUS: if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) { u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); - if (partnerAbility == ABILITY_PLUS || partnerAbility == ABILITY_MINUS) + if (partnerAbility == ABILITY_PLUS + || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_MINUS)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); } break; - #else - case ABILITY_PLUS: - if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_MINUS: - if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - #endif case ABILITY_FLOWER_GIFT: if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); @@ -9326,6 +9276,13 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m } } + // field abilities + if (IsAbilityOnField(ABILITY_VESSEL_OF_RUIN) && atkAbility != ABILITY_VESSEL_OF_RUIN && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + + if (IsAbilityOnField(ABILITY_TABLETS_OF_RUIN) && atkAbility != ABILITY_TABLETS_OF_RUIN && IS_MOVE_PHYSICAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + // attacker's hold effect switch (holdEffectAtk) { @@ -9338,15 +9295,15 @@ 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_LIGHT_BALL: - if (atkBaseSpeciesId == SPECIES_PIKACHU) + if (atkBaseSpeciesId == SPECIES_PIKACHU && (B_LIGHT_BALL_ATTACK_BOOST >= GEN_4 || IS_MOVE_SPECIAL(move))) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_CHOICE_BAND: - if (IS_MOVE_PHYSICAL(move)) + if (IS_MOVE_PHYSICAL(move) && !IsDynamaxed(battlerAtk)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case HOLD_EFFECT_CHOICE_SPECS: - if (IS_MOVE_SPECIAL(move)) + if (IS_MOVE_SPECIAL(move) && !IsDynamaxed(battlerAtk)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; } @@ -9404,11 +9361,9 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 usesDefStat = FALSE; } - #if B_EXPLOSION_DEFENSE <= GEN_4 // Self-destruct / Explosion cut defense in half - if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) + if (B_EXPLOSION_DEFENSE < GEN_5 && gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) defStat /= 2; - #endif // critical hits ignore positive stat changes if (isCrit && defStage > DEFAULT_STAT_STAGE) @@ -9475,6 +9430,13 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 } } + // field abilities + if (IsAbilityOnField(ABILITY_SWORD_OF_RUIN) && defAbility != ABILITY_SWORD_OF_RUIN && usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + + if (IsAbilityOnField(ABILITY_BEADS_OF_RUIN) && defAbility != ABILITY_BEADS_OF_RUIN && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + // target's hold effects switch (holdEffectDef) { @@ -9494,21 +9456,20 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 if (!usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; -#if B_SOUL_DEW_BOOST <= GEN_6 case HOLD_EFFECT_SOUL_DEW: - if ((gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) + if (B_SOUL_DEW_BOOST < GEN_7 + && (gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && !usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; -#endif } // sandstorm sp.def boost for rock types - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && weather & B_WEATHER_SANDSTORM && !usesDefStat) + if (B_SANDSTORM_SPDEF_BOOST >= GEN_4 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SANDSTORM) && !usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); // snow def boost for ice types - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && weather & B_WEATHER_SNOW && usesDefStat) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SNOW) && usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. @@ -9527,34 +9488,10 @@ static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, return power * userFinalAttack * (2 * level / 5 + 2) / targetFinalDefense / 50 + 2; } -#if B_MULTIPLE_TARGETS_DMG >= GEN_4 - #define V_MULTIPLE_TARGETS_DMG UQ_4_12(0.75) -#else - #define V_MULTIPLE_TARGETS_DMG UQ_4_12(0.5) -#endif - -#if B_CRIT_MULTIPLIER >= GEN_6 - #define V_CRIT_MULTIPLIER UQ_4_12(1.5) -#else - #define V_CRIT_MULTIPLIER UQ_4_12(2.0) -#endif - -#if B_BURN_FACADE_DMG >= GEN_6 - #define FACADE_PREVENTS_BURN_MALUS(move) (gBattleMoves[move].effect == EFFECT_FACADE) -#else - #define FACADE_PREVENTS_BURN_MALUS(move) (FALSE) -#endif - -#if B_PARENTAL_BOND_DMG < GEN_7 - #define V_PARENTAL_BOND_DMG UQ_4_12(0.5) -#else - #define V_PARENTAL_BOND_DMG UQ_4_12(0.25) -#endif - static inline uq4_12_t GetTargetDamageModifier(u32 move, u32 battlerAtk, u32 battlerDef) { if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) - return V_MULTIPLE_TARGETS_DMG; + return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -9562,7 +9499,7 @@ static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) { if (gSpecialStatuses[battlerAtk].parentalBondState != PARENTAL_BOND_2ND_HIT) return UQ_4_12(1.0); - return V_PARENTAL_BOND_DMG; + return B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5); } static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveType, u32 move, u32 abilityAtk) @@ -9601,12 +9538,12 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(u32 battlerAtk, u32 move, u32 { if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_PHYSICAL(move) - && !FACADE_PREVENTS_BURN_MALUS(move) + && (B_BURN_FACADE_DMG < GEN_6 || gBattleMoves[move].effect != EFFECT_FACADE) && abilityAtk != ABILITY_GUTS) return UQ_4_12(0.5); if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && IS_MOVE_SPECIAL(move) - && !FACADE_PREVENTS_BURN_MALUS(move) + && (B_BURN_FACADE_DMG < GEN_6 || gBattleMoves[move].effect != EFFECT_FACADE) && abilityAtk != ABILITY_GUTS) return UQ_4_12(0.5); return UQ_4_12(1.0); @@ -9614,12 +9551,21 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(u32 battlerAtk, u32 move, u32 static inline uq4_12_t GetCriticalModifier(bool32 isCrit) { - return isCrit ? V_CRIT_MULTIPLIER : UQ_4_12(1.0); + if (isCrit) + return B_CRIT_MULTIPLIER >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); + return UQ_4_12(1.0); } -static inline uq4_12_t GetZMoveAgainstProtectionModifier(u32 battlerDef) +static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef) { - if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(battlerDef)) + if (gStatuses4[battlerDef] & STATUS4_GLAIVE_RUSH) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(u32 battlerDef, u32 move) +{ + if ((gBattleStruct->zmove.active || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef)) return UQ_4_12(0.25); return UQ_4_12(1.0); } @@ -9852,7 +9798,8 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk)); DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(battlerAtk, move, moveType, holdEffectAtk, holdEffectDef, weather)); DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit)); - // TODO: Glaive Rush (Gen IX effect) + DAMAGE_APPLY_MODIFIER(GetGlaiveRushModifier(battlerDef)); + if (randomFactor) { dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); @@ -9862,7 +9809,7 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk)); DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(battlerAtk, move, abilityAtk)); - DAMAGE_APPLY_MODIFIER(GetZMoveAgainstProtectionModifier(battlerDef)); + DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(battlerDef, move)); DAMAGE_APPLY_MODIFIER(GetOtherModifiers(move, moveType, battlerAtk, battlerDef, isCrit, typeEffectivenessModifier, updateFlags, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef)); if (dmg == 0) @@ -9991,12 +9938,12 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov { u32 illusionSpecies; - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type1, battlerAtk, recordAbilities); - if (gBattleMons[battlerDef].type2 != gBattleMons[battlerDef].type1) - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type2, battlerAtk, recordAbilities); - if (gBattleMons[battlerDef].type3 != TYPE_MYSTERY && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type2 - && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 0), battlerAtk, recordAbilities); + if (GetBattlerType(battlerDef, 1) != GetBattlerType(battlerDef, 0)) + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 1), battlerAtk, recordAbilities); + if (GetBattlerType(battlerDef, 2) != TYPE_MYSTERY && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 1) + && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 0)) + MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 2), battlerAtk, recordAbilities); if (recordAbilities && (illusionSpecies = GetIllusionMonSpecies(battlerDef))) TryNoticeIllusionInTypeEffectiveness(move, moveType, battlerAtk, battlerDef, modifier, illusionSpecies); @@ -10004,12 +9951,8 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov if (gBattleMoves[move].split == SPLIT_STATUS && move != MOVE_THUNDER_WAVE) { modifier = UQ_4_12(1.0); - #if B_GLARE_GHOST <= GEN_3 - if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - { + if (B_GLARE_GHOST < GEN_4 && move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) modifier = UQ_4_12(0.0); - } - #endif } else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].ignoreTypeIfFlyingAndUngrounded)) { @@ -10023,12 +9966,10 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov RecordAbilityBattle(battlerDef, ABILITY_LEVITATE); } } -#if B_SHEER_COLD_IMMUNITY >= GEN_7 - else if (move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + else if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) { modifier = UQ_4_12(0.0); } -#endif // Thousand Arrows ignores type modifiers for flying mons if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].ignoreTypeIfFlyingAndUngrounded) @@ -10113,10 +10054,8 @@ static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier) uq4_12_t GetTypeModifier(u32 atkType, u32 defType) { -#if B_FLAG_INVERSE_BATTLE != 0 - if (FlagGet(B_FLAG_INVERSE_BATTLE)) + if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) return GetInverseTypeMultiplier(sTypeEffectivenessTable[atkType][defType]); -#endif return sTypeEffectivenessTable[atkType][defType]; } @@ -10211,7 +10150,7 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) bool32 CanMegaEvolve(u32 battler) { - u32 itemId, holdEffect, species; + u32 itemId, holdEffect; struct Pokemon *mon; u32 battlerPosition = GetBattlerPosition(battler); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); @@ -10245,7 +10184,6 @@ bool32 CanMegaEvolve(u32 battler) else mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; - species = GetMonData(mon, MON_DATA_SPECIES); itemId = GetMonData(mon, MON_DATA_HELD_ITEM); if (itemId == ITEM_ENIGMA_BERRY_E_READER) @@ -10275,7 +10213,7 @@ bool32 CanMegaEvolve(u32 battler) bool32 CanUltraBurst(u32 battler) { - u32 itemId, holdEffect, species; + u32 itemId, holdEffect; struct Pokemon *mon; u32 battlerPosition = GetBattlerPosition(battler); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); @@ -10308,7 +10246,6 @@ bool32 CanUltraBurst(u32 battler) else mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; - species = GetMonData(mon, MON_DATA_SPECIES); itemId = GetMonData(mon, MON_DATA_HELD_ITEM); // Check if there is an entry in the evolution table for Ultra Burst. @@ -10355,17 +10292,15 @@ bool32 IsBattlerUltraBursted(u32 battler) // Returns SPECIES_NONE if no form change is possible u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method) { - u32 i, j; + u32 i; u16 targetSpecies = SPECIES_NONE; u16 species = gBattleMons[battler].species; const struct FormChange *formChanges = gFormChangeTablePointers[species]; u16 heldItem; - u32 ability; if (formChanges != NULL) { heldItem = gBattleMons[battler].item; - ability = GetBattlerAbility(battler); for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { @@ -10407,6 +10342,10 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method) } } break; + case FORM_CHANGE_BATTLE_GIGANTAMAX: + // TODO: check Gigantamax factor + targetSpecies = formChanges[i].targetSpecies; + break; case FORM_CHANGE_BATTLE_WEATHER: // Check if there is a required ability and if the battler's ability does not match it // or is suppressed. If so, revert to the no weather form. @@ -10451,6 +10390,9 @@ bool32 CanBattlerFormChange(u32 battler, u16 method) return TRUE; else if (IsBattlerPrimalReverted(battler) && (method == FORM_CHANGE_END_BATTLE)) return TRUE; + // Gigantamaxed Pokemon should revert upon fainting, switching, or ending the battle. + else if (IsGigantamaxed(battler) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_BATTLE_SWITCH || method == FORM_CHANGE_END_BATTLE)) + return TRUE; return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method); } @@ -10469,7 +10411,7 @@ bool32 TryBattleFormChange(u32 battler, u16 method) targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); if (targetSpecies != SPECIES_NONE) { - // Saves the original species on the first form change for the player. + // Saves the original species on the first form change. if (gBattleStruct->changedSpecies[side][monId] == SPECIES_NONE) gBattleStruct->changedSpecies[side][monId] = gBattleMons[battler].species; @@ -10491,6 +10433,10 @@ bool32 TryBattleFormChange(u32 battler, u16 method) else if (IsBattlerPrimalReverted(battler) && (method == FORM_CHANGE_END_BATTLE)) restoreSpecies = TRUE; + // Gigantamax Pokemon have their forms reverted after fainting, switching, or ending the battle. + else if (IsGigantamaxed(battler) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_BATTLE_SWITCH || method == FORM_CHANGE_END_BATTLE)) + restoreSpecies = TRUE; + if (restoreSpecies) { // Reverts the original species @@ -10507,8 +10453,8 @@ bool32 TryBattleFormChange(u32 battler, u16 method) bool32 DoBattlersShareType(u32 battler1, u32 battler2) { s32 i; - u8 types1[3] = {gBattleMons[battler1].type1, gBattleMons[battler1].type2, gBattleMons[battler1].type3}; - u8 types2[3] = {gBattleMons[battler2].type1, gBattleMons[battler2].type2, gBattleMons[battler2].type3}; + u8 types1[3] = {GetBattlerType(battler1, 0), GetBattlerType(battler1, 1), GetBattlerType(battler1, 2)}; + u8 types2[3] = {GetBattlerType(battler2, 0), GetBattlerType(battler2, 1), GetBattlerType(battler2, 2)}; if (types1[2] == TYPE_MYSTERY) types1[2] = types1[0]; @@ -10616,16 +10562,17 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battler) bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) { -#if B_BADGE_BOOST == GEN_3 - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) - return FALSE; - else if (GetBattlerSide(battler) != B_SIDE_PLAYER) - return FALSE; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) - return FALSE; - else if (FlagGet(badgeFlag)) - return TRUE; -#endif + if (B_BADGE_BOOST == GEN_3) + { + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) + return FALSE; + else if (GetBattlerSide(battler) != B_SIDE_PLAYER) + return FALSE; + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + return FALSE; + else if (FlagGet(badgeFlag)) + return TRUE; + } return FALSE; } @@ -10633,19 +10580,19 @@ u8 GetBattleMoveSplit(u32 moveId) { if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId)) return gBattleStruct->zmove.activeSplit; + if (gBattleStruct != NULL && IsMaxMove(moveId)) // TODO: Might be buggy depending on when this is called. + return gBattleStruct->dynamax.activeSplit; if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky return SPLIT_PHYSICAL; + if (B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) + return gBattleMoves[moveId].split; -#if B_PHYSICAL_SPECIAL_SPLIT >= GEN_4 - return gBattleMoves[moveId].split; -#else if (IS_MOVE_STATUS(moveId)) return SPLIT_STATUS; else if (gBattleMoves[moveId].type < TYPE_MYSTERY) return SPLIT_PHYSICAL; else return SPLIT_SPECIAL; -#endif } static bool32 TryRemoveScreens(u32 battler) @@ -10722,9 +10669,7 @@ bool32 CanFling(u32 battler) u16 item = gBattleMons[battler].item; if (item == ITEM_NONE - #if B_KLUTZ_FLING_INTERACTION >= GEN_5 - || GetBattlerAbility(battler) == ABILITY_KLUTZ - #endif + || (B_KLUTZ_FLING_INTERACTION >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || gDisableStructs[battler].embargoTimer != 0 || GetFlingPowerFromItemId(item) == 0 @@ -10859,9 +10804,7 @@ void TryRestoreHeldItems(void) for (i = 0; i < PARTY_SIZE; i++) { - #if B_RESTORE_HELD_BATTLE_ITEMS == FALSE - if (gBattleStruct->itemLost[i].stolen) - #endif + if (B_RESTORE_HELD_BATTLE_ITEMS == TRUE || gBattleStruct->itemLost[i].stolen) { lostItem = gBattleStruct->itemLost[i].originalItem; if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) @@ -10885,9 +10828,7 @@ bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item) | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_SECRET_BASE - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE - | BATTLE_TYPE_TRAINER - #endif + | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) ))) { return FALSE; @@ -10914,14 +10855,14 @@ void TrySaveExchangedItem(u32 battler, u16 stolenItem) { // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally) -#if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + if (B_TRAINERS_KNOCK_OFF_ITEMS == FALSE) + return; // If regular trainer battle and mon's original item matches what is being stolen, save it to be restored at end of battle 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; -#endif } bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes) @@ -11046,7 +10987,8 @@ bool32 TryRoomService(u32 battler) bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget) { - #if B_PRANKSTER_DARK_TYPES >= GEN_7 + if (B_PRANKSTER_DARK_TYPES < GEN_7) + return FALSE; if (!gProtectStructs[battlerPrankster].pranksterElevated) return FALSE; if (GetBattlerSide(battlerPrankster) == GetBattlerSide(battlerDef)) @@ -11059,8 +11001,6 @@ bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 ch return FALSE; return TRUE; - #endif - return FALSE; } u16 GetUsedHeldItem(u32 battler) @@ -11085,8 +11025,6 @@ bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) // Possible return values are defined in battle.h following MOVE_TARGET_SELECTED u32 GetBattlerMoveTargetType(u32 battler, u32 move) { - u32 target; - if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) return MOVE_TARGET_BOTH; @@ -11100,25 +11038,20 @@ 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) + && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)) + return FALSE; return TRUE; } static void SetRandomMultiHitCounter() { if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) - { gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 5); - } + else if (B_MULTI_HIT_CHANCE >= GEN_5) + gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. else - { -#if B_MULTI_HIT_CHANCE >= GEN_5 - // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); -#else - // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); -#endif - } + gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. } void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) @@ -11144,6 +11077,8 @@ void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) void RecalcBattlerStats(u32 battler, struct Pokemon *mon) { CalculateMonStats(mon); + if (IsDynamaxed(battler) && gChosenActionByBattler[battler] != B_ACTION_SWITCH) + ApplyDynamaxHPMultiplier(battler, mon); CopyMonLevelAndBaseStatsToBattleMon(battler, mon); CopyMonAbilityAndTypesToBattleMon(battler, mon); } @@ -11179,6 +11114,14 @@ bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2) return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2); } +bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2) +{ + u8 gender1 = GetBattlerGender(battler1); + u8 gender2 = GetBattlerGender(battler2); + + return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 == gender2); +} + u32 CalcSecondaryEffectChance(u32 battler, u8 secondaryEffectChance) { if (GetBattlerAbility(battler) == ABILITY_SERENE_GRACE) @@ -11194,9 +11137,33 @@ bool32 IsAlly(u32 battlerAtk, u32 battlerDef) bool32 IsGen6ExpShareEnabled(void) { -#if I_EXP_SHARE_ITEM < GEN_6 +#if I_EXP_SHARE_FLAG <= TEMP_FLAGS_END return FALSE; #else return FlagGet(I_EXP_SHARE_FLAG); #endif } + + +u8 GetBattlerType(u32 battler, u8 typeIndex) +{ + u16 types[3] = {0}; + types[0] = gBattleMons[battler].type1; + types[1] = gBattleMons[battler].type2; + types[2] = gBattleMons[battler].type3; + + // Handle Roost's Flying-type suppression + if (typeIndex == 0 || typeIndex == 1) + { + if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) + { + if (types[0] == TYPE_FLYING && types[1] == TYPE_FLYING) + return B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY; + else + return types[typeIndex] == TYPE_FLYING ? TYPE_MYSTERY : types[typeIndex]; + } + } + + return types[typeIndex]; +} + diff --git a/src/battle_z_move.c b/src/battle_z_move.c index d760148b51..7069d17386 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -52,7 +52,6 @@ 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 u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove); static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler); // Const Data @@ -71,12 +70,11 @@ static const struct SignatureZMove sSignatureZMoves[] = {SPECIES_KOMMO_O, ITEM_KOMMONIUM_Z, MOVE_CLANGING_SCALES, MOVE_CLANGOROUS_SOULBLAZE}, {SPECIES_LUNALA, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, {SPECIES_NECROZMA_DAWN_WINGS, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, - {SPECIES_LYCANROC, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + {SPECIES_LYCANROC_MIDDAY, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, {SPECIES_LYCANROC_MIDNIGHT, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, - {SPECIES_LYCANROC_DUSK, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, {SPECIES_MARSHADOW, ITEM_MARSHADIUM_Z, MOVE_SPECTRAL_THIEF, MOVE_SOUL_STEALING_7_STAR_STRIKE}, - {SPECIES_MIMIKYU, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_MIMIKYU_DISGUISED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, {SPECIES_MIMIKYU_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, {SPECIES_PIKACHU_ORIGINAL_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, {SPECIES_PIKACHU_HOENN_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, @@ -158,15 +156,10 @@ void QueueZMove(u8 battler, u16 baseMove) bool32 IsViableZMove(u8 battler, u16 move) { - struct Pokemon *mon; - u8 battlerPosition = GetBattlerPosition(battler); - u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); u32 item; u16 holdEffect; - u16 species; int moveSlotIndex; - species = gBattleMons[battler].species; item = gBattleMons[battler].item; for (moveSlotIndex = 0; moveSlotIndex < MAX_MON_MOVES; moveSlotIndex++) @@ -236,6 +229,8 @@ bool32 TryChangeZIndicator(u8 battler, u8 moveIndex) HideZMoveTriggerSprite(); // 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 + + return viableZMove; } #define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29) @@ -267,7 +262,7 @@ void CreateZMoveTriggerSprite(u8 battler, bool8 viable) else { x = gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE; - y = gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF, 0; + y = gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF; } if (gBattleStruct->zmove.triggerSpriteId == 0xFF) @@ -350,7 +345,6 @@ void HideZMoveTriggerSprite(void) static void ShowZMoveTriggerSprite(u8 battler) { - struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; gBattleStruct->zmove.viable = TRUE; CreateZMoveTriggerSprite(battler, TRUE); } @@ -535,13 +529,11 @@ static void ZMoveSelectionDisplayPower(u16 move, u16 zMove) static void ZMoveSelectionDisplayPpNumber(u32 battler) { u8 *txtPtr; - struct ChooseMoveStruct *moveInfo; if (gBattleResources->bufferA[battler][2] == TRUE) // Check if we didn't want to display pp number return; SetPpNumbersPaletteInMoveSelection(battler); - moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); *(txtPtr)++ = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); @@ -551,7 +543,6 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { u8 *txtPtr; - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); u8 zMoveType; GET_MOVE_TYPE(zMove, zMoveType); diff --git a/src/berry.c b/src/berry.c index e6ee039f40..88a5d0f9f3 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1825,8 +1825,8 @@ bool8 PlayerHasBerries(void) // For all berry trees on screen, allow normal growth void SetBerryTreesSeen(void) { - s16 cam_left; - s16 cam_top; + u16 cam_left; + u16 cam_top; s16 left; s16 top; s16 right; @@ -1842,9 +1842,9 @@ void SetBerryTreesSeen(void) { if (gObjectEvents[i].active && gObjectEvents[i].movementType == MOVEMENT_TYPE_BERRY_TREE_GROWTH) { - cam_left = gObjectEvents[i].currentCoords.x; - cam_top = gObjectEvents[i].currentCoords.y; - if (left <= cam_left && cam_left <= right && top <= cam_top && cam_top <= bottom) + s16 x = gObjectEvents[i].currentCoords.x; + s16 y = gObjectEvents[i].currentCoords.y; + if (left <= x && x <= right && top <= y && y <= bottom) AllowBerryTreeGrowth(gObjectEvents[i].trainerRange_berryTreeId); } } diff --git a/src/berry_blender.c b/src/berry_blender.c index bdfb500d8b..6f827867f2 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -174,8 +174,8 @@ struct BerryBlender u16 progressBarValue; u16 maxProgressBarValue; u16 centerScale; - u16 bg_X; - u16 bg_Y; + s16 bg_X; + s16 bg_Y; u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1]; u8 perfectOpponents; // for debugging, NPCs will always hit Best u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES]; diff --git a/src/clock.c b/src/clock.c index 125d403bb3..825ccc4448 100644 --- a/src/clock.c +++ b/src/clock.c @@ -11,11 +11,13 @@ #include "main.h" #include "overworld.h" #include "wallclock.h" +#include "constants/form_change_types.h" static void UpdatePerDay(struct Time *localTime); static void UpdatePerMinute(struct Time *localTime); +static void FormChangeTimeUpdate(); -static void InitTimeBasedEvents(void) +void InitTimeBasedEvents(void) { FlagSet(FLAG_SYS_CLOCK_SET); RtcCalcLocalTime(); @@ -69,6 +71,23 @@ static void UpdatePerMinute(struct Time *localTime) { BerryTreeTimeUpdate(minutes); gSaveBlock2Ptr->lastBerryTreeUpdate = *localTime; + FormChangeTimeUpdate(); + } + } +} + +static void FormChangeTimeUpdate() +{ + s32 i; + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_TIME_OF_DAY, 0); + + if (targetSpecies != SPECIES_NONE) + { + SetMonData(mon, MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(mon); } } } diff --git a/src/contest.c b/src/contest.c index 3bfa964560..8f452b0921 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1409,8 +1409,8 @@ static void Task_RaiseCurtainAtStart(u8 taskId) break; case 3: { - u16 bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT); - u16 bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT); + u32 bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT); + u32 bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT); ((struct BgCnt *)&bg0Cnt)->priority = 0; ((struct BgCnt *)&bg2Cnt)->priority = 0; SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt); @@ -2630,8 +2630,8 @@ static void Task_UpdateContestantBoxOrder(u8 taskId) static void Task_TryStartNextRoundOfAppeals(u8 taskId) { - vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT); - vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT); + vu32 sp0 = GetGpuReg(REG_OFFSET_BG0CNT); + vu32 sp2 = GetGpuReg(REG_OFFSET_BG2CNT); ((vBgCnt *)&sp0)->priority = 0; ((vBgCnt *)&sp2)->priority = 0; SetGpuReg(REG_OFFSET_BG0CNT, sp0); @@ -5055,7 +5055,7 @@ bool8 IsContestantAllowedToCombo(u8 contestant) static void SetBgForCurtainDrop(void) { s32 i; - u16 bg0Cnt, bg1Cnt, bg2Cnt; + u32 bg0Cnt, bg1Cnt, bg2Cnt; bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); ((vBgCnt *)&bg1Cnt)->priority = 0; @@ -5093,7 +5093,7 @@ static void SetBgForCurtainDrop(void) static void UpdateContestantBoxOrder(void) { s32 i; - u16 bg1Cnt; + u32 bg1Cnt; RequestDma3Fill(0,(void *)(BG_CHAR_ADDR(2)), 0x2000, 1); CpuFill32(0, gContestResources->contestBgTilemaps[1], 0x1000); @@ -5296,7 +5296,6 @@ static u16 SanitizeSpecies(u16 species) static void SetMoveSpecificAnimData(u8 contestant) { - s32 i; u16 move = SanitizeMove(eContestantStatus[contestant].currMove); u16 species = SanitizeSpecies(gContestMons[contestant].species); u8 targetContestant; diff --git a/src/data/bard_music/pokemon.h b/src/data/bard_music/pokemon.h index 7d378da6f1..a2ca35aa7d 100644 --- a/src/data/bard_music/pokemon.h +++ b/src/data/bard_music/pokemon.h @@ -2884,7 +2884,7 @@ const struct BardSound gBardSounds_Pokemon[NUM_SPECIES][6] = { NULL_BARD_SOUND, NULL_BARD_SOUND, }, - [SPECIES_CASTFORM] = { + [SPECIES_CASTFORM_NORMAL] = { { .songLengthId = 0 }, { .songLengthId = 26 }, { .songLengthId = 51 }, @@ -3084,7 +3084,7 @@ const struct BardSound gBardSounds_Pokemon[NUM_SPECIES][6] = { NULL_BARD_SOUND, NULL_BARD_SOUND, }, - [SPECIES_DEOXYS] = { + [SPECIES_DEOXYS_NORMAL] = { { .songLengthId = 12 }, { .songLengthId = 27 }, { .songLengthId = 17 }, diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 885038725c..880b98efce 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1448,6 +1448,13 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_POLTERGEIST}, {gBattleAnimSpriteGfx_Teapot, 0x1800, ANIM_TAG_TEAPOT}, {gBattleAnimSpriteGfx_WoodHammerHammer, 0x800, ANIM_TAG_WOOD_HAMMER_HAMMER}, + {gBattleAnimSpriteGfx_Snowflakes, 0x0700, ANIM_TAG_SNOWFLAKES}, + {gBattleAnimSpriteGfx_SyrupBlob, 0x400, ANIM_TAG_SYRUP_BLOB_RED}, + {gBattleAnimSpriteGfx_SyrupShell, 0x2000, ANIM_TAG_SYRUP_SHELL_RED}, + {gBattleAnimSpriteGfx_SyrupBlob, 0x400, ANIM_TAG_SYRUP_BLOB_YELLOW}, + {gBattleAnimSpriteGfx_SyrupShell, 0x2000, ANIM_TAG_SYRUP_SHELL_YELLOW}, + {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_RED}, + {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_YELLOW}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1896,6 +1903,13 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_Poltergeist, ANIM_TAG_POLTERGEIST}, {gBattleAnimSpritePal_Teapot, ANIM_TAG_TEAPOT}, {gBattleAnimSpritePal_WoodHammerHammer, ANIM_TAG_WOOD_HAMMER_HAMMER}, + {gBattleAnimSpritePal_RainDrops, ANIM_TAG_SNOWFLAKES}, + {gBattleAnimSpritePal_SyrupRed, ANIM_TAG_SYRUP_BLOB_RED}, + {gBattleAnimSpritePal_SyrupRed, ANIM_TAG_SYRUP_SHELL_RED}, + {gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_BLOB_YELLOW}, + {gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SHELL_YELLOW}, + {gBattleAnimSpritePal_SyrupRed, ANIM_TAG_SYRUP_SPLAT_RED}, + {gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SPLAT_YELLOW}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h index df0a7d9b27..1147ab9080 100644 --- a/src/data/battle_frontier/battle_frontier_mons.h +++ b/src/data/battle_frontier/battle_frontier_mons.h @@ -1429,7 +1429,7 @@ const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .nature = NATURE_ADAMANT }, [FRONTIER_MON_CASTFORM_1] = { - .species = SPECIES_CASTFORM, + .species = SPECIES_CASTFORM_NORMAL, .moves = {MOVE_EMBER, MOVE_WATER_PULSE, MOVE_SHOCK_WAVE, MOVE_ICY_WIND}, .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, @@ -2164,7 +2164,7 @@ const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] = .nature = NATURE_JOLLY }, [FRONTIER_MON_CASTFORM_2] = { - .species = SPECIES_CASTFORM, + .species = SPECIES_CASTFORM_NORMAL, .moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_WATER_PULSE}, .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, diff --git a/src/data/battle_frontier/battle_pyramid_wild_requirements.h b/src/data/battle_frontier/battle_pyramid_wild_requirements.h new file mode 100644 index 0000000000..1b9e359f1f --- /dev/null +++ b/src/data/battle_frontier/battle_pyramid_wild_requirements.h @@ -0,0 +1,237 @@ +#if BATTLE_PYRAMID_RANDOM_ENCOUNTERS == TRUE + +#include "constants/abilities.h" +#include "constants/battle_move_effects.h" + +struct BattlePyramidRequirement { + const u16 *moves; /* use moves instead of effects so we don't need to find moves with said effect in our loop */ + u16 abilities[10]; + u8 nAbilities; + u8 type; + u8 nMoves; + const u16 *evoItems; + u8 nEvoItems; +}; + +// EFFECT_PARALYZE, EFFECT_PARALYZE_HIT (30% or more) +static const u16 sParalyzingMoves[] = { + //MOVE_THUNDER_PUNCH, + MOVE_BODY_SLAM, + MOVE_STUN_SPORE, + //MOVE_THUNDER_SHOCK, + //MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_LICK, + MOVE_GLARE, + MOVE_ZAP_CANNON, + MOVE_SPARK, + MOVE_DRAGON_BREATH, + MOVE_FORCE_PALM, + MOVE_DISCHARGE, + //MOVE_BOLT_STRIKE, + MOVE_NUZZLE, + MOVE_SPLISHY_SPLASH, + MOVE_BUZZY_BUZZ, + MOVE_COMBAT_TORQUE, +}; + +// EFFECT_POISON_HIT (30% or more), EFFECT_POISON, EFFECT_POISON_FANG, EFFECT_TOXIC, EFFECT_TOXIC_THREAD +static const u16 sPoisoningMoves[] = { + MOVE_POISON_STING, + //MOVE_TWINEEDLE, + MOVE_SMOG, + MOVE_SLUDGE, + MOVE_SLUDGE_BOMB, + //MOVE_POISON_TAIL, + MOVE_POISON_JAB, + //MOVE_CROSS_POISON, + MOVE_GUNK_SHOT, + //MOVE_SLUDGE_WAVE, + MOVE_NOXIOUS_TORQUE, + //MOVE_ACID, + MOVE_POISON_POWDER, + MOVE_TOXIC, + MOVE_POISON_GAS, + MOVE_POISON_FANG, + MOVE_BANEFUL_BUNKER, + MOVE_TOXIC_THREAD, +}; + +// EFFECT_BURN_HIT, EFFECT_WILL_O_WISP +static const u16 sBurningMoves[] = { + MOVE_WILL_O_WISP, + //MOVE_EMBER, + //MOVE_FLAMETHROWER, + //MOVE_FIRE_BLAST, + //MOVE_HEAT_WAVE, + //MOVE_BLAZE_KICK, + MOVE_LAVA_PLUME, + MOVE_SCALD, + MOVE_INFERNO, + MOVE_SEARING_SHOT, + MOVE_BLUE_FLARE, + MOVE_STEAM_ERUPTION, + MOVE_SIZZLY_SLIDE, + //MOVE_PYRO_BALL, + MOVE_BURNING_JEALOUSY, + MOVE_SCORCHING_SANDS, + MOVE_SANDSEAR_STORM, + MOVE_BLAZING_TORQUE, +}; + +// EFFECT_FREEZE, EFFECT_FREEZE_HIT +static const u16 sFrostbiteMoves[] = { + MOVE_ICE_PUNCH, + MOVE_ICE_BEAM, + MOVE_BLIZZARD, + MOVE_POWDER_SNOW, + MOVE_FREEZING_GLARE, +}; + +// EFFECT_GRUDGE, EFFECT_SPITE, EFFECT_EERIE_SPELL +static const u16 sPPReducingMoves[] = { + MOVE_GRUDGE, + MOVE_SPITE, + MOVE_EERIE_SPELL, +}; + +// EFFECT_EXPLOSION +static const u16 sExplosionMoves[] = { + MOVE_SELF_DESTRUCT, + MOVE_EXPLOSION, + MOVE_MISTY_EXPLOSION, +}; + +// EFFECT_RAIN_DANCE, EFFECT_SANDSTORM, EFFECT_HAIL, EFFECT_SUNNY_DAY, +static const u16 sWeatherChangingMoves[] = { + MOVE_RAIN_DANCE, + MOVE_SANDSTORM, + MOVE_HAIL, + MOVE_SUNNY_DAY, +}; + +// EFFECT_RECHARGE, EFFECT_RECOIL_33 +static const u16 sPowerfulNormalMoves[] = { + MOVE_HYPER_BEAM, + MOVE_GIGA_IMPACT, + MOVE_THRASH, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, +}; + +static const u16 sEvoItems[] = {ITEM_FIRE_STONE, ITEM_WATER_STONE, ITEM_THUNDER_STONE}; + +static const struct BattlePyramidRequirement sBattlePyramidRequirementsByRound[] = { + [0] = /* pokemon with moves that paraylze */ + { + .type = TYPE_MYSTERY, // no type limitation + .moves = sParalyzingMoves, + .nMoves = NELEMS(sParalyzingMoves), + .abilities = { ABILITY_STATIC }, + .nAbilities = 1, + }, + [1] = /* pokemon with moves that poison */ + { + .type = TYPE_MYSTERY, + .moves = sPoisoningMoves, + .nMoves = NELEMS(sPoisoningMoves), + .abilities = { ABILITY_POISON_POINT }, + }, + [2] = /* Pokemon with moves that burn */ + { + .type = TYPE_MYSTERY, + .moves = sBurningMoves, + .nMoves = NELEMS(sBurningMoves), + .abilities = { ABILITY_FLAME_BODY }, + .nAbilities = 1, + }, + [3] = /* pokemon with moves that waste PP */ + { + .type = TYPE_MYSTERY, + .moves = sPPReducingMoves, + .nMoves = NELEMS(sPPReducingMoves), + .abilities = { ABILITY_PRESSURE }, + .nAbilities = 1, + }, + [4] = /* pokemon with Levitate */ + { + .type = TYPE_MYSTERY, + .abilities = { ABILITY_LEVITATE }, + .nAbilities = 1, + }, + [5] = /* pokemon with trapping abilities */ + { + .type = TYPE_MYSTERY, + .abilities = { ABILITY_SHADOW_TAG, ABILITY_ARENA_TRAP }, // TODO magnet pull? + .nAbilities = 2, + }, + [6] = /* ice types */ + { + .type = TYPE_ICE, + }, + + [7] = /* pokemon with explosion effects */ + { + .type = TYPE_MYSTERY, + .moves = sExplosionMoves, + .nMoves = NELEMS(sExplosionMoves), + }, + [8] = /* psychic types */ + { + .type = TYPE_PSYCHIC, + }, + [9] = /* rock types */ + { + .type = TYPE_ROCK, + }, + [10] = /* fighting types */ + { + .type = TYPE_FIGHTING, + }, + [11] = /* pokemon with weather-altering effects */ + { + .type = TYPE_MYSTERY, + .moves = sWeatherChangingMoves, + .nMoves = NELEMS(sWeatherChangingMoves), + .abilities = { ABILITY_SAND_SPIT, ABILITY_DRIZZLE, ABILITY_SNOW_WARNING, ABILITY_DROUGHT, ABILITY_SAND_STREAM }, + .nAbilities = 5, + }, + [12] = /* bug types */ + { + .type = TYPE_BUG, + }, + [13] = /* dark types */ + { + .type = TYPE_DARK, + }, + [14] = /* water types */ + { + .type = TYPE_WATER, + }, + [15] = /* ghost types */ + { + .type = TYPE_GHOST, + }, + [16] = /* steel types */ + { + .type = TYPE_STEEL, + }, + [17] = /* flying/dragon types */ + { + .type = TYPE_DRAGON, + }, + [18] = /* evolve via water/thunder/fire stone */ + { + .type = TYPE_MYSTERY, + .evoItems = sEvoItems, + .nEvoItems = 3, + }, + [19] = /* normal with powerful moves */ + { + .type = TYPE_NORMAL, + .moves = sPowerfulNormalMoves, + .nMoves = NELEMS(sPowerfulNormalMoves), + }, +}; + +#endif diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 80ac9f9458..cc33db08db 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -1,4 +1,4 @@ -const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = +const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = { [MOVE_NONE] = { @@ -11,11 +11,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .mimicBanned = TRUE, .metronomeBanned = TRUE, - .copycatBanned = TRUE, - .sleepTalkBanned = TRUE, - .instructBanned = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_POUND] = @@ -224,8 +221,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .highCritRatio = TRUE, + .twoTurnMove = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .windMove = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_SWORDS_DANCE] = @@ -314,8 +313,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .windMove = TRUE, .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, + .ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_FLY] = @@ -334,10 +335,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .gravityBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_BIND] = @@ -655,6 +658,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, + .instructBanned = TRUE, }, [MOVE_DOUBLE_EDGE] = @@ -784,6 +788,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_DEF_UP_1, .magicCoatAffected = TRUE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_ROAR] = @@ -803,9 +808,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, .soundMove = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SING] = @@ -820,6 +827,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -836,6 +844,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -872,6 +881,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, }, @@ -940,6 +950,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1105,7 +1117,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_3, - .instructBanned = TRUE, }, [MOVE_PECK] = @@ -1185,11 +1196,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, - .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 .meFirstBanned = TRUE, .metronomeBanned = TRUE, // B_UPDATED_MOVE_FLAGS >= GEN_2 .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SEISMIC_TOSS] = @@ -1239,6 +1250,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_MEGA_DRAIN] = @@ -1258,6 +1270,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_LEECH_SEED] = @@ -1295,6 +1308,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1326,6 +1341,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, }, @@ -1400,6 +1416,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .danceMove = TRUE, + .instructBanned = TRUE, }, [MOVE_STRING_SHOT] = @@ -1590,9 +1607,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TOXIC] = @@ -1671,6 +1690,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1686,6 +1707,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1731,6 +1754,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_NIGHT_SHADE] = @@ -1759,11 +1784,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + .ignoresSubstitute = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, // B_UPDATED_MOVE_FLAGS >= GEN_2 .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SCREECH] = @@ -1778,6 +1806,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -1794,6 +1823,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1815,6 +1846,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .snatchAffected = TRUE, }, @@ -1830,6 +1864,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1849,6 +1885,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1894,6 +1932,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1909,6 +1949,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1928,6 +1970,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1943,6 +1987,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1958,6 +2004,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_REFLECT] = @@ -1972,6 +2021,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -1987,8 +2038,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, - .sleepTalkBanned = TRUE, }, [MOVE_BIDE] = @@ -2011,6 +2063,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .makesContact = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_METRONOME] = @@ -2025,10 +2078,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_MIRROR_MOVE] = @@ -2043,10 +2101,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_2, + .mimicBanned = TRUE, .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, .copycatBanned = TRUE, .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SELF_DESTRUCT] = @@ -2061,6 +2122,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .parentalBondBanned = TRUE, }, [MOVE_EGG_BOMB] = @@ -2238,6 +2300,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, @@ -2285,6 +2348,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -2319,6 +2384,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = TRUE, }, @@ -2379,6 +2447,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_POISON_GAS] = @@ -2438,6 +2507,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_LOVELY_KISS] = @@ -2468,6 +2538,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FLINCH, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .sheerForceBoost = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, @@ -2486,10 +2557,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, .copycatBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_BUBBLE] = @@ -2593,6 +2667,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_3, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .gravityBanned = TRUE, }, @@ -2613,6 +2689,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_CRABHAMMER] = @@ -2651,6 +2729,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .parentalBondBanned = TRUE, }, [MOVE_FURY_SWIPES] = @@ -2700,6 +2779,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, }, [MOVE_ROCK_SLIDE] = @@ -2747,6 +2829,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_CONVERSION] = @@ -2762,6 +2846,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TRI_ATTACK] = @@ -2825,6 +2911,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_STRUGGLE] = @@ -2849,8 +2937,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, + .sleepTalkBanned = TRUE, .copycatBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SKETCH] = @@ -2866,11 +2957,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TRIPLE_KICK] = @@ -2911,6 +3006,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .meFirstBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SPIDER_WEB] = @@ -2999,6 +3095,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .sheerForceBoost = TRUE, .soundMove = TRUE, .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_5, @@ -3021,6 +3118,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_CURSE, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_FLAIL] = @@ -3051,6 +3150,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_AEROBLAST] = @@ -3120,6 +3221,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresSubstitute = TRUE, }, [MOVE_POWDER_SNOW] = @@ -3160,6 +3262,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .protectionMove = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_MACH_PUNCH] = @@ -3246,6 +3349,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SLUDGE_BOMB] = @@ -3307,7 +3412,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .forcePressure = TRUE, }, [MOVE_ZAP_CANNON] = @@ -3347,6 +3455,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_BOOST_CRITS, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresSubstitute = TRUE, }, [MOVE_DESTINY_BOND] = @@ -3361,8 +3470,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_FOLLOW_ME, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_PERISH_SONG] = @@ -3378,6 +3491,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .ignoresProtect = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, + .mirrorMoveBanned = TRUE, .soundMove = TRUE, }, @@ -3413,9 +3528,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_EVSN_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .protectionMove = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_BONE_RUSH] = @@ -3490,6 +3608,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .windMove = TRUE, }, @@ -3514,6 +3634,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS < GEN_5, // && B_UPDATED_MOVE_FLAGS > GEN_2 + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_ENDURE] = @@ -3532,9 +3653,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .protectionMove = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_CHARM] = @@ -3570,6 +3694,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .instructBanned = TRUE, + .parentalBondBanned = TRUE, }, [MOVE_FALSE_SWIPE] = @@ -3622,7 +3747,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SPARK] = @@ -3708,6 +3836,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .magicCoatAffected = TRUE, + .ignoresSubstitute = TRUE, }, [MOVE_SLEEP_TALK] = @@ -3722,10 +3851,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_BOOST_CRITS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .mimicBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_HEAL_BELL] = @@ -3736,11 +3870,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .soundMove = B_UPDATED_MOVE_FLAGS != GEN_5, }, @@ -3802,6 +3939,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_PAIN_SPLIT] = @@ -3909,6 +4048,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ENCORE] = @@ -3924,6 +4065,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .encoreBanned = TRUE, + .ignoresSubstitute = TRUE, }, [MOVE_PURSUIT] = @@ -4039,7 +4182,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SYNTHESIS] = @@ -4054,7 +4200,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_MOONLIGHT] = @@ -4073,16 +4222,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HIDDEN_POWER] = { - #if B_HIDDEN_POWER_DMG >= GEN_6 - .power = 60, - #else - .power = 1, - #endif + .power = B_HIDDEN_POWER_DMG >= GEN_6 ? 60 : 1, .effect = EFFECT_HIDDEN_POWER, .type = TYPE_NORMAL, .accuracy = 100, @@ -4139,6 +4287,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SUNNY_DAY] = @@ -4153,6 +4303,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_CRUNCH] = @@ -4191,7 +4343,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, .meFirstBanned = TRUE, .metronomeBanned = TRUE, - .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_PSYCH_UP] = @@ -4207,6 +4359,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = B_UPDATED_MOVE_FLAGS < GEN_5, }, @@ -4386,6 +4540,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, @@ -4408,6 +4563,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SPIT_UP] = @@ -4441,7 +4598,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEAT_WAVE] = @@ -4476,6 +4636,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TORMENT] = @@ -4572,9 +4734,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .mirrorMoveBanned = TRUE, .punchingMove = TRUE, .meFirstBanned = TRUE, + .sleepTalkBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SMELLING_SALTS] = @@ -4584,7 +4748,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 60, #endif - .effect = EFFECT_SMELLINGSALT, + .effect = EFFECT_SMELLING_SALTS, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, @@ -4613,8 +4777,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_NATURE_POWER] = @@ -4633,6 +4800,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, + .mimicBanned = TRUE, }, [MOVE_CHARGE] = @@ -4648,6 +4818,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TAUNT] = @@ -4662,6 +4834,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, + .ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, }, @@ -4681,8 +4854,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 5, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TRICK] = @@ -4699,6 +4876,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_SPD_UP_2, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_ROLE_PLAY] = @@ -4714,6 +4892,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_WISH] = @@ -4728,7 +4908,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .healBlockBanned = TRUE, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ASSIST] = @@ -4743,10 +4926,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, + .mimicBanned = TRUE, }, [MOVE_INGRAIN] = @@ -4762,6 +4950,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SUPERPOWER] = @@ -4791,6 +4981,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_RECYCLE] = @@ -4806,6 +4998,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_2, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_REVENGE] = @@ -4885,6 +5079,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, + .parentalBondBanned = TRUE, }, [MOVE_ERUPTION] = @@ -4913,6 +5108,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = TRUE, }, [MOVE_IMPRISON] = @@ -4928,6 +5124,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, + .forcePressure = TRUE, }, [MOVE_REFRESH] = @@ -4943,6 +5143,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_GRUDGE] = @@ -4957,6 +5159,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_FOLLOW_ME, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SNATCH] = @@ -4971,9 +5176,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_2, + .ignoresSubstitute = TRUE, + .forcePressure = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, - .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SECRET_POWER] = @@ -5007,9 +5214,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_ARM_THRUST] = @@ -5040,6 +5249,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_EVSN_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TAIL_GLOW] = @@ -5059,6 +5270,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_LUSTER_PURGE] = @@ -5153,6 +5366,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ICE_BALL] = @@ -5170,6 +5385,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .makesContact = TRUE, .ballisticMove = TRUE, .instructBanned = TRUE, + .parentalBondBanned = TRUE, }, [MOVE_NEEDLE_ARM] = @@ -5205,7 +5421,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HYPER_VOICE] = @@ -5221,6 +5440,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_POISON_FANG] = @@ -5272,7 +5492,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .instructBanned = TRUE, }, [MOVE_HYDRO_CANNON] = @@ -5287,7 +5506,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .instructBanned = TRUE, }, [MOVE_METEOR_MASH] = @@ -5352,11 +5570,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_FAKE_TEARS] = @@ -5432,6 +5652,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, + .ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, }, @@ -5469,6 +5690,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .windMove = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_METAL_SOUND] = @@ -5483,6 +5705,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -5499,6 +5722,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -5531,6 +5755,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_WATER_SPOUT] = @@ -5733,6 +5959,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_BLOCK] = @@ -5768,6 +5996,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .soundMove = B_UPDATED_MOVE_FLAGS >= GEN_8, }, @@ -5813,6 +6043,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_BOUNCE] = @@ -5828,11 +6060,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .sheerForceBoost = TRUE, .gravityBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_MUD_SHOT] = @@ -5896,6 +6130,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .meFirstBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_VOLT_TACKLE] = @@ -5945,6 +6180,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_CALM_MIND] = @@ -5960,6 +6197,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_LEAF_BLADE] = @@ -5997,6 +6236,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_RESET_STATS, .danceMove = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ROCK_BLAST] = @@ -6099,7 +6340,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_GRAVITY] = @@ -6114,6 +6358,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_MIRACLE_EYE] = @@ -6128,6 +6374,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, }, @@ -6195,7 +6442,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .healBlockBanned = TRUE, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_BRINE] = @@ -6246,6 +6496,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_6, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_PLUCK] = @@ -6281,6 +6532,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_BOOST_CRITS, .snatchAffected = TRUE, .windMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ACUPRESSURE] = @@ -6296,6 +6549,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_BOOST_CRITS, .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .snatchAffected = B_UPDATED_MOVE_FLAGS < GEN_5, }, @@ -6405,6 +6659,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .parentalBondBanned = TRUE, }, [MOVE_PSYCHO_SHIFT] = @@ -6482,6 +6737,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_GASTRO_ACID] = @@ -6512,6 +6769,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_EVSN_UP_1, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ME_FIRST] = @@ -6526,10 +6785,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_2, + .ignoresSubstitute = TRUE, .metronomeBanned = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, + .mimicBanned = TRUE, }, [MOVE_COPYCAT] = @@ -6544,10 +6809,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, + .mimicBanned = TRUE, }, [MOVE_POWER_SWAP] = @@ -6562,6 +6832,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = TRUE, }, [MOVE_GUARD_SWAP] = @@ -6576,6 +6847,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = TRUE, }, [MOVE_PUNISHMENT] = @@ -6658,7 +6930,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .forcePressure = TRUE, }, [MOVE_HEART_SWAP] = @@ -6673,6 +6948,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_BOOST_CRITS, + .ignoresSubstitute = TRUE, }, [MOVE_AQUA_RING] = @@ -6688,6 +6964,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_MAGNET_RISE] = @@ -6703,6 +6981,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_EVSN_UP_1, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .gravityBanned = TRUE, }, @@ -6773,6 +7053,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_POISON_JAB] = @@ -6904,6 +7186,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_DRAGON_PULSE] = @@ -6979,6 +7262,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .punchingMove = TRUE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_VACUUM_WAVE] = @@ -7075,6 +7359,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_SPD_UP_2, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_GIGA_IMPACT] = @@ -7090,7 +7375,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, - .instructBanned = TRUE, }, [MOVE_NASTY_PLOT] = @@ -7106,6 +7390,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_BULLET_PUNCH] = @@ -7348,6 +7634,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + //.ignoresSubstitute = TRUE, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, }, @@ -7363,6 +7650,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -7, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ACC_UP_1, + .ignoresProtect = TRUE, }, [MOVE_DRACO_METEOR] = @@ -7459,7 +7747,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .ballisticMove = TRUE, - .instructBanned = TRUE, }, [MOVE_CROSS_POISON] = @@ -7527,6 +7814,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .ballisticMove = TRUE, }, [MOVE_STONE_EDGE] = @@ -7572,6 +7860,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .forcePressure = TRUE, }, [MOVE_GRASS_KNOT] = @@ -7610,14 +7901,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_6, - .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_JUDGMENT] = @@ -7723,6 +8015,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEAL_ORDER] = @@ -7737,7 +8031,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEAD_SMASH] = @@ -7783,7 +8080,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .instructBanned = TRUE, }, [MOVE_SPACIAL_REND] = @@ -7814,6 +8110,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = B_UPDATED_MOVE_FLAGS >= GEN_5, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .danceMove = TRUE, }, @@ -7901,6 +8200,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .windMove = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_SHADOW_FORCE] = @@ -7917,10 +8217,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .argument = MOVE_EFFECT_FEINT, + .twoTurnMove = TRUE, .ignoresProtect = TRUE, .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS == GEN_6, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_HONE_CLAWS] = @@ -7936,6 +8238,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_WIDE_GUARD] = @@ -7952,6 +8256,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .argument = TRUE, // Protects the whole side. .zMoveEffect = Z_EFFECT_DEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .protectionMove = TRUE, .metronomeBanned = TRUE, }, @@ -7968,6 +8274,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .mirrorMoveBanned = TRUE, }, [MOVE_POWER_SPLIT] = @@ -7982,6 +8289,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .mirrorMoveBanned = TRUE, }, [MOVE_WONDER_ROOM] = @@ -8000,6 +8308,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, }, [MOVE_PSYSHOCK] = @@ -8043,6 +8352,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_RAGE_POWDER] = @@ -8062,8 +8373,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .powderMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TELEKINESIS] = @@ -8098,6 +8412,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, }, [MOVE_SMACK_DOWN] = @@ -8175,7 +8490,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .danceMove = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEAVY_SLAM] = @@ -8191,7 +8509,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, - .danceMove = TRUE, .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS >= GEN_7, }, @@ -8273,6 +8590,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_LOW_SWEEP] = @@ -8368,6 +8687,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -8383,6 +8705,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -8398,6 +8721,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -8459,6 +8783,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .argument = TRUE, // Protects the whole side. .zMoveEffect = Z_EFFECT_DEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .protectionMove = TRUE, .metronomeBanned = TRUE, }, @@ -8479,6 +8805,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_2, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SCALD] = @@ -8510,6 +8838,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEAL_PULSE] = @@ -8525,6 +8855,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .magicCoatAffected = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .pulseMove = TRUE, }, @@ -8558,10 +8890,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .gravityBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SHIFT_GEAR] = @@ -8577,6 +8911,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_CIRCLE_THROW] = @@ -8593,6 +8929,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_INCINERATE] = @@ -8625,7 +8962,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, - .magicCoatAffected = TRUE, .metronomeBanned = TRUE, }, @@ -8656,7 +8992,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, - .snatchAffected = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_RETALIATE] = @@ -8687,6 +9024,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .mirrorMoveBanned = TRUE, + .parentalBondBanned = TRUE, }, [MOVE_BESTOW] = @@ -8702,8 +9040,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_2, .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, + .ignoresSubstitute = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_INFERNO] = @@ -8855,6 +9195,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_WORK_UP] = @@ -8870,6 +9211,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE }, [MOVE_ELECTROWEB] = @@ -8963,6 +9306,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_SACRED_SWORD] = @@ -9032,6 +9376,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + //.windMove = TRUE, }, [MOVE_STEAMROLLER] = @@ -9064,6 +9409,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_NIGHT_DAZE] = @@ -9210,8 +9557,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .argument = STATUS1_SLEEP, .sheerForceBoost = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, .metronomeBanned = TRUE, }, @@ -9228,6 +9575,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .slicingMove = TRUE, .metronomeBanned = TRUE, }, @@ -9306,6 +9654,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .sheerForceBoost = TRUE, .metronomeBanned = TRUE, .sleepTalkBanned = TRUE, @@ -9325,6 +9674,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .argument = MOVE_EFFECT_BURN, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .sheerForceBoost = TRUE, .metronomeBanned = TRUE, .sleepTalkBanned = TRUE, @@ -9344,6 +9694,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, .metronomeBanned = TRUE, }, @@ -9444,8 +9795,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .argument = TRUE, // Protects the whole side. .zMoveEffect = Z_EFFECT_DEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_BELCH] = @@ -9463,9 +9817,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .mirrorMoveBanned = TRUE, .meFirstBanned = TRUE, .metronomeBanned = TRUE, + .mimicBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_ROTOTILLER] = @@ -9481,6 +9837,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_STICKY_WEB] = @@ -9495,6 +9852,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .magicCoatAffected = TRUE, }, @@ -9530,11 +9889,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FEINT, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .ignoresProtect = TRUE, .makesContact = TRUE, .minimizeDoubleDamage = B_UPDATED_MOVE_FLAGS == GEN_6, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TRICK_OR_TREAT] = @@ -9550,6 +9911,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .argument = TYPE_GHOST, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .magicCoatAffected = TRUE, }, [MOVE_NOBLE_ROAR] = @@ -9564,6 +9926,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .magicCoatAffected = TRUE, .soundMove = TRUE, }, @@ -9580,6 +9943,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_PARABOLIC_CHARGE] = @@ -9598,6 +9963,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_FORESTS_CURSE] = @@ -9613,6 +9979,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .argument = TYPE_GRASS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .magicCoatAffected = TRUE, }, [MOVE_PETAL_BLIZZARD] = @@ -9657,6 +10024,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -9673,6 +10041,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, .magicCoatAffected = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -9709,6 +10078,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .argument = 75, // restores 75% HP instead of 50% HP .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_CRAFTY_SHIELD] = @@ -9724,6 +10094,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -9740,6 +10112,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_GRASSY_TERRAIN] = @@ -9754,6 +10127,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_MISTY_TERRAIN] = @@ -9768,6 +10143,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ELECTRIFY] = @@ -9842,6 +10219,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -9857,6 +10235,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, }, [MOVE_KINGS_SHIELD] = @@ -9872,9 +10252,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, .protectionMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_PLAY_NICE] = @@ -9890,6 +10273,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, .magicCoatAffected = TRUE, }, @@ -9907,6 +10291,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .ignoresProtect = TRUE, .magicCoatAffected = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -9960,6 +10345,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, .metronomeBanned = TRUE, }, @@ -10014,8 +10400,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .protectionMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_AROMATIC_MIST] = @@ -10031,6 +10420,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_EERIE_IMPULSE] = @@ -10075,6 +10466,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, + .powderMove = TRUE, .magicCoatAffected = TRUE, }, @@ -10090,6 +10482,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .twoTurnMove = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, }, @@ -10107,6 +10500,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HAPPY_HOUR] = @@ -10121,6 +10517,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_ELECTRIC_TERRAIN] = @@ -10135,6 +10533,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_DAZZLING_GLEAM] = @@ -10163,10 +10563,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .mimicBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_HOLD_HANDS] = @@ -10182,10 +10586,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, .metronomeBanned = TRUE, + .mimicBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_BABY_DOLL_EYES] = @@ -10279,6 +10686,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP .zMoveEffect = Z_EFFECT_NONE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_THOUSAND_ARROWS] = @@ -10421,7 +10829,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .healBlockBanned = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_FIRST_IMPRESSION] = @@ -10452,8 +10863,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .protectionMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_SPIRIT_SHACKLE] = @@ -10501,6 +10915,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .argument = STATUS1_BURN, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -10532,6 +10947,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .magicCoatAffected = TRUE, }, @@ -10563,6 +10980,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_DEF_UP_1, .magicCoatAffected = TRUE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_SOLAR_BLADE] = @@ -10577,6 +10995,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .makesContact = TRUE, .slicingMove = TRUE, .sleepTalkBanned = TRUE, @@ -10610,8 +11029,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, .magicCoatAffected = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_TOXIC_THREAD] = @@ -10642,6 +11063,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_GEAR_UP] = @@ -10657,6 +11080,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_THROAT_CHOP] = @@ -10718,6 +11144,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_LUNGE] = @@ -10794,6 +11222,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresSubstitute = TRUE, }, [MOVE_SMART_STRIKE] = @@ -10823,6 +11252,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .magicCoatAffected = TRUE, }, @@ -10883,6 +11314,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPATK_UP_1, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .instructBanned = TRUE, }, @@ -10906,6 +11339,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_CLANGING_SCALES] = @@ -10920,6 +11354,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, }, @@ -10966,6 +11401,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_SHELL_TRAP] = @@ -10986,6 +11423,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_FLEUR_CANNON] = @@ -11092,7 +11530,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .instructBanned = TRUE, }, [MOVE_SPECTRAL_THIEF] = @@ -11107,6 +11544,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .ignoresSubstitute = TRUE, .makesContact = TRUE, .metronomeBanned = TRUE, }, @@ -11187,7 +11625,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_8, }, @@ -11332,6 +11769,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, + .metronomeBanned = TRUE, }, [MOVE_BOUNCY_BUBBLE] = @@ -11354,6 +11792,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .healBlockBanned = B_HEAL_BLOCKING >= GEN_6, }, [MOVE_BUZZY_BUZZ] = @@ -11558,10 +11997,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .mimicBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .parentalBondBanned = TRUE, }, [MOVE_SNIPE_SHOT] = @@ -11608,6 +12052,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_NO_RETREAT] = @@ -11623,6 +12069,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TAR_SHOT] = @@ -11670,6 +12118,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .strikeCount = 2, + .parentalBondBanned = TRUE, }, [MOVE_TEATIME] = @@ -11680,11 +12129,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_OCTOLOCK] = @@ -11744,6 +12195,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, }, [MOVE_CLANGOROUS_SOUL] = @@ -11759,7 +12211,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .soundMove = TRUE, + .danceMove = TRUE, .metronomeBanned = TRUE, }, @@ -11781,7 +12236,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_DECORATE] = { - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_5, .effect = EFFECT_DECORATE, .power = 0, .type = TYPE_FAIRY, @@ -11792,6 +12246,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -11861,6 +12317,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .slicingMove = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .mimicBanned = TRUE, + .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_BEHEMOTH_BASH] = @@ -11878,6 +12336,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .makesContact = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, + .mimicBanned = TRUE, + .assistBanned = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_AURA_WHEEL] = @@ -11941,6 +12401,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .metronomeBanned = TRUE, }, @@ -12017,11 +12478,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .metronomeBanned = TRUE, }, @@ -12038,8 +12503,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .protectionMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .copycatBanned = TRUE, .instructBanned = TRUE, }, @@ -12088,7 +12554,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .metronomeBanned = TRUE, - .instructBanned = TRUE, }, [MOVE_STEEL_BEAM] = @@ -12163,6 +12628,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .twoTurnMove = TRUE, .instructBanned = TRUE, }, @@ -12198,7 +12664,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_GRASSY_GLIDE] = { #if B_UPDATED_MOVE_DATA >= GEN_9 - .power = 60, + .power = 55, #else .power = 70, #endif @@ -12330,6 +12796,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_FLIP_TURN] = @@ -12407,6 +12876,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .ignoresSubstitute = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, .metronomeBanned = TRUE, }, @@ -12579,6 +13052,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_DIRE_CLAW] = @@ -12629,8 +13103,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - }, +}, [MOVE_STONE_AXE] = { @@ -12668,6 +13145,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .windMove = TRUE, + .metronomeBanned = TRUE, }, [MOVE_MYSTICAL_POWER] = @@ -12701,7 +13179,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, - .makesContact = TRUE, .metronomeBanned = TRUE, }, @@ -12771,6 +13248,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .danceMove = TRUE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_HEADLONG_RUSH] = @@ -12865,6 +13344,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TRIPLE_ARROWS] = @@ -12997,6 +13478,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, + .healBlockBanned = TRUE, }, [MOVE_TAKE_HEART] = @@ -13012,6 +13496,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, }, [MOVE_TERA_BLAST] = @@ -13026,6 +13512,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .metronomeBanned = TRUE, // Only since it isn't implemented yet + .forcePressure = TRUE, }, [MOVE_SILK_TRAP] = @@ -13041,6 +13529,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, .protectionMove = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13072,6 +13562,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .metronomeBanned = TRUE, // Only since it isn't implemented yet }, [MOVE_LUMINA_CRASH] = @@ -13102,6 +13593,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13190,7 +13682,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_GLAIVE_RUSH] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_GLAIVE_RUSH + .effect = EFFECT_GLAIVE_RUSH, .power = 120, .type = TYPE_DRAGON, .accuracy = 100, @@ -13200,6 +13692,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .makesContact = TRUE, + .metronomeBanned = TRUE, // Only since it isn't implemented yet }, [MOVE_REVIVAL_BLESSING] = @@ -13214,6 +13708,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13262,6 +13758,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .makesContact = TRUE, }, [MOVE_DOODLE] = @@ -13272,10 +13769,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_FOES_AND_ALLY, // Supposedly unconfirmed? - .priority = 0, // TO VERIFY + .target = MOVE_TARGET_BOTH, + .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13292,6 +13791,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RECOVER_HP, .snatchAffected = TRUE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13339,6 +13840,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_AQUA_STEP] = @@ -13360,14 +13862,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_RAGING_BULL] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_RAGING_BULL + .effect = EFFECT_RAGING_BULL, .power = 90, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, - .priority = 0, // TO VERIFY + .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, @@ -13448,6 +13950,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_RESET_STATS, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13463,6 +13967,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13478,6 +13984,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_NONE, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13493,6 +14001,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_STATUS, .zMoveEffect = Z_EFFECT_SPD_UP_1, + .ignoresProtect = TRUE, + .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13556,6 +14066,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, + .ignoresProtect = TRUE, .metronomeBanned = TRUE, }, @@ -13621,6 +14132,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .slicingMove = TRUE, + .healBlockBanned = B_EXTRAPOLATED_MOVE_FLAGS, }, [MOVE_DOUBLE_SHOCK] = @@ -13635,12 +14147,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .makesContact = TRUE, .metronomeBanned = TRUE, }, [MOVE_GIGATON_HAMMER] = { - .effect = EFFECT_GIGATON_HAMMER, + .effect = EFFECT_HIT, .power = 160, .type = TYPE_STEEL, .accuracy = 100, @@ -13650,6 +14163,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .cantUseTwice = TRUE, }, [MOVE_COMEUPPANCE] = @@ -13664,6 +14178,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + .makesContact = TRUE, + .meFirstBanned = TRUE, .metronomeBanned = TRUE, }, @@ -13696,11 +14212,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_WICKED_TORQUE] = @@ -13716,11 +14236,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_NOXIOUS_TORQUE] = @@ -13736,11 +14260,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_COMBAT_TORQUE] = @@ -13756,11 +14284,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_MAGICAL_TORQUE] = @@ -13776,11 +14308,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + .mirrorMoveBanned = TRUE, + .meFirstBanned = TRUE, .mimicBanned = TRUE, .metronomeBanned = TRUE, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, + .encoreBanned = TRUE, + .assistBanned = TRUE, }, [MOVE_PSYBLADE] = @@ -13811,6 +14347,71 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + .thawsUser = TRUE, + }, + + [MOVE_BLOOD_MOON] = + { + .effect = EFFECT_HIT, + .power = 140, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + .cantUseTwice = TRUE, + }, + + [MOVE_MATCHA_GOTCHA] = + { + .effect = EFFECT_MATCHA_GOTCHA, + .power = 80, + .type = TYPE_GRASS, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 20, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + .thawsUser = TRUE, + .metronomeBanned = TRUE, + .healBlockBanned = B_EXTRAPOLATED_MOVE_FLAGS, + }, + + [MOVE_SYRUP_BOMB] = + { + .effect = EFFECT_SYRUP_BOMB, + .power = 60, + .type = TYPE_GRASS, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 100, // syrup bomb volatile status + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + .ballisticMove = TRUE, + .metronomeBanned = TRUE, + }, + + [MOVE_IVY_CUDGEL] = + { + .effect = EFFECT_IVY_CUDGEL, + .power = 100, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + .highCritRatio = TRUE, + .metronomeBanned = TRUE, }, // Z-Moves @@ -14207,6 +14808,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_SPECIAL, .zMoveEffect = 0, .soundMove = TRUE, + .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, }, [MOVE_GUARDIAN_OF_ALOLA] = { @@ -14273,4 +14875,737 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMoveEffect = 0, }, + + [MOVE_MAX_GUARD] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .split = SPLIT_STATUS, + .protectionMove = TRUE, + }, + + [MOVE_MAX_FLARE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_SUN, + }, + + [MOVE_MAX_FLUTTERBY] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_SP_ATK, + }, + + [MOVE_MAX_LIGHTNING] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_ELECTRIC_TERRAIN, + }, + + [MOVE_MAX_STRIKE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_SPEED, + }, + + [MOVE_MAX_KNUCKLE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, + }, + + [MOVE_MAX_PHANTASM] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_DEFENSE, + }, + + [MOVE_MAX_HAILSTORM] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_HAIL, + }, + + [MOVE_MAX_OOZE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, + }, + + [MOVE_MAX_GEYSER] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAIN, + }, + + [MOVE_MAX_AIRSTREAM] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAISE_TEAM_SPEED, + }, + + [MOVE_MAX_STARFALL] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_MISTY_TERRAIN, + }, + + [MOVE_MAX_WYRMWIND] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_ATTACK, + }, + + [MOVE_MAX_MINDSTORM] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_PSYCHIC_TERRAIN, + }, + + [MOVE_MAX_ROCKFALL] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_SANDSTORM, + }, + + [MOVE_MAX_QUAKE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, + }, + + [MOVE_MAX_DARKNESS] = + { + .effect = EFFECT_MAX_MOVE, + .power = 1, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_SP_DEF, + }, + + [MOVE_MAX_OVERGROWTH] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_GRASSY_TERRAIN, + }, + + [MOVE_MAX_STEELSPIKE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, + }, + + [MOVE_G_MAX_VINE_LASH] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_VINE_LASH, + }, + + [MOVE_G_MAX_WILDFIRE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_WILDFIRE, + }, + + [MOVE_G_MAX_CANNONADE] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_CANNONADE, + }, + + [MOVE_G_MAX_BEFUDDLE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_EFFECT_SPORE_FOES, + }, + + [MOVE_G_MAX_VOLT_CRASH] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_PARALYZE_FOES, + }, + + [MOVE_G_MAX_GOLD_RUSH] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, + }, + + [MOVE_G_MAX_CHI_STRIKE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_CRIT_PLUS, + }, + + [MOVE_G_MAX_TERROR] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_MEAN_LOOK, + }, + + [MOVE_G_MAX_FOAM_BURST] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, + }, + + [MOVE_G_MAX_RESONANCE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_AURORA_VEIL, + }, + + [MOVE_G_MAX_CUDDLE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_INFATUATE_FOES, + }, + + [MOVE_G_MAX_REPLENISH] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_RECYCLE_BERRIES, + }, + + [MOVE_G_MAX_MALODOR] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_POISON_FOES, + }, + + [MOVE_G_MAX_MELTDOWN] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_TORMENT_FOES, + }, + + [MOVE_G_MAX_DRUM_SOLO] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .ignoresTargetAbility = TRUE, + }, + + [MOVE_G_MAX_FIREBALL] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .ignoresTargetAbility = TRUE, + }, + + [MOVE_G_MAX_HYDROSNIPE] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .ignoresTargetAbility = TRUE, + }, + + [MOVE_G_MAX_WIND_RAGE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_DEFOG, + }, + + [MOVE_G_MAX_GRAVITAS] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_GRAVITY, + }, + + [MOVE_G_MAX_STONESURGE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_STEALTH_ROCK, + }, + + [MOVE_G_MAX_VOLCALITH] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_VOLCALITH, + }, + + [MOVE_G_MAX_TARTNESS] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, + }, + + [MOVE_G_MAX_SWEETNESS] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_AROMATHERAPY, + }, + + [MOVE_G_MAX_SANDBLAST] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_SANDBLAST_FOES, + }, + + [MOVE_G_MAX_STUN_SHOCK] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_POISON_PARALYZE_FOES, + }, + + [MOVE_G_MAX_CENTIFERNO] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_FIRE_SPIN_FOES, + }, + + [MOVE_G_MAX_SMITE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_CONFUSE_FOES, + }, + + + [MOVE_G_MAX_SNOOZE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_YAWN_FOE, + }, + + [MOVE_G_MAX_FINALE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_HEAL_TEAM, + }, + + [MOVE_G_MAX_STEELSURGE] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_STEELSURGE, + }, + + [MOVE_G_MAX_DEPLETION] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_SPITE, + }, + + [MOVE_G_MAX_ONE_BLOW] = + { + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + }, + + [MOVE_G_MAX_RAPID_FLOW] = + { //ANIM TODO + .effect = EFFECT_MAX_MOVE, + .power = 10, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + }, + }; diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 3d633a2562..6084091683 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -6066,6 +6066,14 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_PSYBLADE] = {0}, // TODO [MOVE_HYDRO_STEAM] = {0}, // TODO + + [MOVE_BLOOD_MOON] = {0}, // TODO + + [MOVE_MATCHA_GOTCHA] = {0}, // TODO + + [MOVE_SYRUP_BOMB] = {0}, // TODO + + [MOVE_IVY_CUDGEL] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index feeb29524f..d3f02d33ab 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -1760,7 +1760,7 @@ const struct ContestPokemon gContestOpponents[] = .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FELICIA] = { - .species = SPECIES_CASTFORM, + .species = SPECIES_CASTFORM_NORMAL, .nickname = _("CASTER"), .trainerName = _("FELICIA"), .trainerGfxId = OBJ_EVENT_GFX_LASS, diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 60cd7d5187..f273b6d3b0 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -654,6 +654,15 @@ const u32 gItemIconPalette_LinkingCord[] = INCBIN_U32("graphics/items/icon_palet const u32 gItemIcon_PeatBlock[] = INCBIN_U32("graphics/items/icons/peat_block.4bpp.lz"); const u32 gItemIconPalette_PeatBlock[] = INCBIN_U32("graphics/items/icon_palettes/peat_block.gbapal.lz"); +const u32 gItemIcon_SyrupyApple[] = INCBIN_U32("graphics/items/icons/syrupy_apple.4bpp.lz"); +const u32 gItemIconPalette_SyrupyApple[] = INCBIN_U32("graphics/items/icon_palettes/syrupy_apple.gbapal.lz"); + +const u32 gItemIcon_UnremarkableTeacup[] = INCBIN_U32("graphics/items/icons/unremarkable_teacup.4bpp.lz"); +const u32 gItemIconPalette_UnremarkableTeacup[] = INCBIN_U32("graphics/items/icon_palettes/unremarkable_teacup.gbapal.lz"); + +const u32 gItemIcon_MasterpieceTeacup[] = INCBIN_U32("graphics/items/icons/masterpiece_teacup.4bpp.lz"); +const u32 gItemIconPalette_MasterpieceTeacup[] = INCBIN_U32("graphics/items/icon_palettes/masterpiece_teacup.gbapal.lz"); + // Nectars const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.lz"); @@ -1746,6 +1755,9 @@ const u32 gItemIconPalette_CatchingCharm[] = INCBIN_U32("graphics/items/icon_pal const u32 gItemIcon_ExpCharm[] = INCBIN_U32("graphics/items/icons/exp_charm.4bpp.lz"); const u32 gItemIconPalette_ExpCharm[] = INCBIN_U32("graphics/items/icon_palettes/exp_charm.gbapal.lz"); +const u32 gItemIcon_GlimmeringCharm[] = INCBIN_U32("graphics/items/icons/glimmering_charm.4bpp.lz"); +const u32 gItemIconPalette_GlimmeringCharm[] = INCBIN_U32("graphics/items/icon_palettes/glimmering_charm.gbapal.lz"); + // Form-changing Key Items const u32 gItemIcon_RotomCatalog[] = INCBIN_U32("graphics/items/icons/rotom_catalog.4bpp.lz"); @@ -1906,8 +1918,8 @@ const u32 gItemIconPalette_MagmaEmblem[] = INCBIN_U32("graphics/items/icon_palet const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz"); const u32 gItemIconPalette_ContestPass[] = INCBIN_U32("graphics/items/icon_palettes/contest_pass.gbapal.lz"); -const u32 gItemIcon_OaksParcel[] = INCBIN_U32("graphics/items/icons/oaks_parcel.4bpp.lz"); -const u32 gItemIconPalette_OaksParcel[] = INCBIN_U32("graphics/items/icon_palettes/oaks_parcel.gbapal.lz"); +const u32 gItemIcon_Parcel[] = INCBIN_U32("graphics/items/icons/parcel.4bpp.lz"); +const u32 gItemIconPalette_Parcel[] = INCBIN_U32("graphics/items/icon_palettes/parcel.gbapal.lz"); const u32 gItemIcon_SecretKey[] = INCBIN_U32("graphics/items/icons/secret_key.4bpp.lz"); const u32 gItemIconPalette_SecretKey[] = INCBIN_U32("graphics/items/icon_palettes/secret_key.gbapal.lz"); @@ -2010,6 +2022,26 @@ const u32 gItemIconPalette_DragonTeraShard[] = INCBIN_U32("graphics/items/icon_p const u32 gItemIconPalette_SteelTeraShard[] = INCBIN_U32("graphics/items/icon_palettes/steel_tera_shard.gbapal.lz"); const u32 gItemIconPalette_FairyTeraShard[] = INCBIN_U32("graphics/items/icon_palettes/fairy_tera_shard.gbapal.lz"); +// Mochi + +const u32 gItemIcon_Mochi[] = INCBIN_U32("graphics/items/icons/mochi.4bpp.lz"); +const u32 gItemIconPalette_HealthMochi[] = INCBIN_U32("graphics/items/icon_palettes/health_mochi.gbapal.lz"); +const u32 gItemIconPalette_MuscleMochi[] = INCBIN_U32("graphics/items/icon_palettes/muscle_mochi.gbapal.lz"); +const u32 gItemIconPalette_ResistMochi[] = INCBIN_U32("graphics/items/icon_palettes/resist_mochi.gbapal.lz"); +const u32 gItemIconPalette_GeniusMochi[] = INCBIN_U32("graphics/items/icon_palettes/genius_mochi.gbapal.lz"); +const u32 gItemIconPalette_CleverMochi[] = INCBIN_U32("graphics/items/icon_palettes/clever_mochi.gbapal.lz"); +const u32 gItemIconPalette_SwiftMochi[] = INCBIN_U32("graphics/items/icon_palettes/swift_mochi.gbapal.lz"); +const u32 gItemIconPalette_FreshStartMochi[] = INCBIN_U32("graphics/items/icon_palettes/fresh_start_mochi.gbapal.lz"); + +// Ogerpon masks + +const u32 gItemIcon_WellspringMask[] = INCBIN_U32("graphics/items/icons/wellspring_mask.4bpp.lz"); +const u32 gItemIconPalette_WellspringMask[] = INCBIN_U32("graphics/items/icon_palettes/wellspring_mask.gbapal.lz"); +const u32 gItemIcon_HearthflameMask[] = INCBIN_U32("graphics/items/icons/hearthflame_mask.4bpp.lz"); +const u32 gItemIconPalette_HearthflameMask[] = INCBIN_U32("graphics/items/icon_palettes/hearthflame_mask.gbapal.lz"); +const u32 gItemIcon_CornerstoneMask[] = INCBIN_U32("graphics/items/icons/cornerstone_mask.4bpp.lz"); +const u32 gItemIconPalette_CornerstoneMask[] = INCBIN_U32("graphics/items/icon_palettes/cornerstone_mask.gbapal.lz"); + // Misc. Items const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.lz"); @@ -2023,3 +2055,6 @@ const u32 gItemIconPalette_LustrousGlobe[] = INCBIN_U32("graphics/items/icon_pal const u32 gItemIcon_BerserkGene[] = INCBIN_U32("graphics/items/icons/berserk_gene.4bpp.lz"); const u32 gItemIconPalette_BerserkGene[] = INCBIN_U32("graphics/items/icon_palettes/berserk_gene.gbapal.lz"); + +const u32 gItemIcon_FairyFeather[] = INCBIN_U32("graphics/items/icons/fairy_feather.4bpp.lz"); +const u32 gItemIconPalette_FairyFeather[] = INCBIN_U32("graphics/items/icon_palettes/fairy_feather.gbapal.lz"); diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 7c8afc0066..f765304efb 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -148,6 +148,28 @@ const u32 gMonFrontPic_Electabuzz[] = INCBIN_U32("graphics/pokemon/electabuzz/an const u32 gMonFrontPic_Magmar[] = INCBIN_U32("graphics/pokemon/magmar/anim_front.4bpp.lz"); const u32 gMonFrontPic_Pinsir[] = INCBIN_U32("graphics/pokemon/pinsir/anim_front.4bpp.lz"); const u32 gMonFrontPic_Tauros[] = INCBIN_U32("graphics/pokemon/tauros/anim_front.4bpp.lz"); + +const u32 gMonFrontPic_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/combat/front.4bpp.lz"); +const u32 gMonPalette_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/combat/normal.gbapal.lz"); +const u32 gMonBackPic_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/combat/back.4bpp.lz"); +const u32 gMonShinyPalette_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/combat/shiny.gbapal.lz"); +const u8 gMonIcon_TaurosPaldeanCombatBreed[] = INCBIN_U8("graphics/pokemon/tauros/combat/icon.4bpp"); +// const u8 gMonFootprint_TaurosPaldeanCombatBreed[] = INCBIN_U8("graphics/pokemon/tauros/combat/footprint.1bpp"); + +const u32 gMonFrontPic_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/blaze/front.4bpp.lz"); +const u32 gMonPalette_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/blaze/normal.gbapal.lz"); +const u32 gMonBackPic_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/blaze/back.4bpp.lz"); +const u32 gMonShinyPalette_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/blaze/shiny.gbapal.lz"); +const u8 gMonIcon_TaurosPaldeanBlazeBreed[] = INCBIN_U8("graphics/pokemon/tauros/blaze/icon.4bpp"); +// const u8 gMonFootprint_TaurosPaldeanBlazeBreed[] = INCBIN_U8("graphics/pokemon/tauros/blaze/footprint.1bpp"); + +const u32 gMonFrontPic_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/aqua/front.4bpp.lz"); +const u32 gMonPalette_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/aqua/normal.gbapal.lz"); +const u32 gMonBackPic_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/aqua/back.4bpp.lz"); +const u32 gMonShinyPalette_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/aqua/shiny.gbapal.lz"); +const u8 gMonIcon_TaurosPaldeanAquaBreed[] = INCBIN_U8("graphics/pokemon/tauros/aqua/icon.4bpp"); +// const u8 gMonFootprint_TaurosPaldeanAquaBreed[] = INCBIN_U8("graphics/pokemon/tauros/aqua/footprint.1bpp"); + const u32 gMonFrontPic_Magikarp[] = INCBIN_U32("graphics/pokemon/magikarp/anim_front.4bpp.lz"); const u32 gMonFrontPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/anim_front.4bpp.lz"); @@ -225,6 +247,14 @@ const u32 gMonFrontPic_Sunflora[] = INCBIN_U32("graphics/pokemon/sunflora/anim_f const u32 gMonFrontPic_Yanma[] = INCBIN_U32("graphics/pokemon/yanma/anim_front.4bpp.lz"); const u32 gMonFrontPic_Wooper[] = INCBIN_U32("graphics/pokemon/wooper/anim_front.4bpp.lz"); const u32 gMonFrontPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/anim_frontf.4bpp.lz"); + +const u32 gMonFrontPic_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldea/front.4bpp.lz"); +const u32 gMonPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldea/normal.gbapal.lz"); +const u32 gMonBackPic_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldea/back.4bpp.lz"); +const u32 gMonShinyPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldea/shiny.gbapal.lz"); +// const u8 gMonIcon_WooperPaldean[] = INCBIN_U8("graphics/pokemon/wooper/wooper_paldea/icon.4bpp"); +// const u8 gMonFootprint_WooperPaldean[] = INCBIN_U8("graphics/pokemon/wooper/wooper_paldea/footprint.1bpp"); + const u32 gMonFrontPic_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/anim_front.4bpp.lz"); const u32 gMonFrontPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Espeon[] = INCBIN_U32("graphics/pokemon/espeon/anim_front.4bpp.lz"); @@ -411,7 +441,7 @@ const u32 gMonFrontPic_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/anim_fro const u32 gMonFrontPic_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/anim_front.4bpp.lz"); const u32 gMonFrontPic_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/anim_front.4bpp.lz"); const u32 gMonFrontPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/anim_frontf.4bpp.lz"); -const u32 gMonFrontPic_Castform[] = INCBIN_U32("graphics/pokemon/castform/anim_front.4bpp.lz"); +const u32 gMonFrontPic_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/anim_front.4bpp.lz"); const u32 gMonFrontPic_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/anim_front.4bpp.lz"); const u32 gMonFrontPic_Banette[] = INCBIN_U32("graphics/pokemon/banette/anim_front.4bpp.lz"); @@ -447,7 +477,7 @@ const u32 gMonFrontPic_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/anim_front const u32 gMonFrontPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/anim_front.4bpp.lz"); const u32 gMonFrontPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/anim_front.4bpp.lz"); +const u32 gMonFrontPic_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/anim_front.4bpp.lz"); #if P_GEN_4_POKEMON == TRUE const u32 gMonFrontPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/anim_front.4bpp.lz"); const u32 gMonFrontPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/anim_front.4bpp.lz"); @@ -485,8 +515,8 @@ const u32 gMonFrontPic_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/anim_f const u32 gMonFrontPic_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/anim_front.4bpp.lz"); const u32 gMonFrontPic_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz"); +const u32 gMonFrontPic_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/anim_front.4bpp.lz"); +const u32 gMonFrontPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz"); const u32 gMonFrontPic_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/anim_front.4bpp.lz"); const u32 gMonFrontPic_Combee[] = INCBIN_U32("graphics/pokemon/combee/anim_front.4bpp.lz"); const u32 gMonFrontPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/anim_front.4bpp.lz"); @@ -495,9 +525,9 @@ const u32 gMonFrontPic_PachirisuF[] = INCBIN_U32("graphics/pokemon/pachirisu/ani const u32 gMonFrontPic_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/anim_front.4bpp.lz"); const u32 gMonFrontPic_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/anim_front.4bpp.lz"); const u32 gMonFrontPic_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Cherrim[] = INCBIN_U32("graphics/pokemon/cherrim/normal/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Shellos[] = INCBIN_U32("graphics/pokemon/shellos/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Gastrodon[] = INCBIN_U32("graphics/pokemon/gastrodon/anim_front.4bpp.lz"); +const u32 gMonFrontPic_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/anim_front.4bpp.lz"); +const u32 gMonFrontPic_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/anim_front.4bpp.lz"); +const u32 gMonFrontPic_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/anim_front.4bpp.lz"); const u32 gMonFrontPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/anim_front.4bpp.lz"); @@ -575,12 +605,12 @@ const u32 gMonFrontPic_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/anim_front const u32 gMonFrontPic_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/anim_front.4bpp.lz"); const u32 gMonFrontPic_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/anim_front.4bpp.lz"); const u32 gMonFrontPic_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Giratina[] = INCBIN_U32("graphics/pokemon/giratina/anim_front.4bpp.lz"); +const u32 gMonFrontPic_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/anim_front.4bpp.lz"); const u32 gMonFrontPic_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/anim_front.4bpp.lz"); const u32 gMonFrontPic_Phione[] = INCBIN_U32("graphics/pokemon/phione/anim_front.4bpp.lz"); const u32 gMonFrontPic_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/anim_front.4bpp.lz"); const u32 gMonFrontPic_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Shaymin[] = INCBIN_U32("graphics/pokemon/shaymin/anim_front.4bpp.lz"); +const u32 gMonFrontPic_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/anim_front.4bpp.lz"); const u32 gMonFrontPic_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/anim_front.4bpp.lz"); #endif #if P_GEN_5_POKEMON == TRUE @@ -641,12 +671,12 @@ const u32 gMonFrontPic_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/anim_f const u32 gMonFrontPic_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/anim_front.4bpp.lz"); const u32 gMonFrontPic_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/anim_front.4bpp.lz"); const u32 gMonFrontPic_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Basculin[] = INCBIN_U32("graphics/pokemon/basculin/anim_front.4bpp.lz"); +const u32 gMonFrontPic_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/anim_front.4bpp.lz"); const u32 gMonFrontPic_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/anim_front.4bpp.lz"); const u32 gMonFrontPic_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/anim_front.4bpp.lz"); const u32 gMonFrontPic_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/anim_front.4bpp.lz"); const u32 gMonFrontPic_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Darmanitan[] = INCBIN_U32("graphics/pokemon/darmanitan/anim_front.4bpp.lz"); +const u32 gMonFrontPic_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/anim_front.4bpp.lz"); const u32 gMonFrontPic_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/anim_front.4bpp.lz"); const u32 gMonFrontPic_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/anim_front.4bpp.lz"); const u32 gMonFrontPic_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/anim_front.4bpp.lz"); @@ -677,7 +707,7 @@ const u32 gMonFrontPic_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/anim const u32 gMonFrontPic_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/anim_front.4bpp.lz"); const u32 gMonFrontPic_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/anim_front.4bpp.lz"); const u32 gMonFrontPic_Deerling[] = INCBIN_U32("graphics/pokemon/deerling/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Sawsbuck[] = INCBIN_U32("graphics/pokemon/sawsbuck/anim_front.4bpp.lz"); +const u32 gMonFrontPic_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/anim_front.4bpp.lz"); const u32 gMonFrontPic_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/anim_front.4bpp.lz"); const u32 gMonFrontPic_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/anim_front.4bpp.lz"); const u32 gMonFrontPic_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/anim_front.4bpp.lz"); @@ -734,14 +764,14 @@ const u32 gMonFrontPic_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/anim const u32 gMonFrontPic_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/anim_front.4bpp.lz"); const u32 gMonFrontPic_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/anim_front.4bpp.lz"); const u32 gMonFrontPic_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Tornadus[] = INCBIN_U32("graphics/pokemon/tornadus/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Thundurus[] = INCBIN_U32("graphics/pokemon/thundurus/anim_front.4bpp.lz"); +const u32 gMonFrontPic_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/anim_front.4bpp.lz"); +const u32 gMonFrontPic_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/anim_front.4bpp.lz"); const u32 gMonFrontPic_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/anim_front.4bpp.lz"); const u32 gMonFrontPic_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Landorus[] = INCBIN_U32("graphics/pokemon/landorus/anim_front.4bpp.lz"); +const u32 gMonFrontPic_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/anim_front.4bpp.lz"); const u32 gMonFrontPic_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Keldeo[] = INCBIN_U32("graphics/pokemon/keldeo/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Meloetta[] = INCBIN_U32("graphics/pokemon/meloetta/anim_front.4bpp.lz"); +const u32 gMonFrontPic_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/anim_front.4bpp.lz"); +const u32 gMonFrontPic_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/anim_front.4bpp.lz"); const u32 gMonFrontPic_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/anim_front.4bpp.lz"); #endif #if P_GEN_6_POKEMON == TRUE @@ -761,7 +791,7 @@ const u32 gMonFrontPic_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/ const u32 gMonFrontPic_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/anim_front.4bpp.lz"); const u32 gMonFrontPic_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/anim_front.4bpp.lz"); const u32 gMonFrontPic_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/anim_front.4bpp.lz"); +const u32 gMonFrontPic_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/anim_front.4bpp.lz"); const u32 gMonFrontPic_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/anim_front.4bpp.lz"); const u32 gMonFrontPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/anim_frontf.4bpp.lz"); @@ -772,12 +802,12 @@ const u32 gMonFrontPic_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/anim_front const u32 gMonFrontPic_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/anim_front.4bpp.lz"); const u32 gMonFrontPic_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/anim_front.4bpp.lz"); const u32 gMonFrontPic_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Furfrou[] = INCBIN_U32("graphics/pokemon/furfrou/anim_front.4bpp.lz"); +const u32 gMonFrontPic_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/anim_front.4bpp.lz"); const u32 gMonFrontPic_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Meowstic[] = INCBIN_U32("graphics/pokemon/meowstic/anim_front.4bpp.lz"); +const u32 gMonFrontPic_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/anim_front.4bpp.lz"); const u32 gMonFrontPic_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/anim_front.4bpp.lz"); const u32 gMonFrontPic_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Aegislash[] = INCBIN_U32("graphics/pokemon/aegislash/anim_front.4bpp.lz"); +const u32 gMonFrontPic_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/anim_front.4bpp.lz"); const u32 gMonFrontPic_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/anim_front.4bpp.lz"); const u32 gMonFrontPic_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/anim_front.4bpp.lz"); const u32 gMonFrontPic_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/anim_front.4bpp.lz"); @@ -806,32 +836,32 @@ const u32 gMonFrontPic_Goodra[] = INCBIN_U32("graphics/pokemon/goodra/anim_front const u32 gMonFrontPic_Klefki[] = INCBIN_U32("graphics/pokemon/klefki/anim_front.4bpp.lz"); const u32 gMonFrontPic_Phantump[] = INCBIN_U32("graphics/pokemon/phantump/anim_front.4bpp.lz"); const u32 gMonFrontPic_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Pumpkaboo[] = INCBIN_U32("graphics/pokemon/pumpkaboo/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/anim_front.4bpp.lz"); +const u32 gMonFrontPic_PumpkabooAverage[] = INCBIN_U32("graphics/pokemon/pumpkaboo/anim_front.4bpp.lz"); +const u32 gMonFrontPic_GourgeistAverage[] = INCBIN_U32("graphics/pokemon/gourgeist/anim_front.4bpp.lz"); const u32 gMonFrontPic_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/anim_front.4bpp.lz"); const u32 gMonFrontPic_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/anim_front.4bpp.lz"); const u32 gMonFrontPic_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/anim_front.4bpp.lz"); const u32 gMonFrontPic_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Xerneas[] = INCBIN_U32("graphics/pokemon/xerneas/front.4bpp.lz"); +const u32 gMonFrontPic_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/front.4bpp.lz"); const u32 gMonFrontPic_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Zygarde[] = INCBIN_U32("graphics/pokemon/zygarde/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/anim_front.4bpp.lz"); const u32 gMonFrontPic_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Hoopa[] = INCBIN_U32("graphics/pokemon/hoopa/anim_front.4bpp.lz"); +const u32 gMonFrontPic_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/anim_front.4bpp.lz"); const u32 gMonFrontPic_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/anim_front.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -const u32 gMonFrontPic_Rowlet[] = INCBIN_U32("graphics/pokemon/rowlet/front.4bpp.lz"); -const u32 gMonFrontPic_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/front.4bpp.lz"); -const u32 gMonFrontPic_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/front.4bpp.lz"); +const u32 gMonFrontPic_Rowlet[] = INCBIN_U32("graphics/pokemon/rowlet/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/anim_front.4bpp.lz"); const u32 gMonFrontPic_Litten[] = INCBIN_U32("graphics/pokemon/litten/front.4bpp.lz"); const u32 gMonFrontPic_Torracat[] = INCBIN_U32("graphics/pokemon/torracat/front.4bpp.lz"); const u32 gMonFrontPic_Incineroar[] = INCBIN_U32("graphics/pokemon/incineroar/front.4bpp.lz"); const u32 gMonFrontPic_Popplio[] = INCBIN_U32("graphics/pokemon/popplio/front.4bpp.lz"); const u32 gMonFrontPic_Brionne[] = INCBIN_U32("graphics/pokemon/brionne/front.4bpp.lz"); const u32 gMonFrontPic_Primarina[] = INCBIN_U32("graphics/pokemon/primarina/front.4bpp.lz"); -const u32 gMonFrontPic_Pikipek[] = INCBIN_U32("graphics/pokemon/pikipek/front.4bpp.lz"); -const u32 gMonFrontPic_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/front.4bpp.lz"); -const u32 gMonFrontPic_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/front.4bpp.lz"); +const u32 gMonFrontPic_Pikipek[] = INCBIN_U32("graphics/pokemon/pikipek/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Yungoos[] = INCBIN_U32("graphics/pokemon/yungoos/front.4bpp.lz"); const u32 gMonFrontPic_Gumshoos[] = INCBIN_U32("graphics/pokemon/gumshoos/front.4bpp.lz"); const u32 gMonFrontPic_Grubbin[] = INCBIN_U32("graphics/pokemon/grubbin/anim_front.4bpp.lz"); @@ -839,12 +869,12 @@ const u32 gMonFrontPic_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/anim const u32 gMonFrontPic_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/anim_front.4bpp.lz"); const u32 gMonFrontPic_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/front.4bpp.lz"); const u32 gMonFrontPic_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/front.4bpp.lz"); -const u32 gMonFrontPic_Oricorio[] = INCBIN_U32("graphics/pokemon/oricorio/front.4bpp.lz"); -const u32 gMonFrontPic_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/front.4bpp.lz"); -const u32 gMonFrontPic_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/front.4bpp.lz"); -const u32 gMonFrontPic_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/front.4bpp.lz"); -const u32 gMonFrontPic_Lycanroc[] = INCBIN_U32("graphics/pokemon/lycanroc/front.4bpp.lz"); -const u32 gMonFrontPic_Wishiwashi[] = INCBIN_U32("graphics/pokemon/wishiwashi/front.4bpp.lz"); +const u32 gMonFrontPic_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/front.4bpp.lz"); +const u32 gMonFrontPic_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/anim_front.4bpp.lz"); +const u32 gMonFrontPic_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/anim_front.4bpp.lz"); +const u32 gMonFrontPic_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/front.4bpp.lz"); const u32 gMonFrontPic_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/front.4bpp.lz"); const u32 gMonFrontPic_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/front.4bpp.lz"); const u32 gMonFrontPic_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/front.4bpp.lz"); @@ -863,8 +893,8 @@ const u32 gMonFrontPic_Bounsweet[] = INCBIN_U32("graphics/pokemon/bounsweet/fron const u32 gMonFrontPic_Steenee[] = INCBIN_U32("graphics/pokemon/steenee/front.4bpp.lz"); const u32 gMonFrontPic_Tsareena[] = INCBIN_U32("graphics/pokemon/tsareena/front.4bpp.lz"); const u32 gMonFrontPic_Comfey[] = INCBIN_U32("graphics/pokemon/comfey/front.4bpp.lz"); -const u32 gMonFrontPic_Oranguru[] = INCBIN_U32("graphics/pokemon/oranguru/front.4bpp.lz"); -const u32 gMonFrontPic_Passimian[] = INCBIN_U32("graphics/pokemon/passimian/front.4bpp.lz"); +const u32 gMonFrontPic_Oranguru[] = INCBIN_U32("graphics/pokemon/oranguru/anim_front.4bpp.lz"); +const u32 gMonFrontPic_Passimian[] = INCBIN_U32("graphics/pokemon/passimian/anim_front.4bpp.lz"); const u32 gMonFrontPic_Wimpod[] = INCBIN_U32("graphics/pokemon/wimpod/anim_front.4bpp.lz"); const u32 gMonFrontPic_Golisopod[] = INCBIN_U32("graphics/pokemon/golisopod/anim_front.4bpp.lz"); const u32 gMonFrontPic_Sandygast[] = INCBIN_U32("graphics/pokemon/sandygast/front.4bpp.lz"); @@ -872,13 +902,13 @@ const u32 gMonFrontPic_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/fron const u32 gMonFrontPic_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/anim_front.4bpp.lz"); const u32 gMonFrontPic_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/front.4bpp.lz"); const u32 gMonFrontPic_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/front.4bpp.lz"); -const u32 gMonFrontPic_Minior[] = INCBIN_U32("graphics/pokemon/minior/front.4bpp.lz"); +const u32 gMonFrontPic_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/front.4bpp.lz"); const u32 gMonFrontPic_Komala[] = INCBIN_U32("graphics/pokemon/komala/front.4bpp.lz"); const u32 gMonFrontPic_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/front.4bpp.lz"); -const u32 gMonFrontPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/front.4bpp.lz"); +const u32 gMonFrontPic_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/anim_front.4bpp.lz"); +const u32 gMonFrontPic_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/front.4bpp.lz"); const u32 gMonFrontPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/front.4bpp.lz"); -const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/front.4bpp.lz"); +const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/anim_front.4bpp.lz"); const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front.4bpp.lz"); const u32 gMonFrontPic_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/anim_front.4bpp.lz"); const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/anim_front.4bpp.lz"); @@ -949,7 +979,7 @@ const u32 gMonFrontPic_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/fron const u32 gMonFrontPic_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/front.4bpp.lz"); const u32 gMonFrontPic_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/front.4bpp.lz"); const u32 gMonFrontPic_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/front.4bpp.lz"); -const u32 gMonFrontPic_Toxtricity[] = INCBIN_U32("graphics/pokemon/toxtricity/front.4bpp.lz"); +const u32 gMonFrontPic_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/front.4bpp.lz"); const u32 gMonFrontPic_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/anim_front.4bpp.lz"); const u32 gMonFrontPic_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/anim_front.4bpp.lz"); const u32 gMonFrontPic_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/front.4bpp.lz"); @@ -975,9 +1005,9 @@ const u32 gMonFrontPic_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchin/an const u32 gMonFrontPic_Snom[] = INCBIN_U32("graphics/pokemon/snom/front.4bpp.lz"); const u32 gMonFrontPic_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/front.4bpp.lz"); const u32 gMonFrontPic_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/front.4bpp.lz"); -const u32 gMonFrontPic_Eiscue[] = INCBIN_U32("graphics/pokemon/eiscue/front.4bpp.lz"); -const u32 gMonFrontPic_Indeedee[] = INCBIN_U32("graphics/pokemon/indeedee/front.4bpp.lz"); -const u32 gMonFrontPic_Morpeko[] = INCBIN_U32("graphics/pokemon/morpeko/front.4bpp.lz"); +const u32 gMonFrontPic_EiscueFace[] = INCBIN_U32("graphics/pokemon/eiscue/front.4bpp.lz"); +const u32 gMonFrontPic_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/front.4bpp.lz"); +const u32 gMonFrontPic_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/front.4bpp.lz"); const u32 gMonFrontPic_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/front.4bpp.lz"); const u32 gMonFrontPic_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/front.4bpp.lz"); const u32 gMonFrontPic_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/front.4bpp.lz"); @@ -988,11 +1018,11 @@ const u32 gMonFrontPic_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/fron const u32 gMonFrontPic_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/front.4bpp.lz"); const u32 gMonFrontPic_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/front.4bpp.lz"); const u32 gMonFrontPic_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/front.4bpp.lz"); -const u32 gMonFrontPic_Zacian[] = INCBIN_U32("graphics/pokemon/zacian/front.4bpp.lz"); -const u32 gMonFrontPic_Zamazenta[] = INCBIN_U32("graphics/pokemon/zamazenta/front.4bpp.lz"); +const u32 gMonFrontPic_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/front.4bpp.lz"); +const u32 gMonFrontPic_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/front.4bpp.lz"); const u32 gMonFrontPic_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/front.4bpp.lz"); const u32 gMonFrontPic_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/front.4bpp.lz"); -const u32 gMonFrontPic_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/front.4bpp.lz"); +const u32 gMonFrontPic_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/front.4bpp.lz"); const u32 gMonFrontPic_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/front.4bpp.lz"); const u32 gMonFrontPic_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/front.4bpp.lz"); const u32 gMonFrontPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/front.4bpp.lz"); @@ -1002,10 +1032,18 @@ const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4b const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); -const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); + +const u32 gMonFrontPic_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/front.4bpp.lz"); +const u32 gMonPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/normal.gbapal.lz"); +const u32 gMonBackPic_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/back.4bpp.lz"); +const u32 gMonShinyPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/shiny.gbapal.lz"); +// const u8 gMonIcon_UrsalunaBloodmoon[] = INCBIN_U8("graphics/pokemon/ursaluna/bloodmoon/icon.4bpp"); +// const u8 gMonFootprint_UrsalunaBloodmoon[] = INCBIN_U8("graphics/pokemon/ursaluna/bloodmoon/footprint.1bpp"); + +const u32 gMonFrontPic_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); -const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); +const u32 gMonFrontPic_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); #endif const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz"); @@ -1098,7 +1136,7 @@ const u32 gMonFrontPic_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzag const u32 gMonFrontPic_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/front.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE const u32 gMonFrontPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/front.4bpp.lz"); -const u32 gMonFrontPic_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/front.4bpp.lz"); +const u32 gMonFrontPic_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/front.4bpp.lz"); const u32 gMonFrontPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/front.4bpp.lz"); const u32 gMonFrontPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/front.4bpp.lz"); #endif @@ -1195,7 +1233,7 @@ const u32 gMonFrontPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/a const u32 gMonFrontPic_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/front.4bpp.lz"); const u32 gMonFrontPic_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/front.4bpp.lz"); const u32 gMonFrontPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/anim_front.4bpp.lz"); -const u32 gMonFrontPic_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/front.4bpp.lz"); +const u32 gMonFrontPic_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/front.4bpp.lz"); const u32 gMonFrontPic_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/front.4bpp.lz"); const u32 gMonFrontPic_SawsbuckAutumn[] = INCBIN_U32("graphics/pokemon/sawsbuck/autumn/front.4bpp.lz"); const u32 gMonFrontPic_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/front.4bpp.lz"); @@ -1228,7 +1266,7 @@ const u32 gMonFrontPic_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/o const u32 gMonFrontPic_VivillonJungle[] = INCBIN_U32("graphics/pokemon/vivillon/jungle/anim_front.4bpp.lz"); const u32 gMonFrontPic_VivillonFancy[] = INCBIN_U32("graphics/pokemon/vivillon/fancy/anim_front.4bpp.lz"); const u32 gMonFrontPic_VivillonPokeBall[] = INCBIN_U32("graphics/pokemon/vivillon/poke_ball/anim_front.4bpp.lz"); -const u32 gMonFrontPic_FloetteEternalFlower[] = INCBIN_U32("graphics/pokemon/floette/eternal_flower/front.4bpp.lz"); +const u32 gMonFrontPic_FloetteEternalFlower[] = INCBIN_U32("graphics/pokemon/floette/eternal_flower/anim_front.4bpp.lz"); const u32 gMonFrontPic_FurfrouHeartTrim[] = INCBIN_U32("graphics/pokemon/furfrou/heart_trim/anim_front.4bpp.lz"); const u32 gMonFrontPic_FurfrouStarTrim[] = INCBIN_U32("graphics/pokemon/furfrou/star_trim/anim_front.4bpp.lz"); const u32 gMonFrontPic_FurfrouDiamondTrim[] = INCBIN_U32("graphics/pokemon/furfrou/diamond_trim/anim_front.4bpp.lz"); @@ -1255,8 +1293,8 @@ const u32 gMonFrontPic_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbou const u32 gMonFrontPic_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/front.4bpp.lz"); const u32 gMonFrontPic_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/front.4bpp.lz"); const u32 gMonFrontPic_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/front.4bpp.lz"); -const u32 gMonFrontPic_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/front.4bpp.lz"); -const u32 gMonFrontPic_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/front.4bpp.lz"); +const u32 gMonFrontPic_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/anim_front.4bpp.lz"); +const u32 gMonFrontPic_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/anim_front.4bpp.lz"); const u32 gMonFrontPic_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/front.4bpp.lz"); const u32 gMonFrontPic_MiniorCore[] = INCBIN_U32("graphics/pokemon/minior/core/front.4bpp.lz"); const u32 gMonFrontPic_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/front.4bpp.lz"); @@ -1269,14 +1307,6 @@ const u32 gMonFrontPic_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/ma const u32 gMonFrontPic_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/front.4bpp.lz"); const u32 gMonFrontPic_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/front.4bpp.lz"); const u32 gMonFrontPic_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_cream/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/matcha_cream/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/mint_cream/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/lemon_cream/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/salted_cream/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_swirl/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/caramel_swirl/front.4bpp.lz"); -const u32 gMonFrontPic_AlcremieRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/rainbow_swirl/front.4bpp.lz"); const u32 gMonFrontPic_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/front.4bpp.lz"); const u32 gMonFrontPic_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/front.4bpp.lz"); const u32 gMonFrontPic_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/front.4bpp.lz"); @@ -1289,6 +1319,39 @@ const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz"); const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); const u32 gMonFrontPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); +const u32 gMonFrontPic_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_UrshifuSingleStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/front.4bpp.lz"); +const u32 gMonFrontPic_UrshifuRapidStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/front.4bpp.lz"); #endif const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); @@ -1701,7 +1764,7 @@ const u32 gMonBackPic_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/back.4bpp const u32 gMonBackPic_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/back.4bpp.lz"); const u32 gMonBackPic_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/back.4bpp.lz"); const u32 gMonBackPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/backf.4bpp.lz"); -const u32 gMonBackPic_Castform[] = INCBIN_U32("graphics/pokemon/castform/back.4bpp.lz"); +const u32 gMonBackPic_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/back.4bpp.lz"); const u32 gMonBackPic_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/back.4bpp.lz"); const u32 gMonBackPic_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/back.4bpp.lz"); const u32 gMonBackPic_Banette[] = INCBIN_U32("graphics/pokemon/banette/back.4bpp.lz"); @@ -1737,7 +1800,7 @@ const u32 gMonBackPic_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/back.4bpp.l const u32 gMonBackPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/back.4bpp.lz"); const u32 gMonBackPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/back.4bpp.lz"); const u32 gMonBackPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/back.4bpp.lz"); -const u32 gMonBackPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/back.4bpp.lz"); +const u32 gMonBackPic_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/back.4bpp.lz"); #if P_GEN_4_POKEMON == TRUE const u32 gMonBackPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/back.4bpp.lz"); const u32 gMonBackPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/back.4bpp.lz"); @@ -1773,8 +1836,8 @@ const u32 gMonBackPic_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/back.4b const u32 gMonBackPic_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/back.4bpp.lz"); const u32 gMonBackPic_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/back.4bpp.lz"); const u32 gMonBackPic_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/back.4bpp.lz"); -const u32 gMonBackPic_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/back.4bpp.lz"); -const u32 gMonBackPic_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/back.4bpp.lz"); +const u32 gMonBackPic_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/back.4bpp.lz"); +const u32 gMonBackPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/back.4bpp.lz"); const u32 gMonBackPic_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/back.4bpp.lz"); const u32 gMonBackPic_Combee[] = INCBIN_U32("graphics/pokemon/combee/back.4bpp.lz"); const u32 gMonBackPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/back.4bpp.lz"); @@ -1784,9 +1847,9 @@ const u32 gMonBackPic_BuizelF[] = INCBIN_U32("graphics/pokemon/buizel/backf.4bpp const u32 gMonBackPic_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/back.4bpp.lz"); const u32 gMonBackPic_FloatzelF[] = INCBIN_U32("graphics/pokemon/floatzel/backf.4bpp.lz"); const u32 gMonBackPic_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/back.4bpp.lz"); -const u32 gMonBackPic_Cherrim[] = INCBIN_U32("graphics/pokemon/cherrim/normal/back.4bpp.lz"); -const u32 gMonBackPic_Shellos[] = INCBIN_U32("graphics/pokemon/shellos/back.4bpp.lz"); -const u32 gMonBackPic_Gastrodon[] = INCBIN_U32("graphics/pokemon/gastrodon/back.4bpp.lz"); +const u32 gMonBackPic_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/back.4bpp.lz"); +const u32 gMonBackPic_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/back.4bpp.lz"); +const u32 gMonBackPic_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/back.4bpp.lz"); const u32 gMonBackPic_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/back.4bpp.lz"); const u32 gMonBackPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/backf.4bpp.lz"); const u32 gMonBackPic_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/back.4bpp.lz"); @@ -1860,12 +1923,12 @@ const u32 gMonBackPic_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/back.4bpp.l const u32 gMonBackPic_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/back.4bpp.lz"); const u32 gMonBackPic_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/back.4bpp.lz"); const u32 gMonBackPic_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/back.4bpp.lz"); -const u32 gMonBackPic_Giratina[] = INCBIN_U32("graphics/pokemon/giratina/back.4bpp.lz"); +const u32 gMonBackPic_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/back.4bpp.lz"); const u32 gMonBackPic_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/back.4bpp.lz"); const u32 gMonBackPic_Phione[] = INCBIN_U32("graphics/pokemon/phione/back.4bpp.lz"); const u32 gMonBackPic_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/back.4bpp.lz"); const u32 gMonBackPic_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/back.4bpp.lz"); -const u32 gMonBackPic_Shaymin[] = INCBIN_U32("graphics/pokemon/shaymin/back.4bpp.lz"); +const u32 gMonBackPic_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/back.4bpp.lz"); const u32 gMonBackPic_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/back.4bpp.lz"); #endif #if P_GEN_5_POKEMON == TRUE @@ -1926,12 +1989,12 @@ const u32 gMonBackPic_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/back.4b const u32 gMonBackPic_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/back.4bpp.lz"); const u32 gMonBackPic_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/back.4bpp.lz"); const u32 gMonBackPic_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/back.4bpp.lz"); -const u32 gMonBackPic_Basculin[] = INCBIN_U32("graphics/pokemon/basculin/back.4bpp.lz"); +const u32 gMonBackPic_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/back.4bpp.lz"); const u32 gMonBackPic_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/back.4bpp.lz"); const u32 gMonBackPic_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/back.4bpp.lz"); const u32 gMonBackPic_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/back.4bpp.lz"); const u32 gMonBackPic_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/back.4bpp.lz"); -const u32 gMonBackPic_Darmanitan[] = INCBIN_U32("graphics/pokemon/darmanitan/back.4bpp.lz"); +const u32 gMonBackPic_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/back.4bpp.lz"); const u32 gMonBackPic_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/back.4bpp.lz"); const u32 gMonBackPic_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/back.4bpp.lz"); const u32 gMonBackPic_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/back.4bpp.lz"); @@ -1962,7 +2025,7 @@ const u32 gMonBackPic_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/back. const u32 gMonBackPic_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/back.4bpp.lz"); const u32 gMonBackPic_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/back.4bpp.lz"); const u32 gMonBackPic_Deerling[] = INCBIN_U32("graphics/pokemon/deerling/back.4bpp.lz"); -const u32 gMonBackPic_Sawsbuck[] = INCBIN_U32("graphics/pokemon/sawsbuck/back.4bpp.lz"); +const u32 gMonBackPic_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/back.4bpp.lz"); const u32 gMonBackPic_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/back.4bpp.lz"); const u32 gMonBackPic_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/back.4bpp.lz"); const u32 gMonBackPic_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/back.4bpp.lz"); @@ -2019,14 +2082,14 @@ const u32 gMonBackPic_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/back. const u32 gMonBackPic_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/back.4bpp.lz"); const u32 gMonBackPic_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/back.4bpp.lz"); const u32 gMonBackPic_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/back.4bpp.lz"); -const u32 gMonBackPic_Tornadus[] = INCBIN_U32("graphics/pokemon/tornadus/back.4bpp.lz"); -const u32 gMonBackPic_Thundurus[] = INCBIN_U32("graphics/pokemon/thundurus/back.4bpp.lz"); +const u32 gMonBackPic_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/back.4bpp.lz"); +const u32 gMonBackPic_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/back.4bpp.lz"); const u32 gMonBackPic_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/back.4bpp.lz"); const u32 gMonBackPic_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/back.4bpp.lz"); -const u32 gMonBackPic_Landorus[] = INCBIN_U32("graphics/pokemon/landorus/back.4bpp.lz"); +const u32 gMonBackPic_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/back.4bpp.lz"); const u32 gMonBackPic_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/back.4bpp.lz"); -const u32 gMonBackPic_Keldeo[] = INCBIN_U32("graphics/pokemon/keldeo/back.4bpp.lz"); -const u32 gMonBackPic_Meloetta[] = INCBIN_U32("graphics/pokemon/meloetta/back.4bpp.lz"); +const u32 gMonBackPic_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/back.4bpp.lz"); +const u32 gMonBackPic_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/back.4bpp.lz"); const u32 gMonBackPic_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/back.4bpp.lz"); #endif #if P_GEN_6_POKEMON == TRUE @@ -2046,7 +2109,7 @@ const u32 gMonBackPic_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/b const u32 gMonBackPic_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/back.4bpp.lz"); const u32 gMonBackPic_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/back.4bpp.lz"); const u32 gMonBackPic_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/back.4bpp.lz"); -const u32 gMonBackPic_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/back.4bpp.lz"); +const u32 gMonBackPic_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/back.4bpp.lz"); const u32 gMonBackPic_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/back.4bpp.lz"); const u32 gMonBackPic_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/back.4bpp.lz"); const u32 gMonBackPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/backf.4bpp.lz"); @@ -2057,12 +2120,12 @@ const u32 gMonBackPic_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/back.4bpp.l const u32 gMonBackPic_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/back.4bpp.lz"); const u32 gMonBackPic_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/back.4bpp.lz"); const u32 gMonBackPic_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/back.4bpp.lz"); -const u32 gMonBackPic_Furfrou[] = INCBIN_U32("graphics/pokemon/furfrou/back.4bpp.lz"); +const u32 gMonBackPic_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/back.4bpp.lz"); const u32 gMonBackPic_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/back.4bpp.lz"); -const u32 gMonBackPic_Meowstic[] = INCBIN_U32("graphics/pokemon/meowstic/back.4bpp.lz"); +const u32 gMonBackPic_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/back.4bpp.lz"); const u32 gMonBackPic_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/back.4bpp.lz"); const u32 gMonBackPic_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/back.4bpp.lz"); -const u32 gMonBackPic_Aegislash[] = INCBIN_U32("graphics/pokemon/aegislash/back.4bpp.lz"); +const u32 gMonBackPic_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/back.4bpp.lz"); const u32 gMonBackPic_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/back.4bpp.lz"); const u32 gMonBackPic_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/back.4bpp.lz"); const u32 gMonBackPic_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/back.4bpp.lz"); @@ -2091,17 +2154,17 @@ const u32 gMonBackPic_Goodra[] = INCBIN_U32("graphics/pokemon/goodra/back.4bpp.l const u32 gMonBackPic_Klefki[] = INCBIN_U32("graphics/pokemon/klefki/back.4bpp.lz"); const u32 gMonBackPic_Phantump[] = INCBIN_U32("graphics/pokemon/phantump/back.4bpp.lz"); const u32 gMonBackPic_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/back.4bpp.lz"); -const u32 gMonBackPic_Pumpkaboo[] = INCBIN_U32("graphics/pokemon/pumpkaboo/back.4bpp.lz"); -const u32 gMonBackPic_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/back.4bpp.lz"); +const u32 gMonBackPic_PumpkabooAverage[] = INCBIN_U32("graphics/pokemon/pumpkaboo/back.4bpp.lz"); +const u32 gMonBackPic_GourgeistAverage[] = INCBIN_U32("graphics/pokemon/gourgeist/back.4bpp.lz"); const u32 gMonBackPic_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/back.4bpp.lz"); const u32 gMonBackPic_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/back.4bpp.lz"); const u32 gMonBackPic_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/back.4bpp.lz"); const u32 gMonBackPic_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/back.4bpp.lz"); -const u32 gMonBackPic_Xerneas[] = INCBIN_U32("graphics/pokemon/xerneas/back.4bpp.lz"); +const u32 gMonBackPic_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/back.4bpp.lz"); const u32 gMonBackPic_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/back.4bpp.lz"); -const u32 gMonBackPic_Zygarde[] = INCBIN_U32("graphics/pokemon/zygarde/back.4bpp.lz"); +const u32 gMonBackPic_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/back.4bpp.lz"); const u32 gMonBackPic_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/back.4bpp.lz"); -const u32 gMonBackPic_Hoopa[] = INCBIN_U32("graphics/pokemon/hoopa/back.4bpp.lz"); +const u32 gMonBackPic_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/back.4bpp.lz"); const u32 gMonBackPic_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/back.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE @@ -2124,12 +2187,12 @@ const u32 gMonBackPic_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/back. const u32 gMonBackPic_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/back.4bpp.lz"); const u32 gMonBackPic_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/back.4bpp.lz"); const u32 gMonBackPic_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/back.4bpp.lz"); -const u32 gMonBackPic_Oricorio[] = INCBIN_U32("graphics/pokemon/oricorio/back.4bpp.lz"); +const u32 gMonBackPic_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/back.4bpp.lz"); const u32 gMonBackPic_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/back.4bpp.lz"); const u32 gMonBackPic_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/back.4bpp.lz"); const u32 gMonBackPic_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/back.4bpp.lz"); -const u32 gMonBackPic_Lycanroc[] = INCBIN_U32("graphics/pokemon/lycanroc/back.4bpp.lz"); -const u32 gMonBackPic_Wishiwashi[] = INCBIN_U32("graphics/pokemon/wishiwashi/back.4bpp.lz"); +const u32 gMonBackPic_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/back.4bpp.lz"); +const u32 gMonBackPic_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/back.4bpp.lz"); const u32 gMonBackPic_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/back.4bpp.lz"); const u32 gMonBackPic_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/back.4bpp.lz"); const u32 gMonBackPic_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/back.4bpp.lz"); @@ -2157,11 +2220,11 @@ const u32 gMonBackPic_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/back. const u32 gMonBackPic_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/back.4bpp.lz"); const u32 gMonBackPic_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/back.4bpp.lz"); const u32 gMonBackPic_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/back.4bpp.lz"); -const u32 gMonBackPic_Minior[] = INCBIN_U32("graphics/pokemon/minior/back.4bpp.lz"); +const u32 gMonBackPic_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/back.4bpp.lz"); const u32 gMonBackPic_Komala[] = INCBIN_U32("graphics/pokemon/komala/back.4bpp.lz"); const u32 gMonBackPic_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/back.4bpp.lz"); const u32 gMonBackPic_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/back.4bpp.lz"); -const u32 gMonBackPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/back.4bpp.lz"); +const u32 gMonBackPic_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/back.4bpp.lz"); const u32 gMonBackPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/back.4bpp.lz"); const u32 gMonBackPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/back.4bpp.lz"); const u32 gMonBackPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/back.4bpp.lz"); @@ -2234,7 +2297,7 @@ const u32 gMonBackPic_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/back. const u32 gMonBackPic_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/back.4bpp.lz"); const u32 gMonBackPic_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/back.4bpp.lz"); const u32 gMonBackPic_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/back.4bpp.lz"); -const u32 gMonBackPic_Toxtricity[] = INCBIN_U32("graphics/pokemon/toxtricity/back.4bpp.lz"); +const u32 gMonBackPic_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/back.4bpp.lz"); const u32 gMonBackPic_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/back.4bpp.lz"); const u32 gMonBackPic_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/back.4bpp.lz"); const u32 gMonBackPic_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/back.4bpp.lz"); @@ -2260,9 +2323,9 @@ const u32 gMonBackPic_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchin/bac const u32 gMonBackPic_Snom[] = INCBIN_U32("graphics/pokemon/snom/back.4bpp.lz"); const u32 gMonBackPic_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/back.4bpp.lz"); const u32 gMonBackPic_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/back.4bpp.lz"); -const u32 gMonBackPic_Eiscue[] = INCBIN_U32("graphics/pokemon/eiscue/back.4bpp.lz"); -const u32 gMonBackPic_Indeedee[] = INCBIN_U32("graphics/pokemon/indeedee/back.4bpp.lz"); -const u32 gMonBackPic_Morpeko[] = INCBIN_U32("graphics/pokemon/morpeko/back.4bpp.lz"); +const u32 gMonBackPic_EiscueIceFace[] = INCBIN_U32("graphics/pokemon/eiscue/back.4bpp.lz"); +const u32 gMonBackPic_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/back.4bpp.lz"); +const u32 gMonBackPic_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/back.4bpp.lz"); const u32 gMonBackPic_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/back.4bpp.lz"); const u32 gMonBackPic_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/back.4bpp.lz"); const u32 gMonBackPic_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/back.4bpp.lz"); @@ -2273,11 +2336,11 @@ const u32 gMonBackPic_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/back. const u32 gMonBackPic_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/back.4bpp.lz"); const u32 gMonBackPic_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/back.4bpp.lz"); const u32 gMonBackPic_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/back.4bpp.lz"); -const u32 gMonBackPic_Zacian[] = INCBIN_U32("graphics/pokemon/zacian/back.4bpp.lz"); -const u32 gMonBackPic_Zamazenta[] = INCBIN_U32("graphics/pokemon/zamazenta/back.4bpp.lz"); +const u32 gMonBackPic_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/back.4bpp.lz"); +const u32 gMonBackPic_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/back.4bpp.lz"); const u32 gMonBackPic_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/back.4bpp.lz"); const u32 gMonBackPic_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/back.4bpp.lz"); -const u32 gMonBackPic_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/back.4bpp.lz"); +const u32 gMonBackPic_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/back.4bpp.lz"); const u32 gMonBackPic_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/back.4bpp.lz"); const u32 gMonBackPic_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/back.4bpp.lz"); const u32 gMonBackPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/back.4bpp.lz"); @@ -2287,10 +2350,10 @@ const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); -const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); +const u32 gMonBackPic_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); -const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); +const u32 gMonBackPic_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); #endif const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); @@ -2383,7 +2446,7 @@ const u32 gMonBackPic_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzago const u32 gMonBackPic_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/back.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE const u32 gMonBackPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/back.4bpp.lz"); -const u32 gMonBackPic_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/back.4bpp.lz"); +const u32 gMonBackPic_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/back.4bpp.lz"); const u32 gMonBackPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/back.4bpp.lz"); const u32 gMonBackPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/back.4bpp.lz"); #endif @@ -2480,7 +2543,7 @@ const u32 gMonBackPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/ba const u32 gMonBackPic_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/back.4bpp.lz"); const u32 gMonBackPic_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/back.4bpp.lz"); const u32 gMonBackPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/back.4bpp.lz"); -const u32 gMonBackPic_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/back.4bpp.lz"); +const u32 gMonBackPic_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/back.4bpp.lz"); const u32 gMonBackPic_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/back.4bpp.lz"); const u32 gMonBackPic_SawsbuckAutumn[] = INCBIN_U32("graphics/pokemon/sawsbuck/autumn/back.4bpp.lz"); const u32 gMonBackPic_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/back.4bpp.lz"); @@ -2554,14 +2617,6 @@ const u32 gMonBackPic_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/mag const u32 gMonBackPic_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/back.4bpp.lz"); const u32 gMonBackPic_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/back.4bpp.lz"); const u32 gMonBackPic_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_cream/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/matcha_cream/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/mint_cream/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/lemon_cream/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/salted_cream/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_swirl/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/caramel_swirl/back.4bpp.lz"); -const u32 gMonBackPic_AlcremieRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/rainbow_swirl/back.4bpp.lz"); const u32 gMonBackPic_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/back.4bpp.lz"); const u32 gMonBackPic_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/back.4bpp.lz"); const u32 gMonBackPic_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/back.4bpp.lz"); @@ -2574,6 +2629,39 @@ const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/i const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz"); const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); const u32 gMonBackPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); +const u32 gMonBackPic_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_UrshifuSingleStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/back.4bpp.lz"); +const u32 gMonBackPic_UrshifuRapidStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/back.4bpp.lz"); #endif const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz"); @@ -2928,7 +3016,7 @@ const u32 gMonPalette_Anorith[] = INCBIN_U32("graphics/pokemon/anorith/normal.gb const u32 gMonPalette_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/normal.gbapal.lz"); const u32 gMonPalette_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/normal.gbapal.lz"); const u32 gMonPalette_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/normal.gbapal.lz"); -const u32 gMonPalette_Castform[] = INCBIN_U32("graphics/pokemon/castform/normal.gbapal.lz"); +const u32 gMonPalette_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/normal.gbapal.lz"); const u32 gMonPalette_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/normal.gbapal.lz"); const u32 gMonPalette_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/normal.gbapal.lz"); const u32 gMonPalette_Banette[] = INCBIN_U32("graphics/pokemon/banette/normal.gbapal.lz"); @@ -2963,7 +3051,7 @@ const u32 gMonPalette_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/normal.gbap const u32 gMonPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/normal.gbapal.lz"); const u32 gMonPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/normal.gbapal.lz"); const u32 gMonPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/normal.gbapal.lz"); -const u32 gMonPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/normal.gbapal.lz"); +const u32 gMonPalette_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/normal.gbapal.lz"); #if P_GEN_4_POKEMON == TRUE const u32 gMonPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/normal.gbapal.lz"); const u32 gMonPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/normal.gbapal.lz"); @@ -2990,8 +3078,8 @@ const u32 gMonPalette_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/normal. const u32 gMonPalette_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/normal.gbapal.lz"); const u32 gMonPalette_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/normal.gbapal.lz"); const u32 gMonPalette_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/normal.gbapal.lz"); -const u32 gMonPalette_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/normal.gbapal.lz"); -const u32 gMonPalette_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz"); +const u32 gMonPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/normal.gbapal.lz"); +const u32 gMonPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz"); const u32 gMonPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/normal.gbapal.lz"); const u32 gMonPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/normal.gbapal.lz"); const u32 gMonPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/normalf.gbapal.lz"); @@ -3000,9 +3088,9 @@ const u32 gMonPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/norma const u32 gMonPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/normal.gbapal.lz"); const u32 gMonPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/normal.gbapal.lz"); const u32 gMonPalette_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/normal.gbapal.lz"); -const u32 gMonPalette_Cherrim[] = INCBIN_U32("graphics/pokemon/cherrim/normal/normal.gbapal.lz"); -const u32 gMonPalette_Shellos[] = INCBIN_U32("graphics/pokemon/shellos/normal.gbapal.lz"); -const u32 gMonPalette_Gastrodon[] = INCBIN_U32("graphics/pokemon/gastrodon/normal.gbapal.lz"); +const u32 gMonPalette_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/normal.gbapal.lz"); +const u32 gMonPalette_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/normal.gbapal.lz"); +const u32 gMonPalette_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/normal.gbapal.lz"); const u32 gMonPalette_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/normal.gbapal.lz"); const u32 gMonPalette_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/normal.gbapal.lz"); const u32 gMonPalette_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/normal.gbapal.lz"); @@ -3068,12 +3156,12 @@ const u32 gMonPalette_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/normal.gbap const u32 gMonPalette_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/normal.gbapal.lz"); const u32 gMonPalette_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/normal.gbapal.lz"); const u32 gMonPalette_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/normal.gbapal.lz"); -const u32 gMonPalette_Giratina[] = INCBIN_U32("graphics/pokemon/giratina/normal.gbapal.lz"); +const u32 gMonPalette_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/normal.gbapal.lz"); const u32 gMonPalette_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/normal.gbapal.lz"); const u32 gMonPalette_Phione[] = INCBIN_U32("graphics/pokemon/phione/normal.gbapal.lz"); const u32 gMonPalette_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/normal.gbapal.lz"); const u32 gMonPalette_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/normal.gbapal.lz"); -const u32 gMonPalette_Shaymin[] = INCBIN_U32("graphics/pokemon/shaymin/normal.gbapal.lz"); +const u32 gMonPalette_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/normal.gbapal.lz"); const u32 gMonPalette_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/normal.gbapal.lz"); #endif #if P_GEN_5_POKEMON == TRUE @@ -3134,12 +3222,12 @@ const u32 gMonPalette_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/normal. const u32 gMonPalette_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/normal.gbapal.lz"); const u32 gMonPalette_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/normal.gbapal.lz"); const u32 gMonPalette_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/normal.gbapal.lz"); -const u32 gMonPalette_Basculin[] = INCBIN_U32("graphics/pokemon/basculin/normal.gbapal.lz"); +const u32 gMonPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/normal.gbapal.lz"); const u32 gMonPalette_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/normal.gbapal.lz"); const u32 gMonPalette_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/normal.gbapal.lz"); const u32 gMonPalette_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/normal.gbapal.lz"); const u32 gMonPalette_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/normal.gbapal.lz"); -const u32 gMonPalette_Darmanitan[] = INCBIN_U32("graphics/pokemon/darmanitan/normal.gbapal.lz"); +const u32 gMonPalette_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/normal.gbapal.lz"); const u32 gMonPalette_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/normal.gbapal.lz"); const u32 gMonPalette_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/normal.gbapal.lz"); const u32 gMonPalette_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/normal.gbapal.lz"); @@ -3169,8 +3257,8 @@ const u32 gMonPalette_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/normal.gbap const u32 gMonPalette_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/normal.gbapal.lz"); const u32 gMonPalette_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/normal.gbapal.lz"); const u32 gMonPalette_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/normal.gbapal.lz"); -const u32 gMonPalette_Deerling[] = INCBIN_U32("graphics/pokemon/deerling/normal.gbapal.lz"); -const u32 gMonPalette_Sawsbuck[] = INCBIN_U32("graphics/pokemon/sawsbuck/normal.gbapal.lz"); +const u32 gMonPalette_DeerlingSpring[] = INCBIN_U32("graphics/pokemon/deerling/normal.gbapal.lz"); +const u32 gMonPalette_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/normal.gbapal.lz"); const u32 gMonPalette_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/normal.gbapal.lz"); const u32 gMonPalette_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/normal.gbapal.lz"); const u32 gMonPalette_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/normal.gbapal.lz"); @@ -3227,14 +3315,14 @@ const u32 gMonPalette_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/norma const u32 gMonPalette_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/normal.gbapal.lz"); const u32 gMonPalette_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/normal.gbapal.lz"); const u32 gMonPalette_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/normal.gbapal.lz"); -const u32 gMonPalette_Tornadus[] = INCBIN_U32("graphics/pokemon/tornadus/normal.gbapal.lz"); -const u32 gMonPalette_Thundurus[] = INCBIN_U32("graphics/pokemon/thundurus/normal.gbapal.lz"); +const u32 gMonPalette_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/normal.gbapal.lz"); +const u32 gMonPalette_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/normal.gbapal.lz"); const u32 gMonPalette_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/normal.gbapal.lz"); const u32 gMonPalette_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/normal.gbapal.lz"); -const u32 gMonPalette_Landorus[] = INCBIN_U32("graphics/pokemon/landorus/normal.gbapal.lz"); +const u32 gMonPalette_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/normal.gbapal.lz"); const u32 gMonPalette_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/normal.gbapal.lz"); -const u32 gMonPalette_Keldeo[] = INCBIN_U32("graphics/pokemon/keldeo/normal.gbapal.lz"); -const u32 gMonPalette_Meloetta[] = INCBIN_U32("graphics/pokemon/meloetta/normal.gbapal.lz"); +const u32 gMonPalette_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/normal.gbapal.lz"); +const u32 gMonPalette_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/normal.gbapal.lz"); const u32 gMonPalette_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/normal.gbapal.lz"); #endif #if P_GEN_6_POKEMON == TRUE @@ -3254,22 +3342,22 @@ const u32 gMonPalette_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/n const u32 gMonPalette_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/normal.gbapal.lz"); const u32 gMonPalette_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/normal.gbapal.lz"); const u32 gMonPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/normal.gbapal.lz"); -const u32 gMonPalette_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/normal.gbapal.lz"); +const u32 gMonPalette_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/normal.gbapal.lz"); const u32 gMonPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/normal.gbapal.lz"); const u32 gMonPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/normal.gbapal.lz"); -const u32 gMonPalette_Flabebe[] = INCBIN_U32("graphics/pokemon/flabebe/normal.gbapal.lz"); -const u32 gMonPalette_Floette[] = INCBIN_U32("graphics/pokemon/floette/normal.gbapal.lz"); -const u32 gMonPalette_Florges[] = INCBIN_U32("graphics/pokemon/florges/normal.gbapal.lz"); +const u32 gMonPalette_FlabebeRedFlower[] = INCBIN_U32("graphics/pokemon/flabebe/normal.gbapal.lz"); +const u32 gMonPalette_FloetteRedFlower[] = INCBIN_U32("graphics/pokemon/floette/normal.gbapal.lz"); +const u32 gMonPalette_FlorgesRedFlower[] = INCBIN_U32("graphics/pokemon/florges/normal.gbapal.lz"); const u32 gMonPalette_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/normal.gbapal.lz"); const u32 gMonPalette_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/normal.gbapal.lz"); const u32 gMonPalette_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/normal.gbapal.lz"); const u32 gMonPalette_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/normal.gbapal.lz"); -const u32 gMonPalette_Furfrou[] = INCBIN_U32("graphics/pokemon/furfrou/normal.gbapal.lz"); +const u32 gMonPalette_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/normal.gbapal.lz"); const u32 gMonPalette_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/normal.gbapal.lz"); -const u32 gMonPalette_Meowstic[] = INCBIN_U32("graphics/pokemon/meowstic/normal.gbapal.lz"); +const u32 gMonPalette_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/normal.gbapal.lz"); const u32 gMonPalette_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/normal.gbapal.lz"); const u32 gMonPalette_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/normal.gbapal.lz"); -const u32 gMonPalette_Aegislash[] = INCBIN_U32("graphics/pokemon/aegislash/normal.gbapal.lz"); +const u32 gMonPalette_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/normal.gbapal.lz"); const u32 gMonPalette_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/normal.gbapal.lz"); const u32 gMonPalette_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/normal.gbapal.lz"); const u32 gMonPalette_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/normal.gbapal.lz"); @@ -3304,11 +3392,11 @@ const u32 gMonPalette_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/normal. const u32 gMonPalette_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/normal.gbapal.lz"); const u32 gMonPalette_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/normal.gbapal.lz"); const u32 gMonPalette_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/normal.gbapal.lz"); -const u32 gMonPalette_Xerneas[] = INCBIN_U32("graphics/pokemon/xerneas/normal.gbapal.lz"); +const u32 gMonPalette_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/normal.gbapal.lz"); const u32 gMonPalette_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/normal.gbapal.lz"); -const u32 gMonPalette_Zygarde[] = INCBIN_U32("graphics/pokemon/zygarde/normal.gbapal.lz"); +const u32 gMonPalette_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/normal.gbapal.lz"); const u32 gMonPalette_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/normal.gbapal.lz"); -const u32 gMonPalette_Hoopa[] = INCBIN_U32("graphics/pokemon/hoopa/normal.gbapal.lz"); +const u32 gMonPalette_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/normal.gbapal.lz"); const u32 gMonPalette_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/normal.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE @@ -3331,12 +3419,12 @@ const u32 gMonPalette_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/norma const u32 gMonPalette_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/normal.gbapal.lz"); const u32 gMonPalette_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/normal.gbapal.lz"); const u32 gMonPalette_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/normal.gbapal.lz"); -const u32 gMonPalette_Oricorio[] = INCBIN_U32("graphics/pokemon/oricorio/normal.gbapal.lz"); +const u32 gMonPalette_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/normal.gbapal.lz"); const u32 gMonPalette_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/normal.gbapal.lz"); const u32 gMonPalette_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/normal.gbapal.lz"); const u32 gMonPalette_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/normal.gbapal.lz"); -const u32 gMonPalette_Lycanroc[] = INCBIN_U32("graphics/pokemon/lycanroc/normal.gbapal.lz"); -const u32 gMonPalette_Wishiwashi[] = INCBIN_U32("graphics/pokemon/wishiwashi/normal.gbapal.lz"); +const u32 gMonPalette_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/normal.gbapal.lz"); +const u32 gMonPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/normal.gbapal.lz"); const u32 gMonPalette_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/normal.gbapal.lz"); const u32 gMonPalette_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/normal.gbapal.lz"); const u32 gMonPalette_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/normal.gbapal.lz"); @@ -3363,12 +3451,12 @@ const u32 gMonPalette_Sandygast[] = INCBIN_U32("graphics/pokemon/sandygast/norma const u32 gMonPalette_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/normal.gbapal.lz"); const u32 gMonPalette_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/normal.gbapal.lz"); const u32 gMonPalette_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/normal.gbapal.lz"); -const u32 gMonPalette_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/normal.gbapal.lz"); -const u32 gMonPalette_Minior[] = INCBIN_U32("graphics/pokemon/minior/normal.gbapal.lz"); +const u32 gMonPalette_SilvallyNormal[] = INCBIN_U32("graphics/pokemon/silvally/normal.gbapal.lz"); +const u32 gMonPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/normal.gbapal.lz"); const u32 gMonPalette_Komala[] = INCBIN_U32("graphics/pokemon/komala/normal.gbapal.lz"); const u32 gMonPalette_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/normal.gbapal.lz"); const u32 gMonPalette_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/normal.gbapal.lz"); -const u32 gMonPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/normal.gbapal.lz"); +const u32 gMonPalette_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/normal.gbapal.lz"); const u32 gMonPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/normal.gbapal.lz"); const u32 gMonPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/normal.gbapal.lz"); const u32 gMonPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/normal.gbapal.lz"); @@ -3441,7 +3529,7 @@ const u32 gMonPalette_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/norma const u32 gMonPalette_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/normal.gbapal.lz"); const u32 gMonPalette_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/normal.gbapal.lz"); const u32 gMonPalette_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/normal.gbapal.lz"); -const u32 gMonPalette_Toxtricity[] = INCBIN_U32("graphics/pokemon/toxtricity/normal.gbapal.lz"); +const u32 gMonPalette_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/normal.gbapal.lz"); const u32 gMonPalette_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/normal.gbapal.lz"); const u32 gMonPalette_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/normal.gbapal.lz"); const u32 gMonPalette_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/normal.gbapal.lz"); @@ -3467,9 +3555,9 @@ const u32 gMonPalette_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchin/nor const u32 gMonPalette_Snom[] = INCBIN_U32("graphics/pokemon/snom/normal.gbapal.lz"); const u32 gMonPalette_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/normal.gbapal.lz"); const u32 gMonPalette_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/normal.gbapal.lz"); -const u32 gMonPalette_Eiscue[] = INCBIN_U32("graphics/pokemon/eiscue/normal.gbapal.lz"); -const u32 gMonPalette_Indeedee[] = INCBIN_U32("graphics/pokemon/indeedee/normal.gbapal.lz"); -const u32 gMonPalette_Morpeko[] = INCBIN_U32("graphics/pokemon/morpeko/normal.gbapal.lz"); +const u32 gMonPalette_EiscueIceFace[] = INCBIN_U32("graphics/pokemon/eiscue/normal.gbapal.lz"); +const u32 gMonPalette_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/normal.gbapal.lz"); +const u32 gMonPalette_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/normal.gbapal.lz"); const u32 gMonPalette_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/normal.gbapal.lz"); const u32 gMonPalette_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/normal.gbapal.lz"); const u32 gMonPalette_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/normal.gbapal.lz"); @@ -3480,11 +3568,11 @@ const u32 gMonPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/norma const u32 gMonPalette_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/normal.gbapal.lz"); const u32 gMonPalette_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/normal.gbapal.lz"); const u32 gMonPalette_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/normal.gbapal.lz"); -const u32 gMonPalette_Zacian[] = INCBIN_U32("graphics/pokemon/zacian/normal.gbapal.lz"); -const u32 gMonPalette_Zamazenta[] = INCBIN_U32("graphics/pokemon/zamazenta/normal.gbapal.lz"); +const u32 gMonPalette_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/normal.gbapal.lz"); +const u32 gMonPalette_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/normal.gbapal.lz"); const u32 gMonPalette_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/normal.gbapal.lz"); const u32 gMonPalette_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/normal.gbapal.lz"); -const u32 gMonPalette_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/normal.gbapal.lz"); +const u32 gMonPalette_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/normal.gbapal.lz"); const u32 gMonPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/normal.gbapal.lz"); const u32 gMonPalette_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/normal.gbapal.lz"); const u32 gMonPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/normal.gbapal.lz"); @@ -3494,10 +3582,10 @@ const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gb const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); -const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); +const u32 gMonPalette_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); -const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); +const u32 gMonPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); #endif const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz"); const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz"); @@ -3590,7 +3678,7 @@ const u32 gMonPalette_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzago const u32 gMonPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/normal.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE const u32 gMonPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/normal.gbapal.lz"); -const u32 gMonPalette_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/normal.gbapal.lz"); +const u32 gMonPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/normal.gbapal.lz"); const u32 gMonPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/normal.gbapal.lz"); const u32 gMonPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/normal.gbapal.lz"); #endif @@ -3676,7 +3764,7 @@ const u32 gMonPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/ const u32 gMonPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/normal.gbapal.lz"); const u32 gMonPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/normal.gbapal.lz"); const u32 gMonPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/normal.gbapal.lz"); -const u32 gMonPalette_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/normal.gbapal.lz"); +const u32 gMonPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/normal.gbapal.lz"); const u32 gMonPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/normal.gbapal.lz"); const u32 gMonPalette_DeerlingAutumn[] = INCBIN_U32("graphics/pokemon/deerling/autumn/normal.gbapal.lz"); const u32 gMonPalette_DeerlingWinter[] = INCBIN_U32("graphics/pokemon/deerling/winter/normal.gbapal.lz"); @@ -3786,14 +3874,6 @@ const u32 gMonPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/mag const u32 gMonPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/normal.gbapal.lz"); const u32 gMonPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/normal.gbapal.lz"); const u32 gMonPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_cream/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/matcha_cream/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/mint_cream/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/lemon_cream/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/salted_cream/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_swirl/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/caramel_swirl/normal.gbapal.lz"); -const u32 gMonPalette_AlcremieRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/rainbow_swirl/normal.gbapal.lz"); const u32 gMonPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/normal.gbapal.lz"); const u32 gMonPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/normal.gbapal.lz"); const u32 gMonPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/normal.gbapal.lz"); @@ -3806,6 +3886,39 @@ const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/i const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz"); const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); const u32 gMonPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); +const u32 gMonPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_UrshifuSingleStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/normal.gbapal.lz"); +const u32 gMonPalette_UrshifuRapidStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/normal.gbapal.lz"); #endif const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); @@ -4161,7 +4274,7 @@ const u32 gMonShinyPalette_Anorith[] = INCBIN_U32("graphics/pokemon/anorith/shin const u32 gMonShinyPalette_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/shiny.gbapal.lz"); const u32 gMonShinyPalette_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/shiny.gbapal.lz"); const u32 gMonShinyPalette_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Castform[] = INCBIN_U32("graphics/pokemon/castform/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/shiny.gbapal.lz"); const u32 gMonShinyPalette_Banette[] = INCBIN_U32("graphics/pokemon/banette/shiny.gbapal.lz"); @@ -4196,7 +4309,7 @@ const u32 gMonShinyPalette_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/shiny. const u32 gMonShinyPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/shiny.gbapal.lz"); const u32 gMonShinyPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/shiny.gbapal.lz"); #if P_GEN_4_POKEMON == TRUE const u32 gMonShinyPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/shiny.gbapal.lz"); const u32 gMonShinyPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/shiny.gbapal.lz"); @@ -4223,8 +4336,8 @@ const u32 gMonShinyPalette_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/sh const u32 gMonShinyPalette_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/shiny.gbapal.lz"); const u32 gMonShinyPalette_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/shiny.gbapal.lz"); +const u32 gMonShinyPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/shiny.gbapal.lz"); const u32 gMonShinyPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/shiny.gbapal.lz"); const u32 gMonShinyPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/shiny.gbapal.lz"); const u32 gMonShinyPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/shinyf.gbapal.lz"); @@ -4233,9 +4346,9 @@ const u32 gMonShinyPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/ const u32 gMonShinyPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/shiny.gbapal.lz"); const u32 gMonShinyPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/shiny.gbapal.lz"); const u32 gMonShinyPalette_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Cherrim[] = INCBIN_U32("graphics/pokemon/cherrim/normal/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Shellos[] = INCBIN_U32("graphics/pokemon/shellos/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Gastrodon[] = INCBIN_U32("graphics/pokemon/gastrodon/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/shiny.gbapal.lz"); @@ -4301,12 +4414,12 @@ const u32 gMonShinyPalette_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/shiny. const u32 gMonShinyPalette_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/shiny.gbapal.lz"); const u32 gMonShinyPalette_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/shiny.gbapal.lz"); const u32 gMonShinyPalette_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Giratina[] = INCBIN_U32("graphics/pokemon/giratina/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/shiny.gbapal.lz"); const u32 gMonShinyPalette_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/shiny.gbapal.lz"); const u32 gMonShinyPalette_Phione[] = INCBIN_U32("graphics/pokemon/phione/shiny.gbapal.lz"); const u32 gMonShinyPalette_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/shiny.gbapal.lz"); const u32 gMonShinyPalette_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Shaymin[] = INCBIN_U32("graphics/pokemon/shaymin/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/shiny.gbapal.lz"); const u32 gMonShinyPalette_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/shiny.gbapal.lz"); #endif #if P_GEN_5_POKEMON == TRUE @@ -4367,12 +4480,12 @@ const u32 gMonShinyPalette_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/sh const u32 gMonShinyPalette_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/shiny.gbapal.lz"); const u32 gMonShinyPalette_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/shiny.gbapal.lz"); const u32 gMonShinyPalette_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Basculin[] = INCBIN_U32("graphics/pokemon/basculin/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/shiny.gbapal.lz"); const u32 gMonShinyPalette_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/shiny.gbapal.lz"); const u32 gMonShinyPalette_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/shiny.gbapal.lz"); const u32 gMonShinyPalette_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Darmanitan[] = INCBIN_U32("graphics/pokemon/darmanitan/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/shiny.gbapal.lz"); const u32 gMonShinyPalette_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/shiny.gbapal.lz"); const u32 gMonShinyPalette_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/shiny.gbapal.lz"); @@ -4402,8 +4515,8 @@ const u32 gMonShinyPalette_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/shiny. const u32 gMonShinyPalette_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/shiny.gbapal.lz"); const u32 gMonShinyPalette_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/shiny.gbapal.lz"); const u32 gMonShinyPalette_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Deerling[] = INCBIN_U32("graphics/pokemon/deerling/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Sawsbuck[] = INCBIN_U32("graphics/pokemon/sawsbuck/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DeerlingSpring[] = INCBIN_U32("graphics/pokemon/deerling/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/shiny.gbapal.lz"); const u32 gMonShinyPalette_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/shiny.gbapal.lz"); const u32 gMonShinyPalette_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/shiny.gbapal.lz"); const u32 gMonShinyPalette_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/shiny.gbapal.lz"); @@ -4460,14 +4573,14 @@ const u32 gMonShinyPalette_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/ const u32 gMonShinyPalette_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/shiny.gbapal.lz"); const u32 gMonShinyPalette_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/shiny.gbapal.lz"); const u32 gMonShinyPalette_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Tornadus[] = INCBIN_U32("graphics/pokemon/tornadus/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Thundurus[] = INCBIN_U32("graphics/pokemon/thundurus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/shiny.gbapal.lz"); const u32 gMonShinyPalette_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/shiny.gbapal.lz"); const u32 gMonShinyPalette_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Landorus[] = INCBIN_U32("graphics/pokemon/landorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Keldeo[] = INCBIN_U32("graphics/pokemon/keldeo/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Meloetta[] = INCBIN_U32("graphics/pokemon/meloetta/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/shiny.gbapal.lz"); const u32 gMonShinyPalette_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/shiny.gbapal.lz"); #endif #if P_GEN_6_POKEMON == TRUE @@ -4487,22 +4600,22 @@ const u32 gMonShinyPalette_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchin const u32 gMonShinyPalette_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/shiny.gbapal.lz"); const u32 gMonShinyPalette_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/shiny.gbapal.lz"); +const u32 gMonShinyPalette_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Flabebe[] = INCBIN_U32("graphics/pokemon/flabebe/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Floette[] = INCBIN_U32("graphics/pokemon/floette/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Florges[] = INCBIN_U32("graphics/pokemon/florges/shiny.gbapal.lz"); +const u32 gMonShinyPalette_FlabebeRedFlower[] = INCBIN_U32("graphics/pokemon/flabebe/shiny.gbapal.lz"); +const u32 gMonShinyPalette_FloetteRedFlower[] = INCBIN_U32("graphics/pokemon/floette/shiny.gbapal.lz"); +const u32 gMonShinyPalette_FlorgesRedFlower[] = INCBIN_U32("graphics/pokemon/florges/shiny.gbapal.lz"); const u32 gMonShinyPalette_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/shiny.gbapal.lz"); const u32 gMonShinyPalette_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Furfrou[] = INCBIN_U32("graphics/pokemon/furfrou/shiny.gbapal.lz"); +const u32 gMonShinyPalette_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/shiny.gbapal.lz"); const u32 gMonShinyPalette_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Meowstic[] = INCBIN_U32("graphics/pokemon/meowstic/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/shiny.gbapal.lz"); const u32 gMonShinyPalette_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/shiny.gbapal.lz"); const u32 gMonShinyPalette_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Aegislash[] = INCBIN_U32("graphics/pokemon/aegislash/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/shiny.gbapal.lz"); const u32 gMonShinyPalette_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/shiny.gbapal.lz"); const u32 gMonShinyPalette_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/shiny.gbapal.lz"); @@ -4537,11 +4650,11 @@ const u32 gMonShinyPalette_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/sh const u32 gMonShinyPalette_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/shiny.gbapal.lz"); const u32 gMonShinyPalette_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/shiny.gbapal.lz"); const u32 gMonShinyPalette_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Xerneas[] = INCBIN_U32("graphics/pokemon/xerneas/shiny.gbapal.lz"); +const u32 gMonShinyPalette_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/shiny.gbapal.lz"); const u32 gMonShinyPalette_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Zygarde[] = INCBIN_U32("graphics/pokemon/zygarde/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/shiny.gbapal.lz"); const u32 gMonShinyPalette_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Hoopa[] = INCBIN_U32("graphics/pokemon/hoopa/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/shiny.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE @@ -4564,12 +4677,12 @@ const u32 gMonShinyPalette_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/ const u32 gMonShinyPalette_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/shiny.gbapal.lz"); const u32 gMonShinyPalette_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Oricorio[] = INCBIN_U32("graphics/pokemon/oricorio/shiny.gbapal.lz"); +const u32 gMonShinyPalette_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/shiny.gbapal.lz"); const u32 gMonShinyPalette_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/shiny.gbapal.lz"); const u32 gMonShinyPalette_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Lycanroc[] = INCBIN_U32("graphics/pokemon/lycanroc/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Wishiwashi[] = INCBIN_U32("graphics/pokemon/wishiwashi/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/shiny.gbapal.lz"); +const u32 gMonShinyPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/shiny.gbapal.lz"); const u32 gMonShinyPalette_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/shiny.gbapal.lz"); const u32 gMonShinyPalette_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/shiny.gbapal.lz"); const u32 gMonShinyPalette_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/shiny.gbapal.lz"); @@ -4596,12 +4709,12 @@ const u32 gMonShinyPalette_Sandygast[] = INCBIN_U32("graphics/pokemon/sandygast/ const u32 gMonShinyPalette_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/shiny.gbapal.lz"); const u32 gMonShinyPalette_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Minior[] = INCBIN_U32("graphics/pokemon/minior/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SilvallyNormal[] = INCBIN_U32("graphics/pokemon/silvally/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/shiny.gbapal.lz"); const u32 gMonShinyPalette_Komala[] = INCBIN_U32("graphics/pokemon/komala/shiny.gbapal.lz"); const u32 gMonShinyPalette_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/shiny.gbapal.lz"); const u32 gMonShinyPalette_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/shiny.gbapal.lz"); const u32 gMonShinyPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/shiny.gbapal.lz"); @@ -4674,7 +4787,7 @@ const u32 gMonShinyPalette_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/ const u32 gMonShinyPalette_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/shiny.gbapal.lz"); const u32 gMonShinyPalette_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/shiny.gbapal.lz"); const u32 gMonShinyPalette_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Toxtricity[] = INCBIN_U32("graphics/pokemon/toxtricity/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/shiny.gbapal.lz"); const u32 gMonShinyPalette_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/shiny.gbapal.lz"); const u32 gMonShinyPalette_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/shiny.gbapal.lz"); @@ -4700,9 +4813,9 @@ const u32 gMonShinyPalette_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchi const u32 gMonShinyPalette_Snom[] = INCBIN_U32("graphics/pokemon/snom/shiny.gbapal.lz"); const u32 gMonShinyPalette_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/shiny.gbapal.lz"); const u32 gMonShinyPalette_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Eiscue[] = INCBIN_U32("graphics/pokemon/eiscue/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Indeedee[] = INCBIN_U32("graphics/pokemon/indeedee/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Morpeko[] = INCBIN_U32("graphics/pokemon/morpeko/shiny.gbapal.lz"); +const u32 gMonShinyPalette_EiscueIceFace[] = INCBIN_U32("graphics/pokemon/eiscue/shiny.gbapal.lz"); +const u32 gMonShinyPalette_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/shiny.gbapal.lz"); const u32 gMonShinyPalette_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/shiny.gbapal.lz"); const u32 gMonShinyPalette_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/shiny.gbapal.lz"); @@ -4713,11 +4826,11 @@ const u32 gMonShinyPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/ const u32 gMonShinyPalette_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Zacian[] = INCBIN_U32("graphics/pokemon/zacian/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Zamazenta[] = INCBIN_U32("graphics/pokemon/zamazenta/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/shiny.gbapal.lz"); const u32 gMonShinyPalette_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/shiny.gbapal.lz"); +const u32 gMonShinyPalette_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/shiny.gbapal.lz"); const u32 gMonShinyPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/shiny.gbapal.lz"); const u32 gMonShinyPalette_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/shiny.gbapal.lz"); const u32 gMonShinyPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/shiny.gbapal.lz"); @@ -4727,10 +4840,10 @@ const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shin const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); @@ -4823,7 +4936,7 @@ const u32 gMonShinyPalette_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zi const u32 gMonShinyPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/shiny.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE const u32 gMonShinyPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/shiny.gbapal.lz"); -const u32 gMonShinyPalette_DarmanitanGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/shiny.gbapal.lz"); #endif @@ -4909,7 +5022,7 @@ const u32 gMonShinyPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/f const u32 gMonShinyPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/shiny.gbapal.lz"); const u32 gMonShinyPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/shiny.gbapal.lz"); const u32 gMonShinyPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/shiny.gbapal.lz"); -const u32 gMonShinyPalette_DarmanitanZenModeGalarian[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeerlingAutumn[] = INCBIN_U32("graphics/pokemon/deerling/autumn/shiny.gbapal.lz"); const u32 gMonShinyPalette_DeerlingWinter[] = INCBIN_U32("graphics/pokemon/deerling/winter/shiny.gbapal.lz"); @@ -5013,14 +5126,6 @@ const u32 gMonShinyPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemo const u32 gMonShinyPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/shiny.gbapal.lz"); const u32 gMonShinyPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/shiny.gbapal.lz"); const u32 gMonShinyPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_cream/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/matcha_cream/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/mint_cream/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/lemon_cream/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/salted_cream/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ruby_swirl/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/caramel_swirl/shiny.gbapal.lz"); -const u32 gMonShinyPalette_AlcremieRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/rainbow_swirl/shiny.gbapal.lz"); const u32 gMonShinyPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/shiny.gbapal.lz"); const u32 gMonShinyPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/shiny.gbapal.lz"); const u32 gMonShinyPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/shiny.gbapal.lz"); @@ -5033,6 +5138,39 @@ const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/caly const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz"); const u32 gMonShinyPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); +const u32 gMonShinyPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_UrshifuSingleStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/shiny.gbapal.lz"); +const u32 gMonShinyPalette_UrshifuRapidStrikeGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/shiny.gbapal.lz"); #endif const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp"); @@ -5061,6 +5199,9 @@ const u8 gMonIcon_Fearow[] = INCBIN_U8("graphics/pokemon/fearow/icon.4bpp"); const u8 gMonIcon_Ekans[] = INCBIN_U8("graphics/pokemon/ekans/icon.4bpp"); const u8 gMonIcon_Arbok[] = INCBIN_U8("graphics/pokemon/arbok/icon.4bpp"); const u8 gMonIcon_Pikachu[] = INCBIN_U8("graphics/pokemon/pikachu/icon.4bpp"); +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE +const u8 gMonIcon_PikachuF[] = INCBIN_U8("graphics/pokemon/pikachu/iconf.4bpp"); +#endif const u8 gMonIcon_Raichu[] = INCBIN_U8("graphics/pokemon/raichu/icon.4bpp"); const u8 gMonIcon_Sandshrew[] = INCBIN_U8("graphics/pokemon/sandshrew/icon.4bpp"); const u8 gMonIcon_Sandslash[] = INCBIN_U8("graphics/pokemon/sandslash/icon.4bpp"); @@ -5238,6 +5379,9 @@ const u8 gMonIcon_Slowking[] = INCBIN_U8("graphics/pokemon/slowking/icon.4bpp"); const u8 gMonIcon_Misdreavus[] = INCBIN_U8("graphics/pokemon/misdreavus/icon.4bpp"); const u8 gMonIcon_Unown[] = INCBIN_U8("graphics/pokemon/unown/icon.4bpp"); const u8 gMonIcon_Wobbuffet[] = INCBIN_U8("graphics/pokemon/wobbuffet/icon.4bpp"); +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE +const u8 gMonIcon_WobbuffetF[] = INCBIN_U8("graphics/pokemon/wobbuffet/iconf.4bpp"); +#endif const u8 gMonIcon_Girafarig[] = INCBIN_U8("graphics/pokemon/girafarig/icon.4bpp"); const u8 gMonIcon_Pineco[] = INCBIN_U8("graphics/pokemon/pineco/icon.4bpp"); const u8 gMonIcon_Forretress[] = INCBIN_U8("graphics/pokemon/forretress/icon.4bpp"); @@ -5386,7 +5530,7 @@ const u8 gMonIcon_Anorith[] = INCBIN_U8("graphics/pokemon/anorith/icon.4bpp"); const u8 gMonIcon_Armaldo[] = INCBIN_U8("graphics/pokemon/armaldo/icon.4bpp"); const u8 gMonIcon_Feebas[] = INCBIN_U8("graphics/pokemon/feebas/icon.4bpp"); const u8 gMonIcon_Milotic[] = INCBIN_U8("graphics/pokemon/milotic/icon.4bpp"); -const u8 gMonIcon_Castform[] = INCBIN_U8("graphics/pokemon/castform/icon.4bpp"); +const u8 gMonIcon_CastformNormal[] = INCBIN_U8("graphics/pokemon/castform/icon.4bpp"); const u8 gMonIcon_Kecleon[] = INCBIN_U8("graphics/pokemon/kecleon/icon.4bpp"); const u8 gMonIcon_Shuppet[] = INCBIN_U8("graphics/pokemon/shuppet/icon.4bpp"); const u8 gMonIcon_Banette[] = INCBIN_U8("graphics/pokemon/banette/icon.4bpp"); @@ -5421,7 +5565,7 @@ const u8 gMonIcon_Kyogre[] = INCBIN_U8("graphics/pokemon/kyogre/icon.4bpp"); const u8 gMonIcon_Groudon[] = INCBIN_U8("graphics/pokemon/groudon/icon.4bpp"); const u8 gMonIcon_Rayquaza[] = INCBIN_U8("graphics/pokemon/rayquaza/icon.4bpp"); const u8 gMonIcon_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/icon.4bpp"); -const u8 gMonIcon_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp"); +const u8 gMonIcon_DeoxysNormal[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp"); #if P_GEN_4_POKEMON == TRUE const u8 gMonIcon_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/icon.4bpp"); const u8 gMonIcon_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/icon.4bpp"); @@ -5448,8 +5592,8 @@ const u8 gMonIcon_Cranidos[] = INCBIN_U8("graphics/pokemon/cranidos/icon.4bpp"); const u8 gMonIcon_Rampardos[] = INCBIN_U8("graphics/pokemon/rampardos/icon.4bpp"); const u8 gMonIcon_Shieldon[] = INCBIN_U8("graphics/pokemon/shieldon/icon.4bpp"); const u8 gMonIcon_Bastiodon[] = INCBIN_U8("graphics/pokemon/bastiodon/icon.4bpp"); -const u8 gMonIcon_Burmy[] = INCBIN_U8("graphics/pokemon/burmy/icon.4bpp"); -const u8 gMonIcon_Wormadam[] = INCBIN_U8("graphics/pokemon/wormadam/icon.4bpp"); +const u8 gMonIcon_BurmyPlantCloak[] = INCBIN_U8("graphics/pokemon/burmy/icon.4bpp"); +const u8 gMonIcon_WormadamPlantCloak[] = INCBIN_U8("graphics/pokemon/wormadam/icon.4bpp"); const u8 gMonIcon_Mothim[] = INCBIN_U8("graphics/pokemon/mothim/icon.4bpp"); const u8 gMonIcon_Combee[] = INCBIN_U8("graphics/pokemon/combee/icon.4bpp"); const u8 gMonIcon_Vespiquen[] = INCBIN_U8("graphics/pokemon/vespiquen/icon.4bpp"); @@ -5457,9 +5601,9 @@ const u8 gMonIcon_Pachirisu[] = INCBIN_U8("graphics/pokemon/pachirisu/icon.4bpp" const u8 gMonIcon_Buizel[] = INCBIN_U8("graphics/pokemon/buizel/icon.4bpp"); const u8 gMonIcon_Floatzel[] = INCBIN_U8("graphics/pokemon/floatzel/icon.4bpp"); const u8 gMonIcon_Cherubi[] = INCBIN_U8("graphics/pokemon/cherubi/icon.4bpp"); -const u8 gMonIcon_Cherrim[] = INCBIN_U8("graphics/pokemon/cherrim/icon.4bpp"); -const u8 gMonIcon_Shellos[] = INCBIN_U8("graphics/pokemon/shellos/icon.4bpp"); -const u8 gMonIcon_Gastrodon[] = INCBIN_U8("graphics/pokemon/gastrodon/icon.4bpp"); +const u8 gMonIcon_CherrimOvercast[] = INCBIN_U8("graphics/pokemon/cherrim/icon.4bpp"); +const u8 gMonIcon_ShellosWestSea[] = INCBIN_U8("graphics/pokemon/shellos/icon.4bpp"); +const u8 gMonIcon_GastrodonWestSea[] = INCBIN_U8("graphics/pokemon/gastrodon/icon.4bpp"); const u8 gMonIcon_Ambipom[] = INCBIN_U8("graphics/pokemon/ambipom/icon.4bpp"); const u8 gMonIcon_Drifloon[] = INCBIN_U8("graphics/pokemon/drifloon/icon.4bpp"); const u8 gMonIcon_Drifblim[] = INCBIN_U8("graphics/pokemon/drifblim/icon.4bpp"); @@ -5487,7 +5631,7 @@ const u8 gMonIcon_Riolu[] = INCBIN_U8("graphics/pokemon/riolu/icon.4bpp"); const u8 gMonIcon_Lucario[] = INCBIN_U8("graphics/pokemon/lucario/icon.4bpp"); const u8 gMonIcon_Hippopotas[] = INCBIN_U8("graphics/pokemon/hippopotas/icon.4bpp"); const u8 gMonIcon_Hippowdon[] = INCBIN_U8("graphics/pokemon/hippowdon/icon.4bpp"); -#if P_HIPPO_GENDER_DIFF_ICONS == TRUE +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE const u8 gMonIcon_HippopotasF[] = INCBIN_U8("graphics/pokemon/hippopotas/iconf.4bpp"); const u8 gMonIcon_HippowdonF[] = INCBIN_U8("graphics/pokemon/hippowdon/iconf.4bpp"); #endif @@ -5527,12 +5671,12 @@ const u8 gMonIcon_Dialga[] = INCBIN_U8("graphics/pokemon/dialga/icon.4bpp"); const u8 gMonIcon_Palkia[] = INCBIN_U8("graphics/pokemon/palkia/icon.4bpp"); const u8 gMonIcon_Heatran[] = INCBIN_U8("graphics/pokemon/heatran/icon.4bpp"); const u8 gMonIcon_Regigigas[] = INCBIN_U8("graphics/pokemon/regigigas/icon.4bpp"); -const u8 gMonIcon_Giratina[] = INCBIN_U8("graphics/pokemon/giratina/icon.4bpp"); +const u8 gMonIcon_GiratinaAltered[] = INCBIN_U8("graphics/pokemon/giratina/icon.4bpp"); const u8 gMonIcon_Cresselia[] = INCBIN_U8("graphics/pokemon/cresselia/icon.4bpp"); const u8 gMonIcon_Phione[] = INCBIN_U8("graphics/pokemon/phione/icon.4bpp"); const u8 gMonIcon_Manaphy[] = INCBIN_U8("graphics/pokemon/manaphy/icon.4bpp"); const u8 gMonIcon_Darkrai[] = INCBIN_U8("graphics/pokemon/darkrai/icon.4bpp"); -const u8 gMonIcon_Shaymin[] = INCBIN_U8("graphics/pokemon/shaymin/icon.4bpp"); +const u8 gMonIcon_ShayminLand[] = INCBIN_U8("graphics/pokemon/shaymin/icon.4bpp"); const u8 gMonIcon_Arceus[] = INCBIN_U8("graphics/pokemon/arceus/icon.4bpp"); #endif #if P_GEN_5_POKEMON == TRUE @@ -5593,12 +5737,12 @@ const u8 gMonIcon_Cottonee[] = INCBIN_U8("graphics/pokemon/cottonee/icon.4bpp"); const u8 gMonIcon_Whimsicott[] = INCBIN_U8("graphics/pokemon/whimsicott/icon.4bpp"); const u8 gMonIcon_Petilil[] = INCBIN_U8("graphics/pokemon/petilil/icon.4bpp"); const u8 gMonIcon_Lilligant[] = INCBIN_U8("graphics/pokemon/lilligant/icon.4bpp"); -const u8 gMonIcon_Basculin[] = INCBIN_U8("graphics/pokemon/basculin/icon.4bpp"); +const u8 gMonIcon_BasculinRedStriped[] = INCBIN_U8("graphics/pokemon/basculin/icon.4bpp"); const u8 gMonIcon_Sandile[] = INCBIN_U8("graphics/pokemon/sandile/icon.4bpp"); const u8 gMonIcon_Krokorok[] = INCBIN_U8("graphics/pokemon/krokorok/icon.4bpp"); const u8 gMonIcon_Krookodile[] = INCBIN_U8("graphics/pokemon/krookodile/icon.4bpp"); const u8 gMonIcon_Darumaka[] = INCBIN_U8("graphics/pokemon/darumaka/icon.4bpp"); -const u8 gMonIcon_Darmanitan[] = INCBIN_U8("graphics/pokemon/darmanitan/icon.4bpp"); +const u8 gMonIcon_DarmanitanStandardMode[] = INCBIN_U8("graphics/pokemon/darmanitan/icon.4bpp"); const u8 gMonIcon_Maractus[] = INCBIN_U8("graphics/pokemon/maractus/icon.4bpp"); const u8 gMonIcon_Dwebble[] = INCBIN_U8("graphics/pokemon/dwebble/icon.4bpp"); const u8 gMonIcon_Crustle[] = INCBIN_U8("graphics/pokemon/crustle/icon.4bpp"); @@ -5628,8 +5772,8 @@ const u8 gMonIcon_Swanna[] = INCBIN_U8("graphics/pokemon/swanna/icon.4bpp"); const u8 gMonIcon_Vanillite[] = INCBIN_U8("graphics/pokemon/vanillite/icon.4bpp"); const u8 gMonIcon_Vanillish[] = INCBIN_U8("graphics/pokemon/vanillish/icon.4bpp"); const u8 gMonIcon_Vanilluxe[] = INCBIN_U8("graphics/pokemon/vanilluxe/icon.4bpp"); -const u8 gMonIcon_Deerling[] = INCBIN_U8("graphics/pokemon/deerling/icon.4bpp"); -const u8 gMonIcon_Sawsbuck[] = INCBIN_U8("graphics/pokemon/sawsbuck/icon.4bpp"); +const u8 gMonIcon_DeerlingSpring[] = INCBIN_U8("graphics/pokemon/deerling/icon.4bpp"); +const u8 gMonIcon_SawsbuckSpring[] = INCBIN_U8("graphics/pokemon/sawsbuck/icon.4bpp"); const u8 gMonIcon_Emolga[] = INCBIN_U8("graphics/pokemon/emolga/icon.4bpp"); const u8 gMonIcon_Karrablast[] = INCBIN_U8("graphics/pokemon/karrablast/icon.4bpp"); const u8 gMonIcon_Escavalier[] = INCBIN_U8("graphics/pokemon/escavalier/icon.4bpp"); @@ -5686,14 +5830,14 @@ const u8 gMonIcon_Volcarona[] = INCBIN_U8("graphics/pokemon/volcarona/icon.4bpp" const u8 gMonIcon_Cobalion[] = INCBIN_U8("graphics/pokemon/cobalion/icon.4bpp"); const u8 gMonIcon_Terrakion[] = INCBIN_U8("graphics/pokemon/terrakion/icon.4bpp"); const u8 gMonIcon_Virizion[] = INCBIN_U8("graphics/pokemon/virizion/icon.4bpp"); -const u8 gMonIcon_Tornadus[] = INCBIN_U8("graphics/pokemon/tornadus/icon.4bpp"); -const u8 gMonIcon_Thundurus[] = INCBIN_U8("graphics/pokemon/thundurus/icon.4bpp"); +const u8 gMonIcon_TornadusIncarnate[] = INCBIN_U8("graphics/pokemon/tornadus/icon.4bpp"); +const u8 gMonIcon_ThundurusIncarnate[] = INCBIN_U8("graphics/pokemon/thundurus/icon.4bpp"); const u8 gMonIcon_Reshiram[] = INCBIN_U8("graphics/pokemon/reshiram/icon.4bpp"); const u8 gMonIcon_Zekrom[] = INCBIN_U8("graphics/pokemon/zekrom/icon.4bpp"); -const u8 gMonIcon_Landorus[] = INCBIN_U8("graphics/pokemon/landorus/icon.4bpp"); +const u8 gMonIcon_LandorusIncarnate[] = INCBIN_U8("graphics/pokemon/landorus/icon.4bpp"); const u8 gMonIcon_Kyurem[] = INCBIN_U8("graphics/pokemon/kyurem/icon.4bpp"); -const u8 gMonIcon_Keldeo[] = INCBIN_U8("graphics/pokemon/keldeo/icon.4bpp"); -const u8 gMonIcon_Meloetta[] = INCBIN_U8("graphics/pokemon/meloetta/icon.4bpp"); +const u8 gMonIcon_KeldeoOrdinary[] = INCBIN_U8("graphics/pokemon/keldeo/icon.4bpp"); +const u8 gMonIcon_MeloettaAria[] = INCBIN_U8("graphics/pokemon/meloetta/icon.4bpp"); const u8 gMonIcon_Genesect[] = INCBIN_U8("graphics/pokemon/genesect/icon.4bpp"); #endif #if P_GEN_6_POKEMON == TRUE @@ -5713,23 +5857,23 @@ const u8 gMonIcon_Fletchinder[] = INCBIN_U8("graphics/pokemon/fletchinder/icon.4 const u8 gMonIcon_Talonflame[] = INCBIN_U8("graphics/pokemon/talonflame/icon.4bpp"); const u8 gMonIcon_Scatterbug[] = INCBIN_U8("graphics/pokemon/scatterbug/icon.4bpp"); const u8 gMonIcon_Spewpa[] = INCBIN_U8("graphics/pokemon/spewpa/icon.4bpp"); -const u8 gMonIcon_Vivillon[] = INCBIN_U8("graphics/pokemon/vivillon/meadow/icon.4bpp"); +const u8 gMonIcon_VivillonIcySnow[] = INCBIN_U8("graphics/pokemon/vivillon/meadow/icon.4bpp"); const u8 gMonIcon_Litleo[] = INCBIN_U8("graphics/pokemon/litleo/icon.4bpp"); const u8 gMonIcon_Pyroar[] = INCBIN_U8("graphics/pokemon/pyroar/icon.4bpp"); const u8 gMonIcon_PyroarF[] = INCBIN_U8("graphics/pokemon/pyroar/iconf.4bpp"); -const u8 gMonIcon_Flabebe[] = INCBIN_U8("graphics/pokemon/flabebe/icon.4bpp"); -const u8 gMonIcon_Floette[] = INCBIN_U8("graphics/pokemon/floette/icon.4bpp"); -const u8 gMonIcon_Florges[] = INCBIN_U8("graphics/pokemon/florges/icon.4bpp"); +const u8 gMonIcon_FlabebeRedFlower[] = INCBIN_U8("graphics/pokemon/flabebe/icon.4bpp"); +const u8 gMonIcon_FloetteRedFlower[] = INCBIN_U8("graphics/pokemon/floette/icon.4bpp"); +const u8 gMonIcon_FlorgesRedFlower[] = INCBIN_U8("graphics/pokemon/florges/icon.4bpp"); const u8 gMonIcon_Skiddo[] = INCBIN_U8("graphics/pokemon/skiddo/icon.4bpp"); const u8 gMonIcon_Gogoat[] = INCBIN_U8("graphics/pokemon/gogoat/icon.4bpp"); const u8 gMonIcon_Pancham[] = INCBIN_U8("graphics/pokemon/pancham/icon.4bpp"); const u8 gMonIcon_Pangoro[] = INCBIN_U8("graphics/pokemon/pangoro/icon.4bpp"); -const u8 gMonIcon_Furfrou[] = INCBIN_U8("graphics/pokemon/furfrou/icon.4bpp"); +const u8 gMonIcon_FurfrouNatural[] = INCBIN_U8("graphics/pokemon/furfrou/icon.4bpp"); const u8 gMonIcon_Espurr[] = INCBIN_U8("graphics/pokemon/espurr/icon.4bpp"); -const u8 gMonIcon_Meowstic[] = INCBIN_U8("graphics/pokemon/meowstic/icon.4bpp"); +const u8 gMonIcon_MeowsticMale[] = INCBIN_U8("graphics/pokemon/meowstic/icon.4bpp"); const u8 gMonIcon_Honedge[] = INCBIN_U8("graphics/pokemon/honedge/icon.4bpp"); const u8 gMonIcon_Doublade[] = INCBIN_U8("graphics/pokemon/doublade/icon.4bpp"); -const u8 gMonIcon_Aegislash[] = INCBIN_U8("graphics/pokemon/aegislash/icon.4bpp"); +const u8 gMonIcon_AegislashShield[] = INCBIN_U8("graphics/pokemon/aegislash/icon.4bpp"); const u8 gMonIcon_Spritzee[] = INCBIN_U8("graphics/pokemon/spritzee/icon.4bpp"); const u8 gMonIcon_Aromatisse[] = INCBIN_U8("graphics/pokemon/aromatisse/icon.4bpp"); const u8 gMonIcon_Swirlix[] = INCBIN_U8("graphics/pokemon/swirlix/icon.4bpp"); @@ -5764,11 +5908,11 @@ const u8 gMonIcon_Bergmite[] = INCBIN_U8("graphics/pokemon/bergmite/icon.4bpp"); const u8 gMonIcon_Avalugg[] = INCBIN_U8("graphics/pokemon/avalugg/icon.4bpp"); const u8 gMonIcon_Noibat[] = INCBIN_U8("graphics/pokemon/noibat/icon.4bpp"); const u8 gMonIcon_Noivern[] = INCBIN_U8("graphics/pokemon/noivern/icon.4bpp"); -const u8 gMonIcon_Xerneas[] = INCBIN_U8("graphics/pokemon/xerneas/icon.4bpp"); +const u8 gMonIcon_XerneasNeutral[] = INCBIN_U8("graphics/pokemon/xerneas/icon.4bpp"); const u8 gMonIcon_Yveltal[] = INCBIN_U8("graphics/pokemon/yveltal/icon.4bpp"); -const u8 gMonIcon_Zygarde[] = INCBIN_U8("graphics/pokemon/zygarde/icon.4bpp"); +const u8 gMonIcon_Zygarde50[] = INCBIN_U8("graphics/pokemon/zygarde/icon.4bpp"); const u8 gMonIcon_Diancie[] = INCBIN_U8("graphics/pokemon/diancie/icon.4bpp"); -const u8 gMonIcon_Hoopa[] = INCBIN_U8("graphics/pokemon/hoopa/icon.4bpp"); +const u8 gMonIcon_HoopaConfined[] = INCBIN_U8("graphics/pokemon/hoopa/icon.4bpp"); const u8 gMonIcon_Volcanion[] = INCBIN_U8("graphics/pokemon/volcanion/icon.4bpp"); #endif #if P_GEN_7_POKEMON == TRUE @@ -5791,12 +5935,12 @@ const u8 gMonIcon_Charjabug[] = INCBIN_U8("graphics/pokemon/charjabug/icon.4bpp" const u8 gMonIcon_Vikavolt[] = INCBIN_U8("graphics/pokemon/vikavolt/icon.4bpp"); const u8 gMonIcon_Crabrawler[] = INCBIN_U8("graphics/pokemon/crabrawler/icon.4bpp"); const u8 gMonIcon_Crabominable[] = INCBIN_U8("graphics/pokemon/crabominable/icon.4bpp"); -const u8 gMonIcon_Oricorio[] = INCBIN_U8("graphics/pokemon/oricorio/icon.4bpp"); +const u8 gMonIcon_OricorioBaile[] = INCBIN_U8("graphics/pokemon/oricorio/icon.4bpp"); const u8 gMonIcon_Cutiefly[] = INCBIN_U8("graphics/pokemon/cutiefly/icon.4bpp"); const u8 gMonIcon_Ribombee[] = INCBIN_U8("graphics/pokemon/ribombee/icon.4bpp"); const u8 gMonIcon_Rockruff[] = INCBIN_U8("graphics/pokemon/rockruff/icon.4bpp"); -const u8 gMonIcon_Lycanroc[] = INCBIN_U8("graphics/pokemon/lycanroc/icon.4bpp"); -const u8 gMonIcon_Wishiwashi[] = INCBIN_U8("graphics/pokemon/wishiwashi/icon.4bpp"); +const u8 gMonIcon_LycanrocMidday[] = INCBIN_U8("graphics/pokemon/lycanroc/icon.4bpp"); +const u8 gMonIcon_WishiwashiSolo[] = INCBIN_U8("graphics/pokemon/wishiwashi/icon.4bpp"); const u8 gMonIcon_Mareanie[] = INCBIN_U8("graphics/pokemon/mareanie/icon.4bpp"); const u8 gMonIcon_Toxapex[] = INCBIN_U8("graphics/pokemon/toxapex/icon.4bpp"); const u8 gMonIcon_Mudbray[] = INCBIN_U8("graphics/pokemon/mudbray/icon.4bpp"); @@ -5824,11 +5968,11 @@ const u8 gMonIcon_Palossand[] = INCBIN_U8("graphics/pokemon/palossand/icon.4bpp" const u8 gMonIcon_Pyukumuku[] = INCBIN_U8("graphics/pokemon/pyukumuku/icon.4bpp"); const u8 gMonIcon_TypeNull[] = INCBIN_U8("graphics/pokemon/type_null/icon.4bpp"); const u8 gMonIcon_Silvally[] = INCBIN_U8("graphics/pokemon/silvally/icon.4bpp"); -const u8 gMonIcon_Minior[] = INCBIN_U8("graphics/pokemon/minior/icon.4bpp"); +const u8 gMonIcon_MiniorMeteor[] = INCBIN_U8("graphics/pokemon/minior/icon.4bpp"); const u8 gMonIcon_Komala[] = INCBIN_U8("graphics/pokemon/komala/icon.4bpp"); const u8 gMonIcon_Turtonator[] = INCBIN_U8("graphics/pokemon/turtonator/icon.4bpp"); const u8 gMonIcon_Togedemaru[] = INCBIN_U8("graphics/pokemon/togedemaru/icon.4bpp"); -const u8 gMonIcon_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/icon.4bpp"); +const u8 gMonIcon_MimikyuDisguised[] = INCBIN_U8("graphics/pokemon/mimikyu/icon.4bpp"); const u8 gMonIcon_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/icon.4bpp"); const u8 gMonIcon_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/icon.4bpp"); const u8 gMonIcon_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/icon.4bpp"); @@ -5901,7 +6045,7 @@ const u8 gMonIcon_Cramorant[] = INCBIN_U8("graphics/pokemon/cramorant/icon.4bpp" const u8 gMonIcon_Arrokuda[] = INCBIN_U8("graphics/pokemon/arrokuda/icon.4bpp"); const u8 gMonIcon_Barraskewda[] = INCBIN_U8("graphics/pokemon/barraskewda/icon.4bpp"); const u8 gMonIcon_Toxel[] = INCBIN_U8("graphics/pokemon/toxel/icon.4bpp"); -const u8 gMonIcon_Toxtricity[] = INCBIN_U8("graphics/pokemon/toxtricity/icon.4bpp"); +const u8 gMonIcon_ToxtricityAmped[] = INCBIN_U8("graphics/pokemon/toxtricity/icon.4bpp"); const u8 gMonIcon_Sizzlipede[] = INCBIN_U8("graphics/pokemon/sizzlipede/icon.4bpp"); const u8 gMonIcon_Centiskorch[] = INCBIN_U8("graphics/pokemon/centiskorch/icon.4bpp"); const u8 gMonIcon_Clobbopus[] = INCBIN_U8("graphics/pokemon/clobbopus/icon.4bpp"); @@ -5921,15 +6065,23 @@ const u8 gMonIcon_Sirfetchd[] = INCBIN_U8("graphics/pokemon/sirfetchd/icon.4bpp" const u8 gMonIcon_MrRime[] = INCBIN_U8("graphics/pokemon/mr_rime/icon.4bpp"); const u8 gMonIcon_Runerigus[] = INCBIN_U8("graphics/pokemon/runerigus/icon.4bpp"); const u8 gMonIcon_Milcery[] = INCBIN_U8("graphics/pokemon/milcery/icon.4bpp"); -const u8 gMonIcon_Alcremie[] = INCBIN_U8("graphics/pokemon/alcremie/icon.4bpp"); +const u8 gMonIcon_AlcremieStrawberryVanillaCream[] = INCBIN_U8("graphics/pokemon/alcremie/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryRubyCream[] = INCBIN_U8("graphics/pokemon/alcremie/ruby_cream/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryMatchaCream[] = INCBIN_U8("graphics/pokemon/alcremie/matcha_cream/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryMintCream[] = INCBIN_U8("graphics/pokemon/alcremie/mint_cream/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryLemonCream[] = INCBIN_U8("graphics/pokemon/alcremie/lemon_cream/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberrySaltedCream[] = INCBIN_U8("graphics/pokemon/alcremie/salted_cream/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryRubySwirl[] = INCBIN_U8("graphics/pokemon/alcremie/ruby_swirl/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryCaramelSwirl[] = INCBIN_U8("graphics/pokemon/alcremie/caramel_swirl/icon.4bpp"); +//const u8 gMonIcon_AlcremieStrawberryRainbowSwirl[] = INCBIN_U8("graphics/pokemon/alcremie/rainbow_swirl/icon.4bpp"); const u8 gMonIcon_Falinks[] = INCBIN_U8("graphics/pokemon/falinks/icon.4bpp"); const u8 gMonIcon_Pincurchin[] = INCBIN_U8("graphics/pokemon/pincurchin/icon.4bpp"); const u8 gMonIcon_Snom[] = INCBIN_U8("graphics/pokemon/snom/icon.4bpp"); const u8 gMonIcon_Frosmoth[] = INCBIN_U8("graphics/pokemon/frosmoth/icon.4bpp"); const u8 gMonIcon_Stonjourner[] = INCBIN_U8("graphics/pokemon/stonjourner/icon.4bpp"); -const u8 gMonIcon_Eiscue[] = INCBIN_U8("graphics/pokemon/eiscue/icon.4bpp"); -const u8 gMonIcon_Indeedee[] = INCBIN_U8("graphics/pokemon/indeedee/icon.4bpp"); -const u8 gMonIcon_Morpeko[] = INCBIN_U8("graphics/pokemon/morpeko/icon.4bpp"); +const u8 gMonIcon_EiscueIceFace[] = INCBIN_U8("graphics/pokemon/eiscue/icon.4bpp"); +const u8 gMonIcon_IndeedeeMale[] = INCBIN_U8("graphics/pokemon/indeedee/icon.4bpp"); +const u8 gMonIcon_MorpekoFullBelly[] = INCBIN_U8("graphics/pokemon/morpeko/icon.4bpp"); const u8 gMonIcon_Cufant[] = INCBIN_U8("graphics/pokemon/cufant/icon.4bpp"); const u8 gMonIcon_Copperajah[] = INCBIN_U8("graphics/pokemon/copperajah/icon.4bpp"); const u8 gMonIcon_Dracozolt[] = INCBIN_U8("graphics/pokemon/dracozolt/icon.4bpp"); @@ -5940,11 +6092,11 @@ const u8 gMonIcon_Duraludon[] = INCBIN_U8("graphics/pokemon/duraludon/icon.4bpp" const u8 gMonIcon_Dreepy[] = INCBIN_U8("graphics/pokemon/dreepy/icon.4bpp"); const u8 gMonIcon_Drakloak[] = INCBIN_U8("graphics/pokemon/drakloak/icon.4bpp"); const u8 gMonIcon_Dragapult[] = INCBIN_U8("graphics/pokemon/dragapult/icon.4bpp"); -const u8 gMonIcon_Zacian[] = INCBIN_U8("graphics/pokemon/zacian/icon.4bpp"); -const u8 gMonIcon_Zamazenta[] = INCBIN_U8("graphics/pokemon/zamazenta/icon.4bpp"); +const u8 gMonIcon_ZacianHeroOfManyBattles[] = INCBIN_U8("graphics/pokemon/zacian/icon.4bpp"); +const u8 gMonIcon_ZamazentaHeroOfManyBattles[] = INCBIN_U8("graphics/pokemon/zamazenta/icon.4bpp"); const u8 gMonIcon_Eternatus[] = INCBIN_U8("graphics/pokemon/eternatus/icon.4bpp"); const u8 gMonIcon_Kubfu[] = INCBIN_U8("graphics/pokemon/kubfu/icon.4bpp"); -const u8 gMonIcon_Urshifu[] = INCBIN_U8("graphics/pokemon/urshifu/icon.4bpp"); +const u8 gMonIcon_UrshifuSingleStrikeStyle[] = INCBIN_U8("graphics/pokemon/urshifu/icon.4bpp"); const u8 gMonIcon_Zarude[] = INCBIN_U8("graphics/pokemon/zarude/icon.4bpp"); const u8 gMonIcon_Regieleki[] = INCBIN_U8("graphics/pokemon/regieleki/icon.4bpp"); const u8 gMonIcon_Regidrago[] = INCBIN_U8("graphics/pokemon/regidrago/icon.4bpp"); @@ -5954,10 +6106,10 @@ const u8 gMonIcon_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/icon.4bpp"); const u8 gMonIcon_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/icon.4bpp"); const u8 gMonIcon_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/icon.4bpp"); const u8 gMonIcon_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/icon.4bpp"); -const u8 gMonIcon_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); +const u8 gMonIcon_BasculegionMale[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp"); const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp"); -const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); +const u8 gMonIcon_EnamorusIncarnate[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); #endif const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/venusaur/mega/icon.4bpp"); const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/charizard/mega_x/icon.4bpp"); @@ -6050,7 +6202,7 @@ const u8 gMonIcon_ZigzagoonGalarian[] = INCBIN_U8("graphics/pokemon/zigzagoon/ga const u8 gMonIcon_LinooneGalarian[] = INCBIN_U8("graphics/pokemon/linoone/galarian/icon.4bpp"); #if P_GEN_5_POKEMON == TRUE const u8 gMonIcon_DarumakaGalarian[] = INCBIN_U8("graphics/pokemon/darumaka/galarian/icon.4bpp"); -const u8 gMonIcon_DarmanitanGalarian[] = INCBIN_U8("graphics/pokemon/darmanitan/galarian/icon.4bpp"); +const u8 gMonIcon_DarmanitanGalarianStandardMode[] = INCBIN_U8("graphics/pokemon/darmanitan/galarian/icon.4bpp"); const u8 gMonIcon_YamaskGalarian[] = INCBIN_U8("graphics/pokemon/yamask/galarian/icon.4bpp"); const u8 gMonIcon_StunfiskGalarian[] = INCBIN_U8("graphics/pokemon/stunfisk/galarian/icon.4bpp"); #endif @@ -6089,6 +6241,7 @@ const u8 gMonIcon_PikachuUnovaCap[] = INCBIN_U8("graphics/pokemon/pikachu/unova_ const u8 gMonIcon_PikachuKalosCap[] = INCBIN_U8("graphics/pokemon/pikachu/kalos_cap/icon.4bpp"); const u8 gMonIcon_PikachuAlolaCap[] = INCBIN_U8("graphics/pokemon/pikachu/alola_cap/icon.4bpp"); const u8 gMonIcon_PikachuPartnerCap[] = INCBIN_U8("graphics/pokemon/pikachu/partner_cap/icon.4bpp"); +const u8 gMonIcon_PikachuWorldCap[] = INCBIN_U8("graphics/pokemon/pikachu/world_cap/icon.4bpp"); const u8 gMonIcon_PichuSpikyEared[] = INCBIN_U8("graphics/pokemon/pichu/spiky_eared/icon.4bpp"); const u8 gMonIcon_UnownB[] = INCBIN_U8("graphics/pokemon/unown/b/icon.4bpp"); const u8 gMonIcon_UnownC[] = INCBIN_U8("graphics/pokemon/unown/c/icon.4bpp"); @@ -6145,7 +6298,7 @@ const u8 gMonIcon_ShayminSky[] = INCBIN_U8("graphics/pokemon/shaymin/sky/icon.4b const u8 gMonIcon_BasculinBlueStriped[] = INCBIN_U8("graphics/pokemon/basculin/blue_striped/icon.4bpp"); const u8 gMonIcon_BasculinWhiteStriped[] = INCBIN_U8("graphics/pokemon/basculin/white_striped/icon.4bpp"); const u8 gMonIcon_DarmanitanZenMode[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/icon.4bpp"); -const u8 gMonIcon_DarmanitanZenModeGalarian[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/galarian/icon.4bpp"); +const u8 gMonIcon_DarmanitanGalarianZenMode[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/galarian/icon.4bpp"); const u8 gMonIcon_DeerlingSummer[] = INCBIN_U8("graphics/pokemon/deerling/summer/icon.4bpp"); const u8 gMonIcon_DeerlingAutumn[] = INCBIN_U8("graphics/pokemon/deerling/autumn/icon.4bpp"); const u8 gMonIcon_DeerlingWinter[] = INCBIN_U8("graphics/pokemon/deerling/winter/icon.4bpp"); @@ -6234,14 +6387,6 @@ const u8 gMonIcon_MagearnaOriginalColor[] = INCBIN_U8("graphics/pokemon/magearna const u8 gMonIcon_CramorantGulping[] = INCBIN_U8("graphics/pokemon/cramorant/gulping/icon.4bpp"); const u8 gMonIcon_CramorantGorging[] = INCBIN_U8("graphics/pokemon/cramorant/gorging/icon.4bpp"); const u8 gMonIcon_ToxtricityLowKey[] = INCBIN_U8("graphics/pokemon/toxtricity/low_key/icon.4bpp"); -//const u8 gMonIcon_AlcremieRubyCream[] = INCBIN_U8("graphics/pokemon/alcremie/ruby_cream/icon.4bpp"); -//const u8 gMonIcon_AlcremieMatchaCream[] = INCBIN_U8("graphics/pokemon/alcremie/matcha_cream/icon.4bpp"); -//const u8 gMonIcon_AlcremieMintCream[] = INCBIN_U8("graphics/pokemon/alcremie/mint_cream/icon.4bpp"); -//const u8 gMonIcon_AlcremieLemonCream[] = INCBIN_U8("graphics/pokemon/alcremie/lemon_cream/icon.4bpp"); -//const u8 gMonIcon_AlcremieSaltedCream[] = INCBIN_U8("graphics/pokemon/alcremie/salted_cream/icon.4bpp"); -//const u8 gMonIcon_AlcremieRubySwirl[] = INCBIN_U8("graphics/pokemon/alcremie/ruby_swirl/icon.4bpp"); -//const u8 gMonIcon_AlcremieCaramelSwirl[] = INCBIN_U8("graphics/pokemon/alcremie/caramel_swirl/icon.4bpp"); -//const u8 gMonIcon_AlcremieRainbowSwirl[] = INCBIN_U8("graphics/pokemon/alcremie/rainbow_swirl/icon.4bpp"); const u8 gMonIcon_EiscueNoiceFace[] = INCBIN_U8("graphics/pokemon/eiscue/noice_face/icon.4bpp"); const u8 gMonIcon_IndeedeeFemale[] = INCBIN_U8("graphics/pokemon/indeedee/female/icon.4bpp"); const u8 gMonIcon_MorpekoHangry[] = INCBIN_U8("graphics/pokemon/morpeko/hangry/icon.4bpp"); @@ -6253,6 +6398,39 @@ const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_ri const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp"); const u8 gMonIcon_BasculegionFemale[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); +const u8 gMonIcon_VenusaurGigantamax[] = INCBIN_U8("graphics/pokemon/venusaur/gigantamax/icon.4bpp"); +const u8 gMonIcon_CharizardGigantamax[] = INCBIN_U8("graphics/pokemon/charizard/gigantamax/icon.4bpp"); +const u8 gMonIcon_BlastoiseGigantamax[] = INCBIN_U8("graphics/pokemon/blastoise/gigantamax/icon.4bpp"); +const u8 gMonIcon_ButterfreeGigantamax[] = INCBIN_U8("graphics/pokemon/butterfree/gigantamax/icon.4bpp"); +const u8 gMonIcon_PikachuGigantamax[] = INCBIN_U8("graphics/pokemon/pikachu/gigantamax/icon.4bpp"); +const u8 gMonIcon_MeowthGigantamax[] = INCBIN_U8("graphics/pokemon/meowth/gigantamax/icon.4bpp"); +const u8 gMonIcon_MachampGigantamax[] = INCBIN_U8("graphics/pokemon/machamp/gigantamax/icon.4bpp"); +const u8 gMonIcon_GengarGigantamax[] = INCBIN_U8("graphics/pokemon/gengar/gigantamax/icon.4bpp"); +const u8 gMonIcon_KinglerGigantamax[] = INCBIN_U8("graphics/pokemon/kingler/gigantamax/icon.4bpp"); +const u8 gMonIcon_LaprasGigantamax[] = INCBIN_U8("graphics/pokemon/lapras/gigantamax/icon.4bpp"); +const u8 gMonIcon_EeveeGigantamax[] = INCBIN_U8("graphics/pokemon/eevee/gigantamax/icon.4bpp"); +const u8 gMonIcon_SnorlaxGigantamax[] = INCBIN_U8("graphics/pokemon/snorlax/gigantamax/icon.4bpp"); +const u8 gMonIcon_GarbodorGigantamax[] = INCBIN_U8("graphics/pokemon/garbodor/gigantamax/icon.4bpp"); +const u8 gMonIcon_MelmetalGigantamax[] = INCBIN_U8("graphics/pokemon/melmetal/gigantamax/icon.4bpp"); +const u8 gMonIcon_RillaboomGigantamax[] = INCBIN_U8("graphics/pokemon/rillaboom/gigantamax/icon.4bpp"); +const u8 gMonIcon_CinderaceGigantamax[] = INCBIN_U8("graphics/pokemon/cinderace/gigantamax/icon.4bpp"); +const u8 gMonIcon_InteleonGigantamax[] = INCBIN_U8("graphics/pokemon/inteleon/gigantamax/icon.4bpp"); +const u8 gMonIcon_CorviknightGigantamax[] = INCBIN_U8("graphics/pokemon/corviknight/gigantamax/icon.4bpp"); +const u8 gMonIcon_OrbeetleGigantamax[] = INCBIN_U8("graphics/pokemon/orbeetle/gigantamax/icon.4bpp"); +const u8 gMonIcon_DrednawGigantamax[] = INCBIN_U8("graphics/pokemon/drednaw/gigantamax/icon.4bpp"); +const u8 gMonIcon_CoalossalGigantamax[] = INCBIN_U8("graphics/pokemon/coalossal/gigantamax/icon.4bpp"); +const u8 gMonIcon_FlappleGigantamax[] = INCBIN_U8("graphics/pokemon/flapple/gigantamax/icon.4bpp"); +const u8 gMonIcon_AppletunGigantamax[] = INCBIN_U8("graphics/pokemon/appletun/gigantamax/icon.4bpp"); +const u8 gMonIcon_SandacondaGigantamax[] = INCBIN_U8("graphics/pokemon/sandaconda/gigantamax/icon.4bpp"); +const u8 gMonIcon_ToxtricityGigantamax[] = INCBIN_U8("graphics/pokemon/toxtricity/gigantamax/icon.4bpp"); +const u8 gMonIcon_CentiskorchGigantamax[] = INCBIN_U8("graphics/pokemon/centiskorch/gigantamax/icon.4bpp"); +const u8 gMonIcon_HattereneGigantamax[] = INCBIN_U8("graphics/pokemon/hatterene/gigantamax/icon.4bpp"); +const u8 gMonIcon_GrimmsnarlGigantamax[] = INCBIN_U8("graphics/pokemon/grimmsnarl/gigantamax/icon.4bpp"); +const u8 gMonIcon_AlcremieGigantamax[] = INCBIN_U8("graphics/pokemon/alcremie/gigantamax/icon.4bpp"); +const u8 gMonIcon_CopperajahGigantamax[] = INCBIN_U8("graphics/pokemon/copperajah/gigantamax/icon.4bpp"); +const u8 gMonIcon_DuraludonGigantamax[] = INCBIN_U8("graphics/pokemon/duraludon/gigantamax/icon.4bpp"); +const u8 gMonIcon_UrshifuSingleStrikeGigantamax[] = INCBIN_U8("graphics/pokemon/urshifu/single_strike_style_gigantamax/icon.4bpp"); +const u8 gMonIcon_UrshifuRapidStrikeGigantamax[] = INCBIN_U8("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/icon.4bpp"); #endif const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); @@ -7134,7 +7312,99 @@ const u8 gMonFootprint_Sirfetchd[] = INCBIN_U8("graphics/pokemon/sirfetchd/footp const u8 gMonFootprint_Mr_Rime[] = INCBIN_U8("graphics/pokemon/mr_rime/footprint.1bpp"); const u8 gMonFootprint_Runerigus[] = INCBIN_U8("graphics/pokemon/runerigus/footprint.1bpp"); const u8 gMonFootprint_Milcery[] = INCBIN_U8("graphics/pokemon/milcery/footprint.1bpp"); + +const u32 gMonFrontPic_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/front.4bpp.lz"); +const u32 gMonPalette_AlcremieStrawberryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_default.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_shiny.gbapal.lz"); const u8 gMonFootprint_Alcremie[] = INCBIN_U8("graphics/pokemon/alcremie/footprint.1bpp"); + +const u32 gMonFrontPic_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/front.4bpp.lz"); +const u32 gMonPalette_AlcremieBerryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_default.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_shiny.gbapal.lz"); + +const u32 gMonFrontPic_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/front.4bpp.lz"); +const u32 gMonPalette_AlcremieLoveVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_default.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_shiny.gbapal.lz"); + +const u32 gMonFrontPic_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/front.4bpp.lz"); +const u32 gMonPalette_AlcremieStarVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_default.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStarCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_shiny.gbapal.lz"); + +const u32 gMonFrontPic_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/front.4bpp.lz"); +const u32 gMonPalette_AlcremieCloverVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_default.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_shiny.gbapal.lz"); + +const u32 gMonFrontPic_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/front.4bpp.lz"); +const u32 gMonPalette_AlcremieFlowerVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_default.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_shiny.gbapal.lz"); + +const u32 gMonFrontPic_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/front.4bpp.lz"); +const u32 gMonPalette_AlcremieRibbonVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_default.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.gbapal.lz"); +const u32 gMonBackPic_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/back.4bpp.lz"); +const u32 gMonShinyPalette_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_shiny.gbapal.lz"); + const u8 gMonFootprint_Falinks[] = INCBIN_U8("graphics/pokemon/falinks/footprint.1bpp"); const u8 gMonFootprint_Pincurchin[] = INCBIN_U8("graphics/pokemon/pincurchin/footprint.1bpp"); const u8 gMonFootprint_Snom[] = INCBIN_U8("graphics/pokemon/snom/footprint.1bpp"); @@ -7172,3 +7442,881 @@ const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint //const u8 gMonFootprint_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/footprint.1bpp"); //const u8 gMonFootprint_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/footprint.1bpp"); #endif + +#if P_GEN_9_POKEMON == TRUE +const u32 gMonFrontPic_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/front.4bpp.lz"); +const u32 gMonPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/normal.gbapal.lz"); +const u32 gMonBackPic_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/back.4bpp.lz"); +const u32 gMonShinyPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/shiny.gbapal.lz"); +const u8 gMonIcon_Sprigatito[] = INCBIN_U8("graphics/pokemon/sprigatito/icon.4bpp"); +// const u8 gMonFootprint_Sprigatito[] = INCBIN_U8("graphics/pokemon/sprigatito/footprint.1bpp"); + +const u32 gMonFrontPic_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/front.4bpp.lz"); +const u32 gMonPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/normal.gbapal.lz"); +const u32 gMonBackPic_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/back.4bpp.lz"); +const u32 gMonShinyPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/shiny.gbapal.lz"); +const u8 gMonIcon_Floragato[] = INCBIN_U8("graphics/pokemon/floragato/icon.4bpp"); +// const u8 gMonFootprint_Floragato[] = INCBIN_U8("graphics/pokemon/floragato/footprint.1bpp"); + +const u32 gMonFrontPic_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/front.4bpp.lz"); +const u32 gMonPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/normal.gbapal.lz"); +const u32 gMonBackPic_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/back.4bpp.lz"); +const u32 gMonShinyPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/shiny.gbapal.lz"); +const u8 gMonIcon_Meowscarada[] = INCBIN_U8("graphics/pokemon/meowscarada/icon.4bpp"); +// const u8 gMonFootprint_Meowscarada[] = INCBIN_U8("graphics/pokemon/meowscarada/footprint.1bpp"); + +const u32 gMonFrontPic_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/front.4bpp.lz"); +const u32 gMonPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/normal.gbapal.lz"); +const u32 gMonBackPic_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/back.4bpp.lz"); +const u32 gMonShinyPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/shiny.gbapal.lz"); +const u8 gMonIcon_Fuecoco[] = INCBIN_U8("graphics/pokemon/fuecoco/icon.4bpp"); +// const u8 gMonFootprint_Fuecoco[] = INCBIN_U8("graphics/pokemon/fuecoco/footprint.1bpp"); + +const u32 gMonFrontPic_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/front.4bpp.lz"); +const u32 gMonPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/normal.gbapal.lz"); +const u32 gMonBackPic_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/back.4bpp.lz"); +const u32 gMonShinyPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/shiny.gbapal.lz"); +const u8 gMonIcon_Crocalor[] = INCBIN_U8("graphics/pokemon/crocalor/icon.4bpp"); +// const u8 gMonFootprint_Crocalor[] = INCBIN_U8("graphics/pokemon/crocalor/footprint.1bpp"); + +const u32 gMonFrontPic_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/front.4bpp.lz"); +const u32 gMonPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/normal.gbapal.lz"); +const u32 gMonBackPic_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/back.4bpp.lz"); +const u32 gMonShinyPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/shiny.gbapal.lz"); +const u8 gMonIcon_Skeledirge[] = INCBIN_U8("graphics/pokemon/skeledirge/icon.4bpp"); +// const u8 gMonFootprint_Skeledirge[] = INCBIN_U8("graphics/pokemon/skeledirge/footprint.1bpp"); + +const u32 gMonFrontPic_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/front.4bpp.lz"); +const u32 gMonPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/normal.gbapal.lz"); +const u32 gMonBackPic_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/back.4bpp.lz"); +const u32 gMonShinyPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/shiny.gbapal.lz"); +const u8 gMonIcon_Quaxly[] = INCBIN_U8("graphics/pokemon/quaxly/icon.4bpp"); +// const u8 gMonFootprint_Quaxly[] = INCBIN_U8("graphics/pokemon/quaxly/footprint.1bpp"); + +const u32 gMonFrontPic_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/front.4bpp.lz"); +const u32 gMonPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/normal.gbapal.lz"); +const u32 gMonBackPic_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/back.4bpp.lz"); +const u32 gMonShinyPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/shiny.gbapal.lz"); +const u8 gMonIcon_Quaxwell[] = INCBIN_U8("graphics/pokemon/quaxwell/icon.4bpp"); +// const u8 gMonFootprint_Quaxwell[] = INCBIN_U8("graphics/pokemon/quaxwell/footprint.1bpp"); + +const u32 gMonFrontPic_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/front.4bpp.lz"); +const u32 gMonPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/normal.gbapal.lz"); +const u32 gMonBackPic_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/back.4bpp.lz"); +const u32 gMonShinyPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/shiny.gbapal.lz"); +const u8 gMonIcon_Quaquaval[] = INCBIN_U8("graphics/pokemon/quaquaval/icon.4bpp"); +// const u8 gMonFootprint_Quaquaval[] = INCBIN_U8("graphics/pokemon/quaquaval/footprint.1bpp"); + +const u32 gMonFrontPic_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/front.4bpp.lz"); +const u32 gMonPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/normal.gbapal.lz"); +const u32 gMonBackPic_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/back.4bpp.lz"); +const u32 gMonShinyPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/shiny.gbapal.lz"); +const u8 gMonIcon_Lechonk[] = INCBIN_U8("graphics/pokemon/lechonk/icon.4bpp"); +// const u8 gMonFootprint_Lechonk[] = INCBIN_U8("graphics/pokemon/lechonk/footprint.1bpp"); + +const u32 gMonFrontPic_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/front.4bpp.lz"); +const u32 gMonPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/normal.gbapal.lz"); +const u32 gMonBackPic_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/back.4bpp.lz"); +const u32 gMonShinyPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/shiny.gbapal.lz"); +const u8 gMonIcon_OinkologneMale[] = INCBIN_U8("graphics/pokemon/oinkologne/icon.4bpp"); +// const u8 gMonFootprint_Oinkologne[] = INCBIN_U8("graphics/pokemon/oinkologne/footprint.1bpp"); + +const u32 gMonFrontPic_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/front.4bpp.lz"); +const u32 gMonPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/normal.gbapal.lz"); +const u32 gMonBackPic_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/back.4bpp.lz"); +const u32 gMonShinyPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/shiny.gbapal.lz"); +const u8 gMonIcon_OinkologneFemale[] = INCBIN_U8("graphics/pokemon/oinkologne/female/icon.4bpp"); + +const u32 gMonFrontPic_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/front.4bpp.lz"); +const u32 gMonPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/normal.gbapal.lz"); +const u32 gMonBackPic_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/back.4bpp.lz"); +const u32 gMonShinyPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/shiny.gbapal.lz"); +const u8 gMonIcon_Tarountula[] = INCBIN_U8("graphics/pokemon/tarountula/icon.4bpp"); +// const u8 gMonFootprint_Tarountula[] = INCBIN_U8("graphics/pokemon/tarountula/footprint.1bpp"); + +const u32 gMonFrontPic_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/front.4bpp.lz"); +const u32 gMonPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/normal.gbapal.lz"); +const u32 gMonBackPic_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/back.4bpp.lz"); +const u32 gMonShinyPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/shiny.gbapal.lz"); +const u8 gMonIcon_Spidops[] = INCBIN_U8("graphics/pokemon/spidops/icon.4bpp"); +// const u8 gMonFootprint_Spidops[] = INCBIN_U8("graphics/pokemon/spidops/footprint.1bpp"); + +const u32 gMonFrontPic_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/front.4bpp.lz"); +const u32 gMonPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/normal.gbapal.lz"); +const u32 gMonBackPic_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/back.4bpp.lz"); +const u32 gMonShinyPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/shiny.gbapal.lz"); +const u8 gMonIcon_Nymble[] = INCBIN_U8("graphics/pokemon/nymble/icon.4bpp"); +// const u8 gMonFootprint_Nymble[] = INCBIN_U8("graphics/pokemon/nymble/footprint.1bpp"); + +const u32 gMonFrontPic_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/front.4bpp.lz"); +const u32 gMonPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/normal.gbapal.lz"); +const u32 gMonBackPic_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/back.4bpp.lz"); +const u32 gMonShinyPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/shiny.gbapal.lz"); +const u8 gMonIcon_Lokix[] = INCBIN_U8("graphics/pokemon/lokix/icon.4bpp"); +// const u8 gMonFootprint_Lokix[] = INCBIN_U8("graphics/pokemon/lokix/footprint.1bpp"); + +const u32 gMonFrontPic_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/front.4bpp.lz"); +const u32 gMonPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/normal.gbapal.lz"); +const u32 gMonBackPic_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/back.4bpp.lz"); +const u32 gMonShinyPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/shiny.gbapal.lz"); +const u8 gMonIcon_Pawmi[] = INCBIN_U8("graphics/pokemon/pawmi/icon.4bpp"); +// const u8 gMonFootprint_Pawmi[] = INCBIN_U8("graphics/pokemon/pawmi/footprint.1bpp"); + +const u32 gMonFrontPic_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/front.4bpp.lz"); +const u32 gMonPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/normal.gbapal.lz"); +const u32 gMonBackPic_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/back.4bpp.lz"); +const u32 gMonShinyPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/shiny.gbapal.lz"); +const u8 gMonIcon_Pawmo[] = INCBIN_U8("graphics/pokemon/pawmo/icon.4bpp"); +// const u8 gMonFootprint_Pawmo[] = INCBIN_U8("graphics/pokemon/pawmo/footprint.1bpp"); + +const u32 gMonFrontPic_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/front.4bpp.lz"); +const u32 gMonPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/normal.gbapal.lz"); +const u32 gMonBackPic_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/back.4bpp.lz"); +const u32 gMonShinyPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/shiny.gbapal.lz"); +const u8 gMonIcon_Pawmot[] = INCBIN_U8("graphics/pokemon/pawmot/icon.4bpp"); +// const u8 gMonFootprint_Pawmot[] = INCBIN_U8("graphics/pokemon/pawmot/footprint.1bpp"); + +const u32 gMonFrontPic_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/front.4bpp.lz"); +const u32 gMonPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/normal.gbapal.lz"); +const u32 gMonBackPic_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/back.4bpp.lz"); +const u32 gMonShinyPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/shiny.gbapal.lz"); +const u8 gMonIcon_Tandemaus[] = INCBIN_U8("graphics/pokemon/tandemaus/icon.4bpp"); +// const u8 gMonFootprint_Tandemaus[] = INCBIN_U8("graphics/pokemon/tandemaus/footprint.1bpp"); + +const u32 gMonPalette_Maushold[] = INCBIN_U32("graphics/pokemon/maushold/normal.gbapal.lz"); +const u32 gMonShinyPalette_Maushold[] = INCBIN_U32("graphics/pokemon/maushold/shiny.gbapal.lz"); +// const u8 gMonFootprint_Maushold[] = INCBIN_U8("graphics/pokemon/maushold/footprint.1bpp"); + +const u32 gMonFrontPic_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/front.4bpp.lz"); +const u32 gMonBackPic_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/back.4bpp.lz"); +const u8 gMonIcon_MausholdFamilyOfThree[] = INCBIN_U8("graphics/pokemon/maushold/icon.4bpp"); + +const u32 gMonFrontPic_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/front.4bpp.lz"); +const u32 gMonBackPic_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/back.4bpp.lz"); +const u8 gMonIcon_MausholdFamilyOfFour[] = INCBIN_U8("graphics/pokemon/maushold/four/icon.4bpp"); + +const u32 gMonFrontPic_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/front.4bpp.lz"); +const u32 gMonPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/normal.gbapal.lz"); +const u32 gMonBackPic_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/back.4bpp.lz"); +const u32 gMonShinyPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/shiny.gbapal.lz"); +const u8 gMonIcon_Fidough[] = INCBIN_U8("graphics/pokemon/fidough/icon.4bpp"); +// const u8 gMonFootprint_Fidough[] = INCBIN_U8("graphics/pokemon/fidough/footprint.1bpp"); + +const u32 gMonFrontPic_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/front.4bpp.lz"); +const u32 gMonPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/normal.gbapal.lz"); +const u32 gMonBackPic_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/back.4bpp.lz"); +const u32 gMonShinyPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/shiny.gbapal.lz"); +const u8 gMonIcon_Dachsbun[] = INCBIN_U8("graphics/pokemon/dachsbun/icon.4bpp"); +// const u8 gMonFootprint_Dachsbun[] = INCBIN_U8("graphics/pokemon/dachsbun/footprint.1bpp"); + +const u32 gMonFrontPic_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/front.4bpp.lz"); +const u32 gMonPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/normal.gbapal.lz"); +const u32 gMonBackPic_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/back.4bpp.lz"); +const u32 gMonShinyPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/shiny.gbapal.lz"); +const u8 gMonIcon_Smoliv[] = INCBIN_U8("graphics/pokemon/smoliv/icon.4bpp"); +// const u8 gMonFootprint_Smoliv[] = INCBIN_U8("graphics/pokemon/smoliv/footprint.1bpp"); + +const u32 gMonFrontPic_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/front.4bpp.lz"); +const u32 gMonPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/normal.gbapal.lz"); +const u32 gMonBackPic_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/back.4bpp.lz"); +const u32 gMonShinyPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/shiny.gbapal.lz"); +const u8 gMonIcon_Dolliv[] = INCBIN_U8("graphics/pokemon/dolliv/icon.4bpp"); +// const u8 gMonFootprint_Dolliv[] = INCBIN_U8("graphics/pokemon/dolliv/footprint.1bpp"); + +const u32 gMonFrontPic_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/front.4bpp.lz"); +const u32 gMonPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/normal.gbapal.lz"); +const u32 gMonBackPic_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/back.4bpp.lz"); +const u32 gMonShinyPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/shiny.gbapal.lz"); +const u8 gMonIcon_Arboliva[] = INCBIN_U8("graphics/pokemon/arboliva/icon.4bpp"); +// const u8 gMonFootprint_Arboliva[] = INCBIN_U8("graphics/pokemon/arboliva/footprint.1bpp"); + +const u32 gMonFrontPic_Squawkabilly[] = INCBIN_U32("graphics/pokemon/squawkabilly/front.4bpp.lz"); +const u32 gMonBackPic_Squawkabilly[] = INCBIN_U32("graphics/pokemon/squawkabilly/back.4bpp.lz"); +// const u8 gMonFootprint_Squawkabilly[] = INCBIN_U8("graphics/pokemon/squawkabilly/footprint.1bpp"); + +const u32 gMonPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/normal.gbapal.lz"); +const u32 gMonShinyPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/shiny.gbapal.lz"); +const u8 gMonIcon_SquawkabillyGreenPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/green_plumage/icon.4bpp"); + +const u32 gMonPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/normal.gbapal.lz"); +const u32 gMonShinyPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/shiny.gbapal.lz"); +const u8 gMonIcon_SquawkabillyBluePlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/blue_plumage/icon.4bpp"); + +const u32 gMonPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/normal.gbapal.lz"); +const u32 gMonShinyPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/shiny.gbapal.lz"); +const u8 gMonIcon_SquawkabillyYellowPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/yellow_plumage/icon.4bpp"); + +const u32 gMonPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/normal.gbapal.lz"); +const u32 gMonShinyPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/shiny.gbapal.lz"); +const u8 gMonIcon_SquawkabillyWhitePlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/white_plumage/icon.4bpp"); + +const u32 gMonFrontPic_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/front.4bpp.lz"); +const u32 gMonPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/normal.gbapal.lz"); +const u32 gMonBackPic_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/back.4bpp.lz"); +const u32 gMonShinyPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/shiny.gbapal.lz"); +const u8 gMonIcon_Nacli[] = INCBIN_U8("graphics/pokemon/nacli/icon.4bpp"); +// const u8 gMonFootprint_Nacli[] = INCBIN_U8("graphics/pokemon/nacli/footprint.1bpp"); + +const u32 gMonFrontPic_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/front.4bpp.lz"); +const u32 gMonPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/normal.gbapal.lz"); +const u32 gMonBackPic_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/back.4bpp.lz"); +const u32 gMonShinyPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/shiny.gbapal.lz"); +const u8 gMonIcon_Naclstack[] = INCBIN_U8("graphics/pokemon/naclstack/icon.4bpp"); +// const u8 gMonFootprint_Naclstack[] = INCBIN_U8("graphics/pokemon/naclstack/footprint.1bpp"); + +const u32 gMonFrontPic_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/front.4bpp.lz"); +const u32 gMonPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/normal.gbapal.lz"); +const u32 gMonBackPic_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/back.4bpp.lz"); +const u32 gMonShinyPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/shiny.gbapal.lz"); +const u8 gMonIcon_Garganacl[] = INCBIN_U8("graphics/pokemon/garganacl/icon.4bpp"); +// const u8 gMonFootprint_Garganacl[] = INCBIN_U8("graphics/pokemon/garganacl/footprint.1bpp"); + +const u32 gMonFrontPic_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/front.4bpp.lz"); +const u32 gMonPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/normal.gbapal.lz"); +const u32 gMonBackPic_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/back.4bpp.lz"); +const u32 gMonShinyPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/shiny.gbapal.lz"); +const u8 gMonIcon_Charcadet[] = INCBIN_U8("graphics/pokemon/charcadet/icon.4bpp"); +// const u8 gMonFootprint_Charcadet[] = INCBIN_U8("graphics/pokemon/charcadet/footprint.1bpp"); + +const u32 gMonFrontPic_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/front.4bpp.lz"); +const u32 gMonPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/normal.gbapal.lz"); +const u32 gMonBackPic_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/back.4bpp.lz"); +const u32 gMonShinyPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/shiny.gbapal.lz"); +const u8 gMonIcon_Armarouge[] = INCBIN_U8("graphics/pokemon/armarouge/icon.4bpp"); +// const u8 gMonFootprint_Armarouge[] = INCBIN_U8("graphics/pokemon/armarouge/footprint.1bpp"); + +const u32 gMonFrontPic_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/front.4bpp.lz"); +const u32 gMonPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/normal.gbapal.lz"); +const u32 gMonBackPic_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/back.4bpp.lz"); +const u32 gMonShinyPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/shiny.gbapal.lz"); +const u8 gMonIcon_Ceruledge[] = INCBIN_U8("graphics/pokemon/ceruledge/icon.4bpp"); +// const u8 gMonFootprint_Ceruledge[] = INCBIN_U8("graphics/pokemon/ceruledge/footprint.1bpp"); + +const u32 gMonFrontPic_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/front.4bpp.lz"); +const u32 gMonPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/normal.gbapal.lz"); +const u32 gMonBackPic_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/back.4bpp.lz"); +const u32 gMonShinyPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/shiny.gbapal.lz"); +const u8 gMonIcon_Tadbulb[] = INCBIN_U8("graphics/pokemon/tadbulb/icon.4bpp"); +// const u8 gMonFootprint_Tadbulb[] = INCBIN_U8("graphics/pokemon/tadbulb/footprint.1bpp"); + +const u32 gMonFrontPic_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/front.4bpp.lz"); +const u32 gMonPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/normal.gbapal.lz"); +const u32 gMonBackPic_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/back.4bpp.lz"); +const u32 gMonShinyPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/shiny.gbapal.lz"); +const u8 gMonIcon_Bellibolt[] = INCBIN_U8("graphics/pokemon/bellibolt/icon.4bpp"); +// const u8 gMonFootprint_Bellibolt[] = INCBIN_U8("graphics/pokemon/bellibolt/footprint.1bpp"); + +const u32 gMonFrontPic_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/front.4bpp.lz"); +const u32 gMonPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/normal.gbapal.lz"); +const u32 gMonBackPic_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/back.4bpp.lz"); +const u32 gMonShinyPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/shiny.gbapal.lz"); +const u8 gMonIcon_Wattrel[] = INCBIN_U8("graphics/pokemon/wattrel/icon.4bpp"); +// const u8 gMonFootprint_Wattrel[] = INCBIN_U8("graphics/pokemon/wattrel/footprint.1bpp"); + +const u32 gMonFrontPic_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/front.4bpp.lz"); +const u32 gMonPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/normal.gbapal.lz"); +const u32 gMonBackPic_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/back.4bpp.lz"); +const u32 gMonShinyPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/shiny.gbapal.lz"); +const u8 gMonIcon_Kilowattrel[] = INCBIN_U8("graphics/pokemon/kilowattrel/icon.4bpp"); +// const u8 gMonFootprint_Kilowattrel[] = INCBIN_U8("graphics/pokemon/kilowattrel/footprint.1bpp"); + +const u32 gMonFrontPic_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/front.4bpp.lz"); +const u32 gMonPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/normal.gbapal.lz"); +const u32 gMonBackPic_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/back.4bpp.lz"); +const u32 gMonShinyPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/shiny.gbapal.lz"); +const u8 gMonIcon_Maschiff[] = INCBIN_U8("graphics/pokemon/maschiff/icon.4bpp"); +// const u8 gMonFootprint_Maschiff[] = INCBIN_U8("graphics/pokemon/maschiff/footprint.1bpp"); + +const u32 gMonFrontPic_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/front.4bpp.lz"); +const u32 gMonPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/normal.gbapal.lz"); +const u32 gMonBackPic_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/back.4bpp.lz"); +const u32 gMonShinyPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/shiny.gbapal.lz"); +const u8 gMonIcon_Mabosstiff[] = INCBIN_U8("graphics/pokemon/mabosstiff/icon.4bpp"); +// const u8 gMonFootprint_Mabosstiff[] = INCBIN_U8("graphics/pokemon/mabosstiff/footprint.1bpp"); + +const u32 gMonFrontPic_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/front.4bpp.lz"); +const u32 gMonPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/normal.gbapal.lz"); +const u32 gMonBackPic_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/back.4bpp.lz"); +const u32 gMonShinyPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/shiny.gbapal.lz"); +const u8 gMonIcon_Shroodle[] = INCBIN_U8("graphics/pokemon/shroodle/icon.4bpp"); +// const u8 gMonFootprint_Shroodle[] = INCBIN_U8("graphics/pokemon/shroodle/footprint.1bpp"); + +const u32 gMonFrontPic_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/front.4bpp.lz"); +const u32 gMonPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/normal.gbapal.lz"); +const u32 gMonBackPic_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/back.4bpp.lz"); +const u32 gMonShinyPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/shiny.gbapal.lz"); +const u8 gMonIcon_Grafaiai[] = INCBIN_U8("graphics/pokemon/grafaiai/icon.4bpp"); +// const u8 gMonFootprint_Grafaiai[] = INCBIN_U8("graphics/pokemon/grafaiai/footprint.1bpp"); + +const u32 gMonFrontPic_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/front.4bpp.lz"); +const u32 gMonPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/normal.gbapal.lz"); +const u32 gMonBackPic_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/back.4bpp.lz"); +const u32 gMonShinyPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/shiny.gbapal.lz"); +const u8 gMonIcon_Bramblin[] = INCBIN_U8("graphics/pokemon/bramblin/icon.4bpp"); +// const u8 gMonFootprint_Bramblin[] = INCBIN_U8("graphics/pokemon/bramblin/footprint.1bpp"); + +const u32 gMonFrontPic_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/front.4bpp.lz"); +const u32 gMonPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/normal.gbapal.lz"); +const u32 gMonBackPic_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/back.4bpp.lz"); +const u32 gMonShinyPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/shiny.gbapal.lz"); +const u8 gMonIcon_Brambleghast[] = INCBIN_U8("graphics/pokemon/brambleghast/icon.4bpp"); +// const u8 gMonFootprint_Brambleghast[] = INCBIN_U8("graphics/pokemon/brambleghast/footprint.1bpp"); + +const u32 gMonFrontPic_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/front.4bpp.lz"); +const u32 gMonPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/normal.gbapal.lz"); +const u32 gMonBackPic_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/back.4bpp.lz"); +const u32 gMonShinyPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/shiny.gbapal.lz"); +const u8 gMonIcon_Toedscool[] = INCBIN_U8("graphics/pokemon/toedscool/icon.4bpp"); +// const u8 gMonFootprint_Toedscool[] = INCBIN_U8("graphics/pokemon/toedscool/footprint.1bpp"); + +const u32 gMonFrontPic_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/front.4bpp.lz"); +const u32 gMonPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/normal.gbapal.lz"); +const u32 gMonBackPic_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/back.4bpp.lz"); +const u32 gMonShinyPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/shiny.gbapal.lz"); +const u8 gMonIcon_Toedscruel[] = INCBIN_U8("graphics/pokemon/toedscruel/icon.4bpp"); +// const u8 gMonFootprint_Toedscruel[] = INCBIN_U8("graphics/pokemon/toedscruel/footprint.1bpp"); + +const u32 gMonFrontPic_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/front.4bpp.lz"); +const u32 gMonPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/normal.gbapal.lz"); +const u32 gMonBackPic_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/back.4bpp.lz"); +const u32 gMonShinyPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/shiny.gbapal.lz"); +const u8 gMonIcon_Klawf[] = INCBIN_U8("graphics/pokemon/klawf/icon.4bpp"); +// const u8 gMonFootprint_Klawf[] = INCBIN_U8("graphics/pokemon/klawf/footprint.1bpp"); + +const u32 gMonFrontPic_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/front.4bpp.lz"); +const u32 gMonPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/normal.gbapal.lz"); +const u32 gMonBackPic_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/back.4bpp.lz"); +const u32 gMonShinyPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/shiny.gbapal.lz"); +const u8 gMonIcon_Capsakid[] = INCBIN_U8("graphics/pokemon/capsakid/icon.4bpp"); +// const u8 gMonFootprint_Capsakid[] = INCBIN_U8("graphics/pokemon/capsakid/footprint.1bpp"); + +const u32 gMonFrontPic_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/front.4bpp.lz"); +const u32 gMonPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/normal.gbapal.lz"); +const u32 gMonBackPic_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/back.4bpp.lz"); +const u32 gMonShinyPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/shiny.gbapal.lz"); +const u8 gMonIcon_Scovillain[] = INCBIN_U8("graphics/pokemon/scovillain/icon.4bpp"); +// const u8 gMonFootprint_Scovillain[] = INCBIN_U8("graphics/pokemon/scovillain/footprint.1bpp"); + +const u32 gMonFrontPic_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/front.4bpp.lz"); +const u32 gMonPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/normal.gbapal.lz"); +const u32 gMonBackPic_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/back.4bpp.lz"); +const u32 gMonShinyPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/shiny.gbapal.lz"); +const u8 gMonIcon_Rellor[] = INCBIN_U8("graphics/pokemon/rellor/icon.4bpp"); +// const u8 gMonFootprint_Rellor[] = INCBIN_U8("graphics/pokemon/rellor/footprint.1bpp"); + +const u32 gMonFrontPic_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/front.4bpp.lz"); +const u32 gMonPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/normal.gbapal.lz"); +const u32 gMonBackPic_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/back.4bpp.lz"); +const u32 gMonShinyPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/shiny.gbapal.lz"); +const u8 gMonIcon_Rabsca[] = INCBIN_U8("graphics/pokemon/rabsca/icon.4bpp"); +// const u8 gMonFootprint_Rabsca[] = INCBIN_U8("graphics/pokemon/rabsca/footprint.1bpp"); + +const u32 gMonFrontPic_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/front.4bpp.lz"); +const u32 gMonPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/normal.gbapal.lz"); +const u32 gMonBackPic_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/back.4bpp.lz"); +const u32 gMonShinyPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/shiny.gbapal.lz"); +const u8 gMonIcon_Flittle[] = INCBIN_U8("graphics/pokemon/flittle/icon.4bpp"); +// const u8 gMonFootprint_Flittle[] = INCBIN_U8("graphics/pokemon/flittle/footprint.1bpp"); + +const u32 gMonFrontPic_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/front.4bpp.lz"); +const u32 gMonPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/normal.gbapal.lz"); +const u32 gMonBackPic_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/back.4bpp.lz"); +const u32 gMonShinyPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/shiny.gbapal.lz"); +const u8 gMonIcon_Espathra[] = INCBIN_U8("graphics/pokemon/espathra/icon.4bpp"); +// const u8 gMonFootprint_Espathra[] = INCBIN_U8("graphics/pokemon/espathra/footprint.1bpp"); + +const u32 gMonFrontPic_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/front.4bpp.lz"); +const u32 gMonPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/normal.gbapal.lz"); +const u32 gMonBackPic_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/back.4bpp.lz"); +const u32 gMonShinyPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/shiny.gbapal.lz"); +const u8 gMonIcon_Tinkatink[] = INCBIN_U8("graphics/pokemon/tinkatink/icon.4bpp"); +// const u8 gMonFootprint_Tinkatink[] = INCBIN_U8("graphics/pokemon/tinkatink/footprint.1bpp"); + +const u32 gMonFrontPic_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/front.4bpp.lz"); +const u32 gMonPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/normal.gbapal.lz"); +const u32 gMonBackPic_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/back.4bpp.lz"); +const u32 gMonShinyPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/shiny.gbapal.lz"); +const u8 gMonIcon_Tinkatuff[] = INCBIN_U8("graphics/pokemon/tinkatuff/icon.4bpp"); +// const u8 gMonFootprint_Tinkatuff[] = INCBIN_U8("graphics/pokemon/tinkatuff/footprint.1bpp"); + +const u32 gMonFrontPic_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/front.4bpp.lz"); +const u32 gMonPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/normal.gbapal.lz"); +const u32 gMonBackPic_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/back.4bpp.lz"); +const u32 gMonShinyPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/shiny.gbapal.lz"); +const u8 gMonIcon_Tinkaton[] = INCBIN_U8("graphics/pokemon/tinkaton/icon.4bpp"); +// const u8 gMonFootprint_Tinkaton[] = INCBIN_U8("graphics/pokemon/tinkaton/footprint.1bpp"); + +const u32 gMonFrontPic_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/front.4bpp.lz"); +const u32 gMonPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/normal.gbapal.lz"); +const u32 gMonBackPic_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/back.4bpp.lz"); +const u32 gMonShinyPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/shiny.gbapal.lz"); +const u8 gMonIcon_Wiglett[] = INCBIN_U8("graphics/pokemon/wiglett/icon.4bpp"); +// const u8 gMonFootprint_Wiglett[] = INCBIN_U8("graphics/pokemon/wiglett/footprint.1bpp"); + +const u32 gMonFrontPic_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/front.4bpp.lz"); +const u32 gMonPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/normal.gbapal.lz"); +const u32 gMonBackPic_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/back.4bpp.lz"); +const u32 gMonShinyPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/shiny.gbapal.lz"); +const u8 gMonIcon_Wugtrio[] = INCBIN_U8("graphics/pokemon/wugtrio/icon.4bpp"); +// const u8 gMonFootprint_Wugtrio[] = INCBIN_U8("graphics/pokemon/wugtrio/footprint.1bpp"); + +const u32 gMonFrontPic_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/front.4bpp.lz"); +const u32 gMonPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/normal.gbapal.lz"); +const u32 gMonBackPic_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/back.4bpp.lz"); +const u32 gMonShinyPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/shiny.gbapal.lz"); +const u8 gMonIcon_Bombirdier[] = INCBIN_U8("graphics/pokemon/bombirdier/icon.4bpp"); +// const u8 gMonFootprint_Bombirdier[] = INCBIN_U8("graphics/pokemon/bombirdier/footprint.1bpp"); + +const u32 gMonFrontPic_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/front.4bpp.lz"); +const u32 gMonPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/normal.gbapal.lz"); +const u32 gMonBackPic_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/back.4bpp.lz"); +const u32 gMonShinyPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/shiny.gbapal.lz"); +const u8 gMonIcon_Finizen[] = INCBIN_U8("graphics/pokemon/finizen/icon.4bpp"); +// const u8 gMonFootprint_Finizen[] = INCBIN_U8("graphics/pokemon/finizen/footprint.1bpp"); + +const u32 gMonFrontPic_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/front.4bpp.lz"); +const u32 gMonPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/normal.gbapal.lz"); +const u32 gMonBackPic_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/back.4bpp.lz"); +const u32 gMonShinyPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/shiny.gbapal.lz"); +const u8 gMonIcon_PalafinZero[] = INCBIN_U8("graphics/pokemon/palafin/icon.4bpp"); +// const u8 gMonFootprint_Palafin[] = INCBIN_U8("graphics/pokemon/palafin/footprint.1bpp"); + +const u32 gMonFrontPic_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/front.4bpp.lz"); +const u32 gMonPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/normal.gbapal.lz"); +const u32 gMonBackPic_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/back.4bpp.lz"); +const u32 gMonShinyPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/shiny.gbapal.lz"); +const u8 gMonIcon_PalafinHero[] = INCBIN_U8("graphics/pokemon/palafin/hero/icon.4bpp"); + +const u32 gMonFrontPic_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/front.4bpp.lz"); +const u32 gMonPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/normal.gbapal.lz"); +const u32 gMonBackPic_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/back.4bpp.lz"); +const u32 gMonShinyPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/shiny.gbapal.lz"); +const u8 gMonIcon_Varoom[] = INCBIN_U8("graphics/pokemon/varoom/icon.4bpp"); +// const u8 gMonFootprint_Varoom[] = INCBIN_U8("graphics/pokemon/varoom/footprint.1bpp"); + +const u32 gMonFrontPic_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/front.4bpp.lz"); +const u32 gMonPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/normal.gbapal.lz"); +const u32 gMonBackPic_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/back.4bpp.lz"); +const u32 gMonShinyPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/shiny.gbapal.lz"); +const u8 gMonIcon_Revavroom[] = INCBIN_U8("graphics/pokemon/revavroom/icon.4bpp"); +// const u8 gMonFootprint_Revavroom[] = INCBIN_U8("graphics/pokemon/revavroom/footprint.1bpp"); + +const u32 gMonFrontPic_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/front.4bpp.lz"); +const u32 gMonPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/normal.gbapal.lz"); +const u32 gMonBackPic_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/back.4bpp.lz"); +const u32 gMonShinyPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/shiny.gbapal.lz"); +const u8 gMonIcon_Cyclizar[] = INCBIN_U8("graphics/pokemon/cyclizar/icon.4bpp"); +// const u8 gMonFootprint_Cyclizar[] = INCBIN_U8("graphics/pokemon/cyclizar/footprint.1bpp"); + +const u32 gMonFrontPic_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/front.4bpp.lz"); +const u32 gMonPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/normal.gbapal.lz"); +const u32 gMonBackPic_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/back.4bpp.lz"); +const u32 gMonShinyPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/shiny.gbapal.lz"); +const u8 gMonIcon_Orthworm[] = INCBIN_U8("graphics/pokemon/orthworm/icon.4bpp"); +// const u8 gMonFootprint_Orthworm[] = INCBIN_U8("graphics/pokemon/orthworm/footprint.1bpp"); + +const u32 gMonFrontPic_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/front.4bpp.lz"); +const u32 gMonPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/normal.gbapal.lz"); +const u32 gMonBackPic_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/back.4bpp.lz"); +const u32 gMonShinyPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/shiny.gbapal.lz"); +const u8 gMonIcon_Glimmet[] = INCBIN_U8("graphics/pokemon/glimmet/icon.4bpp"); +// const u8 gMonFootprint_Glimmet[] = INCBIN_U8("graphics/pokemon/glimmet/footprint.1bpp"); + +const u32 gMonFrontPic_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/front.4bpp.lz"); +const u32 gMonPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/normal.gbapal.lz"); +const u32 gMonBackPic_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/back.4bpp.lz"); +const u32 gMonShinyPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/shiny.gbapal.lz"); +const u8 gMonIcon_Glimmora[] = INCBIN_U8("graphics/pokemon/glimmora/icon.4bpp"); +// const u8 gMonFootprint_Glimmora[] = INCBIN_U8("graphics/pokemon/glimmora/footprint.1bpp"); + +const u32 gMonFrontPic_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/front.4bpp.lz"); +const u32 gMonPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/normal.gbapal.lz"); +const u32 gMonBackPic_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/back.4bpp.lz"); +const u32 gMonShinyPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/shiny.gbapal.lz"); +const u8 gMonIcon_Greavard[] = INCBIN_U8("graphics/pokemon/greavard/icon.4bpp"); +// const u8 gMonFootprint_Greavard[] = INCBIN_U8("graphics/pokemon/greavard/footprint.1bpp"); + +const u32 gMonFrontPic_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/front.4bpp.lz"); +const u32 gMonPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/normal.gbapal.lz"); +const u32 gMonBackPic_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/back.4bpp.lz"); +const u32 gMonShinyPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/shiny.gbapal.lz"); +const u8 gMonIcon_Houndstone[] = INCBIN_U8("graphics/pokemon/houndstone/icon.4bpp"); +// const u8 gMonFootprint_Houndstone[] = INCBIN_U8("graphics/pokemon/houndstone/footprint.1bpp"); + +const u32 gMonFrontPic_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/front.4bpp.lz"); +const u32 gMonPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/normal.gbapal.lz"); +const u32 gMonBackPic_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/back.4bpp.lz"); +const u32 gMonShinyPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/shiny.gbapal.lz"); +const u8 gMonIcon_Flamigo[] = INCBIN_U8("graphics/pokemon/flamigo/icon.4bpp"); +// const u8 gMonFootprint_Flamigo[] = INCBIN_U8("graphics/pokemon/flamigo/footprint.1bpp"); + +const u32 gMonFrontPic_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/front.4bpp.lz"); +const u32 gMonPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/normal.gbapal.lz"); +const u32 gMonBackPic_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/back.4bpp.lz"); +const u32 gMonShinyPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/shiny.gbapal.lz"); +const u8 gMonIcon_Cetoddle[] = INCBIN_U8("graphics/pokemon/cetoddle/icon.4bpp"); +// const u8 gMonFootprint_Cetoddle[] = INCBIN_U8("graphics/pokemon/cetoddle/footprint.1bpp"); + +const u32 gMonFrontPic_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/front.4bpp.lz"); +const u32 gMonPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/normal.gbapal.lz"); +const u32 gMonBackPic_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/back.4bpp.lz"); +const u32 gMonShinyPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/shiny.gbapal.lz"); +const u8 gMonIcon_Cetitan[] = INCBIN_U8("graphics/pokemon/cetitan/icon.4bpp"); +// const u8 gMonFootprint_Cetitan[] = INCBIN_U8("graphics/pokemon/cetitan/footprint.1bpp"); + +const u32 gMonFrontPic_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/front.4bpp.lz"); +const u32 gMonPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/normal.gbapal.lz"); +const u32 gMonBackPic_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/back.4bpp.lz"); +const u32 gMonShinyPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/shiny.gbapal.lz"); +const u8 gMonIcon_Veluza[] = INCBIN_U8("graphics/pokemon/veluza/icon.4bpp"); +// const u8 gMonFootprint_Veluza[] = INCBIN_U8("graphics/pokemon/veluza/footprint.1bpp"); + +const u32 gMonFrontPic_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/front.4bpp.lz"); +const u32 gMonPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/normal.gbapal.lz"); +const u32 gMonBackPic_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/back.4bpp.lz"); +const u32 gMonShinyPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/shiny.gbapal.lz"); +const u8 gMonIcon_Dondozo[] = INCBIN_U8("graphics/pokemon/dondozo/icon.4bpp"); +// const u8 gMonFootprint_Dondozo[] = INCBIN_U8("graphics/pokemon/dondozo/footprint.1bpp"); + +const u32 gMonFrontPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/front.4bpp.lz"); +const u32 gMonPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/normal.gbapal.lz"); +const u32 gMonBackPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/back.4bpp.lz"); +const u32 gMonShinyPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/shiny.gbapal.lz"); +const u8 gMonIcon_TatsugiriCurly[] = INCBIN_U8("graphics/pokemon/tatsugiri/curly/icon.4bpp"); +// const u8 gMonFootprint_Tatsugiri[] = INCBIN_U8("graphics/pokemon/tatsugiri/footprint.1bpp"); + +const u32 gMonFrontPic_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/front.4bpp.lz"); +const u32 gMonPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/normal.gbapal.lz"); +const u32 gMonBackPic_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/back.4bpp.lz"); +const u32 gMonShinyPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/shiny.gbapal.lz"); +const u8 gMonIcon_TatsugiriDroopy[] = INCBIN_U8("graphics/pokemon/tatsugiri/droopy/icon.4bpp"); + +const u32 gMonFrontPic_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/front.4bpp.lz"); +const u32 gMonPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/normal.gbapal.lz"); +const u32 gMonBackPic_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/back.4bpp.lz"); +const u32 gMonShinyPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/shiny.gbapal.lz"); +const u8 gMonIcon_TatsugiriStretchy[] = INCBIN_U8("graphics/pokemon/tatsugiri/stretchy/icon.4bpp"); + +const u32 gMonFrontPic_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/front.4bpp.lz"); +const u32 gMonPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/normal.gbapal.lz"); +const u32 gMonBackPic_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/back.4bpp.lz"); +const u32 gMonShinyPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/shiny.gbapal.lz"); +const u8 gMonIcon_Annihilape[] = INCBIN_U8("graphics/pokemon/annihilape/icon.4bpp"); +// const u8 gMonFootprint_Annihilape[] = INCBIN_U8("graphics/pokemon/annihilape/footprint.1bpp"); + +const u32 gMonFrontPic_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/front.4bpp.lz"); +const u32 gMonPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/normal.gbapal.lz"); +const u32 gMonBackPic_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/back.4bpp.lz"); +const u32 gMonShinyPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/shiny.gbapal.lz"); +const u8 gMonIcon_Clodsire[] = INCBIN_U8("graphics/pokemon/clodsire/icon.4bpp"); +// const u8 gMonFootprint_Clodsire[] = INCBIN_U8("graphics/pokemon/clodsire/footprint.1bpp"); + +const u32 gMonFrontPic_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/front.4bpp.lz"); +const u32 gMonPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/normal.gbapal.lz"); +const u32 gMonBackPic_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/back.4bpp.lz"); +const u32 gMonShinyPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/shiny.gbapal.lz"); +const u8 gMonIcon_Farigiraf[] = INCBIN_U8("graphics/pokemon/farigiraf/icon.4bpp"); +// const u8 gMonFootprint_Farigiraf[] = INCBIN_U8("graphics/pokemon/farigiraf/footprint.1bpp"); + +const u32 gMonPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/normal.gbapal.lz"); +const u32 gMonShinyPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/shiny.gbapal.lz"); +const u8 gMonIcon_Dudunsparce[] = INCBIN_U8("graphics/pokemon/dudunsparce/icon.4bpp"); +// const u8 gMonFootprint_Dudunsparce[] = INCBIN_U8("graphics/pokemon/dudunsparce/footprint.1bpp"); + +const u32 gMonFrontPic_DudunsparceTwoSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/front.4bpp.lz"); +const u32 gMonBackPic_DudunsparceTwoSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/back.4bpp.lz"); + +const u32 gMonFrontPic_DudunsparceThreeSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/three_segment/front.4bpp.lz"); +const u32 gMonBackPic_DudunsparceThreeSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/three_segment/back.4bpp.lz"); + +const u32 gMonFrontPic_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/front.4bpp.lz"); +const u32 gMonPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/normal.gbapal.lz"); +const u32 gMonBackPic_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/back.4bpp.lz"); +const u32 gMonShinyPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/shiny.gbapal.lz"); +const u8 gMonIcon_Kingambit[] = INCBIN_U8("graphics/pokemon/kingambit/icon.4bpp"); +// const u8 gMonFootprint_Kingambit[] = INCBIN_U8("graphics/pokemon/kingambit/footprint.1bpp"); + +const u32 gMonFrontPic_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/anim_front.4bpp.lz"); +const u32 gMonPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/normal.gbapal.lz"); +const u32 gMonBackPic_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/back.4bpp.lz"); +const u32 gMonShinyPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/shiny.gbapal.lz"); +const u8 gMonIcon_GreatTusk[] = INCBIN_U8("graphics/pokemon/great_tusk/icon.4bpp"); +// const u8 gMonFootprint_GreatTusk[] = INCBIN_U8("graphics/pokemon/great_tusk/footprint.1bpp"); + +const u32 gMonFrontPic_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/front.4bpp.lz"); +const u32 gMonPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/normal.gbapal.lz"); +const u32 gMonBackPic_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/back.4bpp.lz"); +const u32 gMonShinyPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/shiny.gbapal.lz"); +const u8 gMonIcon_ScreamTail[] = INCBIN_U8("graphics/pokemon/scream_tail/icon.4bpp"); +// const u8 gMonFootprint_ScreamTail[] = INCBIN_U8("graphics/pokemon/scream_tail/footprint.1bpp"); + +const u32 gMonFrontPic_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/front.4bpp.lz"); +const u32 gMonPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/normal.gbapal.lz"); +const u32 gMonBackPic_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/back.4bpp.lz"); +const u32 gMonShinyPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/shiny.gbapal.lz"); +const u8 gMonIcon_BruteBonnet[] = INCBIN_U8("graphics/pokemon/brute_bonnet/icon.4bpp"); +// const u8 gMonFootprint_BruteBonnet[] = INCBIN_U8("graphics/pokemon/brute_bonnet/footprint.1bpp"); + +const u32 gMonFrontPic_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/front.4bpp.lz"); +const u32 gMonPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/normal.gbapal.lz"); +const u32 gMonBackPic_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/back.4bpp.lz"); +const u32 gMonShinyPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/shiny.gbapal.lz"); +const u8 gMonIcon_FlutterMane[] = INCBIN_U8("graphics/pokemon/flutter_mane/icon.4bpp"); +// const u8 gMonFootprint_FlutterMane[] = INCBIN_U8("graphics/pokemon/flutter_mane/footprint.1bpp"); + +const u32 gMonFrontPic_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/front.4bpp.lz"); +const u32 gMonPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/normal.gbapal.lz"); +const u32 gMonBackPic_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/back.4bpp.lz"); +const u32 gMonShinyPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/shiny.gbapal.lz"); +const u8 gMonIcon_SlitherWing[] = INCBIN_U8("graphics/pokemon/slither_wing/icon.4bpp"); +// const u8 gMonFootprint_SlitherWing[] = INCBIN_U8("graphics/pokemon/slither_wing/footprint.1bpp"); + +const u32 gMonFrontPic_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/front.4bpp.lz"); +const u32 gMonPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/normal.gbapal.lz"); +const u32 gMonBackPic_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/back.4bpp.lz"); +const u32 gMonShinyPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/shiny.gbapal.lz"); +const u8 gMonIcon_SandyShocks[] = INCBIN_U8("graphics/pokemon/sandy_shocks/icon.4bpp"); +// const u8 gMonFootprint_SandyShocks[] = INCBIN_U8("graphics/pokemon/sandy_shocks/footprint.1bpp"); + +const u32 gMonFrontPic_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/front.4bpp.lz"); +const u32 gMonPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/normal.gbapal.lz"); +const u32 gMonBackPic_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/back.4bpp.lz"); +const u32 gMonShinyPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/shiny.gbapal.lz"); +const u8 gMonIcon_IronTreads[] = INCBIN_U8("graphics/pokemon/iron_treads/icon.4bpp"); +// const u8 gMonFootprint_IronTreads[] = INCBIN_U8("graphics/pokemon/iron_treads/footprint.1bpp"); + +const u32 gMonFrontPic_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/front.4bpp.lz"); +const u32 gMonPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/normal.gbapal.lz"); +const u32 gMonBackPic_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/back.4bpp.lz"); +const u32 gMonShinyPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/shiny.gbapal.lz"); +const u8 gMonIcon_IronBundle[] = INCBIN_U8("graphics/pokemon/iron_bundle/icon.4bpp"); +// const u8 gMonFootprint_IronBundle[] = INCBIN_U8("graphics/pokemon/iron_bundle/footprint.1bpp"); + +const u32 gMonFrontPic_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/front.4bpp.lz"); +const u32 gMonPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/normal.gbapal.lz"); +const u32 gMonBackPic_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/back.4bpp.lz"); +const u32 gMonShinyPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/shiny.gbapal.lz"); +const u8 gMonIcon_IronHands[] = INCBIN_U8("graphics/pokemon/iron_hands/icon.4bpp"); +// const u8 gMonFootprint_IronHands[] = INCBIN_U8("graphics/pokemon/iron_hands/footprint.1bpp"); + +const u32 gMonFrontPic_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/front.4bpp.lz"); +const u32 gMonPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/normal.gbapal.lz"); +const u32 gMonBackPic_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/back.4bpp.lz"); +const u32 gMonShinyPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/shiny.gbapal.lz"); +const u8 gMonIcon_IronJugulis[] = INCBIN_U8("graphics/pokemon/iron_jugulis/icon.4bpp"); +// const u8 gMonFootprint_IronJugulis[] = INCBIN_U8("graphics/pokemon/iron_jugulis/footprint.1bpp"); + +const u32 gMonFrontPic_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/front.4bpp.lz"); +const u32 gMonPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/normal.gbapal.lz"); +const u32 gMonBackPic_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/back.4bpp.lz"); +const u32 gMonShinyPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/shiny.gbapal.lz"); +const u8 gMonIcon_IronMoth[] = INCBIN_U8("graphics/pokemon/iron_moth/icon.4bpp"); +// const u8 gMonFootprint_IronMoth[] = INCBIN_U8("graphics/pokemon/iron_moth/footprint.1bpp"); + +const u32 gMonFrontPic_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/front.4bpp.lz"); +const u32 gMonPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/normal.gbapal.lz"); +const u32 gMonBackPic_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/back.4bpp.lz"); +const u32 gMonShinyPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/shiny.gbapal.lz"); +const u8 gMonIcon_IronThorns[] = INCBIN_U8("graphics/pokemon/iron_thorns/icon.4bpp"); +// const u8 gMonFootprint_IronThorns[] = INCBIN_U8("graphics/pokemon/iron_thorns/footprint.1bpp"); + +const u32 gMonFrontPic_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/anim_front.4bpp.lz"); +const u32 gMonPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/normal.gbapal.lz"); +const u32 gMonBackPic_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/back.4bpp.lz"); +const u32 gMonShinyPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/shiny.gbapal.lz"); +const u8 gMonIcon_Frigibax[] = INCBIN_U8("graphics/pokemon/frigibax/icon.4bpp"); +// const u8 gMonFootprint_Frigibax[] = INCBIN_U8("graphics/pokemon/frigibax/footprint.1bpp"); + +const u32 gMonFrontPic_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/front.4bpp.lz"); +const u32 gMonPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/normal.gbapal.lz"); +const u32 gMonBackPic_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/back.4bpp.lz"); +const u32 gMonShinyPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/shiny.gbapal.lz"); +const u8 gMonIcon_Arctibax[] = INCBIN_U8("graphics/pokemon/arctibax/icon.4bpp"); +// const u8 gMonFootprint_Arctibax[] = INCBIN_U8("graphics/pokemon/arctibax/footprint.1bpp"); + +const u32 gMonFrontPic_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/front.4bpp.lz"); +const u32 gMonPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/normal.gbapal.lz"); +const u32 gMonBackPic_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/back.4bpp.lz"); +const u32 gMonShinyPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/shiny.gbapal.lz"); +const u8 gMonIcon_Baxcalibur[] = INCBIN_U8("graphics/pokemon/baxcalibur/icon.4bpp"); +// const u8 gMonFootprint_Baxcalibur[] = INCBIN_U8("graphics/pokemon/baxcalibur/footprint.1bpp"); + +const u32 gMonFrontPic_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/front.4bpp.lz"); +const u32 gMonPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/normal.gbapal.lz"); +const u32 gMonBackPic_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/back.4bpp.lz"); +const u32 gMonShinyPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/shiny.gbapal.lz"); +const u8 gMonIcon_GimmighoulChest[] = INCBIN_U8("graphics/pokemon/gimmighoul/icon.4bpp"); +// const u8 gMonFootprint_Gimmighoul[] = INCBIN_U8("graphics/pokemon/gimmighoul/footprint.1bpp"); + +const u32 gMonFrontPic_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/front.4bpp.lz"); +const u32 gMonPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/normal.gbapal.lz"); +const u32 gMonBackPic_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/back.4bpp.lz"); +const u32 gMonShinyPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/shiny.gbapal.lz"); +const u8 gMonIcon_GimmighoulRoaming[] = INCBIN_U8("graphics/pokemon/gimmighoul/roaming/icon.4bpp"); + +const u32 gMonFrontPic_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/front.4bpp.lz"); +const u32 gMonPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/normal.gbapal.lz"); +const u32 gMonBackPic_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/back.4bpp.lz"); +const u32 gMonShinyPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/shiny.gbapal.lz"); +const u8 gMonIcon_Gholdengo[] = INCBIN_U8("graphics/pokemon/gholdengo/icon.4bpp"); +// const u8 gMonFootprint_Gholdengo[] = INCBIN_U8("graphics/pokemon/gholdengo/footprint.1bpp"); + +const u32 gMonFrontPic_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/front.4bpp.lz"); +const u32 gMonPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/normal.gbapal.lz"); +const u32 gMonBackPic_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/back.4bpp.lz"); +const u32 gMonShinyPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/shiny.gbapal.lz"); +const u8 gMonIcon_WoChien[] = INCBIN_U8("graphics/pokemon/wo_chien/icon.4bpp"); +// const u8 gMonFootprint_WoChien[] = INCBIN_U8("graphics/pokemon/wo_chien/footprint.1bpp"); + +const u32 gMonFrontPic_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/front.4bpp.lz"); +const u32 gMonPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/normal.gbapal.lz"); +const u32 gMonBackPic_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/back.4bpp.lz"); +const u32 gMonShinyPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/shiny.gbapal.lz"); +const u8 gMonIcon_ChienPao[] = INCBIN_U8("graphics/pokemon/chien_pao/icon.4bpp"); +// const u8 gMonFootprint_ChienPao[] = INCBIN_U8("graphics/pokemon/chien_pao/footprint.1bpp"); + +const u32 gMonFrontPic_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/front.4bpp.lz"); +const u32 gMonPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/normal.gbapal.lz"); +const u32 gMonBackPic_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/back.4bpp.lz"); +const u32 gMonShinyPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/shiny.gbapal.lz"); +const u8 gMonIcon_TingLu[] = INCBIN_U8("graphics/pokemon/ting_lu/icon.4bpp"); +// const u8 gMonFootprint_TingLu[] = INCBIN_U8("graphics/pokemon/ting_lu/footprint.1bpp"); + +const u32 gMonFrontPic_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/front.4bpp.lz"); +const u32 gMonPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/normal.gbapal.lz"); +const u32 gMonBackPic_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/back.4bpp.lz"); +const u32 gMonShinyPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/shiny.gbapal.lz"); +const u8 gMonIcon_ChiYu[] = INCBIN_U8("graphics/pokemon/chi_yu/icon.4bpp"); +// const u8 gMonFootprint_ChiYu[] = INCBIN_U8("graphics/pokemon/chi_yu/footprint.1bpp"); + +const u32 gMonFrontPic_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/front.4bpp.lz"); +const u32 gMonPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/normal.gbapal.lz"); +const u32 gMonBackPic_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/back.4bpp.lz"); +const u32 gMonShinyPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/shiny.gbapal.lz"); +const u8 gMonIcon_RoaringMoon[] = INCBIN_U8("graphics/pokemon/roaring_moon/icon.4bpp"); +// const u8 gMonFootprint_RoaringMoon[] = INCBIN_U8("graphics/pokemon/roaring_moon/footprint.1bpp"); + +const u32 gMonFrontPic_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/front.4bpp.lz"); +const u32 gMonPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/normal.gbapal.lz"); +const u32 gMonBackPic_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/back.4bpp.lz"); +const u32 gMonShinyPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/shiny.gbapal.lz"); +const u8 gMonIcon_IronValiant[] = INCBIN_U8("graphics/pokemon/iron_valiant/icon.4bpp"); +// const u8 gMonFootprint_IronValiant[] = INCBIN_U8("graphics/pokemon/iron_valiant/footprint.1bpp"); + +const u32 gMonFrontPic_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/front.4bpp.lz"); +const u32 gMonPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/normal.gbapal.lz"); +const u32 gMonBackPic_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/back.4bpp.lz"); +const u32 gMonShinyPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/shiny.gbapal.lz"); +const u8 gMonIcon_Koraidon[] = INCBIN_U8("graphics/pokemon/koraidon/icon.4bpp"); +// const u8 gMonFootprint_Koraidon[] = INCBIN_U8("graphics/pokemon/koraidon/footprint.1bpp"); + +const u32 gMonFrontPic_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/front.4bpp.lz"); +const u32 gMonPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/normal.gbapal.lz"); +const u32 gMonBackPic_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/back.4bpp.lz"); +const u32 gMonShinyPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/shiny.gbapal.lz"); +const u8 gMonIcon_Miraidon[] = INCBIN_U8("graphics/pokemon/miraidon/icon.4bpp"); +// const u8 gMonFootprint_Miraidon[] = INCBIN_U8("graphics/pokemon/miraidon/footprint.1bpp"); + +const u32 gMonFrontPic_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/front.4bpp.lz"); +const u32 gMonPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/normal.gbapal.lz"); +const u32 gMonBackPic_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/back.4bpp.lz"); +const u32 gMonShinyPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/shiny.gbapal.lz"); +const u8 gMonIcon_WalkingWake[] = INCBIN_U8("graphics/pokemon/walking_wake/icon.4bpp"); +// const u8 gMonFootprint_WalkingWake[] = INCBIN_U8("graphics/pokemon/walking_wake/footprint.1bpp"); + +const u32 gMonFrontPic_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/front.4bpp.lz"); +const u32 gMonPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/normal.gbapal.lz"); +const u32 gMonBackPic_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/back.4bpp.lz"); +const u32 gMonShinyPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/shiny.gbapal.lz"); +const u8 gMonIcon_IronLeaves[] = INCBIN_U8("graphics/pokemon/iron_leaves/icon.4bpp"); +// const u8 gMonFootprint_IronLeaves[] = INCBIN_U8("graphics/pokemon/iron_leaves/footprint.1bpp"); + +const u32 gMonFrontPic_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/front.4bpp.lz"); +const u32 gMonPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/normal.gbapal.lz"); +const u32 gMonBackPic_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/back.4bpp.lz"); +const u32 gMonShinyPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/shiny.gbapal.lz"); +const u8 gMonIcon_Dipplin[] = INCBIN_U8("graphics/pokemon/dipplin/icon.4bpp"); +// const u8 gMonFootprint_Dipplin[] = INCBIN_U8("graphics/pokemon/dipplin/footprint.1bpp"); + +const u32 gMonFrontPic_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/front.4bpp.lz"); +const u32 gMonPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/normal.gbapal.lz"); +const u32 gMonBackPic_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/back.4bpp.lz"); +const u32 gMonShinyPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/shiny.gbapal.lz"); +const u8 gMonIcon_Poltchageist[] = INCBIN_U8("graphics/pokemon/poltchageist/icon.4bpp"); +// const u8 gMonFootprint_Poltchageist[] = INCBIN_U8("graphics/pokemon/poltchageist/footprint.1bpp"); + +const u32 gMonFrontPic_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/front.4bpp.lz"); +const u32 gMonPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/normal.gbapal.lz"); +const u32 gMonBackPic_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/back.4bpp.lz"); +const u32 gMonShinyPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/shiny.gbapal.lz"); +const u8 gMonIcon_Sinistcha[] = INCBIN_U8("graphics/pokemon/sinistcha/icon.4bpp"); +// const u8 gMonFootprint_Sinistcha[] = INCBIN_U8("graphics/pokemon/sinistcha/footprint.1bpp"); + +const u32 gMonFrontPic_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/front.4bpp.lz"); +const u32 gMonPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/normal.gbapal.lz"); +const u32 gMonBackPic_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/back.4bpp.lz"); +const u32 gMonShinyPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/shiny.gbapal.lz"); +const u8 gMonIcon_Okidogi[] = INCBIN_U8("graphics/pokemon/okidogi/icon.4bpp"); +// const u8 gMonFootprint_Okidogi[] = INCBIN_U8("graphics/pokemon/okidogi/footprint.1bpp"); + +const u32 gMonFrontPic_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/front.4bpp.lz"); +const u32 gMonPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/normal.gbapal.lz"); +const u32 gMonBackPic_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/back.4bpp.lz"); +const u32 gMonShinyPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/shiny.gbapal.lz"); +const u8 gMonIcon_Munkidori[] = INCBIN_U8("graphics/pokemon/munkidori/icon.4bpp"); +// const u8 gMonFootprint_Munkidori[] = INCBIN_U8("graphics/pokemon/munkidori/footprint.1bpp"); + +const u32 gMonFrontPic_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/front.4bpp.lz"); +const u32 gMonPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/normal.gbapal.lz"); +const u32 gMonBackPic_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/back.4bpp.lz"); +const u32 gMonShinyPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/shiny.gbapal.lz"); +const u8 gMonIcon_Fezandipiti[] = INCBIN_U8("graphics/pokemon/fezandipiti/icon.4bpp"); +// const u8 gMonFootprint_Fezandipiti[] = INCBIN_U8("graphics/pokemon/fezandipiti/footprint.1bpp"); + +const u32 gMonFrontPic_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/front.4bpp.lz"); +const u32 gMonPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/normal.gbapal.lz"); +const u32 gMonBackPic_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/back.4bpp.lz"); +// const u32 gMonShinyPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/shiny.gbapal.lz"); +const u8 gMonIcon_OgerponTealMask[] = INCBIN_U8("graphics/pokemon/ogerpon/icon.4bpp"); + +const u32 gMonFrontPic_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/front.4bpp.lz"); +const u32 gMonPalette_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/normal.gbapal.lz"); +const u32 gMonBackPic_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/back.4bpp.lz"); +// const u32 gMonShinyPalette_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/shiny.gbapal.lz"); +// const u8 gMonIcon_OgerponWellspringMask[] = INCBIN_U8("graphics/pokemon/ogerpon/wellspring/icon.4bpp"); + +const u32 gMonFrontPic_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/front.4bpp.lz"); +const u32 gMonPalette_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/normal.gbapal.lz"); +const u32 gMonBackPic_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/back.4bpp.lz"); +// const u32 gMonShinyPalette_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/shiny.gbapal.lz"); +// const u8 gMonIcon_OgerponHearthflameMask[] = INCBIN_U8("graphics/pokemon/ogerpon/hearthflame/icon.4bpp"); + +const u32 gMonFrontPic_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/front.4bpp.lz"); +const u32 gMonPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/normal.gbapal.lz"); +const u32 gMonBackPic_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/back.4bpp.lz"); +// 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_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_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 u8 gMonFootprint_Ogerpon[] = INCBIN_U8("graphics/pokemon/ogerpon/footprint.1bpp"); + +#endif diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index a0a207be2d..33ed4aed8d 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -791,7 +791,7 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_METEORITE] = {gItemIcon_Meteorite, gItemIconPalette_Meteorite}, [ITEM_MAGMA_EMBLEM] = {gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem}, [ITEM_CONTEST_PASS] = {gItemIcon_ContestPass, gItemIconPalette_ContestPass}, - [ITEM_OAKS_PARCEL] = {gItemIcon_OaksParcel, gItemIconPalette_OaksParcel}, + [ITEM_PARCEL] = {gItemIcon_Parcel, gItemIconPalette_Parcel}, [ITEM_SECRET_KEY] = {gItemIcon_SecretKey, gItemIconPalette_SecretKey}, [ITEM_BIKE_VOUCHER] = {gItemIcon_BikeVoucher, gItemIconPalette_BikeVoucher}, [ITEM_GOLD_TEETH] = {gItemIcon_GoldTeeth, gItemIconPalette_GoldTeeth}, @@ -844,6 +844,21 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_LINKING_CORD] = {gItemIcon_LinkingCord, gItemIconPalette_LinkingCord}, [ITEM_PEAT_BLOCK] = {gItemIcon_PeatBlock, gItemIconPalette_PeatBlock}, [ITEM_BERSERK_GENE] = {gItemIcon_BerserkGene, gItemIconPalette_BerserkGene}, + [ITEM_FAIRY_FEATHER] = {gItemIcon_FairyFeather, gItemIconPalette_FairyFeather}, + [ITEM_SYRUPY_APPLE] = {gItemIcon_SyrupyApple, gItemIconPalette_SyrupyApple}, + [ITEM_UNREMARKABLE_TEACUP] = {gItemIcon_UnremarkableTeacup, gItemIconPalette_UnremarkableTeacup}, + [ITEM_MASTERPIECE_TEACUP] = {gItemIcon_MasterpieceTeacup, gItemIconPalette_MasterpieceTeacup}, + [ITEM_CORNERSTONE_MASK] = {gItemIcon_CornerstoneMask, gItemIconPalette_CornerstoneMask}, + [ITEM_WELLSPRING_MASK] = {gItemIcon_WellspringMask, gItemIconPalette_WellspringMask}, + [ITEM_HEARTHFLAME_MASK] = {gItemIcon_HearthflameMask, gItemIconPalette_HearthflameMask}, + [ITEM_HEALTH_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_HealthMochi}, + [ITEM_MUSCLE_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_MuscleMochi}, + [ITEM_RESIST_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_ResistMochi}, + [ITEM_GENIUS_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_GeniusMochi}, + [ITEM_CLEVER_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_CleverMochi}, + [ITEM_SWIFT_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_SwiftMochi}, + [ITEM_FRESH_START_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_FreshStartMochi}, + [ITEM_GLIMMERING_CHARM] = {gItemIcon_GlimmeringCharm, gItemIconPalette_GlimmeringCharm}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 6990e7cded..984c611ca6 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -15,7 +15,7 @@ #endif #if I_TYPE_BOOST_POWER >= GEN_4 // For non Pokémon-specific type-boosting held items. - #define TYPE_BOOST_PARAM 20 + #define TYPE_BOOST_PARAM 20 #else #define TYPE_BOOST_PARAM 10 #endif @@ -4844,11 +4844,7 @@ const struct Item gItems[] = .name = _("Soul Dew"), .price = 0, .holdEffect = HOLD_EFFECT_SOUL_DEW, - #if B_SOUL_DEW_BOOST >= GEN_7 - .holdEffectParam = 20, - #else - .holdEffectParam = 50, - #endif + .holdEffectParam = B_SOUL_DEW_BOOST >= GEN_7 ? 20 : 50, .description = sSoulDewDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -4993,7 +4989,6 @@ const struct Item gItems[] = .name = _("Luck Incense"), .price = 11000, .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, - .holdEffectParam = 10, .description = sLuckIncenseDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -5707,7 +5702,6 @@ const struct Item gItems[] = .name = _("Amulet Coin"), .price = 10000, .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, - .holdEffectParam = 10, .description = sAmuletCoinDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -6045,8 +6039,8 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sRazorFangDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -6438,14 +6432,6 @@ const struct Item gItems[] = .flingPower = 10, }, -#if B_CONFUSE_BERRIES_HEAL >= GEN_8 - #define CONFUSE_BERRY_HEAL_FRACTION 3 -#elif B_CONFUSE_BERRIES_HEAL == GEN_7 - #define CONFUSE_BERRY_HEAL_FRACTION 2 -#else - #define CONFUSE_BERRY_HEAL_FRACTION 8 -#endif - [ITEM_FIGY_BERRY] = { .name = _("Figy Berry"), @@ -6511,8 +6497,6 @@ const struct Item gItems[] = .flingPower = 10, }, -#undef CONFUSE_BERRY_HEAL_FRACTION - [ITEM_RAZZ_BERRY] = { .name = _("Razz Berry"), @@ -8510,8 +8494,8 @@ const struct Item gItems[] = .importance = 1, .description = sRotomCatalogDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_RotomCatalog, }, [ITEM_GRACIDEA] = @@ -8551,8 +8535,8 @@ const struct Item gItems[] = .importance = 1, .description = sZygardeCubeDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_ZygardeCube, }, [ITEM_PRISON_BOTTLE] = @@ -9079,11 +9063,11 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, - [ITEM_OAKS_PARCEL] = + [ITEM_PARCEL] = { - .name = _("Oak's Parcel"), + .name = _("Parcel"), .price = 0, - .description = sOaksParcelDesc, + .description = sParcelDesc, .importance = 2, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -9649,4 +9633,174 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 10, }, + + [ITEM_FAIRY_FEATHER] = + { + .name = _("Fairy Feather"), + .price = 1000, + .holdEffect = HOLD_EFFECT_FAIRY_POWER, + .holdEffectParam = TYPE_BOOST_PARAM, + .description = sFairyFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_SYRUPY_APPLE] = + { + .name = _("Syrupy Apple"), + .price = 2200, + .description = sSyrupyAppleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_UNREMARKABLE_TEACUP] = + { + .name = _("UnrmkblTeacup"), + .price = 1600, + .description = sUnremarkableTeacupDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_MASTERPIECE_TEACUP] = + { + .name = _("MstrpceTeacup"), + .price = 38000, + .description = sMasterpieceTeacupDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_CORNERSTONE_MASK] = + { + .name = _("CornrstneMask"), + .price = 0, + .holdEffect = HOLD_EFFECT_MASK, + .description = sCornerstoneMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_ROCK, + }, + + [ITEM_WELLSPRING_MASK] = + { + .name = _("WellsprngMask"), + .price = 0, + .holdEffect = HOLD_EFFECT_MASK, + .description = sWellspringMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_WATER, + }, + + [ITEM_HEARTHFLAME_MASK] = + { + .name = _("HrthflameMask"), + .price = 0, + .holdEffect = HOLD_EFFECT_MASK, + .description = sHearthflameMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .secondaryId = TYPE_FIRE, + }, + + [ITEM_HEALTH_MOCHI] = + { + .name = _("Health Mochi"), + .price = 500, + .description = sHealthMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_MUSCLE_MOCHI] = + { + .name = _("Muscle Mochi"), + .price = 500, + .description = sMuscleMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_RESIST_MOCHI] = + { + .name = _("Resist Mochi"), + .price = 500, + .description = sResistMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_GENIUS_MOCHI] = + { + .name = _("Genius Mochi"), + .price = 500, + .description = sGeniusMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_CLEVER_MOCHI] = + { + .name = _("Clever Mochi"), + .price = 500, + .description = sCleverMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_SWIFT_MOCHI] = + { + .name = _("Swift Mochi"), + .price = 500, + .description = sSwiftMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_FRESH_START_MOCHI] = + { + .name = _("FrshStrtMochi"), + .price = 300, + .description = sFreshStartMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_ResetEVs, + .flingPower = 30, + }, + + [ITEM_GLIMMERING_CHARM] = + { + .name = _("GlmmringCharm"), + .price = 0, + .importance = 1, + .description = sGlimmeringCharmDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, }; diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 4a1c5344c6..b12ca40651 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -482,6 +482,17 @@ static const struct WindowTemplate sAlreadyHoldingOneMsgWindowTemplate = .baseBlock = 0x299, }; +static const struct WindowTemplate sOrderWhichApplianceMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 14, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x299, +}; + static const struct WindowTemplate sItemGiveTakeWindowTemplate = { .bg = 2, @@ -515,6 +526,28 @@ static const struct WindowTemplate sMoveSelectWindowTemplate = .baseBlock = 0x2E9, }; +static const struct WindowTemplate sCatalogSelectWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 17, + .tilemapTop = 5, + .width = 12, + .height = 14, + .paletteNum = 14, + .baseBlock = 0x2E9, +}; + +static const struct WindowTemplate sZygardeCubeSelectWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 18, + .tilemapTop = 13, + .width = 11, + .height = 6, + .paletteNum = 14, + .baseBlock = 0x2E9, +}; + static const struct WindowTemplate sPartyMenuYesNoWindowTemplate = { .bg = 2, @@ -624,6 +657,7 @@ static const u8 *const sActionStringTable[] = [PARTY_MSG_DO_WHAT_WITH_ITEM] = gText_DoWhatWithItem, [PARTY_MSG_DO_WHAT_WITH_MAIL] = gText_DoWhatWithMail, [PARTY_MSG_ALREADY_HOLDING_ONE] = gText_AlreadyHoldingOne, + [PARTY_MSG_WHICH_APPLIANCE] = gText_WhichAppliance, }; static const u8 *const sDescriptionStringTable[] = @@ -676,6 +710,14 @@ struct [MENU_TRADE1] = {gText_Trade4, CursorCb_Trade1}, [MENU_TRADE2] = {gText_Trade4, CursorCb_Trade2}, [MENU_TOSS] = {gMenuText_Toss, CursorCb_Toss}, + [MENU_CATALOG_BULB] = {gText_LightBulb, CursorCb_CatalogBulb}, + [MENU_CATALOG_OVEN] = {gText_MicrowaveOven, CursorCb_CatalogOven}, + [MENU_CATALOG_WASHING] = {gText_WashingMachine, CursorCb_CatalogWashing}, + [MENU_CATALOG_FRIDGE] = {gText_Refrigerator, CursorCb_CatalogFridge}, + [MENU_CATALOG_FAN] = {gText_ElectricFan, CursorCb_CatalogFan}, + [MENU_CATALOG_MOWER] = {gText_LawnMower, CursorCb_CatalogMower}, + [MENU_CHANGE_FORM] = {gText_ChangeForm, CursorCb_ChangeForm}, + [MENU_CHANGE_ABILITY] = {gText_ChangeAbility, CursorCb_ChangeAbility}, [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCb_FieldMove}, @@ -705,6 +747,10 @@ static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {MENU_REGISTER, MENU_ static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1}; static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1}; static const u8 sPartyMenuAction_TakeItemTossCancel[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1}; +static const u8 sPartyMenuAction_RotomCatalog[] = {MENU_CATALOG_BULB, MENU_CATALOG_OVEN, MENU_CATALOG_WASHING, MENU_CATALOG_FRIDGE, MENU_CATALOG_FAN, MENU_CATALOG_MOWER, MENU_CANCEL1}; +static const u8 sPartyMenuAction_ZygardeCube[] = {MENU_CHANGE_FORM, MENU_CHANGE_ABILITY, MENU_CANCEL1}; + + static const u8 *const sPartyMenuActions[] = { @@ -722,6 +768,8 @@ static const u8 *const sPartyMenuActions[] = [ACTIONS_TRADE] = sPartyMenuAction_TradeSummaryCancel1, [ACTIONS_SPIN_TRADE] = sPartyMenuAction_TradeSummaryCancel2, [ACTIONS_TAKEITEM_TOSS] = sPartyMenuAction_TakeItemTossCancel, + [ACTIONS_ROTOM_CATALOG] = sPartyMenuAction_RotomCatalog, + [ACTIONS_ZYGARDE_CUBE] = sPartyMenuAction_ZygardeCube, }; static const u8 sPartyMenuActionCounts[] = @@ -739,7 +787,9 @@ static const u8 sPartyMenuActionCounts[] = [ACTIONS_REGISTER] = ARRAY_COUNT(sPartyMenuAction_RegisterSummaryCancel), [ACTIONS_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel1), [ACTIONS_SPIN_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel2), - [ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel) + [ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel), + [ACTIONS_ROTOM_CATALOG] = ARRAY_COUNT(sPartyMenuAction_RotomCatalog), + [ACTIONS_ZYGARDE_CUBE] = ARRAY_COUNT(sPartyMenuAction_ZygardeCube), }; static const u16 sFieldMoves[FIELD_MOVES_COUNT + 1] = @@ -1102,3 +1152,12 @@ static const u8 *const sUnused_StatStrings[] = gText_SpDef4, gText_Speed2 }; + +static const u16 sRotomFormChangeMoves[5] = +{ + MOVE_HYDRO_PUMP, + MOVE_BLIZZARD, + MOVE_OVERHEAT, + MOVE_AIR_SLASH, + MOVE_LEAF_STORM, +}; diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h index b6cc938b70..4db494e875 100644 --- a/src/data/pokemon/egg_moves.h +++ b/src/data/pokemon/egg_moves.h @@ -1,3 +1,5 @@ +#include "constants/moves.h" + #define EGG_MOVES_SPECIES_OFFSET 20000 #define EGG_MOVES_TERMINATOR 0xFFFF #define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves @@ -2579,7 +2581,7 @@ const u16 gEggMoves[] = { MOVE_FLOWER_SHIELD, MOVE_GRASSY_TERRAIN), - egg_moves(SHELLOS, + egg_moves(SHELLOS_WEST_SEA, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_STOCKPILE, @@ -3865,7 +3867,7 @@ const u16 gEggMoves[] = { MOVE_ENDEAVOR, MOVE_AMNESIA), - egg_moves(ORICORIO, + egg_moves(ORICORIO_BAILE, MOVE_PLUCK, MOVE_TAILWIND, MOVE_SAFEGUARD, @@ -4416,11 +4418,276 @@ const u16 gEggMoves[] = { MOVE_REFLECT_TYPE), #endif + egg_moves(WOOPER_PALDEAN, + MOVE_ACID_SPRAY, + MOVE_AFTER_YOU, + MOVE_ANCIENT_POWER, + MOVE_COUNTER, + MOVE_CURSE, + MOVE_DOUBLE_KICK, + MOVE_HAZE, + MOVE_MIST, + MOVE_RECOVER, + MOVE_SPIT_UP, + MOVE_STOCKPILE, + MOVE_SWALLOW), + + egg_moves(TAUROS_PALDEAN_COMBAT_BREED, + MOVE_CURSE, + MOVE_ENDEAVOR), + + egg_moves(TAUROS_PALDEAN_BLAZE_BREED, + MOVE_CURSE, + MOVE_ENDEAVOR), + + egg_moves(TAUROS_PALDEAN_AQUA_BREED, + MOVE_CURSE, + MOVE_ENDEAVOR), + egg_moves(INDEEDEE_FEMALE, MOVE_PSYCH_UP, MOVE_FAKE_OUT, MOVE_PSYCHO_SHIFT, MOVE_HEAL_PULSE), +#if P_GEN_9_POKEMON == TRUE + egg_moves(SPRIGATITO, + MOVE_ALLY_SWITCH, + MOVE_COPYCAT, + MOVE_LEECH_SEED, + MOVE_PETAL_BLIZZARD, + MOVE_SUCKER_PUNCH), + + egg_moves(FUECOCO, + MOVE_BELCH, + MOVE_CURSE, + MOVE_ENCORE, + MOVE_SLACK_OFF), + + egg_moves(QUAXLY, + MOVE_DETECT, + MOVE_LAST_RESORT, + MOVE_RAPID_SPIN, + MOVE_ROOST), + + egg_moves(LECHONK, + MOVE_ENDEAVOR, + MOVE_SPIT_UP, + MOVE_STOCKPILE, + MOVE_STUFF_CHEEKS, + MOVE_SWALLOW), + + egg_moves(TAROUNTULA, + MOVE_FIRST_IMPRESSION, + MOVE_LUNGE, + MOVE_MEMENTO, + MOVE_SUCKER_PUNCH), + + egg_moves(NYMBLE, + MOVE_COUNTER, + MOVE_SKITTER_SMACK), + + egg_moves(PAWMI, + MOVE_FAKE_OUT, + MOVE_MACH_PUNCH, + MOVE_SWEET_KISS, + MOVE_WISH), + + egg_moves(TANDEMAUS, + MOVE_AFTER_YOU, + MOVE_BATON_PASS, + MOVE_BITE, + MOVE_FEINT, + MOVE_SWITCHEROO, + MOVE_TICKLE), + + egg_moves(FIDOUGH, + MOVE_COPYCAT, + MOVE_HOWL, + MOVE_SWEET_SCENT, + MOVE_WISH, + MOVE_YAWN), + + egg_moves(SMOLIV, + MOVE_MEMENTO, + MOVE_STRENGTH_SAP, + MOVE_SYNTHESIS, + MOVE_WEATHER_BALL), + + egg_moves(SQUAWKABILLY, + MOVE_DOUBLE_EDGE, + MOVE_FINAL_GAMBIT, + MOVE_FLATTER, + MOVE_PARTING_SHOT), + + egg_moves(NACLI, + MOVE_ANCIENT_POWER, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_POWER_GEM), + + egg_moves(CHARCADET, + MOVE_DESTINY_BOND, + MOVE_DISABLE, + MOVE_SPITE), + + egg_moves(TADBULB, + MOVE_MUDDY_WATER, + MOVE_PARABOLIC_CHARGE, + MOVE_SOAK), + + egg_moves(WATTREL, + MOVE_ENDEAVOR, + MOVE_FEATHER_DANCE, + MOVE_SPIT_UP, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_WEATHER_BALL), + + egg_moves(MASCHIFF, + MOVE_DESTINY_BOND, + MOVE_ENDEAVOR, + MOVE_PLAY_ROUGH, + MOVE_RETALIATE), + + egg_moves(SHROODLE, + MOVE_COPYCAT, + MOVE_CROSS_POISON, + MOVE_PARTING_SHOT, + MOVE_SUPER_FANG, + MOVE_SWAGGER, + MOVE_TOXIC), + + egg_moves(BRAMBLIN, + MOVE_BEAT_UP, + MOVE_BLOCK, + MOVE_LEECH_SEED, + MOVE_SHADOW_SNEAK, + MOVE_STRENGTH_SAP), + + egg_moves(TOEDSCOOL, + MOVE_ACUPRESSURE, + MOVE_KNOCK_OFF, + MOVE_LEECH_SEED, + MOVE_MIRROR_COAT, + MOVE_RAGE_POWDER, + MOVE_RAPID_SPIN, + MOVE_TICKLE, + MOVE_TOXIC), + + egg_moves(KLAWF, + MOVE_ANCIENT_POWER, + MOVE_CRABHAMMER, + MOVE_ENDEAVOR, + MOVE_KNOCK_OFF), + + egg_moves(CAPSAKID, + MOVE_INGRAIN, + MOVE_LEECH_SEED, + MOVE_RAGE_POWDER, + MOVE_ROLLOUT, + MOVE_WORRY_SEED), + + egg_moves(RELLOR, + MOVE_COSMIC_POWER, + MOVE_MEMENTO, + MOVE_RECOVER, + MOVE_WEATHER_BALL), + + egg_moves(FLITTLE, + MOVE_ALLY_SWITCH, + MOVE_HYPNOSIS, + MOVE_ROOST), + + egg_moves(TINKATINK, + MOVE_FEINT, + MOVE_ICE_HAMMER, + MOVE_QUASH), + + egg_moves(WIGLETT, + MOVE_FINAL_GAMBIT, + MOVE_MEMENTO), + + egg_moves(BOMBIRDIER, + MOVE_FEATHER_DANCE, + MOVE_POWER_TRIP, + MOVE_ROOST, + MOVE_SKY_ATTACK, + MOVE_SUCKER_PUNCH), + + egg_moves(FINIZEN, + MOVE_BOOMBURST, + MOVE_BOUNCE, + MOVE_COUNTER, + MOVE_HAZE, + MOVE_TICKLE), + + egg_moves(VAROOM, + MOVE_HAZE, + MOVE_PARTING_SHOT, + MOVE_SELF_DESTRUCT, + MOVE_TORMENT, + MOVE_TOXIC), + + egg_moves(CYCLIZAR, + MOVE_AQUA_TAIL, + MOVE_IRON_TAIL, + MOVE_KNOCK_OFF, + MOVE_POWER_WHIP), + + egg_moves(ORTHWORM, + MOVE_COIL, + MOVE_CURSE, + MOVE_METAL_BURST), + + egg_moves(GLIMMET, + MOVE_EXPLOSION, + MOVE_MEMENTO, + MOVE_TOXIC), + + egg_moves(GREAVARD, + MOVE_ALLY_SWITCH, + MOVE_DESTINY_BOND, + MOVE_DISABLE, + MOVE_HOWL, + MOVE_MEMENTO, + MOVE_SHADOW_SNEAK, + MOVE_YAWN), + + egg_moves(FLAMIGO, + MOVE_DOUBLE_TEAM, + MOVE_QUICK_GUARD, + MOVE_SKY_ATTACK), + + egg_moves(CETODDLE, + MOVE_BELLY_DRUM, + MOVE_ENTRAINMENT, + MOVE_ICICLE_CRASH, + MOVE_SUPERPOWER, + MOVE_YAWN), + + egg_moves(VELUZA, + MOVE_RECOVER, + MOVE_THRASH), + + egg_moves(DONDOZO, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_THRASH, + MOVE_YAWN), + + egg_moves(TATSUGIRI, + MOVE_BATON_PASS, + MOVE_COUNTER, + MOVE_RAPID_SPIN), + + egg_moves(FRIGIBAX, + MOVE_AQUA_TAIL, + MOVE_DRAGON_RUSH, + MOVE_FREEZE_DRY, + MOVE_ICICLE_SPEAR), + +#endif + EGG_MOVES_TERMINATOR }; diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index b26f577257..43c08fcfa9 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -36,6 +36,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_MEOWTH] = {{EVO_LEVEL, 28, SPECIES_PERSIAN}}, [SPECIES_PSYDUCK] = {{EVO_LEVEL, 33, SPECIES_GOLDUCK}}, [SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE}}, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_PRIMEAPE] = {{EVO_MOVE, MOVE_RAGE_FIST, SPECIES_ANNIHILAPE}}, +#endif [SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}}, [SPECIES_GROWLITHE_HISUIAN] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE_HISUIAN}}, [SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL}}, @@ -161,11 +164,21 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_YANMA] = {{EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_YANMEGA}}, #endif [SPECIES_WOOPER] = {{EVO_LEVEL, 20, SPECIES_QUAGSIRE}}, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_WOOPER_PALDEAN] = {{EVO_LEVEL, 20, SPECIES_CLODSIRE}}, +#endif #if P_GEN_4_POKEMON == TRUE [SPECIES_MURKROW] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_HONCHKROW}}, [SPECIES_MISDREAVUS] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_MISMAGIUS}}, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_GIRAFARIG] = {{EVO_MOVE, MOVE_TWIN_BEAM, SPECIES_FARIGIRAF}}, #endif [SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS}}, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_DUNSPARCE] = {{EVO_MOVE_TWO_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_TWO_SEGMENT}, + {EVO_MOVE_THREE_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_THREE_SEGMENT}}, +#endif #if P_GEN_4_POKEMON == TRUE [SPECIES_GLIGAR] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}, {EVO_ITEM_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}}, @@ -176,6 +189,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_ITEM_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}}, #endif [SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING}}, +#if P_GEN_8_POKEMON == TRUE + [SPECIES_URSARING] = {{EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA}}, +#endif [SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO}}, [SPECIES_SWINUB] = {{EVO_LEVEL, 33, SPECIES_PILOSWINE}}, #if P_GEN_4_POKEMON == TRUE @@ -187,6 +203,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #if P_GEN_4_POKEMON == TRUE [SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}, {EVO_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}}, +#endif +#if P_GEN_8_POKEMON == TRUE + [SPECIES_STANTLER] = {{EVO_MOVE, MOVE_PSYSHIELD_BASH, SPECIES_WYRDEER}}, #endif [SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN}, {EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE}, @@ -296,12 +315,12 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_BUDEW] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_ROSELIA}}, [SPECIES_CRANIDOS] = {{EVO_LEVEL, 30, SPECIES_RAMPARDOS}}, [SPECIES_SHIELDON] = {{EVO_LEVEL, 30, SPECIES_BASTIODON}}, - [SPECIES_BURMY] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM}, + [SPECIES_BURMY_PLANT_CLOAK] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_PLANT_CLOAK}, {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM}}, [SPECIES_COMBEE] = {{EVO_LEVEL_FEMALE, 21, SPECIES_VESPIQUEN}}, [SPECIES_BUIZEL] = {{EVO_LEVEL, 26, SPECIES_FLOATZEL}}, - [SPECIES_CHERUBI] = {{EVO_LEVEL, 25, SPECIES_CHERRIM}}, - [SPECIES_SHELLOS] = {{EVO_LEVEL, 30, SPECIES_GASTRODON}}, + [SPECIES_CHERUBI] = {{EVO_LEVEL, 25, SPECIES_CHERRIM_OVERCAST}}, + [SPECIES_SHELLOS_WEST_SEA] = {{EVO_LEVEL, 30, SPECIES_GASTRODON_WEST_SEA}}, [SPECIES_DRIFLOON] = {{EVO_LEVEL, 28, SPECIES_DRIFBLIM}}, [SPECIES_BUNEARY] = {{EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY}}, [SPECIES_GLAMEOW] = {{EVO_LEVEL, 38, SPECIES_PURUGLY}}, @@ -360,9 +379,13 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_COTTONEE] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_WHIMSICOTT}}, [SPECIES_PETILIL] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_LILLIGANT}, {EVO_NONE, 0, SPECIES_LILLIGANT_HISUIAN}}, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_BASCULIN_WHITE_STRIPED] = {{EVO_NONE, 0, SPECIES_BASCULEGION_MALE}, + {EVO_NONE, 0, SPECIES_BASCULEGION_FEMALE}}, +#endif [SPECIES_SANDILE] = {{EVO_LEVEL, 29, SPECIES_KROKOROK}}, [SPECIES_KROKOROK] = {{EVO_LEVEL, 40, SPECIES_KROOKODILE}}, - [SPECIES_DARUMAKA] = {{EVO_LEVEL, 35, SPECIES_DARMANITAN}}, + [SPECIES_DARUMAKA] = {{EVO_LEVEL, 35, SPECIES_DARMANITAN_STANDARD_MODE}}, [SPECIES_DWEBBLE] = {{EVO_LEVEL, 34, SPECIES_CRUSTLE}}, [SPECIES_SCRAGGY] = {{EVO_LEVEL, 39, SPECIES_SCRAFTY}}, [SPECIES_YAMASK] = {{EVO_LEVEL, 34, SPECIES_COFAGRIGUS}}, @@ -379,7 +402,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_DUCKLETT] = {{EVO_LEVEL, 35, SPECIES_SWANNA}}, [SPECIES_VANILLITE] = {{EVO_LEVEL, 35, SPECIES_VANILLISH}}, [SPECIES_VANILLISH] = {{EVO_LEVEL, 47, SPECIES_VANILLUXE}}, - [SPECIES_DEERLING] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK}}, + [SPECIES_DEERLING_SPRING] = {{EVO_LEVEL, 34, SPECIES_SAWSBUCK_SPRING}}, [SPECIES_KARRABLAST] = {{EVO_TRADE_SPECIFIC_MON, SPECIES_SHELMET, SPECIES_ESCAVALIER}}, [SPECIES_FOONGUS] = {{EVO_LEVEL, 39, SPECIES_AMOONGUSS}}, [SPECIES_FRILLISH] = {{EVO_LEVEL, 40, SPECIES_JELLICENT}}, @@ -399,6 +422,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_MIENFOO] = {{EVO_LEVEL, 50, SPECIES_MIENSHAO}}, [SPECIES_GOLETT] = {{EVO_LEVEL, 43, SPECIES_GOLURK}}, [SPECIES_PAWNIARD] = {{EVO_LEVEL, 52, SPECIES_BISHARP}}, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_BISHARP] = {{EVO_NONE, 0, SPECIES_KINGAMBIT}}, +#endif [SPECIES_RUFFLET] = {{EVO_LEVEL, 54, SPECIES_BRAVIARY}, {EVO_NONE, 0, SPECIES_BRAVIARY_HISUIAN}}, [SPECIES_VULLABY] = {{EVO_LEVEL, 54, SPECIES_MANDIBUZZ}}, @@ -417,16 +443,16 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_FLETCHLING] = {{EVO_LEVEL, 17, SPECIES_FLETCHINDER}}, [SPECIES_FLETCHINDER] = {{EVO_LEVEL, 35, SPECIES_TALONFLAME}}, [SPECIES_SCATTERBUG] = {{EVO_LEVEL, 9, SPECIES_SPEWPA}}, - [SPECIES_SPEWPA] = {{EVO_LEVEL, 12, SPECIES_VIVILLON}}, + [SPECIES_SPEWPA] = {{EVO_LEVEL, 12, SPECIES_VIVILLON_ICY_SNOW}}, [SPECIES_LITLEO] = {{EVO_LEVEL, 35, SPECIES_PYROAR}}, - [SPECIES_FLABEBE] = {{EVO_LEVEL, 19, SPECIES_FLOETTE}}, - [SPECIES_FLOETTE] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES}}, + [SPECIES_FLABEBE_RED_FLOWER] = {{EVO_LEVEL, 19, SPECIES_FLOETTE_RED_FLOWER}}, + [SPECIES_FLOETTE_RED_FLOWER] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_RED_FLOWER}}, [SPECIES_SKIDDO] = {{EVO_LEVEL, 32, SPECIES_GOGOAT}}, [SPECIES_PANCHAM] = {{EVO_LEVEL_DARK_TYPE_MON_IN_PARTY, 32, SPECIES_PANGORO}}, - [SPECIES_ESPURR] = {{EVO_LEVEL_MALE, 25, SPECIES_MEOWSTIC}, + [SPECIES_ESPURR] = {{EVO_LEVEL_MALE, 25, SPECIES_MEOWSTIC_MALE}, {EVO_LEVEL_FEMALE, 25, SPECIES_MEOWSTIC_FEMALE}}, [SPECIES_HONEDGE] = {{EVO_LEVEL, 35, SPECIES_DOUBLADE}}, - [SPECIES_DOUBLADE] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_AEGISLASH}}, + [SPECIES_DOUBLADE] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_AEGISLASH_SHIELD}}, [SPECIES_SPRITZEE] = {{EVO_TRADE_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}, {EVO_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}}, [SPECIES_SWIRLIX] = {{EVO_TRADE_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF}, @@ -446,8 +472,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_LEVEL_FOG, 50, SPECIES_GOODRA_HISUIAN}}, [SPECIES_PHANTUMP] = {{EVO_TRADE, 0, SPECIES_TREVENANT}, {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_TREVENANT}}, - [SPECIES_PUMPKABOO] = {{EVO_TRADE, 0, SPECIES_GOURGEIST}, - {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST}}, + [SPECIES_PUMPKABOO_AVERAGE] = {{EVO_TRADE, 0, SPECIES_GOURGEIST_AVERAGE}, + {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST_AVERAGE}}, [SPECIES_BERGMITE] = {{EVO_LEVEL, 37, SPECIES_AVALUGG}, {EVO_NONE, 0, SPECIES_AVALUGG_HISUIAN}}, [SPECIES_NOIBAT] = {{EVO_LEVEL, 48, SPECIES_NOIVERN}}, @@ -469,7 +495,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_CRABRAWLER] = {{EVO_SPECIFIC_MAP, MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM, SPECIES_CRABOMINABLE}, {EVO_ITEM, ITEM_ICE_STONE, SPECIES_CRABOMINABLE}}, [SPECIES_CUTIEFLY] = {{EVO_LEVEL, 25, SPECIES_RIBOMBEE}}, - [SPECIES_ROCKRUFF] = {{EVO_LEVEL_DAY, 25, SPECIES_LYCANROC}, + [SPECIES_ROCKRUFF] = {{EVO_LEVEL_DAY, 25, SPECIES_LYCANROC_MIDDAY}, {EVO_LEVEL_NIGHT, 25, SPECIES_LYCANROC_MIDNIGHT}}, [SPECIES_MAREANIE] = {{EVO_LEVEL, 38, SPECIES_TOXAPEX}}, [SPECIES_MUDBRAY] = {{EVO_LEVEL, 30, SPECIES_MUDSDALE}}, @@ -482,7 +508,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_STEENEE] = {{EVO_MOVE, MOVE_STOMP, SPECIES_TSAREENA}}, [SPECIES_WIMPOD] = {{EVO_LEVEL, 30, SPECIES_GOLISOPOD}}, [SPECIES_SANDYGAST] = {{EVO_LEVEL, 42, SPECIES_PALOSSAND}}, - [SPECIES_TYPE_NULL] = {{EVO_FRIENDSHIP, 0, SPECIES_SILVALLY}}, + [SPECIES_TYPE_NULL] = {{EVO_FRIENDSHIP, 0, SPECIES_SILVALLY_NORMAL}}, [SPECIES_JANGMO_O] = {{EVO_LEVEL, 35, SPECIES_HAKAMO_O}}, [SPECIES_HAKAMO_O] = {{EVO_LEVEL, 45, SPECIES_KOMMO_O}}, [SPECIES_COSMOG] = {{EVO_LEVEL, 43, SPECIES_COSMOEM}}, @@ -510,41 +536,88 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_ROLYCOLY] = {{EVO_LEVEL, 18, SPECIES_CARKOL}}, [SPECIES_CARKOL] = {{EVO_LEVEL, 34, SPECIES_COALOSSAL}}, [SPECIES_APPLIN] = {{EVO_ITEM, ITEM_TART_APPLE, SPECIES_FLAPPLE}, - {EVO_ITEM, ITEM_SWEET_APPLE, SPECIES_APPLETUN}}, + {EVO_ITEM, ITEM_SWEET_APPLE, SPECIES_APPLETUN}, + {EVO_ITEM, ITEM_SYRUPY_APPLE, SPECIES_DIPPLIN}}, [SPECIES_SILICOBRA] = {{EVO_LEVEL, 36, SPECIES_SANDACONDA}}, [SPECIES_ARROKUDA] = {{EVO_LEVEL, 26, SPECIES_BARRASKEWDA}}, - [SPECIES_TOXEL] = {{EVO_LEVEL_NATURE_AMPED, 30, SPECIES_TOXTRICITY}, + [SPECIES_TOXEL] = {{EVO_LEVEL_NATURE_AMPED, 30, SPECIES_TOXTRICITY_AMPED}, {EVO_LEVEL_NATURE_LOW_KEY, 30, SPECIES_TOXTRICITY_LOW_KEY}}, [SPECIES_SIZZLIPEDE] = {{EVO_LEVEL, 28, SPECIES_CENTISKORCH}}, [SPECIES_CLOBBOPUS] = {{EVO_MOVE, MOVE_TAUNT, SPECIES_GRAPPLOCT}}, - [SPECIES_SINISTEA] = {{EVO_ITEM, ITEM_CRACKED_POT, SPECIES_POLTEAGEIST}}, + [SPECIES_SINISTEA_PHONY] = {{EVO_ITEM, ITEM_CRACKED_POT, SPECIES_POLTEAGEIST_PHONY}}, [SPECIES_HATENNA] = {{EVO_LEVEL, 32, SPECIES_HATTREM}}, [SPECIES_HATTREM] = {{EVO_LEVEL, 42, SPECIES_HATTERENE}}, [SPECIES_IMPIDIMP] = {{EVO_LEVEL, 32, SPECIES_MORGREM}}, [SPECIES_MORGREM] = {{EVO_LEVEL, 42, SPECIES_GRIMMSNARL}}, - [SPECIES_MILCERY] = {{EVO_LEVEL, 0, SPECIES_ALCREMIE}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_RUBY_CREAM}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_MATCHA_CREAM}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_MINT_CREAM}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_LEMON_CREAM}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_SALTED_CREAM}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_RUBY_SWIRL}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_CARAMEL_SWIRL}, - {EVO_LEVEL, 0, SPECIES_ALCREMIE_RAINBOW_SWIRL}}, + [SPECIES_MILCERY] = {{EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL}, + {EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL}}, [SPECIES_SNOM] = {{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_FROSMOTH}}, [SPECIES_CUFANT] = {{EVO_LEVEL, 34, SPECIES_COPPERAJAH}}, [SPECIES_DREEPY] = {{EVO_LEVEL, 50, SPECIES_DRAKLOAK}}, [SPECIES_DRAKLOAK] = {{EVO_LEVEL, 60, SPECIES_DRAGAPULT}}, - [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU}, - {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU}, + [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, + {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}, {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = {{EVO_LEVEL, 16, SPECIES_FLORAGATO}}, + [SPECIES_FLORAGATO] = {{EVO_LEVEL, 36, SPECIES_MEOWSCARADA}}, + [SPECIES_FUECOCO] = {{EVO_LEVEL, 16, SPECIES_CROCALOR}}, + [SPECIES_CROCALOR] = {{EVO_LEVEL, 36, SPECIES_SKELEDIRGE}}, + [SPECIES_QUAXLY] = {{EVO_LEVEL, 16, SPECIES_QUAXWELL}}, + [SPECIES_QUAXWELL] = {{EVO_LEVEL, 36, SPECIES_QUAQUAVAL}}, + [SPECIES_LECHONK] = {{EVO_LEVEL_MALE, 18, SPECIES_OINKOLOGNE_MALE}, + {EVO_LEVEL_FEMALE, 18, SPECIES_OINKOLOGNE_FEMALE}}, + [SPECIES_TAROUNTULA] = {{EVO_LEVEL, 15, SPECIES_SPIDOPS}}, + [SPECIES_NYMBLE] = {{EVO_LEVEL, 24, SPECIES_LOKIX}}, + [SPECIES_PAWMI] = {{EVO_LEVEL, 18, SPECIES_PAWMO}}, + [SPECIES_PAWMO] = {{EVO_NONE, 0, SPECIES_PAWMOT}}, + [SPECIES_TANDEMAUS] = {{EVO_LEVEL_FAMILY_OF_FOUR, 25, SPECIES_MAUSHOLD_FAMILY_OF_FOUR}, + {EVO_LEVEL_FAMILY_OF_THREE, 25, SPECIES_MAUSHOLD_FAMILY_OF_THREE}}, + [SPECIES_FIDOUGH] = {{EVO_LEVEL, 26, SPECIES_DACHSBUN}}, + [SPECIES_SMOLIV] = {{EVO_LEVEL, 25, SPECIES_DOLLIV}}, + [SPECIES_DOLLIV] = {{EVO_LEVEL, 35, SPECIES_ARBOLIVA}}, + [SPECIES_NACLI] = {{EVO_LEVEL, 24, SPECIES_NACLSTACK}}, + [SPECIES_NACLSTACK] = {{EVO_LEVEL, 38, SPECIES_GARGANACL}}, + [SPECIES_CHARCADET] = {{EVO_ITEM, ITEM_AUSPICIOUS_ARMOR, SPECIES_ARMAROUGE}, + {EVO_ITEM, ITEM_MALICIOUS_ARMOR, SPECIES_CERULEDGE}}, + [SPECIES_TADBULB] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_BELLIBOLT}}, + [SPECIES_WATTREL] = {{EVO_LEVEL, 25, SPECIES_KILOWATTREL}}, + [SPECIES_MASCHIFF] = {{EVO_LEVEL, 30, SPECIES_MABOSSTIFF}}, + [SPECIES_SHROODLE] = {{EVO_LEVEL, 28, SPECIES_GRAFAIAI}}, + [SPECIES_BRAMBLIN] = {{EVO_NONE, 0, SPECIES_BRAMBLEGHAST}}, + [SPECIES_TOEDSCOOL] = {{EVO_LEVEL, 30, SPECIES_TOEDSCRUEL}}, + [SPECIES_CAPSAKID] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_SCOVILLAIN}}, + [SPECIES_RELLOR] = {{EVO_NONE, 0, SPECIES_RABSCA}}, + [SPECIES_FLITTLE] = {{EVO_LEVEL, 35, SPECIES_ESPATHRA}}, + [SPECIES_TINKATINK] = {{EVO_LEVEL, 24, SPECIES_TINKATUFF}}, + [SPECIES_TINKATUFF] = {{EVO_LEVEL, 38, SPECIES_TINKATON}}, + [SPECIES_WIGLETT] = {{EVO_LEVEL, 26, SPECIES_WUGTRIO}}, + [SPECIES_FINIZEN] = {{EVO_LEVEL, 38, SPECIES_PALAFIN_ZERO}}, + [SPECIES_VAROOM] = {{EVO_LEVEL, 40, SPECIES_REVAVROOM}}, + [SPECIES_GLIMMET] = {{EVO_LEVEL, 35, SPECIES_GLIMMORA}}, + [SPECIES_GREAVARD] = {{EVO_LEVEL_NIGHT, 30, SPECIES_HOUNDSTONE}}, + [SPECIES_CETODDLE] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_CETITAN}}, + [SPECIES_FRIGIBAX] = {{EVO_LEVEL, 35, SPECIES_ARCTIBAX}}, + [SPECIES_ARCTIBAX] = {{EVO_LEVEL, 54, SPECIES_BAXCALIBUR}}, + [SPECIES_GIMMIGHOUL_CHEST] = {{EVO_NONE, 0, SPECIES_GHOLDENGO}}, + [SPECIES_GIMMIGHOUL_ROAMING] = {{EVO_NONE, 0, SPECIES_GHOLDENGO}}, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = {{EVO_ITEM, ITEM_UNREMARKABLE_TEACUP, SPECIES_SINISTCHA_UNREMARKABLE}}, + [SPECIES_POLTCHAGEIST_ARTISAN] = {{EVO_ITEM, ITEM_MASTERPIECE_TEACUP, SPECIES_SINISTCHA_MASTERPIECE}}, #endif [SPECIES_RATTATA_ALOLAN] = {{EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}}, [SPECIES_SANDSHREW_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}}, [SPECIES_VULPIX_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_ALOLAN}}, [SPECIES_DIGLETT_ALOLAN] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO_ALOLAN}}, - [SPECIES_MEOWTH_ALOLAN] = {{EVO_FRIENDSHIP, 28, SPECIES_PERSIAN_ALOLAN}}, + [SPECIES_MEOWTH_ALOLAN] = {{EVO_FRIENDSHIP, 0, SPECIES_PERSIAN_ALOLAN}}, [SPECIES_GEODUDE_ALOLAN] = {{EVO_LEVEL, 25, SPECIES_GRAVELER_ALOLAN}}, [SPECIES_GRAVELER_ALOLAN] = {{EVO_TRADE, 0, SPECIES_GOLEM_ALOLAN}, {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOLEM_ALOLAN}}, @@ -561,11 +634,11 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_CORSOLA_GALARIAN] = {{EVO_LEVEL, 38, SPECIES_CURSOLA}}, [SPECIES_ZIGZAGOON_GALARIAN] = {{EVO_LEVEL, 20, SPECIES_LINOONE_GALARIAN}}, [SPECIES_LINOONE_GALARIAN] = {{EVO_LEVEL_NIGHT, 35, SPECIES_OBSTAGOON}}, - [SPECIES_DARUMAKA_GALARIAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN}}, + [SPECIES_DARUMAKA_GALARIAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}}, [SPECIES_YAMASK_GALARIAN] = {{EVO_SCRIPT_TRIGGER_DMG, 49, SPECIES_RUNERIGUS}}, #else [SPECIES_ZIGZAGOON_GALARIAN] = {{EVO_LEVEL, 20, SPECIES_LINOONE_GALARIAN}}, - [SPECIES_DARUMAKA_GALARIAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN}}, + [SPECIES_DARUMAKA_GALARIAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}}, #endif #if P_GEN_4_POKEMON == TRUE [SPECIES_BURMY_SANDY_CLOAK] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_SANDY_CLOAK}, @@ -600,7 +673,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #endif #if P_GEN_8_POKEMON == TRUE [SPECIES_SINISTEA_ANTIQUE] = {{EVO_ITEM, ITEM_CHIPPED_POT, SPECIES_POLTEAGEIST_ANTIQUE}}, - [SPECIES_URSARING] = {{EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA}}, [SPECIES_QWILFISH_HISUIAN] = {{EVO_MOVE, MOVE_BARB_BARRAGE, SPECIES_OVERQWIL}}, [SPECIES_SNEASEL_HISUIAN] = {{EVO_ITEM_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}, {EVO_ITEM_HOLD_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}}, diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 9f75ee3e27..42be2a904f 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -2,29 +2,49 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { [SPECIES_VENUSAUR] = sVenusaurFormChangeTable, [SPECIES_VENUSAUR_MEGA] = sVenusaurFormChangeTable, + [SPECIES_VENUSAUR_GIGANTAMAX] = sVenusaurFormChangeTable, [SPECIES_CHARIZARD] = sCharizardFormChangeTable, [SPECIES_CHARIZARD_MEGA_X] = sCharizardFormChangeTable, [SPECIES_CHARIZARD_MEGA_Y] = sCharizardFormChangeTable, + [SPECIES_CHARIZARD_GIGANTAMAX] = sCharizardFormChangeTable, [SPECIES_BLASTOISE] = sBlastoiseFormChangeTable, [SPECIES_BLASTOISE_MEGA] = sBlastoiseFormChangeTable, + [SPECIES_BLASTOISE_GIGANTAMAX] = sBlastoiseFormChangeTable, + [SPECIES_BUTTERFREE] = sButterfreeFormChangeTable, + [SPECIES_BUTTERFREE_GIGANTAMAX] = sButterfreeFormChangeTable, [SPECIES_BEEDRILL] = sBeedrillFormChangeTable, [SPECIES_BEEDRILL_MEGA] = sBeedrillFormChangeTable, [SPECIES_PIDGEOT] = sPidgeotFormChangeTable, [SPECIES_PIDGEOT_MEGA] = sPidgeotFormChangeTable, + [SPECIES_PIKACHU] = sPikachuFormChangeTable, + [SPECIES_PIKACHU_GIGANTAMAX] = sPikachuFormChangeTable, + [SPECIES_MEOWTH] = sMeowthFormChangeTable, + [SPECIES_MEOWTH_GIGANTAMAX] = sMeowthFormChangeTable, [SPECIES_ALAKAZAM] = sAlakazamFormChangeTable, [SPECIES_ALAKAZAM_MEGA] = sAlakazamFormChangeTable, + [SPECIES_MACHAMP] = sMachampFormChangeTable, + [SPECIES_MACHAMP_GIGANTAMAX] = sMachampFormChangeTable, [SPECIES_SLOWBRO] = sSlowbroFormChangeTable, [SPECIES_SLOWBRO_MEGA] = sSlowbroFormChangeTable, [SPECIES_GENGAR] = sGengarFormChangeTable, [SPECIES_GENGAR_MEGA] = sGengarFormChangeTable, + [SPECIES_GENGAR_GIGANTAMAX] = sGengarFormChangeTable, + [SPECIES_KINGLER] = sKinglerFormChangeTable, + [SPECIES_KINGLER_GIGANTAMAX] = sKinglerFormChangeTable, [SPECIES_KANGASKHAN] = sKangaskhanFormChangeTable, [SPECIES_KANGASKHAN_MEGA] = sKangaskhanFormChangeTable, [SPECIES_PINSIR] = sPinsirFormChangeTable, [SPECIES_PINSIR_MEGA] = sPinsirFormChangeTable, [SPECIES_GYARADOS] = sGyaradosFormChangeTable, [SPECIES_GYARADOS_MEGA] = sGyaradosFormChangeTable, + [SPECIES_LAPRAS] = sLaprasFormChangeTable, + [SPECIES_LAPRAS_GIGANTAMAX] = sLaprasFormChangeTable, + [SPECIES_EEVEE] = sEeveeFormChangeTable, + [SPECIES_EEVEE_GIGANTAMAX] = sEeveeFormChangeTable, [SPECIES_AERODACTYL] = sAerodactylFormChangeTable, [SPECIES_AERODACTYL_MEGA] = sAerodactylFormChangeTable, + [SPECIES_SNORLAX] = sSnorlaxFormChangeTable, + [SPECIES_SNORLAX_GIGANTAMAX] = sSnorlaxFormChangeTable, [SPECIES_MEWTWO] = sMewtwoFormChangeTable, [SPECIES_MEWTWO_MEGA_X] = sMewtwoFormChangeTable, [SPECIES_MEWTWO_MEGA_Y] = sMewtwoFormChangeTable, @@ -64,7 +84,7 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ALTARIA_MEGA] = sAltariaFormChangeTable, [SPECIES_ABSOL] = sAbsolFormChangeTable, [SPECIES_ABSOL_MEGA] = sAbsolFormChangeTable, - [SPECIES_CASTFORM] = sCastformFormChangeTable, + [SPECIES_CASTFORM_NORMAL] = sCastformFormChangeTable, [SPECIES_CASTFORM_SUNNY] = sCastformFormChangeTable, [SPECIES_CASTFORM_RAINY] = sCastformFormChangeTable, [SPECIES_CASTFORM_SNOWY] = sCastformFormChangeTable, @@ -89,10 +109,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_RAYQUAZA] = sRayquazaFormChangeTable, [SPECIES_RAYQUAZA_MEGA] = sRayquazaFormChangeTable, #if P_GEN_4_POKEMON == TRUE - [SPECIES_BURMY] = sBurmyFormChangeTable, + [SPECIES_BURMY_PLANT_CLOAK] = sBurmyFormChangeTable, [SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormChangeTable, [SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormChangeTable, - [SPECIES_CHERRIM] = sCherrimFormChangeTable, + [SPECIES_CHERRIM_OVERCAST] = sCherrimFormChangeTable, [SPECIES_CHERRIM_SUNSHINE] = sCherrimFormChangeTable, [SPECIES_LOPUNNY] = sLopunnyFormChangeTable, [SPECIES_LOPUNNY_MEGA] = sLopunnyFormChangeTable, @@ -104,15 +124,21 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ABOMASNOW_MEGA] = sAbomasnowFormChangeTable, [SPECIES_GALLADE] = sGalladeFormChangeTable, [SPECIES_GALLADE_MEGA] = sGalladeFormChangeTable, + [SPECIES_ROTOM] = sRotomFormChangeTable, + [SPECIES_ROTOM_HEAT] = sRotomFormChangeTable, + [SPECIES_ROTOM_WASH] = sRotomFormChangeTable, + [SPECIES_ROTOM_FROST] = sRotomFormChangeTable, + [SPECIES_ROTOM_FAN] = sRotomFormChangeTable, + [SPECIES_ROTOM_MOW] = sRotomFormChangeTable, [SPECIES_DIALGA] = sDialgaFormChangeTable, [SPECIES_DIALGA_ORIGIN] = sDialgaFormChangeTable, [SPECIES_PALKIA] = sPalkiaFormChangeTable, [SPECIES_PALKIA_ORIGIN] = sPalkiaFormChangeTable, - [SPECIES_GIRATINA] = sGiratinaFormChangeTable, + [SPECIES_GIRATINA_ALTERED] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, - [SPECIES_SHAYMIN] = sShayminFormChangeTable, + [SPECIES_SHAYMIN_LAND] = sShayminFormChangeTable, [SPECIES_SHAYMIN_SKY] = sShayminFormChangeTable, - [SPECIES_ARCEUS] = sArceusFormChangeTable, + [SPECIES_ARCEUS_NORMAL] = sArceusFormChangeTable, [SPECIES_ARCEUS_FIGHTING] = sArceusFormChangeTable, [SPECIES_ARCEUS_FLYING] = sArceusFormChangeTable, [SPECIES_ARCEUS_POISON] = sArceusFormChangeTable, @@ -134,19 +160,21 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = #if P_GEN_5_POKEMON == TRUE [SPECIES_AUDINO] = sAudinoFormChangeTable, [SPECIES_AUDINO_MEGA] = sAudinoFormChangeTable, - [SPECIES_DARMANITAN] = sDarmanitanFormChangeTable, + [SPECIES_DARMANITAN_STANDARD_MODE] = sDarmanitanFormChangeTable, [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormChangeTable, - [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianFormChangeTable, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianFormChangeTable, - [SPECIES_TORNADUS] = sTornadusFormChangeTable, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = sDarmanitanGalarianFormChangeTable, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = sDarmanitanGalarianFormChangeTable, + [SPECIES_GARBODOR] = sGarbodorFormChangeTable, + [SPECIES_GARBODOR_GIGANTAMAX] = sGarbodorFormChangeTable, + [SPECIES_TORNADUS_INCARNATE] = sTornadusFormChangeTable, [SPECIES_TORNADUS_THERIAN] = sTornadusFormChangeTable, - [SPECIES_THUNDURUS] = sThundurusFormChangeTable, + [SPECIES_THUNDURUS_INCARNATE] = sThundurusFormChangeTable, [SPECIES_THUNDURUS_THERIAN] = sThundurusFormChangeTable, - [SPECIES_LANDORUS] = sLandorusFormChangeTable, + [SPECIES_LANDORUS_INCARNATE] = sLandorusFormChangeTable, [SPECIES_LANDORUS_THERIAN] = sLandorusFormChangeTable, - [SPECIES_KELDEO] = sKeldeoFormChangeTable, + [SPECIES_KELDEO_ORDINARY] = sKeldeoFormChangeTable, [SPECIES_KELDEO_RESOLUTE] = sKeldeoFormChangeTable, - [SPECIES_MELOETTA] = sMeloettaFormChangeTable, + [SPECIES_MELOETTA_ARIA] = sMeloettaFormChangeTable, [SPECIES_MELOETTA_PIROUETTE] = sMeloettaFormChangeTable, [SPECIES_GENESECT] = sGenesectFormChangeTable, [SPECIES_GENESECT_DOUSE_DRIVE] = sGenesectFormChangeTable, @@ -157,26 +185,28 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = #if P_GEN_6_POKEMON == TRUE [SPECIES_GRENINJA_BATTLE_BOND] = sGreninjaBattleBondFormChangeTable, [SPECIES_GRENINJA_ASH] = sGreninjaBattleBondFormChangeTable, - [SPECIES_AEGISLASH] = sAegislashFormChangeTable, + [SPECIES_AEGISLASH_SHIELD] = sAegislashFormChangeTable, [SPECIES_AEGISLASH_BLADE] = sAegislashFormChangeTable, - [SPECIES_XERNEAS] = sXerneasFormChangeTable, + [SPECIES_XERNEAS_NEUTRAL] = sXerneasFormChangeTable, [SPECIES_XERNEAS_ACTIVE] = sXerneasFormChangeTable, - [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable, + [SPECIES_ZYGARDE] = sZygardeFormChangeTable, + [SPECIES_ZYGARDE_10] = sZygarde10FormChangeTable, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable, - [SPECIES_ZYGARDE_COMPLETE] = sZygardePowerConstructFormChangeTable, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygarde10PowerConstructFormChangeTable, + [SPECIES_ZYGARDE_COMPLETE] = sZygardeCompleteFormChangeTable, [SPECIES_DIANCIE] = sDiancieFormChangeTable, [SPECIES_DIANCIE_MEGA] = sDiancieFormChangeTable, - [SPECIES_HOOPA] = sHoopaFormChangeTable, + [SPECIES_HOOPA_CONFINED] = sHoopaFormChangeTable, [SPECIES_HOOPA_UNBOUND] = sHoopaFormChangeTable, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_ORICORIO] = sOricorioFormChangeTable, + [SPECIES_ORICORIO_BAILE] = sOricorioFormChangeTable, [SPECIES_ORICORIO_POM_POM] = sOricorioFormChangeTable, [SPECIES_ORICORIO_PAU] = sOricorioFormChangeTable, [SPECIES_ORICORIO_SENSU] = sOricorioFormChangeTable, - [SPECIES_WISHIWASHI] = sWishiwashiFormChangeTable, + [SPECIES_WISHIWASHI_SOLO] = sWishiwashiFormChangeTable, [SPECIES_WISHIWASHI_SCHOOL] = sWishiwashiFormChangeTable, - [SPECIES_SILVALLY] = sSilvallyFormChangeTable, + [SPECIES_SILVALLY_NORMAL] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_BUG] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_DARK] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_DRAGON] = sSilvallyFormChangeTable, @@ -194,9 +224,9 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_SILVALLY_ROCK] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_STEEL] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_WATER] = sSilvallyFormChangeTable, - [SPECIES_MIMIKYU] = sMimikyuFormChangeTable, + [SPECIES_MIMIKYU_DISGUISED] = sMimikyuFormChangeTable, [SPECIES_MIMIKYU_BUSTED] = sMimikyuFormChangeTable, - [SPECIES_MINIOR] = sMiniorRedFormChangeTable, + [SPECIES_MINIOR_METEOR_RED] = sMiniorRedFormChangeTable, [SPECIES_MINIOR_CORE_RED] = sMiniorRedFormChangeTable, [SPECIES_MINIOR_METEOR_BLUE] = sMiniorBlueFormChangeTable, [SPECIES_MINIOR_CORE_BLUE] = sMiniorBlueFormChangeTable, @@ -212,20 +242,136 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_MINIOR_CORE_YELLOW] = sMiniorYellowFormChangeTable, [SPECIES_NECROZMA_DUSK_MANE] = sNecrozmaDuskManeFormChangeTable, [SPECIES_NECROZMA_DAWN_WINGS] = sNecrozmaDawnWingsFormChangeTable, + [SPECIES_MELMETAL] = sMelmetalFormChangeTable, + [SPECIES_MELMETAL_GIGANTAMAX] = sMelmetalFormChangeTable, #endif #if P_GEN_8_POKEMON == TRUE + [SPECIES_RILLABOOM] = sRillaboomFormChangeTable, + [SPECIES_RILLABOOM_GIGANTAMAX] = sRillaboomFormChangeTable, + [SPECIES_CINDERACE] = sCinderaceFormChangeTable, + [SPECIES_CINDERACE_GIGANTAMAX] = sCinderaceFormChangeTable, + [SPECIES_INTELEON] = sInteleonFormChangeTable, + [SPECIES_INTELEON_GIGANTAMAX] = sInteleonFormChangeTable, + [SPECIES_CORVIKNIGHT] = sCorviknightFormChangeTable, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = sCorviknightFormChangeTable, + [SPECIES_ORBEETLE] = sOrbeetleFormChangeTable, + [SPECIES_ORBEETLE_GIGANTAMAX] = sOrbeetleFormChangeTable, + [SPECIES_DREDNAW] = sDrednawFormChangeTable, + [SPECIES_DREDNAW_GIGANTAMAX] = sDrednawFormChangeTable, + [SPECIES_COALOSSAL] = sCoalossalFormChangeTable, + [SPECIES_COALOSSAL_GIGANTAMAX] = sCoalossalFormChangeTable, + [SPECIES_FLAPPLE] = sFlappleFormChangeTable, + [SPECIES_FLAPPLE_GIGANTAMAX] = sFlappleFormChangeTable, + [SPECIES_APPLETUN] = sAppletunFormChangeTable, + [SPECIES_APPLETUN_GIGANTAMAX] = sAppletunFormChangeTable, + [SPECIES_SANDACONDA] = sSandacondaFormChangeTable, + [SPECIES_SANDACONDA_GIGANTAMAX] = sSandacondaFormChangeTable, [SPECIES_CRAMORANT] = sCramorantFormChangeTable, [SPECIES_CRAMORANT_GULPING] = sCramorantFormChangeTable, [SPECIES_CRAMORANT_GORGING] = sCramorantFormChangeTable, - [SPECIES_EISCUE] = sEiscueFormChangeTable, + [SPECIES_TOXTRICITY] = sToxtricityAmpedFormChangeTable, + [SPECIES_TOXTRICITY_LOW_KEY] = sToxtricityAmpedFormChangeTable, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = sToxtricityLowKeyFormChangeTable, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = sToxtricityLowKeyFormChangeTable, + [SPECIES_CENTISKORCH] = sCentiskorchFormChangeTable, + [SPECIES_CENTISKORCH_GIGANTAMAX] = sCentiskorchFormChangeTable, + [SPECIES_HATTERENE] = sHattereneFormChangeTable, + [SPECIES_HATTERENE_GIGANTAMAX] = sHattereneFormChangeTable, + [SPECIES_GRIMMSNARL] = sGrimmsnarlFormChangeTable, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = sGrimmsnarlFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = sAlcremieFormChangeTable, + [SPECIES_ALCREMIE_GIGANTAMAX] = sAlcremieFormChangeTable, + [SPECIES_EISCUE_ICE_FACE] = sEiscueFormChangeTable, [SPECIES_EISCUE_NOICE_FACE] = sEiscueFormChangeTable, - [SPECIES_MORPEKO] = sMorpekoFormChangeTable, + [SPECIES_MORPEKO_FULL_BELLY] = sMorpekoFormChangeTable, [SPECIES_MORPEKO_HANGRY] = sMorpekoFormChangeTable, - [SPECIES_ZACIAN] = sZacianFormChangeTable, + [SPECIES_COPPERAJAH] = sCopperajahFormChangeTable, + [SPECIES_COPPERAJAH_GIGANTAMAX] = sCopperajahFormChangeTable, + [SPECIES_DURALUDON] = sDuraludonFormChangeTable, + [SPECIES_DURALUDON_GIGANTAMAX] = sDuraludonFormChangeTable, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = sZacianFormChangeTable, [SPECIES_ZACIAN_CROWNED_SWORD] = sZacianFormChangeTable, - [SPECIES_ZAMAZENTA] = sZamazentaFormChangeTable, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = sZamazentaFormChangeTable, [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sZamazentaFormChangeTable, - [SPECIES_ENAMORUS] = sEnamorusFormChangeTable, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = sUrshifuSingleStrikeFormChangeTable, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = sUrshifuSingleStrikeFormChangeTable, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sUrshifuRapidStrikeFormChangeTable, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = sUrshifuRapidStrikeFormChangeTable, + [SPECIES_ENAMORUS_INCARNATE] = sEnamorusFormChangeTable, [SPECIES_ENAMORUS_THERIAN] = sEnamorusFormChangeTable, #endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_PALAFIN_ZERO] = sPalafinZeroFormChangeTable, + [SPECIES_PALAFIN_HERO] = sPalafinZeroFormChangeTable, + [SPECIES_OGERPON_TEAL_MASK] = sOgerponFormChangeTable, + [SPECIES_OGERPON_WELLSPRING_MASK] = sOgerponFormChangeTable, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = sOgerponFormChangeTable, + [SPECIES_OGERPON_CORNERSTONE_MASK] = sOgerponFormChangeTable, + [SPECIES_OGERPON_TEAL_MASK_TERA] = sOgerponFormChangeTable, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = sOgerponFormChangeTable, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = sOgerponFormChangeTable, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = sOgerponFormChangeTable, +#endif }; diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 2db4d8a1d3..ccb736bba8 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,16 +1,19 @@ static const struct FormChange sVenusaurFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_VENUSAUR_GIGANTAMAX}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sCharizardFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X}, {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CHARIZARD_GIGANTAMAX}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBlastoiseFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BLASTOISE_GIGANTAMAX}, {FORM_CHANGE_TERMINATOR}, }; @@ -36,6 +39,7 @@ static const struct FormChange sSlowbroFormChangeTable[] = { static const struct FormChange sGengarFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, {FORM_CHANGE_TERMINATOR}, }; @@ -160,18 +164,18 @@ static const struct FormChange sCastformFormChangeTable[] = { {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL | B_WEATHER_SNOW, ABILITY_FORECAST}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW), ABILITY_FORECAST}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE, ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_NORMAL, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW), ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_NORMAL, B_WEATHER_NONE, ABILITY_FORECAST}, #else {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL | B_WEATHER_SNOW}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW)}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_NORMAL, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW)}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_NORMAL, B_WEATHER_NONE}, #endif - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CASTFORM}, - {FORM_CHANGE_FAINT, SPECIES_CASTFORM}, - {FORM_CHANGE_END_BATTLE, SPECIES_CASTFORM}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CASTFORM_NORMAL}, + {FORM_CHANGE_FAINT, SPECIES_CASTFORM_NORMAL}, + {FORM_CHANGE_END_BATTLE, SPECIES_CASTFORM_NORMAL}, {FORM_CHANGE_TERMINATOR}, }; @@ -227,11 +231,11 @@ static const struct FormChange sRayquazaFormChangeTable[] = { #if P_GEN_4_POKEMON == TRUE static const struct FormChange sBurmyFormChangeTable[] = { - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_GRASS}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_LONG_GRASS}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_POND}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_MOUNTAIN}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_PLAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_LONG_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_POND}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_MOUNTAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_PLAIN}, {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_CAVE}, {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_SAND}, {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_TRASH_CLOAK, BATTLE_TERRAIN_BUILDING}, @@ -241,16 +245,16 @@ static const struct FormChange sBurmyFormChangeTable[] = { static const struct FormChange sCherrimFormChangeTable[] = { #if B_WEATHER_FORMS >= GEN_5 {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE, ABILITY_FLOWER_GIFT}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_OVERCAST, ~B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_OVERCAST, B_WEATHER_NONE, ABILITY_FLOWER_GIFT}, #else {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_OVERCAST, ~B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_OVERCAST, B_WEATHER_NONE}, #endif - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CHERRIM}, - {FORM_CHANGE_FAINT, SPECIES_CHERRIM}, - {FORM_CHANGE_END_BATTLE, SPECIES_CHERRIM}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CHERRIM_OVERCAST}, + {FORM_CHANGE_FAINT, SPECIES_CHERRIM_OVERCAST}, + {FORM_CHANGE_END_BATTLE, SPECIES_CHERRIM_OVERCAST}, {FORM_CHANGE_TERMINATOR}, }; @@ -279,6 +283,16 @@ static const struct FormChange sGalladeFormChangeTable[] = { {FORM_CHANGE_TERMINATOR}, }; +static const struct FormChange sRotomFormChangeTable[] = { + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM, ITEM_ROTOM_CATALOG, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_HEAT, ITEM_ROTOM_CATALOG, 1}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_WASH, ITEM_ROTOM_CATALOG, 2}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_FROST, ITEM_ROTOM_CATALOG, 3}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_FAN, ITEM_ROTOM_CATALOG, 4}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_MOW, ITEM_ROTOM_CATALOG, 5}, + {FORM_CHANGE_TERMINATOR}, +}; + static const struct FormChange sDialgaFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_DIALGA, ITEM_NONE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_DIALGA_ORIGIN, ITEM_ADAMANT_CRYSTAL}, @@ -292,7 +306,7 @@ static const struct FormChange sPalkiaFormChangeTable[] = { }; static const struct FormChange sGiratinaFormChangeTable[] = { - {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ALTERED, ITEM_NONE}, #if I_GRISEOUS_ORB_FORM_CHANGE < GEN_9 {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, #endif @@ -301,13 +315,14 @@ static const struct FormChange sGiratinaFormChangeTable[] = { }; static const struct FormChange sShayminFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, - // {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN}, + {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, + {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN_LAND}, + {FORM_CHANGE_TIME_OF_DAY, SPECIES_SHAYMIN_LAND, NIGHT}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sArceusFormChangeTable[] = { - {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS, ITEM_NONE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_NORMAL, ITEM_NONE, ABILITY_MULTITYPE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_SKY_PLATE, ABILITY_MULTITYPE}, @@ -353,48 +368,48 @@ static const struct FormChange sAudinoFormChangeTable[] = { }; static const struct FormChange sDarmanitanFormChangeTable[] = { - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN}, - {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_STANDARD_MODE, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_STANDARD_MODE}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_STANDARD_MODE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMeloettaFormChangeTable[] = { - {FORM_CHANGE_FAINT, SPECIES_MELOETTA}, - {FORM_CHANGE_END_BATTLE, SPECIES_MELOETTA}, + {FORM_CHANGE_FAINT, SPECIES_MELOETTA_ARIA}, + {FORM_CHANGE_END_BATTLE, SPECIES_MELOETTA_ARIA}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sTornadusFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_INCARNATE, ITEM_REVEAL_GLASS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sThundurusFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_INCARNATE, ITEM_REVEAL_GLASS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLandorusFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_INCARNATE, ITEM_REVEAL_GLASS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKeldeoFormChangeTable[] = { - // {FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED}, - // {FORM_CHANGE_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN}, + {FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED}, + {FORM_CHANGE_MOVE, SPECIES_KELDEO_ORDINARY, MOVE_SECRET_SWORD, WHEN_FORGOTTEN}, {FORM_CHANGE_TERMINATOR}, }; @@ -416,20 +431,45 @@ static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { }; static const struct FormChange sAegislashFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH}, - {FORM_CHANGE_FAINT, SPECIES_AEGISLASH}, - {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_FAINT, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH_SHIELD}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sXerneasFormChangeTable[] = { {FORM_CHANGE_BEGIN_BATTLE, SPECIES_XERNEAS_ACTIVE}, - {FORM_CHANGE_END_BATTLE, SPECIES_XERNEAS, }, + {FORM_CHANGE_END_BATTLE, SPECIES_XERNEAS_NEUTRAL}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sZygardeFormChangeTable[] = { + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10, ITEM_ZYGARDE_CUBE, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 1}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sZygarde10FormChangeTable[] = { + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE, ITEM_ZYGARDE_CUBE, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 1}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZygardePowerConstructFormChangeTable[] = { + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE, ITEM_ZYGARDE_CUBE, 1}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sZygarde10PowerConstructFormChangeTable[] = { + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10, ITEM_ZYGARDE_CUBE, 1}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sZygardeCompleteFormChangeTable[] = { {FORM_CHANGE_FAINT}, {FORM_CHANGE_END_BATTLE}, {FORM_CHANGE_TERMINATOR}, @@ -441,15 +481,15 @@ static const struct FormChange sDiancieFormChangeTable[] = { }; static const struct FormChange sHoopaFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, - {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, + {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED}, + {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED}, {FORM_CHANGE_TERMINATOR}, }; #endif #if P_GEN_7_POKEMON == TRUE static const struct FormChange sOricorioFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO, ITEM_RED_NECTAR}, + {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_BAILE, ITEM_RED_NECTAR}, {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR}, {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR}, {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR}, @@ -457,15 +497,15 @@ static const struct FormChange sOricorioFormChangeTable[] = { }; static const struct FormChange sWishiwashiFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SCHOOL, ABILITY_SCHOOLING, HP_HIGHER_THAN, 25}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25}, - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, - {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI}, - {FORM_CHANGE_END_BATTLE, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SOLO, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI_SOLO}, + {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI_SOLO}, + {FORM_CHANGE_END_BATTLE, SPECIES_WISHIWASHI_SOLO}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSilvallyFormChangeTable[] = { - {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_NORMAL, ITEM_NONE, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_POISON, ITEM_POISON_MEMORY, ABILITY_RKS_SYSTEM}, @@ -487,14 +527,14 @@ static const struct FormChange sSilvallyFormChangeTable[] = { }; static const struct FormChange sMimikyuFormChangeTable[] = { - {FORM_CHANGE_FAINT, SPECIES_MIMIKYU}, - {FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU}, + {FORM_CHANGE_FAINT, SPECIES_MIMIKYU_DISGUISED}, + {FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU_DISGUISED}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorRedFormChangeTable[] = { - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_RED, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_RED}, @@ -569,38 +609,240 @@ static const struct FormChange sCramorantFormChangeTable[] = { }; static const struct FormChange sEiscueFormChangeTable[] = { - {FORM_CHANGE_FAINT, SPECIES_EISCUE}, - {FORM_CHANGE_END_BATTLE, SPECIES_EISCUE}, + {FORM_CHANGE_FAINT, SPECIES_EISCUE_ICE_FACE}, + {FORM_CHANGE_END_BATTLE, SPECIES_EISCUE_ICE_FACE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMorpekoFormChangeTable[] = { - {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_HANGRY, ABILITY_HUNGER_SWITCH}, - {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO , ABILITY_HUNGER_SWITCH}, - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, - {FORM_CHANGE_FAINT, SPECIES_MORPEKO}, - {FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_HANGRY, ABILITY_HUNGER_SWITCH}, + {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_FULL_BELLY, ABILITY_HUNGER_SWITCH}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO_FULL_BELLY}, + {FORM_CHANGE_FAINT, SPECIES_MORPEKO_FULL_BELLY}, + {FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO_FULL_BELLY}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZacianFormChangeTable[] = { - {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, - {FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN_HERO_OF_MANY_BATTLES, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZamazentaFormChangeTable[] = { - {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, - {FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sEnamorusFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_INCARNATE, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_TERMINATOR}, +}; + +#endif + +#if P_GEN_9_POKEMON == TRUE +static const struct FormChange sOgerponFormChangeTable[] = { + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL_MASK, ITEM_NONE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING_MASK, ITEM_WELLSPRING_MASK}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME_MASK, ITEM_HEARTHFLAME_MASK}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_CORNERSTONE_MASK, ITEM_CORNERSTONE_MASK}, {FORM_CHANGE_TERMINATOR}, }; #endif +static const struct FormChange sButterfreeFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BUTTERFREE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sPikachuFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_PIKACHU_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sMeowthFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MEOWTH_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sMachampFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MACHAMP_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sKinglerFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_KINGLER_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sLaprasFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_LAPRAS_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sEeveeFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_EEVEE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sSnorlaxFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SNORLAX_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +#if P_GEN_5_POKEMON == TRUE +static const struct FormChange sGarbodorFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GARBODOR_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +#endif +#if P_GEN_7_POKEMON == TRUE +static const struct FormChange sMelmetalFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MELMETAL_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +#endif +#if P_GEN_8_POKEMON == TRUE +static const struct FormChange sRillaboomFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_RILLABOOM_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sCinderaceFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CINDERACE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sInteleonFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_INTELEON_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sCorviknightFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CORVIKNIGHT_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sOrbeetleFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ORBEETLE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sDrednawFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DREDNAW_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sCoalossalFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COALOSSAL_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sFlappleFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_FLAPPLE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sAppletunFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_APPLETUN_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sSandacondaFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SANDACONDA_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sToxtricityAmpedFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_AMPED_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +static const struct FormChange sToxtricityLowKeyFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +static const struct FormChange sCentiskorchFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CENTISKORCH_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sHattereneFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_HATTERENE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sGrimmsnarlFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GRIMMSNARL_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sAlcremieFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ALCREMIE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sCopperajahFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COPPERAJAH_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sDuraludonFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DURALUDON_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sUrshifuSingleStrikeFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sUrshifuRapidStrikeFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; + +static const struct FormChange sPalafinZeroFormChangeTable[] = +{ + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_PALAFIN_HERO}, + {FORM_CHANGE_TERMINATOR}, +}; + +#endif + #undef WHEN_LEARNED #undef WHEN_FORGOTTEN diff --git a/src/data/pokemon/form_species_table_pointers.h b/src/data/pokemon/form_species_table_pointers.h index cc66c12ed8..eb3c09087f 100644 --- a/src/data/pokemon/form_species_table_pointers.h +++ b/src/data/pokemon/form_species_table_pointers.h @@ -39,6 +39,10 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_KANGASKHAN] = sKangaskhanFormSpeciesIdTable, [SPECIES_MR_MIME] = sMrMimeFormSpeciesIdTable, [SPECIES_PINSIR] = sPinsirFormSpeciesIdTable, + [SPECIES_TAUROS] = sTaurosFormSpeciesIdTable, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = sTaurosFormSpeciesIdTable, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = sTaurosFormSpeciesIdTable, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = sTaurosFormSpeciesIdTable, [SPECIES_GYARADOS] = sGyaradosFormSpeciesIdTable, [SPECIES_AERODACTYL] = sAerodactylFormSpeciesIdTable, [SPECIES_ARTICUNO] = sArticunoFormSpeciesIdTable, @@ -48,6 +52,8 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_TYPHLOSION] = sTyphlosionFormSpeciesIdTable, [SPECIES_PICHU] = sPichuFormSpeciesIdTable, [SPECIES_AMPHAROS] = sAmpharosFormSpeciesIdTable, + [SPECIES_WOOPER] = sWooperFormSpeciesIdTable, + [SPECIES_WOOPER_PALDEAN] = sWooperFormSpeciesIdTable, [SPECIES_SLOWKING] = sSlowkingFormSpeciesIdTable, [SPECIES_QWILFISH] = sQwilfishFormSpeciesIdTable, [SPECIES_SNEASEL] = sSneaselFormSpeciesIdTable, @@ -72,7 +78,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_SHARPEDO] = sSharpedoFormSpeciesIdTable, [SPECIES_CAMERUPT] = sCameruptFormSpeciesIdTable, [SPECIES_ALTARIA] = sAltariaFormSpeciesIdTable, - [SPECIES_CASTFORM] = sCastformFormSpeciesIdTable, + [SPECIES_CASTFORM_NORMAL] = sCastformFormSpeciesIdTable, [SPECIES_BANETTE] = sBanetteFormSpeciesIdTable, [SPECIES_ABSOL] = sAbsolFormSpeciesIdTable, [SPECIES_GLALIE] = sGlalieFormSpeciesIdTable, @@ -83,13 +89,13 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_KYOGRE] = sKyogreFormSpeciesIdTable, [SPECIES_GROUDON] = sGroudonFormSpeciesIdTable, [SPECIES_RAYQUAZA] = sRayquazaFormSpeciesIdTable, - [SPECIES_DEOXYS] = sDeoxysFormSpeciesIdTable, + [SPECIES_DEOXYS_NORMAL] = sDeoxysFormSpeciesIdTable, #if P_GEN_4_POKEMON == TRUE - [SPECIES_BURMY] = sBurmyFormSpeciesIdTable, - [SPECIES_WORMADAM] = sWormadamFormSpeciesIdTable, - [SPECIES_CHERRIM] = sCherrimFormSpeciesIdTable, - [SPECIES_SHELLOS] = sShellosFormSpeciesIdTable, - [SPECIES_GASTRODON] = sGastrodonFormSpeciesIdTable, + [SPECIES_BURMY_PLANT_CLOAK] = sBurmyFormSpeciesIdTable, + [SPECIES_WORMADAM_PLANT_CLOAK] = sWormadamFormSpeciesIdTable, + [SPECIES_CHERRIM_OVERCAST] = sCherrimFormSpeciesIdTable, + [SPECIES_SHELLOS_WEST_SEA] = sShellosFormSpeciesIdTable, + [SPECIES_GASTRODON_WEST_SEA] = sGastrodonFormSpeciesIdTable, [SPECIES_LOPUNNY] = sLopunnyFormSpeciesIdTable, [SPECIES_GARCHOMP] = sGarchompFormSpeciesIdTable, [SPECIES_LUCARIO] = sLucarioFormSpeciesIdTable, @@ -98,80 +104,161 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ROTOM] = sRotomFormSpeciesIdTable, [SPECIES_DIALGA] = sDialgaFormSpeciesIdTable, [SPECIES_PALKIA] = sPalkiaFormSpeciesIdTable, - [SPECIES_GIRATINA] = sGiratinaFormSpeciesIdTable, - [SPECIES_SHAYMIN] = sShayminFormSpeciesIdTable, - [SPECIES_ARCEUS] = sArceusFormSpeciesIdTable, + [SPECIES_GIRATINA_ALTERED] = sGiratinaFormSpeciesIdTable, + [SPECIES_SHAYMIN_LAND] = sShayminFormSpeciesIdTable, + [SPECIES_ARCEUS_NORMAL] = sArceusFormSpeciesIdTable, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_SAMUROTT] = sSamurottFormSpeciesIdTable, [SPECIES_AUDINO] = sAudinoFormSpeciesIdTable, - [SPECIES_BASCULIN] = sBasculinFormSpeciesIdTable, + [SPECIES_BASCULIN_RED_STRIPED] = sBasculinFormSpeciesIdTable, [SPECIES_LILLIGANT] = sLilligantFormSpeciesIdTable, [SPECIES_DARUMAKA] = sDarumakaFormSpeciesIdTable, - [SPECIES_DARMANITAN] = sDarmanitanFormSpeciesIdTable, + [SPECIES_DARMANITAN_STANDARD_MODE] = sDarmanitanFormSpeciesIdTable, [SPECIES_YAMASK] = sYamaskFormSpeciesIdTable, [SPECIES_ZORUA] = sZoruaFormSpeciesIdTable, [SPECIES_ZOROARK] = sZoroarkFormSpeciesIdTable, - [SPECIES_DEERLING] = sDeerlingFormSpeciesIdTable, - [SPECIES_SAWSBUCK] = sSawsbuckFormSpeciesIdTable, + [SPECIES_DEERLING_SPRING] = sDeerlingFormSpeciesIdTable, + [SPECIES_SAWSBUCK_SPRING] = sSawsbuckFormSpeciesIdTable, [SPECIES_STUNFISK] = sStunfiskFormSpeciesIdTable, [SPECIES_BRAVIARY] = sBraviaryFormSpeciesIdTable, - [SPECIES_TORNADUS] = sTornadusFormSpeciesIdTable, - [SPECIES_THUNDURUS] = sThundurusFormSpeciesIdTable, - [SPECIES_LANDORUS] = sLandorusFormSpeciesIdTable, + [SPECIES_TORNADUS_INCARNATE] = sTornadusFormSpeciesIdTable, + [SPECIES_THUNDURUS_INCARNATE] = sThundurusFormSpeciesIdTable, + [SPECIES_LANDORUS_INCARNATE] = sLandorusFormSpeciesIdTable, [SPECIES_KYUREM] = sKyuremFormSpeciesIdTable, - [SPECIES_KELDEO] = sKeldeoFormSpeciesIdTable, - [SPECIES_MELOETTA] = sMeloettaFormSpeciesIdTable, + [SPECIES_KELDEO_ORDINARY] = sKeldeoFormSpeciesIdTable, + [SPECIES_MELOETTA_ARIA] = sMeloettaFormSpeciesIdTable, [SPECIES_GENESECT] = sGenesectFormSpeciesIdTable, #endif #if P_GEN_6_POKEMON == TRUE [SPECIES_GRENINJA] = sGreninjaFormSpeciesIdTable, - [SPECIES_VIVILLON] = sVivillonFormSpeciesIdTable, - [SPECIES_FLABEBE] = sFlabebeFormSpeciesIdTable, + [SPECIES_VIVILLON_ICY_SNOW] = sVivillonFormSpeciesIdTable, + [SPECIES_FLABEBE_RED_FLOWER] = sFlabebeFormSpeciesIdTable, [SPECIES_FLOETTE] = sFloetteFormSpeciesIdTable, [SPECIES_FLORGES] = sFlorgesFormSpeciesIdTable, - [SPECIES_FURFROU] = sFurfrouFormSpeciesIdTable, - [SPECIES_MEOWSTIC] = sMeowsticFormSpeciesIdTable, - [SPECIES_AEGISLASH] = sAegislashFormSpeciesIdTable, + [SPECIES_FURFROU_NATURAL] = sFurfrouFormSpeciesIdTable, + [SPECIES_MEOWSTIC_MALE] = sMeowsticFormSpeciesIdTable, + [SPECIES_AEGISLASH_SHIELD] = sAegislashFormSpeciesIdTable, [SPECIES_SLIGGOO] = sSliggooFormSpeciesIdTable, [SPECIES_GOODRA] = sGoodraFormSpeciesIdTable, - [SPECIES_PUMPKABOO] = sPumpkabooFormSpeciesIdTable, - [SPECIES_GOURGEIST] = sGourgeistFormSpeciesIdTable, + [SPECIES_PUMPKABOO_AVERAGE] = sPumpkabooFormSpeciesIdTable, + [SPECIES_GOURGEIST_AVERAGE] = sGourgeistFormSpeciesIdTable, [SPECIES_AVALUGG] = sAvaluggFormSpeciesIdTable, - [SPECIES_XERNEAS] = sXerneasFormSpeciesIdTable, - [SPECIES_ZYGARDE] = sZygardeFormSpeciesIdTable, + [SPECIES_XERNEAS_NEUTRAL] = sXerneasFormSpeciesIdTable, + [SPECIES_ZYGARDE_50_AURA_BREAK] = sZygardeFormSpeciesIdTable, [SPECIES_DIANCIE] = sDiancieFormSpeciesIdTable, - [SPECIES_HOOPA] = sHoopaFormSpeciesIdTable, + [SPECIES_HOOPA_CONFINED] = sHoopaFormSpeciesIdTable, #endif #if P_GEN_7_POKEMON == TRUE [SPECIES_DECIDUEYE] = sDecidueyeFormSpeciesIdTable, - [SPECIES_ORICORIO] = sOricorioFormSpeciesIdTable, + [SPECIES_ORICORIO_BAILE] = sOricorioFormSpeciesIdTable, [SPECIES_ROCKRUFF] = sRockruffFormSpeciesIdTable, - [SPECIES_LYCANROC] = sLycanrocFormSpeciesIdTable, - [SPECIES_WISHIWASHI] = sWishiwashiFormSpeciesIdTable, - [SPECIES_SILVALLY] = sSilvallyFormSpeciesIdTable, - [SPECIES_MINIOR] = sMiniorFormSpeciesIdTable, - [SPECIES_MIMIKYU] = sMimikyuFormSpeciesIdTable, + [SPECIES_LYCANROC_MIDDAY] = sLycanrocFormSpeciesIdTable, + [SPECIES_WISHIWASHI_SOLO] = sWishiwashiFormSpeciesIdTable, + [SPECIES_SILVALLY_NORMAL] = sSilvallyFormSpeciesIdTable, + [SPECIES_MINIOR_METEOR_RED] = sMiniorFormSpeciesIdTable, + [SPECIES_MIMIKYU_DISGUISED] = sMimikyuFormSpeciesIdTable, [SPECIES_NECROZMA] = sNecrozmaFormSpeciesIdTable, [SPECIES_MAGEARNA] = sMagearnaFormSpeciesIdTable, #endif #if P_GEN_8_POKEMON == TRUE [SPECIES_CRAMORANT] = sCramorantFormSpeciesIdTable, - [SPECIES_TOXTRICITY] = sToxtricityFormSpeciesIdTable, - [SPECIES_SINISTEA] = sSinisteaFormSpeciesIdTable, - [SPECIES_POLTEAGEIST] = sPolteageistFormSpeciesIdTable, - [SPECIES_ALCREMIE] = sAlcremieFormSpeciesIdTable, - [SPECIES_EISCUE] = sEiscueFormSpeciesIdTable, - [SPECIES_INDEEDEE] = sIndeedeeFormSpeciesIdTable, - [SPECIES_MORPEKO] = sMorpekoFormSpeciesIdTable, - [SPECIES_ZACIAN] = sZacianFormSpeciesIdTable, - [SPECIES_ZAMAZENTA] = sZamazentaFormSpeciesIdTable, + [SPECIES_TOXTRICITY_AMPED] = sToxtricityFormSpeciesIdTable, + [SPECIES_SINISTEA_PHONY] = sSinisteaFormSpeciesIdTable, + [SPECIES_POLTEAGEIST_PHONY] = sPolteageistFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, + [SPECIES_EISCUE_ICE_FACE] = sEiscueFormSpeciesIdTable, + [SPECIES_INDEEDEE_MALE] = sIndeedeeFormSpeciesIdTable, + [SPECIES_MORPEKO_FULL_BELLY] = sMorpekoFormSpeciesIdTable, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = sZacianFormSpeciesIdTable, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = sZamazentaFormSpeciesIdTable, [SPECIES_ETERNATUS] = sEternatusFormSpeciesIdTable, - [SPECIES_URSHIFU] = sUrshifuFormSpeciesIdTable, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = sUrshifuFormSpeciesIdTable, [SPECIES_ZARUDE] = sZarudeFormSpeciesIdTable, [SPECIES_CALYREX] = sCalyrexFormSpeciesIdTable, - [SPECIES_ENAMORUS] = sEnamorusFormSpeciesIdTable, - [SPECIES_BASCULEGION] = sBasculegionFormSpeciesIdTable, + [SPECIES_ENAMORUS_INCARNATE] = sEnamorusFormSpeciesIdTable, + [SPECIES_BASCULEGION_MALE] = sBasculegionFormSpeciesIdTable, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_OINKOLOGNE_MALE] = sOinkologneFormSpeciesIdTable, + [SPECIES_OINKOLOGNE_FEMALE] = sOinkologneFormSpeciesIdTable, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = sMausholdFormSpeciesIdTable, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = sMausholdFormSpeciesIdTable, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = sSquawkabillyFormSpeciesIdTable, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = sSquawkabillyFormSpeciesIdTable, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = sSquawkabillyFormSpeciesIdTable, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = sSquawkabillyFormSpeciesIdTable, + [SPECIES_PALAFIN_ZERO] = sPalafinFormSpeciesIdTable, + [SPECIES_PALAFIN_HERO] = sPalafinFormSpeciesIdTable, + [SPECIES_TATSUGIRI_CURLY] = sTatsugiriFormSpeciesIdTable, + [SPECIES_TATSUGIRI_DROOPY] = sTatsugiriFormSpeciesIdTable, + [SPECIES_TATSUGIRI_STRETCHY] = sTatsugiriFormSpeciesIdTable, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = sDudunsparceFormSpeciesIdTable, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = sDudunsparceFormSpeciesIdTable, + [SPECIES_GIMMIGHOUL_CHEST] = sGimmighoulFormSpeciesIdTable, + [SPECIES_GIMMIGHOUL_ROAMING] = sGimmighoulFormSpeciesIdTable, #endif // Megas [SPECIES_VENUSAUR_MEGA] = sVenusaurFormSpeciesIdTable, @@ -268,7 +355,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_LINOONE_GALARIAN] = sLinooneFormSpeciesIdTable, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = sDarumakaFormSpeciesIdTable, - [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanFormSpeciesIdTable, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = sDarmanitanFormSpeciesIdTable, [SPECIES_YAMASK_GALARIAN] = sYamaskFormSpeciesIdTable, [SPECIES_STUNFISK_GALARIAN] = sStunfiskFormSpeciesIdTable, #endif @@ -400,7 +487,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinFormSpeciesIdTable, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormSpeciesIdTable, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanFormSpeciesIdTable, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = sDarmanitanFormSpeciesIdTable, // Deerling [SPECIES_DEERLING_SUMMER] = sDeerlingFormSpeciesIdTable, [SPECIES_DEERLING_AUTUMN] = sDeerlingFormSpeciesIdTable, @@ -491,7 +578,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = // Xerneas [SPECIES_XERNEAS_ACTIVE] = sXerneasFormSpeciesIdTable, // Zygarde - [SPECIES_ZYGARDE_10] = sZygardeFormSpeciesIdTable, + [SPECIES_ZYGARDE_10_AURA_BREAK] = sZygardeFormSpeciesIdTable, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardeFormSpeciesIdTable, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardeFormSpeciesIdTable, [SPECIES_ZYGARDE_COMPLETE] = sZygardeFormSpeciesIdTable, @@ -561,15 +648,6 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_SINISTEA_ANTIQUE] = sSinisteaFormSpeciesIdTable, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = sPolteageistFormSpeciesIdTable, - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_MATCHA_CREAM] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_MINT_CREAM] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_LEMON_CREAM] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_SALTED_CREAM] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_RUBY_SWIRL] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAlcremieFormSpeciesIdTable, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAlcremieFormSpeciesIdTable, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = sEiscueFormSpeciesIdTable, // Indeedee @@ -593,5 +671,44 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] = [SPECIES_ENAMORUS_THERIAN] = sEnamorusFormSpeciesIdTable, // Basculegion [SPECIES_BASCULEGION_FEMALE] = sBasculegionFormSpeciesIdTable, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = sVenusaurFormSpeciesIdTable, + [SPECIES_CHARIZARD_GIGANTAMAX] = sCharizardFormSpeciesIdTable, + [SPECIES_BLASTOISE_GIGANTAMAX] = sBlastoiseFormSpeciesIdTable, + [SPECIES_BUTTERFREE_GIGANTAMAX] = sButterfreeFormSpeciesIdTable, + [SPECIES_PIKACHU_GIGANTAMAX] = sPikachuFormSpeciesIdTable, + [SPECIES_MEOWTH_GIGANTAMAX] = sMeowthFormSpeciesIdTable, + [SPECIES_MACHAMP_GIGANTAMAX] = sMachampFormSpeciesIdTable, + [SPECIES_GENGAR_GIGANTAMAX] = sGengarFormSpeciesIdTable, + [SPECIES_KINGLER_GIGANTAMAX] = sKinglerFormSpeciesIdTable, + [SPECIES_LAPRAS_GIGANTAMAX] = sLaprasFormSpeciesIdTable, + [SPECIES_EEVEE_GIGANTAMAX] = sEeveeFormSpeciesIdTable, + [SPECIES_SNORLAX_GIGANTAMAX] = sSnorlaxFormSpeciesIdTable, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_GARBODOR_GIGANTAMAX] = sGarbodorFormSpeciesIdTable, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_MELMETAL_GIGANTAMAX] = sMelmetalFormSpeciesIdTable, +#endif + [SPECIES_RILLABOOM_GIGANTAMAX] = sRillaboomFormSpeciesIdTable, + [SPECIES_CINDERACE_GIGANTAMAX] = sCinderaceFormSpeciesIdTable, + [SPECIES_INTELEON_GIGANTAMAX] = sInteleonFormSpeciesIdTable, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = sCorviknightFormSpeciesIdTable, + [SPECIES_ORBEETLE_GIGANTAMAX] = sOrbeetleFormSpeciesIdTable, + [SPECIES_DREDNAW_GIGANTAMAX] = sDrednawFormSpeciesIdTable, + [SPECIES_COALOSSAL_GIGANTAMAX] = sCoalossalFormSpeciesIdTable, + [SPECIES_FLAPPLE_GIGANTAMAX] = sFlappleFormSpeciesIdTable, + [SPECIES_APPLETUN_GIGANTAMAX] = sAppletunFormSpeciesIdTable, + [SPECIES_SANDACONDA_GIGANTAMAX] = sSandacondaFormSpeciesIdTable, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = sToxtricityFormSpeciesIdTable, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = sToxtricityFormSpeciesIdTable, + [SPECIES_CENTISKORCH_GIGANTAMAX] = sCentiskorchFormSpeciesIdTable, + [SPECIES_HATTERENE_GIGANTAMAX] = sHattereneFormSpeciesIdTable, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = sGrimmsnarlFormSpeciesIdTable, + [SPECIES_ALCREMIE_GIGANTAMAX] = sAlcremieFormSpeciesIdTable, + [SPECIES_COPPERAJAH_GIGANTAMAX] = sCopperajahFormSpeciesIdTable, + [SPECIES_DURALUDON_GIGANTAMAX] = sDuraludonFormSpeciesIdTable, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = sUrshifuFormSpeciesIdTable, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = sUrshifuFormSpeciesIdTable, #endif }; diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h index 2f4e9088e0..1f2cef4d97 100644 --- a/src/data/pokemon/form_species_tables.h +++ b/src/data/pokemon/form_species_tables.h @@ -1,6 +1,7 @@ static const u16 sVenusaurFormSpeciesIdTable[] = { SPECIES_VENUSAUR, SPECIES_VENUSAUR_MEGA, + SPECIES_VENUSAUR_GIGANTAMAX, FORM_SPECIES_END, }; @@ -8,12 +9,20 @@ static const u16 sCharizardFormSpeciesIdTable[] = { SPECIES_CHARIZARD, SPECIES_CHARIZARD_MEGA_X, SPECIES_CHARIZARD_MEGA_Y, + SPECIES_CHARIZARD_GIGANTAMAX, FORM_SPECIES_END, }; static const u16 sBlastoiseFormSpeciesIdTable[] = { SPECIES_BLASTOISE, SPECIES_BLASTOISE_MEGA, + SPECIES_BLASTOISE_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sButterfreeFormSpeciesIdTable[] = { + SPECIES_BUTTERFREE, + SPECIES_BUTTERFREE_GIGANTAMAX, FORM_SPECIES_END, }; @@ -57,6 +66,7 @@ static const u16 sPikachuFormSpeciesIdTable[] = { SPECIES_PIKACHU_ALOLA_CAP, SPECIES_PIKACHU_PARTNER_CAP, SPECIES_PIKACHU_WORLD_CAP, + SPECIES_PIKACHU_GIGANTAMAX, FORM_SPECIES_END, }; @@ -106,6 +116,7 @@ static const u16 sMeowthFormSpeciesIdTable[] = { SPECIES_MEOWTH, SPECIES_MEOWTH_ALOLAN, SPECIES_MEOWTH_GALARIAN, + SPECIES_MEOWTH_GIGANTAMAX, FORM_SPECIES_END, }; @@ -133,6 +144,12 @@ static const u16 sArcanineFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sMachampFormSpeciesIdTable[] = { + SPECIES_MACHAMP, + SPECIES_MACHAMP_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sGeodudeFormSpeciesIdTable[] = { SPECIES_GEODUDE, SPECIES_GEODUDE_ALOLAN, @@ -194,9 +211,16 @@ static const u16 sMukFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sKinglerFormSpeciesIdTable[] = { + SPECIES_KINGLER, + SPECIES_KINGLER_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sGengarFormSpeciesIdTable[] = { SPECIES_GENGAR, SPECIES_GENGAR_MEGA, + SPECIES_GENGAR_GIGANTAMAX, FORM_SPECIES_END, }; @@ -248,18 +272,44 @@ static const u16 sPinsirFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sTaurosFormSpeciesIdTable[] = { + SPECIES_TAUROS, + SPECIES_TAUROS_PALDEAN_COMBAT_BREED, + SPECIES_TAUROS_PALDEAN_BLAZE_BREED, + SPECIES_TAUROS_PALDEAN_AQUA_BREED, + FORM_SPECIES_END, +}; + static const u16 sGyaradosFormSpeciesIdTable[] = { SPECIES_GYARADOS, SPECIES_GYARADOS_MEGA, FORM_SPECIES_END, }; +static const u16 sLaprasFormSpeciesIdTable[] = { + SPECIES_LAPRAS, + SPECIES_LAPRAS_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sEeveeFormSpeciesIdTable[] = { + SPECIES_EEVEE, + SPECIES_EEVEE_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sAerodactylFormSpeciesIdTable[] = { SPECIES_AERODACTYL, SPECIES_AERODACTYL_MEGA, FORM_SPECIES_END, }; +static const u16 sSnorlaxFormSpeciesIdTable[] = { + SPECIES_SNORLAX, + SPECIES_SNORLAX_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sArticunoFormSpeciesIdTable[] = { SPECIES_ARTICUNO, SPECIES_ARTICUNO_GALARIAN, @@ -303,6 +353,12 @@ static const u16 sAmpharosFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sWooperFormSpeciesIdTable[] = { + SPECIES_WOOPER, + SPECIES_WOOPER_PALDEAN, + FORM_SPECIES_END, +}; + static const u16 sSlowkingFormSpeciesIdTable[] = { SPECIES_SLOWKING, SPECIES_SLOWKING_GALARIAN, @@ -474,7 +530,7 @@ static const u16 sAltariaFormSpeciesIdTable[] = { }; static const u16 sCastformFormSpeciesIdTable[] = { - SPECIES_CASTFORM, + SPECIES_CASTFORM_NORMAL, SPECIES_CASTFORM_SUNNY, SPECIES_CASTFORM_RAINY, SPECIES_CASTFORM_SNOWY, @@ -542,7 +598,7 @@ static const u16 sRayquazaFormSpeciesIdTable[] = { }; static const u16 sDeoxysFormSpeciesIdTable[] = { - SPECIES_DEOXYS, + SPECIES_DEOXYS_NORMAL, SPECIES_DEOXYS_ATTACK, SPECIES_DEOXYS_DEFENSE, SPECIES_DEOXYS_SPEED, @@ -551,33 +607,33 @@ static const u16 sDeoxysFormSpeciesIdTable[] = { #if P_GEN_4_POKEMON == TRUE static const u16 sBurmyFormSpeciesIdTable[] = { - SPECIES_BURMY, + SPECIES_BURMY_PLANT_CLOAK, SPECIES_BURMY_SANDY_CLOAK, SPECIES_BURMY_TRASH_CLOAK, FORM_SPECIES_END, }; static const u16 sWormadamFormSpeciesIdTable[] = { - SPECIES_WORMADAM, + SPECIES_WORMADAM_PLANT_CLOAK, SPECIES_WORMADAM_SANDY_CLOAK, SPECIES_WORMADAM_TRASH_CLOAK, FORM_SPECIES_END, }; static const u16 sCherrimFormSpeciesIdTable[] = { - SPECIES_CHERRIM, + SPECIES_CHERRIM_OVERCAST, SPECIES_CHERRIM_SUNSHINE, FORM_SPECIES_END, }; static const u16 sShellosFormSpeciesIdTable[] = { - SPECIES_SHELLOS, + SPECIES_SHELLOS_WEST_SEA, SPECIES_SHELLOS_EAST_SEA, FORM_SPECIES_END, }; static const u16 sGastrodonFormSpeciesIdTable[] = { - SPECIES_GASTRODON, + SPECIES_GASTRODON_WEST_SEA, SPECIES_GASTRODON_EAST_SEA, FORM_SPECIES_END, }; @@ -635,19 +691,19 @@ static const u16 sPalkiaFormSpeciesIdTable[] = { }; static const u16 sGiratinaFormSpeciesIdTable[] = { - SPECIES_GIRATINA, + SPECIES_GIRATINA_ALTERED, SPECIES_GIRATINA_ORIGIN, FORM_SPECIES_END, }; static const u16 sShayminFormSpeciesIdTable[] = { - SPECIES_SHAYMIN, + SPECIES_SHAYMIN_LAND, SPECIES_SHAYMIN_SKY, FORM_SPECIES_END, }; static const u16 sArceusFormSpeciesIdTable[] = { - SPECIES_ARCEUS, + SPECIES_ARCEUS_NORMAL, SPECIES_ARCEUS_FIGHTING, SPECIES_ARCEUS_FLYING, SPECIES_ARCEUS_POISON, @@ -683,7 +739,7 @@ static const u16 sAudinoFormSpeciesIdTable[] = { }; static const u16 sBasculinFormSpeciesIdTable[] = { - SPECIES_BASCULIN, + SPECIES_BASCULIN_RED_STRIPED, SPECIES_BASCULIN_BLUE_STRIPED, SPECIES_BASCULIN_WHITE_STRIPED, FORM_SPECIES_END, @@ -702,10 +758,10 @@ static const u16 sDarumakaFormSpeciesIdTable[] = { }; static const u16 sDarmanitanFormSpeciesIdTable[] = { - SPECIES_DARMANITAN, + SPECIES_DARMANITAN_STANDARD_MODE, SPECIES_DARMANITAN_ZEN_MODE, - SPECIES_DARMANITAN_GALARIAN, - SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, + SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE, + SPECIES_DARMANITAN_GALARIAN_ZEN_MODE, FORM_SPECIES_END, }; @@ -727,8 +783,14 @@ static const u16 sZoroarkFormSpeciesIdTable[] = { FORM_SPECIES_END, }; +static const u16 sGarbodorFormSpeciesIdTable[] = { + SPECIES_GARBODOR, + SPECIES_GARBODOR_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sDeerlingFormSpeciesIdTable[] = { - SPECIES_DEERLING, + SPECIES_DEERLING_SPRING, SPECIES_DEERLING_SUMMER, SPECIES_DEERLING_AUTUMN, SPECIES_DEERLING_WINTER, @@ -736,7 +798,7 @@ static const u16 sDeerlingFormSpeciesIdTable[] = { }; static const u16 sSawsbuckFormSpeciesIdTable[] = { - SPECIES_SAWSBUCK, + SPECIES_SAWSBUCK_SPRING, SPECIES_SAWSBUCK_SUMMER, SPECIES_SAWSBUCK_AUTUMN, SPECIES_SAWSBUCK_WINTER, @@ -756,19 +818,19 @@ static const u16 sBraviaryFormSpeciesIdTable[] = { }; static const u16 sTornadusFormSpeciesIdTable[] = { - SPECIES_TORNADUS, + SPECIES_TORNADUS_INCARNATE, SPECIES_TORNADUS_THERIAN, FORM_SPECIES_END, }; static const u16 sThundurusFormSpeciesIdTable[] = { - SPECIES_THUNDURUS, + SPECIES_THUNDURUS_INCARNATE, SPECIES_THUNDURUS_THERIAN, FORM_SPECIES_END, }; static const u16 sLandorusFormSpeciesIdTable[] = { - SPECIES_LANDORUS, + SPECIES_LANDORUS_INCARNATE, SPECIES_LANDORUS_THERIAN, FORM_SPECIES_END, }; @@ -781,13 +843,13 @@ static const u16 sKyuremFormSpeciesIdTable[] = { }; static const u16 sKeldeoFormSpeciesIdTable[] = { - SPECIES_KELDEO, + SPECIES_KELDEO_ORDINARY, SPECIES_KELDEO_RESOLUTE, FORM_SPECIES_END, }; static const u16 sMeloettaFormSpeciesIdTable[] = { - SPECIES_MELOETTA, + SPECIES_MELOETTA_ARIA, SPECIES_MELOETTA_PIROUETTE, FORM_SPECIES_END, }; @@ -811,7 +873,7 @@ static const u16 sGreninjaFormSpeciesIdTable[] = { }; static const u16 sVivillonFormSpeciesIdTable[] = { - SPECIES_VIVILLON, + SPECIES_VIVILLON_ICY_SNOW, SPECIES_VIVILLON_POLAR, SPECIES_VIVILLON_TUNDRA, SPECIES_VIVILLON_CONTINENTAL, @@ -835,7 +897,7 @@ static const u16 sVivillonFormSpeciesIdTable[] = { }; static const u16 sFlabebeFormSpeciesIdTable[] = { - SPECIES_FLABEBE, + SPECIES_FLABEBE_RED_FLOWER, SPECIES_FLABEBE_YELLOW_FLOWER, SPECIES_FLABEBE_ORANGE_FLOWER, SPECIES_FLABEBE_BLUE_FLOWER, @@ -844,7 +906,7 @@ static const u16 sFlabebeFormSpeciesIdTable[] = { }; static const u16 sFloetteFormSpeciesIdTable[] = { - SPECIES_FLOETTE, + SPECIES_FLOETTE_RED_FLOWER, SPECIES_FLOETTE_YELLOW_FLOWER, SPECIES_FLOETTE_ORANGE_FLOWER, SPECIES_FLOETTE_BLUE_FLOWER, @@ -854,7 +916,7 @@ static const u16 sFloetteFormSpeciesIdTable[] = { }; static const u16 sFlorgesFormSpeciesIdTable[] = { - SPECIES_FLORGES, + SPECIES_FLORGES_RED_FLOWER, SPECIES_FLORGES_YELLOW_FLOWER, SPECIES_FLORGES_ORANGE_FLOWER, SPECIES_FLORGES_BLUE_FLOWER, @@ -863,7 +925,7 @@ static const u16 sFlorgesFormSpeciesIdTable[] = { }; static const u16 sFurfrouFormSpeciesIdTable[] = { - SPECIES_FURFROU, + SPECIES_FURFROU_NATURAL, SPECIES_FURFROU_HEART_TRIM, SPECIES_FURFROU_STAR_TRIM, SPECIES_FURFROU_DIAMOND_TRIM, @@ -877,13 +939,13 @@ static const u16 sFurfrouFormSpeciesIdTable[] = { }; static const u16 sMeowsticFormSpeciesIdTable[] = { - SPECIES_MEOWSTIC, + SPECIES_MEOWSTIC_MALE, SPECIES_MEOWSTIC_FEMALE, FORM_SPECIES_END, }; static const u16 sAegislashFormSpeciesIdTable[] = { - SPECIES_AEGISLASH, + SPECIES_AEGISLASH_SHIELD, SPECIES_AEGISLASH_BLADE, FORM_SPECIES_END, }; @@ -901,7 +963,7 @@ static const u16 sGoodraFormSpeciesIdTable[] = { }; static const u16 sPumpkabooFormSpeciesIdTable[] = { - SPECIES_PUMPKABOO, + SPECIES_PUMPKABOO_AVERAGE, SPECIES_PUMPKABOO_SMALL, SPECIES_PUMPKABOO_LARGE, SPECIES_PUMPKABOO_SUPER, @@ -909,7 +971,7 @@ static const u16 sPumpkabooFormSpeciesIdTable[] = { }; static const u16 sGourgeistFormSpeciesIdTable[] = { - SPECIES_GOURGEIST, + SPECIES_GOURGEIST_AVERAGE, SPECIES_GOURGEIST_SMALL, SPECIES_GOURGEIST_LARGE, SPECIES_GOURGEIST_SUPER, @@ -923,14 +985,14 @@ static const u16 sAvaluggFormSpeciesIdTable[] = { }; static const u16 sXerneasFormSpeciesIdTable[] = { - SPECIES_XERNEAS, + SPECIES_XERNEAS_NEUTRAL, SPECIES_XERNEAS_ACTIVE, FORM_SPECIES_END, }; static const u16 sZygardeFormSpeciesIdTable[] = { - SPECIES_ZYGARDE, - SPECIES_ZYGARDE_10, + SPECIES_ZYGARDE_50_AURA_BREAK, + SPECIES_ZYGARDE_10_AURA_BREAK, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, SPECIES_ZYGARDE_COMPLETE, @@ -944,7 +1006,7 @@ static const u16 sDiancieFormSpeciesIdTable[] = { }; static const u16 sHoopaFormSpeciesIdTable[] = { - SPECIES_HOOPA, + SPECIES_HOOPA_CONFINED, SPECIES_HOOPA_UNBOUND, FORM_SPECIES_END, }; @@ -958,7 +1020,7 @@ static const u16 sDecidueyeFormSpeciesIdTable[] = { }; static const u16 sOricorioFormSpeciesIdTable[] = { - SPECIES_ORICORIO, + SPECIES_ORICORIO_BAILE, SPECIES_ORICORIO_POM_POM, SPECIES_ORICORIO_PAU, SPECIES_ORICORIO_SENSU, @@ -972,20 +1034,20 @@ static const u16 sRockruffFormSpeciesIdTable[] = { }; static const u16 sLycanrocFormSpeciesIdTable[] = { - SPECIES_LYCANROC, + SPECIES_LYCANROC_MIDDAY, SPECIES_LYCANROC_MIDNIGHT, SPECIES_LYCANROC_DUSK, FORM_SPECIES_END, }; static const u16 sWishiwashiFormSpeciesIdTable[] = { - SPECIES_WISHIWASHI, + SPECIES_WISHIWASHI_SOLO, SPECIES_WISHIWASHI_SCHOOL, FORM_SPECIES_END, }; static const u16 sSilvallyFormSpeciesIdTable[] = { - SPECIES_SILVALLY, + SPECIES_SILVALLY_NORMAL, SPECIES_SILVALLY_FIGHTING, SPECIES_SILVALLY_FLYING, SPECIES_SILVALLY_POISON, @@ -1007,7 +1069,7 @@ static const u16 sSilvallyFormSpeciesIdTable[] = { }; static const u16 sMiniorFormSpeciesIdTable[] = { - SPECIES_MINIOR, + SPECIES_MINIOR_METEOR_RED, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_METEOR_GREEN, @@ -1025,7 +1087,7 @@ static const u16 sMiniorFormSpeciesIdTable[] = { }; static const u16 sMimikyuFormSpeciesIdTable[] = { - SPECIES_MIMIKYU, + SPECIES_MIMIKYU_DISGUISED, SPECIES_MIMIKYU_BUSTED, FORM_SPECIES_END, }; @@ -1043,9 +1105,77 @@ static const u16 sMagearnaFormSpeciesIdTable[] = { SPECIES_MAGEARNA_ORIGINAL_COLOR, FORM_SPECIES_END, }; + +static const u16 sMelmetalFormSpeciesIdTable[] = { + SPECIES_MELMETAL, + SPECIES_MELMETAL_GIGANTAMAX, + FORM_SPECIES_END, +}; #endif #if P_GEN_8_POKEMON == TRUE + +static const u16 sRillaboomFormSpeciesIdTable[] = { + SPECIES_RILLABOOM, + SPECIES_RILLABOOM_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sCinderaceFormSpeciesIdTable[] = { + SPECIES_CINDERACE, + SPECIES_CINDERACE_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sInteleonFormSpeciesIdTable[] = { + SPECIES_INTELEON, + SPECIES_INTELEON_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sCorviknightFormSpeciesIdTable[] = { + SPECIES_CORVIKNIGHT, + SPECIES_CORVIKNIGHT_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sOrbeetleFormSpeciesIdTable[] = { + SPECIES_ORBEETLE, + SPECIES_ORBEETLE_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sDrednawFormSpeciesIdTable[] = { + SPECIES_DREDNAW, + SPECIES_DREDNAW_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sCoalossalFormSpeciesIdTable[] = { + SPECIES_COALOSSAL, + SPECIES_COALOSSAL_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sFlappleFormSpeciesIdTable[] = { + SPECIES_FLAPPLE, + SPECIES_FLAPPLE_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sAppletunFormSpeciesIdTable[] = { + SPECIES_APPLETUN, + SPECIES_APPLETUN_GIGANTAMAX, + FORM_SPECIES_END, +}; + + +static const u16 sSandacondaFormSpeciesIdTable[] = { + SPECIES_SANDACONDA, + SPECIES_SANDACONDA_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sCramorantFormSpeciesIdTable[] = { SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, @@ -1054,62 +1184,149 @@ static const u16 sCramorantFormSpeciesIdTable[] = { }; static const u16 sToxtricityFormSpeciesIdTable[] = { - SPECIES_TOXTRICITY, + SPECIES_TOXTRICITY_AMPED, SPECIES_TOXTRICITY_LOW_KEY, + SPECIES_TOXTRICITY_AMPED_GIGANTAMAX, + SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sCentiskorchFormSpeciesIdTable[] = { + SPECIES_CENTISKORCH, + SPECIES_CENTISKORCH_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sHattereneFormSpeciesIdTable[] = { + SPECIES_HATTERENE, + SPECIES_HATTERENE_GIGANTAMAX, FORM_SPECIES_END, }; static const u16 sSinisteaFormSpeciesIdTable[] = { - SPECIES_SINISTEA, + SPECIES_SINISTEA_PHONY, SPECIES_SINISTEA_ANTIQUE, FORM_SPECIES_END, }; static const u16 sPolteageistFormSpeciesIdTable[] = { - SPECIES_POLTEAGEIST, + SPECIES_POLTEAGEIST_PHONY, SPECIES_POLTEAGEIST_ANTIQUE, FORM_SPECIES_END, }; +static const u16 sGrimmsnarlFormSpeciesIdTable[] = { + SPECIES_GRIMMSNARL, + SPECIES_GRIMMSNARL_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sAlcremieFormSpeciesIdTable[] = { - SPECIES_ALCREMIE, - SPECIES_ALCREMIE_RUBY_CREAM, - SPECIES_ALCREMIE_MATCHA_CREAM, - SPECIES_ALCREMIE_MINT_CREAM, - SPECIES_ALCREMIE_LEMON_CREAM, - SPECIES_ALCREMIE_SALTED_CREAM, - SPECIES_ALCREMIE_RUBY_SWIRL, - SPECIES_ALCREMIE_CARAMEL_SWIRL, - SPECIES_ALCREMIE_RAINBOW_SWIRL, + SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM, + SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL, + SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, + SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, + SPECIES_ALCREMIE_BERRY_VANILLA_CREAM, + SPECIES_ALCREMIE_BERRY_RUBY_CREAM, + SPECIES_ALCREMIE_BERRY_MATCHA_CREAM, + SPECIES_ALCREMIE_BERRY_MINT_CREAM, + SPECIES_ALCREMIE_BERRY_LEMON_CREAM, + SPECIES_ALCREMIE_BERRY_SALTED_CREAM, + SPECIES_ALCREMIE_BERRY_RUBY_SWIRL, + SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL, + SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL, + SPECIES_ALCREMIE_LOVE_VANILLA_CREAM, + SPECIES_ALCREMIE_LOVE_RUBY_CREAM, + SPECIES_ALCREMIE_LOVE_MATCHA_CREAM, + SPECIES_ALCREMIE_LOVE_MINT_CREAM, + SPECIES_ALCREMIE_LOVE_LEMON_CREAM, + SPECIES_ALCREMIE_LOVE_SALTED_CREAM, + SPECIES_ALCREMIE_LOVE_RUBY_SWIRL, + SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL, + SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL, + SPECIES_ALCREMIE_STAR_VANILLA_CREAM, + SPECIES_ALCREMIE_STAR_RUBY_CREAM, + SPECIES_ALCREMIE_STAR_MATCHA_CREAM, + SPECIES_ALCREMIE_STAR_MINT_CREAM, + SPECIES_ALCREMIE_STAR_LEMON_CREAM, + SPECIES_ALCREMIE_STAR_SALTED_CREAM, + SPECIES_ALCREMIE_STAR_RUBY_SWIRL, + SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL, + SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL, + SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM, + SPECIES_ALCREMIE_CLOVER_RUBY_CREAM, + SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM, + SPECIES_ALCREMIE_CLOVER_MINT_CREAM, + SPECIES_ALCREMIE_CLOVER_LEMON_CREAM, + SPECIES_ALCREMIE_CLOVER_SALTED_CREAM, + SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL, + SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL, + SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL, + SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM, + SPECIES_ALCREMIE_FLOWER_RUBY_CREAM, + SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM, + SPECIES_ALCREMIE_FLOWER_MINT_CREAM, + SPECIES_ALCREMIE_FLOWER_LEMON_CREAM, + SPECIES_ALCREMIE_FLOWER_SALTED_CREAM, + SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL, + SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL, + SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL, + SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM, + SPECIES_ALCREMIE_RIBBON_RUBY_CREAM, + SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM, + SPECIES_ALCREMIE_RIBBON_MINT_CREAM, + SPECIES_ALCREMIE_RIBBON_LEMON_CREAM, + SPECIES_ALCREMIE_RIBBON_SALTED_CREAM, + SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL, + SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL, + SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL, + SPECIES_ALCREMIE_GIGANTAMAX, FORM_SPECIES_END, }; static const u16 sEiscueFormSpeciesIdTable[] = { - SPECIES_EISCUE, + SPECIES_EISCUE_ICE_FACE, SPECIES_EISCUE_NOICE_FACE, FORM_SPECIES_END, }; static const u16 sIndeedeeFormSpeciesIdTable[] = { - SPECIES_INDEEDEE, + SPECIES_INDEEDEE_MALE, SPECIES_INDEEDEE_FEMALE, FORM_SPECIES_END, }; static const u16 sMorpekoFormSpeciesIdTable[] = { - SPECIES_MORPEKO, + SPECIES_MORPEKO_FULL_BELLY, SPECIES_MORPEKO_HANGRY, FORM_SPECIES_END, }; +static const u16 sCopperajahFormSpeciesIdTable[] = { + SPECIES_COPPERAJAH, + SPECIES_COPPERAJAH_GIGANTAMAX, + FORM_SPECIES_END, +}; + +static const u16 sDuraludonFormSpeciesIdTable[] = { + SPECIES_DURALUDON, + SPECIES_DURALUDON_GIGANTAMAX, + FORM_SPECIES_END, +}; + static const u16 sZacianFormSpeciesIdTable[] = { - SPECIES_ZACIAN, + SPECIES_ZACIAN_HERO_OF_MANY_BATTLES, SPECIES_ZACIAN_CROWNED_SWORD, FORM_SPECIES_END, }; static const u16 sZamazentaFormSpeciesIdTable[] = { - SPECIES_ZAMAZENTA, + SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES, SPECIES_ZAMAZENTA_CROWNED_SHIELD, FORM_SPECIES_END, }; @@ -1121,8 +1338,10 @@ static const u16 sEternatusFormSpeciesIdTable[] = { }; static const u16 sUrshifuFormSpeciesIdTable[] = { - SPECIES_URSHIFU, + SPECIES_URSHIFU_SINGLE_STRIKE_STYLE, SPECIES_URSHIFU_RAPID_STRIKE_STYLE, + SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, + SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, FORM_SPECIES_END, }; @@ -1140,15 +1359,61 @@ static const u16 sCalyrexFormSpeciesIdTable[] = { }; static const u16 sEnamorusFormSpeciesIdTable[] = { - SPECIES_ENAMORUS, + SPECIES_ENAMORUS_INCARNATE, SPECIES_ENAMORUS_THERIAN, FORM_SPECIES_END, }; static const u16 sBasculegionFormSpeciesIdTable[] = { - SPECIES_BASCULEGION, + SPECIES_BASCULEGION_MALE, SPECIES_BASCULEGION_FEMALE, FORM_SPECIES_END, }; - +#endif + +#if P_GEN_9_POKEMON == TRUE +static const u16 sOinkologneFormSpeciesIdTable[] = { + SPECIES_OINKOLOGNE_MALE, + SPECIES_OINKOLOGNE_FEMALE, + FORM_SPECIES_END, +}; + +static const u16 sMausholdFormSpeciesIdTable[] = { + SPECIES_MAUSHOLD_FAMILY_OF_THREE, + SPECIES_MAUSHOLD_FAMILY_OF_FOUR, + FORM_SPECIES_END, +}; + +static const u16 sSquawkabillyFormSpeciesIdTable[] = { + SPECIES_SQUAWKABILLY_GREEN_PLUMAGE, + SPECIES_SQUAWKABILLY_BLUE_PLUMAGE, + SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE, + SPECIES_SQUAWKABILLY_WHITE_PLUMAGE, + FORM_SPECIES_END, +}; + +static const u16 sPalafinFormSpeciesIdTable[] = { + SPECIES_PALAFIN_ZERO, + SPECIES_PALAFIN_HERO, + FORM_SPECIES_END, +}; + +static const u16 sTatsugiriFormSpeciesIdTable[] = { + SPECIES_TATSUGIRI_CURLY, + SPECIES_TATSUGIRI_DROOPY, + SPECIES_TATSUGIRI_STRETCHY, + FORM_SPECIES_END, +}; + +static const u16 sDudunsparceFormSpeciesIdTable[] = { + SPECIES_DUDUNSPARCE_TWO_SEGMENT, + SPECIES_DUDUNSPARCE_THREE_SEGMENT, + FORM_SPECIES_END, +}; + +static const u16 sGimmighoulFormSpeciesIdTable[] = { + SPECIES_GIMMIGHOUL_CHEST, + SPECIES_GIMMIGHOUL_ROAMING, + FORM_SPECIES_END, +}; #endif diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index d7482d5043..2c7401059e 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -282,6 +282,49 @@ const u8 gItemEffect_SpdefFeather[11] = { [10] = 0, }; +const u8 gItemEffect_HpMochi[11] = { + [4] = ITEM4_EV_HP, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_AtkMochi[11] = { + [4] = ITEM4_EV_ATK, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_DefMochi[11] = { + [5] = ITEM5_EV_DEF, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpeedMochi[11] = { + [5] = ITEM5_EV_SPEED, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpatkMochi[11] = { + [5] = ITEM5_EV_SPATK, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpdefMochi[11] = { + [5] = ITEM5_EV_SPDEF, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_ResetMochi[11] = { + [4] = ITEM4_EV_HP | ITEM4_EV_ATK, + [5] = ITEM5_EV_DEF | ITEM5_EV_SPEED | ITEM5_EV_SPATK | ITEM5_EV_SPDEF, + [6] = ITEM6_RESET_EV, + [10] = 0, +}; + const u8 gItemEffect_RareCandy[10] = { [3] = ITEM3_LEVEL_UP, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, @@ -508,6 +551,15 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, + //Mochi + [ITEM_HEALTH_MOCHI] = gItemEffect_HpMochi, + [ITEM_MUSCLE_MOCHI] = gItemEffect_AtkMochi, + [ITEM_RESIST_MOCHI] = gItemEffect_DefMochi, + [ITEM_GENIUS_MOCHI] = gItemEffect_SpatkMochi, + [ITEM_CLEVER_MOCHI] = gItemEffect_SpdefMochi, + [ITEM_SWIFT_MOCHI] = gItemEffect_SpeedMochi, + [ITEM_FRESH_START_MOCHI] = gItemEffect_ResetMochi, + // Candy [ITEM_RARE_CANDY] = gItemEffect_RareCandy, [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, @@ -566,6 +618,7 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_METAL_COAT] = gItemEffect_EvoItem, [ITEM_KINGS_ROCK] = gItemEffect_EvoItem, [ITEM_RAZOR_CLAW] = gItemEffect_EvoItem, + [ITEM_RAZOR_FANG] = gItemEffect_EvoItem, [ITEM_AUSPICIOUS_ARMOR] = gItemEffect_EvoItem, [ITEM_MALICIOUS_ARMOR] = gItemEffect_EvoItem, [ITEM_SCROLL_OF_DARKNESS] = gItemEffect_EvoItem, diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 19b4e42e44..43b17b4185 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -129,6 +129,9 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_MAGMAR] = sMagmarLevelUpLearnset, [SPECIES_PINSIR] = sPinsirLevelUpLearnset, [SPECIES_TAUROS] = sTaurosLevelUpLearnset, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = sTaurosPaldeanCombatBreedLevelUpLearnset, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = sTaurosPaldeanBlazeBreedLevelUpLearnset, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = sTaurosPaldeanAquaBreedLevelUpLearnset, [SPECIES_MAGIKARP] = sMagikarpLevelUpLearnset, [SPECIES_GYARADOS] = sGyaradosLevelUpLearnset, [SPECIES_LAPRAS] = sLaprasLevelUpLearnset, @@ -195,6 +198,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_SUNFLORA] = sSunfloraLevelUpLearnset, [SPECIES_YANMA] = sYanmaLevelUpLearnset, [SPECIES_WOOPER] = sWooperLevelUpLearnset, + [SPECIES_WOOPER_PALDEAN] = sWooperPaldeanLevelUpLearnset, [SPECIES_QUAGSIRE] = sQuagsireLevelUpLearnset, [SPECIES_ESPEON] = sEspeonLevelUpLearnset, [SPECIES_UMBREON] = sUmbreonLevelUpLearnset, @@ -360,7 +364,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_ARON] = sAronLevelUpLearnset, [SPECIES_LAIRON] = sLaironLevelUpLearnset, [SPECIES_AGGRON] = sAggronLevelUpLearnset, - [SPECIES_CASTFORM] = sCastformLevelUpLearnset, + [SPECIES_CASTFORM_NORMAL] = sCastformLevelUpLearnset, [SPECIES_VOLBEAT] = sVolbeatLevelUpLearnset, [SPECIES_ILLUMISE] = sIllumiseLevelUpLearnset, [SPECIES_LILEEP] = sLileepLevelUpLearnset, @@ -385,7 +389,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_LATIAS] = sLatiasLevelUpLearnset, [SPECIES_LATIOS] = sLatiosLevelUpLearnset, [SPECIES_JIRACHI] = sJirachiLevelUpLearnset, - [SPECIES_DEOXYS] = sDeoxysLevelUpLearnset, + [SPECIES_DEOXYS_NORMAL] = sDeoxysNormalLevelUpLearnset, [SPECIES_CHIMECHO] = sChimechoLevelUpLearnset, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = sTurtwigLevelUpLearnset, @@ -413,8 +417,8 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_RAMPARDOS] = sRampardosLevelUpLearnset, [SPECIES_SHIELDON] = sShieldonLevelUpLearnset, [SPECIES_BASTIODON] = sBastiodonLevelUpLearnset, - [SPECIES_BURMY] = sBurmyLevelUpLearnset, - [SPECIES_WORMADAM] = sWormadamLevelUpLearnset, + [SPECIES_BURMY_PLANT_CLOAK] = sBurmyLevelUpLearnset, + [SPECIES_WORMADAM_PLANT_CLOAK] = sWormadamPlantCloakLevelUpLearnset, [SPECIES_MOTHIM] = sMothimLevelUpLearnset, [SPECIES_COMBEE] = sCombeeLevelUpLearnset, [SPECIES_VESPIQUEN] = sVespiquenLevelUpLearnset, @@ -422,9 +426,9 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_BUIZEL] = sBuizelLevelUpLearnset, [SPECIES_FLOATZEL] = sFloatzelLevelUpLearnset, [SPECIES_CHERUBI] = sCherubiLevelUpLearnset, - [SPECIES_CHERRIM] = sCherrimLevelUpLearnset, - [SPECIES_SHELLOS] = sShellosLevelUpLearnset, - [SPECIES_GASTRODON] = sGastrodonLevelUpLearnset, + [SPECIES_CHERRIM_OVERCAST] = sCherrimLevelUpLearnset, + [SPECIES_SHELLOS_WEST_SEA] = sShellosLevelUpLearnset, + [SPECIES_GASTRODON_WEST_SEA] = sGastrodonLevelUpLearnset, [SPECIES_AMBIPOM] = sAmbipomLevelUpLearnset, [SPECIES_DRIFLOON] = sDrifloonLevelUpLearnset, [SPECIES_DRIFBLIM] = sDrifblimLevelUpLearnset, @@ -488,13 +492,13 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_PALKIA] = sPalkiaLevelUpLearnset, [SPECIES_HEATRAN] = sHeatranLevelUpLearnset, [SPECIES_REGIGIGAS] = sRegigigasLevelUpLearnset, - [SPECIES_GIRATINA] = sGiratinaLevelUpLearnset, + [SPECIES_GIRATINA_ALTERED] = sGiratinaLevelUpLearnset, [SPECIES_CRESSELIA] = sCresseliaLevelUpLearnset, [SPECIES_PHIONE] = sPhioneLevelUpLearnset, [SPECIES_MANAPHY] = sManaphyLevelUpLearnset, [SPECIES_DARKRAI] = sDarkraiLevelUpLearnset, - [SPECIES_SHAYMIN] = sShayminLevelUpLearnset, - [SPECIES_ARCEUS] = sArceusLevelUpLearnset, + [SPECIES_SHAYMIN_LAND] = sShayminLandLevelUpLearnset, + [SPECIES_ARCEUS_NORMAL] = sArceusLevelUpLearnset, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = sVictiniLevelUpLearnset, @@ -553,12 +557,12 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_WHIMSICOTT] = sWhimsicottLevelUpLearnset, [SPECIES_PETILIL] = sPetililLevelUpLearnset, [SPECIES_LILLIGANT] = sLilligantLevelUpLearnset, - [SPECIES_BASCULIN] = sBasculinLevelUpLearnset, + [SPECIES_BASCULIN_RED_STRIPED] = sBasculinLevelUpLearnset, [SPECIES_SANDILE] = sSandileLevelUpLearnset, [SPECIES_KROKOROK] = sKrokorokLevelUpLearnset, [SPECIES_KROOKODILE] = sKrookodileLevelUpLearnset, [SPECIES_DARUMAKA] = sDarumakaLevelUpLearnset, - [SPECIES_DARMANITAN] = sDarmanitanLevelUpLearnset, + [SPECIES_DARMANITAN_STANDARD_MODE] = sDarmanitanLevelUpLearnset, [SPECIES_MARACTUS] = sMaractusLevelUpLearnset, [SPECIES_DWEBBLE] = sDwebbleLevelUpLearnset, [SPECIES_CRUSTLE] = sCrustleLevelUpLearnset, @@ -588,8 +592,8 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_VANILLITE] = sVanilliteLevelUpLearnset, [SPECIES_VANILLISH] = sVanillishLevelUpLearnset, [SPECIES_VANILLUXE] = sVanilluxeLevelUpLearnset, - [SPECIES_DEERLING] = sDeerlingLevelUpLearnset, - [SPECIES_SAWSBUCK] = sSawsbuckLevelUpLearnset, + [SPECIES_DEERLING_SPRING] = sDeerlingLevelUpLearnset, + [SPECIES_SAWSBUCK_SPRING] = sSawsbuckLevelUpLearnset, [SPECIES_EMOLGA] = sEmolgaLevelUpLearnset, [SPECIES_KARRABLAST] = sKarrablastLevelUpLearnset, [SPECIES_ESCAVALIER] = sEscavalierLevelUpLearnset, @@ -644,14 +648,14 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_COBALION] = sCobalionLevelUpLearnset, [SPECIES_TERRAKION] = sTerrakionLevelUpLearnset, [SPECIES_VIRIZION] = sVirizionLevelUpLearnset, - [SPECIES_TORNADUS] = sTornadusLevelUpLearnset, - [SPECIES_THUNDURUS] = sThundurusLevelUpLearnset, + [SPECIES_TORNADUS_INCARNATE] = sTornadusLevelUpLearnset, + [SPECIES_THUNDURUS_INCARNATE] = sThundurusLevelUpLearnset, [SPECIES_RESHIRAM] = sReshiramLevelUpLearnset, [SPECIES_ZEKROM] = sZekromLevelUpLearnset, - [SPECIES_LANDORUS] = sLandorusLevelUpLearnset, + [SPECIES_LANDORUS_INCARNATE] = sLandorusLevelUpLearnset, [SPECIES_KYUREM] = sKyuremLevelUpLearnset, - [SPECIES_KELDEO] = sKeldeoLevelUpLearnset, - [SPECIES_MELOETTA] = sMeloettaLevelUpLearnset, + [SPECIES_KELDEO_ORDINARY] = sKeldeoLevelUpLearnset, + [SPECIES_MELOETTA_ARIA] = sMeloettaLevelUpLearnset, [SPECIES_GENESECT] = sGenesectLevelUpLearnset, #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_TALONFLAME] = sTalonflameLevelUpLearnset, [SPECIES_SCATTERBUG] = sScatterbugLevelUpLearnset, [SPECIES_SPEWPA] = sSpewpaLevelUpLearnset, - [SPECIES_VIVILLON] = sVivillonLevelUpLearnset, + [SPECIES_VIVILLON_ICY_SNOW] = sVivillonLevelUpLearnset, [SPECIES_LITLEO] = sLitleoLevelUpLearnset, [SPECIES_PYROAR] = sPyroarLevelUpLearnset, - [SPECIES_FLABEBE] = sFlabebeLevelUpLearnset, - [SPECIES_FLOETTE] = sFloetteLevelUpLearnset, - [SPECIES_FLORGES] = sFlorgesLevelUpLearnset, + [SPECIES_FLABEBE_RED_FLOWER] = sFlabebeLevelUpLearnset, + [SPECIES_FLOETTE_RED_FLOWER] = sFloetteLevelUpLearnset, + [SPECIES_FLORGES_RED_FLOWER] = sFlorgesLevelUpLearnset, [SPECIES_SKIDDO] = sSkiddoLevelUpLearnset, [SPECIES_GOGOAT] = sGogoatLevelUpLearnset, [SPECIES_PANCHAM] = sPanchamLevelUpLearnset, [SPECIES_PANGORO] = sPangoroLevelUpLearnset, - [SPECIES_FURFROU] = sFurfrouLevelUpLearnset, + [SPECIES_FURFROU_NATURAL] = sFurfrouLevelUpLearnset, [SPECIES_ESPURR] = sEspurrLevelUpLearnset, - [SPECIES_MEOWSTIC] = sMeowsticLevelUpLearnset, + [SPECIES_MEOWSTIC_MALE] = sMeowsticMaleLevelUpLearnset, [SPECIES_HONEDGE] = sHonedgeLevelUpLearnset, [SPECIES_DOUBLADE] = sDoubladeLevelUpLearnset, - [SPECIES_AEGISLASH] = sAegislashLevelUpLearnset, + [SPECIES_AEGISLASH_SHIELD] = sAegislashLevelUpLearnset, [SPECIES_SPRITZEE] = sSpritzeeLevelUpLearnset, [SPECIES_AROMATISSE] = sAromatisseLevelUpLearnset, [SPECIES_SWIRLIX] = sSwirlixLevelUpLearnset, @@ -715,17 +719,17 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_KLEFKI] = sKlefkiLevelUpLearnset, [SPECIES_PHANTUMP] = sPhantumpLevelUpLearnset, [SPECIES_TREVENANT] = sTrevenantLevelUpLearnset, - [SPECIES_PUMPKABOO] = sPumpkabooLevelUpLearnset, - [SPECIES_GOURGEIST] = sGourgeistLevelUpLearnset, + [SPECIES_PUMPKABOO_AVERAGE] = sPumpkabooLevelUpLearnset, + [SPECIES_GOURGEIST_AVERAGE] = sGourgeistLevelUpLearnset, [SPECIES_BERGMITE] = sBergmiteLevelUpLearnset, [SPECIES_AVALUGG] = sAvaluggLevelUpLearnset, [SPECIES_NOIBAT] = sNoibatLevelUpLearnset, [SPECIES_NOIVERN] = sNoivernLevelUpLearnset, - [SPECIES_XERNEAS] = sXerneasLevelUpLearnset, + [SPECIES_XERNEAS_NEUTRAL] = sXerneasLevelUpLearnset, [SPECIES_YVELTAL] = sYveltalLevelUpLearnset, - [SPECIES_ZYGARDE] = sZygardeLevelUpLearnset, + [SPECIES_ZYGARDE_50_AURA_BREAK] = sZygardeLevelUpLearnset, [SPECIES_DIANCIE] = sDiancieLevelUpLearnset, - [SPECIES_HOOPA] = sHoopaLevelUpLearnset, + [SPECIES_HOOPA_CONFINED] = sHoopaConfinedLevelUpLearnset, [SPECIES_VOLCANION] = sVolcanionLevelUpLearnset, #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_VIKAVOLT] = sVikavoltLevelUpLearnset, [SPECIES_CRABRAWLER] = sCrabrawlerLevelUpLearnset, [SPECIES_CRABOMINABLE] = sCrabominableLevelUpLearnset, - [SPECIES_ORICORIO] = sOricorioLevelUpLearnset, + [SPECIES_ORICORIO_BAILE] = sOricorioLevelUpLearnset, [SPECIES_CUTIEFLY] = sCutieflyLevelUpLearnset, [SPECIES_RIBOMBEE] = sRibombeeLevelUpLearnset, [SPECIES_ROCKRUFF] = sRockruffLevelUpLearnset, - [SPECIES_LYCANROC] = sLycanrocLevelUpLearnset, - [SPECIES_WISHIWASHI] = sWishiwashiLevelUpLearnset, + [SPECIES_LYCANROC_MIDDAY] = sLycanrocMiddayLevelUpLearnset, + [SPECIES_WISHIWASHI_SOLO] = sWishiwashiLevelUpLearnset, [SPECIES_MAREANIE] = sMareanieLevelUpLearnset, [SPECIES_TOXAPEX] = sToxapexLevelUpLearnset, [SPECIES_MUDBRAY] = sMudbrayLevelUpLearnset, @@ -780,12 +784,12 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_PALOSSAND] = sPalossandLevelUpLearnset, [SPECIES_PYUKUMUKU] = sPyukumukuLevelUpLearnset, [SPECIES_TYPE_NULL] = sTypeNullLevelUpLearnset, - [SPECIES_SILVALLY] = sSilvallyLevelUpLearnset, - [SPECIES_MINIOR] = sMiniorLevelUpLearnset, + [SPECIES_SILVALLY_NORMAL] = sSilvallyLevelUpLearnset, + [SPECIES_MINIOR_METEOR_RED] = sMiniorLevelUpLearnset, [SPECIES_KOMALA] = sKomalaLevelUpLearnset, [SPECIES_TURTONATOR] = sTurtonatorLevelUpLearnset, [SPECIES_TOGEDEMARU] = sTogedemaruLevelUpLearnset, - [SPECIES_MIMIKYU] = sMimikyuLevelUpLearnset, + [SPECIES_MIMIKYU_DISGUISED] = sMimikyuLevelUpLearnset, [SPECIES_BRUXISH] = sBruxishLevelUpLearnset, [SPECIES_DRAMPA] = sDrampaLevelUpLearnset, [SPECIES_DHELMISE] = sDhelmiseLevelUpLearnset, @@ -858,13 +862,13 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_ARROKUDA] = sArrokudaLevelUpLearnset, [SPECIES_BARRASKEWDA] = sBarraskewdaLevelUpLearnset, [SPECIES_TOXEL] = sToxelLevelUpLearnset, - [SPECIES_TOXTRICITY] = sToxtricityLevelUpLearnset, + [SPECIES_TOXTRICITY_AMPED] = sToxtricityAmpedLevelUpLearnset, [SPECIES_SIZZLIPEDE] = sSizzlipedeLevelUpLearnset, [SPECIES_CENTISKORCH] = sCentiskorchLevelUpLearnset, [SPECIES_CLOBBOPUS] = sClobbopusLevelUpLearnset, [SPECIES_GRAPPLOCT] = sGrapploctLevelUpLearnset, - [SPECIES_SINISTEA] = sSinisteaLevelUpLearnset, - [SPECIES_POLTEAGEIST] = sPolteageistLevelUpLearnset, + [SPECIES_SINISTEA_PHONY] = sSinisteaLevelUpLearnset, + [SPECIES_POLTEAGEIST_PHONY] = sPolteageistLevelUpLearnset, [SPECIES_HATENNA] = sHatennaLevelUpLearnset, [SPECIES_HATTREM] = sHattremLevelUpLearnset, [SPECIES_HATTERENE] = sHattereneLevelUpLearnset, @@ -878,15 +882,77 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_MR_RIME] = sMrRimeLevelUpLearnset, [SPECIES_RUNERIGUS] = sRunerigusLevelUpLearnset, [SPECIES_MILCERY] = sMilceryLevelUpLearnset, - [SPECIES_ALCREMIE] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, [SPECIES_FALINKS] = sFalinksLevelUpLearnset, [SPECIES_PINCURCHIN] = sPincurchinLevelUpLearnset, [SPECIES_SNOM] = sSnomLevelUpLearnset, [SPECIES_FROSMOTH] = sFrosmothLevelUpLearnset, [SPECIES_STONJOURNER] = sStonjournerLevelUpLearnset, - [SPECIES_EISCUE] = sEiscueLevelUpLearnset, - [SPECIES_INDEEDEE] = sIndeedeeLevelUpLearnset, - [SPECIES_MORPEKO] = sMorpekoLevelUpLearnset, + [SPECIES_EISCUE_ICE_FACE] = sEiscueLevelUpLearnset, + [SPECIES_INDEEDEE_MALE] = sIndeedeeMaleLevelUpLearnset, + [SPECIES_MORPEKO_FULL_BELLY] = sMorpekoLevelUpLearnset, [SPECIES_CUFANT] = sCufantLevelUpLearnset, [SPECIES_COPPERAJAH] = sCopperajahLevelUpLearnset, [SPECIES_DRACOZOLT] = sDracozoltLevelUpLearnset, @@ -897,11 +963,11 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_DREEPY] = sDreepyLevelUpLearnset, [SPECIES_DRAKLOAK] = sDrakloakLevelUpLearnset, [SPECIES_DRAGAPULT] = sDragapultLevelUpLearnset, - [SPECIES_ZACIAN] = sZacianLevelUpLearnset, - [SPECIES_ZAMAZENTA] = sZamazentaLevelUpLearnset, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = sZacianLevelUpLearnset, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = sZamazentaLevelUpLearnset, [SPECIES_ETERNATUS] = sEternatusLevelUpLearnset, [SPECIES_KUBFU] = sKubfuLevelUpLearnset, - [SPECIES_URSHIFU] = sUrshifuLevelUpLearnset, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = sUrshifuSingleStrikeStyleLevelUpLearnset, [SPECIES_ZARUDE] = sZarudeLevelUpLearnset, [SPECIES_REGIELEKI] = sRegielekiLevelUpLearnset, [SPECIES_REGIDRAGO] = sRegidragoLevelUpLearnset, @@ -911,10 +977,144 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_WYRDEER] = sWyrdeerLevelUpLearnset, [SPECIES_KLEAVOR] = sKleavorLevelUpLearnset, [SPECIES_URSALUNA] = sUrsalunaLevelUpLearnset, - [SPECIES_BASCULEGION] = sBasculegionLevelUpLearnset, + [SPECIES_URSALUNA_BLOODMOON] = sUrsalunaBloodmoonLevelUpLearnset, + [SPECIES_BASCULEGION_MALE] = sBasculegionLevelUpLearnset, [SPECIES_SNEASLER] = sSneaslerLevelUpLearnset, [SPECIES_OVERQWIL] = sOverqwilLevelUpLearnset, - [SPECIES_ENAMORUS] = sEnamorusLevelUpLearnset, + [SPECIES_ENAMORUS_INCARNATE] = sEnamorusLevelUpLearnset, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = sSprigatitoLevelUpLearnset, + [SPECIES_FLORAGATO] = sFloragatoLevelUpLearnset, + [SPECIES_MEOWSCARADA] = sMeowscaradaLevelUpLearnset, + [SPECIES_FUECOCO] = sFuecocoLevelUpLearnset, + [SPECIES_CROCALOR] = sCrocalorLevelUpLearnset, + [SPECIES_SKELEDIRGE] = sSkeledirgeLevelUpLearnset, + [SPECIES_QUAXLY] = sQuaxlyLevelUpLearnset, + [SPECIES_QUAXWELL] = sQuaxwellLevelUpLearnset, + [SPECIES_QUAQUAVAL] = sQuaquavalLevelUpLearnset, + [SPECIES_LECHONK] = sLechonkLevelUpLearnset, + [SPECIES_OINKOLOGNE_MALE] = sOinkologneMaleLevelUpLearnset, + [SPECIES_OINKOLOGNE_FEMALE] = sOinkologneFemaleLevelUpLearnset, + [SPECIES_TAROUNTULA] = sTarountulaLevelUpLearnset, + [SPECIES_SPIDOPS] = sSpidopsLevelUpLearnset, + [SPECIES_NYMBLE] = sNymbleLevelUpLearnset, + [SPECIES_LOKIX] = sLokixLevelUpLearnset, + [SPECIES_PAWMI] = sPawmiLevelUpLearnset, + [SPECIES_PAWMO] = sPawmoLevelUpLearnset, + [SPECIES_PAWMOT] = sPawmotLevelUpLearnset, + [SPECIES_TANDEMAUS] = sTandemausLevelUpLearnset, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = sMausholdLevelUpLearnset, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = sMausholdLevelUpLearnset, + [SPECIES_FIDOUGH] = sFidoughLevelUpLearnset, + [SPECIES_DACHSBUN] = sDachsbunLevelUpLearnset, + [SPECIES_SMOLIV] = sSmolivLevelUpLearnset, + [SPECIES_DOLLIV] = sDollivLevelUpLearnset, + [SPECIES_ARBOLIVA] = sArbolivaLevelUpLearnset, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = sSquawkabillyLevelUpLearnset, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = sSquawkabillyLevelUpLearnset, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = sSquawkabillyLevelUpLearnset, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = sSquawkabillyLevelUpLearnset, + [SPECIES_NACLI] = sNacliLevelUpLearnset, + [SPECIES_NACLSTACK] = sNaclstackLevelUpLearnset, + [SPECIES_GARGANACL] = sGarganaclLevelUpLearnset, + [SPECIES_CHARCADET] = sCharcadetLevelUpLearnset, + [SPECIES_ARMAROUGE] = sArmarougeLevelUpLearnset, + [SPECIES_CERULEDGE] = sCeruledgeLevelUpLearnset, + [SPECIES_TADBULB] = sTadbulbLevelUpLearnset, + [SPECIES_BELLIBOLT] = sBelliboltLevelUpLearnset, + [SPECIES_WATTREL] = sWattrelLevelUpLearnset, + [SPECIES_KILOWATTREL] = sKilowattrelLevelUpLearnset, + [SPECIES_MASCHIFF] = sMaschiffLevelUpLearnset, + [SPECIES_MABOSSTIFF] = sMabosstiffLevelUpLearnset, + [SPECIES_SHROODLE] = sShroodleLevelUpLearnset, + [SPECIES_GRAFAIAI] = sGrafaiaiLevelUpLearnset, + [SPECIES_BRAMBLIN] = sBramblinLevelUpLearnset, + [SPECIES_BRAMBLEGHAST] = sBrambleghastLevelUpLearnset, + [SPECIES_TOEDSCOOL] = sToedscoolLevelUpLearnset, + [SPECIES_TOEDSCRUEL] = sToedscruelLevelUpLearnset, + [SPECIES_KLAWF] = sKlawfLevelUpLearnset, + [SPECIES_CAPSAKID] = sCapsakidLevelUpLearnset, + [SPECIES_SCOVILLAIN] = sScovillainLevelUpLearnset, + [SPECIES_RELLOR] = sRellorLevelUpLearnset, + [SPECIES_RABSCA] = sRabscaLevelUpLearnset, + [SPECIES_FLITTLE] = sFlittleLevelUpLearnset, + [SPECIES_ESPATHRA] = sEspathraLevelUpLearnset, + [SPECIES_TINKATINK] = sTinkatinkLevelUpLearnset, + [SPECIES_TINKATUFF] = sTinkatuffLevelUpLearnset, + [SPECIES_TINKATON] = sTinkatonLevelUpLearnset, + [SPECIES_WIGLETT] = sWiglettLevelUpLearnset, + [SPECIES_WUGTRIO] = sWugtrioLevelUpLearnset, + [SPECIES_BOMBIRDIER] = sBombirdierLevelUpLearnset, + [SPECIES_FINIZEN] = sFinizenLevelUpLearnset, + [SPECIES_PALAFIN_ZERO] = sPalafinLevelUpLearnset, + [SPECIES_PALAFIN_HERO] = sPalafinLevelUpLearnset, + [SPECIES_VAROOM] = sVaroomLevelUpLearnset, + [SPECIES_REVAVROOM] = sRevavroomLevelUpLearnset, + [SPECIES_CYCLIZAR] = sCyclizarLevelUpLearnset, + [SPECIES_ORTHWORM] = sOrthwormLevelUpLearnset, + [SPECIES_GLIMMET] = sGlimmetLevelUpLearnset, + [SPECIES_GLIMMORA] = sGlimmoraLevelUpLearnset, + [SPECIES_GREAVARD] = sGreavardLevelUpLearnset, + [SPECIES_HOUNDSTONE] = sHoundstoneLevelUpLearnset, + [SPECIES_FLAMIGO] = sFlamigoLevelUpLearnset, + [SPECIES_CETODDLE] = sCetoddleLevelUpLearnset, + [SPECIES_CETITAN] = sCetitanLevelUpLearnset, + [SPECIES_VELUZA] = sVeluzaLevelUpLearnset, + [SPECIES_DONDOZO] = sDondozoLevelUpLearnset, + [SPECIES_TATSUGIRI_CURLY] = sTatsugiriLevelUpLearnset, + [SPECIES_TATSUGIRI_DROOPY] = sTatsugiriLevelUpLearnset, + [SPECIES_TATSUGIRI_STRETCHY] = sTatsugiriLevelUpLearnset, + [SPECIES_ANNIHILAPE] = sAnnihilapeLevelUpLearnset, + [SPECIES_CLODSIRE] = sClodsireLevelUpLearnset, + [SPECIES_FARIGIRAF] = sFarigirafLevelUpLearnset, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = sDudunsparceLevelUpLearnset, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = sDudunsparceLevelUpLearnset, + [SPECIES_KINGAMBIT] = sKingambitLevelUpLearnset, + [SPECIES_GREAT_TUSK] = sGreatTuskLevelUpLearnset, + [SPECIES_SCREAM_TAIL] = sScreamTailLevelUpLearnset, + [SPECIES_BRUTE_BONNET] = sBruteBonnetLevelUpLearnset, + [SPECIES_FLUTTER_MANE] = sFlutterManeLevelUpLearnset, + [SPECIES_SLITHER_WING] = sSlitherWingLevelUpLearnset, + [SPECIES_SANDY_SHOCKS] = sSandyShocksLevelUpLearnset, + [SPECIES_IRON_TREADS] = sIronTreadsLevelUpLearnset, + [SPECIES_IRON_BUNDLE] = sIronBundleLevelUpLearnset, + [SPECIES_IRON_HANDS] = sIronHandsLevelUpLearnset, + [SPECIES_IRON_JUGULIS] = sIronJugulisLevelUpLearnset, + [SPECIES_IRON_MOTH] = sIronMothLevelUpLearnset, + [SPECIES_IRON_THORNS] = sIronThornsLevelUpLearnset, + [SPECIES_FRIGIBAX] = sFrigibaxLevelUpLearnset, + [SPECIES_ARCTIBAX] = sArctibaxLevelUpLearnset, + [SPECIES_BAXCALIBUR] = sBaxcaliburLevelUpLearnset, + [SPECIES_GIMMIGHOUL_CHEST] = sGimmighoulLevelUpLearnset, + [SPECIES_GIMMIGHOUL_ROAMING] = sGimmighoulLevelUpLearnset, + [SPECIES_GHOLDENGO] = sGholdengoLevelUpLearnset, + [SPECIES_WO_CHIEN] = sWoChienLevelUpLearnset, + [SPECIES_CHIEN_PAO] = sChienPaoLevelUpLearnset, + [SPECIES_TING_LU] = sTingLuLevelUpLearnset, + [SPECIES_CHI_YU] = sChiYuLevelUpLearnset, + [SPECIES_ROARING_MOON] = sRoaringMoonLevelUpLearnset, + [SPECIES_IRON_VALIANT] = sIronValiantLevelUpLearnset, + [SPECIES_KORAIDON] = sKoraidonLevelUpLearnset, + [SPECIES_MIRAIDON] = sMiraidonLevelUpLearnset, + [SPECIES_WALKING_WAKE] = sWalkingWakeLevelUpLearnset, + [SPECIES_IRON_LEAVES] = sIronLeavesLevelUpLearnset, + [SPECIES_DIPPLIN] = sDipplinLevelUpLearnset, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = sPoltchageistLevelUpLearnset, + [SPECIES_POLTCHAGEIST_ARTISAN] = sPoltchageistLevelUpLearnset, + [SPECIES_SINISTCHA_UNREMARKABLE] = sSinistchaLevelUpLearnset, + [SPECIES_SINISTCHA_MASTERPIECE] = sSinistchaLevelUpLearnset, + [SPECIES_OKIDOGI] = sOkidogiLevelUpLearnset, + [SPECIES_MUNKIDORI] = sMunkidoriLevelUpLearnset, + [SPECIES_FEZANDIPITI] = sFezandipitiLevelUpLearnset, + [SPECIES_OGERPON_TEAL_MASK] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_WELLSPRING_MASK] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_CORNERSTONE_MASK] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_TEAL_MASK_TERA] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = sOgerponLevelUpLearnset, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = sOgerponLevelUpLearnset, #endif // Megas [SPECIES_VENUSAUR_MEGA] = sVenusaurLevelUpLearnset, @@ -1011,7 +1211,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_LINOONE_GALARIAN] = sLinooneGalarianLevelUpLearnset, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = sDarumakaGalarianLevelUpLearnset, - [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianLevelUpLearnset, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = sDarmanitanGalarianLevelUpLearnset, [SPECIES_YAMASK_GALARIAN] = sYamaskGalarianLevelUpLearnset, [SPECIES_STUNFISK_GALARIAN] = sStunfiskGalarianLevelUpLearnset, #endif @@ -1143,7 +1343,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinLevelUpLearnset, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanLevelUpLearnset, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianLevelUpLearnset, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = sDarmanitanGalarianLevelUpLearnset, // Deerling [SPECIES_DEERLING_SUMMER] = sDeerlingLevelUpLearnset, [SPECIES_DEERLING_AUTUMN] = sDeerlingLevelUpLearnset, @@ -1234,7 +1434,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = // Xerneas [SPECIES_XERNEAS_ACTIVE] = sXerneasLevelUpLearnset, // Zygarde - [SPECIES_ZYGARDE_10] = sZygardeLevelUpLearnset, + [SPECIES_ZYGARDE_10_AURA_BREAK] = sZygardeLevelUpLearnset, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardeLevelUpLearnset, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardeLevelUpLearnset, [SPECIES_ZYGARDE_COMPLETE] = sZygardeLevelUpLearnset, @@ -1304,15 +1504,6 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_SINISTEA_ANTIQUE] = sSinisteaLevelUpLearnset, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = sPolteageistLevelUpLearnset, - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_MATCHA_CREAM] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_MINT_CREAM] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_LEMON_CREAM] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_SALTED_CREAM] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_RUBY_SWIRL] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAlcremieLevelUpLearnset, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAlcremieLevelUpLearnset, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = sEiscueLevelUpLearnset, // Indeedee @@ -1334,6 +1525,46 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexShadowRiderLevelUpLearnset, // Enamorus [SPECIES_ENAMORUS_THERIAN] = sEnamorusLevelUpLearnset, + // Basculegion [SPECIES_BASCULEGION_FEMALE] = sBasculegionLevelUpLearnset, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = sVenusaurLevelUpLearnset, + [SPECIES_CHARIZARD_GIGANTAMAX] = sCharizardLevelUpLearnset, + [SPECIES_BLASTOISE_GIGANTAMAX] = sBlastoiseLevelUpLearnset, + [SPECIES_BUTTERFREE_GIGANTAMAX] = sButterfreeLevelUpLearnset, + [SPECIES_PIKACHU_GIGANTAMAX] = sPikachuLevelUpLearnset, + [SPECIES_MEOWTH_GIGANTAMAX] = sMeowthLevelUpLearnset, + [SPECIES_MACHAMP_GIGANTAMAX] = sMachampLevelUpLearnset, + [SPECIES_GENGAR_GIGANTAMAX] = sGengarLevelUpLearnset, + [SPECIES_KINGLER_GIGANTAMAX] = sKinglerLevelUpLearnset, + [SPECIES_LAPRAS_GIGANTAMAX] = sLaprasLevelUpLearnset, + [SPECIES_EEVEE_GIGANTAMAX] = sEeveeLevelUpLearnset, + [SPECIES_SNORLAX_GIGANTAMAX] = sSnorlaxLevelUpLearnset, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_GARBODOR_GIGANTAMAX] = sGarbodorLevelUpLearnset, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_MELMETAL_GIGANTAMAX] = sMelmetalLevelUpLearnset, +#endif + [SPECIES_RILLABOOM_GIGANTAMAX] = sRillaboomLevelUpLearnset, + [SPECIES_CINDERACE_GIGANTAMAX] = sCinderaceLevelUpLearnset, + [SPECIES_INTELEON_GIGANTAMAX] = sInteleonLevelUpLearnset, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = sCorviknightLevelUpLearnset, + [SPECIES_ORBEETLE_GIGANTAMAX] = sOrbeetleLevelUpLearnset, + [SPECIES_DREDNAW_GIGANTAMAX] = sDrednawLevelUpLearnset, + [SPECIES_COALOSSAL_GIGANTAMAX] = sCoalossalLevelUpLearnset, + [SPECIES_FLAPPLE_GIGANTAMAX] = sFlappleLevelUpLearnset, + [SPECIES_APPLETUN_GIGANTAMAX] = sAppletunLevelUpLearnset, + [SPECIES_SANDACONDA_GIGANTAMAX] = sSandacondaLevelUpLearnset, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = sToxtricityAmpedLevelUpLearnset, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = sToxtricityLowKeyLevelUpLearnset, + [SPECIES_CENTISKORCH_GIGANTAMAX] = sCentiskorchLevelUpLearnset, + [SPECIES_HATTERENE_GIGANTAMAX] = sHattereneLevelUpLearnset, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = sGrimmsnarlLevelUpLearnset, + [SPECIES_ALCREMIE_GIGANTAMAX] = sAlcremieLevelUpLearnset, + [SPECIES_COPPERAJAH_GIGANTAMAX] = sCopperajahLevelUpLearnset, + [SPECIES_DURALUDON_GIGANTAMAX] = sDuraludonLevelUpLearnset, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = sUrshifuSingleStrikeStyleLevelUpLearnset, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = sUrshifuRapidStrikeStyleLevelUpLearnset, #endif }; diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index 17af6b8888..1cfa0157d9 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -1,4 +1,5 @@ #define LEVEL_UP_MOVE(lvl, moveLearned) {.move = moveLearned, .level = lvl} +#define LEVEL_UP_END {.move = LEVEL_UP_MOVE_END, .level = 0} static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), @@ -7861,7 +7862,7 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sDeoxysLevelUpLearnset[] = { +static const struct LevelUpMove sDeoxysNormalLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), @@ -8355,7 +8356,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), @@ -9958,7 +9959,7 @@ static const struct LevelUpMove sDarkraiLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sShayminLevelUpLearnset[] = { +static const struct LevelUpMove sShayminLandLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_GROWTH), LEVEL_UP_MOVE(10, MOVE_MAGICAL_LEAF), LEVEL_UP_MOVE(19, MOVE_LEECH_SEED), @@ -13815,7 +13816,7 @@ static const struct LevelUpMove sEspurrLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sMeowsticLevelUpLearnset[] = { +static const struct LevelUpMove sMeowsticMaleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), @@ -14706,7 +14707,7 @@ static const struct LevelUpMove sDiancieLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sHoopaLevelUpLearnset[] = { +static const struct LevelUpMove sHoopaConfinedLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE), LEVEL_UP_MOVE( 1, MOVE_TRICK), LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), @@ -15232,7 +15233,7 @@ static const struct LevelUpMove sRockruffLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sLycanrocLevelUpLearnset[] = { +static const struct LevelUpMove sLycanrocMiddayLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_ACCELEROCK), LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK), LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD), @@ -17155,7 +17156,7 @@ static const struct LevelUpMove sToxelLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sToxtricityLevelUpLearnset[] = { +static const struct LevelUpMove sToxtricityAmpedLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SPARK), LEVEL_UP_MOVE( 1, MOVE_SPARK), LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE), @@ -17677,7 +17678,7 @@ static const struct LevelUpMove sEiscueLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sIndeedeeLevelUpLearnset[] = { +static const struct LevelUpMove sIndeedeeMaleLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_STORED_POWER), LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE), LEVEL_UP_MOVE( 5, MOVE_ENCORE), @@ -17961,7 +17962,7 @@ static const struct LevelUpMove sKubfuLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sUrshifuLevelUpLearnset[] = { +static const struct LevelUpMove sUrshifuSingleStrikeStyleLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_WICKED_BLOW), LEVEL_UP_MOVE( 1, MOVE_WICKED_BLOW), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), @@ -18098,92 +18099,164 @@ static const struct LevelUpMove sCalyrexLevelUpLearnset[] = { }; static const struct LevelUpMove sWyrdeerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_PSYSHIELD_BASH), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 5, MOVE_CONFUSION), - LEVEL_UP_MOVE( 9, MOVE_HYPNOSIS), - LEVEL_UP_MOVE(15, MOVE_CALM_MIND), - LEVEL_UP_MOVE(21, MOVE_PSYSHIELD_BASH), - LEVEL_UP_MOVE(29, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE( 3, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_ASTONISH), + LEVEL_UP_MOVE(10, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(13, MOVE_STOMP), + LEVEL_UP_MOVE(16, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(21, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(27, MOVE_CALM_MIND), + LEVEL_UP_MOVE(32, MOVE_ROLE_PLAY), LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT), - LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(49, MOVE_IMPRISON), + LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(62, MOVE_MEGAHORN), LEVEL_UP_END }; static const struct LevelUpMove sKleavorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_STONE_AXE), + LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_SILVER_WIND), - LEVEL_UP_MOVE(11, MOVE_AERIAL_ACE), - LEVEL_UP_MOVE(14, MOVE_DOUBLE_HIT), - LEVEL_UP_MOVE(14, MOVE_STEALTH_ROCK), - LEVEL_UP_MOVE(18, MOVE_AIR_SLASH), - LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(29, MOVE_STONE_AXE), - LEVEL_UP_MOVE(34, MOVE_X_SCISSOR), - LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 4, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE( 8, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(16, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(24, MOVE_SLASH), + LEVEL_UP_MOVE(28, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(32, MOVE_AGILITY), + LEVEL_UP_MOVE(36, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(40, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(44, MOVE_SWORDS_DANCE), LEVEL_UP_END }; static const struct LevelUpMove sUrsalunaLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 6, MOVE_BABY_DOLL_EYES), - LEVEL_UP_MOVE(11, MOVE_BULLDOZE), - LEVEL_UP_MOVE(18, MOVE_SLASH), - LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH), - LEVEL_UP_MOVE(34, MOVE_HIGH_HORSEPOWER), - LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(47, MOVE_HEADLONG_RUSH), + LEVEL_UP_MOVE( 0, MOVE_HEADLONG_RUSH), + LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE( 1, MOVE_COVET), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(13, MOVE_PAYBACK), + LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(22, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(29, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(35, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(41, MOVE_REST), + LEVEL_UP_MOVE(41, MOVE_SNORE), + LEVEL_UP_MOVE(48, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(56, MOVE_THRASH), + LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sUrsalunaBloodmoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_HEADLONG_RUSH), + LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(13, MOVE_PAYBACK), + LEVEL_UP_MOVE(17, MOVE_HARDEN), + LEVEL_UP_MOVE(22, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_PLAY_NICE), + LEVEL_UP_MOVE(35, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(41, MOVE_REST), + LEVEL_UP_MOVE(41, MOVE_SNORE), + LEVEL_UP_MOVE(48, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(56, MOVE_MOONBLAST), + LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE(70, MOVE_BLOOD_MOON), LEVEL_UP_END }; static const struct LevelUpMove sBasculegionLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 6, MOVE_AQUA_JET), - LEVEL_UP_MOVE(11, MOVE_BITE), - LEVEL_UP_MOVE(11, MOVE_HEX), - LEVEL_UP_MOVE(18, MOVE_ZEN_HEADBUTT), - LEVEL_UP_MOVE(25, MOVE_CRUNCH), - LEVEL_UP_MOVE(25, MOVE_SHADOW_BALL), - LEVEL_UP_MOVE(34, MOVE_WAVE_CRASH), - LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE( 4, MOVE_TACKLE), + LEVEL_UP_MOVE( 8, MOVE_FLAIL), + LEVEL_UP_MOVE(12, MOVE_AQUA_JET), + LEVEL_UP_MOVE(16, MOVE_BITE), + LEVEL_UP_MOVE(20, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(24, MOVE_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_SOAK), + LEVEL_UP_MOVE(32, MOVE_CRUNCH), + LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(40, MOVE_UPROAR), + LEVEL_UP_MOVE(44, MOVE_WAVE_CRASH), + LEVEL_UP_MOVE(48, MOVE_THRASH), + LEVEL_UP_MOVE(52, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(56, MOVE_HEAD_SMASH), LEVEL_UP_END }; static const struct LevelUpMove sSneaslerLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE(11, MOVE_DIRE_CLAW), - LEVEL_UP_MOVE(11, MOVE_SWIFT), - LEVEL_UP_MOVE(18, MOVE_SLASH), - LEVEL_UP_MOVE(25, MOVE_POISON_JAB), - LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 0, MOVE_DIRE_CLAW), + LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 6, MOVE_TAUNT), + LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(18, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(24, MOVE_POISON_JAB), + LEVEL_UP_MOVE(30, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(36, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(42, MOVE_SLASH), + LEVEL_UP_MOVE(48, MOVE_AGILITY), + LEVEL_UP_MOVE(54, MOVE_SCREECH), + LEVEL_UP_MOVE(60, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; static const struct LevelUpMove sOverqwilLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 5, MOVE_SPIKES), - LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), - LEVEL_UP_MOVE(15, MOVE_BARB_BARRAGE), - LEVEL_UP_MOVE(21, MOVE_WATER_PULSE), - LEVEL_UP_MOVE(26, MOVE_DARK_PULSE), - LEVEL_UP_MOVE(29, MOVE_POISON_JAB), - LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(57, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 8, MOVE_BITE), + LEVEL_UP_MOVE(12, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(16, MOVE_MINIMIZE), + LEVEL_UP_MOVE(20, MOVE_SPIKES), + LEVEL_UP_MOVE(24, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_BARB_BARRAGE), + LEVEL_UP_MOVE(32, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(36, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(40, MOVE_STOCKPILE), + LEVEL_UP_MOVE(40, MOVE_SPIT_UP), + LEVEL_UP_MOVE(44, MOVE_TOXIC), + LEVEL_UP_MOVE(48, MOVE_CRUNCH), + LEVEL_UP_MOVE(52, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(56, MOVE_DESTINY_BOND), LEVEL_UP_END }; static const struct LevelUpMove sEnamorusLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 7, MOVE_BITE), - LEVEL_UP_MOVE(11, MOVE_TWISTER), - LEVEL_UP_MOVE(14, MOVE_DRAINING_KISS), - LEVEL_UP_MOVE(22, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), - LEVEL_UP_MOVE(41, MOVE_CRUNCH), - LEVEL_UP_MOVE(47, MOVE_MOONBLAST), - LEVEL_UP_MOVE( 1, MOVE_SPRINGTIDE_STORM), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 5, MOVE_TORMENT), + LEVEL_UP_MOVE(10, MOVE_FLATTER), + LEVEL_UP_MOVE(15, MOVE_TWISTER), + LEVEL_UP_MOVE(20, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(30, MOVE_IMPRISON), + LEVEL_UP_MOVE(35, MOVE_MYSTICAL_FIRE), + LEVEL_UP_MOVE(40, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(45, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE(50, MOVE_UPROAR), + LEVEL_UP_MOVE(55, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(60, MOVE_HEALING_WISH), + LEVEL_UP_MOVE(65, MOVE_MOONBLAST), + LEVEL_UP_MOVE(70, MOVE_OUTRAGE), + LEVEL_UP_MOVE(75, MOVE_SPRINGTIDE_STORM), LEVEL_UP_END }; #endif @@ -18945,225 +19018,420 @@ static const struct LevelUpMove sStunfiskGalarianLevelUpLearnset[] = { #endif static const struct LevelUpMove sGrowlitheHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 5, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_BITE), - LEVEL_UP_MOVE(15, MOVE_FIRE_FANG), - LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), - LEVEL_UP_MOVE(29, MOVE_CRUNCH), - LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 4, MOVE_HOWL), + LEVEL_UP_MOVE( 8, MOVE_BITE), + LEVEL_UP_MOVE(12, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(16, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(24, MOVE_FIRE_FANG), + LEVEL_UP_MOVE(28, MOVE_RETALIATE), + LEVEL_UP_MOVE(32, MOVE_CRUNCH), + LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(44, MOVE_ROAR), + LEVEL_UP_MOVE(48, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(52, MOVE_REVERSAL), + LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ), LEVEL_UP_END }; static const struct LevelUpMove sArcanineHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 5, MOVE_EMBER), - LEVEL_UP_MOVE( 9, MOVE_BITE), - LEVEL_UP_MOVE(15, MOVE_FIRE_FANG), - LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE), - LEVEL_UP_MOVE(29, MOVE_CRUNCH), - LEVEL_UP_MOVE(29, MOVE_RAGING_FURY), - LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 0, MOVE_EXTREME_SPEED), + LEVEL_UP_MOVE( 1, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 1, MOVE_CRUNCH), + LEVEL_UP_MOVE( 1, MOVE_REVERSAL), + LEVEL_UP_MOVE( 1, MOVE_RETALIATE), + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE( 1, MOVE_AGILITY), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE( 5, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(64, MOVE_RAGING_FURY), LEVEL_UP_END }; static const struct LevelUpMove sVoltorbHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - LEVEL_UP_MOVE( 5, MOVE_TACKLE), - LEVEL_UP_MOVE( 9, MOVE_THUNDER_WAVE), - LEVEL_UP_MOVE(15, MOVE_SPARK), - LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), - LEVEL_UP_MOVE(29, MOVE_THUNDERBOLT), - LEVEL_UP_MOVE(37, MOVE_THUNDER), - LEVEL_UP_MOVE(47, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 9, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(11, MOVE_ROLLOUT), + LEVEL_UP_MOVE(13, MOVE_SCREECH), + LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(20, MOVE_SWIFT), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(29, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(34, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(34, MOVE_DISCHARGE), + LEVEL_UP_MOVE(41, MOVE_EXPLOSION), + LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN), LEVEL_UP_END }; static const struct LevelUpMove sElectrodeHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), - LEVEL_UP_MOVE( 5, MOVE_TACKLE), - LEVEL_UP_MOVE( 9, MOVE_THUNDER_WAVE), - LEVEL_UP_MOVE(15, MOVE_SPARK), - LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), - LEVEL_UP_MOVE(29, MOVE_THUNDERBOLT), - LEVEL_UP_MOVE(37, MOVE_THUNDER), - LEVEL_UP_MOVE(47, MOVE_CHLOROBLAST), - LEVEL_UP_MOVE(47, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 0, MOVE_CHLOROBLAST), + LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 9, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(11, MOVE_ROLLOUT), + LEVEL_UP_MOVE(13, MOVE_SCREECH), + LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(20, MOVE_SWIFT), + LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(29, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(34, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(34, MOVE_DISCHARGE), + LEVEL_UP_MOVE(41, MOVE_EXPLOSION), + LEVEL_UP_MOVE(46, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN), LEVEL_UP_END }; static const struct LevelUpMove sTyphlosionHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_HEX), - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_EMBER), - LEVEL_UP_MOVE(11, MOVE_ROLLOUT), - LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL), - LEVEL_UP_MOVE(25, MOVE_SWIFT), - LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), - LEVEL_UP_MOVE(40, MOVE_INFERNAL_PARADE), - LEVEL_UP_MOVE(43, MOVE_OVERHEAT), - LEVEL_UP_MOVE(43, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE( 0, MOVE_INFERNAL_PARADE), + LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_ERUPTION), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(31, MOVE_SWIFT), + LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(43, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(56, MOVE_INFERNO), + LEVEL_UP_MOVE(61, MOVE_ROLLOUT), + LEVEL_UP_MOVE(74, MOVE_OVERHEAT), LEVEL_UP_END }; static const struct LevelUpMove sQwilfishHisuianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 1, MOVE_POISON_STING), - LEVEL_UP_MOVE( 5, MOVE_SPIKES), - LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE), - LEVEL_UP_MOVE(15, MOVE_BARB_BARRAGE), - LEVEL_UP_MOVE(21, MOVE_WATER_PULSE), - LEVEL_UP_MOVE(26, MOVE_DARK_PULSE), - LEVEL_UP_MOVE(29, MOVE_POISON_JAB), - LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(57, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 8, MOVE_BITE), + LEVEL_UP_MOVE(12, MOVE_FELL_STINGER), + LEVEL_UP_MOVE(16, MOVE_MINIMIZE), + LEVEL_UP_MOVE(20, MOVE_SPIKES), + LEVEL_UP_MOVE(24, MOVE_BRINE), + LEVEL_UP_MOVE(28, MOVE_BARB_BARRAGE), + LEVEL_UP_MOVE(32, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(36, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(40, MOVE_STOCKPILE), + LEVEL_UP_MOVE(40, MOVE_SPIT_UP), + LEVEL_UP_MOVE(44, MOVE_TOXIC), + LEVEL_UP_MOVE(48, MOVE_CRUNCH), + LEVEL_UP_MOVE(52, MOVE_ACUPRESSURE), + LEVEL_UP_MOVE(56, MOVE_DESTINY_BOND), LEVEL_UP_END }; static const struct LevelUpMove sSneaselHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE(11, MOVE_SWIFT), - LEVEL_UP_MOVE(18, MOVE_SLASH), - LEVEL_UP_MOVE(25, MOVE_POISON_JAB), - LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 6, MOVE_TAUNT), + LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(18, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(24, MOVE_POISON_JAB), + LEVEL_UP_MOVE(30, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(36, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(42, MOVE_SLASH), + LEVEL_UP_MOVE(48, MOVE_AGILITY), + LEVEL_UP_MOVE(54, MOVE_SCREECH), + LEVEL_UP_MOVE(60, MOVE_CLOSE_COMBAT), LEVEL_UP_END }; #if P_GEN_5_POKEMON == TRUE static const struct LevelUpMove sSamurottHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE( 0, MOVE_CEASELESS_EDGE), + LEVEL_UP_MOVE( 1, MOVE_SLASH), + LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_MEGAHORN), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 6, MOVE_AQUA_JET), - LEVEL_UP_MOVE(11, MOVE_SWORDS_DANCE), - LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), - LEVEL_UP_MOVE(21, MOVE_CEASELESS_EDGE), - LEVEL_UP_MOVE(25, MOVE_SLASH), - LEVEL_UP_MOVE(34, MOVE_AQUA_TAIL), - LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), - LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL), + LEVEL_UP_MOVE(21, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(29, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(34, MOVE_AQUA_JET), + LEVEL_UP_MOVE(39, MOVE_ENCORE), + LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(51, MOVE_RETALIATE), + LEVEL_UP_MOVE(58, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(63, MOVE_HYDRO_PUMP), LEVEL_UP_END }; static const struct LevelUpMove sLilligantHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE( 0, MOVE_VICTORY_DANCE), + LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE), + LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE), + LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU), + LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_DEFOG), + LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE( 1, MOVE_MEGA_KICK), + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), LEVEL_UP_MOVE( 1, MOVE_ABSORB), - LEVEL_UP_MOVE( 5, MOVE_LEAFAGE), - LEVEL_UP_MOVE( 9, MOVE_STUN_SPORE), - LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), - LEVEL_UP_MOVE(21, MOVE_ENERGY_BALL), - LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER), - LEVEL_UP_MOVE(34, MOVE_DRAIN_PUNCH), - LEVEL_UP_MOVE(37, MOVE_LEAF_BLADE), - LEVEL_UP_MOVE(37, MOVE_RECOVER), - LEVEL_UP_MOVE(42, MOVE_VICTORY_DANCE), - LEVEL_UP_MOVE(47, MOVE_LEAF_STORM), - LEVEL_UP_MOVE(53, MOVE_PETAL_DANCE), - LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 5, MOVE_AXE_KICK), LEVEL_UP_END }; static const struct LevelUpMove sZoruaHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), - LEVEL_UP_MOVE( 6, MOVE_SNARL), - LEVEL_UP_MOVE(11, MOVE_SWIFT), - LEVEL_UP_MOVE(18, MOVE_BITTER_MALICE), - LEVEL_UP_MOVE(25, MOVE_SLASH), - LEVEL_UP_MOVE(34, MOVE_SHADOW_CLAW), - LEVEL_UP_MOVE(43, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 4, MOVE_TORMENT), + LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(12, MOVE_SHADOW_SNEAK), + 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), + LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(48, MOVE_FOUL_PLAY), LEVEL_UP_END }; static const struct LevelUpMove sZoroarkHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), - LEVEL_UP_MOVE( 6, MOVE_SNARL), - LEVEL_UP_MOVE(11, MOVE_SWIFT), - LEVEL_UP_MOVE(18, MOVE_BITTER_MALICE), - LEVEL_UP_MOVE(25, MOVE_SLASH), - LEVEL_UP_MOVE(34, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_TORMENT), + LEVEL_UP_MOVE( 1, MOVE_U_TURN), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(12, MOVE_SHADOW_SNEAK), + 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(34, MOVE_AGILITY), LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), - LEVEL_UP_MOVE(43, MOVE_NASTY_PLOT), - LEVEL_UP_MOVE(52, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE(46, MOVE_BITTER_MALICE), + LEVEL_UP_MOVE(52, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(58, MOVE_FOUL_PLAY), LEVEL_UP_END }; static const struct LevelUpMove sBraviaryHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), - LEVEL_UP_MOVE( 6, MOVE_AERIAL_ACE), - LEVEL_UP_MOVE(11, MOVE_TWISTER), - LEVEL_UP_MOVE(18, MOVE_SLASH), - LEVEL_UP_MOVE(20, MOVE_AIR_SLASH), - LEVEL_UP_MOVE(25, MOVE_ESPER_WING), - LEVEL_UP_MOVE(25, MOVE_ROOST), - LEVEL_UP_MOVE(34, MOVE_DOUBLE_EDGE), - LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD), - LEVEL_UP_MOVE(52, MOVE_HURRICANE), + LEVEL_UP_MOVE( 0, MOVE_ESPER_WING), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(18, MOVE_TAILWIND), + LEVEL_UP_MOVE(24, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(30, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(36, MOVE_SLASH), + LEVEL_UP_MOVE(42, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(48, MOVE_CRUSH_CLAW), + LEVEL_UP_MOVE(57, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(64, MOVE_DEFOG), + LEVEL_UP_MOVE(72, MOVE_THRASH), + LEVEL_UP_MOVE(80, MOVE_HURRICANE), LEVEL_UP_END }; #endif #if P_GEN_6_POKEMON == TRUE static const struct LevelUpMove sSliggooHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_BUBBLE), - LEVEL_UP_MOVE( 6, MOVE_ACID_SPRAY), - LEVEL_UP_MOVE(11, MOVE_ACID_ARMOR), - LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), - LEVEL_UP_MOVE(25, MOVE_DRAGON_PULSE), - LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), - LEVEL_UP_MOVE(34, MOVE_SHELTER), - LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 0, MOVE_SHELTER), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(15, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_FLAIL), + LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(30, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(35, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(43, MOVE_CURSE), + LEVEL_UP_MOVE(49, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(56, MOVE_MUDDY_WATER), LEVEL_UP_END }; static const struct LevelUpMove sGoodraHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 1, MOVE_BUBBLE), - LEVEL_UP_MOVE( 6, MOVE_ACID_SPRAY), - LEVEL_UP_MOVE(11, MOVE_ACID_ARMOR), - LEVEL_UP_MOVE(18, MOVE_WATER_PULSE), - LEVEL_UP_MOVE(25, MOVE_DRAGON_PULSE), - LEVEL_UP_MOVE(25, MOVE_IRON_HEAD), - LEVEL_UP_MOVE(34, MOVE_SHELTER), - LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE( 0, MOVE_IRON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_SHELTER), + LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 1, MOVE_FEINT), + LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_FLAIL), + LEVEL_UP_MOVE(25, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(30, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(35, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(43, MOVE_CURSE), + LEVEL_UP_MOVE(49, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(49, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(58, MOVE_MUDDY_WATER), + LEVEL_UP_MOVE(67, MOVE_HEAVY_SLAM), LEVEL_UP_END }; static const struct LevelUpMove sAvaluggHisuianLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), LEVEL_UP_MOVE( 1, MOVE_TACKLE), - LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW), - LEVEL_UP_MOVE( 9, MOVE_ICE_SHARD), - LEVEL_UP_MOVE(15, MOVE_BITE), - LEVEL_UP_MOVE(21, MOVE_IRON_DEFENSE), - LEVEL_UP_MOVE(29, MOVE_CRUNCH), - LEVEL_UP_MOVE(29, MOVE_EARTH_POWER), - LEVEL_UP_MOVE(37, MOVE_BLIZZARD), - LEVEL_UP_MOVE(37, MOVE_MOUNTAIN_GALE), - LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE( 9, MOVE_CURSE), + LEVEL_UP_MOVE(12, MOVE_ICY_WIND), + LEVEL_UP_MOVE(15, MOVE_PROTECT), + LEVEL_UP_MOVE(18, MOVE_AVALANCHE), + LEVEL_UP_MOVE(21, MOVE_BITE), + LEVEL_UP_MOVE(24, MOVE_ICE_FANG), + LEVEL_UP_MOVE(27, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(30, MOVE_RECOVER), + LEVEL_UP_MOVE(33, MOVE_CRUNCH), + LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(41, MOVE_BLIZZARD), + LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(51, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(61, MOVE_MOUNTAIN_GALE), LEVEL_UP_END }; #endif #if P_GEN_7_POKEMON == TRUE static const struct LevelUpMove sDecidueyeHisuianLevelUpLearnset[] = { - LEVEL_UP_MOVE( 0, MOVE_ROCK_SMASH), - LEVEL_UP_MOVE( 1, MOVE_GUST), - LEVEL_UP_MOVE( 6, MOVE_LEAFAGE), - LEVEL_UP_MOVE(11, MOVE_ROOST), - LEVEL_UP_MOVE(18, MOVE_AERIAL_ACE), - LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF), - LEVEL_UP_MOVE(25, MOVE_AIR_SLASH), - LEVEL_UP_MOVE(30, MOVE_AURA_SPHERE), - LEVEL_UP_MOVE(34, MOVE_LEAF_BLADE), - LEVEL_UP_MOVE(34, MOVE_TRIPLE_ARROWS), - LEVEL_UP_MOVE(40, MOVE_BRAVE_BIRD), - LEVEL_UP_MOVE(43, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 0, MOVE_TRIPLE_ARROWS), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_U_TURN), + LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 9, MOVE_PECK), + LEVEL_UP_MOVE(12, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(20, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(25, MOVE_PLUCK), + LEVEL_UP_MOVE(30, MOVE_BULK_UP), + LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(51, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE(58, MOVE_BRAVE_BIRD), LEVEL_UP_END }; #endif +static const struct LevelUpMove sWooperPaldeanLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), + LEVEL_UP_MOVE( 4, MOVE_TACKLE), + LEVEL_UP_MOVE( 8, MOVE_POISON_TAIL), + LEVEL_UP_MOVE(12, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE(16, MOVE_SLAM), + LEVEL_UP_MOVE(21, MOVE_YAWN), + LEVEL_UP_MOVE(24, MOVE_POISON_JAB), + LEVEL_UP_MOVE(28, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(32, MOVE_AMNESIA), + LEVEL_UP_MOVE(36, MOVE_TOXIC), + LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTaurosPaldeanCombatBreedLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 5, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(15, MOVE_ASSURANCE), + LEVEL_UP_MOVE(20, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(30, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_RAGING_BULL), + LEVEL_UP_MOVE(40, MOVE_REST), + LEVEL_UP_MOVE(45, MOVE_SWAGGER), + LEVEL_UP_MOVE(50, MOVE_THRASH), + LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(60, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTaurosPaldeanBlazeBreedLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 5, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(20, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(30, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_RAGING_BULL), + LEVEL_UP_MOVE(40, MOVE_REST), + LEVEL_UP_MOVE(45, MOVE_SWAGGER), + LEVEL_UP_MOVE(50, MOVE_THRASH), + LEVEL_UP_MOVE(55, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(60, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTaurosPaldeanAquaBreedLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 5, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(15, MOVE_AQUA_JET), + LEVEL_UP_MOVE(20, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(30, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(35, MOVE_RAGING_BULL), + LEVEL_UP_MOVE(40, MOVE_REST), + LEVEL_UP_MOVE(45, MOVE_SWAGGER), + LEVEL_UP_MOVE(50, MOVE_THRASH), + LEVEL_UP_MOVE(55, MOVE_WAVE_CRASH), + LEVEL_UP_MOVE(60, MOVE_CLOSE_COMBAT), + LEVEL_UP_END +}; + + static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_LEER), LEVEL_UP_MOVE( 1, MOVE_WRAP), @@ -19580,3 +19848,2167 @@ static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = { LEVEL_UP_END }; #endif + +#if P_GEN_9_POKEMON == TRUE +static const struct LevelUpMove sSprigatitoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(10, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(13, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(17, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(21, MOVE_U_TURN), + LEVEL_UP_MOVE(25, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(28, MOVE_SLASH), + LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(36, MOVE_PLAY_ROUGH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFloragatoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(10, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(13, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(24, MOVE_U_TURN), + LEVEL_UP_MOVE(28, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(33, MOVE_SLASH), + LEVEL_UP_MOVE(38, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(46, MOVE_LEAF_STORM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(10, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(13, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(24, MOVE_U_TURN), + LEVEL_UP_MOVE(29, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(33, MOVE_SLASH), + LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(42, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(47, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(52, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(58, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(64, MOVE_LEAF_STORM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFuecocoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_ROUND), + LEVEL_UP_MOVE(12, MOVE_BITE), + LEVEL_UP_MOVE(15, MOVE_INCINERATE), + LEVEL_UP_MOVE(17, MOVE_YAWN), + LEVEL_UP_MOVE(21, MOVE_SNARL), + LEVEL_UP_MOVE(25, MOVE_ROAR), + LEVEL_UP_MOVE(28, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(32, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(36, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCrocalorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_LICK), + LEVEL_UP_MOVE(10, MOVE_ROUND), + LEVEL_UP_MOVE(12, MOVE_BITE), + LEVEL_UP_MOVE(15, MOVE_YAWN), + LEVEL_UP_MOVE(17, MOVE_INCINERATE), + LEVEL_UP_MOVE(24, MOVE_SNARL), + LEVEL_UP_MOVE(28, MOVE_ROAR), + LEVEL_UP_MOVE(32, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(38, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(42, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(47, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_LICK), + LEVEL_UP_MOVE(10, MOVE_ROUND), + LEVEL_UP_MOVE(12, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(15, MOVE_BITE), + LEVEL_UP_MOVE(17, MOVE_INCINERATE), + LEVEL_UP_MOVE(24, MOVE_SNARL), + LEVEL_UP_MOVE(28, MOVE_ROAR), + LEVEL_UP_MOVE(32, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(38, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(42, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(47, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(47, MOVE_HEX), + LEVEL_UP_MOVE(58, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE(64, MOVE_OVERHEAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sQuaxlyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(13, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(21, MOVE_AQUA_CUTTER), + LEVEL_UP_MOVE(24, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(28, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(31, MOVE_ACROBATICS), + LEVEL_UP_MOVE(35, MOVE_LIQUIDATION), + LEVEL_UP_END +}; + +static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 7, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(13, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(19, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(23, MOVE_AQUA_CUTTER), + LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(38, MOVE_ACROBATICS), + LEVEL_UP_MOVE(43, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(48, MOVE_FEATHER_DANCE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 7, MOVE_WORK_UP), + LEVEL_UP_MOVE(10, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(13, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(21, MOVE_AQUA_CUTTER), + LEVEL_UP_MOVE(27, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(38, MOVE_MEGA_KICK), + LEVEL_UP_MOVE(43, MOVE_ACROBATICS), + LEVEL_UP_MOVE(47, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(52, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE(58, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(64, MOVE_WAVE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sLechonkLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 5, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 8, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(12, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(15, MOVE_COVET), + LEVEL_UP_MOVE(17, MOVE_DIG), + LEVEL_UP_MOVE(21, MOVE_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_YAWN), + LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(30, MOVE_WORK_UP), + LEVEL_UP_MOVE(32, MOVE_UPROAR), + LEVEL_UP_MOVE(35, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOinkologneMaleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 5, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 8, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(12, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(15, MOVE_COVET), + LEVEL_UP_MOVE(17, MOVE_DIG), + LEVEL_UP_MOVE(23, MOVE_HEADBUTT), + LEVEL_UP_MOVE(26, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(27, MOVE_YAWN), + LEVEL_UP_MOVE(34, MOVE_WORK_UP), + LEVEL_UP_MOVE(38, MOVE_UPROAR), + LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(48, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(54, MOVE_BELCH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOinkologneFemaleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 3, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 6, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 9, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(12, MOVE_COVET), + LEVEL_UP_MOVE(15, MOVE_DIG), + LEVEL_UP_MOVE(17, MOVE_HEADBUTT), + LEVEL_UP_MOVE(23, MOVE_YAWN), + LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(30, MOVE_WORK_UP), + LEVEL_UP_MOVE(34, MOVE_UPROAR), + LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(45, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(51, MOVE_BELCH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTarountulaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 5, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 8, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE(14, MOVE_BUG_BITE), + LEVEL_UP_MOVE(18, MOVE_BLOCK), + LEVEL_UP_MOVE(22, MOVE_COUNTER), + LEVEL_UP_MOVE(25, MOVE_HEADBUTT), + LEVEL_UP_MOVE(29, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(33, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(36, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(40, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(44, MOVE_SKITTER_SMACK), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSpidopsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SILK_TRAP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 5, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 8, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_FEINT), + LEVEL_UP_MOVE(14, MOVE_BUG_BITE), + LEVEL_UP_MOVE(19, MOVE_BLOCK), + LEVEL_UP_MOVE(24, MOVE_COUNTER), + LEVEL_UP_MOVE(28, MOVE_HEADBUTT), + LEVEL_UP_MOVE(33, MOVE_STICKY_WEB), + LEVEL_UP_MOVE(37, MOVE_GASTRO_ACID), + LEVEL_UP_MOVE(41, MOVE_CIRCLE_THROW), + LEVEL_UP_MOVE(45, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(49, MOVE_SKITTER_SMACK), + LEVEL_UP_END +}; + +static const struct LevelUpMove sNymbleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 4, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 6, MOVE_ASTONISH), + LEVEL_UP_MOVE( 9, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(14, MOVE_SCREECH), + LEVEL_UP_MOVE(18, MOVE_ENDURE), + LEVEL_UP_MOVE(22, MOVE_BUG_BITE), + LEVEL_UP_MOVE(26, MOVE_FEINT), + LEVEL_UP_MOVE(30, MOVE_AGILITY), + LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(41, MOVE_FIRST_IMPRESSION), + LEVEL_UP_END +}; + +static const struct LevelUpMove sLokixLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_LUNGE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_DETECT), + LEVEL_UP_MOVE( 4, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE( 6, MOVE_ASTONISH), + LEVEL_UP_MOVE( 9, MOVE_ASSURANCE), + LEVEL_UP_MOVE(11, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(14, MOVE_SCREECH), + LEVEL_UP_MOVE(18, MOVE_ENDURE), + LEVEL_UP_MOVE(22, MOVE_BUG_BITE), + LEVEL_UP_MOVE(28, MOVE_FEINT), + LEVEL_UP_MOVE(32, MOVE_AGILITY), + LEVEL_UP_MOVE(36, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(44, MOVE_FIRST_IMPRESSION), + LEVEL_UP_MOVE(48, MOVE_BOUNCE), + LEVEL_UP_MOVE(53, MOVE_AXE_KICK), + LEVEL_UP_END +}; + +static const struct LevelUpMove sPawmiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 8, MOVE_CHARGE), + LEVEL_UP_MOVE(12, MOVE_NUZZLE), + LEVEL_UP_MOVE(15, MOVE_DIG), + LEVEL_UP_MOVE(19, MOVE_BITE), + LEVEL_UP_MOVE(23, MOVE_SPARK), + LEVEL_UP_MOVE(27, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(31, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(35, MOVE_SLAM), + LEVEL_UP_MOVE(38, MOVE_DISCHARGE), + LEVEL_UP_MOVE(40, MOVE_AGILITY), + LEVEL_UP_MOVE(44, MOVE_WILD_CHARGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sPawmoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 8, MOVE_CHARGE), + LEVEL_UP_MOVE(12, MOVE_NUZZLE), + LEVEL_UP_MOVE(15, MOVE_DIG), + LEVEL_UP_MOVE(19, MOVE_BITE), + LEVEL_UP_MOVE(23, MOVE_SPARK), + LEVEL_UP_MOVE(27, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(32, MOVE_SLAM), + LEVEL_UP_MOVE(38, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(42, MOVE_DISCHARGE), + LEVEL_UP_MOVE(46, MOVE_AGILITY), + LEVEL_UP_MOVE(52, MOVE_WILD_CHARGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sPawmotLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE( 3, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 8, MOVE_CHARGE), + LEVEL_UP_MOVE(12, MOVE_NUZZLE), + LEVEL_UP_MOVE(15, MOVE_DIG), + LEVEL_UP_MOVE(19, MOVE_BITE), + LEVEL_UP_MOVE(23, MOVE_SPARK), + LEVEL_UP_MOVE(25, MOVE_ARM_THRUST), + LEVEL_UP_MOVE(29, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(33, MOVE_SLAM), + LEVEL_UP_MOVE(39, MOVE_ENTRAINMENT), + LEVEL_UP_MOVE(44, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(49, MOVE_DISCHARGE), + LEVEL_UP_MOVE(54, MOVE_AGILITY), + LEVEL_UP_MOVE(60, MOVE_DOUBLE_SHOCK), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTandemausLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 5, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 8, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(11, MOVE_SUPER_FANG), + LEVEL_UP_MOVE(14, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(18, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(22, MOVE_ENCORE), + LEVEL_UP_MOVE(26, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(30, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(33, MOVE_CHARM), + LEVEL_UP_MOVE(37, MOVE_BEAT_UP), + LEVEL_UP_MOVE(41, MOVE_COPYCAT), + LEVEL_UP_MOVE(46, MOVE_POPULATION_BOMB), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMausholdLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 1, MOVE_TIDY_UP), + LEVEL_UP_MOVE( 5, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE( 8, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(11, MOVE_SUPER_FANG), + LEVEL_UP_MOVE(14, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(18, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(22, MOVE_ENCORE), + LEVEL_UP_MOVE(29, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(33, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(37, MOVE_CHARM), + LEVEL_UP_MOVE(41, MOVE_BEAT_UP), + LEVEL_UP_MOVE(46, MOVE_COPYCAT), + LEVEL_UP_MOVE(53, MOVE_POPULATION_BOMB), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFidoughLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_LICK), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_COVET), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(18, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(22, MOVE_WORK_UP), + LEVEL_UP_MOVE(26, MOVE_BATON_PASS), + LEVEL_UP_MOVE(30, MOVE_ROAR), + LEVEL_UP_MOVE(33, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(36, MOVE_CHARM), + LEVEL_UP_MOVE(40, MOVE_CRUNCH), + LEVEL_UP_MOVE(45, MOVE_LAST_RESORT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDachsbunLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_LICK), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_COVET), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(18, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(22, MOVE_WORK_UP), + LEVEL_UP_MOVE(29, MOVE_BATON_PASS), + LEVEL_UP_MOVE(33, MOVE_ROAR), + LEVEL_UP_MOVE(38, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(42, MOVE_CHARM), + LEVEL_UP_MOVE(47, MOVE_CRUNCH), + LEVEL_UP_MOVE(53, MOVE_LAST_RESORT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSmolivLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(16, MOVE_FLAIL), + LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(23, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(27, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(30, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(34, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(38, MOVE_TERRAIN_PULSE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDollivLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(16, MOVE_FLAIL), + LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(23, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(29, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(34, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(37, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(42, MOVE_TERRAIN_PULSE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sArbolivaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(16, MOVE_FLAIL), + LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(23, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(29, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(34, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(39, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(46, MOVE_TERRAIN_PULSE), + LEVEL_UP_MOVE(52, MOVE_PETAL_BLIZZARD), + LEVEL_UP_MOVE(58, MOVE_PETAL_DANCE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSquawkabillyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_MIMIC), + LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(10, MOVE_TORMENT), + LEVEL_UP_MOVE(13, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(20, MOVE_TAUNT), + LEVEL_UP_MOVE(24, MOVE_UPROAR), + LEVEL_UP_MOVE(27, MOVE_COPYCAT), + LEVEL_UP_MOVE(30, MOVE_FLY), + LEVEL_UP_MOVE(34, MOVE_FACADE), + LEVEL_UP_MOVE(38, MOVE_SWAGGER), + LEVEL_UP_MOVE(42, MOVE_BRAVE_BIRD), + LEVEL_UP_MOVE(47, MOVE_ROOST), + LEVEL_UP_MOVE(52, MOVE_REVERSAL), + LEVEL_UP_END +}; + +static const struct LevelUpMove sNacliLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 7, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(16, MOVE_HEADBUTT), + LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(25, MOVE_RECOVER), + LEVEL_UP_MOVE(30, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(33, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(35, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(45, MOVE_STONE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sNaclstackLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SALT_CURE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 7, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(13, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(16, MOVE_HEADBUTT), + LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(30, MOVE_RECOVER), + LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(38, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(41, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(51, MOVE_STONE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGarganaclLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM), + LEVEL_UP_MOVE( 1, MOVE_BLOCK), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 7, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(10, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(13, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(16, MOVE_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_SALT_CURE), + LEVEL_UP_MOVE(30, MOVE_RECOVER), + LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(40, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(44, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(54, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(60, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCharcadetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(12, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(20, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(24, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(28, MOVE_INCINERATE), + LEVEL_UP_MOVE(32, MOVE_LAVA_PLUME), + LEVEL_UP_END +}; + +static const struct LevelUpMove sArmarougeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_PSYSHOCK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE( 8, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(12, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(20, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(24, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(28, MOVE_INCINERATE), + LEVEL_UP_MOVE(32, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(37, MOVE_CALM_MIND), + LEVEL_UP_MOVE(42, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(56, MOVE_EXPANDING_FORCE), + LEVEL_UP_MOVE(62, MOVE_ARMOR_CANNON), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(12, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(20, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(24, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(28, MOVE_INCINERATE), + LEVEL_UP_MOVE(32, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(42, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(48, MOVE_BITTER_BLADE), + LEVEL_UP_MOVE(56, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(62, MOVE_FLARE_BLITZ), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTadbulbLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 7, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(11, MOVE_WATER_GUN), + LEVEL_UP_MOVE(17, MOVE_CHARGE), + LEVEL_UP_MOVE(21, MOVE_SPARK), + LEVEL_UP_MOVE(24, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(25, MOVE_FLAIL), + LEVEL_UP_MOVE(32, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_WEATHER_BALL), + LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(50, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBelliboltLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF), + LEVEL_UP_MOVE( 7, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(11, MOVE_WATER_GUN), + LEVEL_UP_MOVE(17, MOVE_CHARGE), + LEVEL_UP_MOVE(21, MOVE_SPARK), + LEVEL_UP_MOVE(24, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(25, MOVE_FLAIL), + LEVEL_UP_MOVE(32, MOVE_DISCHARGE), + LEVEL_UP_MOVE(36, MOVE_WEATHER_BALL), + LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(50, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +static const struct LevelUpMove sWattrelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(11, MOVE_PLUCK), + LEVEL_UP_MOVE(15, MOVE_SPARK), + LEVEL_UP_MOVE(19, MOVE_UPROAR), + LEVEL_UP_MOVE(23, MOVE_ROOST), + LEVEL_UP_MOVE(27, MOVE_DUAL_WINGBEAT), + LEVEL_UP_MOVE(32, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(43, MOVE_DISCHARGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sKilowattrelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_ELECTRO_BALL), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(11, MOVE_PLUCK), + LEVEL_UP_MOVE(15, MOVE_SPARK), + LEVEL_UP_MOVE(19, MOVE_UPROAR), + LEVEL_UP_MOVE(24, MOVE_ROOST), + LEVEL_UP_MOVE(30, MOVE_DUAL_WINGBEAT), + LEVEL_UP_MOVE(36, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_VOLT_SWITCH), + LEVEL_UP_MOVE(48, MOVE_DISCHARGE), + LEVEL_UP_MOVE(55, MOVE_HURRICANE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMaschiffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 4, MOVE_LICK), + LEVEL_UP_MOVE( 7, MOVE_SNARL), + LEVEL_UP_MOVE(10, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(14, MOVE_BITE), + LEVEL_UP_MOVE(18, MOVE_ROAR), + LEVEL_UP_MOVE(22, MOVE_HEADBUTT), + LEVEL_UP_MOVE(26, MOVE_PAYBACK), + LEVEL_UP_MOVE(31, MOVE_CRUNCH), + LEVEL_UP_MOVE(35, MOVE_SWAGGER), + LEVEL_UP_MOVE(39, MOVE_REVERSAL), + LEVEL_UP_MOVE(43, MOVE_JAW_LOCK), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMabosstiffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_COMEUPPANCE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_LICK), + LEVEL_UP_MOVE( 7, MOVE_SNARL), + LEVEL_UP_MOVE(10, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE(14, MOVE_BITE), + LEVEL_UP_MOVE(18, MOVE_ROAR), + LEVEL_UP_MOVE(22, MOVE_HEADBUTT), + LEVEL_UP_MOVE(26, MOVE_PAYBACK), + LEVEL_UP_MOVE(34, MOVE_CRUNCH), + LEVEL_UP_MOVE(39, MOVE_SWAGGER), + LEVEL_UP_MOVE(43, MOVE_REVERSAL), + LEVEL_UP_MOVE(48, MOVE_JAW_LOCK), + LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(60, MOVE_OUTRAGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sShroodleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 5, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 8, MOVE_BITE), + LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(11, MOVE_SWITCHEROO), + LEVEL_UP_MOVE(14, MOVE_POISON_FANG), + LEVEL_UP_MOVE(18, MOVE_FLATTER), + LEVEL_UP_MOVE(21, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_U_TURN), + LEVEL_UP_MOVE(29, MOVE_POISON_JAB), + LEVEL_UP_MOVE(33, MOVE_TAUNT), + LEVEL_UP_MOVE(36, MOVE_SUBSTITUTE), + LEVEL_UP_MOVE(40, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(45, MOVE_GUNK_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGrafaiaiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_DOODLE), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 5, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(11, MOVE_SWITCHEROO), + LEVEL_UP_MOVE(14, MOVE_POISON_FANG), + LEVEL_UP_MOVE(18, MOVE_FLATTER), + LEVEL_UP_MOVE(21, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_U_TURN), + LEVEL_UP_MOVE(33, MOVE_POISON_JAB), + LEVEL_UP_MOVE(37, MOVE_TAUNT), + LEVEL_UP_MOVE(40, MOVE_SUBSTITUTE), + LEVEL_UP_MOVE(45, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(51, MOVE_GUNK_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBramblinLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(13, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(17, MOVE_INFESTATION), + LEVEL_UP_MOVE(21, MOVE_HEX), + LEVEL_UP_MOVE(25, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(29, MOVE_DISABLE), + LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(40, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(45, MOVE_CURSE), + LEVEL_UP_MOVE(50, MOVE_PAIN_SPLIT), + LEVEL_UP_MOVE(55, MOVE_POWER_WHIP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBrambleghastLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(13, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(17, MOVE_INFESTATION), + LEVEL_UP_MOVE(21, MOVE_HEX), + LEVEL_UP_MOVE(25, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(29, MOVE_DISABLE), + LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(40, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(45, MOVE_CURSE), + LEVEL_UP_MOVE(50, MOVE_PAIN_SPLIT), + LEVEL_UP_MOVE(55, MOVE_POWER_WHIP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sToedscoolLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 4, MOVE_ABSORB), + LEVEL_UP_MOVE( 8, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 8, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(12, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_TACKLE), + LEVEL_UP_MOVE(16, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(20, MOVE_SCREECH), + LEVEL_UP_MOVE(24, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(28, MOVE_HEX), + LEVEL_UP_MOVE(32, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(36, MOVE_SPORE), + LEVEL_UP_MOVE(40, MOVE_GROWTH), + LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(48, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(52, MOVE_POWER_WHIP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sToedscruelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 4, MOVE_ABSORB), + LEVEL_UP_MOVE( 8, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 8, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(12, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_TACKLE), + LEVEL_UP_MOVE(16, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(20, MOVE_SCREECH), + LEVEL_UP_MOVE(24, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(28, MOVE_HEX), + LEVEL_UP_MOVE(34, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(40, MOVE_SPORE), + LEVEL_UP_MOVE(44, MOVE_GROWTH), + LEVEL_UP_MOVE(48, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(54, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(58, MOVE_POWER_WHIP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sKlawfLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 6, MOVE_HARDEN), + LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(17, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(21, MOVE_PROTECT), + LEVEL_UP_MOVE(24, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(29, MOVE_X_SCISSOR), + LEVEL_UP_MOVE(33, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(37, MOVE_FLAIL), + LEVEL_UP_MOVE(42, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(47, MOVE_HIGH_HORSEPOWER), + LEVEL_UP_MOVE(51, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(56, MOVE_GUILLOTINE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCapsakidLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 4, MOVE_BITE), + LEVEL_UP_MOVE(10, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(17, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(21, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(24, MOVE_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(38, MOVE_CRUNCH), + LEVEL_UP_MOVE(44, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(48, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sScovillainLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SPICY_EXTRACT), + LEVEL_UP_MOVE( 0, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG), + LEVEL_UP_MOVE( 1, MOVE_LEAFAGE), + LEVEL_UP_MOVE( 4, MOVE_BITE), + LEVEL_UP_MOVE(10, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(17, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(21, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(24, MOVE_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(33, MOVE_WORRY_SEED), + LEVEL_UP_MOVE(38, MOVE_CRUNCH), + LEVEL_UP_MOVE(44, MOVE_SEED_BOMB), + LEVEL_UP_MOVE(48, MOVE_SOLAR_BEAM), + LEVEL_UP_MOVE(48, MOVE_OVERHEAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sRellorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 7, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(11, MOVE_ROLLOUT), + LEVEL_UP_MOVE(15, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_DIG), + LEVEL_UP_MOVE(35, MOVE_LUNGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sRabscaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 7, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(11, MOVE_ROLLOUT), + LEVEL_UP_MOVE(15, MOVE_PSYBEAM), + LEVEL_UP_MOVE(20, MOVE_BUG_BITE), + LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE(35, MOVE_LUNGE), + LEVEL_UP_MOVE(40, MOVE_SPEED_SWAP), + LEVEL_UP_MOVE(40, MOVE_POWER_SWAP), + LEVEL_UP_MOVE(40, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE(45, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(50, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFlittleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 5, MOVE_CONFUSION), + LEVEL_UP_MOVE( 8, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(19, MOVE_PSYBEAM), + LEVEL_UP_MOVE(24, MOVE_PLUCK), + LEVEL_UP_MOVE(29, MOVE_AGILITY), + LEVEL_UP_MOVE(34, MOVE_UPROAR), + LEVEL_UP_END +}; + +static const struct LevelUpMove sEspathraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_LUMINA_CRASH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_DRILL_PECK), + LEVEL_UP_MOVE( 1, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE( 5, MOVE_CONFUSION), + LEVEL_UP_MOVE( 8, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(19, MOVE_PSYBEAM), + LEVEL_UP_MOVE(24, MOVE_PLUCK), + LEVEL_UP_MOVE(29, MOVE_AGILITY), + LEVEL_UP_MOVE(34, MOVE_UPROAR), + LEVEL_UP_MOVE(43, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(49, MOVE_PSYCHIC), + LEVEL_UP_MOVE(54, MOVE_LAST_RESORT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTinkatinkLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 8, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(11, MOVE_COVET), + LEVEL_UP_MOVE(14, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(17, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(21, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(24, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(27, MOVE_SLAM), + LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(35, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(39, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(43, MOVE_FLATTER), + LEVEL_UP_MOVE(47, MOVE_SKITTER_SMACK), + LEVEL_UP_MOVE(52, MOVE_KNOCK_OFF), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTinkatuffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 8, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(11, MOVE_COVET), + LEVEL_UP_MOVE(14, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(17, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(21, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(24, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(27, MOVE_SLAM), + LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(35, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(39, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(43, MOVE_FLATTER), + LEVEL_UP_MOVE(47, MOVE_SKITTER_SMACK), + LEVEL_UP_MOVE(52, MOVE_KNOCK_OFF), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTinkatonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_GIGATON_HAMMER), + LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES), + LEVEL_UP_MOVE( 8, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(11, MOVE_COVET), + LEVEL_UP_MOVE(14, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(17, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(21, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(24, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(27, MOVE_SLAM), + LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON), + LEVEL_UP_MOVE(35, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(39, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(43, MOVE_FLATTER), + LEVEL_UP_MOVE(47, MOVE_SKITTER_SMACK), + LEVEL_UP_MOVE(52, MOVE_KNOCK_OFF), + LEVEL_UP_END +}; + +static const struct LevelUpMove sWiglettLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 4, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 8, MOVE_WRAP), + LEVEL_UP_MOVE(12, MOVE_AQUA_JET), + LEVEL_UP_MOVE(20, MOVE_SLAM), + LEVEL_UP_MOVE(20, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(24, MOVE_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_DIG), + LEVEL_UP_MOVE(32, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(36, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(40, MOVE_LIQUIDATION), + LEVEL_UP_END +}; + +static const struct LevelUpMove sWugtrioLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(12, MOVE_AQUA_JET), + LEVEL_UP_MOVE(16, MOVE_SLAM), + LEVEL_UP_MOVE(20, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(24, MOVE_HEADBUTT), + LEVEL_UP_MOVE(30, MOVE_TRIPLE_DIVE), + LEVEL_UP_MOVE(36, MOVE_DIG), + LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(48, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(54, MOVE_LIQUIDATION), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBombirdierLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS), + LEVEL_UP_MOVE( 7, MOVE_THIEF), + LEVEL_UP_MOVE(11, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(16, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(20, MOVE_PLUCK), + LEVEL_UP_MOVE(24, MOVE_TORMENT), + LEVEL_UP_MOVE(29, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(36, MOVE_PAYBACK), + LEVEL_UP_MOVE(42, MOVE_DUAL_WINGBEAT), + LEVEL_UP_MOVE(47, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(53, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(60, MOVE_PARTING_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFinizenLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_ASTONISH), + LEVEL_UP_MOVE(10, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(21, MOVE_DIVE), + LEVEL_UP_MOVE(25, MOVE_CHARM), + LEVEL_UP_MOVE(29, MOVE_ACROBATICS), + LEVEL_UP_MOVE(34, MOVE_ENCORE), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(44, MOVE_MIST), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sPalafinLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_FLIP_TURN), + LEVEL_UP_MOVE( 1, MOVE_JET_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_ASTONISH), + LEVEL_UP_MOVE(10, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_AQUA_JET), + LEVEL_UP_MOVE(17, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(21, MOVE_DIVE), + LEVEL_UP_MOVE(25, MOVE_CHARM), + LEVEL_UP_MOVE(29, MOVE_ACROBATICS), + LEVEL_UP_MOVE(34, MOVE_ENCORE), + LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(44, MOVE_MIST), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(55, MOVE_FOCUS_PUNCH), + LEVEL_UP_MOVE(61, MOVE_WAVE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sVaroomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 4, MOVE_SMOG), + LEVEL_UP_MOVE( 7, MOVE_TAUNT), + LEVEL_UP_MOVE(10, MOVE_ASSURANCE), + LEVEL_UP_MOVE(13, MOVE_SLUDGE), + LEVEL_UP_MOVE(17, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(21, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SCREECH), + LEVEL_UP_MOVE(28, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(32, MOVE_SWAGGER), + LEVEL_UP_MOVE(36, MOVE_POISON_JAB), + LEVEL_UP_MOVE(41, MOVE_UPROAR), + LEVEL_UP_MOVE(46, MOVE_SPIN_OUT), + LEVEL_UP_MOVE(50, MOVE_GUNK_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sRevavroomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 4, MOVE_SMOG), + LEVEL_UP_MOVE( 7, MOVE_TAUNT), + LEVEL_UP_MOVE(10, MOVE_ASSURANCE), + LEVEL_UP_MOVE(13, MOVE_SLUDGE), + LEVEL_UP_MOVE(17, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(21, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_SCREECH), + LEVEL_UP_MOVE(28, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(32, MOVE_SWAGGER), + LEVEL_UP_MOVE(36, MOVE_POISON_JAB), + LEVEL_UP_MOVE(46, MOVE_UPROAR), + LEVEL_UP_MOVE(52, MOVE_SPIN_OUT), + LEVEL_UP_MOVE(58, MOVE_GUNK_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCyclizarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(11, MOVE_TAUNT), + LEVEL_UP_MOVE(14, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE(18, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(23, MOVE_BITE), + LEVEL_UP_MOVE(27, MOVE_U_TURN), + LEVEL_UP_MOVE(31, MOVE_SHED_TAIL), + LEVEL_UP_MOVE(36, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(40, MOVE_SHIFT_GEAR), + LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(51, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(57, MOVE_DRAGON_RUSH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOrthwormLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE(16, MOVE_BULLDOZE), + LEVEL_UP_MOVE(21, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(26, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(30, MOVE_DIG), + LEVEL_UP_MOVE(34, MOVE_SANDSTORM), + LEVEL_UP_MOVE(38, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(43, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(52, MOVE_SHED_TAIL), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGlimmetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 7, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(11, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(22, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(26, MOVE_SANDSTORM), + LEVEL_UP_MOVE(29, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(37, MOVE_POWER_GEM), + LEVEL_UP_MOVE(41, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(46, MOVE_SLUDGE_WAVE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGlimmoraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_MORTAL_SPIN), + LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN), + LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE(11, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH), + LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(22, MOVE_VENOSHOCK), + LEVEL_UP_MOVE(26, MOVE_SANDSTORM), + LEVEL_UP_MOVE(29, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(39, MOVE_POWER_GEM), + LEVEL_UP_MOVE(44, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(50, MOVE_SLUDGE_WAVE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGreavardLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_LICK), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 6, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_ROAR), + LEVEL_UP_MOVE(12, MOVE_HEADBUTT), + LEVEL_UP_MOVE(16, MOVE_DIG), + LEVEL_UP_MOVE(24, MOVE_REST), + LEVEL_UP_MOVE(28, MOVE_CRUNCH), + LEVEL_UP_MOVE(32, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(37, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(41, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(46, MOVE_CHARM), + LEVEL_UP_MOVE(52, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sHoundstoneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_LAST_RESPECTS), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 3, MOVE_LICK), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 6, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_ROAR), + LEVEL_UP_MOVE(12, MOVE_HEADBUTT), + LEVEL_UP_MOVE(16, MOVE_DIG), + LEVEL_UP_MOVE(24, MOVE_REST), + LEVEL_UP_MOVE(28, MOVE_CRUNCH), + LEVEL_UP_MOVE(36, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(41, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(46, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(51, MOVE_CHARM), + LEVEL_UP_MOVE(58, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFlamigoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_COPYCAT), + LEVEL_UP_MOVE( 5, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 9, MOVE_DETECT), + LEVEL_UP_MOVE(12, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(18, MOVE_LOW_KICK), + LEVEL_UP_MOVE(21, MOVE_FEINT), + LEVEL_UP_MOVE(27, MOVE_PAYBACK), + LEVEL_UP_MOVE(31, MOVE_ROOST), + LEVEL_UP_MOVE(35, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(39, MOVE_MEGA_KICK), + LEVEL_UP_MOVE(44, MOVE_WIDE_GUARD), + LEVEL_UP_MOVE(48, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(54, MOVE_BRAVE_BIRD), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCetoddleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(12, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(15, MOVE_REST), + LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(25, MOVE_FLAIL), + LEVEL_UP_MOVE(27, MOVE_AVALANCHE), + LEVEL_UP_MOVE(31, MOVE_BOUNCE), + LEVEL_UP_MOVE(36, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(40, MOVE_AMNESIA), + LEVEL_UP_MOVE(44, MOVE_ICE_SPINNER), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(53, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +static const struct LevelUpMove sCetitanLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_ECHOED_VOICE), + LEVEL_UP_MOVE(12, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(15, MOVE_REST), + LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(25, MOVE_FLAIL), + LEVEL_UP_MOVE(27, MOVE_AVALANCHE), + LEVEL_UP_MOVE(31, MOVE_BOUNCE), + LEVEL_UP_MOVE(36, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(40, MOVE_AMNESIA), + LEVEL_UP_MOVE(44, MOVE_ICE_SPINNER), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(53, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +static const struct LevelUpMove sVeluzaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 7, MOVE_PLUCK), + LEVEL_UP_MOVE(11, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(20, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_AQUA_CUTTER), + LEVEL_UP_MOVE(30, MOVE_FILLET_AWAY), + LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(40, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(45, MOVE_LIQUIDATION), + LEVEL_UP_MOVE(50, MOVE_CRUNCH), + LEVEL_UP_MOVE(55, MOVE_FINAL_GAMBIT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDondozoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 5, MOVE_TICKLE), + LEVEL_UP_MOVE(10, MOVE_FLAIL), + LEVEL_UP_MOVE(15, MOVE_REST), + LEVEL_UP_MOVE(15, MOVE_SLEEP_TALK), + LEVEL_UP_MOVE(20, MOVE_DIVE), + LEVEL_UP_MOVE(25, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(30, MOVE_SOAK), + LEVEL_UP_MOVE(35, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(40, MOVE_AQUA_TAIL), + LEVEL_UP_MOVE(45, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(50, MOVE_ORDER_UP), + LEVEL_UP_MOVE(55, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(60, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(65, MOVE_WAVE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTatsugiriLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 6, MOVE_HARDEN), + LEVEL_UP_MOVE(12, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(17, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(23, MOVE_SOAK), + LEVEL_UP_MOVE(28, MOVE_TAUNT), + LEVEL_UP_MOVE(34, MOVE_MEMENTO), + LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER), + LEVEL_UP_MOVE(43, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(47, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(52, MOVE_DRAGON_PULSE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sAnnihilapeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_FLING), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 5, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE( 8, MOVE_LOW_KICK), + LEVEL_UP_MOVE(12, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(17, MOVE_SWAGGER), + LEVEL_UP_MOVE(22, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(26, MOVE_ASSURANCE), + LEVEL_UP_MOVE(30, MOVE_THRASH), + LEVEL_UP_MOVE(35, MOVE_RAGE_FIST), + LEVEL_UP_MOVE(39, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(44, MOVE_SCREECH), + LEVEL_UP_MOVE(48, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(53, MOVE_OUTRAGE), + LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sClodsireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_AMNESIA), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 4, MOVE_TOXIC_SPIKES), + LEVEL_UP_MOVE( 8, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(12, MOVE_POISON_TAIL), + LEVEL_UP_MOVE(16, MOVE_SLAM), + LEVEL_UP_MOVE(21, MOVE_YAWN), + LEVEL_UP_MOVE(24, MOVE_POISON_JAB), + LEVEL_UP_MOVE(30, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(36, MOVE_MEGAHORN), + LEVEL_UP_MOVE(40, MOVE_TOXIC), + LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFarigirafLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP), + LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP), + LEVEL_UP_MOVE( 5, MOVE_CONFUSION), + LEVEL_UP_MOVE(10, MOVE_ASSURANCE), + LEVEL_UP_MOVE(14, MOVE_STOMP), + LEVEL_UP_MOVE(19, MOVE_PSYBEAM), + LEVEL_UP_MOVE(23, MOVE_AGILITY), + LEVEL_UP_MOVE(28, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE(32, MOVE_TWIN_BEAM), + LEVEL_UP_MOVE(37, MOVE_CRUNCH), + LEVEL_UP_MOVE(41, MOVE_BATON_PASS), + LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(50, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDudunsparceLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_FLAIL), + LEVEL_UP_MOVE( 4, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 8, MOVE_ROLLOUT), + LEVEL_UP_MOVE(12, MOVE_GLARE), + LEVEL_UP_MOVE(16, MOVE_SCREECH), + LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(24, MOVE_DRILL_RUN), + LEVEL_UP_MOVE(28, MOVE_YAWN), + LEVEL_UP_MOVE(32, MOVE_HYPER_DRILL), + LEVEL_UP_MOVE(36, MOVE_ROOST), + LEVEL_UP_MOVE(40, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(44, MOVE_COIL), + LEVEL_UP_MOVE(48, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(52, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(56, MOVE_HURRICANE), + LEVEL_UP_MOVE(62, MOVE_BOOMBURST), + LEVEL_UP_END +}; + +static const struct LevelUpMove sKingambitLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_KOWTOW_CLEAVE), + LEVEL_UP_MOVE( 1, MOVE_METAL_BURST), + LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(15, MOVE_TORMENT), + LEVEL_UP_MOVE(20, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(25, MOVE_ASSURANCE), + LEVEL_UP_MOVE(30, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(35, MOVE_SLASH), + LEVEL_UP_MOVE(40, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(45, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(50, MOVE_RETALIATE), + LEVEL_UP_MOVE(57, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(64, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(71, MOVE_GUILLOTINE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 7, MOVE_BULLDOZE), + LEVEL_UP_MOVE(14, MOVE_TAUNT), + LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(28, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(35, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(42, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(56, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(70, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(77, MOVE_MEGAHORN), + LEVEL_UP_MOVE(84, MOVE_HEAD_SMASH), + LEVEL_UP_MOVE(91, MOVE_HEADLONG_RUSH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sScreamTailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 7, MOVE_HOWL), + LEVEL_UP_MOVE(14, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(21, MOVE_BITE), + LEVEL_UP_MOVE(28, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(35, MOVE_REST), + LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH), + LEVEL_UP_MOVE(49, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(56, MOVE_PSYCHIC_FANGS), + LEVEL_UP_MOVE(63, MOVE_CRUNCH), + LEVEL_UP_MOVE(70, MOVE_WISH), + LEVEL_UP_MOVE(77, MOVE_GYRO_BALL), + LEVEL_UP_MOVE(84, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(91, MOVE_BOOMBURST), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(14, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(21, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(28, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(35, MOVE_PAYBACK), + LEVEL_UP_MOVE(42, MOVE_THRASH), + LEVEL_UP_MOVE(49, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(56, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(63, MOVE_SPORE), + LEVEL_UP_MOVE(70, MOVE_INGRAIN), + LEVEL_UP_MOVE(77, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(91, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 7, MOVE_PSYBEAM), + LEVEL_UP_MOVE(14, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(21, MOVE_MEMENTO), + LEVEL_UP_MOVE(28, MOVE_WISH), + LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(42, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(49, MOVE_MYSTICAL_FIRE), + LEVEL_UP_MOVE(56, MOVE_POWER_GEM), + LEVEL_UP_MOVE(63, MOVE_PSYSHOCK), + LEVEL_UP_MOVE(70, MOVE_PHANTOM_FORCE), + LEVEL_UP_MOVE(77, MOVE_PAIN_SPLIT), + LEVEL_UP_MOVE(84, MOVE_MOONBLAST), + LEVEL_UP_MOVE(91, MOVE_PERISH_SONG), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_BUG_BITE), + LEVEL_UP_MOVE( 7, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(21, MOVE_STOMP), + LEVEL_UP_MOVE(28, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(35, MOVE_MORNING_SUN), + LEVEL_UP_MOVE(42, MOVE_LUNGE), + LEVEL_UP_MOVE(49, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(56, MOVE_BULK_UP), + LEVEL_UP_MOVE(63, MOVE_DUAL_WINGBEAT), + LEVEL_UP_MOVE(70, MOVE_FIRST_IMPRESSION), + LEVEL_UP_MOVE(77, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(84, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(91, MOVE_THRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 7, MOVE_SPARK), + LEVEL_UP_MOVE(14, MOVE_BULLDOZE), + LEVEL_UP_MOVE(21, MOVE_CHARGE_BEAM), + LEVEL_UP_MOVE(28, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(35, MOVE_SCREECH), + LEVEL_UP_MOVE(42, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(49, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(56, MOVE_DISCHARGE), + LEVEL_UP_MOVE(63, MOVE_EARTH_POWER), + LEVEL_UP_MOVE(70, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(77, MOVE_GRAVITY), + LEVEL_UP_MOVE(84, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(91, MOVE_MAGNETIC_FLUX), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 7, MOVE_BULLDOZE), + LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(28, MOVE_IRON_HEAD), + LEVEL_UP_MOVE(35, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(42, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(56, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(63, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(70, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(77, MOVE_MEGAHORN), + LEVEL_UP_MOVE(84, MOVE_GIGA_IMPACT), + LEVEL_UP_MOVE(91, MOVE_STEEL_ROLLER), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronBundleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PRESENT), + LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE(21, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(28, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(35, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY), + LEVEL_UP_MOVE(49, MOVE_FLIP_TURN), + LEVEL_UP_MOVE(56, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(63, MOVE_AGILITY), + LEVEL_UP_MOVE(70, MOVE_SNOWSCAPE), + LEVEL_UP_MOVE(77, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(84, MOVE_AURORA_VEIL), + LEVEL_UP_MOVE(91, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronHandsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), + LEVEL_UP_MOVE( 7, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(14, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(21, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE(28, MOVE_SLAM), + LEVEL_UP_MOVE(35, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(42, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(49, MOVE_CHARGE), + LEVEL_UP_MOVE(56, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(70, MOVE_DETECT), + LEVEL_UP_MOVE(77, MOVE_HEAVY_SLAM), + LEVEL_UP_MOVE(84, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(91, MOVE_FOCUS_PUNCH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 1, MOVE_WORK_UP), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE( 7, MOVE_ROAR), + LEVEL_UP_MOVE(14, MOVE_ASSURANCE), + LEVEL_UP_MOVE(21, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(28, MOVE_SNARL), + LEVEL_UP_MOVE(35, MOVE_CRUNCH), + LEVEL_UP_MOVE(42, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(56, MOVE_AIR_SLASH), + LEVEL_UP_MOVE(63, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(70, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(77, MOVE_OUTRAGE), + LEVEL_UP_MOVE(84, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(91, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronMothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY), + LEVEL_UP_MOVE( 7, MOVE_STRUGGLE_BUG), + LEVEL_UP_MOVE(14, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(21, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(28, MOVE_LUNGE), + LEVEL_UP_MOVE(35, MOVE_SCREECH), + LEVEL_UP_MOVE(42, MOVE_DISCHARGE), + LEVEL_UP_MOVE(49, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(56, MOVE_FIERY_DANCE), + LEVEL_UP_MOVE(63, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(70, MOVE_MORNING_SUN), + LEVEL_UP_MOVE(77, MOVE_HURRICANE), + LEVEL_UP_MOVE(84, MOVE_BUG_BUZZ), + LEVEL_UP_MOVE(91, MOVE_OVERHEAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronThornsLevelUpLearnset[] = { + 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( 7, MOVE_SCREECH), + LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(28, MOVE_BITE), + LEVEL_UP_MOVE(35, MOVE_CHARGE), + LEVEL_UP_MOVE(42, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(49, MOVE_SANDSTORM), + LEVEL_UP_MOVE(56, MOVE_WILD_CHARGE), + LEVEL_UP_MOVE(63, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(70, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(77, MOVE_STEALTH_ROCK), + LEVEL_UP_MOVE(84, MOVE_STONE_EDGE), + LEVEL_UP_MOVE(91, MOVE_GIGA_IMPACT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFrigibaxLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 6, MOVE_ICY_WIND), + LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(18, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(24, MOVE_BITE), + LEVEL_UP_MOVE(29, MOVE_ICE_FANG), + LEVEL_UP_MOVE(32, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(40, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(44, MOVE_CRUNCH), + LEVEL_UP_MOVE(48, MOVE_ICICLE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sArctibaxLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 6, MOVE_ICY_WIND), + LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(18, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(24, MOVE_BITE), + LEVEL_UP_MOVE(29, MOVE_ICE_FANG), + LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(45, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(50, MOVE_CRUNCH), + LEVEL_UP_MOVE(55, MOVE_ICICLE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sBaxcaliburLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_GLAIVE_RUSH), + LEVEL_UP_MOVE( 1, MOVE_SNOWSCAPE), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_ICY_WIND), + LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(18, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(24, MOVE_BITE), + LEVEL_UP_MOVE(29, MOVE_ICE_FANG), + LEVEL_UP_MOVE(35, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(48, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(55, MOVE_CRUNCH), + LEVEL_UP_MOVE(62, MOVE_ICICLE_CRASH), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGimmighoulLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sGholdengoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(14, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(21, MOVE_SUBSTITUTE), + LEVEL_UP_MOVE(28, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(35, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(42, MOVE_RECOVER), + LEVEL_UP_MOVE(49, MOVE_POWER_GEM), + LEVEL_UP_MOVE(56, MOVE_MAKE_IT_RAIN), + LEVEL_UP_MOVE(63, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(70, MOVE_MEMENTO), + LEVEL_UP_END +}; + +static const struct LevelUpMove sWoChienLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE( 5, MOVE_TICKLE), + LEVEL_UP_MOVE(10, MOVE_PAYBACK), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(25, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(30, MOVE_GROWTH), + LEVEL_UP_MOVE(35, MOVE_INGRAIN), + LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(45, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(50, MOVE_RUINATION), + LEVEL_UP_MOVE(55, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(60, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(65, MOVE_GRASSY_TERRAIN), + LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(75, MOVE_LEAF_STORM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sChienPaoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE( 5, MOVE_ICY_WIND), + LEVEL_UP_MOVE(10, MOVE_PAYBACK), + LEVEL_UP_MOVE(15, MOVE_MIST), + LEVEL_UP_MOVE(15, MOVE_HAZE), + LEVEL_UP_MOVE(20, MOVE_ICE_SHARD), + LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(30, MOVE_SNOWSCAPE), + LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(45, MOVE_ICICLE_CRASH), + LEVEL_UP_MOVE(50, MOVE_RUINATION), + LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH), + LEVEL_UP_MOVE(60, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(65, MOVE_RECOVER), + LEVEL_UP_MOVE(70, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(75, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +static const struct LevelUpMove sTingLuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 5, MOVE_SPIKES), + LEVEL_UP_MOVE(10, MOVE_PAYBACK), + LEVEL_UP_MOVE(15, MOVE_STOMP), + LEVEL_UP_MOVE(20, MOVE_BULLDOZE), + LEVEL_UP_MOVE(25, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(30, MOVE_TAUNT), + LEVEL_UP_MOVE(35, MOVE_THRASH), + LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(45, MOVE_STOMPING_TANTRUM), + LEVEL_UP_MOVE(50, MOVE_RUINATION), + LEVEL_UP_MOVE(55, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(60, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(65, MOVE_MEMENTO), + LEVEL_UP_MOVE(70, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(75, MOVE_FISSURE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sChiYuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE( 5, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(10, MOVE_PAYBACK), + LEVEL_UP_MOVE(15, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE), + LEVEL_UP_MOVE(25, MOVE_INCINERATE), + LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(35, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(40, MOVE_DARK_PULSE), + LEVEL_UP_MOVE(45, MOVE_LAVA_PLUME), + LEVEL_UP_MOVE(50, MOVE_RUINATION), + LEVEL_UP_MOVE(55, MOVE_BOUNCE), + LEVEL_UP_MOVE(60, MOVE_SWAGGER), + LEVEL_UP_MOVE(65, MOVE_INFERNO), + LEVEL_UP_MOVE(70, MOVE_MEMENTO), + LEVEL_UP_MOVE(75, MOVE_OVERHEAT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 7, MOVE_INCINERATE), + LEVEL_UP_MOVE(14, MOVE_HEADBUTT), + LEVEL_UP_MOVE(21, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT), + LEVEL_UP_MOVE(42, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(56, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(70, MOVE_FLY), + LEVEL_UP_MOVE(77, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(84, MOVE_ROOST), + LEVEL_UP_MOVE(91, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronValiantLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK), + LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE( 7, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(14, MOVE_FEINT), + LEVEL_UP_MOVE(21, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(28, MOVE_DAZZLING_GLEAM), + LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT), + LEVEL_UP_MOVE(42, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(49, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(56, MOVE_MOONBLAST), + 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(91, MOVE_SPIRIT_BREAK), + LEVEL_UP_END +}; + +static const struct LevelUpMove sKoraidonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE( 7, MOVE_ROCK_SMASH), + LEVEL_UP_MOVE(14, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(21, MOVE_DRAIN_PUNCH), + LEVEL_UP_MOVE(28, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(35, MOVE_AGILITY), + LEVEL_UP_MOVE(42, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(56, MOVE_COLLISION_COURSE), + LEVEL_UP_MOVE(63, MOVE_SCREECH), + LEVEL_UP_MOVE(70, MOVE_COUNTER), + LEVEL_UP_MOVE(77, MOVE_OUTRAGE), + LEVEL_UP_MOVE(84, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(91, MOVE_FLARE_BLITZ), + LEVEL_UP_MOVE(98, MOVE_GIGA_IMPACT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMiraidonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN), + LEVEL_UP_MOVE( 7, MOVE_SHOCK_WAVE), + LEVEL_UP_MOVE(14, MOVE_CHARGE), + LEVEL_UP_MOVE(21, MOVE_PARABOLIC_CHARGE), + LEVEL_UP_MOVE(28, MOVE_DISCHARGE), + LEVEL_UP_MOVE(35, MOVE_AGILITY), + LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(56, MOVE_ELECTRO_DRIFT), + LEVEL_UP_MOVE(63, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(70, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(77, MOVE_OUTRAGE), + LEVEL_UP_MOVE(84, MOVE_THUNDER), + LEVEL_UP_MOVE(91, MOVE_OVERHEAT), + LEVEL_UP_MOVE(98, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_TWISTER), + LEVEL_UP_MOVE( 1, MOVE_AQUA_JET), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(14, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(21, MOVE_NOBLE_ROAR), + LEVEL_UP_MOVE(28, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(35, MOVE_BREAKING_SWIPE), + LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH), + LEVEL_UP_MOVE(56, MOVE_HYDRO_STEAM), + LEVEL_UP_MOVE(63, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(70, MOVE_OUTRAGE), + LEVEL_UP_MOVE(77, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(84, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = { + 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), + LEVEL_UP_MOVE(14, MOVE_RETALIATE), + LEVEL_UP_MOVE(21, MOVE_QUICK_GUARD), + LEVEL_UP_MOVE(28, MOVE_NIGHT_SLASH), + LEVEL_UP_MOVE(35, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(42, MOVE_SACRED_SWORD), + LEVEL_UP_MOVE(49, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(56, MOVE_PSYBLADE), + LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT), + LEVEL_UP_MOVE(70, MOVE_IMPRISON), + LEVEL_UP_MOVE(77, MOVE_MEGAHORN), + LEVEL_UP_MOVE(84, MOVE_ALLY_SWITCH), + LEVEL_UP_MOVE(91, MOVE_SOLAR_BLADE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sDipplinLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_RECYCLE), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 4, MOVE_DRAGON_TAIL), + LEVEL_UP_MOVE( 8, MOVE_GROWTH), + LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(16, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(28, MOVE_SYRUP_BOMB), + LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE), + LEVEL_UP_MOVE(36, MOVE_RECOVER), + LEVEL_UP_MOVE(40, MOVE_ENERGY_BALL), + LEVEL_UP_MOVE(44, MOVE_SUBSTITUTE), + LEVEL_UP_END +}; + +static const struct LevelUpMove sPoltchageistLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 6, MOVE_ABSORB), + LEVEL_UP_MOVE(12, MOVE_LIFE_DEW), + LEVEL_UP_MOVE(18, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(30, MOVE_HEX), + LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(42, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(54, MOVE_MEMENTO), + LEVEL_UP_MOVE(60, MOVE_LEAF_STORM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sSinistchaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 0, MOVE_MATCHA_GOTCHA), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 6, MOVE_ABSORB), + LEVEL_UP_MOVE(12, MOVE_LIFE_DEW), + LEVEL_UP_MOVE(18, MOVE_FOUL_PLAY), + LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(30, MOVE_HEX), + LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER), + LEVEL_UP_MOVE(42, MOVE_STRENGTH_SAP), + LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(54, MOVE_MEMENTO), + LEVEL_UP_MOVE(60, MOVE_LEAF_STORM), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOkidogiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_BULK_UP), + LEVEL_UP_MOVE( 8, MOVE_HOWL), + LEVEL_UP_MOVE(16, MOVE_POISON_FANG), + LEVEL_UP_MOVE(24, MOVE_FORCE_PALM), + LEVEL_UP_MOVE(32, MOVE_COUNTER), + LEVEL_UP_MOVE(40, MOVE_POISON_JAB), + LEVEL_UP_MOVE(48, MOVE_BRUTAL_SWING), + LEVEL_UP_MOVE(56, MOVE_CRUNCH), + LEVEL_UP_MOVE(64, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(72, MOVE_GIGA_IMPACT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sMunkidoriLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT), + LEVEL_UP_MOVE( 1, MOVE_FLATTER), + LEVEL_UP_MOVE( 8, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(16, MOVE_PSYBEAM), + LEVEL_UP_MOVE(24, MOVE_CLEAR_SMOG), + LEVEL_UP_MOVE(32, MOVE_POISON_JAB), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC), + LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE), + LEVEL_UP_MOVE(56, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(72, MOVE_PARTING_SHOT), + LEVEL_UP_END +}; + +static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE), + LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(16, MOVE_ATTRACT), + LEVEL_UP_MOVE(24, MOVE_WING_ATTACK), + 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(64, MOVE_ROOST), + LEVEL_UP_MOVE(72, MOVE_MOONBLAST), + LEVEL_UP_END +}; + +static const struct LevelUpMove sOgerponLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(12, MOVE_GROWTH), + LEVEL_UP_MOVE(18, MOVE_SLAM), + LEVEL_UP_MOVE(24, MOVE_LOW_SWEEP), + LEVEL_UP_MOVE(30, MOVE_IVY_CUDGEL), + LEVEL_UP_MOVE(36, MOVE_THROAT_CHOP), + LEVEL_UP_MOVE(42, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(48, MOVE_SPIKY_SHIELD), + LEVEL_UP_MOVE(54, MOVE_POWER_WHIP), + LEVEL_UP_MOVE(60, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER), + LEVEL_UP_END +}; + +#endif diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 56af95f1b7..a8bca961a3 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -10881,4 +10881,1349 @@ const struct PokedexEntry gPokedexEntries[] = .trainerOffset = 1, }, #endif +#if P_GEN_9_POKEMON == TRUE + [NATIONAL_DEX_SPRIGATITO] = + { + .description = gSprigatitoPokedexText, + .categoryName = _("Grass Cat"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 41, + }, + + [NATIONAL_DEX_FLORAGATO] = + { + .description = gFloragatoPokedexText, + .categoryName = _("Grass Cat"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 9, + .weight = 122, + }, + + [NATIONAL_DEX_MEOWSCARADA] = + { + .description = gMeowscaradaPokedexText, + .categoryName = _("Magician"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 312, + }, + + [NATIONAL_DEX_FUECOCO] = + { + .description = gFuecocoPokedexText, + .categoryName = _("Fire Croc"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 98, + }, + + [NATIONAL_DEX_CROCALOR] = + { + .description = gCrocalorPokedexText, + .categoryName = _("Fire Croc"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 307, + }, + + [NATIONAL_DEX_SKELEDIRGE] = + { + .description = gSkeledirgePokedexText, + .categoryName = _("Singer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 16, + .weight = 3265, + }, + + [NATIONAL_DEX_QUAXLY] = + { + .description = gQuaxlyPokedexText, + .categoryName = _("Duckling"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 5, + .weight = 61, + }, + + [NATIONAL_DEX_QUAXWELL] = + { + .description = gQuaxwellPokedexText, + .categoryName = _("Practicing"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 215, + }, + + [NATIONAL_DEX_QUAQUAVAL] = + { + .description = gQuaquavalPokedexText, + .categoryName = _("Dancer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 18, + .weight = 619, + }, + + [NATIONAL_DEX_LECHONK] = + { + .description = gLechonkPokedexText, + .categoryName = _("Hog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 5, + .weight = 102, + }, + + [NATIONAL_DEX_OINKOLOGNE] = + { + .description = gOinkolognePokedexText, + .categoryName = _("Hog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 1200, + }, + + [NATIONAL_DEX_TAROUNTULA] = + { + .description = gTarountulaPokedexText, + .categoryName = _("String Ball"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 40, + }, + + [NATIONAL_DEX_SPIDOPS] = + { + .description = gSpidopsPokedexText, + .categoryName = _("Trap"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 165, + }, + + [NATIONAL_DEX_NYMBLE] = + { + .description = gNymblePokedexText, + .categoryName = _("Grasshopper"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 2, + .weight = 10, + }, + + [NATIONAL_DEX_LOKIX] = + { + .description = gLokixPokedexText, + .categoryName = _("Grasshopper"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 175, + }, + + [NATIONAL_DEX_PAWMI] = + { + .description = gPawmiPokedexText, + .categoryName = _("Mouse"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 25, + }, + + [NATIONAL_DEX_PAWMO] = + { + .description = gPawmoPokedexText, + .categoryName = _("Mouse"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 65, + }, + + [NATIONAL_DEX_PAWMOT] = + { + .description = gPawmotPokedexText, + .categoryName = _("Hands-On"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 9, + .weight = 410, + }, + + [NATIONAL_DEX_TANDEMAUS] = + { + .description = gTandemausPokedexText, + .categoryName = _("Couple"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 18, + }, + + [NATIONAL_DEX_MAUSHOLD] = + { + .description = gMausholdPokedexText, + .categoryName = _("Family"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 28, + }, + + [NATIONAL_DEX_FIDOUGH] = + { + .description = gFidoughPokedexText, + .categoryName = _("Puppy"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 109, + }, + + [NATIONAL_DEX_DACHSBUN] = + { + .description = gDachsbunPokedexText, + .categoryName = _("Dog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 5, + .weight = 149, + }, + + [NATIONAL_DEX_SMOLIV] = + { + .description = gSmolivPokedexText, + .categoryName = _("Olive"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 65, + }, + + [NATIONAL_DEX_DOLLIV] = + { + .description = gDollivPokedexText, + .categoryName = _("Olive"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 119, + }, + + [NATIONAL_DEX_ARBOLIVA] = + { + .description = gArbolivaPokedexText, + .categoryName = _("Olive"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 14, + .weight = 482, + }, + + [NATIONAL_DEX_SQUAWKABILLY] = + { + .description = gSquawkabillyPokedexText, + .categoryName = _("Parrot"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 24, + }, + + [NATIONAL_DEX_NACLI] = + { + .description = gNacliPokedexText, + .categoryName = _("Rock Salt"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 160, + }, + + [NATIONAL_DEX_NACLSTACK] = + { + .description = gNaclstackPokedexText, + .categoryName = _("Rock Salt"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 1050, + }, + + [NATIONAL_DEX_GARGANACL] = + { + .description = gGarganaclPokedexText, + .categoryName = _("Rock Salt"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 23, + .weight = 2400, + }, + + [NATIONAL_DEX_CHARCADET] = + { + .description = gCharcadetPokedexText, + .categoryName = _("Fire Child"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 105, + }, + + [NATIONAL_DEX_ARMAROUGE] = + { + .description = gArmarougePokedexText, + .categoryName = _("Fire Warrior"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 850, + }, + + [NATIONAL_DEX_CERULEDGE] = + { + .description = gCeruledgePokedexText, + .categoryName = _("Fire Blades"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 16, + .weight = 620, + }, + + [NATIONAL_DEX_TADBULB] = + { + .description = gTadbulbPokedexText, + .categoryName = _("EleTadpole"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 4, + }, + + [NATIONAL_DEX_BELLIBOLT] = + { + .description = gBelliboltPokedexText, + .categoryName = _("EleFrog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 1130, + }, + + [NATIONAL_DEX_WATTREL] = + { + .description = gWattrelPokedexText, + .categoryName = _("Storm Petrel"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 36, + }, + + [NATIONAL_DEX_KILOWATTREL] = + { + .description = gKilowattrelPokedexText, + .categoryName = _("Frigatebird"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 14, + .weight = 386, + }, + + [NATIONAL_DEX_MASCHIFF] = + { + .description = gMaschiffPokedexText, + .categoryName = _("Rascal"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 5, + .weight = 160, + }, + + [NATIONAL_DEX_MABOSSTIFF] = + { + .description = gMabosstiffPokedexText, + .categoryName = _("Boss"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 11, + .weight = 610, + }, + + [NATIONAL_DEX_SHROODLE] = + { + .description = gShroodlePokedexText, + .categoryName = _("Toxic Mouse"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 2, + .weight = 7, + }, + + [NATIONAL_DEX_GRAFAIAI] = + { + .description = gGrafaiaiPokedexText, + .categoryName = _("Toxic Monkey"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 7, + .weight = 272, + }, + + [NATIONAL_DEX_BRAMBLIN] = + { + .description = gBramblinPokedexText, + .categoryName = _("Tumbleweed"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 6, + }, + + [NATIONAL_DEX_BRAMBLEGHAST] = + { + .description = gBrambleghastPokedexText, + .categoryName = _("Tumbleweed"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 60, + }, + + [NATIONAL_DEX_TOEDSCOOL] = + { + .description = gToedscoolPokedexText, + .categoryName = _("Woodear"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 9, + .weight = 330, + }, + + [NATIONAL_DEX_TOEDSCRUEL] = + { + .description = gToedscruelPokedexText, + .categoryName = _("Woodear"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 19, + .weight = 580, + }, + + [NATIONAL_DEX_KLAWF] = + { + .description = gKlawfPokedexText, + .categoryName = _("Ambush"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 13, + .weight = 790, + }, + + [NATIONAL_DEX_CAPSAKID] = + { + .description = gCapsakidPokedexText, + .categoryName = _("Spicy Pepper"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 30, + }, + + [NATIONAL_DEX_SCOVILLAIN] = + { + .description = gScovillainPokedexText, + .categoryName = _("Spicy Pepper"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 9, + .weight = 150, + }, + + [NATIONAL_DEX_RELLOR] = + { + .description = gRellorPokedexText, + .categoryName = _("Rolling"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 2, + .weight = 10, + }, + + [NATIONAL_DEX_RABSCA] = + { + .description = gRabscaPokedexText, + .categoryName = _("Rolling"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 35, + }, + + [NATIONAL_DEX_FLITTLE] = + { + .description = gFlittlePokedexText, + .categoryName = _("Frill"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 2, + .weight = 15, + }, + + [NATIONAL_DEX_ESPATHRA] = + { + .description = gEspathraPokedexText, + .categoryName = _("Ostrich"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 19, + .weight = 900, + }, + + [NATIONAL_DEX_TINKATINK] = + { + .description = gTinkatinkPokedexText, + .categoryName = _("Metalsmith"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 89, + }, + + [NATIONAL_DEX_TINKATUFF] = + { + .description = gTinkatuffPokedexText, + .categoryName = _("Hammer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 7, + .weight = 591, + }, + + [NATIONAL_DEX_TINKATON] = + { + .description = gTinkatonPokedexText, + .categoryName = _("Hammer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 7, + .weight = 1128, + }, + + [NATIONAL_DEX_WIGLETT] = + { + .description = gWiglettPokedexText, + .categoryName = _("Garden Eel"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 18, + }, + + [NATIONAL_DEX_WUGTRIO] = + { + .description = gWugtrioPokedexText, + .categoryName = _("Garden Eel"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 54, + }, + + [NATIONAL_DEX_BOMBIRDIER] = + { + .description = gBombirdierPokedexText, + .categoryName = _("Item Drop"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 429, + }, + + [NATIONAL_DEX_FINIZEN] = + { + .description = gFinizenPokedexText, + .categoryName = _("Dolphin"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 13, + .weight = 602, + }, + + [NATIONAL_DEX_PALAFIN] = + { + .description = gPalafinPokedexText, + .categoryName = _("Dolphin"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 13, + .weight = 602, + }, + + [NATIONAL_DEX_VAROOM] = + { + .description = gVaroomPokedexText, + .categoryName = _("Single-Cyl"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 350, + }, + + [NATIONAL_DEX_REVAVROOM] = + { + .description = gRevavroomPokedexText, + .categoryName = _("Multi-Cyl"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 18, + .weight = 1200, + }, + + [NATIONAL_DEX_CYCLIZAR] = + { + .description = gCyclizarPokedexText, + .categoryName = _("Mount"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 16, + .weight = 630, + }, + + [NATIONAL_DEX_ORTHWORM] = + { + .description = gOrthwormPokedexText, + .categoryName = _("Earthworm"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 25, + .weight = 3100, + }, + + [NATIONAL_DEX_GLIMMET] = + { + .description = gGlimmetPokedexText, + .categoryName = _("Ore"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 7, + .weight = 80, + }, + + [NATIONAL_DEX_GLIMMORA] = + { + .description = gGlimmoraPokedexText, + .categoryName = _("Ore"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 450, + }, + + [NATIONAL_DEX_GREAVARD] = + { + .description = gGreavardPokedexText, + .categoryName = _("Ghost Dog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 350, + }, + + [NATIONAL_DEX_HOUNDSTONE] = + { + .description = gHoundstonePokedexText, + .categoryName = _("Ghost Dog"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 20, + .weight = 150, + }, + + [NATIONAL_DEX_FLAMIGO] = + { + .description = gFlamigoPokedexText, + .categoryName = _("Synchronize"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 16, + .weight = 370, + }, + + [NATIONAL_DEX_CETODDLE] = + { + .description = gCetoddlePokedexText, + .categoryName = _("Terra Whale"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 450, + }, + + [NATIONAL_DEX_CETITAN] = + { + .description = gCetitanPokedexText, + .categoryName = _("Terra Whale"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 45, + .weight = 7000, + }, + + [NATIONAL_DEX_VELUZA] = + { + .description = gVeluzaPokedexText, + .categoryName = _("Jettison"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 25, + .weight = 900, + }, + + [NATIONAL_DEX_DONDOZO] = + { + .description = gDondozoPokedexText, + .categoryName = _("Big Catfish"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 120, + .weight = 2200, + }, + + [NATIONAL_DEX_TATSUGIRI] = + { + .description = gTatsugiriPokedexText, + .categoryName = _("Mimicry"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 80, + }, + + [NATIONAL_DEX_ANNIHILAPE] = + { + .description = gAnnihilapePokedexText, + .categoryName = _("Rage Monkey"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 560, + }, + + [NATIONAL_DEX_CLODSIRE] = + { + .description = gClodsirePokedexText, + .categoryName = _("Spiny Fish"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 18, + .weight = 2230, + }, + + [NATIONAL_DEX_FARIGIRAF] = + { + .description = gFarigirafPokedexText, + .categoryName = _("Long Neck"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 32, + .weight = 1600, + }, + + [NATIONAL_DEX_DUDUNSPARCE] = + { + .description = gDudunsparcePokedexText, + .categoryName = _("Land Snake"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 36, + .weight = 392, + }, + + [NATIONAL_DEX_KINGAMBIT] = + { + .description = gKingambitPokedexText, + .categoryName = _("Big Blade"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 20, + .weight = 1200, + }, + + [NATIONAL_DEX_GREAT_TUSK] = + { + .description = gGreatTuskPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 22, + .weight = 3200, + }, + + [NATIONAL_DEX_SCREAM_TAIL] = + { + .description = gScreamTailPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 80, + }, + + [NATIONAL_DEX_BRUTE_BONNET] = + { + .description = gBruteBonnetPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 210, + }, + + [NATIONAL_DEX_FLUTTER_MANE] = + { + .description = gFlutterManePokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 14, + .weight = 40, + }, + + [NATIONAL_DEX_SLITHER_WING] = + { + .description = gSlitherWingPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 32, + .weight = 920, + }, + + [NATIONAL_DEX_SANDY_SHOCKS] = + { + .description = gSandyShocksPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 23, + .weight = 600, + }, + + [NATIONAL_DEX_IRON_TREADS] = + { + .description = gIronTreadsPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 9, + .weight = 2400, + }, + + [NATIONAL_DEX_IRON_BUNDLE] = + { + .description = gIronBundlePokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 6, + .weight = 110, + }, + + [NATIONAL_DEX_IRON_HANDS] = + { + .description = gIronHandsPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 18, + .weight = 3807, + }, + + [NATIONAL_DEX_IRON_JUGULIS] = + { + .description = gIronJugulisPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 13, + .weight = 1110, + }, + + [NATIONAL_DEX_IRON_MOTH] = + { + .description = gIronMothPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 360, + }, + + [NATIONAL_DEX_IRON_THORNS] = + { + .description = gIronThornsPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 16, + .weight = 3030, + }, + + [NATIONAL_DEX_FRIGIBAX] = + { + .description = gFrigibaxPokedexText, + .categoryName = _("Ice Fin"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 5, + .weight = 170, + }, + + [NATIONAL_DEX_ARCTIBAX] = + { + .description = gArctibaxPokedexText, + .categoryName = _("Ice Fin"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 8, + .weight = 300, + }, + + [NATIONAL_DEX_BAXCALIBUR] = + { + .description = gBaxcaliburPokedexText, + .categoryName = _("Ice Dragon"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 21, + .weight = 2100, + }, + + [NATIONAL_DEX_GIMMIGHOUL] = + { + .description = gGimmighoulPokedexText, + .categoryName = _("Coin Chest"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 3, + .weight = 50, + }, + + [NATIONAL_DEX_GHOLDENGO] = + { + .description = gGholdengoPokedexText, + .categoryName = _("Coin Entity"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 300, + }, + + [NATIONAL_DEX_WO_CHIEN] = + { + .description = gWoChienPokedexText, + .categoryName = _("Ruinous"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 742, + }, + + [NATIONAL_DEX_CHIEN_PAO] = + { + .description = gChienPaoPokedexText, + .categoryName = _("Ruinous"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 19, + .weight = 1522, + }, + + [NATIONAL_DEX_TING_LU] = + { + .description = gTingLuPokedexText, + .categoryName = _("Ruinous"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 27, + .weight = 6997, + }, + + [NATIONAL_DEX_CHI_YU] = + { + .description = gChiYuPokedexText, + .categoryName = _("Ruinous"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 49, + }, + + [NATIONAL_DEX_ROARING_MOON] = + { + .description = gRoaringMoonPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 20, + .weight = 3800, + }, + + [NATIONAL_DEX_IRON_VALIANT] = + { + .description = gIronValiantPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 14, + .weight = 350, + }, + + [NATIONAL_DEX_KORAIDON] = + { + .description = gKoraidonPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 25, + .weight = 3030, + }, + + [NATIONAL_DEX_MIRAIDON] = + { + .description = gMiraidonPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 35, + .weight = 2400, + }, + + [NATIONAL_DEX_WALKING_WAKE] = + { + .description = gWalkingWakePokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 35, + .weight = 2800, + }, + + [NATIONAL_DEX_IRON_LEAVES] = + { + .description = gIronLeavesPokedexText, + .categoryName = _("Paradox"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 15, + .weight = 1250, + }, + + [NATIONAL_DEX_DIPPLIN] = + { + .description = gDipplinPokedexText, + .categoryName = _("Candy Apple"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 4, + .weight = 44, + }, + + [NATIONAL_DEX_POLTCHAGEIST] = + { + .description = gPoltchageistPokedexText, + .categoryName = _("Matcha"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 1, + .weight = 11, + }, + + [NATIONAL_DEX_SINISTCHA] = + { + .description = gSinistchaPokedexText, + .categoryName = _("Matcha"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 2, + .weight = 22, + }, + + [NATIONAL_DEX_OKIDOGI] = + { + .description = gOkidogiPokedexText, + .categoryName = _("Retainer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 18, + .weight = 920, + }, + + [NATIONAL_DEX_MUNKIDORI] = + { + .description = gMunkidoriPokedexText, + .categoryName = _("Retainer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 10, + .weight = 122, + }, + + [NATIONAL_DEX_FEZANDIPITI] = + { + .description = gFezandipitiPokedexText, + .categoryName = _("Retainer"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 14, + .weight = 301, + }, + + [NATIONAL_DEX_OGERPON] = + { + .description = gOgerponPokedexText, + .categoryName = _("Mask"), + .pokemonScale = 356, + .pokemonOffset = 17, + .trainerScale = 256, + .trainerOffset = 0, + .height = 12, + .weight = 398, + }, +#endif }; diff --git a/src/data/pokemon/pokedex_orders.h b/src/data/pokemon/pokedex_orders.h index e1d8cc4792..e877bbb17f 100644 --- a/src/data/pokemon/pokedex_orders.h +++ b/src/data/pokemon/pokedex_orders.h @@ -1,3 +1,4 @@ +// Only list base species here. const u16 gPokedexOrder_Alphabetical[] = { NATIONAL_DEX_ABOMASNOW, @@ -16,19 +17,23 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_AMBIPOM, NATIONAL_DEX_AMOONGUSS, NATIONAL_DEX_AMPHAROS, + NATIONAL_DEX_ANNIHILAPE, NATIONAL_DEX_ANORITH, NATIONAL_DEX_APPLETUN, NATIONAL_DEX_APPLIN, NATIONAL_DEX_ARAQUANID, NATIONAL_DEX_ARBOK, + NATIONAL_DEX_ARBOLIVA, NATIONAL_DEX_ARCANINE, NATIONAL_DEX_ARCEUS, NATIONAL_DEX_ARCHEN, NATIONAL_DEX_ARCHEOPS, + NATIONAL_DEX_ARCTIBAX, NATIONAL_DEX_ARCTOVISH, NATIONAL_DEX_ARCTOZOLT, NATIONAL_DEX_ARIADOS, NATIONAL_DEX_ARMALDO, + NATIONAL_DEX_ARMAROUGE, NATIONAL_DEX_AROMATISSE, NATIONAL_DEX_ARON, NATIONAL_DEX_ARROKUDA, @@ -50,12 +55,14 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_BASCULEGION, NATIONAL_DEX_BASCULIN, NATIONAL_DEX_BASTIODON, + NATIONAL_DEX_BAXCALIBUR, NATIONAL_DEX_BAYLEEF, NATIONAL_DEX_BEARTIC, NATIONAL_DEX_BEAUTIFLY, NATIONAL_DEX_BEEDRILL, NATIONAL_DEX_BEHEEYEM, NATIONAL_DEX_BELDUM, + NATIONAL_DEX_BELLIBOLT, NATIONAL_DEX_BELLOSSOM, NATIONAL_DEX_BELLSPROUT, NATIONAL_DEX_BERGMITE, @@ -72,15 +79,19 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_BLITZLE, NATIONAL_DEX_BOLDORE, NATIONAL_DEX_BOLTUND, + NATIONAL_DEX_BOMBIRDIER, NATIONAL_DEX_BONSLY, NATIONAL_DEX_BOUFFALANT, NATIONAL_DEX_BOUNSWEET, NATIONAL_DEX_BRAIXEN, + NATIONAL_DEX_BRAMBLEGHAST, + NATIONAL_DEX_BRAMBLIN, NATIONAL_DEX_BRAVIARY, NATIONAL_DEX_BRELOOM, NATIONAL_DEX_BRIONNE, NATIONAL_DEX_BRONZONG, NATIONAL_DEX_BRONZOR, + NATIONAL_DEX_BRUTE_BONNET, NATIONAL_DEX_BRUXISH, NATIONAL_DEX_BUDEW, NATIONAL_DEX_BUIZEL, @@ -95,6 +106,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CACTURNE, NATIONAL_DEX_CALYREX, NATIONAL_DEX_CAMERUPT, + NATIONAL_DEX_CAPSAKID, NATIONAL_DEX_CARBINK, NATIONAL_DEX_CARKOL, NATIONAL_DEX_CARNIVINE, @@ -106,8 +118,12 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CELEBI, NATIONAL_DEX_CELESTEELA, NATIONAL_DEX_CENTISKORCH, + NATIONAL_DEX_CERULEDGE, + NATIONAL_DEX_CETITAN, + NATIONAL_DEX_CETODDLE, NATIONAL_DEX_CHANDELURE, NATIONAL_DEX_CHANSEY, + NATIONAL_DEX_CHARCADET, NATIONAL_DEX_CHARIZARD, NATIONAL_DEX_CHARJABUG, NATIONAL_DEX_CHARMANDER, @@ -118,6 +134,8 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CHESNAUGHT, NATIONAL_DEX_CHESPIN, NATIONAL_DEX_CHEWTLE, + NATIONAL_DEX_CHI_YU, + NATIONAL_DEX_CHIEN_PAO, NATIONAL_DEX_CHIKORITA, NATIONAL_DEX_CHIMCHAR, NATIONAL_DEX_CHIMECHO, @@ -133,6 +151,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CLEFAIRY, NATIONAL_DEX_CLEFFA, NATIONAL_DEX_CLOBBOPUS, + NATIONAL_DEX_CLODSIRE, NATIONAL_DEX_CLOYSTER, NATIONAL_DEX_COALOSSAL, NATIONAL_DEX_COBALION, @@ -158,6 +177,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CRESSELIA, NATIONAL_DEX_CROAGUNK, NATIONAL_DEX_CROBAT, + NATIONAL_DEX_CROCALOR, NATIONAL_DEX_CROCONAW, NATIONAL_DEX_CRUSTLE, NATIONAL_DEX_CRYOGONAL, @@ -166,8 +186,10 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_CUFANT, NATIONAL_DEX_CURSOLA, NATIONAL_DEX_CUTIEFLY, + NATIONAL_DEX_CYCLIZAR, NATIONAL_DEX_CYNDAQUIL, + NATIONAL_DEX_DACHSBUN, NATIONAL_DEX_DARKRAI, NATIONAL_DEX_DARMANITAN, NATIONAL_DEX_DARTRIX, @@ -188,9 +210,12 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_DIANCIE, NATIONAL_DEX_DIGGERSBY, NATIONAL_DEX_DIGLETT, + NATIONAL_DEX_DIPPLIN, NATIONAL_DEX_DITTO, NATIONAL_DEX_DODRIO, NATIONAL_DEX_DODUO, + NATIONAL_DEX_DOLLIV, + NATIONAL_DEX_DONDOZO, NATIONAL_DEX_DONPHAN, NATIONAL_DEX_DOTTLER, NATIONAL_DEX_DOUBLADE, @@ -214,6 +239,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_DRUDDIGON, NATIONAL_DEX_DUBWOOL, NATIONAL_DEX_DUCKLETT, + NATIONAL_DEX_DUDUNSPARCE, NATIONAL_DEX_DUGTRIO, NATIONAL_DEX_DUNSPARCE, NATIONAL_DEX_DUOSION, @@ -243,6 +269,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_ENAMORUS, NATIONAL_DEX_ENTEI, NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_ESPATHRA, NATIONAL_DEX_ESPEON, NATIONAL_DEX_ESPURR, NATIONAL_DEX_ETERNATUS, @@ -253,32 +280,42 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_FALINKS, NATIONAL_DEX_FARFETCHD, + NATIONAL_DEX_FARIGIRAF, NATIONAL_DEX_FEAROW, NATIONAL_DEX_FEEBAS, NATIONAL_DEX_FENNEKIN, NATIONAL_DEX_FERALIGATR, NATIONAL_DEX_FERROSEED, NATIONAL_DEX_FERROTHORN, + NATIONAL_DEX_FEZANDIPITI, + NATIONAL_DEX_FIDOUGH, + NATIONAL_DEX_FINIZEN, NATIONAL_DEX_FINNEON, NATIONAL_DEX_FLAAFFY, NATIONAL_DEX_FLABEBE, + NATIONAL_DEX_FLAMIGO, NATIONAL_DEX_FLAPPLE, NATIONAL_DEX_FLAREON, NATIONAL_DEX_FLETCHINDER, NATIONAL_DEX_FLETCHLING, + NATIONAL_DEX_FLITTLE, NATIONAL_DEX_FLOATZEL, NATIONAL_DEX_FLOETTE, + NATIONAL_DEX_FLORAGATO, NATIONAL_DEX_FLORGES, + NATIONAL_DEX_FLUTTER_MANE, NATIONAL_DEX_FLYGON, NATIONAL_DEX_FOMANTIS, NATIONAL_DEX_FOONGUS, NATIONAL_DEX_FORRETRESS, NATIONAL_DEX_FRAXURE, + NATIONAL_DEX_FRIGIBAX, NATIONAL_DEX_FRILLISH, NATIONAL_DEX_FROAKIE, NATIONAL_DEX_FROGADIER, NATIONAL_DEX_FROSLASS, NATIONAL_DEX_FROSMOTH, + NATIONAL_DEX_FUECOCO, NATIONAL_DEX_FURFROU, NATIONAL_DEX_FURRET, @@ -288,13 +325,16 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_GARBODOR, NATIONAL_DEX_GARCHOMP, NATIONAL_DEX_GARDEVOIR, + NATIONAL_DEX_GARGANACL, NATIONAL_DEX_GASTLY, NATIONAL_DEX_GASTRODON, NATIONAL_DEX_GENESECT, NATIONAL_DEX_GENGAR, NATIONAL_DEX_GEODUDE, + NATIONAL_DEX_GHOLDENGO, NATIONAL_DEX_GIBLE, NATIONAL_DEX_GIGALITH, + NATIONAL_DEX_GIMMIGHOUL, NATIONAL_DEX_GIRAFARIG, NATIONAL_DEX_GIRATINA, NATIONAL_DEX_GLACEON, @@ -302,6 +342,8 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_GLAMEOW, NATIONAL_DEX_GLASTRIER, NATIONAL_DEX_GLIGAR, + NATIONAL_DEX_GLIMMET, + NATIONAL_DEX_GLIMMORA, NATIONAL_DEX_GLISCOR, NATIONAL_DEX_GLOOM, NATIONAL_DEX_GOGOAT, @@ -320,9 +362,12 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_GOTHITELLE, NATIONAL_DEX_GOTHORITA, NATIONAL_DEX_GOURGEIST, + NATIONAL_DEX_GRAFAIAI, NATIONAL_DEX_GRANBULL, NATIONAL_DEX_GRAPPLOCT, NATIONAL_DEX_GRAVELER, + NATIONAL_DEX_GREAT_TUSK, + NATIONAL_DEX_GREAVARD, NATIONAL_DEX_GREEDENT, NATIONAL_DEX_GRENINJA, NATIONAL_DEX_GRIMER, @@ -369,6 +414,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_HORSEA, NATIONAL_DEX_HOUNDOOM, NATIONAL_DEX_HOUNDOUR, + NATIONAL_DEX_HOUNDSTONE, NATIONAL_DEX_HUNTAIL, NATIONAL_DEX_HYDREIGON, NATIONAL_DEX_HYPNO, @@ -381,6 +427,14 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_INFERNAPE, NATIONAL_DEX_INKAY, NATIONAL_DEX_INTELEON, + NATIONAL_DEX_IRON_BUNDLE, + NATIONAL_DEX_IRON_HANDS, + NATIONAL_DEX_IRON_JUGULIS, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_MOTH, + NATIONAL_DEX_IRON_THORNS, + NATIONAL_DEX_IRON_TREADS, + NATIONAL_DEX_IRON_VALIANT, NATIONAL_DEX_IVYSAUR, NATIONAL_DEX_JANGMO_O, @@ -401,10 +455,13 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_KARTANA, NATIONAL_DEX_KECLEON, NATIONAL_DEX_KELDEO, + NATIONAL_DEX_KILOWATTREL, + NATIONAL_DEX_KINGAMBIT, NATIONAL_DEX_KINGDRA, NATIONAL_DEX_KINGLER, NATIONAL_DEX_KIRLIA, NATIONAL_DEX_KLANG, + NATIONAL_DEX_KLAWF, NATIONAL_DEX_KLEAVOR, NATIONAL_DEX_KLEFKI, NATIONAL_DEX_KLINK, @@ -412,6 +469,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_KOFFING, NATIONAL_DEX_KOMALA, NATIONAL_DEX_KOMMO_O, + NATIONAL_DEX_KORAIDON, NATIONAL_DEX_KRABBY, NATIONAL_DEX_KRICKETOT, NATIONAL_DEX_KRICKETUNE, @@ -432,6 +490,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_LATIOS, NATIONAL_DEX_LEAFEON, NATIONAL_DEX_LEAVANNY, + NATIONAL_DEX_LECHONK, NATIONAL_DEX_LEDIAN, NATIONAL_DEX_LEDYBA, NATIONAL_DEX_LICKILICKY, @@ -444,6 +503,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_LITLEO, NATIONAL_DEX_LITTEN, NATIONAL_DEX_LITWICK, + NATIONAL_DEX_LOKIX, NATIONAL_DEX_LOMBRE, NATIONAL_DEX_LOPUNNY, NATIONAL_DEX_LOTAD, @@ -460,6 +520,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_LUXRAY, NATIONAL_DEX_LYCANROC, + NATIONAL_DEX_MABOSSTIFF, NATIONAL_DEX_MACHAMP, NATIONAL_DEX_MACHOKE, NATIONAL_DEX_MACHOP, @@ -488,7 +549,9 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_MAROWAK, NATIONAL_DEX_MARSHADOW, NATIONAL_DEX_MARSHTOMP, + NATIONAL_DEX_MASCHIFF, NATIONAL_DEX_MASQUERAIN, + NATIONAL_DEX_MAUSHOLD, NATIONAL_DEX_MAWILE, NATIONAL_DEX_MEDICHAM, NATIONAL_DEX_MEDITITE, @@ -496,6 +559,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_MELMETAL, NATIONAL_DEX_MELOETTA, NATIONAL_DEX_MELTAN, + NATIONAL_DEX_MEOWSCARADA, NATIONAL_DEX_MEOWSTIC, NATIONAL_DEX_MEOWTH, NATIONAL_DEX_MESPRIT, @@ -515,6 +579,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_MINCCINO, NATIONAL_DEX_MINIOR, NATIONAL_DEX_MINUN, + NATIONAL_DEX_MIRAIDON, NATIONAL_DEX_MISDREAVUS, NATIONAL_DEX_MISMAGIUS, NATIONAL_DEX_MOLTRES, @@ -530,10 +595,13 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_MUDSDALE, NATIONAL_DEX_MUK, NATIONAL_DEX_MUNCHLAX, + NATIONAL_DEX_MUNKIDORI, NATIONAL_DEX_MUNNA, NATIONAL_DEX_MURKROW, NATIONAL_DEX_MUSHARNA, + NATIONAL_DEX_NACLI, + NATIONAL_DEX_NACLSTACK, NATIONAL_DEX_NAGANADEL, NATIONAL_DEX_NATU, NATIONAL_DEX_NECROZMA, @@ -554,20 +622,26 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_NOSEPASS, NATIONAL_DEX_NUMEL, NATIONAL_DEX_NUZLEAF, + NATIONAL_DEX_NYMBLE, NATIONAL_DEX_OBSTAGOON, NATIONAL_DEX_OCTILLERY, NATIONAL_DEX_ODDISH, + NATIONAL_DEX_OGERPON, + NATIONAL_DEX_OINKOLOGNE, + NATIONAL_DEX_OKIDOGI, NATIONAL_DEX_OMANYTE, NATIONAL_DEX_OMASTAR, NATIONAL_DEX_ONIX, NATIONAL_DEX_ORANGURU, NATIONAL_DEX_ORBEETLE, NATIONAL_DEX_ORICORIO, + NATIONAL_DEX_ORTHWORM, NATIONAL_DEX_OSHAWOTT, NATIONAL_DEX_OVERQWIL, NATIONAL_DEX_PACHIRISU, + NATIONAL_DEX_PALAFIN, NATIONAL_DEX_PALKIA, NATIONAL_DEX_PALOSSAND, NATIONAL_DEX_PALPITOAD, @@ -580,6 +654,9 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_PARASECT, NATIONAL_DEX_PASSIMIAN, NATIONAL_DEX_PATRAT, + NATIONAL_DEX_PAWMI, + NATIONAL_DEX_PAWMO, + NATIONAL_DEX_PAWMOT, NATIONAL_DEX_PAWNIARD, NATIONAL_DEX_PELIPPER, NATIONAL_DEX_PERRSERKER, @@ -608,6 +685,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_POLIWAG, NATIONAL_DEX_POLIWHIRL, NATIONAL_DEX_POLIWRATH, + NATIONAL_DEX_POLTCHAGEIST, NATIONAL_DEX_POLTEAGEIST, NATIONAL_DEX_PONYTA, NATIONAL_DEX_POOCHYENA, @@ -628,11 +706,15 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_PYUKUMUKU, NATIONAL_DEX_QUAGSIRE, + NATIONAL_DEX_QUAQUAVAL, + NATIONAL_DEX_QUAXLY, + NATIONAL_DEX_QUAXWELL, NATIONAL_DEX_QUILAVA, NATIONAL_DEX_QUILLADIN, NATIONAL_DEX_QWILFISH, NATIONAL_DEX_RABOOT, + NATIONAL_DEX_RABSCA, NATIONAL_DEX_RAICHU, NATIONAL_DEX_RAIKOU, NATIONAL_DEX_RALTS, @@ -648,15 +730,18 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_REGIROCK, NATIONAL_DEX_REGISTEEL, NATIONAL_DEX_RELICANTH, + NATIONAL_DEX_RELLOR, NATIONAL_DEX_REMORAID, NATIONAL_DEX_RESHIRAM, NATIONAL_DEX_REUNICLUS, + NATIONAL_DEX_REVAVROOM, NATIONAL_DEX_RHYDON, NATIONAL_DEX_RHYHORN, NATIONAL_DEX_RHYPERIOR, NATIONAL_DEX_RIBOMBEE, NATIONAL_DEX_RILLABOOM, NATIONAL_DEX_RIOLU, + NATIONAL_DEX_ROARING_MOON, NATIONAL_DEX_ROCKRUFF, NATIONAL_DEX_ROGGENROLA, NATIONAL_DEX_ROLYCOLY, @@ -677,6 +762,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SANDILE, NATIONAL_DEX_SANDSHREW, NATIONAL_DEX_SANDSLASH, + NATIONAL_DEX_SANDY_SHOCKS, NATIONAL_DEX_SANDYGAST, NATIONAL_DEX_SAWK, NATIONAL_DEX_SAWSBUCK, @@ -685,8 +771,10 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SCIZOR, NATIONAL_DEX_SCOLIPEDE, NATIONAL_DEX_SCORBUNNY, + NATIONAL_DEX_SCOVILLAIN, NATIONAL_DEX_SCRAFTY, NATIONAL_DEX_SCRAGGY, + NATIONAL_DEX_SCREAM_TAIL, NATIONAL_DEX_SCYTHER, NATIONAL_DEX_SEADRA, NATIONAL_DEX_SEAKING, @@ -710,6 +798,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SHIFTRY, NATIONAL_DEX_SHIINOTIC, NATIONAL_DEX_SHINX, + NATIONAL_DEX_SHROODLE, NATIONAL_DEX_SHROOMISH, NATIONAL_DEX_SHUCKLE, NATIONAL_DEX_SHUPPET, @@ -720,10 +809,12 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SIMIPOUR, NATIONAL_DEX_SIMISAGE, NATIONAL_DEX_SIMISEAR, + NATIONAL_DEX_SINISTCHA, NATIONAL_DEX_SINISTEA, NATIONAL_DEX_SIRFETCHD, NATIONAL_DEX_SIZZLIPEDE, NATIONAL_DEX_SKARMORY, + NATIONAL_DEX_SKELEDIRGE, NATIONAL_DEX_SKIDDO, NATIONAL_DEX_SKIPLOOM, NATIONAL_DEX_SKITTY, @@ -734,12 +825,14 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SLAKING, NATIONAL_DEX_SLAKOTH, NATIONAL_DEX_SLIGGOO, + NATIONAL_DEX_SLITHER_WING, NATIONAL_DEX_SLOWBRO, NATIONAL_DEX_SLOWKING, NATIONAL_DEX_SLOWPOKE, NATIONAL_DEX_SLUGMA, NATIONAL_DEX_SLURPUFF, NATIONAL_DEX_SMEARGLE, + NATIONAL_DEX_SMOLIV, NATIONAL_DEX_SMOOCHUM, NATIONAL_DEX_SNEASEL, NATIONAL_DEX_SNEASLER, @@ -757,11 +850,14 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SPECTRIER, NATIONAL_DEX_SPEWPA, NATIONAL_DEX_SPHEAL, + NATIONAL_DEX_SPIDOPS, NATIONAL_DEX_SPINARAK, NATIONAL_DEX_SPINDA, NATIONAL_DEX_SPIRITOMB, NATIONAL_DEX_SPOINK, + NATIONAL_DEX_SPRIGATITO, NATIONAL_DEX_SPRITZEE, + NATIONAL_DEX_SQUAWKABILLY, NATIONAL_DEX_SQUIRTLE, NATIONAL_DEX_STAKATAKA, NATIONAL_DEX_STANTLER, @@ -793,14 +889,18 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_SWOOBAT, NATIONAL_DEX_SYLVEON, + NATIONAL_DEX_TADBULB, NATIONAL_DEX_TAILLOW, NATIONAL_DEX_TALONFLAME, + NATIONAL_DEX_TANDEMAUS, NATIONAL_DEX_TANGELA, NATIONAL_DEX_TANGROWTH, NATIONAL_DEX_TAPU_BULU, NATIONAL_DEX_TAPU_FINI, NATIONAL_DEX_TAPU_KOKO, NATIONAL_DEX_TAPU_LELE, + NATIONAL_DEX_TAROUNTULA, + NATIONAL_DEX_TATSUGIRI, NATIONAL_DEX_TAUROS, NATIONAL_DEX_TEDDIURSA, NATIONAL_DEX_TENTACOOL, @@ -812,7 +912,13 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_THUNDURUS, NATIONAL_DEX_THWACKEY, NATIONAL_DEX_TIMBURR, + NATIONAL_DEX_TING_LU, + NATIONAL_DEX_TINKATINK, + NATIONAL_DEX_TINKATON, + NATIONAL_DEX_TINKATUFF, NATIONAL_DEX_TIRTOUGA, + NATIONAL_DEX_TOEDSCOOL, + NATIONAL_DEX_TOEDSCRUEL, NATIONAL_DEX_TOGEDEMARU, NATIONAL_DEX_TOGEKISS, NATIONAL_DEX_TOGEPI, @@ -859,6 +965,8 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_VANILLITE, NATIONAL_DEX_VANILLUXE, NATIONAL_DEX_VAPOREON, + NATIONAL_DEX_VAROOM, + NATIONAL_DEX_VELUZA, NATIONAL_DEX_VENIPEDE, NATIONAL_DEX_VENOMOTH, NATIONAL_DEX_VENONAT, @@ -881,9 +989,11 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_WAILMER, NATIONAL_DEX_WAILORD, + NATIONAL_DEX_WALKING_WAKE, NATIONAL_DEX_WALREIN, NATIONAL_DEX_WARTORTLE, NATIONAL_DEX_WATCHOG, + NATIONAL_DEX_WATTREL, NATIONAL_DEX_WEAVILE, NATIONAL_DEX_WEEDLE, NATIONAL_DEX_WEEPINBELL, @@ -893,14 +1003,17 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_WHISCASH, NATIONAL_DEX_WHISMUR, NATIONAL_DEX_WIGGLYTUFF, + NATIONAL_DEX_WIGLETT, NATIONAL_DEX_WIMPOD, NATIONAL_DEX_WINGULL, NATIONAL_DEX_WISHIWASHI, + NATIONAL_DEX_WO_CHIEN, NATIONAL_DEX_WOBBUFFET, NATIONAL_DEX_WOOBAT, NATIONAL_DEX_WOOLOO, NATIONAL_DEX_WOOPER, NATIONAL_DEX_WORMADAM, + NATIONAL_DEX_WUGTRIO, NATIONAL_DEX_WURMPLE, NATIONAL_DEX_WYNAUT, NATIONAL_DEX_WYRDEER, @@ -937,36 +1050,69 @@ const u16 gPokedexOrder_Weight[] = // 0.0 - 21.8 lbs / 0.0 - 9.9 kg NATIONAL_DEX_GASTLY, NATIONAL_DEX_HAUNTER, - NATIONAL_DEX_FLABEBE, + NATIONAL_DEX_FLABEBE,//_RED_FLOWER, + //NATIONAL_DEX_FLABEBE_YELLOW_FLOWER, + //NATIONAL_DEX_FLABEBE_ORANGE_FLOWER, + //NATIONAL_DEX_FLABEBE_BLUE_FLOWER, + //NATIONAL_DEX_FLABEBE_WHITE_FLOWER, NATIONAL_DEX_COSMOG, NATIONAL_DEX_KARTANA, + //NATIONAL_DEX_GIMMIGHOUL_ROAMING, + // 0.4 lbs / 0.2 kg NATIONAL_DEX_CUTIEFLY, - NATIONAL_DEX_SINISTEA, + NATIONAL_DEX_SINISTEA,//_PHONY, + //NATIONAL_DEX_SINISTEA_ANTIQUE, + // 0.7 lbs / 0.3 kg NATIONAL_DEX_ROTOM, NATIONAL_DEX_UXIE, NATIONAL_DEX_MESPRIT, NATIONAL_DEX_AZELF, NATIONAL_DEX_TYNAMO, - NATIONAL_DEX_WISHIWASHI, // Solo Form + NATIONAL_DEX_WISHIWASHI,//_SOLO, NATIONAL_DEX_COMFEY, - //NATIONAL_DEX_MINIOR, // Core Form + NATIONAL_DEX_MINIOR,//_CORE_RED, + //NATIONAL_DEX_MINIOR_CORE_ORANGE, + //NATIONAL_DEX_MINIOR_CORE_YELLOW, + //NATIONAL_DEX_MINIOR_CORE_GREEN, + //NATIONAL_DEX_MINIOR_CORE_BLUE, + //NATIONAL_DEX_MINIOR_CORE_INDIGO, + //NATIONAL_DEX_MINIOR_CORE_VIOLET, NATIONAL_DEX_MILCERY, + // 0.9 lbs / 0.4 kg NATIONAL_DEX_POLTEAGEIST, NATIONAL_DEX_CURSOLA, + NATIONAL_DEX_TADBULB, + // 1.1 lbs / 0.5 kg NATIONAL_DEX_HOPPIP, NATIONAL_DEX_SPRITZEE, NATIONAL_DEX_RIBOMBEE, NATIONAL_DEX_APPLIN, NATIONAL_DEX_ALCREMIE, - //NATIONAL_DEX_CORSOLA, // Galarian Form + //NATIONAL_DEX_CORSOLA_GALARIAN, + // 1.3 lbs / 0.6 kg NATIONAL_DEX_CHINGLING, NATIONAL_DEX_COTTONEE, NATIONAL_DEX_JOLTIK, - NATIONAL_DEX_MIMIKYU, + NATIONAL_DEX_BRAMBLIN, + // 1.5 lbs / 0.7 kg + NATIONAL_DEX_MIMIKYU,//_DISGUISED, + //NATIONAL_DEX_MIMIKYU_BUSTED, + NATIONAL_DEX_SHROODLE, + // 1.8 lbs / 0.8 kg NATIONAL_DEX_DIGLETT, - NATIONAL_DEX_CASTFORM, - NATIONAL_DEX_FLOETTE, - //NATIONAL_DEX_DIGLETT, // Alolan Form + NATIONAL_DEX_CASTFORM,//_NORMAL, + //NATIONAL_DEX_CASTFORM_SUNNY, + //NATIONAL_DEX_CASTFORM_RAINY, + //NATIONAL_DEX_CASTFORM_SNOWY, + // 2.0 lbs / 0.9 kg + NATIONAL_DEX_FLOETTE,//_RED_FLOWER, + //NATIONAL_DEX_FLOETTE_YELLOW_FLOWER, + //NATIONAL_DEX_FLOETTE_ORANGE_FLOWER, + //NATIONAL_DEX_FLOETTE_BLUE_FLOWER, + //NATIONAL_DEX_FLOETTE_WHITE_FLOWER, + //NATIONAL_DEX_FLOETTE_ETERNAL_FLOWER, + // 2.2 lbs / 1.0 kg + //NATIONAL_DEX_DIGLETT_ALOLAN, NATIONAL_DEX_KOFFING, NATIONAL_DEX_IGGLYBUFF, NATIONAL_DEX_SKIPLOOM, @@ -978,28 +1124,42 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_ARROKUDA, NATIONAL_DEX_SIZZLIPEDE, NATIONAL_DEX_PINCURCHIN, + NATIONAL_DEX_NYMBLE, + NATIONAL_DEX_RELLOR, + // 2.4 lbs / 1.1 kg NATIONAL_DEX_JIRACHI, + NATIONAL_DEX_POLTCHAGEIST, + // 2.6 lbs / 1.2 kg NATIONAL_DEX_SHEDINJA, NATIONAL_DEX_SWABLU, NATIONAL_DEX_BUDEW, NATIONAL_DEX_DRIFLOON, NATIONAL_DEX_PIKIPEK, NATIONAL_DEX_PYUKUMUKU, + // 3.1 lbs / 1.4 kg NATIONAL_DEX_MANAPHY, + // 3.3 lbs / 1.5 kg NATIONAL_DEX_TOGEPI, NATIONAL_DEX_YAMASK, - //NATIONAL_DEX_YAMASK, // Galarian Form + //NATIONAL_DEX_YAMASK_GALARIAN, NATIONAL_DEX_ROWLET, NATIONAL_DEX_FOMANTIS, NATIONAL_DEX_MORELULL, + NATIONAL_DEX_FLITTLE, + // 3.7 lbs / 1.7 kg NATIONAL_DEX_SURSKIT, NATIONAL_DEX_FLETCHLING, + // 4.0 lbs / 1.8 kg NATIONAL_DEX_PIDGEY, NATIONAL_DEX_SUNKERN, NATIONAL_DEX_POIPOLE, NATIONAL_DEX_ROOKIDEE, + NATIONAL_DEX_TANDEMAUS, + NATIONAL_DEX_WIGLETT, + // 4.2 lbs / 1.9 kg NATIONAL_DEX_BARBOACH, NATIONAL_DEX_CHATOT, + // 4.4 lbs / 2.0 kg NATIONAL_DEX_SPEAROW, NATIONAL_DEX_PICHU, NATIONAL_DEX_NATU, @@ -1007,54 +1167,89 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_ROSELIA, NATIONAL_DEX_STARLY, NATIONAL_DEX_HONEDGE, - //NATIONAL_DEX_RIBOMBEE, // Totem-sized + //NATIONAL_DEX_RIBOMBEE_TOTEM_SIZED, NATIONAL_DEX_DREEPY, + // 4.6 lbs / 2.1 kg NATIONAL_DEX_MURKROW, - NATIONAL_DEX_SHAYMIN, // Land Form + NATIONAL_DEX_SHAYMIN,//_LAND, NATIONAL_DEX_PIDOVE, NATIONAL_DEX_WOOBAT, + // 4.9 lbs / 2.2 kg NATIONAL_DEX_KRICKETOT, NATIONAL_DEX_DEDENNE, NATIONAL_DEX_GOSSIFLEUR, + NATIONAL_DEX_SINISTCHA, + // 5.1 lbs / 2.3 kg NATIONAL_DEX_TAILLOW, NATIONAL_DEX_SHUPPET, + NATIONAL_DEX_MAUSHOLD,//_FAMILY_OF_THREE, + // 5.3 lbs / 2.4 kg + NATIONAL_DEX_SQUAWKABILLY,//_GREEN_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_BLUE_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_YELLOW_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_WHITE_PLUMAGE, + // 5.5 lbs / 2.5 kg NATIONAL_DEX_EXEGGCUTE, NATIONAL_DEX_TORCHIC, NATIONAL_DEX_SEWADDLE, NATIONAL_DEX_SCATTERBUG, NATIONAL_DEX_SKWOVET, NATIONAL_DEX_ELDEGOSS, + NATIONAL_DEX_PAWMI, + // 5.7 lbs / 2.6 kg NATIONAL_DEX_LOTAD, + // 6.2 lbs / 2.8 kg NATIONAL_DEX_GOOMY, - //NATIONAL_DEX_MIMIKYU, // Totem-sized + //NATIONAL_DEX_MIMIKYU_TOTEM_SIZED, + //NATIONAL_DEX_MAUSHOLD_FAMILY_OF_FOUR, + // 6.4 lbs / 2.9 kg NATIONAL_DEX_CATERPIE, + // 6.6 lbs / 3.0 kg NATIONAL_DEX_CLEFFA, NATIONAL_DEX_JUMPLUFF, NATIONAL_DEX_KLEFKI, - NATIONAL_DEX_MORPEKO, + NATIONAL_DEX_MORPEKO,//_FULL_BELLY, + //NATIONAL_DEX_MORPEKO_HANGRY, + NATIONAL_DEX_CAPSAKID, + // 6.8 lbs / 3.1 kg NATIONAL_DEX_PHIONE, NATIONAL_DEX_LITWICK, + // 7.1 lbs / 3.2 kg NATIONAL_DEX_WEEDLE, NATIONAL_DEX_TOGETIC, NATIONAL_DEX_BOUNSWEET, + // 7.3 lbs / 3.3 kg NATIONAL_DEX_DRATINI, NATIONAL_DEX_CHERUBI, NATIONAL_DEX_TOGEDEMARU, - NATIONAL_DEX_BURMY, - NATIONAL_DEX_ORICORIO, + // 7.5 lbs / 3.4 kg + NATIONAL_DEX_BURMY,//_PLANT_CLOAK, + //NATIONAL_DEX_BURMY_SANDY_CLOAK, + //NATIONAL_DEX_BURMY_TRASH_CLOAK, + NATIONAL_DEX_ORICORIO,//_BAILE, + //NATIONAL_DEX_ORICORIO_POM_POM, + //NATIONAL_DEX_ORICORIO_PAU, + //NATIONAL_DEX_ORICORIO_SENSU, NATIONAL_DEX_HATENNA, + // 7.7 lbs / 3.5 kg NATIONAL_DEX_RATTATA, NATIONAL_DEX_ESPURR, NATIONAL_DEX_SWIRLIX, NATIONAL_DEX_INKAY, - //NATIONAL_DEX_PUMPKABOO, // Small Size + //NATIONAL_DEX_PUMPKABOO_SMALL, + NATIONAL_DEX_RABSCA, + // 7.9 lbs / 3.6 kg NATIONAL_DEX_WURMPLE, NATIONAL_DEX_MASQUERAIN, - //NATIONAL_DEX_RATTATA, // Alolan Form + NATIONAL_DEX_WATTREL, + // 8.4 lbs / 3.8 kg + //NATIONAL_DEX_RATTATA_ALOLAN, NATIONAL_DEX_SNOM, + // 8.6 lbs / 3.9 kg NATIONAL_DEX_QWILFISH, NATIONAL_DEX_PACHIRISU, NATIONAL_DEX_GLAMEOW, + // 8.8 lbs / 4.0 kg NATIONAL_DEX_BELLSPROUT, NATIONAL_DEX_SHELLDER, NATIONAL_DEX_DITTO, @@ -1064,21 +1259,60 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_DEWPIDER, NATIONAL_DEX_SOBBLE, NATIONAL_DEX_CLOBBOPUS, + NATIONAL_DEX_TAROUNTULA, + NATIONAL_DEX_FLUTTER_MANE, + // 9.0 lbs / 4.1 kg NATIONAL_DEX_LILLIPUP, + NATIONAL_DEX_SPRIGATITO, + // 9.3 lbs / 4.2 kg NATIONAL_DEX_MEOWTH, - //NATIONAL_DEX_MEOWTH, // Alolan Form + //NATIONAL_DEX_MEOWTH_ALOLAN, NATIONAL_DEX_PLUSLE, NATIONAL_DEX_MINUN, + // 9.5 lbs / 4.3 kg NATIONAL_DEX_LITTEN, + // 9.7 lbs / 4.4 kg NATIONAL_DEX_MISMAGIUS, NATIONAL_DEX_GRUBBIN, + // 9.9 lbs / 4.5 kg NATIONAL_DEX_SHROOMISH, NATIONAL_DEX_TYMPOLE, NATIONAL_DEX_DOUBLADE, NATIONAL_DEX_SCORBUNNY, + // 10.6 lbs / 4.8 kg NATIONAL_DEX_SALANDIT, NATIONAL_DEX_HATTREM, - NATIONAL_DEX_UNOWN, + // 10.8 lbs / 4.9 kg + NATIONAL_DEX_CHI_YU, + // 11.0 lbs / 5.0 kg + NATIONAL_DEX_UNOWN,//_A, + //NATIONAL_DEX_UNOWN_B, + //NATIONAL_DEX_UNOWN_C, + //NATIONAL_DEX_UNOWN_D, + //NATIONAL_DEX_UNOWN_E, + //NATIONAL_DEX_UNOWN_F, + //NATIONAL_DEX_UNOWN_G, + //NATIONAL_DEX_UNOWN_H, + //NATIONAL_DEX_UNOWN_I, + //NATIONAL_DEX_UNOWN_J, + //NATIONAL_DEX_UNOWN_K, + //NATIONAL_DEX_UNOWN_L, + //NATIONAL_DEX_UNOWN_M, + //NATIONAL_DEX_UNOWN_N, + //NATIONAL_DEX_UNOWN_O, + //NATIONAL_DEX_UNOWN_P, + //NATIONAL_DEX_UNOWN_Q, + //NATIONAL_DEX_UNOWN_R, + //NATIONAL_DEX_UNOWN_S, + //NATIONAL_DEX_UNOWN_T, + //NATIONAL_DEX_UNOWN_U, + //NATIONAL_DEX_UNOWN_V, + //NATIONAL_DEX_UNOWN_W, + //NATIONAL_DEX_UNOWN_X, + //NATIONAL_DEX_UNOWN_Y, + //NATIONAL_DEX_UNOWN_Z, + //NATIONAL_DEX_UNOWN_EMARK, + //NATIONAL_DEX_UNOWN_QMARK, NATIONAL_DEX_CORSOLA, NATIONAL_DEX_CELEBI, NATIONAL_DEX_TREECKO, @@ -1086,28 +1320,53 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_EMOLGA, NATIONAL_DEX_BUNNELBY, NATIONAL_DEX_SLURPUFF, - NATIONAL_DEX_PUMPKABOO, // Average Size + NATIONAL_DEX_PUMPKABOO,//_AVERAGE, NATIONAL_DEX_GROOKEY, + NATIONAL_DEX_GIMMIGHOUL,//_CHEST, + // 11.2 lbs / 5.1 kg NATIONAL_DEX_HATTERENE, + // 11.5 lbs / 5.2 kg NATIONAL_DEX_PIPLUP, - //NATIONAL_DEX_SHAYMIN, // Sky Form + //NATIONAL_DEX_SHAYMIN_SKY, + // 11.7 lbs / 5.3 kg NATIONAL_DEX_VENIPEDE, + // 11.9 lbs / 5.4 kg NATIONAL_DEX_ODDISH, NATIONAL_DEX_PARAS, + NATIONAL_DEX_WUGTRIO, + // 12.1 lbs / 5.5 kg NATIONAL_DEX_JIGGLYPUFF, NATIONAL_DEX_NINCADA, NATIONAL_DEX_COMBEE, NATIONAL_DEX_BUNEARY, NATIONAL_DEX_DUCKLETT, NATIONAL_DEX_IMPIDIMP, + // 12.6 lbs / 5.7 kg NATIONAL_DEX_VANILLITE, NATIONAL_DEX_CARBINK, + // 12.8 lbs / 5.8 kg NATIONAL_DEX_BELLOSSOM, NATIONAL_DEX_MINCCINO, NATIONAL_DEX_GOTHITA, + // 13.0 lbs / 5.9 kg NATIONAL_DEX_OSHAWOTT, NATIONAL_DEX_KARRABLAST, + // 13.2 lbs / 6.0 kg NATIONAL_DEX_PIKACHU, + //NATIONAL_DEX_PIKACHU_COSPLAY, + //NATIONAL_DEX_PIKACHU_ROCK_STAR, + //NATIONAL_DEX_PIKACHU_BELLE, + //NATIONAL_DEX_PIKACHU_POP_STAR, + //NATIONAL_DEX_PIKACHU_PH_D, + //NATIONAL_DEX_PIKACHU_LIBRE, + //NATIONAL_DEX_PIKACHU_ORIGINAL_CAP, + //NATIONAL_DEX_PIKACHU_HOENN_CAP, + //NATIONAL_DEX_PIKACHU_SINNOH_CAP, + //NATIONAL_DEX_PIKACHU_UNOVA_CAP, + //NATIONAL_DEX_PIKACHU_KALOS_CAP, + //NATIONAL_DEX_PIKACHU_ALOLA_CAP, + //NATIONAL_DEX_PIKACHU_PARTNER_CAP, + //NATIONAL_DEX_PIKACHU_WORLD_CAP, NATIONAL_DEX_MAGNEMITE, NATIONAL_DEX_SENTRET, NATIONAL_DEX_SMOOCHUM, @@ -1115,49 +1374,71 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_YUNGOOS, NATIONAL_DEX_GREEDENT, NATIONAL_DEX_WOOLOO, + NATIONAL_DEX_BRAMBLEGHAST, + // 13.4 lbs / 6.1 kg + NATIONAL_DEX_QUAXLY, + // 13.7 lbs / 6.2 kg NATIONAL_DEX_CHIMCHAR, - NATIONAL_DEX_SHELLOS, // West Sea - //NATIONAL_DEX_SHELLOS, // East Sea + // 13.9 lbs / 6.3 kg + NATIONAL_DEX_SHELLOS,//_WEST_SEA, + //NATIONAL_DEX_SHELLOS_EAST_SEA, + // 14.1 lbs / 6.4 kg NATIONAL_DEX_WEEPINBELL, NATIONAL_DEX_CHIKORITA, + // 14.3 lbs / 6.5 kg NATIONAL_DEX_KRABBY, NATIONAL_DEX_CUBONE, NATIONAL_DEX_EEVEE, NATIONAL_DEX_SWINUB, - NATIONAL_DEX_WORMADAM, // Plant Cloak - //NATIONAL_DEX_WORMADAM, // Sandy Cloak - //NATIONAL_DEX_WORMADAM, // Trash Cloak - NATIONAL_DEX_MELOETTA, // Aria Forme - //NATIONAL_DEX_MELOETTA, // Pirouette Forme + NATIONAL_DEX_WORMADAM,//_PLANT_CLOAK, + //NATIONAL_DEX_WORMADAM_SANDY_CLOAK, + //NATIONAL_DEX_WORMADAM_TRASH_CLOAK, + NATIONAL_DEX_MELOETTA,//_ARIA, + //NATIONAL_DEX_MELOETTA_PIROUETTE, + NATIONAL_DEX_PAWMO, + NATIONAL_DEX_SMOLIV, + // 14.6 lbs / 6.6 kg NATIONAL_DEX_RALTS, NATIONAL_DEX_WHIMSICOTT, NATIONAL_DEX_PETILIL, + // 15.0 lbs / 6.8 kg NATIONAL_DEX_STUFFUL, + // 15.2 lbs / 6.9 kg NATIONAL_DEX_BULBASAUR, NATIONAL_DEX_EKANS, + // 15.4 lbs / 7.0 kg NATIONAL_DEX_NIDORAN_F, NATIONAL_DEX_FINNEON, NATIONAL_DEX_FROAKIE, NATIONAL_DEX_PHANTUMP, NATIONAL_DEX_CRABRAWLER, + // 15.9 lbs / 7.2 kg NATIONAL_DEX_PINECO, + // 16.1 lbs / 7.3 kg NATIONAL_DEX_SWADLOON, NATIONAL_DEX_SKRELP, + // 16.3 lbs / 7.4 kg NATIONAL_DEX_FEEBAS, + // 16.5 lbs / 7.5 kg NATIONAL_DEX_CLEFAIRY, NATIONAL_DEX_ZUBAT, - //NATIONAL_DEX_MEOWTH, // Galarian Form + //NATIONAL_DEX_MEOWTH_GALARIAN, NATIONAL_DEX_OMANYTE, NATIONAL_DEX_CINCCINO, - //NATIONAL_DEX_PUMPKABOO, // Large Size + //NATIONAL_DEX_PUMPKABOO_LARGE, NATIONAL_DEX_POPPLIO, + // 16.8 lbs / 7.6 kg NATIONAL_DEX_MUDKIP, NATIONAL_DEX_SILICOBRA, + // 17.0 lbs / 7.7 kg NATIONAL_DEX_SHELMET, NATIONAL_DEX_CALYREX, + // 17.2 lbs / 7.8 kg NATIONAL_DEX_MAREEP, NATIONAL_DEX_SNUBBULL, + // 17.4 lbs / 7.9 kg NATIONAL_DEX_CYNDAQUIL, + // 17.6 lbs / 8.0 kg NATIONAL_DEX_HORSEA, NATIONAL_DEX_DUOSION, NATIONAL_DEX_PANCHAM, @@ -1165,10 +1446,20 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_MAREANIE, NATIONAL_DEX_MELTAN, NATIONAL_DEX_BLIPBUG, + NATIONAL_DEX_GLIMMET, + NATIONAL_DEX_TATSUGIRI,//_CURLY, + //NATIONAL_DEX_TATSUGIRI_DROOPY, + //NATIONAL_DEX_TATSUGIRI_STRETCHY, + NATIONAL_DEX_SCREAM_TAIL, + // 17.9 lbs / 8.1 kg NATIONAL_DEX_SNIVY, + // 18.1 lbs / 8.2 kg NATIONAL_DEX_STEENEE, + // 18.3 lbs / 8.3 kg NATIONAL_DEX_CLAUNCHER, + // 18.5 lbs / 8.4 kg NATIONAL_DEX_SPEWPA, + // 18.7 lbs / 8.5 kg NATIONAL_DEX_CHARMANDER, NATIONAL_DEX_SPINARAK, NATIONAL_DEX_MARILL, @@ -1176,58 +1467,94 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_WOOPER, NATIONAL_DEX_DRILBUR, NATIONAL_DEX_CUBCHOO, - NATIONAL_DEX_MEOWSTIC, + NATIONAL_DEX_MEOWSTIC,//_MALE, + //NATIONAL_DEX_MEOWSTIC_FEMALE, NATIONAL_DEX_CHEWTLE, + // 19.0 lbs / 8.6 kg NATIONAL_DEX_GLOOM, + // 19.2 lbs / 8.7 kg NATIONAL_DEX_LUVDISC, + // 19.4 lbs / 8.8 kg NATIONAL_DEX_TEDDIURSA, NATIONAL_DEX_DIANCIE, + // 19.6 lbs / 8.9 kg NATIONAL_DEX_NICKIT, + NATIONAL_DEX_TINKATINK, + // 19.8 lbs / 9.0 kg NATIONAL_DEX_SQUIRTLE, NATIONAL_DEX_NIDORAN_M, NATIONAL_DEX_ELGYEM, NATIONAL_DEX_VULLABY, NATIONAL_DEX_CHESPIN, - NATIONAL_DEX_HOOPA, // Confined + NATIONAL_DEX_HOOPA,//_CONFINED, NATIONAL_DEX_RABOOT, + // 20.3 lbs / 9.2 kg NATIONAL_DEX_ROCKRUFF, - NATIONAL_DEX_CHERRIM, + // 20.5 lbs / 9.3 kg + NATIONAL_DEX_CHERRIM,//_OVERCAST, + //NATIONAL_DEX_CHERRIM_SUNSHINE, + // 20.7 lbs / 9.4 kg NATIONAL_DEX_FENNEKIN, + // 20.9 lbs / 9.5 kg NATIONAL_DEX_WEEZING, NATIONAL_DEX_TOTODILE, NATIONAL_DEX_WINGULL, NATIONAL_DEX_SHINX, NATIONAL_DEX_ARCHEN, - //NATIONAL_DEX_GOURGEIST, // Small Size + //NATIONAL_DEX_GOURGEIST_SMALL, + // 21.6 lbs / 9.7 kg + NATIONAL_DEX_DIPPLIN, + // 21.6 lbs / 9.8 kg + NATIONAL_DEX_FUECOCO, + // 21.8 lbs / 9.9 kg NATIONAL_DEX_METAPOD, NATIONAL_DEX_VULPIX, - //NATIONAL_DEX_VULPIX, // Alolan Form + //NATIONAL_DEX_VULPIX_ALOLAN, NATIONAL_DEX_TEPIG, - // 22.0 - 44.1 lbs / 10.0 - 20.0 kg + // 22.0 lbs / 10.0 kg NATIONAL_DEX_KAKUNA, NATIONAL_DEX_MAGIKARP, NATIONAL_DEX_SILCOON, - NATIONAL_DEX_FLORGES, + NATIONAL_DEX_FLORGES,//_RED_FLOWER, + //NATIONAL_DEX_FLORGES_YELLOW_FLOWER, + //NATIONAL_DEX_FLORGES_ORANGE_FLOWER, + //NATIONAL_DEX_FLORGES_BLUE_FLOWER, + //NATIONAL_DEX_FLORGES_WHITE_FLOWER, + // 22.3 lbs / 10.1 kg NATIONAL_DEX_PURRLOIN, + // 22.5 lbs / 10.2 kg NATIONAL_DEX_TURTWIG, NATIONAL_DEX_PAWNIARD, + NATIONAL_DEX_LECHONK, + // 22.7 lbs / 10.3 kg NATIONAL_DEX_GULPIN, + // 22.9 lbs / 10.4 kg NATIONAL_DEX_VOLTORB, + // 23.1 lbs / 10.5 kg NATIONAL_DEX_PANSAGE, NATIONAL_DEX_SWOOBAT, NATIONAL_DEX_AMOONGUSS, NATIONAL_DEX_RUFFLET, NATIONAL_DEX_CHARJABUG, + NATIONAL_DEX_CHARCADET, + // 23.8 lbs / 10.8 kg NATIONAL_DEX_LEDYBA, NATIONAL_DEX_HOUNDOUR, + // 24.0 lbs / 10.9 kg NATIONAL_DEX_FROGADIER, + NATIONAL_DEX_FIDOUGH, + //NATIONAL_DEX_WOOPER_PALDEAN, + // 24.3 lbs / 11.0 kg NATIONAL_DEX_SKITTY, NATIONAL_DEX_SABLEYE, NATIONAL_DEX_PANSEAR, NATIONAL_DEX_STUNFISK, NATIONAL_DEX_TOXEL, NATIONAL_DEX_DRAKLOAK, + NATIONAL_DEX_IRON_BUNDLE, + // 24.7 lbs / 11.2 kg NATIONAL_DEX_MEDITITE, + // 25.4 lbs / 11.5 kg NATIONAL_DEX_KABUTO, NATIONAL_DEX_AIPOM, NATIONAL_DEX_CASCOON, @@ -1235,8 +1562,13 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_CORPHISH, NATIONAL_DEX_SHIINOTIC, NATIONAL_DEX_DRIZZILE, + // 25.6 lbs / 11.6 kg NATIONAL_DEX_PATRAT, + // 26.0 lbs / 11.8 kg NATIONAL_DEX_SCRAGGY, + // 26.2 lbs / 11.9 kg + NATIONAL_DEX_DOLLIV, + // 26.5 lbs / 12.0 kg NATIONAL_DEX_SANDSHREW, NATIONAL_DEX_WIGGLYTUFF, NATIONAL_DEX_CHINCHOU, @@ -1246,40 +1578,59 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_WIMPOD, NATIONAL_DEX_ROLYCOLY, NATIONAL_DEX_KUBFU, + // 26.9 lbs / 12.2 kg + NATIONAL_DEX_FLORAGATO, + NATIONAL_DEX_MUNKIDORI, + // 27.3 lbs / 12.4 kg NATIONAL_DEX_POLIWAG, + // 27.6 lbs / 12.5 kg NATIONAL_DEX_VENOMOTH, NATIONAL_DEX_ANORITH, NATIONAL_DEX_BANETTE, NATIONAL_DEX_TIMBURR, NATIONAL_DEX_ZORUA, - NATIONAL_DEX_GOURGEIST, // Average Size + //NATIONAL_DEX_ZORUA_HISUIAN, + NATIONAL_DEX_GOURGEIST,//_AVERAGE, NATIONAL_DEX_MORGREM, + // 28.7 lbs / 13.0 kg NATIONAL_DEX_IVYSAUR, - //NATIONAL_DEX_VOLTORB, //Hisuian Form - //NATIONAL_DEX_BANETTE, // Mega + //NATIONAL_DEX_VOLTORB_HISUIAN, + //NATIONAL_DEX_BANETTE_MEGA, NATIONAL_DEX_MIME_JR, NATIONAL_DEX_LAMPENT, - //NATIONAL_DEX_TOGEDEMARU, // Totem-sized + //NATIONAL_DEX_TOGEDEMARU_TOTEM_SIZED, NATIONAL_DEX_BLACEPHALON, NATIONAL_DEX_APPLETUN, + // 29.3 lbs / 13.3 kg NATIONAL_DEX_FLAAFFY, + // 29.8 lbs / 13.5 kg NATIONAL_DEX_PANPOUR, NATIONAL_DEX_LITLEO, NATIONAL_DEX_YAMPER, + // 30.0 lbs / 13.6 kg NATIONAL_DEX_POOCHYENA, + // 30.9 lbs / 14.0 kg NATIONAL_DEX_DUNSPARCE, NATIONAL_DEX_WYNAUT, NATIONAL_DEX_SIGILYPH, - //NATIONAL_DEX_GOURGEIST, // Large Size + //NATIONAL_DEX_GOURGEIST_LARGE, NATIONAL_DEX_THWACKEY, + // 31.3 lbs / 14.2 kg NATIONAL_DEX_GUMSHOOS, + // 31.5 lbs / 14.3 kg NATIONAL_DEX_GALVANTULA, + // 32.0 lbs / 14.5 kg NATIONAL_DEX_ROSERADE, NATIONAL_DEX_DWEBBLE, NATIONAL_DEX_BRAIXEN, NATIONAL_DEX_TOXAPEX, + // 32.4 lbs / 14.7 kg NATIONAL_DEX_HERDIER, + // 32.6 lbs / 14.8 kg NATIONAL_DEX_TRUMBEAK, + // 32.8 lbs / 14.9 kg + NATIONAL_DEX_DACHSBUN, + // 33.1 lbs / 15.0 kg NATIONAL_DEX_FARFETCHD, NATIONAL_DEX_GOLDEEN, NATIONAL_DEX_XATU, @@ -1288,147 +1639,242 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_DRIFBLIM, NATIONAL_DEX_BONSLY, NATIONAL_DEX_TRANQUILL, - //NATIONAL_DEX_PUMPKABOO, // Super Size + //NATIONAL_DEX_PUMPKABOO_SUPER, + NATIONAL_DEX_SCOVILLAIN, + NATIONAL_DEX_HOUNDSTONE, + // 33.5 lbs / 15.2 kg NATIONAL_DEX_ELECTRIKE, NATIONAL_DEX_SANDILE, + // 33.7 lbs / 15.3 kg NATIONAL_DEX_VIBRAVA, + // 34.2 lbs / 15.5 kg NATIONAL_DEX_VICTREEBEL, NATIONAL_DEX_STARAVIA, NATIONAL_DEX_AROMATISSE, + // 34.8 lbs / 15.8 kg NATIONAL_DEX_BAYLEEF, - //NATIONAL_DEX_WEEZING, // Galarian Form + // 35.3 lbs / 16.0 kg + //NATIONAL_DEX_WEEZING_GALARIAN, NATIONAL_DEX_DELIBIRD, NATIONAL_DEX_SERVINE, NATIONAL_DEX_FLETCHINDER, NATIONAL_DEX_DARTRIX, NATIONAL_DEX_CORVISQUIRE, + NATIONAL_DEX_NACLI, + NATIONAL_DEX_MASCHIFF, + // 35.9 lbs / 16.3 kg NATIONAL_DEX_WHISMUR, NATIONAL_DEX_LILLIGANT, + // 36.4 lbs / 16.5 kg NATIONAL_DEX_DRAGONAIR, NATIONAL_DEX_TIRTOUGA, + NATIONAL_DEX_SPIDOPS, + // 37.0 lbs / 16.8 kg NATIONAL_DEX_SNORUNT, + // 37.5 lbs / 17.0 kg NATIONAL_DEX_PALPITOAD, - NATIONAL_DEX_VIVILLON, + NATIONAL_DEX_VIVILLON,//_ICY_SNOW, + //NATIONAL_DEX_VIVILLON_POLAR, + //NATIONAL_DEX_VIVILLON_TUNDRA, + //NATIONAL_DEX_VIVILLON_CONTINENTAL, + //NATIONAL_DEX_VIVILLON_GARDEN, + //NATIONAL_DEX_VIVILLON_ELEGANT, + //NATIONAL_DEX_VIVILLON_MEADOW, + //NATIONAL_DEX_VIVILLON_MODERN, + //NATIONAL_DEX_VIVILLON_MARINE, + //NATIONAL_DEX_VIVILLON_ARCHIPELAGO, + //NATIONAL_DEX_VIVILLON_HIGH_PLAINS, + //NATIONAL_DEX_VIVILLON_SANDSTORM, + //NATIONAL_DEX_VIVILLON_RIVER, + //NATIONAL_DEX_VIVILLON_MONSOON, + //NATIONAL_DEX_VIVILLON_SAVANNA, + //NATIONAL_DEX_VIVILLON_SUN, + //NATIONAL_DEX_VIVILLON_OCEAN, + //NATIONAL_DEX_VIVILLON_JUNGLE, + //NATIONAL_DEX_VIVILLON_FANCY, + //NATIONAL_DEX_VIVILLON_POKE_BALL, + NATIONAL_DEX_FRIGIBAX, + // 38.1 lbs / 17.3 kg NATIONAL_DEX_DEINO, + // 38.6 lbs / 17.5 kg NATIONAL_DEX_ZIGZAGOON, - //NATIONAL_DEX_ZIGZAGOON, // Galarian Form + //NATIONAL_DEX_ZIGZAGOON_GALARIAN, NATIONAL_DEX_SLIGGOO, NATIONAL_DEX_BRIONNE, + NATIONAL_DEX_LOKIX, + // 39.0 lbs / 17.7 kg NATIONAL_DEX_VOLBEAT, NATIONAL_DEX_ILLUMISE, + // 39.7 lbs / 18.0 kg NATIONAL_DEX_ROGGENROLA, - NATIONAL_DEX_BASCULIN, // Red-Striped Form - //NATIONAL_DEX_BASCULIN, // Blue-Striped Form + NATIONAL_DEX_BASCULIN,//_RED_STRIPED, + //NATIONAL_DEX_BASCULIN_BLUE_STRIPED, + //NATIONAL_DEX_BASCULIN_WHITE_STRIPED, NATIONAL_DEX_GOTHORITA, NATIONAL_DEX_AXEW, NATIONAL_DEX_CRAMORANT, + // 40.8 lbs / 18.5 kg NATIONAL_DEX_RATICATE, NATIONAL_DEX_LURANTIS, + // 41.0 lbs / 18.6 kg NATIONAL_DEX_VILEPLUME, NATIONAL_DEX_TAPU_LELE, + // 41.4 lbs / 18.8 kg NATIONAL_DEX_FERROSEED, + // 41.9 lbs / 19.0 kg NATIONAL_DEX_CHARMELEON, NATIONAL_DEX_GROWLITHE, NATIONAL_DEX_QUILAVA, NATIONAL_DEX_BRUXISH, + // 42.3 lbs / 19.2 kg NATIONAL_DEX_STUNKY, - //NATIONAL_DEX_LILLIGANT, // Hisuian Form + //NATIONAL_DEX_LILLIGANT_HISUIAN, + // 43.0 lbs / 19.5 kg NATIONAL_DEX_NIDORINO, NATIONAL_DEX_ABRA, NATIONAL_DEX_MACHOP, NATIONAL_DEX_COMBUSKEN, - NATIONAL_DEX_DEERLING, + NATIONAL_DEX_DEERLING,//_SPRING, + //NATIONAL_DEX_DEERLING_SUMMER, + //NATIONAL_DEX_DEERLING_AUTUMN, + //NATIONAL_DEX_DEERLING_WINTER, NATIONAL_DEX_DOTTLER, + // 43.2 lbs / 19.6 kg NATIONAL_DEX_PSYDUCK, + // 43.7 lbs / 19.8 kg NATIONAL_DEX_SWELLOW, + // 43.9 lbs / 19.9 kg NATIONAL_DEX_NINETALES, - //NATIONAL_DEX_NINETALES, // Alolan Form + //NATIONAL_DEX_NINETALES_ALOLAN, NATIONAL_DEX_KOMALA, + NATIONAL_DEX_THIEVUL, + // 44.1 lbs / 20.0 kg NATIONAL_DEX_NIDORINA, NATIONAL_DEX_POLIWHIRL, NATIONAL_DEX_GEODUDE, NATIONAL_DEX_BIDOOF, NATIONAL_DEX_MIENFOO, - // 44.3 - 54.9 lbs / 20.1 - 24.9 kg + // 44.3 lbs / 20.1 kg NATIONAL_DEX_REUNICLUS, + // 44.5 lbs / 20.2 kg NATIONAL_DEX_KIRLIA, NATIONAL_DEX_RIOLU, - //NATIONAL_DEX_GEODUDE, // Alolan Form + // 44.8 lbs / 20.3 kg + //NATIONAL_DEX_GEODUDE_ALOLAN, NATIONAL_DEX_AMBIPOM, + // 45.2 lbs / 20.5 kg NATIONAL_DEX_SHUCKLE, NATIONAL_DEX_GIBLE, NATIONAL_DEX_LEAVANNY, NATIONAL_DEX_TAPU_KOKO, - //NATIONAL_DEX_STUNFISK, // Galarian Form + //NATIONAL_DEX_STUNFISK_GALARIAN, + // 45.4 lbs / 20.6 kg NATIONAL_DEX_ALTARIA, - //NATIONAL_DEX_ALTARIA, // Mega + //NATIONAL_DEX_ALTARIA_MEGA, + // 45.9 lbs / 20.8 kg NATIONAL_DEX_CARVANHA, + // 46.3 lbs / 21.0 kg NATIONAL_DEX_TYROGUE, NATIONAL_DEX_KLINK, NATIONAL_DEX_HELIOLISK, - //NATIONAL_DEX_RAICHU, // Alolan Form + //NATIONAL_DEX_RAICHU_ALOLAN, + NATIONAL_DEX_BRUTE_BONNET, + // 46.7 lbs / 21.2 kg NATIONAL_DEX_HOOTHOOT, NATIONAL_DEX_TAPU_FINI, + // 47.2 lbs / 21.4 kg NATIONAL_DEX_MAGBY, NATIONAL_DEX_TSAREENA, + // 47.4 lbs / 21.5 kg NATIONAL_DEX_BALTOY, NATIONAL_DEX_HAWLUCHA, + NATIONAL_DEX_QUAXWELL, + // 47.6 lbs / 21.6 kg NATIONAL_DEX_GROVYLE, + // 48.5 lbs / 22.0 kg NATIONAL_DEX_KECLEON, NATIONAL_DEX_MONFERNO, NATIONAL_DEX_EELEKTRIK, + // 48.9 lbs / 22.2 kg NATIONAL_DEX_SALAZZLE, NATIONAL_DEX_MARSHADOW, + // 49.6 lbs / 22.5 kg NATIONAL_DEX_WARTORTLE, NATIONAL_DEX_LANTURN, + // 49.8 lbs / 22.6 kg NATIONAL_DEX_GOREBYSS, - //NATIONAL_DEX_GROWLITHE, //Hisuian Form + // 50.0 lbs / 22.7 kg + //NATIONAL_DEX_GROWLITHE_HISUIAN, + // 50.7 lbs / 23.0 kg NATIONAL_DEX_PRINPLUP, NATIONAL_DEX_CROAGUNK, + // 51.4 lbs / 23.3 kg NATIONAL_DEX_MOTHIM, NATIONAL_DEX_MUNNA, + // 51.6 lbs / 23.4 kg NATIONAL_DEX_RELICANTH, + // 51.8 lbs / 23.5 kg NATIONAL_DEX_ELEKID, - //NATIONAL_DEX_MAWILE, // Mega + //NATIONAL_DEX_MAWILE_MEGA, NATIONAL_DEX_SYLVEON, + // 52.0 lbs / 23.6 kg NATIONAL_DEX_WHISCASH, + // 52.5 lbs / 23.8 kg NATIONAL_DEX_LILEEP, - //NATIONAL_DEX_PONYTA, // Galarian Form + // 52.9 lbs / 24.0 kg + //NATIONAL_DEX_PONYTA_GALARIAN, NATIONAL_DEX_SLAKOTH, NATIONAL_DEX_NUMEL, NATIONAL_DEX_LUMINEON, + // 53.4 lbs / 24.2 kg NATIONAL_DEX_SWANNA, + // 53.8 lbs / 24.4 kg NATIONAL_DEX_HAPPINY, + // 54.0 lbs / 24.5 kg NATIONAL_DEX_JOLTEON, NATIONAL_DEX_DEWOTT, NATIONAL_DEX_TALONFLAME, + // 54.9 lbs / 24.9 kg NATIONAL_DEX_STARAPTOR, - // 55.1 - 110.0 lbs / 25.0 - 49.9 kg + // 55.1 lbs / 25.0 kg NATIONAL_DEX_SEADRA, NATIONAL_DEX_FLAREON, NATIONAL_DEX_CROCONAW, NATIONAL_DEX_TORRACAT, - NATIONAL_DEX_LYCANROC, // Midday Form - //NATIONAL_DEX_LYCANROC, // Midnight Form - //NATIONAL_DEX_LYCANROC, // Dusk Form + NATIONAL_DEX_LYCANROC,//_MIDDAY, + //NATIONAL_DEX_LYCANROC_MIDNIGHT, + //NATIONAL_DEX_LYCANROC_DUSK, NATIONAL_DEX_PHEROMOSA, + // 55.6 lbs / 25.2 kg NATIONAL_DEX_AMAURA, + // 55.8 lbs / 25.3 kg NATIONAL_DEX_ACCELGOR, + // 56.2 lbs / 25.5 kg NATIONAL_DEX_KRICKETUNE, NATIONAL_DEX_LEAFEON, - //NATIONAL_DEX_RATICATE, // Alolan Form + //NATIONAL_DEX_RATICATE_ALOLAN, + // 57.1 lbs / 25.5 kg NATIONAL_DEX_GLACEON, + // 57.3 lbs / 26.0 kg NATIONAL_DEX_TYRUNT, NATIONAL_DEX_TOUCANNON, + // 58.4 lbs / 26.5 kg NATIONAL_DEX_ESPEON, + // 58.6 lbs / 26.6 kg NATIONAL_DEX_FROSLASS, + // 59.5 lbs / 27.0 kg NATIONAL_DEX_UMBREON, - //NATIONAL_DEX_SNEASEL, //Hisuian Form + //NATIONAL_DEX_SNEASEL_HISUIAN, NATIONAL_DEX_HUNTAIL, NATIONAL_DEX_CARNIVINE, NATIONAL_DEX_WATCHOG, + // 60.0 lbs / 27.2 kg + NATIONAL_DEX_GRAFAIAI, + // 60.2 lbs / 27.3 kg NATIONAL_DEX_HONCHKROW, - //NATIONAL_DEX_DIANCIE, // Mega + // 61.3 lbs / 27.8 kg + //NATIONAL_DEX_DIANCIE_MEGA, + // 61.7 lbs / 28.0 kg NATIONAL_DEX_MANKEY, NATIONAL_DEX_SNEASEL, NATIONAL_DEX_MARSHTOMP, @@ -1436,27 +1882,47 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_PELIPPER, NATIONAL_DEX_SIMISEAR, NATIONAL_DEX_MARACTUS, - NATIONAL_DEX_FURFROU, + NATIONAL_DEX_FURFROU,//_NATURAL, + //NATIONAL_DEX_FURFROU_HEART_TRIM, + //NATIONAL_DEX_FURFROU_STAR_TRIM, + //NATIONAL_DEX_FURFROU_DIAMOND_TRIM, + //NATIONAL_DEX_FURFROU_DEBUTANTE_TRIM, + //NATIONAL_DEX_FURFROU_MATRON_TRIM, + //NATIONAL_DEX_FURFROU_DANDY_TRIM, + //NATIONAL_DEX_FURFROU_LA_REINE_TRIM, + //NATIONAL_DEX_FURFROU_KABUKI_TRIM, + //NATIONAL_DEX_FURFROU_PHARAOH_TRIM, NATIONAL_DEX_PERRSERKER, - NATIONAL_DEX_INDEEDEE, - //NATIONAL_DEX_LOPUNNY, // Mega + NATIONAL_DEX_INDEEDEE,//_MALE, + //NATIONAL_DEX_INDEEDEE_FEMALE, + // 62.4 lbs / 28.3 kg + //NATIONAL_DEX_LOPUNNY_MEGA, + // 62.6 lbs / 28.4 kg NATIONAL_DEX_BEAUTIFLY, + // 62.8 lbs / 28.5 kg NATIONAL_DEX_AZUMARILL, NATIONAL_DEX_WOBBUFFET, NATIONAL_DEX_OCTILLERY, + // 63.5 lbs / 28.8 kg NATIONAL_DEX_LARVESTA, + // 63.9 lbs / 29.0 kg NATIONAL_DEX_VAPOREON, NATIONAL_DEX_SIMIPOUR, NATIONAL_DEX_UNFEZANT, NATIONAL_DEX_QUILLADIN, + // 65.0 lbs / 29.5 kg NATIONAL_DEX_BEEDRILL, NATIONAL_DEX_SANDSLASH, NATIONAL_DEX_PARASECT, NATIONAL_DEX_BUIZEL, + // 65.5 lbs / 29.7 kg NATIONAL_DEX_JANGMO_O, + // 65.7 lbs / 29.8 kg NATIONAL_DEX_BLITZLE, - NATIONAL_DEX_GASTRODON, // West Sea - //NATIONAL_DEX_GASTRODON, // East Sea + // 65.9 lbs / 29.9 kg + NATIONAL_DEX_GASTRODON,//_WEST_SEA, + //NATIONAL_DEX_GASTRODON_EAST_SEA, + // 66.1 lbs / 30.0 kg NATIONAL_DEX_PIDGEOTTO, NATIONAL_DEX_RAICHU, NATIONAL_DEX_VENONAT, @@ -1466,533 +1932,981 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_ELECTABUZZ, NATIONAL_DEX_SCRAFTY, NATIONAL_DEX_BARRASKEWDA, + NATIONAL_DEX_ARCTIBAX, + NATIONAL_DEX_GHOLDENGO, + // 66.4 lbs / 30.1 kg + NATIONAL_DEX_FEZANDIPITI, + // 67.2 lbs / 30.5 kg NATIONAL_DEX_LUXIO, NATIONAL_DEX_SIMISAGE, + // 67.5 lbs / 30.6 kg NATIONAL_DEX_SPOINK, NATIONAL_DEX_DUSCLOPS, + // 67.7 lbs / 30.7 kg + NATIONAL_DEX_CROCALOR, + // 68.3 lbs / 31.0 kg NATIONAL_DEX_AUDINO, NATIONAL_DEX_TRUBBISH, NATIONAL_DEX_SKIDDO, NATIONAL_DEX_BINACLE, + // 68.8 lbs / 31.2 kg + NATIONAL_DEX_MEOWSCARADA, + // 69.4 lbs / 31.5 kg NATIONAL_DEX_MEDICHAM, NATIONAL_DEX_BIBAREL, NATIONAL_DEX_CRANIDOS, + // 69.7 lbs / 31.6 kg NATIONAL_DEX_DUSTOX, NATIONAL_DEX_ALOMOMOLA, + // 70.5 lbs / 32.0 kg NATIONAL_DEX_BUTTERFREE, NATIONAL_DEX_PERSIAN, NATIONAL_DEX_PRIMEAPE, - //NATIONAL_DEX_AUDINO, // Mega + //NATIONAL_DEX_AUDINO_MEGA, NATIONAL_DEX_ARCHEOPS, + // 71.4 lbs / 32.4 kg NATIONAL_DEX_DROWZEE, + // 71.7 lbs / 32.5 kg NATIONAL_DEX_FURRET, NATIONAL_DEX_PORYGON2, NATIONAL_DEX_LINOONE, - //NATIONAL_DEX_LINOONE, // Galarian Form + //NATIONAL_DEX_LINOONE_GALARIAN, NATIONAL_DEX_LOMBRE, + // 71.9 lbs / 32.6 kg NATIONAL_DEX_DELCATTY, + // 72.3 lbs / 32.8 kg NATIONAL_DEX_CRAWDAUNT, - //NATIONAL_DEX_MEWTWO, // Mega Y + // 72.8 lbs / 33.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_Y, NATIONAL_DEX_ESCAVALIER, NATIONAL_DEX_FRILLISH, NATIONAL_DEX_DURANT, NATIONAL_DEX_CINDERACE, - //NATIONAL_DEX_PERSIAN, // Alolan Form + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg NATIONAL_DEX_DUGTRIO, NATIONAL_DEX_LOPUNNY, + // 73.6 lbs / 33.4 kg NATIONAL_DEX_KROKOROK, + // 73.9 lbs / 33.5 kg NATIONAL_DEX_ARIADOS, NATIONAL_DEX_PHANPY, NATIONAL_DEX_FLOATZEL, - //NATIONAL_DEX_ZYGARDE, // 10% Forme + //NATIONAL_DEX_ZYGARDE_10, + //NATIONAL_DEX_ZYGARDE_10_POWER_CONSTRUCT, + // 74.7 lbs / 33.9 kg NATIONAL_DEX_POLITOED, - //NATIONAL_DEX_MAROWAK, // Alolan Form + // 75.0 lbs / 34.0 kg + //NATIONAL_DEX_MAROWAK_ALOLAN, NATIONAL_DEX_WEAVILE, NATIONAL_DEX_PORYGON_Z, NATIONAL_DEX_BOLTUND, + // 75.6 lbs / 34.3 kg NATIONAL_DEX_CHANDELURE, + // 76.1 lbs / 34.5 kg NATIONAL_DEX_STARYU, NATIONAL_DEX_BEHEEYEM, + // 76.3 lbs / 34.6 kg NATIONAL_DEX_CHANSEY, + // 77.2 lbs / 35.0 kg NATIONAL_DEX_TANGELA, NATIONAL_DEX_OMASTAR, NATIONAL_DEX_SLUGMA, NATIONAL_DEX_HOUNDOOM, + NATIONAL_DEX_VAROOM, + NATIONAL_DEX_GREAVARD, + NATIONAL_DEX_IRON_VALIANT, + // 77.8 lbs / 35.3 kg NATIONAL_DEX_CLAWITZER, + // 78.3 lbs / 35.5 kg NATIONAL_DEX_MIENSHAO, + // 78.5 lbs / 35.6 kg NATIONAL_DEX_LEDIAN, + // 79.4 lbs / 36.0 kg NATIONAL_DEX_SLOWPOKE, - //NATIONAL_DEX_SLOWPOKE, // Galarian Form + //NATIONAL_DEX_SLOWPOKE_GALARIAN, NATIONAL_DEX_FRAXURE, + NATIONAL_DEX_IRON_MOTH, + // 80.5 lbs / 36.5 kg NATIONAL_DEX_PORYGON, + // 80.7 lbs / 36.6 kg NATIONAL_DEX_DECIDUEYE, + // 81.6 lbs / 37.0 kg NATIONAL_DEX_MIGHTYENA, - //NATIONAL_DEX_DECIDUEYE, //Hisuian Form + //NATIONAL_DEX_DECIDUEYE_HISUIAN, + NATIONAL_DEX_FLAMIGO, + // 82.7 lbs / 37.5 kg NATIONAL_DEX_LIEPARD, NATIONAL_DEX_DARUMAKA, + // 83.8 lbs / 38.0 kg NATIONAL_DEX_FEAROW, NATIONAL_DEX_SUDOWOODO, NATIONAL_DEX_YANMA, NATIONAL_DEX_SKUNTANK, NATIONAL_DEX_TOGEKISS, + // 84.9 lbs / 38.5 kg NATIONAL_DEX_VESPIQUEN, + // 85.1 lbs / 38.6 kg + NATIONAL_DEX_KILOWATTREL, + // 86.0 lbs / 39.0 kg NATIONAL_DEX_SEAKING, NATIONAL_DEX_DELPHOX, - //NATIONAL_DEX_GOURGEIST, // Super Size + //NATIONAL_DEX_GOURGEIST_SUPER, NATIONAL_DEX_GRAPPLOCT, + // 86.4 lbs / 39.2 kg NATIONAL_DEX_DODUO, NATIONAL_DEX_BRELOOM, + NATIONAL_DEX_DUDUNSPARCE,//_TWO_SEGMENT, + // 87.1 lbs / 39.5 kg NATIONAL_DEX_PIDGEOT, NATIONAL_DEX_SPHEAL, NATIONAL_DEX_MANDIBUZZ, - //NATIONAL_DEX_SANDSHREW, // Alolan Form + // 87.7 lbs / 39.8 kg + NATIONAL_DEX_OGERPON, + // 88.2 lbs / 40.0 kg + //NATIONAL_DEX_SANDSHREW_ALOLAN, NATIONAL_DEX_CLEFABLE, NATIONAL_DEX_LATIAS, NATIONAL_DEX_GURDURR, - //NATIONAL_DEX_DARUMAKA, // Galarian Form + //NATIONAL_DEX_DARUMAKA_GALARIAN, NATIONAL_DEX_GRENINJA, - //NATIONAL_DEX_GRENINJA, // Ash-Greninja - NATIONAL_DEX_MINIOR, // Meteor Form - NATIONAL_DEX_TOXTRICITY, + //NATIONAL_DEX_GRENINJA_ASH, + //NATIONAL_DEX_MINIOR_METEOR, + //NATIONAL_DEX_MINIOR_METEOR_RED, + //NATIONAL_DEX_MINIOR_METEOR_ORANGE, + //NATIONAL_DEX_MINIOR_METEOR_YELLOW, + //NATIONAL_DEX_MINIOR_METEOR_GREEN, + //NATIONAL_DEX_MINIOR_METEOR_BLUE, + //NATIONAL_DEX_MINIOR_METEOR_INDIGO, + //NATIONAL_DEX_MINIOR_METEOR_VIOLET, + NATIONAL_DEX_TOXTRICITY,//_AMPED, + //NATIONAL_DEX_TOXTRICITY_LOW_KEY, NATIONAL_DEX_DURALUDON, + // 88.6 lbs / 40.2 kg NATIONAL_DEX_MANECTRIC, + // 88.8 lbs / 40.3 kg NATIONAL_DEX_ZANGOOSE, + // 89.1 lbs / 40.4 kg NATIONAL_DEX_EXCADRILL, - //NATIONAL_DEX_BEEDRILL, // Mega + // 89.3 lbs / 40.5 kg + //NATIONAL_DEX_BEEDRILL_MEGA, NATIONAL_DEX_GENGAR, NATIONAL_DEX_KABUTOPS, NATIONAL_DEX_LOUDRED, + // 89.5 lbs / 40.6 kg NATIONAL_DEX_JYNX, + // 89.9 lbs / 40.8 kg NATIONAL_DEX_NOCTOWL, NATIONAL_DEX_ORBEETLE, + // 90.4 lbs / 41.0 kg NATIONAL_DEX_VANILLISH, NATIONAL_DEX_BRAVIARY, + NATIONAL_DEX_PAWMOT, + // 91.5 lbs / 41.5 kg NATIONAL_DEX_GIRAFARIG, - //NATIONAL_DEX_FARFETCHD, // Galarian Form - //NATIONAL_DEX_GRIMER, // Alolan Form + // 92.6 lbs / 42.0 kg + //NATIONAL_DEX_FARFETCHD_GALARIAN, + //NATIONAL_DEX_GRIMER_ALOLAN, NATIONAL_DEX_LUXRAY, NATIONAL_DEX_FROSMOTH, + // 92.8 lbs / 42.1 kg NATIONAL_DEX_BAGON, + // 93.5 lbs / 42.4 kg NATIONAL_DEX_DIGGERSBY, + // 93.7 lbs / 42.5 kg NATIONAL_DEX_GLISCOR, + // 94.6 lbs / 42.9 kg + NATIONAL_DEX_BOMBIRDIER, + // 94.8 lbs / 43.0 kg NATIONAL_DEX_DUBWOOL, NATIONAL_DEX_SNEASLER, - //NATIONAL_DEX_BRAVIARY, //Hisuian Form + // 95.7 lbs / 43.4 kg + //NATIONAL_DEX_BRAVIARY_HISUIAN, + // 96.6 lbs / 43.8 kg NATIONAL_DEX_PURUGLY, - //NATIONAL_DEX_MANECTRIC, // Mega + // 97.0 lbs / 44.0 kg + //NATIONAL_DEX_MANECTRIC_MEGA, NATIONAL_DEX_GOTHITELLE, NATIONAL_DEX_PRIMARINA, + // 97.9 lbs / 44.4 kg NATIONAL_DEX_TOXICROAK, + // 98.1 lbs / 44.5 kg NATIONAL_DEX_MAGMAR, NATIONAL_DEX_ZERAORA, NATIONAL_DEX_SPECTRIER, + // 99.2 lbs / 45.0 kg NATIONAL_DEX_MAROWAK, NATIONAL_DEX_VIKAVOLT, + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_CETODDLE, + // 99.6 lbs / 45.2 kg NATIONAL_DEX_INTELEON, + // 100.3 lbs / 45.5 kg NATIONAL_DEX_TENTACOOL, NATIONAL_DEX_TAPU_BULU, + // 101.4 lbs / 46.0 kg NATIONAL_DEX_VOLCARONA, NATIONAL_DEX_OBSTAGOON, + // 102.5 lbs / 46.5 kg NATIONAL_DEX_VIGOROTH, + // 103.2 lbs / 46.8 kg NATIONAL_DEX_BLISSEY, + // 103.2 lbs / 46.8 kg NATIONAL_DEX_ABSOL, NATIONAL_DEX_MALAMAR, NATIONAL_DEX_HAKAMO_O, + // 104.5 lbs / 47.4 kg + //NATIONAL_DEX_DUDUNSPARCE_THREE_SEGMENT, + // 105.8 lbs / 48.0 kg NATIONAL_DEX_ALAKAZAM, NATIONAL_DEX_HITMONTOP, - NATIONAL_DEX_ENAMORUS, + NATIONAL_DEX_ENAMORUS,//_INCARNATE, + //NATIONAL_DEX_ENAMORUS_THERIAN, + // 106.3 lbs / 48.2 kg + NATIONAL_DEX_ARBOLIVA, + // 106.7 lbs / 48.4 kg NATIONAL_DEX_GARDEVOIR, - NATIONAL_DEX_KELDEO, + // 106.9 lbs / 48.5 kg + NATIONAL_DEX_KELDEO,//_ORDINARY, + //NATIONAL_DEX_KELDEO_RESOLUTE, + // 107.4 lbs / 48.7 kg NATIONAL_DEX_GRANBULL, - //NATIONAL_DEX_ABSOL, // Mega - //NATIONAL_DEX_HOUNDOOM, // Mega + // 108.0 lbs / 49.0 kg + //NATIONAL_DEX_ABSOL_MEGA, + // 109.1 lbs / 49.5 kg + //NATIONAL_DEX_HOUNDOOM_MEGA, NATIONAL_DEX_HIPPOPOTAS, + // 109.8 lbs / 49.8 kg NATIONAL_DEX_HITMONLEE, - // 110.2 - 132.1 lbs / 50.0 - 59.9 kg + // 110.2 lbs / 50.0 kg NATIONAL_DEX_ZWEILOUS, NATIONAL_DEX_DRAGAPULT, + // 110.7 lbs / 50.2 kg NATIONAL_DEX_HITMONCHAN, - //NATIONAL_DEX_PIDGEOT, // Mega + // 111.3 lbs / 50.5 kg + //NATIONAL_DEX_PIDGEOT_MEGA, NATIONAL_DEX_SKARMORY, NATIONAL_DEX_SNOVER, NATIONAL_DEX_DARKRAI, - //NATIONAL_DEX_ARTICUNO, // Galarian Form + // 112.2 lbs / 50.9 kg + //NATIONAL_DEX_ARTICUNO_GALARIAN, + // 112.4 lbs / 51.0 kg NATIONAL_DEX_SAWK, NATIONAL_DEX_KLANG, + // 113.1 lbs / 51.3 kg NATIONAL_DEX_CACNEA, + // 113.5 lbs / 51.5 kg NATIONAL_DEX_YANMEGA, - //NATIONAL_DEX_MUK, // Alolan Form + // 114.6 lbs / 52.0 kg + //NATIONAL_DEX_MUK_ALOLAN, NATIONAL_DEX_BLAZIKEN, - //NATIONAL_DEX_LATIAS, // Mega + //NATIONAL_DEX_LATIAS_MEGA, NATIONAL_DEX_GALLADE, + // 115.1 lbs / 52.2 kg NATIONAL_DEX_SCEPTILE, + // 115.7 lbs / 52.5 kg NATIONAL_DEX_SEVIPER, NATIONAL_DEX_CLAMPERL, + // 116.0 lbs / 52.6 kg NATIONAL_DEX_ZAPDOS, - NATIONAL_DEX_AEGISLASH, - //NATIONAL_DEX_CALYREX, // Shadow Rider + // 116.8 lbs / 53.0 kg + NATIONAL_DEX_AEGISLASH,//_SHIELD, + //NATIONAL_DEX_AEGISLASH_BLADE, + // 118.2 lbs / 53.6 kg + //NATIONAL_DEX_CALYREX_SHADOW_RIDER, + // 119.0 lbs / 54.0 kg NATIONAL_DEX_POLIWRATH, NATIONAL_DEX_HERACROSS, NATIONAL_DEX_LUCARIO, + // 120.2 lbs / 54.5 kg NATIONAL_DEX_MR_MIME, - //NATIONAL_DEX_SANDSLASH, // Alolan Form + // 121.3 lbs / 55.0 kg + //NATIONAL_DEX_SANDSLASH_ALOLAN, NATIONAL_DEX_GOLBAT, NATIONAL_DEX_TENTACRUEL, NATIONAL_DEX_PINSIR, NATIONAL_DEX_MAGCARGO, NATIONAL_DEX_LUDICOLO, NATIONAL_DEX_INFERNAPE, - //NATIONAL_DEX_SCEPTILE, // Mega + // 121.7 lbs / 55.2 kg + //NATIONAL_DEX_SCEPTILE_MEGA, + // 122.1 lbs / 55.4 kg NATIONAL_DEX_ARTICUNO, + // 122.4 lbs / 55.5 kg NATIONAL_DEX_PIGNITE, NATIONAL_DEX_THROH, NATIONAL_DEX_NIHILEGO, + // 123.0 lbs / 55.8 kg NATIONAL_DEX_PILOSWINE, + // 123.5 lbs / 56.0 kg NATIONAL_DEX_SCYTHER, NATIONAL_DEX_GABITE, - //NATIONAL_DEX_GALLADE, // Mega + NATIONAL_DEX_ANNIHILAPE, + // 124.3 lbs / 56.4 kg + //NATIONAL_DEX_GALLADE_MEGA, + // 124.6 lbs / 56.5 kg NATIONAL_DEX_KADABRA, - //NATIONAL_DEX_MR_MIME, // Galarian Form + // 125.2 lbs / 56.8 kg + //NATIONAL_DEX_MR_MIME_GALARIAN, + // 125.7 lbs / 57.0 kg NATIONAL_DEX_SHIELDON, - //NATIONAL_DEX_LUCARIO, // Mega + // 126.8 lbs / 57.5 kg + //NATIONAL_DEX_LUCARIO_MEGA, NATIONAL_DEX_VANILLUXE, + // 127.9 lbs / 58.0 kg NATIONAL_DEX_SMEARGLE, NATIONAL_DEX_HEATMOR, - //NATIONAL_DEX_LURANTIS, // Totem-sized - //NATIONAL_DEX_ZAPDOS, // Galarian Form - //NATIONAL_DEX_SAMUROTT, // Hisuian Form + //NATIONAL_DEX_LURANTIS_TOTEM_SIZED, + NATIONAL_DEX_TOEDSCRUEL, + // 128.3 lbs / 58.2 kg + //NATIONAL_DEX_ZAPDOS_GALARIAN, + //NATIONAL_DEX_SAMUROTT_HISUIAN, NATIONAL_DEX_MR_RIME, + // 129.0 lbs / 58.5 kg NATIONAL_DEX_WHIRLIPEDE, - //NATIONAL_DEX_PINSIR, // Mega + // 130.1 lbs / 59.0 kg + //NATIONAL_DEX_PINSIR_MEGA, NATIONAL_DEX_AERODACTYL, + // 130.3 lbs / 59.1 kg + NATIONAL_DEX_TINKATUFF, + // 131.4 lbs / 59.6 kg NATIONAL_DEX_SHIFTRY, - // 132.3 - 218.0 lbs / 60.0 - 98.9 kg + // 132.3 lbs / 60.0 kg NATIONAL_DEX_NIDOQUEEN, NATIONAL_DEX_MAGNETON, NATIONAL_DEX_KINGLER, NATIONAL_DEX_MOLTRES, NATIONAL_DEX_ARON, NATIONAL_DEX_LATIOS, - //NATIONAL_DEX_GUMSHOOS, // Totem-sized + //NATIONAL_DEX_GUMSHOOS_TOTEM_SIZED, + NATIONAL_DEX_SANDY_SHOCKS, + // 132.7 lbs / 60.2 kg + NATIONAL_DEX_FINIZEN, + NATIONAL_DEX_PALAFIN,//_ZERO, + // 133.2 lbs / 60.4 kg NATIONAL_DEX_CRADILY, + // 133.4 lbs / 60.5 kg NATIONAL_DEX_BRONZOR, NATIONAL_DEX_MUSHARNA, NATIONAL_DEX_OVERQWIL, - NATIONAL_DEX_DEOXYS, // Normal Forme - //NATIONAL_DEX_DEOXYS, // Attack Forme - //NATIONAL_DEX_DEOXYS, // Defense Forme - //NATIONAL_DEX_DEOXYS, // Speed Forme + // 134.0 lbs / 60.8 kg + NATIONAL_DEX_DEOXYS,//_NORMAL, + //NATIONAL_DEX_DEOXYS_ATTACK, + //NATIONAL_DEX_DEOXYS_DEFENSE, + //NATIONAL_DEX_DEOXYS_SPEED, + // 134.5 lbs / 61.0 kg NATIONAL_DEX_STOUTLAND, - NATIONAL_DEX_THUNDURUS, + NATIONAL_DEX_THUNDURUS,//_INCARNATE, + //NATIONAL_DEX_THUNDURUS_THERIAN, NATIONAL_DEX_GRIMMSNARL, + NATIONAL_DEX_MABOSSTIFF, + // 135.6 lbs / 61.5 kg NATIONAL_DEX_AMPHAROS, NATIONAL_DEX_DRAPION, + // 136.5 lbs / 61.9 kg + NATIONAL_DEX_QUAQUAVAL, + // 136.7 lbs / 62.0 kg NATIONAL_DEX_NIDOKING, NATIONAL_DEX_SEISMITOAD, NATIONAL_DEX_FALINKS, - //NATIONAL_DEX_HERACROSS, // Mega + NATIONAL_DEX_CERULEDGE, + // 137.8 lbs / 62.5 kg + //NATIONAL_DEX_HERACROSS_MEGA, + // 138.9 lbs / 63.0 kg NATIONAL_DEX_SERPERIOR, - NATIONAL_DEX_TORNADUS, + NATIONAL_DEX_TORNADUS,//_INCARNATE, + //NATIONAL_DEX_TORNADUS_THERIAN, + NATIONAL_DEX_CYCLIZAR, + // 142.9 lbs / 64.8 kg NATIONAL_DEX_GLIGAR, + // 143.3 lbs / 65.0 kg NATIONAL_DEX_ARBOK, NATIONAL_DEX_MANTYKE, + // 144.4 lbs / 65.5 kg NATIONAL_DEX_LICKITUNG, NATIONAL_DEX_SANDACONDA, - //NATIONAL_DEX_MOLTRES, // Galarian Form + // 145.5 lbs / 66.0 kg + //NATIONAL_DEX_MOLTRES_GALARIAN, + // 146.8 lbs / 66.6 kg NATIONAL_DEX_ELECTRODE, NATIONAL_DEX_RUNERIGUS, - //NATIONAL_DEX_DUGTRIO, // Alolan Form + //NATIONAL_DEX_DUGTRIO_ALOLAN, + // 149.9 lbs / 68.0 kg NATIONAL_DEX_MAGMORTAR, - NATIONAL_DEX_LANDORUS, + NATIONAL_DEX_LANDORUS,//_INCARNATE, + //NATIONAL_DEX_LANDORUS_THERIAN, + // 150.4 lbs / 68.2 kg NATIONAL_DEX_ARMALDO, - //NATIONAL_DEX_SLIGGOO, //Hisuian Form - //NATIONAL_DEX_TYPHLOSION, //Hisuian Form - //NATIONAL_DEX_LATIOS, // Mega + // 151.0 lbs / 68.5 kg + //NATIONAL_DEX_SLIGGOO_HISUIAN, + // 153.9 lbs / 69.8 kg + //NATIONAL_DEX_TYPHLOSION_HISUIAN, + // 154.3 lbs / 70.0 kg + //NATIONAL_DEX_LATIOS_MEGA, NATIONAL_DEX_BISHARP, NATIONAL_DEX_SANDYGAST, NATIONAL_DEX_ZARUDE, + // 155.4 lbs / 70.5 kg NATIONAL_DEX_MACHOKE, - //NATIONAL_DEX_SLOWBRO, // Galarian Form - //NATIONAL_DEX_ELECTRODE //Hisuian Form + //NATIONAL_DEX_SLOWBRO_GALARIAN, + // 156.5 lbs / 71.0 kg + //NATIONAL_DEX_ELECTRODE_HISUIAN, NATIONAL_DEX_TREVENANT, + // 157.0 lbs / 71.2 kg NATIONAL_DEX_STANTLER, + // 157.6 lbs / 71.5 kg NATIONAL_DEX_GRUMPIG, + // 158.7 lbs / 72.0 kg NATIONAL_DEX_LARVITAR, - //NATIONAL_DEX_ZOROARK, //Hisuian Form + // 160.9 lbs / 73.0 kg + //NATIONAL_DEX_ZOROARK_HISUIAN, + // 163.6 lbs / 74.2 kg + NATIONAL_DEX_WO_CHIEN, + // 165.3 lbs / 75.0 kg NATIONAL_DEX_CROBAT, NATIONAL_DEX_QUAGSIRE, NATIONAL_DEX_CORVIKNIGHT, + // 166.4 lbs / 75.5 kg NATIONAL_DEX_MILTANK, + // 166.7 lbs / 75.6 kg NATIONAL_DEX_HYPNO, + // 167.6 lbs / 76.0 kg NATIONAL_DEX_ORANGURU, + // 168.7 lbs / 76.5 kg NATIONAL_DEX_COFAGRIGUS, + // 168.9 lbs / 76.6 kg NATIONAL_DEX_GOLDUCK, + // 170.6 lbs / 77.4 kg NATIONAL_DEX_CACTURNE, + // 172.0 lbs / 78.0 kg NATIONAL_DEX_CARKOL, + // 172.4 lbs / 78.2 kg NATIONAL_DEX_KOMMO_O, + // 173.1 lbs / 78.5 kg NATIONAL_DEX_SLOWBRO, - //NATIONAL_DEX_WISHIWASHI, // School Form - //NATIONAL_DEX_AERODACTYL, // Mega + // 173.3 lbs / 78.6 kg + //NATIONAL_DEX_WISHIWASHI_SCHOOL, + // 174.2 lbs / 79.0 kg + //NATIONAL_DEX_AERODACTYL_MEGA, + NATIONAL_DEX_KLAWF, + // 175.3 lbs / 79.5 kg NATIONAL_DEX_TYPHLOSION, NATIONAL_DEX_SLOWKING, - //NATIONAL_DEX_SLOWKING, // Galarian Form + //NATIONAL_DEX_SLOWKING_GALARIAN, NATIONAL_DEX_ZEBSTRIKA, + // 176.4 lbs / 80.0 kg NATIONAL_DEX_KANGASKHAN, NATIONAL_DEX_STARMIE, NATIONAL_DEX_SWALOT, - //NATIONAL_DEX_RAPIDASH, // Galarian Form + //NATIONAL_DEX_RAPIDASH_GALARIAN, NATIONAL_DEX_TORKOAL, + // 177.5 lbs / 80.5 kg NATIONAL_DEX_EELEKTROSS, NATIONAL_DEX_MAGEARNA, - //NATIONAL_DEX_MAGEARNA, // Original Color + //NATIONAL_DEX_MAGEARNA_ORIGINAL_COLOR, + // 178.6 lbs / 81.0 kg NATIONAL_DEX_CARRACOSTA, NATIONAL_DEX_KLINKLANG, + // 178.8 lbs / 81.1 kg NATIONAL_DEX_ZOROARK, - //NATIONAL_DEX_SALAZZLE, // Totem-sized + //NATIONAL_DEX_SALAZZLE_TOTEM_SIZED, + // 179.7 lbs / 81.5 kg NATIONAL_DEX_PYROAR, NATIONAL_DEX_DRAGALGE, + // 180.6 lbs / 81.9 kg NATIONAL_DEX_SWAMPERT, + // 180.8 lbs / 82.0 kg NATIONAL_DEX_FLYGON, NATIONAL_DEX_ARAQUANID, + // 181.9 lbs / 82.5 kg NATIONAL_DEX_GENESECT, + // 182.5 lbs / 82.8 kg NATIONAL_DEX_PASSIMIAN, + // 183.0 lbs / 83.0 kg NATIONAL_DEX_INCINEROAR, + // 185.2 lbs / 84.0 kg NATIONAL_DEX_EXPLOUD, + // 186.3 lbs / 84.5 kg NATIONAL_DEX_EMPOLEON, + // 187.4 lbs / 85.0 kg + //NATIONAL_DEX_TAUROS_PALDEAN_BLAZE_BREED, NATIONAL_DEX_NOIVERN, + NATIONAL_DEX_ARMAROUGE, + // 187.8 lbs / 85.2 kg NATIONAL_DEX_DODRIO, + // 188.5 lbs / 85.5 kg NATIONAL_DEX_BLASTOISE, + // 188.7 lbs / 85.6 kg NATIONAL_DEX_CRESSELIA, + // 190.5 lbs / 86.4 kg NATIONAL_DEX_MAKUHITA, + // 191.8 lbs / 87.0 kg NATIONAL_DEX_CONKELDURR, + // 193.1 lbs / 87.6 kg NATIONAL_DEX_SEALEO, + // 194.9 lbs / 88.4 kg NATIONAL_DEX_TAUROS, + // 195.8 lbs / 88.8 kg NATIONAL_DEX_FERALIGATR, NATIONAL_DEX_SHARPEDO, - NATIONAL_DEX_EISCUE, + // 196.2 lbs / 89.0 kg + NATIONAL_DEX_EISCUE,//_ICE_FACE, + //NATIONAL_DEX_EISCUE_NOICE_FACE, NATIONAL_DEX_KLEAVOR, + // 198.4 lbs / 90.0 kg NATIONAL_DEX_SEEL, NATIONAL_DEX_CHESNAUGHT, NATIONAL_DEX_RILLABOOM, + NATIONAL_DEX_ESPATHRA, + NATIONAL_DEX_VELUZA, + // 199.5 lbs / 90.5 kg NATIONAL_DEX_CHARIZARD, - NATIONAL_DEX_RAPIDASH, + // 200.6 lbs / 91.0 kg NATIONAL_DEX_GOGOAT, + // 202.8 lbs / 92.0 kg NATIONAL_DEX_GOLETT, - NATIONAL_DEX_SAWSBUCK, - NATIONAL_DEX_DARMANITAN, + NATIONAL_DEX_SLITHER_WING, + // 203.3 lbs / 92.2 kg + NATIONAL_DEX_OKIDOGI, + // 203.9 lbs / 92.5 kg + NATIONAL_DEX_SAWSBUCK,//_SPRING, + //NATIONAL_DEX_SAWSBUCK_SUMMER, + //NATIONAL_DEX_SAWSBUCK_AUTUMN, + //NATIONAL_DEX_SAWSBUCK_WINTER, + // 204.8 lbs / 92.9 kg + NATIONAL_DEX_DARMANITAN,//_STANDARD_MODE, + //NATIONAL_DEX_DARMANITAN_ZEN_MODE, + // 208.6 lbs / 94.6 kg NATIONAL_DEX_BOUFFALANT, NATIONAL_DEX_SAMUROTT, + // 209.4 lbs / 95.0 kg NATIONAL_DEX_RAPIDASH, NATIONAL_DEX_GARCHOMP, + // 209.7 lbs / 95.1 kg NATIONAL_DEX_WYRDEER, + // 209.9 lbs / 95.2 kg NATIONAL_DEX_BELDUM, + // 211.6 lbs / 96.0 kg NATIONAL_DEX_BARBARACLE, + // 212.3 lbs / 96.3 kg NATIONAL_DEX_KROOKODILE, + // 212.8 lbs / 97.0 kg NATIONAL_DEX_NOSEPASS, NATIONAL_DEX_GROTLE, - //NATIONAL_DEX_MAROWAK, // Alolan Form, Totem-sized - // 218.3 - 220.2 lbs / 99.0 - 99.9 kg + // 214.7 lbs / 97.4 kg + //NATIONAL_DEX_PALAFIN_HERO, + // 216.1 lbs / 98.0 kg + //NATIONAL_DEX_MAROWAK_ALOLAN_TOTEM_SIZED, + // 219.4 lbs / 99.5 kg NATIONAL_DEX_BERGMITE, - // 220.5 - 225.5 lbs / 100.0 - 102.3 kg + // 220.5 lbs / 100.0 kg NATIONAL_DEX_VENUSAUR, - //NATIONAL_DEX_KANGASKHAN, // Mega + //NATIONAL_DEX_KANGASKHAN_MEGA, NATIONAL_DEX_TROPIUS, NATIONAL_DEX_XURKITREE, NATIONAL_DEX_CUFANT, - //NATIONAL_DEX_CHARIZARD, // Mega Y + // 221.6 lbs / 100.5 kg + //NATIONAL_DEX_CHARIZARD_MEGA_Y, NATIONAL_DEX_MEGANIUM, - NATIONAL_DEX_SILVALLY, - //NATIONAL_DEX_BLASTOISE, // Mega - //NATIONAL_DEX_SWAMPERT, // Mega + NATIONAL_DEX_SILVALLY,//_NORMAL, + //NATIONAL_DEX_SILVALLY_FIGHTING, + //NATIONAL_DEX_SILVALLY_FLYING, + //NATIONAL_DEX_SILVALLY_POISON, + //NATIONAL_DEX_SILVALLY_GROUND, + //NATIONAL_DEX_SILVALLY_ROCK, + //NATIONAL_DEX_SILVALLY_BUG, + //NATIONAL_DEX_SILVALLY_GHOST, + //NATIONAL_DEX_SILVALLY_STEEL, + //NATIONAL_DEX_SILVALLY_FIRE, + //NATIONAL_DEX_SILVALLY_WATER, + //NATIONAL_DEX_SILVALLY_GRASS, + //NATIONAL_DEX_SILVALLY_ELECTRIC, + //NATIONAL_DEX_SILVALLY_PSYCHIC, + //NATIONAL_DEX_SILVALLY_ICE, + //NATIONAL_DEX_SILVALLY_DRAGON, + //NATIONAL_DEX_SILVALLY_DARK, + //NATIONAL_DEX_SILVALLY_FAIRY, + // 222.9 lbs / 101.1 kg + //NATIONAL_DEX_BLASTOISE_MEGA, + // 224.9 lbs / 102.0 kg + //NATIONAL_DEX_SWAMPERT_MEGA, NATIONAL_DEX_BOLDORE, - // 225.8 - 330.5 lbs / 102.4 - 149.9 kg + // 226.0 lbs / 102.5 kg NATIONAL_DEX_RAMPARDOS, + // 226.2 lbs / 102.6 kg NATIONAL_DEX_SALAMENCE, + // 231.5 lbs / 105.0 kg NATIONAL_DEX_GRAVELER, NATIONAL_DEX_MUNCHLAX, - //NATIONAL_DEX_RATICATE, // Alolan Form, Totem-sized - NATIONAL_DEX_URSHIFU, // Single Strike Style - //NATIONAL_DEX_URSHIFU, // Rapid Strike Style + //NATIONAL_DEX_RATICATE_ALOLAN_TOTEM_SIZED, + NATIONAL_DEX_URSHIFU,//_SINGLE_STRIKE_STYLE, + //NATIONAL_DEX_URSHIFU_RAPID_STRIKE_STYLE, + NATIONAL_DEX_NACLSTACK, + // 232.6 lbs / 105.5 kg NATIONAL_DEX_HAXORUS, + // 235.0 lbs / 106.6 kg NATIONAL_DEX_DUSKNOIR, + // 236.6 lbs / 107.3 kg NATIONAL_DEX_GARBODOR, + // 238.1 lbs / 108.0 kg NATIONAL_DEX_CLAYDOL, NATIONAL_DEX_SPIRITOMB, NATIONAL_DEX_GOLISOPOD, - //NATIONAL_DEX_GRAVELER, // Alolan Form + // 242.5 lbs / 110.0 kg + //NATIONAL_DEX_GRAVELER_ALOLAN, + //NATIONAL_DEX_TAUROS_PALDEAN_AQUA_BREED, NATIONAL_DEX_FERROTHORN, NATIONAL_DEX_MUDBRAY, - NATIONAL_DEX_ZACIAN, // Hero of Many Battles - NATIONAL_DEX_BASCULEGION, - //NATIONAL_DEX_CHARIZARD, // Mega X + NATIONAL_DEX_ZACIAN,//_HERO_OF_MANY_BATTLES, + NATIONAL_DEX_BASCULEGION,//_MALE, + //NATIONAL_DEX_BASCULEGION_FEMALE, + // 243.6 lbs / 110.5 kg + //NATIONAL_DEX_CHARIZARD_MEGA_X, NATIONAL_DEX_SHELGON, - //NATIONAL_DEX_SALAMENCE, // Mega + // 244.7 lbs / 111.0 kg + NATIONAL_DEX_IRON_JUGULIS, + // 248.2 lbs / 112.6 kg + //NATIONAL_DEX_SALAMENCE_MEGA, + // 248.7 lbs / 112.8 kg + NATIONAL_DEX_TINKATON, + // 249.1 lbs / 113.0 kg + NATIONAL_DEX_BELLIBOLT, + // 253.5 lbs / 115.0 kg NATIONAL_DEX_RHYHORN, + //NATIONAL_DEX_TAUROS_PALDEAN_COMBAT_BREED, + // 254.6 lbs / 115.5 kg NATIONAL_DEX_DREDNAW, + // 257.9 lbs / 117.0 kg NATIONAL_DEX_SIRFETCHD, + // 260.1 lbs / 118.0 kg NATIONAL_DEX_SCIZOR, + // 264.6 lbs / 120.0 kg NATIONAL_DEX_DEWGONG, - //NATIONAL_DEX_SLOWBRO, // Mega + //NATIONAL_DEX_SLOWBRO_MEGA, NATIONAL_DEX_EXEGGUTOR, NATIONAL_DEX_RHYDON, NATIONAL_DEX_DONPHAN, NATIONAL_DEX_LAIRON, NATIONAL_DEX_LUNALA, NATIONAL_DEX_CENTISKORCH, - //NATIONAL_DEX_DARMANITAN, // Galarian Form + //NATIONAL_DEX_DARMANITAN_GALARIAN_STANDARD_MODE, + //NATIONAL_DEX_DARMANITAN_GALARIAN_ZEN_MODE, + NATIONAL_DEX_OINKOLOGNE,//_MALE, + //NATIONAL_DEX_OINKOLOGNE_FEMALE, + NATIONAL_DEX_REVAVROOM, + NATIONAL_DEX_KINGAMBIT, + // 265.7 lbs / 120.5 kg NATIONAL_DEX_TYPE_NULL, + // 269.0 lbs / 122.0 kg NATIONAL_DEX_MEWTWO, - //NATIONAL_DEX_SCIZOR, // Mega + // 275.6 lbs / 125.0 kg + //NATIONAL_DEX_SCIZOR_MEGA, + NATIONAL_DEX_IRON_LEAVES, + // 277.3 lbs / 125.8 kg NATIONAL_DEX_FORRETRESS, NATIONAL_DEX_URSARING, - //NATIONAL_DEX_MEWTWO, // Mega X + // 280.0 lbs / 127.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_X, + // 283.5 lbs / 128.6 kg NATIONAL_DEX_TANGROWTH, + // 286.6 lbs / 130.0 kg NATIONAL_DEX_MACHAMP, NATIONAL_DEX_WAILMER, - //NATIONAL_DEX_SHARPEDO, // Mega + // 287.3 lbs / 130.3 kg + //NATIONAL_DEX_SHARPEDO_MEGA, + // 287.7 lbs / 130.5 kg NATIONAL_DEX_SLAKING, + // 292.1 lbs / 132.5 kg NATIONAL_DEX_CLOYSTER, + // 297.6 lbs / 135.0 kg NATIONAL_DEX_JELLICENT, NATIONAL_DEX_BEWEAR, + // 298.7 lbs / 135.5 kg NATIONAL_DEX_ABOMASNOW, + // 299.8 lbs / 136.0 kg NATIONAL_DEX_PANGORO, + // 305.6 lbs / 138.6 kg NATIONAL_DEX_ELECTIVIRE, + // 306.4 lbs / 139.0 kg NATIONAL_DEX_DRUDDIGON, + // 308.6 lbs / 140.0 kg NATIONAL_DEX_LICKILICKY, + // 319.7 lbs / 145.0 kg NATIONAL_DEX_REGIELEKI, - //NATIONAL_DEX_VIKAVOLT, // Totem-sized + // 325.2 lbs / 147.5 kg + //NATIONAL_DEX_VIKAVOLT_TOTEM_SIZED, + // 326.3 lbs / 148.0 kg NATIONAL_DEX_CRYOGONAL, + // 329.6 lbs / 149.5 kg NATIONAL_DEX_BASTIODON, - // 330.7 - 440.7 lbs / 150.0 - 199.9 kg + // 330.7 lbs / 150.0 kg NATIONAL_DEX_EMBOAR, NATIONAL_DEX_NAGANADEL, NATIONAL_DEX_ARCTOZOLT, + // 331.8 lbs / 150.5 kg NATIONAL_DEX_GOODRA, + // 332.0 lbs / 150.6 kg NATIONAL_DEX_WALREIN, + // 335.1 lbs / 152.0 kg NATIONAL_DEX_KINGDRA, NATIONAL_DEX_PUPITAR, + // 335.5 lbs / 152.2 kg + NATIONAL_DEX_CHIEN_PAO, + // 339.5 lbs / 154.0 kg NATIONAL_DEX_SOLROCK, + // 341.7 lbs / 155.0 kg NATIONAL_DEX_ARCANINE, - //NATIONAL_DEX_VENUSAUR, // Mega + // 342.8 lbs / 155.5 kg + //NATIONAL_DEX_VENUSAUR_MEGA, + // 352.7 lbs / 160.0 kg NATIONAL_DEX_HYDREIGON, - //NATIONAL_DEX_SABLEYE, // Mega + NATIONAL_DEX_FARIGIRAF, + // 354.9 lbs / 161.0 kg + //NATIONAL_DEX_SABLEYE_MEGA, + // 357.1 lbs / 162.0 kg NATIONAL_DEX_MILOTIC, - //NATIONAL_DEX_ARCANINE, //Hisuian Form + // 370.4 lbs / 168.0 kg + //NATIONAL_DEX_ARCANINE_HISUIAN, NATIONAL_DEX_LUNATONE, + // 385.8 lbs / 175.0 kg NATIONAL_DEX_REGICE, NATIONAL_DEX_ARCTOVISH, + // 392.4 lbs / 178.0 kg NATIONAL_DEX_RAIKOU, + // 396.8 lbs / 180.0 kg NATIONAL_DEX_MAGNEZONE, NATIONAL_DEX_CRABOMINABLE, - //NATIONAL_DEX_ABOMASNOW, // Mega + // 407.9 lbs / 185.0 kg + //NATIONAL_DEX_ABOMASNOW_MEGA, NATIONAL_DEX_DRAMPA, + // 412.3 lbs / 187.0 kg NATIONAL_DEX_SUICUNE, NATIONAL_DEX_BRONZONG, + // 418.9 lbs / 190.0 kg NATIONAL_DEX_DRACOZOLT, + // 429.9 lbs / 195.0 kg NATIONAL_DEX_VOLCANION, + // 436.5 lbs / 198.0 kg NATIONAL_DEX_ENTEI, + // 438.7 lbs / 199.0 kg NATIONAL_DEX_HO_OH, - // 440.9 - 451.3 lbs / 200.0 - 204.7 kg + // 440.9 lbs / 200.0 kg NATIONAL_DEX_CRUSTLE, NATIONAL_DEX_VIRIZION, NATIONAL_DEX_REGIDRAGO, + // 442.0 lbs / 200.5 kg NATIONAL_DEX_SCOLIPEDE, + // 445.3 lbs / 202.0 kg NATIONAL_DEX_TYRANITAR, + // 446.4 lbs / 202.5 kg NATIONAL_DEX_METANG, + // 447.5 lbs / 203.0 kg NATIONAL_DEX_YVELTAL, - // 451.5 - 661.2 lbs / 204.8 - 299.9 kg + // 451.9 lbs / 205.0 kg NATIONAL_DEX_REGISTEEL, + // 455.3 lbs / 206.5 kg NATIONAL_DEX_RAYQUAZA, - //NATIONAL_DEX_KOMMO_O, // Totem-sized + // 457.5 lbs / 207.5 kg + //NATIONAL_DEX_KOMMO_O_TOTEM_SIZED, + // 463.0 lbs / 210.0 kg NATIONAL_DEX_ONIX, NATIONAL_DEX_DRAGONITE, NATIONAL_DEX_DHELMISE, - NATIONAL_DEX_ZAMAZENTA, // Hero of Many Battles + NATIONAL_DEX_ZAMAZENTA,//_HERO_OF_MANY_BATTLES, + NATIONAL_DEX_BAXCALIBUR, + // 467.4 lbs / 212.0 kg NATIONAL_DEX_TURTONATOR, - NATIONAL_DEX_XERNEAS, + // 474.0 lbs / 215.0 kg + NATIONAL_DEX_XERNEAS,//_NEUTRAL, + //NATIONAL_DEX_XERNEAS_ACTIVE, NATIONAL_DEX_DRACOVISH, + // 476.2 lbs / 216.0 kg NATIONAL_DEX_LUGIA, - //NATIONAL_DEX_ARAQUANID, // Totem-sized + // 479.5 lbs / 217.5 kg + //NATIONAL_DEX_ARAQUANID_TOTEM_SIZED, + // 485.0 lbs / 220.0 kg NATIONAL_DEX_LAPRAS, NATIONAL_DEX_MANTINE, NATIONAL_DEX_CAMERUPT, + NATIONAL_DEX_DONDOZO, + // 491.6 lbs / 223.0 kg + NATIONAL_DEX_CLODSIRE, + // 496.0 lbs / 225.0 kg NATIONAL_DEX_AURORUS, + // 507.1 lbs / 230.0 kg NATIONAL_DEX_REGIROCK, NATIONAL_DEX_SOLGALEO, NATIONAL_DEX_NECROZMA, - //NATIONAL_DEX_NECROZMA, // Ultra + //NATIONAL_DEX_NECROZMA_ULTRA, + // 518.1 lbs / 235.0 kg NATIONAL_DEX_GYARADOS, + // 529.1 lbs / 240.0 kg + NATIONAL_DEX_GARGANACL, + NATIONAL_DEX_IRON_TREADS, + NATIONAL_DEX_MIRAIDON, + // 551.2 lbs / 250.0 kg NATIONAL_DEX_COBALION, NATIONAL_DEX_PALOSSAND, + // 559.5 lbs / 253.8 kg NATIONAL_DEX_HARIYAMA, - //NATIONAL_DEX_TYRANITAR, // Mega + // 562.2 lbs / 255.0 kg + //NATIONAL_DEX_TYRANITAR_MEGA, + // 565.5 lbs / 256.5 kg NATIONAL_DEX_GLALIE, + // 573.2 lbs / 260.0 kg NATIONAL_DEX_GIGALITH, NATIONAL_DEX_BEARTIC, NATIONAL_DEX_TERRAKION, - //NATIONAL_DEX_AVALUGG, //Hisuian Form + // 578.5 lbs / 262.4 kg + //NATIONAL_DEX_AVALUGG_HISUIAN, + // 595.2 lbs / 270.0 kg NATIONAL_DEX_TYRANTRUM, + // 617.3 lbs / 280.0 kg + NATIONAL_DEX_WALKING_WAKE, + // 623.5 lbs / 282.8 kg NATIONAL_DEX_RHYPERIOR, + // 639.3 lbs / 290.0 kg NATIONAL_DEX_URSALUNA, + // 641.5 lbs / 291.0 kg NATIONAL_DEX_MAMOSWINE, - // 661.4 - 667.0 lbs / 300.0 - 307.1 kg + // 661.4 lbs / 300.0 kg NATIONAL_DEX_GOLEM, NATIONAL_DEX_HIPPOWDON, - //NATIONAL_DEX_GYARADOS, // Mega - NATIONAL_DEX_ZYGARDE, // 50% Forme - // 677.3 - 667.0 lbs / 307.2 - 359.9 kg + // 668.0 lbs / 303.0 kg + NATIONAL_DEX_IRON_THORNS, + NATIONAL_DEX_KORAIDON, + // 672.4 lbs / 305.0 kg + //NATIONAL_DEX_GYARADOS_MEGA, + NATIONAL_DEX_ZYGARDE,//_50, + //NATIONAL_DEX_ZYGARDE_50_POWER_CONSTRUCT, + // 683.4 lbs / 310.0 kg NATIONAL_DEX_TORTERRA, + NATIONAL_DEX_ORTHWORM, + // 684.5 lbs / 310.5 kg NATIONAL_DEX_COALOSSAL, - //NATIONAL_DEX_GOLEM, // Alolan Form - NATIONAL_DEX_ARCEUS, - //NATIONAL_DEX_CAMERUPT, // Mega + // 696.7 lbs / 316.0 kg + //NATIONAL_DEX_GOLEM_ALOLAN, + // 705.4 lbs / 320.0 kg + NATIONAL_DEX_ARCEUS,//_NORMAL, + //NATIONAL_DEX_ARCEUS_FIGHTING, + //NATIONAL_DEX_ARCEUS_FLYING, + //NATIONAL_DEX_ARCEUS_POISON, + //NATIONAL_DEX_ARCEUS_GROUND, + //NATIONAL_DEX_ARCEUS_ROCK, + //NATIONAL_DEX_ARCEUS_BUG, + //NATIONAL_DEX_ARCEUS_GHOST, + //NATIONAL_DEX_ARCEUS_STEEL, + //NATIONAL_DEX_ARCEUS_FIRE, + //NATIONAL_DEX_ARCEUS_WATER, + //NATIONAL_DEX_ARCEUS_GRASS, + //NATIONAL_DEX_ARCEUS_ELECTRIC, + //NATIONAL_DEX_ARCEUS_PSYCHIC, + //NATIONAL_DEX_ARCEUS_ICE, + //NATIONAL_DEX_ARCEUS_DRAGON, + //NATIONAL_DEX_ARCEUS_DARK, + NATIONAL_DEX_GREAT_TUSK, + // 705.4 lbs / 320.5 kg + //NATIONAL_DEX_CAMERUPT_MEGA, + // 716.5 lbs / 325.0 kg NATIONAL_DEX_KYUREM, + //NATIONAL_DEX_KYUREM_WHITE, + //NATIONAL_DEX_KYUREM_BLACK, + // 719.8 lbs / 326.5 kg + NATIONAL_DEX_SKELEDIRGE, + // 727.5 lbs / 330.0 kg NATIONAL_DEX_GOLURK, NATIONAL_DEX_RESHIRAM, + // 735.5 lbs / 333.6 kg NATIONAL_DEX_BUZZWOLE, - //NATIONAL_DEX_GOODRA, //Hisuian Form + // 736.6 lbs / 334.1 kg + //NATIONAL_DEX_GOODRA_HISUIAN, + // 740.8 lbs / 336.0 kg NATIONAL_DEX_PALKIA, + // 749.6 lbs / 340.0 kg NATIONAL_DEX_PROBOPASS, + // 760.6 lbs / 345.0 kg NATIONAL_DEX_ZEKROM, - //NATIONAL_DEX_NECROZMA, // Dawn Wings - //NATIONAL_DEX_GLALIE, // Mega + // 771.6 lbs / 350.0 kg + //NATIONAL_DEX_NECROZMA_DAWN_WINGS, + // 772.1 lbs / 350.2 kg + //NATIONAL_DEX_GLALIE_MEGA, + // 776.0 lbs / 352.0 kg NATIONAL_DEX_KYOGRE, - //NATIONAL_DEX_ZACIAN, // Crowned Sword - // 793.7 - 902.8 lbs / 360.0 - 409.5 kg + // 782.6 lbs / 355.0 kg + //NATIONAL_DEX_ZACIAN_CROWNED_SWORD, + // 793.7 lbs / 360.0 kg NATIONAL_DEX_AGGRON, - //NATIONAL_DEX_RAYQUAZA, // Mega - //NATIONAL_DEX_AGGRON, // Mega + // 837.8 lbs / 380.0 kg + NATIONAL_DEX_ROARING_MOON, + // 839.3 lbs / 380.7 kg + NATIONAL_DEX_IRON_HANDS, + // 864.2 lbs / 392.0 kg + //NATIONAL_DEX_RAYQUAZA_MEGA, + // 870.8 lbs / 395.0 kg + //NATIONAL_DEX_AGGRON_MEGA, + // 877.4 lbs / 398.0 kg NATIONAL_DEX_WAILORD, + // 881.8 lbs / 400.0 kg NATIONAL_DEX_STEELIX, - // 903.0 - 2204.4 lbs / 409.6 - 999.9 kg - //NATIONAL_DEX_EXEGGUTOR, // Alolan Form + // 916.2 lbs / 415.6 kg + //NATIONAL_DEX_EXEGGUTOR_ALOLAN, + // 925.9 lbs / 420.0 kg NATIONAL_DEX_REGIGIGAS, - //NATIONAL_DEX_KYOGRE, // Primal + // 948.0 lbs / 430.0 kg + //NATIONAL_DEX_KYOGRE_PRIMAL, NATIONAL_DEX_HEATRAN, + // 1014.1 lbs / 460.0 kg NATIONAL_DEX_SNORLAX, - //NATIONAL_DEX_NECROZMA, // Dusk Mane - //NATIONAL_DEX_HOOPA, // Unbound + //NATIONAL_DEX_NECROZMA_DUSK_MANE, + // 1080.3 lbs / 490.0 kg + //NATIONAL_DEX_HOOPA_UNBOUND, + // 1113.3 lbs / 505.0 kg NATIONAL_DEX_AVALUGG, + // 1146.4 lbs / 520.0 kg NATIONAL_DEX_STONJOURNER, + // 1212.5 lbs / 550.0 kg NATIONAL_DEX_METAGROSS, - //NATIONAL_DEX_ZYGARDE, // Complete Forme - //NATIONAL_DEX_GIRATINA, // Origin Forme - //NATIONAL_DEX_PALKIA, // Origin Form + // 1344.8 lbs / 610.0 kg + //NATIONAL_DEX_ZYGARDE_COMPLETE, + // 1433.8 lbs / 650.0 kg + //NATIONAL_DEX_GIRATINA_ORIGIN, + NATIONAL_DEX_COPPERAJAH, + // 1452.8 lbs / 659.0 kg + //NATIONAL_DEX_PALKIA_ORIGIN, + // 1505.8 lbs / 683.0 kg NATIONAL_DEX_DIALGA, - //NATIONAL_DEX_STEELIX, // Mega - NATIONAL_DEX_GIRATINA, // Altered Forme - //NATIONAL_DEX_ZAMAZENTA, // Crowned Shield + // 1542.6 lbs / 699.7 kg + NATIONAL_DEX_TING_LU, + // 1543.2 lbs / 700.0 kg + NATIONAL_DEX_CETITAN, + // 1631.4 lbs / 740.0 kg + //NATIONAL_DEX_STEELIX_MEGA, + // 1653.5 lbs / 750.0 kg + NATIONAL_DEX_GIRATINA,//_ALTERED, + // 1730.6 lbs / 785.0 kg + //NATIONAL_DEX_ZAMAZENTA_CROWNED_SHIELD, + // 1763.7 lbs / 800.0 kg NATIONAL_DEX_MELMETAL, NATIONAL_DEX_GLASTRIER, - //NATIONAL_DEX_CALYREX, // Ice Rider + // 1783.8 lbs / 809.1 kg + //NATIONAL_DEX_CALYREX_ICE_RIDER, + // 1807.8 lbs / 820.0 kg NATIONAL_DEX_STAKATAKA, - //NATIONAL_DEX_DIALGA, // Origin Form + // 1871.0 lbs / 848.7 kg + //NATIONAL_DEX_DIALGA_ORIGIN, + // 1957.7 lbs / 888.0 kg NATIONAL_DEX_GUZZLORD, + // 2028.3 lbs / 920.0 kg NATIONAL_DEX_MUDSDALE, - //NATIONAL_DEX_METAGROSS, // Mega + // 2078.7 lbs / 942.9 kg + //NATIONAL_DEX_METAGROSS_MEGA, + // 2094.4 lbs / 950.0 kg NATIONAL_DEX_GROUDON, NATIONAL_DEX_ETERNATUS, - //NATIONAL_DEX_GROUDON, // Primal + // 2204.0 lbs / 999.7 kg + //NATIONAL_DEX_GROUDON_PRIMAL, + // 2204.4 lbs / 999.9 kg NATIONAL_DEX_COSMOEM, NATIONAL_DEX_CELESTEELA, }; @@ -2001,42 +2915,62 @@ const u16 gPokedexOrder_Height[] = { // 0'04" / 0.1m NATIONAL_DEX_JOLTIK, - NATIONAL_DEX_FLABEBE, + NATIONAL_DEX_FLABEBE,//_RED_FLOWER, + //NATIONAL_DEX_FLABEBE_YELLOW_FLOWER, + //NATIONAL_DEX_FLABEBE_ORANGE_FLOWER, + //NATIONAL_DEX_FLABEBE_BLUE_FLOWER, + //NATIONAL_DEX_FLABEBE_WHITE_FLOWER, NATIONAL_DEX_CUTIEFLY, NATIONAL_DEX_COMFEY, NATIONAL_DEX_COSMOEM, - NATIONAL_DEX_SINISTEA, + NATIONAL_DEX_SINISTEA,//_PHONY, + //NATIONAL_DEX_SINISTEA_ANTIQUE, + //NATIONAL_DEX_GIMMIGHOUL_ROAMING, + NATIONAL_DEX_POLTCHAGEIST, // 0'08" / 0.2m NATIONAL_DEX_DIGLETT, - //NATIONAL_DEX_DIGLETT, // Alolan Form + //NATIONAL_DEX_DIGLETT_ALOLAN, NATIONAL_DEX_NATU, NATIONAL_DEX_AZURILL, NATIONAL_DEX_BUDEW, - NATIONAL_DEX_BURMY, + NATIONAL_DEX_BURMY,//_PLANT_CLOAK, + //NATIONAL_DEX_BURMY_SANDY_CLOAK, + //NATIONAL_DEX_BURMY_TRASH_CLOAK, NATIONAL_DEX_CHINGLING, - NATIONAL_DEX_SHAYMIN, // Land Forme + NATIONAL_DEX_SHAYMIN,//_LAND, NATIONAL_DEX_FOONGUS, NATIONAL_DEX_TYNAMO, - NATIONAL_DEX_FLOETTE, + NATIONAL_DEX_FLOETTE,//_RED_FLOWER, + //NATIONAL_DEX_FLOETTE_YELLOW_FLOWER, + //NATIONAL_DEX_FLOETTE_ORANGE_FLOWER, + //NATIONAL_DEX_FLOETTE_BLUE_FLOWER, + //NATIONAL_DEX_FLOETTE_WHITE_FLOWER, + //NATIONAL_DEX_FLOETTE_ETERNAL_FLOWER, NATIONAL_DEX_SPRITZEE, NATIONAL_DEX_DEDENNE, NATIONAL_DEX_KLEFKI, NATIONAL_DEX_RIBOMBEE, - NATIONAL_DEX_WISHIWASHI, // Solo Form + NATIONAL_DEX_WISHIWASHI,//_SOLO, NATIONAL_DEX_MORELULL, - NATIONAL_DEX_MIMIKYU, + NATIONAL_DEX_MIMIKYU,//_DISGUISED, + //NATIONAL_DEX_MIMIKYU_BUSTED, NATIONAL_DEX_COSMOG, NATIONAL_DEX_MELTAN, NATIONAL_DEX_ROOKIDEE, NATIONAL_DEX_APPLIN, NATIONAL_DEX_POLTEAGEIST, NATIONAL_DEX_MILCERY, + NATIONAL_DEX_NYMBLE, + NATIONAL_DEX_SHROODLE, + NATIONAL_DEX_RELLOR, + NATIONAL_DEX_FLITTLE, + NATIONAL_DEX_SINISTCHA, // 1'00" / 0.3m NATIONAL_DEX_CATERPIE, NATIONAL_DEX_WEEDLE, NATIONAL_DEX_PIDGEY, NATIONAL_DEX_RATTATA, - //NATIONAL_DEX_RATTATA, // Alolan Form + //NATIONAL_DEX_RATTATA_ALOLAN, NATIONAL_DEX_SPEAROW, NATIONAL_DEX_PARAS, NATIONAL_DEX_MAGNEMITE, @@ -2051,13 +2985,16 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_WURMPLE, NATIONAL_DEX_TAILLOW, NATIONAL_DEX_ROSELIA, - NATIONAL_DEX_CASTFORM, + NATIONAL_DEX_CASTFORM,//_NORMAL, + //NATIONAL_DEX_CASTFORM_SUNNY, + //NATIONAL_DEX_CASTFORM_RAINY, + //NATIONAL_DEX_CASTFORM_SNOWY, NATIONAL_DEX_JIRACHI, NATIONAL_DEX_STARLY, NATIONAL_DEX_KRICKETOT, NATIONAL_DEX_COMBEE, - NATIONAL_DEX_SHELLOS, // West Sea - //NATIONAL_DEX_SHELLOS, // East Sea + NATIONAL_DEX_SHELLOS,//_WEST_SEA, + //NATIONAL_DEX_SHELLOS_EAST_SEA, NATIONAL_DEX_ROTOM, NATIONAL_DEX_UXIE, NATIONAL_DEX_MESPRIT, @@ -2079,7 +3016,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ESPURR, NATIONAL_DEX_CARBINK, NATIONAL_DEX_GOOMY, - //NATIONAL_DEX_PUMPKABOO, // Small Size + //NATIONAL_DEX_PUMPKABOO_SMALL, NATIONAL_DEX_ROWLET, NATIONAL_DEX_PIKIPEK, NATIONAL_DEX_DEWPIDER, @@ -2100,14 +3037,15 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ALCREMIE, NATIONAL_DEX_PINCURCHIN, NATIONAL_DEX_SNOM, - NATIONAL_DEX_MORPEKO, + NATIONAL_DEX_MORPEKO,//_FULL_BELLY, + //NATIONAL_DEX_MORPEKO_HANGRY, NATIONAL_DEX_PIKACHU, NATIONAL_DEX_NIDORAN_F, NATIONAL_DEX_MEOWTH, - //NATIONAL_DEX_MEOWTH, // Alolan Form - //NATIONAL_DEX_MEOWTH, // Galarian Form + //NATIONAL_DEX_MEOWTH_ALOLAN, + //NATIONAL_DEX_MEOWTH_GALARIAN, NATIONAL_DEX_GEODUDE, - //NATIONAL_DEX_GEODUDE, // Alolan Form + //NATIONAL_DEX_GEODUDE_ALOLAN, NATIONAL_DEX_KRABBY, NATIONAL_DEX_EXEGGCUTE, NATIONAL_DEX_CUBONE, @@ -2123,7 +3061,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TORCHIC, NATIONAL_DEX_MUDKIP, NATIONAL_DEX_ZIGZAGOON, - //NATIONAL_DEX_ZIGZAGOON, // Galarian Form + //NATIONAL_DEX_ZIGZAGOON_GALARIAN, NATIONAL_DEX_RALTS, NATIONAL_DEX_SHROOMISH, NATIONAL_DEX_ARON, @@ -2143,7 +3081,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_STUNKY, NATIONAL_DEX_FINNEON, NATIONAL_DEX_PHIONE, - //NATIONAL_DEX_SHAYMIN, // Sky Forme + //NATIONAL_DEX_SHAYMIN_SKY, NATIONAL_DEX_VICTINI, NATIONAL_DEX_LILLIPUP, NATIONAL_DEX_PURRLOIN, @@ -2161,15 +3099,15 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SWIRLIX, NATIONAL_DEX_INKAY, NATIONAL_DEX_PHANTUMP, - NATIONAL_DEX_PUMPKABOO, // Average Size + NATIONAL_DEX_PUMPKABOO,//_AVERAGE, NATIONAL_DEX_LITTEN, NATIONAL_DEX_POPPLIO, NATIONAL_DEX_YUNGOOS, NATIONAL_DEX_GRUBBIN, - //NATIONAL_DEX_RIBOMBEE, // Totem-sized + //NATIONAL_DEX_RIBOMBEE_TOTEM_SIZED, NATIONAL_DEX_MAREANIE, NATIONAL_DEX_KOMALA, - //NATIONAL_DEX_MIMIKYU, // Totem-sized + //NATIONAL_DEX_MIMIKYU_TOTEM_SIZED, NATIONAL_DEX_BLIPBUG, NATIONAL_DEX_DOTTLER, NATIONAL_DEX_ORBEETLE, @@ -2178,6 +3116,28 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TOXEL, NATIONAL_DEX_HATENNA, NATIONAL_DEX_IMPIDIMP, + NATIONAL_DEX_TAROUNTULA, + NATIONAL_DEX_PAWMI, + NATIONAL_DEX_TANDEMAUS, + NATIONAL_DEX_MAUSHOLD, + NATIONAL_DEX_FIDOUGH, + NATIONAL_DEX_SMOLIV, + NATIONAL_DEX_TADBULB, + NATIONAL_DEX_CAPSAKID, + NATIONAL_DEX_RABSCA, + NATIONAL_DEX_TATSUGIRI,//_CURLY, + //NATIONAL_DEX_TATSUGIRI_DROOPY, + //NATIONAL_DEX_TATSUGIRI_STRETCHY, + NATIONAL_DEX_GIMMIGHOUL,//_CHEST, + // 0.4m + NATIONAL_DEX_SPRIGATITO, + NATIONAL_DEX_FUECOCO, + NATIONAL_DEX_PAWMO, + NATIONAL_DEX_NACLI, + NATIONAL_DEX_WATTREL, + NATIONAL_DEX_TINKATINK, + NATIONAL_DEX_CHI_YU, + NATIONAL_DEX_DIPPLIN, // 1'08" / 0.5m NATIONAL_DEX_SQUIRTLE, NATIONAL_DEX_NIDORAN_M, @@ -2185,36 +3145,64 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ODDISH, NATIONAL_DEX_MANKEY, NATIONAL_DEX_VOLTORB, - //NATIONAL_DEX_VOLTORB, //Hisuian Form + //NATIONAL_DEX_VOLTORB_HISUIAN, NATIONAL_DEX_KABUTO, NATIONAL_DEX_CYNDAQUIL, NATIONAL_DEX_SPINARAK, NATIONAL_DEX_CHINCHOU, NATIONAL_DEX_MURKROW, - NATIONAL_DEX_UNOWN, + NATIONAL_DEX_UNOWN,//_A, + //NATIONAL_DEX_UNOWN_B, + //NATIONAL_DEX_UNOWN_C, + //NATIONAL_DEX_UNOWN_D, + //NATIONAL_DEX_UNOWN_E, + //NATIONAL_DEX_UNOWN_F, + //NATIONAL_DEX_UNOWN_G, + //NATIONAL_DEX_UNOWN_H, + //NATIONAL_DEX_UNOWN_I, + //NATIONAL_DEX_UNOWN_J, + //NATIONAL_DEX_UNOWN_K, + //NATIONAL_DEX_UNOWN_L, + //NATIONAL_DEX_UNOWN_M, + //NATIONAL_DEX_UNOWN_N, + //NATIONAL_DEX_UNOWN_O, + //NATIONAL_DEX_UNOWN_P, + //NATIONAL_DEX_UNOWN_Q, + //NATIONAL_DEX_UNOWN_R, + //NATIONAL_DEX_UNOWN_S, + //NATIONAL_DEX_UNOWN_T, + //NATIONAL_DEX_UNOWN_U, + //NATIONAL_DEX_UNOWN_V, + //NATIONAL_DEX_UNOWN_W, + //NATIONAL_DEX_UNOWN_X, + //NATIONAL_DEX_UNOWN_Y, + //NATIONAL_DEX_UNOWN_Z, + //NATIONAL_DEX_UNOWN_EMARK, + //NATIONAL_DEX_UNOWN_QMARK, NATIONAL_DEX_QWILFISH, - //NATIONAL_DEX_QWILFISH, //Hisuian Form + //NATIONAL_DEX_QWILFISH_HISUIAN, NATIONAL_DEX_PHANPY, NATIONAL_DEX_TREECKO, NATIONAL_DEX_POOCHYENA, NATIONAL_DEX_LINOONE, - //NATIONAL_DEX_LINOONE, // Galarian Form + //NATIONAL_DEX_LINOONE_GALARIAN, NATIONAL_DEX_LOTAD, NATIONAL_DEX_SEEDOT, NATIONAL_DEX_SURSKIT, NATIONAL_DEX_NINCADA, NATIONAL_DEX_SABLEYE, - //NATIONAL_DEX_SABLEYE, // Mega + //NATIONAL_DEX_SABLEYE_MEGA, NATIONAL_DEX_TORKOAL, NATIONAL_DEX_BALTOY, NATIONAL_DEX_CHIMCHAR, NATIONAL_DEX_BIDOOF, NATIONAL_DEX_SHINX, NATIONAL_DEX_SHIELDON, - NATIONAL_DEX_WORMADAM, // Plant Cloak - //NATIONAL_DEX_WORMADAM, // Sandy Cloak - //NATIONAL_DEX_WORMADAM, // Trash Cloak - NATIONAL_DEX_CHERRIM, + NATIONAL_DEX_WORMADAM,//_PLANT_CLOAK, + //NATIONAL_DEX_WORMADAM_SANDY_CLOAK, + //NATIONAL_DEX_WORMADAM_TRASH_CLOAK, + NATIONAL_DEX_CHERRIM,//_OVERCAST, + //NATIONAL_DEX_CHERRIM_SUNSHINE, NATIONAL_DEX_GLAMEOW, NATIONAL_DEX_BRONZOR, NATIONAL_DEX_BONSLY, @@ -2226,7 +3214,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SWADLOON, NATIONAL_DEX_PETILIL, NATIONAL_DEX_YAMASK, - //NATIONAL_DEX_YAMASK, Galarian Form + //NATIONAL_DEX_YAMASK_GALARIAN, NATIONAL_DEX_CINCCINO, NATIONAL_DEX_DUCKLETT, NATIONAL_DEX_KARRABLAST, @@ -2239,9 +3227,9 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SKRELP, NATIONAL_DEX_CLAUNCHER, NATIONAL_DEX_HELIOPTILE, - //NATIONAL_DEX_PUMPKABOO, // Large Size + //NATIONAL_DEX_PUMPKABOO_LARGE, NATIONAL_DEX_NOIBAT, - NATIONAL_DEX_HOOPA, // Confined + NATIONAL_DEX_HOOPA,//_CONFINED, NATIONAL_DEX_CHARJABUG, NATIONAL_DEX_ROCKRUFF, NATIONAL_DEX_STUFFUL, @@ -2250,13 +3238,18 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ELDEGOSS, NATIONAL_DEX_ARROKUDA, NATIONAL_DEX_DREEPY, + NATIONAL_DEX_QUAXLY, + NATIONAL_DEX_LECHONK, + NATIONAL_DEX_DACHSBUN, + NATIONAL_DEX_MASCHIFF, + NATIONAL_DEX_FRIGIBAX, // 2'00" / 0.6m NATIONAL_DEX_CHARMANDER, NATIONAL_DEX_KAKUNA, NATIONAL_DEX_SANDSHREW, NATIONAL_DEX_CLEFAIRY, NATIONAL_DEX_VULPIX, - //NATIONAL_DEX_VULPIX, // Alolan Form + //NATIONAL_DEX_VULPIX_ALOLAN, NATIONAL_DEX_POLIWAG, NATIONAL_DEX_KOFFING, NATIONAL_DEX_GOLDEEN, @@ -2269,7 +3262,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SHUCKLE, NATIONAL_DEX_TEDDIURSA, NATIONAL_DEX_CORSOLA, - //NATIONAL_DEX_CORSOLA, // Galarian Form + //NATIONAL_DEX_CORSOLA_GALARIAN, NATIONAL_DEX_REMORAID, NATIONAL_DEX_HOUNDOUR, NATIONAL_DEX_PORYGON2, @@ -2308,25 +3301,32 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ARCHEN, NATIONAL_DEX_TRUBBISH, NATIONAL_DEX_DUOSION, - NATIONAL_DEX_DEERLING, + NATIONAL_DEX_DEERLING,//_SPRING, + //NATIONAL_DEX_DEERLING_SUMMER, + //NATIONAL_DEX_DEERLING_AUTUMN, + //NATIONAL_DEX_DEERLING_WINTER, NATIONAL_DEX_AMOONGUSS, NATIONAL_DEX_FERROSEED, NATIONAL_DEX_KLANG, NATIONAL_DEX_KLINKLANG, NATIONAL_DEX_LAMPENT, NATIONAL_DEX_AXEW, - NATIONAL_DEX_MELOETTA, // Aria Forme - //NATIONAL_DEX_MELOETTA, // Pirouette Forme + NATIONAL_DEX_MELOETTA,//_ARIA, + //NATIONAL_DEX_MELOETTA_PIROUETTE, NATIONAL_DEX_FROGADIER, NATIONAL_DEX_LITLEO, NATIONAL_DEX_PANCHAM, - NATIONAL_DEX_MEOWSTIC, + NATIONAL_DEX_MEOWSTIC,//_MALE, + //NATIONAL_DEX_MEOWSTIC_FEMALE, NATIONAL_DEX_BRIONNE, NATIONAL_DEX_TRUMBEAK, NATIONAL_DEX_CRABRAWLER, - NATIONAL_DEX_ORICORIO, + NATIONAL_DEX_ORICORIO,//_BAILE, + //NATIONAL_DEX_ORICORIO_POM_POM, + //NATIONAL_DEX_ORICORIO_PAU, + //NATIONAL_DEX_ORICORIO_SENSU, NATIONAL_DEX_SALANDIT, - //NATIONAL_DEX_TOGEDEMARU, // Totem-sized + //NATIONAL_DEX_TOGEDEMARU_TOTEM_SIZED, NATIONAL_DEX_JANGMO_O, NATIONAL_DEX_POIPOLE, NATIONAL_DEX_RABOOT, @@ -2336,18 +3336,28 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CLOBBOPUS, NATIONAL_DEX_HATTREM, NATIONAL_DEX_KUBFU, + NATIONAL_DEX_DOLLIV, + NATIONAL_DEX_SQUAWKABILLY,//_GREEN_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_BLUE_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_YELLOW_PLUMAGE, + //NATIONAL_DEX_SQUAWKABILLY_WHITE_PLUMAGE, + NATIONAL_DEX_NACLSTACK, + NATIONAL_DEX_CHARCADET, + NATIONAL_DEX_BRAMBLIN, + NATIONAL_DEX_GREAVARD, + NATIONAL_DEX_IRON_BUNDLE, // 2'04" / 0.7m NATIONAL_DEX_BULBASAUR, NATIONAL_DEX_METAPOD, NATIONAL_DEX_RATICATE, - //NATIONAL_DEX_RATICATE, // Alolan Form - //NATIONAL_DEX_RAICHU, // Alolan Form - //NATIONAL_DEX_SANDSHREW, // Alolan Form + //NATIONAL_DEX_RATICATE_ALOLAN, + //NATIONAL_DEX_RAICHU_ALOLAN, + //NATIONAL_DEX_SANDSHREW_ALOLAN, NATIONAL_DEX_DUGTRIO, - //NATIONAL_DEX_DUGTRIO, // Alolan Form + //NATIONAL_DEX_DUGTRIO_ALOLAN, NATIONAL_DEX_GROWLITHE, NATIONAL_DEX_BELLSPROUT, - //NATIONAL_DEX_GRIMER, // Alolan Form + //NATIONAL_DEX_GRIMER_ALOLAN, NATIONAL_DEX_HOOTHOOT, NATIONAL_DEX_MISDREAVUS, NATIONAL_DEX_SLUGMA, @@ -2369,17 +3379,17 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_EXCADRILL, NATIONAL_DEX_WHIMSICOTT, NATIONAL_DEX_SANDILE, - //NATIONAL_DEX_DARUMAKA, // Galarian Form + //NATIONAL_DEX_DARUMAKA_GALARIAN, NATIONAL_DEX_TIRTOUGA, NATIONAL_DEX_ZORUA, - //NATIONAL_DEX_ZORUA, // Hisuian Form + //NATIONAL_DEX_ZORUA_HISUIAN, NATIONAL_DEX_GOTHORITA, NATIONAL_DEX_STUNFISK, - //NATIONAL_DEX_STUNFISK, // Galarian Form + //NATIONAL_DEX_STUNFISK_GALARIAN, NATIONAL_DEX_QUILLADIN, NATIONAL_DEX_FLETCHINDER, - //NATIONAL_DEX_SLIGGOO, // Hisuian Form - //NATIONAL_DEX_GOURGEIST, // Small Size + //NATIONAL_DEX_SLIGGOO_HISUIAN, + //NATIONAL_DEX_GOURGEIST_SMALL, NATIONAL_DEX_DIANCIE, NATIONAL_DEX_DARTRIX, NATIONAL_DEX_TORRACAT, @@ -2390,6 +3400,10 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_THWACKEY, NATIONAL_DEX_DRIZZILE, NATIONAL_DEX_SIZZLIPEDE, + NATIONAL_DEX_GRAFAIAI, + NATIONAL_DEX_TINKATUFF, + NATIONAL_DEX_TINKATON, + NATIONAL_DEX_GLIMMET, // 2'07" / 0.8m NATIONAL_DEX_RAICHU, NATIONAL_DEX_NIDORINA, @@ -2397,9 +3411,9 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_GLOOM, NATIONAL_DEX_PSYDUCK, NATIONAL_DEX_MACHOP, - //NATIONAL_DEX_PONYTA, // Galarian Form + //NATIONAL_DEX_PONYTA_GALARIAN, NATIONAL_DEX_FARFETCHD, - //NATIONAL_DEX_FARFETCHD, // Galarian Form + //NATIONAL_DEX_FARFETCHD_GALARIAN, NATIONAL_DEX_STARYU, NATIONAL_DEX_JOLTEON, NATIONAL_DEX_PORYGON, @@ -2436,14 +3450,15 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TYRUNT, NATIONAL_DEX_HAWLUCHA, NATIONAL_DEX_SLIGGOO, - //NATIONAL_DEX_PUMPKABOO, // Super Size - NATIONAL_DEX_LYCANROC, // Midday Form - //NATIONAL_DEX_LYCANROC, // Dusk Form + //NATIONAL_DEX_PUMPKABOO_SUPER, + NATIONAL_DEX_LYCANROC,//_MIDDAY, + //NATIONAL_DEX_LYCANROC_DUSK, NATIONAL_DEX_CORVISQUIRE, NATIONAL_DEX_CRAMORANT, NATIONAL_DEX_MORGREM, NATIONAL_DEX_PERRSERKER, NATIONAL_DEX_SIRFETCHD, + NATIONAL_DEX_ARCTIBAX, // 2'11" / 0.9m NATIONAL_DEX_NIDORINO, NATIONAL_DEX_ABRA, @@ -2455,7 +3470,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_QUILAVA, NATIONAL_DEX_ESPEON, NATIONAL_DEX_SNEASEL, - //NATIONAL_DEX_SNEASEL, //Hisuian Form + //NATIONAL_DEX_SNEASEL_HISUIAN, NATIONAL_DEX_OCTILLERY, NATIONAL_DEX_DELIBIRD, NATIONAL_DEX_GROVYLE, @@ -2468,8 +3483,8 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ROSERADE, NATIONAL_DEX_CRANIDOS, NATIONAL_DEX_MOTHIM, - NATIONAL_DEX_GASTRODON, // West Sea - //NATIONAL_DEX_GASTRODON, // East Sea + NATIONAL_DEX_GASTRODON,//_WEST_SEA, + //NATIONAL_DEX_GASTRODON_EAST_SEA, NATIONAL_DEX_MISMAGIUS, NATIONAL_DEX_HONCHKROW, NATIONAL_DEX_PORYGON_Z, @@ -2478,10 +3493,16 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_SWOOBAT, NATIONAL_DEX_MIENFOO, NATIONAL_DEX_SKIDDO, - NATIONAL_DEX_GOURGEIST, // Average Size + NATIONAL_DEX_GOURGEIST,//_AVERAGE, NATIONAL_DEX_LURANTIS, NATIONAL_DEX_BRUXISH, - NATIONAL_DEX_INDEEDEE, + NATIONAL_DEX_INDEEDEE,//_MALE, + //NATIONAL_DEX_INDEEDEE_FEMALE, + NATIONAL_DEX_FLORAGATO, + NATIONAL_DEX_PAWMOT, + NATIONAL_DEX_TOEDSCOOL, + NATIONAL_DEX_SCOVILLAIN, + NATIONAL_DEX_IRON_TREADS, // 3'03" / 1.0m NATIONAL_DEX_IVYSAUR, NATIONAL_DEX_WARTORTLE, @@ -2495,13 +3516,13 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_POLIWHIRL, NATIONAL_DEX_WEEPINBELL, NATIONAL_DEX_GRAVELER, - //NATIONAL_DEX_GRAVELER, // Alolan Form + //NATIONAL_DEX_GRAVELER_ALOLAN, NATIONAL_DEX_PONYTA, NATIONAL_DEX_MAGNETON, - //NATIONAL_DEX_MUK, // Alolan Form + //NATIONAL_DEX_MUK_ALOLAN, NATIONAL_DEX_DROWZEE, NATIONAL_DEX_MAROWAK, - //NATIONAL_DEX_MAROWAK, // Alolan Form + //NATIONAL_DEX_MAROWAK_ALOLAN, NATIONAL_DEX_RHYHORN, NATIONAL_DEX_TANGELA, NATIONAL_DEX_VAPOREON, @@ -2514,7 +3535,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_LOUDRED, NATIONAL_DEX_MAKUHITA, NATIONAL_DEX_NOSEPASS, - //NATIONAL_DEX_MAWILE, // Mega + //NATIONAL_DEX_MAWILE_MEGA, NATIONAL_DEX_LUNATONE, NATIONAL_DEX_LILEEP, NATIONAL_DEX_KECLEON, @@ -2530,8 +3551,9 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_PIGNITE, NATIONAL_DEX_SIMISEAR, NATIONAL_DEX_SIMIPOUR, - NATIONAL_DEX_BASCULIN, // Red-Striped Form - //NATIONAL_DEX_BASCULIN, // Blue-Striped Form + NATIONAL_DEX_BASCULIN,//_RED_STRIPED, + //NATIONAL_DEX_BASCULIN_BLUE_STRIPED, + //NATIONAL_DEX_BASCULIN_WHITE_STRIPED, NATIONAL_DEX_KROKOROK, NATIONAL_DEX_MARACTUS, NATIONAL_DEX_REUNICLUS, @@ -2549,17 +3571,24 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MUDBRAY, NATIONAL_DEX_SHIINOTIC, NATIONAL_DEX_MAGEARNA, - //NATIONAL_DEX_MAGEARNA, // Original Color + //NATIONAL_DEX_MAGEARNA_ORIGINAL_COLOR, NATIONAL_DEX_DREDNAW, NATIONAL_DEX_BOLTUND, NATIONAL_DEX_CURSOLA, + NATIONAL_DEX_CROCALOR, + NATIONAL_DEX_OINKOLOGNE,//_MALE, + //NATIONAL_DEX_OINKOLOGNE_FEMALE, + NATIONAL_DEX_SPIDOPS, + NATIONAL_DEX_LOKIX, + NATIONAL_DEX_VAROOM, + NATIONAL_DEX_MUNKIDORI, // 3'07" / 1.1m NATIONAL_DEX_CHARMELEON, NATIONAL_DEX_BUTTERFREE, NATIONAL_DEX_PIDGEOTTO, NATIONAL_DEX_NINETALES, - //NATIONAL_DEX_NINETALES, // Alolan Form - //NATIONAL_DEX_PERSIAN, // Alolan Form + //NATIONAL_DEX_NINETALES_ALOLAN, + //NATIONAL_DEX_PERSIAN_ALOLAN, NATIONAL_DEX_SEEL, NATIONAL_DEX_CHANSEY, NATIONAL_DEX_STARMIE, @@ -2591,23 +3620,28 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_VANILLISH, NATIONAL_DEX_CRYOGONAL, NATIONAL_DEX_LARVESTA, - NATIONAL_DEX_FLORGES, - //NATIONAL_DEX_GOURGEIST, // Large Size - //NATIONAL_DEX_DIANCIE, // Mega + NATIONAL_DEX_FLORGES,//_RED_FLOWER, + //NATIONAL_DEX_FLORGES_YELLOW_FLOWER, + //NATIONAL_DEX_FLORGES_ORANGE_FLOWER, + //NATIONAL_DEX_FLORGES_BLUE_FLOWER, + //NATIONAL_DEX_FLORGES_WHITE_FLOWER, + //NATIONAL_DEX_GOURGEIST_LARGE, + //NATIONAL_DEX_DIANCIE_MEGA, NATIONAL_DEX_TOUCANNON, - //NATIONAL_DEX_LYCANROC, // Midnight Form + //NATIONAL_DEX_LYCANROC_MIDNIGHT, NATIONAL_DEX_CARKOL, NATIONAL_DEX_CALYREX, + NATIONAL_DEX_MABOSSTIFF, // 3'11" / 1.2m NATIONAL_DEX_FEAROW, - //NATIONAL_DEX_SANDSLASH, // Alolan Form + //NATIONAL_DEX_SANDSLASH_ALOLAN, NATIONAL_DEX_VILEPLUME, - //NATIONAL_DEX_ALAKAZAM, // Mega + //NATIONAL_DEX_ALAKAZAM_MEGA, NATIONAL_DEX_SLOWPOKE, - //NATIONAL_DEX_SLOWPOKE, // Galarian Form + //NATIONAL_DEX_SLOWPOKE_GALARIAN, NATIONAL_DEX_MUK, NATIONAL_DEX_ELECTRODE, - //NATIONAL_DEX_ELECTRODE, //Hisuian Form + //NATIONAL_DEX_ELECTRODE_HISUIAN, NATIONAL_DEX_LICKITUNG, NATIONAL_DEX_WEEZING, NATIONAL_DEX_SEADRA, @@ -2624,9 +3658,9 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_PELIPPER, NATIONAL_DEX_BRELOOM, NATIONAL_DEX_SOLROCK, - //NATIONAL_DEX_BANETTE, // Mega + //NATIONAL_DEX_BANETTE_MEGA, NATIONAL_DEX_ABSOL, - //NATIONAL_DEX_ABSOL, // Mega + //NATIONAL_DEX_ABSOL_MEGA, NATIONAL_DEX_METANG, NATIONAL_DEX_INFERNAPE, NATIONAL_DEX_STARAPTOR, @@ -2642,7 +3676,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_GURDURR, NATIONAL_DEX_LEAVANNY, NATIONAL_DEX_WHIRLIPEDE, - //NATIONAL_DEX_LILLIGANT, //Hisuian Form + //NATIONAL_DEX_LILLIGANT_HISUIAN, NATIONAL_DEX_CARRACOSTA, NATIONAL_DEX_FRILLISH, NATIONAL_DEX_ALOMOMOLA, @@ -2650,8 +3684,18 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MANDIBUZZ, NATIONAL_DEX_TALONFLAME, NATIONAL_DEX_VIVILLON, - NATIONAL_DEX_FURFROU, - //NATIONAL_DEX_ZYGARDE, // 10% Forme + NATIONAL_DEX_FURFROU,//_NATURAL, + //NATIONAL_DEX_FURFROU_HEART_TRIM, + //NATIONAL_DEX_FURFROU_STAR_TRIM, + //NATIONAL_DEX_FURFROU_DIAMOND_TRIM, + //NATIONAL_DEX_FURFROU_DEBUTANTE_TRIM, + //NATIONAL_DEX_FURFROU_MATRON_TRIM, + //NATIONAL_DEX_FURFROU_DANDY_TRIM, + //NATIONAL_DEX_FURFROU_LA_REINE_TRIM, + //NATIONAL_DEX_FURFROU_KABUKI_TRIM, + //NATIONAL_DEX_FURFROU_PHARAOH_TRIM, + //NATIONAL_DEX_ZYGARDE_10, + //NATIONAL_DEX_ZYGARDE_10_POWER_CONSTRUCT, NATIONAL_DEX_SALAZZLE, NATIONAL_DEX_TSAREENA, NATIONAL_DEX_HAKAMO_O, @@ -2660,6 +3704,18 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_THIEVUL, NATIONAL_DEX_CUFANT, NATIONAL_DEX_REGIELEKI, + NATIONAL_DEX_QUAXWELL, + NATIONAL_DEX_BELLIBOLT, + NATIONAL_DEX_BRAMBLEGHAST, + NATIONAL_DEX_WIGLETT, + NATIONAL_DEX_WUGTRIO, + NATIONAL_DEX_CETODDLE, + NATIONAL_DEX_ANNIHILAPE, + NATIONAL_DEX_SCREAM_TAIL, + NATIONAL_DEX_BRUTE_BONNET, + NATIONAL_DEX_IRON_MOTH, + NATIONAL_DEX_GHOLDENGO, + NATIONAL_DEX_OGERPON, // 4'03" / 1.3m NATIONAL_DEX_NIDOQUEEN, NATIONAL_DEX_CLEFABLE, @@ -2674,21 +3730,22 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_WOBBUFFET, NATIONAL_DEX_SHIFTRY, NATIONAL_DEX_MEDICHAM, - //NATIONAL_DEX_MEDICHAM, // Mega + //NATIONAL_DEX_MEDICHAM_MEGA, NATIONAL_DEX_CACTURNE, NATIONAL_DEX_ZANGOOSE, NATIONAL_DEX_BASTIODON, - //NATIONAL_DEX_LOPUNNY, // Mega + //NATIONAL_DEX_LOPUNNY_MEGA, NATIONAL_DEX_BRONZONG, - //NATIONAL_DEX_LUCARIO, // Mega + //NATIONAL_DEX_LUCARIO_MEGA, NATIONAL_DEX_DRAPION, NATIONAL_DEX_TOXICROAK, NATIONAL_DEX_FROSLASS, NATIONAL_DEX_THROH, - NATIONAL_DEX_DARMANITAN, + NATIONAL_DEX_DARMANITAN,//_STANDARD_MODE, + //NATIONAL_DEX_DARMANITAN_ZEN_MODE, NATIONAL_DEX_SWANNA, NATIONAL_DEX_VANILLUXE, - //NATIONAL_DEX_LANDORUS, // Therian Forme + //NATIONAL_DEX_LANDORUS_THERIAN, NATIONAL_DEX_BARBARACLE, NATIONAL_DEX_CLAWITZER, NATIONAL_DEX_AMAURA, @@ -2698,20 +3755,27 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_BARRASKEWDA, NATIONAL_DEX_FROSMOTH, NATIONAL_DEX_SNEASLER, + NATIONAL_DEX_KLAWF, + NATIONAL_DEX_FINIZEN, + NATIONAL_DEX_PALAFIN,//_ZERO, + NATIONAL_DEX_IRON_JUGULIS, // 4'07" / 1.4m - //NATIONAL_DEX_BEEDRILL, // Mega - //NATIONAL_DEX_RATICATE, // Alolan Form, Totem-sized + //NATIONAL_DEX_BEEDRILL_MEGA, + //NATIONAL_DEX_RATICATE_ALOLAN_TOTEM_SIZED, NATIONAL_DEX_NIDOKING, NATIONAL_DEX_GOLEM, NATIONAL_DEX_DODUO, - //NATIONAL_DEX_GENGAR, // Mega + //NATIONAL_DEX_GENGAR_MEGA, NATIONAL_DEX_HITMONCHAN, - //NATIONAL_DEX_MR_MIME, // Galarian Form + //NATIONAL_DEX_MR_MIME_GALARIAN, NATIONAL_DEX_JYNX, NATIONAL_DEX_TAUROS, + //NATIONAL_DEX_TAUROS_PALDEAN_COMBAT_BREED, + //NATIONAL_DEX_TAUROS_PALDEAN_BLAZE_BREED, + //NATIONAL_DEX_TAUROS_PALDEAN_AQUA_BREED, NATIONAL_DEX_LEDIAN, NATIONAL_DEX_AMPHAROS, - //NATIONAL_DEX_AMPHAROS, // Mega + //NATIONAL_DEX_AMPHAROS_MEGA, NATIONAL_DEX_QUAGSIRE, NATIONAL_DEX_GRANBULL, NATIONAL_DEX_HOUNDOOM, @@ -2725,20 +3789,28 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CARNIVINE, NATIONAL_DEX_PROBOPASS, NATIONAL_DEX_SAWK, - //NATIONAL_DEX_DARMANITAN, // Galarian Form + //NATIONAL_DEX_DARMANITAN_GALARIAN_STANDARD_MODE, + //NATIONAL_DEX_DARMANITAN_GALARIAN_ZEN_MODE, NATIONAL_DEX_CRUSTLE, NATIONAL_DEX_SIGILYPH, NATIONAL_DEX_ARCHEOPS, NATIONAL_DEX_MIENSHAO, NATIONAL_DEX_HEATMOR, NATIONAL_DEX_ZWEILOUS, - //NATIONAL_DEX_TORNADUS, // Therian Forme - NATIONAL_DEX_KELDEO, - //NATIONAL_DEX_AVALUGG, // Hisuian Form - //NATIONAL_DEX_GUMSHOOS, // Totem-sized + //NATIONAL_DEX_TORNADUS_THERIAN, + NATIONAL_DEX_KELDEO,//_ORDINARY, + //NATIONAL_DEX_KELDEO_RESOLUTE, + //NATIONAL_DEX_AVALUGG_HISUIAN, + //NATIONAL_DEX_GUMSHOOS_TOTEM_SIZED, NATIONAL_DEX_CINDERACE, - NATIONAL_DEX_EISCUE, + NATIONAL_DEX_EISCUE,//_ICE_FACE, + //NATIONAL_DEX_EISCUE_NOICE_FACE, NATIONAL_DEX_DRAKLOAK, + NATIONAL_DEX_ARBOLIVA, + NATIONAL_DEX_KILOWATTREL, + NATIONAL_DEX_FLUTTER_MANE, + NATIONAL_DEX_IRON_VALIANT, + NATIONAL_DEX_FEZANDIPITI, // 4'11" / 1.5m NATIONAL_DEX_PIDGEOT, NATIONAL_DEX_VENOMOTH, @@ -2749,7 +3821,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_HITMONLEE, NATIONAL_DEX_SCYTHER, NATIONAL_DEX_PINSIR, - //NATIONAL_DEX_MEWTWO, // Mega Y + //NATIONAL_DEX_MEWTWO_MEGA_Y, NATIONAL_DEX_XATU, NATIONAL_DEX_GIRAFARIG, NATIONAL_DEX_DUNSPARCE, @@ -2759,7 +3831,7 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_LUDICOLO, NATIONAL_DEX_EXPLOUD, NATIONAL_DEX_MANECTRIC, - //NATIONAL_DEX_ALTARIA, // Mega + //NATIONAL_DEX_ALTARIA_MEGA, NATIONAL_DEX_CLAYDOL, NATIONAL_DEX_CRADILY, NATIONAL_DEX_ARMALDO, @@ -2769,105 +3841,118 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_CRESSELIA, NATIONAL_DEX_DARKRAI, NATIONAL_DEX_SAMUROTT, - //NATIONAL_DEX_SAMUROTT, // Hisuian Form - //NATIONAL_DEX_AUDINO, // Mega + //NATIONAL_DEX_SAMUROTT_HISUIAN, + //NATIONAL_DEX_AUDINO_MEGA, NATIONAL_DEX_CONKELDURR, NATIONAL_DEX_SEISMITOAD, NATIONAL_DEX_KROOKODILE, NATIONAL_DEX_GOTHITELLE, NATIONAL_DEX_BRAVIARY, - NATIONAL_DEX_TORNADUS, // Incarnate Forme - NATIONAL_DEX_THUNDURUS, // Incarnate Forme - NATIONAL_DEX_LANDORUS, // Incarnate Forme + NATIONAL_DEX_TORNADUS,//_INCARNATE, + NATIONAL_DEX_THUNDURUS,//_INCARNATE, + NATIONAL_DEX_LANDORUS,//_INCARNATE, NATIONAL_DEX_GENESECT, NATIONAL_DEX_DELPHOX, NATIONAL_DEX_GRENINJA, - //NATIONAL_DEX_GRENINJA, // Ash-Greninja + //NATIONAL_DEX_GRENINJA_ASH, NATIONAL_DEX_PYROAR, NATIONAL_DEX_MALAMAR, NATIONAL_DEX_TREVENANT, NATIONAL_DEX_NOIVERN, NATIONAL_DEX_VIKAVOLT, - //NATIONAL_DEX_LURANTIS, // Totem-sized + //NATIONAL_DEX_LURANTIS_TOTEM_SIZED, NATIONAL_DEX_ORANGURU, NATIONAL_DEX_ZERAORA, NATIONAL_DEX_GRIMMSNARL, NATIONAL_DEX_MR_RIME, + NATIONAL_DEX_MEOWSCARADA, + NATIONAL_DEX_ARMAROUGE, + NATIONAL_DEX_BOMBIRDIER, + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, // 5'03" / 1.6m NATIONAL_DEX_BLASTOISE, - //NATIONAL_DEX_BLASTOISE, // Mega + //NATIONAL_DEX_BLASTOISE_MEGA, NATIONAL_DEX_GOLBAT, NATIONAL_DEX_MACHAMP, NATIONAL_DEX_TENTACRUEL, NATIONAL_DEX_SLOWBRO, - //NATIONAL_DEX_SLOWBRO, // Galarian Form + //NATIONAL_DEX_SLOWBRO_GALARIAN, NATIONAL_DEX_HAUNTER, NATIONAL_DEX_HYPNO, NATIONAL_DEX_ZAPDOS, - //NATIONAL_DEX_ZAPDOS, // Galarian Form - //NATIONAL_DEX_TYPHLOSION, // Hisuian Form + //NATIONAL_DEX_ZAPDOS_GALARIAN, + //NATIONAL_DEX_TYPHLOSION_HISUIAN, NATIONAL_DEX_NOCTOWL, NATIONAL_DEX_GARDEVOIR, - //NATIONAL_DEX_GARDEVOIR, // Mega + //NATIONAL_DEX_GARDEVOIR_MEGA, NATIONAL_DEX_DUSCLOPS, NATIONAL_DEX_METAGROSS, NATIONAL_DEX_RAMPARDOS, NATIONAL_DEX_MAGMORTAR, NATIONAL_DEX_GALLADE, - //NATIONAL_DEX_GALLADE, // Mega + //NATIONAL_DEX_GALLADE_MEGA, NATIONAL_DEX_EMBOAR, NATIONAL_DEX_ZEBSTRIKA, NATIONAL_DEX_ZOROARK, - //NATIONAL_DEX_ZOROARK, // Hisuian Form + //NATIONAL_DEX_ZOROARK_HISUIAN, NATIONAL_DEX_DRUDDIGON, NATIONAL_DEX_BISHARP, NATIONAL_DEX_BOUFFALANT, - //NATIONAL_DEX_BRAVIARY, // Hisuian Form + //NATIONAL_DEX_BRAVIARY_HISUIAN, NATIONAL_DEX_VOLCARONA, NATIONAL_DEX_CHESNAUGHT, NATIONAL_DEX_DECIDUEYE, - //NATIONAL_DEX_DECIDUEYE, // Hisuian Form + //NATIONAL_DEX_DECIDUEYE_HISUIAN, NATIONAL_DEX_KOMMO_O, - NATIONAL_DEX_TOXTRICITY, + NATIONAL_DEX_TOXTRICITY,//_AMPED, + //NATIONAL_DEX_TOXTRICITY_LOW_KEY, NATIONAL_DEX_GRAPPLOCT, NATIONAL_DEX_OBSTAGOON, NATIONAL_DEX_RUNERIGUS, - NATIONAL_DEX_ENAMORUS, - //NATIONAL_DEX_ENAMORUS, //Therian Form + NATIONAL_DEX_ENAMORUS,//_INCARNATE, + //NATIONAL_DEX_ENAMORUS_THERIAN, + NATIONAL_DEX_SKELEDIRGE, + NATIONAL_DEX_CERULEDGE, + NATIONAL_DEX_CYCLIZAR, + NATIONAL_DEX_FLAMIGO, + NATIONAL_DEX_IRON_THORNS, // 5'07" / 1.7m NATIONAL_DEX_CHARIZARD, - //NATIONAL_DEX_CHARIZARD, // Mega X - //NATIONAL_DEX_CHARIZARD, // Mega Y + //NATIONAL_DEX_CHARIZARD_MEGA_X, + //NATIONAL_DEX_CHARIZARD_MEGA_Y, NATIONAL_DEX_GOLDUCK, NATIONAL_DEX_VICTREEBEL, - //NATIONAL_DEX_GOLEM, // Alolan Form + //NATIONAL_DEX_GOLEM_ALOLAN, NATIONAL_DEX_RAPIDASH, - //NATIONAL_DEX_RAPIDASH, // Galarian Form + //NATIONAL_DEX_RAPIDASH_GALARIAN, NATIONAL_DEX_DEWGONG, - //NATIONAL_DEX_MAROWAK, // Alolan Form, Totem-sized - //NATIONAL_DEX_PINSIR, // Mega + //NATIONAL_DEX_MAROWAK_ALOLAN_TOTEM_SIZED, + //NATIONAL_DEX_PINSIR_MEGA, NATIONAL_DEX_ARTICUNO, - //NATIONAL_DEX_ARTICUNO, // Galarian Form + //NATIONAL_DEX_ARTICUNO_GALARIAN, NATIONAL_DEX_TYPHLOSION, - //NATIONAL_DEX_HERACROSS, // Mega + //NATIONAL_DEX_HERACROSS_MEGA, NATIONAL_DEX_SKARMORY, NATIONAL_DEX_SCEPTILE, NATIONAL_DEX_SWALOT, NATIONAL_DEX_HUNTAIL, NATIONAL_DEX_REGIROCK, - NATIONAL_DEX_DEOXYS, // Normal Forme - //NATIONAL_DEX_DEOXYS, // Attack Forme - //NATIONAL_DEX_DEOXYS, // Defense Forme - //NATIONAL_DEX_DEOXYS, // Speed Forme + NATIONAL_DEX_DEOXYS,//_NORMAL, + //NATIONAL_DEX_DEOXYS_ATTACK, + //NATIONAL_DEX_DEOXYS_DEFENSE, + //NATIONAL_DEX_DEOXYS_SPEED, NATIONAL_DEX_EMPOLEON, NATIONAL_DEX_LICKILICKY, NATIONAL_DEX_HEATRAN, NATIONAL_DEX_GIGALITH, NATIONAL_DEX_COFAGRIGUS, NATIONAL_DEX_GOGOAT, - NATIONAL_DEX_AEGISLASH, - //NATIONAL_DEX_GOODRA, //Hisuian Form - //NATIONAL_DEX_GOURGEIST, // Super Size + NATIONAL_DEX_AEGISLASH,//_SHIELD, + //NATIONAL_DEX_AEGISLASH_BLADE, + //NATIONAL_DEX_GOODRA_HISUIAN, + //NATIONAL_DEX_GOURGEIST_SUPER, NATIONAL_DEX_VOLCANION, NATIONAL_DEX_CRABOMINABLE, // 5'11" / 1.8m @@ -2877,16 +3962,16 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MEGANIUM, NATIONAL_DEX_FURRET, NATIONAL_DEX_CROBAT, - //NATIONAL_DEX_SLOWKING, // Galarian Form + //NATIONAL_DEX_SLOWKING_GALARIAN, NATIONAL_DEX_SCIZOR, NATIONAL_DEX_URSARING, NATIONAL_DEX_KINGDRA, - //NATIONAL_DEX_MANECTRIC, // Mega + //NATIONAL_DEX_MANECTRIC_MEGA, NATIONAL_DEX_SHARPEDO, NATIONAL_DEX_GOREBYSS, - //NATIONAL_DEX_SALAMENCE, // Mega + //NATIONAL_DEX_SALAMENCE_MEGA, NATIONAL_DEX_REGICE, - //NATIONAL_DEX_LATIAS, // Mega + //NATIONAL_DEX_LATIAS_MEGA, NATIONAL_DEX_ELECTIVIRE, NATIONAL_DEX_HAXORUS, NATIONAL_DEX_HYDREIGON, @@ -2902,39 +3987,51 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_ZARUDE, NATIONAL_DEX_WYRDEER, NATIONAL_DEX_KLEAVOR, + NATIONAL_DEX_QUAQUAVAL, + //NATIONAL_DEX_PALAFIN_HERO, + NATIONAL_DEX_REVAVROOM, + NATIONAL_DEX_CLODSIRE, + NATIONAL_DEX_IRON_HANDS, + NATIONAL_DEX_OKIDOGI, // 6'03" / 1.9m NATIONAL_DEX_ARCANINE, NATIONAL_DEX_RHYDON, - //NATIONAL_DEX_HOUNDOOM, // Mega + //NATIONAL_DEX_HOUNDOOM_MEGA, NATIONAL_DEX_RAIKOU, - //NATIONAL_DEX_SCEPTILE, // Mega + //NATIONAL_DEX_SCEPTILE_MEGA, NATIONAL_DEX_BLAZIKEN, - //NATIONAL_DEX_BLAZIKEN, // Mega - //NATIONAL_DEX_SWAMPERT, // Mega + //NATIONAL_DEX_BLAZIKEN_MEGA, + //NATIONAL_DEX_SWAMPERT_MEGA, NATIONAL_DEX_CAMERUPT, NATIONAL_DEX_REGISTEEL, NATIONAL_DEX_GARCHOMP, - //NATIONAL_DEX_GARCHOMP, // Mega + //NATIONAL_DEX_GARCHOMP_MEGA, NATIONAL_DEX_YANMEGA, NATIONAL_DEX_GARBODOR, - NATIONAL_DEX_SAWSBUCK, + NATIONAL_DEX_SAWSBUCK,//_SPRING, + //NATIONAL_DEX_SAWSBUCK_SUMMER, + //NATIONAL_DEX_SAWSBUCK_AUTUMN, + //NATIONAL_DEX_SAWSBUCK_WINTER, NATIONAL_DEX_TERRAKION, NATIONAL_DEX_TYPE_NULL, NATIONAL_DEX_TAPU_BULU, NATIONAL_DEX_INTELEON, - NATIONAL_DEX_URSHIFU, // Single Strike Style - //NATIONAL_DEX_URSHIFU, // Rapid Strike Style + NATIONAL_DEX_URSHIFU,//_SINGLE_STRIKE_STYLE, + //NATIONAL_DEX_URSHIFU_RAPID_STRIKE_STYLE, + NATIONAL_DEX_TOEDSCRUEL, + NATIONAL_DEX_ESPATHRA, + NATIONAL_DEX_CHIEN_PAO, // 6'07" / 2.0m NATIONAL_DEX_VENUSAUR, NATIONAL_DEX_EKANS, - //NATIONAL_DEX_ARCANINE, //Hisuian Form - //NATIONAL_DEX_SLOWBRO, // Mega + //NATIONAL_DEX_ARCANINE_HISUIAN, + //NATIONAL_DEX_SLOWBRO_MEGA, NATIONAL_DEX_EXEGGUTOR, NATIONAL_DEX_MOLTRES, - //NATIONAL_DEX_MOLTRES, // Galarian Form + //NATIONAL_DEX_MOLTRES_GALARIAN, NATIONAL_DEX_MEWTWO, NATIONAL_DEX_SLOWKING, - //NATIONAL_DEX_SCIZOR, // Mega + //NATIONAL_DEX_SCIZOR_MEGA, NATIONAL_DEX_SUICUNE, NATIONAL_DEX_TYRANITAR, NATIONAL_DEX_SLAKING, @@ -2953,57 +4050,81 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_TURTONATOR, NATIONAL_DEX_ARCTOVISH, NATIONAL_DEX_SPECTRIER, + NATIONAL_DEX_HOUNDSTONE, + NATIONAL_DEX_KINGAMBIT, + NATIONAL_DEX_ROARING_MOON, // 6'11" / 2.1m - //NATIONAL_DEX_AERODACTYL, // Mega + //NATIONAL_DEX_AERODACTYL_MEGA, NATIONAL_DEX_SNORLAX, NATIONAL_DEX_MANTINE, NATIONAL_DEX_ENTEI, NATIONAL_DEX_AGGRON, - //NATIONAL_DEX_GLALIE, // Mega + //NATIONAL_DEX_GLALIE_MEGA, NATIONAL_DEX_EELEKTROSS, NATIONAL_DEX_COBALION, NATIONAL_DEX_PANGORO, - //NATIONAL_DEX_SALAZZLE, // Totem-sized + //NATIONAL_DEX_SALAZZLE_TOTEM_SIZED, NATIONAL_DEX_BEWEAR, NATIONAL_DEX_RILLABOOM, NATIONAL_DEX_HATTERENE, NATIONAL_DEX_REGIDRAGO, + NATIONAL_DEX_BAXCALIBUR, // 7'03" / 2.2m - //NATIONAL_DEX_PIDGEOT, // Mega + //NATIONAL_DEX_PIDGEOT_MEGA, NATIONAL_DEX_KANGASKHAN, - //NATIONAL_DEX_KANGASKHAN, // Mega + //NATIONAL_DEX_KANGASKHAN_MEGA, NATIONAL_DEX_DRAGONITE, - //NATIONAL_DEX_AGGRON, // Mega + //NATIONAL_DEX_AGGRON_MEGA, NATIONAL_DEX_TORTERRA, NATIONAL_DEX_ABOMASNOW, NATIONAL_DEX_DUSKNOIR, NATIONAL_DEX_JELLICENT, - //NATIONAL_DEX_KOMMO_O, // Totem-sized + //NATIONAL_DEX_KOMMO_O_TOTEM_SIZED, NATIONAL_DEX_CORVIKNIGHT, NATIONAL_DEX_SILICOBRA, NATIONAL_DEX_GLASTRIER, + NATIONAL_DEX_GREAT_TUSK, // 7'07" / 2.3m - //NATIONAL_DEX_MEWTWO, // Mega X + //NATIONAL_DEX_MEWTWO_MEGA_X, NATIONAL_DEX_FERALIGATR, NATIONAL_DEX_HARIYAMA, - //NATIONAL_DEX_LATIOS, // Mega - NATIONAL_DEX_SILVALLY, + //NATIONAL_DEX_LATIOS_MEGA, + NATIONAL_DEX_SILVALLY,//_NORMAL, + //NATIONAL_DEX_SILVALLY_FIGHTING, + //NATIONAL_DEX_SILVALLY_FLYING, + //NATIONAL_DEX_SILVALLY_POISON, + //NATIONAL_DEX_SILVALLY_GROUND, + //NATIONAL_DEX_SILVALLY_ROCK, + //NATIONAL_DEX_SILVALLY_BUG, + //NATIONAL_DEX_SILVALLY_GHOST, + //NATIONAL_DEX_SILVALLY_STEEL, + //NATIONAL_DEX_SILVALLY_FIRE, + //NATIONAL_DEX_SILVALLY_WATER, + //NATIONAL_DEX_SILVALLY_GRASS, + //NATIONAL_DEX_SILVALLY_ELECTRIC, + //NATIONAL_DEX_SILVALLY_PSYCHIC, + //NATIONAL_DEX_SILVALLY_ICE, + //NATIONAL_DEX_SILVALLY_DRAGON, + //NATIONAL_DEX_SILVALLY_DARK, + //NATIONAL_DEX_SILVALLY_FAIRY, NATIONAL_DEX_ARCTOZOLT, NATIONAL_DEX_DRACOVISH, + NATIONAL_DEX_GARGANACL, + NATIONAL_DEX_SANDY_SHOCKS, // 7'10" / 2.4m - //NATIONAL_DEX_VENUSAUR, // Mega + //NATIONAL_DEX_VENUSAUR_MEGA, NATIONAL_DEX_RHYPERIOR, NATIONAL_DEX_BUZZWOLE, NATIONAL_DEX_NECROZMA, - //NATIONAL_DEX_CALYREX, // Ice Rider - //NATIONAL_DEX_CALYREX, // Shadow Rider + //NATIONAL_DEX_CALYREX_ICE_RIDER, + //NATIONAL_DEX_CALYREX_SHADOW_RIDER, NATIONAL_DEX_URSALUNA, // 8'02" / 2.5m NATIONAL_DEX_LAPRAS, - //NATIONAL_DEX_TYRANITAR, // Mega - //NATIONAL_DEX_SHARPEDO, // Mega - //NATIONAL_DEX_CAMERUPT, // Mega - //NATIONAL_DEX_METAGROSS, // Mega + //NATIONAL_DEX_TYRANITAR_MEGA, + //NATIONAL_DEX_SHARPEDO_MEGA, + //NATIONAL_DEX_CAMERUPT_MEGA, + //NATIONAL_DEX_METAGROSS_MEGA, NATIONAL_DEX_MAMOSWINE, NATIONAL_DEX_SCOLIPEDE, NATIONAL_DEX_TYRANTRUM, @@ -3011,55 +4132,82 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_MELMETAL, NATIONAL_DEX_STONJOURNER, NATIONAL_DEX_OVERQWIL, + NATIONAL_DEX_ORTHWORM, + NATIONAL_DEX_VELUZA, + NATIONAL_DEX_KORAIDON, // 8'06" / 2.6m NATIONAL_DEX_BEARTIC, - //NATIONAL_DEX_VIKAVOLT, // Totem-sized + //NATIONAL_DEX_VIKAVOLT_TOTEM_SIZED, // 8'10" / 2.7m NATIONAL_DEX_SEVIPER, - //NATIONAL_DEX_ABOMASNOW, // Mega + //NATIONAL_DEX_ABOMASNOW_MEGA, NATIONAL_DEX_AURORUS, + NATIONAL_DEX_TING_LU, // 9'02" / 2.8m NATIONAL_DEX_GOLURK, NATIONAL_DEX_COALOSSAL, - NATIONAL_DEX_ZACIAN, // Hero of Many Battles - //NATIONAL_DEX_ZACIAN, // Crowned Sword + NATIONAL_DEX_ZACIAN,//_HERO_OF_MANY_BATTLES, + //NATIONAL_DEX_ZACIAN_CROWNED_SWORD, // 9'06" / 2.9m NATIONAL_DEX_ZEKROM, - NATIONAL_DEX_ZAMAZENTA, // Hero of Many Battles - //NATIONAL_DEX_ZAMAZENTA, // Crowned Shield + NATIONAL_DEX_ZAMAZENTA,//_HERO_OF_MANY_BATTLES, + //NATIONAL_DEX_ZAMAZENTA_CROWNED_SHIELD, // 9'10" / 3.0m - //NATIONAL_DEX_WEEZING, // Galarian Form - //NATIONAL_DEX_THUNDURUS, // Therian Form + //NATIONAL_DEX_WEEZING_GALARIAN, + //NATIONAL_DEX_THUNDURUS_THERIAN, NATIONAL_DEX_KYUREM, - NATIONAL_DEX_XERNEAS, + NATIONAL_DEX_XERNEAS,//_NEUTRAL, + //NATIONAL_DEX_XERNEAS_ACTIVE, NATIONAL_DEX_DRAMPA, NATIONAL_DEX_CENTISKORCH, NATIONAL_DEX_FALINKS, NATIONAL_DEX_COPPERAJAH, NATIONAL_DEX_DRAGAPULT, - NATIONAL_DEX_BASCULEGION, + NATIONAL_DEX_BASCULEGION,//_MALE, + //NATIONAL_DEX_BASCULEGION_FEMALE, // 10'02" / 3.1m - //NATIONAL_DEX_ARAQUANID, // Totem-sized + //NATIONAL_DEX_ARAQUANID_TOTEM_SIZED, // 10'06" / 3.2m - NATIONAL_DEX_ARCEUS, + NATIONAL_DEX_ARCEUS,//_NORMAL, + //NATIONAL_DEX_ARCEUS_FIGHTING, + //NATIONAL_DEX_ARCEUS_FLYING, + //NATIONAL_DEX_ARCEUS_POISON, + //NATIONAL_DEX_ARCEUS_GROUND, + //NATIONAL_DEX_ARCEUS_ROCK, + //NATIONAL_DEX_ARCEUS_BUG, + //NATIONAL_DEX_ARCEUS_GHOST, + //NATIONAL_DEX_ARCEUS_STEEL, + //NATIONAL_DEX_ARCEUS_FIRE, + //NATIONAL_DEX_ARCEUS_WATER, + //NATIONAL_DEX_ARCEUS_GRASS, + //NATIONAL_DEX_ARCEUS_ELECTRIC, + //NATIONAL_DEX_ARCEUS_PSYCHIC, + //NATIONAL_DEX_ARCEUS_ICE, + //NATIONAL_DEX_ARCEUS_DRAGON, + //NATIONAL_DEX_ARCEUS_DARK, NATIONAL_DEX_RESHIRAM, + NATIONAL_DEX_FARIGIRAF, + NATIONAL_DEX_SLITHER_WING, // 10'10" / 3.3m NATIONAL_DEX_SERPERIOR, - //NATIONAL_DEX_KYUREM, // Black + //NATIONAL_DEX_KYUREM_BLACK, // 11'02" / 3.4m NATIONAL_DEX_SOLGALEO, // 11'06" / 3.5m NATIONAL_DEX_ARBOK, NATIONAL_DEX_GROUDON, + NATIONAL_DEX_MIRAIDON, + NATIONAL_DEX_WALKING_WAKE, // 11'10" / 3.6m - //NATIONAL_DEX_KYUREM, // White + //NATIONAL_DEX_KYUREM_WHITE, NATIONAL_DEX_NAGANADEL, + NATIONAL_DEX_DUDUNSPARCE,//_TWO_SEGMENT, // 12'02" / 3.7m NATIONAL_DEX_REGIGIGAS, // 12'06" / 3.8m NATIONAL_DEX_HO_OH, NATIONAL_DEX_XURKITREE, - //NATIONAL_DEX_NECROZMA, // Dusk Mane + //NATIONAL_DEX_NECROZMA_DUSK_MANE, NATIONAL_DEX_SANDACONDA, // 12'10" / 3.9m NATIONAL_DEX_DHELMISE, @@ -3068,14 +4216,17 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_LUNALA, // 13'09" / 4.2m NATIONAL_DEX_PALKIA, - //NATIONAL_DEX_NECROZMA, // Dawn Wings + //NATIONAL_DEX_NECROZMA_DAWN_WINGS, // 14'09" / 4.5m NATIONAL_DEX_KYOGRE, - NATIONAL_DEX_GIRATINA, // Altered Forme - //NATIONAL_DEX_ZYGARDE, // Complete Forme + NATIONAL_DEX_GIRATINA,//_ALTERED, + //NATIONAL_DEX_ZYGARDE_COMPLETE, + NATIONAL_DEX_CETITAN, + //NATIONAL_DEX_DUDUNSPARCE_THREE_SEGMENT, // 16'05" / 5.0m - //NATIONAL_DEX_GROUDON, // Primal - NATIONAL_DEX_ZYGARDE, // 50% Forme + //NATIONAL_DEX_GROUDON_PRIMAL, + NATIONAL_DEX_ZYGARDE,//_50, + //NATIONAL_DEX_ZYGARDE_50_POWER_CONSTRUCT, // 17'01" / 5.2m NATIONAL_DEX_LUGIA, // 17'09" / 5.4m @@ -3087,37 +4238,39 @@ const u16 gPokedexOrder_Height[] = NATIONAL_DEX_YVELTAL, // 20'04" / 6.2m NATIONAL_DEX_MILOTIC, - //NATIONAL_DEX_PALKIA, //Origin Forme + //NATIONAL_DEX_PALKIA_ORIGIN, // 21'04" / 6.5m NATIONAL_DEX_GYARADOS, - //NATIONAL_DEX_GYARADOS, // Mega - //NATIONAL_DEX_HOOPA, // Unbound + //NATIONAL_DEX_GYARADOS_MEGA, + //NATIONAL_DEX_HOOPA_UNBOUND, // 22'08" / 6.9m - //NATIONAL_DEX_GIRATINA, // Origin Forme + //NATIONAL_DEX_GIRATINA_ORIGIN, // 23'00" / 7.0m NATIONAL_DEX_RAYQUAZA, - //NATIONAL_DEX_DIALGA, //Origin Forme + //NATIONAL_DEX_DIALGA_ORIGIN, // 24'07" / 7.5m - //NATIONAL_DEX_NECROZMA, // Ultra + //NATIONAL_DEX_NECROZMA_ULTRA, // 26'11" / 8.2m - //NATIONAL_DEX_WISHIWASHI, // School Form + //NATIONAL_DEX_WISHIWASHI_SCHOOL, // 28'10" / 8.8m NATIONAL_DEX_ONIX, // 30'02" / 9.2m NATIONAL_DEX_STEELIX, NATIONAL_DEX_CELESTEELA, // 32'02" / 9.8m - //NATIONAL_DEX_KYOGRE, // Primal + //NATIONAL_DEX_KYOGRE_PRIMAL, // 34'05" / 10.5m - //NATIONAL_DEX_STEELIX, // Mega + //NATIONAL_DEX_STEELIX_MEGA, // 35'05" / 10.8m - //NATIONAL_DEX_RAYQUAZA, // Mega + //NATIONAL_DEX_RAYQUAZA_MEGA, // 35'09" / 10.9m - //NATIONAL_DEX_EXEGGUTOR, // Alolan Form + //NATIONAL_DEX_EXEGGUTOR_ALOLAN, + // 12m + NATIONAL_DEX_DONDOZO, // 47'07" / 14.5m NATIONAL_DEX_WAILORD, // 65'07" / 20m NATIONAL_DEX_ETERNATUS, // 328'01" / 100m - //NATIONAL_DEX_ETERNATUS, // Eternamax + //NATIONAL_DEX_ETERNATUS_ETERNAMAX, }; diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index 5e28a204be..eee63686d2 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -772,6 +772,32 @@ const u8 gTaurosPokedexText[] = _( "Tauros to battle, it will charge at thick\n" "trees and knock them down to calm itself."); +const u8 gTaurosCombatBreedPokedexText[] = _( + "This Pokémon has a muscular body\n" + "and excels at close-quarters combat.\n" + "It uses its short horns to strike\n" + "the opponent’s weak spots."); + +const u8 gTaurosBlazeBreedPokedexText[] = _( + "When heated by fire energy, its horns can\n" + "get hotter than 1,800 degrees Fahrenheit.\n" + "Those gored by them will suffer\n" + "both wounds and burns."); + +// Placeholder +const u8 gTaurosAquaBreedPokedexText[] = _( + "When heated by fire energy, its horns can\n" + "get hotter than 1,800 degrees Fahrenheit.\n" + "Those gored by them will suffer\n" + "both wounds and burns."); + +// Error massage: array `gTaurosAquaBreedPokedexText' assumed to have one element +// const u8 gTaurosAquaBreedPokedexText[] = _( +// "This Pokémon blasts water from holes on\n" +// "the tips of its horns—the high-pressure\n" +// "jets pierce right through\n" +// "Tauros’s enemies."); + const u8 gMagikarpPokedexText[] = _( "Its swimming muscles are weak, so it is\n" "easily washed away by currents. In places\n" @@ -1168,6 +1194,12 @@ const u8 gWooperPokedexText[] = _( "On land, they coat their bodies with a\n" "gooey, toxic film."); +const u8 gWooperPaldeaPokedexText[] = _( + "After losing a territorial struggle,\n" + "Wooper began living on land.\n" + "The Pokémon changed over time, developing\n" + "a poisonous film to protect its body."); + const u8 gQuagsirePokedexText[] = _( "A Quagsire hunts by leaving its mouth wide\n" "open in water and waiting for its prey to\n" @@ -5399,3 +5431,664 @@ const u8 gEnamorusPokedexText[] = _( "Pokémon's love gives rise to the\n" "budding of fresh life across the land."); #endif +#if P_GEN_9_POKEMON == TRUE +const u8 gSprigatitoPokedexText[] = _( + "The sweet scent its body gives off\n" + "mesmerizes those around it. The\n" + "scent grows stronger when this\n" + "Pokémon is in the sun."); + +const u8 gFloragatoPokedexText[] = _( + "Floragato deftly wields the vine\n" + "hidden beneath its long fur, slamming\n" + "the hard flower bud against its\n" + "opponents."); + +const u8 gMeowscaradaPokedexText[] = _( + "This Pokémon uses the reflective\n" + "fur lining its cape to camouflage the\n" + "stem of its flower, creating the\n" + "illusion that the flower is floating."); + +const u8 gFuecocoPokedexText[] = _( + "Its flame sac is small, so energy is\n" + "always leaking out. This energy is\n" + "released from the dent atop\n" + "Fuecoco's head and flickers to and fro."); + +const u8 gCrocalorPokedexText[] = _( + "The combination of Crocalor's fire\n" + "energy and overflowing vitality has\n" + "caused an egg-shaped fireball to\n" + "appear on the Pokémon's head."); + +const u8 gSkeledirgePokedexText[] = _( + "Skeledirge's gentle singing\n" + "soothes the souls of all that hear it. It\n" + "burns its enemies to a crisp with\n" + "flames of over 5,400 degrees Fahrenheit."); + +const u8 gQuaxlyPokedexText[] = _( + "Its strong legs let it easily swim\n" + "around in even fast-flowing rivers.\n" + "It likes to keep things tidy and is\n" + "prone to overthinking things."); + +const u8 gQuaxwellPokedexText[] = _( + "The hardworking Quaxwell observes\n" + "people and Pokémon from various\n" + "regions and incorporates their\n" + "movements into its own dance routines."); + +const u8 gQuaquavalPokedexText[] = _( + "A single kick from a Quaquaval can\n" + "send a truck rolling. This Pokémon\n" + "uses its powerful legs to perform\n" + "striking dances from far-off lands."); + +const u8 gLechonkPokedexText[] = _( + "It searches for food all day. It\n" + "possesses a keen sense of smell but\n" + "doesn't use it for anything other\n" + "than foraging."); + +const u8 gOinkolognePokedexText[] = _( + "Oinkologne is proud of its fine,\n" + "glossy skin. It emits a concentrated\n" + "scent from the tip of its tail."); + +const u8 gTarountulaPokedexText[] = _( + "The thread it secretes from its\n" + "rear is as strong as wire. The secret\n" + "behind the thread's strength is the\n" + "topic of ongoing research."); + +const u8 gSpidopsPokedexText[] = _( + "It clings to branches and ceilings\n" + "using its threads and moves without\n" + "a sound. It takes out its prey\n" + "before the prey even notices it."); + +const u8 gNymblePokedexText[] = _( + "It has its third set of legs folded\n" + "up. When it's in a tough spot, this\n" + "Pokémon jumps over 30 feet using the\n" + "strength of its legs."); + +const u8 gLokixPokedexText[] = _( + "When it decides to fight all out, it\n" + "stands on its previously folded\n" + "legs to enter Showdown Mode. It\n" + "neutralizes its enemies in short order."); + +const u8 gPawmiPokedexText[] = _( + "The pads of its paws are\n" + "electricity-discharging organs. Pawmi fires\n" + "electricity from its forepaws while\n" + "standing unsteadily on its hind legs."); + +const u8 gPawmoPokedexText[] = _( + "When its group is attacked, Pawmo\n" + "is the first to leap into battle,\n" + "defeating enemies with a fighting\n" + "technique that utilizes electric shocks."); + +const u8 gPawmotPokedexText[] = _( + "This Pokémon normally is slow to\n" + "react, but once it enters battle, it\n" + "will strike down its enemies with\n" + "lightning-fast movements."); + +const u8 gTandemausPokedexText[] = _( + "Exhibiting great teamwork, they\n" + "use their incisors to cut pieces out\n" + "of any material that might be useful\n" + "for a nest, then make off with them."); + +const u8 gMausholdPokedexText[] = _( + "The larger pair protects the little\n" + "ones during battles. When facing\n" + "strong opponents, the whole group\n" + "will join the fight."); + +const u8 gFidoughPokedexText[] = _( + "This Pokémon is smooth and moist\n" + "to the touch. Yeast in Fidough's\n" + "breath induces fermentation in the\n" + "Pokémon's vicinity."); + +const u8 gDachsbunPokedexText[] = _( + "The pleasant aroma that emanates\n" + "from this Pokémon's body helps\n" + "wheat grow, so Dachsbun has been\n" + "treasured by farming villages."); + +const u8 gSmolivPokedexText[] = _( + "This Pokémon converts nutrients\n" + "into oil, which it stores in the fruit\n" + "on its head. It can easily go a whole\n" + "week without eating or drinking."); + +const u8 gDollivPokedexText[] = _( + "Dolliv shares its tasty, fresh-\n" + "scented oil with others. This species\n" + "has coexisted with humans since\n" + "times long gone."); + +const u8 gArbolivaPokedexText[] = _( + "This Pokémon drives back enemies\n" + "by launching its rich, aromatic oil at\n" + "them with enough force to smash a\n" + "boulder."); + +const u8 gSquawkabillyPokedexText[] = _( + "Green-feathered flocks hold the\n" + "most sway. When they're out\n" + "searching for food in the mornings and\n" + "evenings, it gets very noisy."); + +const u8 gNacliPokedexText[] = _( + "The ground scrapes its body as it\n" + "travels, causing it to leave salt\n" + "behind. Salt is constantly being created\n" + "and replenished inside Nacli's body."); + +const u8 gNaclstackPokedexText[] = _( + "It compresses rock salt inside its\n" + "body and shoots out hardened salt\n" + "pellets with enough force to\n" + "perforate an iron sheet."); + +const u8 gGarganaclPokedexText[] = _( + "Garganacl will rub its fingertips\n" + "together and sprinkle injured\n" + "Pokémon with salt. Even severe wounds will\n" + "promptly heal afterward."); + +const u8 gCharcadetPokedexText[] = _( + "Burnt charcoal came to life and\n" + "became a Pokémon. Possessing a fiery\n" + "fighting spirit, Charcadet will\n" + "battle even tough opponents."); + +const u8 gArmarougePokedexText[] = _( + "Armarouge evolved through the use\n" + "of a set of armor that belonged to\n" + "a distinguished warrior. This\n" + "Pokémon is incredibly loyal."); + +const u8 gCeruledgePokedexText[] = _( + "The fiery blades on its arms burn\n" + "fiercely with the lingering\n" + "resentment of a sword wielder who fell\n" + "before accomplishing their goal."); + +const u8 gTadbulbPokedexText[] = _( + "Tadbulb shakes its tail to\n" + "generate electricity. If it senses danger,\n" + "it will make its head blink on and off\n" + "to alert its allies."); + +const u8 gBelliboltPokedexText[] = _( + "When this Pokémon expands and\n" + "contracts its wobbly body, the belly-\n" + "button dynamo in its stomach\n" + "produces a huge amount of electricity."); + +const u8 gWattrelPokedexText[] = _( + "When its wings catch the wind, the\n" + "bones within produce electricity.\n" + "This Pokémon dives into the ocean,\n" + "catching prey by electrocuting them."); + +const u8 gKilowattrelPokedexText[] = _( + "It uses its throat sac to store\n" + "electricity generated by its wings.\n" + "There's hardly any oil in its feathers,\n" + "so it is a poor swimmer."); + +const u8 gMaschiffPokedexText[] = _( + "Its well-developed jaw and fangs\n" + "are strong enough to crunch through\n" + "boulders, and its thick fat makes\n" + "for an excellent defense."); + +const u8 gMabosstiffPokedexText[] = _( + "Mabosstiff loves playing with\n" + "children. Though usually gentle, it\n" + "takes on an intimidating look when\n" + "protecting its family."); + +const u8 gShroodlePokedexText[] = _( + "To keep enemies away from its\n" + "territory, it paints markings around its\n" + "nest using a poisonous liquid that\n" + "has an acrid odor."); + +const u8 gGrafaiaiPokedexText[] = _( + "Each Grafaiai paints its own\n" + "individual pattern, and it will paint that\n" + "same pattern over and over again\n" + "throughout its life."); + +const u8 gBramblinPokedexText[] = _( + "A soul unable to move on to the\n" + "afterlife was blown around by the wind\n" + "until it got tangled up with dried\n" + "grass and became a Pokémon."); + +const u8 gBrambleghastPokedexText[] = _( + "It will open the branches of its\n" + "head to envelop its prey. Once it\n" + "absorbs all the life energy it needs, it\n" + "expels the prey and discards it."); + +const u8 gToedscoolPokedexText[] = _( + "Though it looks like Tentacool,\n" + "Toedscool is a completely different\n" + "species. Its legs may be thin, but it\n" + "can run at a speed of 30 mph."); + +const u8 gToedscruelPokedexText[] = _( + "These Pokémon gather into groups\n" + "and form colonies deep within\n" + "forests. They absolutely hate it when\n" + "strangers approach."); + +const u8 gKlawfPokedexText[] = _( + "Klawf hangs upside-down from\n" + "cliffs, waiting for prey. But Klawf can't\n" + "remain in this position for long\n" + "because its blood rushes to its head."); + +const u8 gCapsakidPokedexText[] = _( + "The more sunlight this Pokémon\n" + "bathes in, the more spicy chemicals are\n" + "produced by its body, and thus the\n" + "spicier its moves become."); + +const u8 gScovillainPokedexText[] = _( + "The green head has turned vicious\n" + "due to the spicy chemicals\n" + "stimulating its brain. Once it goes on a\n" + "rampage, there is no stopping it."); + +const u8 gRellorPokedexText[] = _( + "This Pokémon creates a mud ball by\n" + "mixing sand and dirt with psychic\n" + "energy. It treasures its mud ball more\n" + "than its own life."); + +const u8 gRabscaPokedexText[] = _( + "The body that supports the ball\n" + "barely moves. Therefore, it is thought\n" + "that the true body of this Pokémon\n" + "is actually inside the ball."); + +const u8 gFlittlePokedexText[] = _( + "Flittle's toes levitate about half\n" + "an inch above the ground because of\n" + "the psychic power emitted from the\n" + "frills on the Pokémon's belly."); + +const u8 gEspathraPokedexText[] = _( + "It immobilizes opponents by\n" + "bathing them in psychic power from its\n" + "large eyes. Despite its appearance, it\n" + "has a vicious temperament."); + +const u8 gTinkatinkPokedexText[] = _( + "This Pokémon pounds iron scraps\n" + "together to make a hammer. It will\n" + "remake the hammer again and again until\n" + "it's satisfied with the result."); + +const u8 gTinkatuffPokedexText[] = _( + "These Pokémon make their homes in\n" + "piles of scrap metal. They test the\n" + "strength of each other's hammers by\n" + "smashing them together."); + +const u8 gTinkatonPokedexText[] = _( + "The hammer tops 220 pounds, yet it\n" + "gets swung around easily by\n" + "Tinkaton as it steals whatever it pleases\n" + "and carries its plunder back home."); + +const u8 gWiglettPokedexText[] = _( + "This Pokémon can pick up the scent\n" + "of a Veluza just over 65 feet away\n" + "and will hide itself in the sand."); + +const u8 gWugtrioPokedexText[] = _( + "A variety of fish Pokémon, Wugtrio\n" + "was once considered to be a\n" + "regional form of Dugtrio."); + +const u8 gBombirdierPokedexText[] = _( + "Bombirdier uses the apron on its\n" + "chest to bundle up food, which it\n" + "carries back to its nest. It enjoys\n" + "dropping things that make loud noises."); + +const u8 gFinizenPokedexText[] = _( + "Its water ring is made from\n" + "seawater mixed with a sticky fluid that\n" + "Finizen secretes from its blowhole."); + +const u8 gPalafinPokedexText[] = _( + "This Pokémon changes its\n" + "appearance if it hears its allies calling for\n" + "help. Palafin will never show\n" + "anybody its moment of transformation."); + +const u8 gVaroomPokedexText[] = _( + "The steel section is Varoom's\n" + "actual body. This Pokémon clings to\n" + "rocks and converts the minerals within\n" + "into energy to fuel its activities."); + +const u8 gRevavroomPokedexText[] = _( + "It creates a gas out of poison and\n" + "minerals from rocks. It then\n" + "detonates the gas in its cylinders- now\n" + "numbering eight-to generate energy."); + +const u8 gCyclizarPokedexText[] = _( + "It can sprint at over 70 mph while\n" + "carrying a human. The rider's body\n" + "heat warms Cyclizar's back and lifts\n" + "the Pokémon's spirit."); + +const u8 gOrthwormPokedexText[] = _( + "When attacked, this Pokémon will\n" + "wield the tendrils on its body like\n" + "fists and pelt the opponent with a\n" + "storm of punches."); + +const u8 gGlimmetPokedexText[] = _( + "Glimmet's toxic mineral crystals\n" + "look just like flower petals. This\n" + "Pokémon scatters poisonous powder like\n" + "pollen to protect itself."); + +const u8 gGlimmoraPokedexText[] = _( + "Glimmora's petals are made of\n" + "crystallized poison energy. It has\n" + "recently become evident that these\n" + "petals resemble Tera Jewels."); + +const u8 gGreavardPokedexText[] = _( + "This friendly Pokémon doesn't like\n" + "being alone. Pay it even the\n" + "slightest bit of attention, and it will\n" + "follow you forever."); + +const u8 gHoundstonePokedexText[] = _( + "Houndstone spends most of its\n" + "time sleeping in graveyards. Among all\n" + "the dog Pokémon, this one is most\n" + "loyal to its master."); + +const u8 gFlamigoPokedexText[] = _( + "Thanks to a behavior of theirs\n" + "known as “synchronizing,” an entire\n" + "flock of these Pokémon can attack\n" + "simultaneously in perfect harmony."); + +const u8 gCetoddlePokedexText[] = _( + "This species left the ocean and\n" + "began living on land a very long time\n" + "ago. It seems to be closely related\n" + "to Wailmer."); + +const u8 gCetitanPokedexText[] = _( + "Ice energy builds up in the horn on\n" + "its upper jaw, causing the horn to\n" + "reach cryogenic temperatures that\n" + "freeze its surroundings."); + +const u8 gVeluzaPokedexText[] = _( + "Veluza has excellent regenerative\n" + "capabilities. It sheds spare flesh\n" + "from its body to boost its agility,\n" + "then charges at its prey."); + +const u8 gDondozoPokedexText[] = _( + "It treats Tatsugiri like its boss\n" + "and follows it loyally. Though\n" + "powerful, Dondozo is apparently not very\n" + "smart."); + +const u8 gTatsugiriPokedexText[] = _( + "This is a small dragon Pokémon. It\n" + "lives inside the mouth of Dondozo to\n" + "protect itself from enemies on the\n" + "outside."); + +const u8 gAnnihilapePokedexText[] = _( + "When its anger rose beyond a\n" + "critical point, this Pokémon gained power\n" + "that is unfettered by the limits of\n" + "its physical body."); + +const u8 gClodsirePokedexText[] = _( + "When attacked, this Pokémon will\n" + "retaliate by sticking thick spines out\n" + "from its body. It's a risky move\n" + "that puts everything on the line."); + +const u8 gFarigirafPokedexText[] = _( + "Now that the brain waves from the\n" + "head and tail are synced up, the\n" + "psychic power of this Pokémon is 10\n" + "times stronger than Girafarig's."); + +const u8 gDudunsparcePokedexText[] = _( + "This Pokémon uses its hard tail to\n" + "make its nest by boring holes into\n" + "bedrock deep underground. The nest\n" + "can reach lengths of over six miles."); + +const u8 gKingambitPokedexText[] = _( + "Though it commands a massive army\n" + "in battle, it's not skilled at\n" + "devising complex strategies. It just uses\n" + "brute strength to keep pushing."); + +const u8 gGreatTuskPokedexText[] = _( + "Sightings of this Pokémon have\n" + "occurred in recent years. The name\n" + "Great Tusk was taken from a creature\n" + "listed in a certain book."); + +const u8 gScreamTailPokedexText[] = _( + "There has been only one reported\n" + "sighting of this Pokémon. It\n" + "resembles a mysterious creature depicted\n" + "in an old expedition journal."); + +const u8 gBruteBonnetPokedexText[] = _( + "It bears a slight resemblance to a\n" + "Pokémon described in a dubious\n" + "magazine as a cross between a dinosaur\n" + "and a mushroom."); + +const u8 gFlutterManePokedexText[] = _( + "It has similar features to a\n" + "ghostly pterosaur that was covered in a\n" + "paranormal magazine, but the two\n" + "have little else in common."); + +const u8 gSlitherWingPokedexText[] = _( + "This mysterious Pokémon has some\n" + "similarities to a creature that an\n" + "old book introduced as Slither Wing."); + +const u8 gSandyShocksPokedexText[] = _( + "It slightly resembles a Magneton\n" + "that lived for 10,000 years and was\n" + "featured in an article in a\n" + "paranormal magazine."); + +const u8 gIronTreadsPokedexText[] = _( + "Sightings of this Pokémon have\n" + "occurred in recent years. It resembles\n" + "a mysterious object described in an\n" + "old expedition journal."); + +const u8 gIronBundlePokedexText[] = _( + "Its shape is similar to a robot\n" + "featured in a paranormal magazine\n" + "article. The robot was said to have been\n" + "created by an ancient civilization."); + +const u8 gIronHandsPokedexText[] = _( + "It is very similar to a cyborg\n" + "covered exclusively by a paranormal\n" + "magazine. The cyborg was said to be the\n" + "modified form of a certain athlete."); + +const u8 gIronJugulisPokedexText[] = _( + "It resembles a certain Pokémon\n" + "introduced in a paranormal magazine,\n" + "described as the offspring of a\n" + "Hydreigon that fell in love with a robot."); + +const u8 gIronMothPokedexText[] = _( + "No records exist of this species\n" + "being caught. Data is lacking, but\n" + "the Pokémon's traits match up with an\n" + "object described in an old book."); + +const u8 gIronThornsPokedexText[] = _( + "It has some similarities to a\n" + "Pokémon introduced in a dubious magazine\n" + "as a Tyranitar from one billion\n" + "years into the future."); + +const u8 gFrigibaxPokedexText[] = _( + "This Pokémon lives in forests and\n" + "craggy areas. Using the power of its\n" + "dorsal fin, it cools the inside of its\n" + "nest like a refrigerator."); + +const u8 gArctibaxPokedexText[] = _( + "Arctibax freezes the air around it,\n" + "protecting its face with an ice\n" + "mask and turning its dorsal fin into a\n" + "blade of ice."); + +const u8 gBaxcaliburPokedexText[] = _( + "It launches itself into battle by\n" + "flipping upside down and spewing\n" + "frigid air from its mouth. It finishes\n" + "opponents off with its dorsal blade."); + +const u8 gGimmighoulPokedexText[] = _( + "It lives inside an old treasure\n" + "chest. Sometimes it gets left in shop\n" + "corners since no one realizes it's\n" + "actually a Pokémon."); + +const u8 gGholdengoPokedexText[] = _( + "It has a sturdy body made up of\n" + "stacked coins. Gholdengo overwhelms\n" + "its enemies by firing coin after coin\n" + "at them in quick succession."); + +const u8 gWoChienPokedexText[] = _( + "The grudge of a person punished\n" + "for writing the king's evil deeds upon\n" + "wooden tablets has clad itself in\n" + "dead leaves to become a Pokémon."); + +const u8 gChienPaoPokedexText[] = _( + "This Pokémon can control 100 tons\n" + "of fallen snow. It plays around\n" + "innocently by leaping in and out of\n" + "avalanches it has caused."); + +const u8 gTingLuPokedexText[] = _( + "It slowly brings its exceedingly\n" + "heavy head down upon the ground,\n" + "splitting the earth open with huge\n" + "fissures that run over 160 feet deep."); + +const u8 gChiYuPokedexText[] = _( + "It controls flames burning at over\n" + "5,400 degrees Fahrenheit. It\n" + "casually swims through the sea of lava it\n" + "creates by melting rock and sand."); + +const u8 gRoaringMoonPokedexText[] = _( + "According to an article in a\n" + "dubious magazine, this Pokémon has some\n" + "connection to Mega Evolution that\n" + "occurs in Hoenn."); + +const u8 gIronValiantPokedexText[] = _( + "It has some similarities to a mad\n" + "scientist's invention covered in a\n" + "paranormal magazine."); + +const u8 gKoraidonPokedexText[] = _( + "This Pokémon resembles Cyclizar,\n" + "but it is far burlier and more\n" + "ferocious. Nothing is known about its\n" + "ecology or other features."); + +const u8 gMiraidonPokedexText[] = _( + "This seems to be the Iron Serpent\n" + "mentioned in an Violet Book. The\n" + "Iron Serpent is said to have turned the\n" + "land to ash with its lightning."); + +const u8 gWalkingWakePokedexText[] = _( + "Ecology under research."); + +const u8 gIronLeavesPokedexText[] = _( + "Ecology under analysis."); + +const u8 gDipplinPokedexText[] = _( + "Dipplin is two creatures in one Pokémon.\n" + "Its evolution was triggered by a special\n" + "apple grown only in one place."); + +const u8 gPoltchageistPokedexText[] = _( + "Supposedly, the regrets of a tea\n" + "ceremony master who died before\n" + "perfecting his craft lingered in some\n" + "matcha and became a Pokémon."); + +const u8 gSinistchaPokedexText[] = _( + "It pretends to be tea, trying to fool\n" + "people into drinking it so it can\n" + "drain their life-force. Its ruse is\n" + "generally unsuccessful."); + +const u8 gOkidogiPokedexText[] = _( + "After all its muscles were stimulated\n" + "by the toxic chain around its neck,\n" + "Okidogi transformed and gained\n" + "a powerful physique."); + +const u8 gMunkidoriPokedexText[] = _( + "The chain is made from toxins that\n" + "enhance capabilities. It stimulated\n" + "Munkidori's brain and caused the\n" + "Pokémon's psychic powers to bloom."); + +const u8 gFezandipitiPokedexText[] = _( + "Fezandipiti owes its beautiful looks and\n" + "lovely voice to the toxic stimulants\n" + "emanating from the chain wrapped around\n" + "its body."); + +const u8 gOgerponPokedexText[] = _( + "This Pokémon's type changes based on\n" + "which mask it's wearing. It confounds\n" + "its enemies with nimble movements\n" + "and kicks."); + +#endif diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 76904ecff0..a2587710d7 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -1,846 +1,17 @@ +#include "constants/abilities.h" + // Maximum value for a female Pokémon is 254 (MON_FEMALE) which is 100% female. // 255 (MON_GENDERLESS) is reserved for genderless Pokémon. #define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100)) -// Macros to allow editing every form at once #define FLIP 0 #define NO_FLIP 1 -#if P_UPDATED_STATS >= GEN_6 - #define PIKACHU_BASE_DEFENSES\ - .baseDefense = 40, \ - .baseSpDefense = 50 -#else - #define PIKACHU_BASE_DEFENSES\ - .baseDefense = 30, \ - .baseSpDefense = 40 -#endif - -#define PIKACHU_SPECIES_INFO(gender, flip) \ - { \ - .baseHP = 35, \ - .baseAttack = 55, \ - .baseSpeed = 90, \ - .baseSpAttack = 50, \ - PIKACHU_BASE_DEFENSES, \ - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ - .catchRate = 190, \ - .expYield = 112, \ - .evYield_Speed = 2, \ - .itemRare = ITEM_LIGHT_BALL, \ - .genderRatio = gender, \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ - .bodyColor = BODY_COLOR_YELLOW, \ - .noFlip = flip, \ - } - -#define COSPLAY_PIKACHU_SPECIES_INFO(flip) PIKACHU_SPECIES_INFO(MON_FEMALE, flip) -#define CAP_PIKACHU_SPECIES_INFO(flip) PIKACHU_SPECIES_INFO(MON_MALE, flip) - -#define PICHU_SPECIES_INFO(flip) \ - { \ - .baseHP = 20, \ - .baseAttack = 40, \ - .baseDefense = 15, \ - .baseSpeed = 60, \ - .baseSpAttack = 35, \ - .baseSpDefense = 35, \ - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ - .catchRate = 190, \ - .expYield = 41, \ - .evYield_Speed = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ - .bodyColor = BODY_COLOR_YELLOW, \ - .noFlip = flip, \ - } - -#define UNOWN_SPECIES_INFO(flip) \ - { \ - .baseHP = 48, \ - .baseAttack = 72, \ - .baseDefense = 48, \ - .baseSpeed = 48, \ - .baseSpAttack = 72, \ - .baseSpDefense = 48, \ - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ - .catchRate = 225, \ - .expYield = 118, \ - .evYield_Attack = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 40, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_BLACK, \ - .noFlip = flip, \ - } - -#define CASTFORM_SPECIES_INFO(type, color) \ - { \ - .baseHP = 70, \ - .baseAttack = 70, \ - .baseDefense = 70, \ - .baseSpeed = 70, \ - .baseSpAttack = 70, \ - .baseSpDefense = 70, \ - .types = { type, type }, \ - .catchRate = 45, \ - .expYield = 147, \ - .evYield_HP = 1, \ - .itemCommon = ITEM_MYSTIC_WATER, \ - .itemRare = ITEM_MYSTIC_WATER, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 25, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_FORECAST, ABILITY_NONE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define BURMY_SPECIES_INFO(color) \ - { \ - .baseHP = 40, \ - .baseAttack = 29, \ - .baseDefense = 45, \ - .baseSpeed = 36, \ - .baseSpAttack = 29, \ - .baseSpDefense = 45, \ - .types = { TYPE_BUG, TYPE_BUG}, \ - .catchRate = 120, \ - .expYield = 45, \ - .evYield_SpDefense = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 15, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ - .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_OVERCOAT},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define CHERRIM_SPECIES_INFO(color) \ - { \ - .baseHP = 70, \ - .baseAttack = 60, \ - .baseDefense = 70, \ - .baseSpeed = 85, \ - .baseSpAttack = 87, \ - .baseSpDefense = 78, \ - .types = { TYPE_GRASS, TYPE_GRASS}, \ - .catchRate = 75, \ - .expYield = 158, \ - .evYield_SpAttack = 2, \ - .itemRare = ITEM_MIRACLE_SEED, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, \ - .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define SHELLOS_SPECIES_INFO(color) \ - { \ - .baseHP = 76, \ - .baseAttack = 48, \ - .baseDefense = 48, \ - .baseSpeed = 34, \ - .baseSpAttack = 57, \ - .baseSpDefense = 62, \ - .types = { TYPE_WATER, TYPE_WATER}, \ - .catchRate = 190, \ - .expYield = 65, \ - .evYield_HP = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define GASTRODON_SPECIES_INFO(color) \ - { \ - .baseHP = 111, \ - .baseAttack = 83, \ - .baseDefense = 68, \ - .baseSpeed = 39, \ - .baseSpAttack = 92, \ - .baseSpDefense = 82, \ - .types = { TYPE_WATER, TYPE_GROUND}, \ - .catchRate = 75, \ - .expYield = 166, \ - .evYield_HP = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define ROTOM_FORM_SPECIES_INFO(type, flip) \ - { \ - .baseHP = 50, \ - .baseAttack = 65, \ - .baseDefense = 107, \ - .baseSpeed = 86, \ - .baseSpAttack = 105, \ - .baseSpDefense = 107, \ - .types = { TYPE_ELECTRIC, type }, \ - .catchRate = 45, \ - .expYield = 182, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_RED, \ - .noFlip = flip, \ - } - -#define ARCEUS_SPECIES_INFO(type) \ - { \ - .baseHP = 120, \ - .baseAttack = 120, \ - .baseDefense = 120, \ - .baseSpeed = 120, \ - .baseSpAttack = 120, \ - .baseSpDefense = 120, \ - .types = { type, type }, \ - .catchRate = 3, \ - .expYield = 324, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_WHITE, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_MYTHICAL, \ - } - -#define DEERLING_SPECIES_INFO(color) \ - { \ - .baseHP = 60, \ - .baseAttack = 60, \ - .baseDefense = 50, \ - .baseSpeed = 75, \ - .baseSpAttack = 40, \ - .baseSpDefense = 50, \ - .types = { TYPE_NORMAL, TYPE_GRASS}, \ - .catchRate = 190, \ - .expYield = 67, \ - .evYield_Speed = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define SAWSBUCK_SPECIES_INFO \ - { \ - .baseHP = 80, \ - .baseAttack = 100, \ - .baseDefense = 70, \ - .baseSpeed = 95, \ - .baseSpAttack = 60, \ - .baseSpDefense = 70, \ - .types = { TYPE_NORMAL, TYPE_GRASS}, \ - .catchRate = 75, \ - .expYield = 166, \ - .evYield_Attack = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ - .bodyColor = BODY_COLOR_BROWN, \ - .noFlip = FALSE, \ - } - -#define GENESECT_SPECIES_INFO \ - { \ - .baseHP = 71, \ - .baseAttack = 120, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 120, \ - .baseSpDefense = 95, \ - .types = { TYPE_BUG, TYPE_STEEL}, \ - .catchRate = 3, \ - .expYield = 270, \ - .evYield_Attack = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_PURPLE, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_MYTHICAL, \ - } - -#define VIVILLON_SPECIES_INFO(color) \ - { \ - .baseHP = 80, \ - .baseAttack = 52, \ - .baseDefense = 50, \ - .baseSpeed = 89, \ - .baseSpAttack = 90, \ - .baseSpDefense = 50, \ - .types = { TYPE_BUG, TYPE_FLYING}, \ - .catchRate = 45, \ - .expYield = 185, \ - .evYield_HP = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 15, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ - .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define FLABEBE_SPECIES_INFO \ - { \ - .baseHP = 44, \ - .baseAttack = 38, \ - .baseDefense = 39, \ - .baseSpeed = 42, \ - .baseSpAttack = 61, \ - .baseSpDefense = 79, \ - .types = { TYPE_FAIRY, TYPE_FAIRY}, \ - .catchRate = 225, \ - .expYield = 61, \ - .evYield_SpDefense = 1, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ - .bodyColor = BODY_COLOR_WHITE, \ - .noFlip = FALSE, \ - } - -#define FLOETTE_SPECIES_INFO \ - { \ - .baseHP = 54, \ - .baseAttack = 45, \ - .baseDefense = 47, \ - .baseSpeed = 52, \ - .baseSpAttack = 75, \ - .baseSpDefense = 98, \ - .types = { TYPE_FAIRY, TYPE_FAIRY}, \ - .catchRate = 120, \ - .expYield = 130, \ - .evYield_SpDefense = 2, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ - .bodyColor = BODY_COLOR_WHITE, \ - .noFlip = FALSE, \ - } - -#define FLORGES_SPECIES_INFO \ - { \ - .baseHP = 78, \ - .baseAttack = 65, \ - .baseDefense = 68, \ - .baseSpeed = 75, \ - .baseSpAttack = 112, \ - .baseSpDefense = 154, \ - .types = { TYPE_FAIRY, TYPE_FAIRY}, \ - .catchRate = 45, \ - .expYield = 248, \ - .evYield_SpDefense = 3, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ - .bodyColor = BODY_COLOR_WHITE, \ - .noFlip = FALSE, \ - } - -#define FURFROU_SPECIES_INFO(flip) \ - { \ - .baseHP = 75, \ - .baseAttack = 80, \ - .baseDefense = 60, \ - .baseSpeed = 102, \ - .baseSpAttack = 65, \ - .baseSpDefense = 90, \ - .types = { TYPE_NORMAL, TYPE_NORMAL}, \ - .catchRate = 160, \ - .expYield = 165, \ - .evYield_Speed = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ - .abilities = {ABILITY_FUR_COAT, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_WHITE, \ - .noFlip = flip, \ - } - -#define PUMKPABOO_MISC_INFO \ - .types = { TYPE_GHOST, TYPE_GRASS}, \ - .catchRate = 120, \ - .expYield = 67, \ - .evYield_Defense = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA},\ - .bodyColor = BODY_COLOR_BROWN, \ - .noFlip = FALSE - -#define GOURGEIST_MISC_INFO \ - .types = { TYPE_GHOST, TYPE_GRASS}, \ - .catchRate = 60, \ - .expYield = 173, \ - .evYield_Defense = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA},\ - .bodyColor = BODY_COLOR_BROWN, \ - .noFlip = FALSE - -#define XERNEAS_SPECIES_INFO \ - { \ - .baseHP = 126, \ - .baseAttack = 131, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 131, \ - .baseSpDefense = 98, \ - .types = { TYPE_FAIRY, TYPE_FAIRY}, \ - .catchRate = 45, \ - .expYield = 306, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_BLUE, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_LEGENDARY, \ - } - -#define ZYGARDE_50_SPECIES_INFO(ability) \ - { \ - .baseHP = 108, \ - .baseAttack = 100, \ - .baseDefense = 121, \ - .baseSpeed = 95, \ - .baseSpAttack = 81, \ - .baseSpDefense = 95, \ - .types = { TYPE_DRAGON, TYPE_GROUND},\ - .catchRate = 3, \ - .expYield = 270, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ability, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_GREEN, \ - .noFlip = TRUE, \ - .flags = SPECIES_FLAG_LEGENDARY, \ - } - -#define ZYGARDE_10_SPECIES_INFO(ability) \ - { \ - .baseHP = 54, \ - .baseAttack = 100, \ - .baseDefense = 71, \ - .baseSpeed = 115, \ - .baseSpAttack = 61, \ - .baseSpDefense = 85, \ - .types = { TYPE_DRAGON, TYPE_GROUND},\ - .catchRate = 3, \ - .expYield = 219, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ability, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_BLACK, \ - .noFlip = TRUE, \ - .flags = SPECIES_FLAG_LEGENDARY, \ - } - -#define ORICORIO_SPECIES_INFO(type, color) \ -{ \ - .baseHP = 75, \ - .baseAttack = 70, \ - .baseDefense = 70, \ - .baseSpeed = 93, \ - .baseSpAttack = 98, \ - .baseSpDefense = 70, \ - .types = { type, TYPE_FLYING }, \ - .catchRate = 45, \ - .expYield = 167, \ - .evYield_SpAttack = 2, \ - .itemRare = ITEM_HONEY, \ - .genderRatio = PERCENT_FEMALE(75), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ - .abilities = {ABILITY_DANCER, ABILITY_NONE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define ROCKRUFF_SPECIES_INFO(ability1, ability2, hiddenAbility)\ - { \ - .baseHP = 45, \ - .baseAttack = 65, \ - .baseDefense = 40, \ - .baseSpeed = 60, \ - .baseSpAttack = 30, \ - .baseSpDefense = 40, \ - .types = { TYPE_ROCK, TYPE_ROCK}, \ - .catchRate = 190, \ - .expYield = 56, \ - .evYield_Attack = 1, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 15, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ - .abilities = {ability1, ability2, hiddenAbility}, \ - .bodyColor = BODY_COLOR_BROWN, \ - .noFlip = FALSE, \ - } - -#define SILVALLY_SPECIES_INFO(type) \ - { \ - .baseHP = 95, \ - .baseAttack = 95, \ - .baseDefense = 95, \ - .baseSpeed = 95, \ - .baseSpAttack = 95, \ - .baseSpDefense = 95, \ - .types = { type, type }, \ - .catchRate = 3, \ - .expYield = 257, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_GRAY, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_LEGENDARY, \ - } - -#define MINIOR_METEOR_ATTRIBUTES\ - .baseHP = 60, \ - .baseAttack = 60, \ - .baseDefense = 100, \ - .baseSpeed = 60, \ - .baseSpAttack = 60, \ - .baseSpDefense = 100 - -#define MINIOR_CORE_ATTRIBUTES\ - .baseHP = 60, \ - .baseAttack = 100, \ - .baseDefense = 60, \ - .baseSpeed = 120, \ - .baseSpAttack = 100, \ - .baseSpDefense = 60 - -#define MINIOR_MISC_INFO(color) \ - .types = { TYPE_ROCK, TYPE_FLYING}, \ - .catchRate = 30, \ - .expYield = 154, \ - .evYield_Defense = 1, \ - .evYield_SpDefense = 1, \ - .itemRare = ITEM_STAR_PIECE, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 25, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_SLOW, \ - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ - .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, \ - .bodyColor = color, \ - .noFlip = TRUE - -#define MINIOR_METEOR_SPECIES_INFO \ - { \ - MINIOR_METEOR_ATTRIBUTES, \ - MINIOR_MISC_INFO(BODY_COLOR_BROWN), \ - } - - -#define MINIOR_CORE_SPECIES_INFO(color) \ - { \ - MINIOR_CORE_ATTRIBUTES, \ - MINIOR_MISC_INFO(color), \ - } - -#define MIMIKYU_SPECIES_INFO \ - { \ - .baseHP = 55, \ - .baseAttack = 90, \ - .baseDefense = 80, \ - .baseSpeed = 96, \ - .baseSpAttack = 50, \ - .baseSpDefense = 105, \ - .types = { TYPE_GHOST, TYPE_FAIRY}, \ - .catchRate = 45, \ - .expYield = 167, \ - .evYield_SpDefense = 2, \ - .itemRare = ITEM_CHESTO_BERRY, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_DISGUISE, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_YELLOW, \ - .noFlip = FALSE, \ - } - -#define MAGEARNA_SPECIES_INFO(color) \ - { \ - .baseHP = 80, \ - .baseAttack = 95, \ - .baseDefense = 115, \ - .baseSpeed = 65, \ - .baseSpAttack = 130, \ - .baseSpDefense = 115, \ - .types = { TYPE_STEEL, TYPE_FAIRY}, \ - .catchRate = 3, \ - .expYield = 270, \ - .evYield_SpAttack = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_MYTHICAL, \ - } - -#define CRAMORANT_SPECIES_INFO \ - { \ - .baseHP = 70, \ - .baseAttack = 85, \ - .baseDefense = 55, \ - .baseSpeed = 85, \ - .baseSpAttack = 85, \ - .baseSpDefense = 95, \ - .types = { TYPE_FLYING, TYPE_WATER}, \ - .catchRate = 45, \ - .expYield = 166, \ - .evYield_SpDefense = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, \ - .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_BLUE, \ - .noFlip = FALSE, \ - } - -#define TOXTRICITY_SPECIES_INFO(ability2) \ - { \ - .baseHP = 75, \ - .baseAttack = 98, \ - .baseDefense = 70, \ - .baseSpeed = 75, \ - .baseSpAttack = 114, \ - .baseSpDefense = 70, \ - .types = { TYPE_ELECTRIC, TYPE_POISON}, \ - .catchRate = 45, \ - .expYield = 176, \ - .evYield_SpAttack = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 25, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_SLOW, \ - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ - .abilities = {ABILITY_PUNK_ROCK, ability2, ABILITY_TECHNICIAN},\ - .bodyColor = BODY_COLOR_PURPLE, \ - .noFlip = FALSE, \ - } - -#define SINISTEA_SPECIES_INFO \ - { \ - .baseHP = 40, \ - .baseAttack = 45, \ - .baseDefense = 45, \ - .baseSpeed = 50, \ - .baseSpAttack = 74, \ - .baseSpDefense = 54, \ - .types = { TYPE_GHOST, TYPE_GHOST}, \ - .catchRate = 120, \ - .expYield = 62, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ - .bodyColor = BODY_COLOR_PURPLE, \ - .noFlip = FALSE, \ - } - -#define POLTEAGEIST_SPECIES_INFO \ - { \ - .baseHP = 60, \ - .baseAttack = 65, \ - .baseDefense = 65, \ - .baseSpeed = 70, \ - .baseSpAttack = 134, \ - .baseSpDefense = 114, \ - .types = { TYPE_GHOST, TYPE_GHOST}, \ - .catchRate = 60, \ - .expYield = 178, \ - .evYield_SpAttack = 2, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ - .bodyColor = BODY_COLOR_PURPLE, \ - .noFlip = FALSE, \ - } - -#define ALCREMIE_SPECIES_INFO(color) \ - { \ - .baseHP = 65, \ - .baseAttack = 60, \ - .baseDefense = 75, \ - .baseSpeed = 64, \ - .baseSpAttack = 110, \ - .baseSpDefense = 121, \ - .types = { TYPE_FAIRY, TYPE_FAIRY}, \ - .catchRate = 100, \ - .expYield = 173, \ - .evYield_SpDefense = 2, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 20, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ - .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL},\ - .bodyColor = color, \ - .noFlip = FALSE, \ - } - -#define MORPEKO_SPECIES_INFO \ - { \ - .baseHP = 58, \ - .baseAttack = 95, \ - .baseDefense = 58, \ - .baseSpeed = 97, \ - .baseSpAttack = 70, \ - .baseSpDefense = 58, \ - .types = { TYPE_ELECTRIC, TYPE_DARK}, \ - .catchRate = 180, \ - .expYield = 153, \ - .evYield_Speed = 2, \ - .genderRatio = PERCENT_FEMALE(50), \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ - .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_YELLOW, \ - .noFlip = FALSE, \ - } - -#define ZARUDE_SPECIES_INFO \ - { \ - .baseHP = 105, \ - .baseAttack = 120, \ - .baseDefense = 105, \ - .baseSpeed = 105, \ - .baseSpAttack = 70, \ - .baseSpDefense = 95, \ - .types = { TYPE_DARK, TYPE_GRASS}, \ - .catchRate = 3, \ - .expYield = 300, \ - .evYield_Attack = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ - .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE},\ - .bodyColor = BODY_COLOR_GREEN, \ - .noFlip = FALSE, \ - .flags = SPECIES_FLAG_MYTHICAL, \ - } - const struct SpeciesInfo gSpeciesInfo[] = { [SPECIES_NONE] = {0}, +#if P_FAMILY_BULBASAUR [SPECIES_BULBASAUR] = { .baseHP = 45, @@ -886,29 +57,66 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define VENUSAUR_MISC_INFO \ + .types = {TYPE_GRASS, TYPE_POISON}, \ + .catchRate = 45, \ + .evYield_SpAttack = 2, \ + .evYield_SpDefense = 1, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_VENUSAUR] = { + VENUSAUR_MISC_INFO, .baseHP = 80, .baseAttack = 82, .baseDefense = 83, .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 100, - .types = { TYPE_GRASS, TYPE_POISON }, - .catchRate = 45, .expYield = 236, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_VENUSAUR_MEGA] = + { + VENUSAUR_MISC_INFO, + .baseHP = 80, + .baseAttack = 100, + .baseDefense = 123, + .baseSpeed = 80, + .baseSpAttack = 122, + .baseSpDefense = 120, + .expYield = 281, + .abilities = {ABILITY_THICK_FAT, ABILITY_THICK_FAT, ABILITY_THICK_FAT}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#if P_GIGANTAMAX_FORMS + [SPECIES_VENUSAUR_GIGANTAMAX] = + { + VENUSAUR_MISC_INFO, + .baseHP = 80, + .baseAttack = 82, + .baseDefense = 83, + .baseSpeed = 80, + .baseSpAttack = 100, + .baseSpDefense = 100, + .expYield = 236, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL}, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_BULBASAUR + +#if P_FAMILY_CHARMANDER [SPECIES_CHARMANDER] = { .baseHP = 39, @@ -954,28 +162,85 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define CHARIZARD_MISC_INFO \ + .catchRate = 45, \ + .evYield_SpAttack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, \ + .noFlip = FALSE + [SPECIES_CHARIZARD] = { + CHARIZARD_MISC_INFO, .baseHP = 78, .baseAttack = 84, .baseDefense = 78, .baseSpeed = 100, .baseSpAttack = 109, .baseSpDefense = 85, - .types = { TYPE_FIRE, TYPE_FLYING }, - .catchRate = 45, + .types = {TYPE_FIRE, TYPE_FLYING}, .expYield = 240, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_CHARIZARD_MEGA_X] = + { + CHARIZARD_MISC_INFO, + .baseHP = 78, + .baseAttack = 130, + .baseDefense = 111, + .baseSpeed = 100, + .baseSpAttack = 130, + .baseSpDefense = 85, + .types = { TYPE_FIRE, TYPE_DRAGON}, + .expYield = 285, + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, + .bodyColor = BODY_COLOR_BLACK, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, + + [SPECIES_CHARIZARD_MEGA_Y] = + { + CHARIZARD_MISC_INFO, + .baseHP = 78, + .baseAttack = 104, + .baseDefense = 78, + .baseSpeed = 100, + .baseSpAttack = 159, + .baseSpDefense = 115, + .types = { TYPE_FIRE, TYPE_FLYING}, + .expYield = 285, + .abilities = {ABILITY_DROUGHT, ABILITY_DROUGHT, ABILITY_DROUGHT}, + .bodyColor = BODY_COLOR_RED, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#if P_GIGANTAMAX_FORMS + [SPECIES_CHARIZARD_GIGANTAMAX] = + { + CHARIZARD_MISC_INFO, + .baseHP = 78, + .baseAttack = 84, + .baseDefense = 78, + .baseSpeed = 100, + .baseSpAttack = 109, + .baseSpDefense = 85, + .types = {TYPE_FIRE, TYPE_FLYING}, + .expYield = 240, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, + .bodyColor = BODY_COLOR_RED, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_CHARMANDER + +#if P_FAMILY_SQUIRTLE [SPECIES_SQUIRTLE] = { .baseHP = 44, @@ -1021,28 +286,65 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BLASTOISE_MISC_INFO \ + .types = {TYPE_WATER, TYPE_WATER}, \ + .catchRate = 45, \ + .evYield_SpDefense = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_BLASTOISE] = { + BLASTOISE_MISC_INFO, .baseHP = 79, .baseAttack = 83, .baseDefense = 100, .baseSpeed = 78, .baseSpAttack = 85, .baseSpDefense = 105, - .types = { TYPE_WATER, TYPE_WATER }, - .catchRate = 45, .expYield = 239, - .evYield_SpDefense = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_RAIN_DISH}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_BLASTOISE_MEGA] = + { + BLASTOISE_MISC_INFO, + .baseHP = 79, + .baseAttack = 103, + .baseDefense = 120, + .baseSpeed = 78, + .baseSpAttack = 135, + .baseSpDefense = 115, + .expYield = 284, + .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#if P_GIGANTAMAX_FORMS + [SPECIES_BLASTOISE_GIGANTAMAX] = + { + BLASTOISE_MISC_INFO, + .baseHP = 79, + .baseAttack = 83, + .baseDefense = 100, + .baseSpeed = 78, + .baseSpAttack = 85, + .baseSpDefense = 105, + .expYield = 239, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_RAIN_DISH}, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SQUIRTLE + +#if P_FAMILY_CATERPIE [SPECIES_CATERPIE] = { .baseHP = 45, @@ -1087,34 +389,43 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BUTTERFREE_MISC_INFO \ + .baseHP = 60, \ + .baseAttack = 45, \ + .baseDefense = 50, \ + .baseSpeed = 70, \ + .baseSpDefense = 80, \ + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 90 : 80, \ + .types = {TYPE_BUG, TYPE_FLYING}, \ + .catchRate = 45, \ + .expYield = 178, \ + .evYield_SpAttack = 2, \ + .evYield_SpDefense = 1, \ + .itemRare = ITEM_SILVER_POWDER, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_TINTED_LENS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE + [SPECIES_BUTTERFREE] = { - .baseHP = 60, - .baseAttack = 45, - .baseDefense = 50, - .baseSpeed = 70, - .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 90, - #else - .baseSpAttack = 80, - #endif - .types = { TYPE_BUG, TYPE_FLYING}, - .catchRate = 45, - .expYield = 178, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, - .itemRare = ITEM_SILVER_POWDER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_TINTED_LENS}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, + BUTTERFREE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_BUTTERFREE_GIGANTAMAX] = + { + BUTTERFREE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_CATERPIE + +#if P_FAMILY_WEEDLE [SPECIES_WEEDLE] = { .baseHP = 40, @@ -1159,34 +470,53 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BEEDRILL_ATTACK (P_UPDATED_STATS >= GEN_6 ? 90 : 80) + +#define BEEDRILL_MISC_INFO \ + .types = { TYPE_BUG, TYPE_POISON}, \ + .catchRate = 45, \ + .evYield_Attack = 2, \ + .evYield_SpDefense = 1, \ + .itemRare = ITEM_POISON_BARB, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + [SPECIES_BEEDRILL] = { + BEEDRILL_MISC_INFO, .baseHP = 65, .baseDefense = 40, .baseSpeed = 75, .baseSpAttack = 45, .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 90, - #else - .baseAttack = 80, - #endif - .types = { TYPE_BUG, TYPE_POISON}, - .catchRate = 45, + .baseAttack = BEEDRILL_ATTACK, .expYield = 178, - .evYield_Attack = 2, - .evYield_SpDefense = 1, - .itemRare = ITEM_POISON_BARB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_SNIPER}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_BEEDRILL_MEGA] = + { + BEEDRILL_MISC_INFO, + .baseHP = 65, + .baseAttack = BEEDRILL_ATTACK + 60, + .baseDefense = 40, + .baseSpeed = 145, + .baseSpAttack = 15, + .baseSpDefense = 80, + .expYield = 223, + .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_WEEDLE + +#if P_FAMILY_PIDGEY [SPECIES_PIDGEY] = { .baseHP = 40, @@ -1231,56 +561,88 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define PIDGEOT_SPEED (P_UPDATED_STATS >= GEN_6 ? 101 : 91) + +#define PIDGEOT_MISC_INFO \ + .types = { TYPE_NORMAL, TYPE_FLYING}, \ + .catchRate = 45, \ + .evYield_Speed = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_PIDGEOT] = { + PIDGEOT_MISC_INFO, .baseHP = 83, .baseAttack = 80, .baseDefense = 75, .baseSpAttack = 70, .baseSpDefense = 70, - #if P_UPDATED_STATS >= GEN_6 - .baseSpeed = 101, - #else - .baseSpeed = 91, - #endif - .types = { TYPE_NORMAL, TYPE_FLYING}, - .catchRate = 45, + .baseSpeed = PIDGEOT_SPEED, .expYield = 216, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_PIDGEOT_MEGA] = + { + PIDGEOT_MISC_INFO, + .baseHP = 83, + .baseAttack = 80, + .baseDefense = 80, + .baseSpeed = PIDGEOT_SPEED + 20, + .baseSpAttack = 135, + .baseSpDefense = 80, + .expYield = 261, + .abilities = {ABILITY_NO_GUARD, ABILITY_NO_GUARD, ABILITY_NO_GUARD}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_PIDGEY + +#if P_FAMILY_RATTATA +#define RATTATA_FAMILY_MISC_INFO \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define RATTATA_MISC_INFO \ + .baseHP = 30, \ + .baseAttack = 56, \ + .baseDefense = 35, \ + .baseSpeed = 72, \ + .baseSpAttack = 25, \ + .baseSpDefense = 35, \ + .catchRate = 255, \ + .expYield = 51, \ + .evYield_Speed = 1, \ + RATTATA_FAMILY_MISC_INFO + +#define RATICATE_MISC_INFO \ + .catchRate = 127, \ + .expYield = 145, \ + .evYield_Speed = 2, \ + RATTATA_FAMILY_MISC_INFO + [SPECIES_RATTATA] = { - .baseHP = 30, - .baseAttack = 56, - .baseDefense = 35, - .baseSpeed = 72, - .baseSpAttack = 25, - .baseSpDefense = 35, + RATTATA_MISC_INFO, .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 255, - .expYield = 51, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, [SPECIES_RATICATE] = { + RATICATE_MISC_INFO, .baseHP = 55, .baseAttack = 81, .baseDefense = 60, @@ -1288,19 +650,40 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 50, .baseSpDefense = 70, .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 127, - .expYield = 145, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_ALOLAN_FORMS + [SPECIES_RATTATA_ALOLAN] = + { + RATTATA_MISC_INFO, + .types = { TYPE_DARK, TYPE_NORMAL}, + .itemRare = ITEM_PECHA_BERRY, + .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, + .bodyColor = BODY_COLOR_BLACK, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, + + [SPECIES_RATICATE_ALOLAN] = + { + RATICATE_MISC_INFO, + .baseHP = 75, + .baseAttack = 71, + .baseDefense = 70, + .baseSpeed = 77, + .baseSpAttack = 40, + .baseSpDefense = 80, + .types = { TYPE_DARK, TYPE_NORMAL}, + .itemRare = ITEM_PECHA_BERRY, + .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, + .bodyColor = BODY_COLOR_BLACK, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_RATTATA + +#if P_FAMILY_SPEAROW [SPECIES_SPEAROW] = { .baseHP = 40, @@ -1346,7 +729,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SPEAROW +#if P_FAMILY_EKANS [SPECIES_EKANS] = { .baseHP = 35, @@ -1372,15 +757,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_ARBOK] = { .baseHP = 60, + .baseAttack = P_UPDATED_STATS >= GEN_7 ? 95 : 85, .baseDefense = 69, .baseSpeed = 80, .baseSpAttack = 65, .baseSpDefense = 79, - #if P_UPDATED_STATS >= GEN_7 - .baseAttack = 95, - #else - .baseAttack = 85, - #endif .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 157, @@ -1394,37 +775,161 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_EKANS - [SPECIES_PIKACHU] = PIKACHU_SPECIES_INFO(PERCENT_FEMALE(50), FLIP), +#if P_FAMILY_PIKACHU +#define PICHU_MISC_INFO \ + .baseHP = 20, \ + .baseAttack = 40, \ + .baseDefense = 15, \ + .baseSpeed = 60, \ + .baseSpAttack = 35, \ + .baseSpDefense = 35, \ + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ + .catchRate = 190, \ + .expYield = 41, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ + .bodyColor = BODY_COLOR_YELLOW - [SPECIES_RAICHU] = + [SPECIES_PICHU] = { - .baseHP = 60, - .baseAttack = 90, - .baseDefense = 55, - .baseSpAttack = 90, - .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_6 - .baseSpeed = 110, - #else - .baseSpeed = 100, - #endif - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 75, - .expYield = 218, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_YELLOW, + PICHU_MISC_INFO, .noFlip = FALSE, }, + [SPECIES_PICHU_SPIKY_EARED] = + { + PICHU_MISC_INFO, + .noFlip = TRUE, + }, + +#define PIKACHU_MISC_INFO(gender, flip) \ + .baseHP = 35, \ + .baseAttack = 55, \ + .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30, \ + .baseSpeed = 90, \ + .baseSpAttack = 50, \ + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40, \ + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ + .catchRate = 190, \ + .expYield = 112, \ + .evYield_Speed = 2, \ + .itemRare = ITEM_LIGHT_BALL, \ + .genderRatio = gender, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = flip + + [SPECIES_PIKACHU] = { PIKACHU_MISC_INFO(PERCENT_FEMALE(50), FLIP) }, + +#define COSPLAY_PIKACHU_SPECIES_INFO(flip) { PIKACHU_MISC_INFO(MON_FEMALE, flip) } + + [SPECIES_PIKACHU_COSPLAY] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_ROCK_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_BELLE] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_POP_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_PH_D] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_LIBRE] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + +#define CAP_PIKACHU_SPECIES_INFO(flip) { PIKACHU_MISC_INFO(MON_MALE, flip) } + + [SPECIES_PIKACHU_ORIGINAL_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_HOENN_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_SINNOH_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_UNOVA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_KALOS_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_ALOLA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_PARTNER_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_WORLD_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + +#if P_GIGANTAMAX_FORMS + [SPECIES_PIKACHU_GIGANTAMAX] = + { + PIKACHU_MISC_INFO(PERCENT_FEMALE(50), FLIP), + .gigantamax = TRUE, + }, +#endif + +#define RAICHU_SPEED (P_UPDATED_STATS >= GEN_6 ? 110 : 100) + +#define RAICHU_MISC_INFO \ + .catchRate = 75, \ + .expYield = 218, \ + .evYield_Speed = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ + .noFlip = FALSE + + [SPECIES_RAICHU] = + { + RAICHU_MISC_INFO, + .baseHP = 60, + .baseAttack = 90, + .baseDefense = 55, + .baseSpeed = RAICHU_SPEED, + .baseSpAttack = 90, + .baseSpDefense = 80, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, + .bodyColor = BODY_COLOR_YELLOW, + }, + +#if P_ALOLAN_FORMS + [SPECIES_RAICHU_ALOLAN] = + { + RAICHU_MISC_INFO, + .baseHP = 60, + .baseAttack = 85, + .baseDefense = 50, + .baseSpeed = RAICHU_SPEED, + .baseSpAttack = 95, + .baseSpDefense = 85, + .types = { TYPE_ELECTRIC, TYPE_PSYCHIC}, + .abilities = {ABILITY_SURGE_SURFER, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_PIKACHU + +#if P_FAMILY_SANDSHREW +#define SANDSHREW_FAMILY_MISC_INFO \ + .itemRare = ITEM_GRIP_CLAW, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define SANDSHREW_MISC_INFO \ + .catchRate = 255, \ + .expYield = 60, \ + .evYield_Defense = 1, \ + SANDSHREW_FAMILY_MISC_INFO + +#define SANDSLASH_MISC_INFO \ + .catchRate = 90, \ + .expYield = 158, \ + .evYield_Defense = 2, \ + SANDSHREW_FAMILY_MISC_INFO + [SPECIES_SANDSHREW] = { + SANDSHREW_MISC_INFO, .baseHP = 50, .baseAttack = 75, .baseDefense = 85, @@ -1432,22 +937,13 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 20, .baseSpDefense = 30, .types = { TYPE_GROUND, TYPE_GROUND }, - .catchRate = 255, - .expYield = 60, - .evYield_Defense = 1, - .itemRare = ITEM_GRIP_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, [SPECIES_SANDSLASH] = { + SANDSLASH_MISC_INFO, .baseHP = 75, .baseAttack = 100, .baseDefense = 110, @@ -1455,20 +951,44 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 45, .baseSpDefense = 55, .types = { TYPE_GROUND, TYPE_GROUND }, - .catchRate = 90, - .expYield = 158, - .evYield_Defense = 2, - .itemRare = ITEM_GRIP_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, +#if P_ALOLAN_FORMS + [SPECIES_SANDSHREW_ALOLAN] = + { + SANDSHREW_MISC_INFO, + .baseHP = 50, + .baseAttack = 75, + .baseDefense = 90, + .baseSpeed = 40, + .baseSpAttack = 10, + .baseSpDefense = 35, + .types = { TYPE_ICE, TYPE_STEEL}, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, + .bodyColor = BODY_COLOR_BLUE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, + + [SPECIES_SANDSLASH_ALOLAN] = + { + SANDSLASH_MISC_INFO, + .baseHP = 75, + .baseAttack = 100, + .baseDefense = 120, + .baseSpeed = 65, + .baseSpAttack = 25, + .baseSpDefense = 65, + .types = { TYPE_ICE, TYPE_STEEL}, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, + .bodyColor = BODY_COLOR_BLUE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_SANDSHREW + +#if P_FAMILY_NIDORAN [SPECIES_NIDORAN_F] = { .baseHP = 55, @@ -1516,15 +1036,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_NIDOQUEEN] = { .baseHP = 90, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 92 : 82, .baseDefense = 87, .baseSpeed = 76, .baseSpAttack = 75, .baseSpDefense = 85, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 92, - #else - .baseAttack = 82, - #endif .types = { TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 227, @@ -1586,15 +1102,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_NIDOKING] = { .baseHP = 81, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 102 : 92, .baseDefense = 77, .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 75, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 102, - #else - .baseAttack = 92, - #endif .types = { TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 227, @@ -1608,6 +1120,37 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_NIDORAN + +#if P_FAMILY_CLEFAIRY +#if P_UPDATED_TYPES >= GEN_6 + #define CLEFAIRY_FAMILY_TYPES { TYPE_FAIRY, TYPE_FAIRY } +#else + #define CLEFAIRY_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL } +#endif + + [SPECIES_CLEFFA] = + { + .baseHP = 50, + .baseAttack = 25, + .baseDefense = 28, + .baseSpeed = 15, + .baseSpAttack = 45, + .baseSpDefense = 55, + .types = CLEFAIRY_FAMILY_TYPES, + .catchRate = 150, + .expYield = 44, + .evYield_SpDefense = 1, + .itemRare = ITEM_MOON_STONE, + .genderRatio = PERCENT_FEMALE(75), + .eggCycles = 10, + .friendship = 140, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = TRUE, + }, [SPECIES_CLEFAIRY] = { @@ -1617,11 +1160,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 35, .baseSpAttack = 60, .baseSpDefense = 65, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif + .types = CLEFAIRY_FAMILY_TYPES, .catchRate = 150, .expYield = 113, .evYield_HP = 2, @@ -1642,17 +1181,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 73, .baseSpeed = 60, + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 95 : 85, .baseSpDefense = 90, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 95, - #else - .baseSpAttack = 85, - #endif - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif + .types = CLEFAIRY_FAMILY_TYPES, .catchRate = 25, .expYield = 217, .evYield_HP = 3, @@ -1666,32 +1197,48 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, +#endif //P_FAMILY_CLEFAIRY + +#if P_FAMILY_VULPIX +#define VULPIX_FAMILY_MISC_INFO \ + .genderRatio = PERCENT_FEMALE(75), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define VULPIX_MISC_INFO \ + .baseHP = 38, \ + .baseAttack = 41, \ + .baseDefense = 40, \ + .baseSpeed = 65, \ + .baseSpAttack = 50, \ + .baseSpDefense = 65, \ + .catchRate = 190, \ + .expYield = 60, \ + .evYield_Speed = 1, \ + VULPIX_FAMILY_MISC_INFO + +#define NINETALES_MISC_INFO \ + .catchRate = 75, \ + .expYield = 177, \ + .evYield_Speed = 1, \ + .evYield_SpDefense = 1, \ + VULPIX_FAMILY_MISC_INFO [SPECIES_VULPIX] = { - .baseHP = 38, - .baseAttack = 41, - .baseDefense = 40, - .baseSpeed = 65, - .baseSpAttack = 50, - .baseSpDefense = 65, + VULPIX_MISC_INFO, .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 190, - .expYield = 60, - .evYield_Speed = 1, .itemRare = ITEM_CHARCOAL, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_DROUGHT}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, [SPECIES_NINETALES] = { + NINETALES_MISC_INFO, .baseHP = 73, .baseAttack = 76, .baseDefense = 75, @@ -1699,19 +1246,67 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 81, .baseSpDefense = 100, .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 75, - .expYield = 177, - .evYield_Speed = 1, - .evYield_SpDefense = 1, .itemRare = ITEM_CHARCOAL, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_DROUGHT}, .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, + }, + +#if P_ALOLAN_FORMS + [SPECIES_VULPIX_ALOLAN] = + { + VULPIX_MISC_INFO, + .types = { TYPE_ICE, TYPE_ICE}, + .itemRare = ITEM_SNOWBALL, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, + .bodyColor = BODY_COLOR_BLUE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, + + [SPECIES_NINETALES_ALOLAN] = + { + NINETALES_MISC_INFO, + .baseHP = 73, + .baseAttack = 67, + .baseDefense = 75, + .baseSpeed = 109, + .baseSpAttack = 81, + .baseSpDefense = 100, + .types = { TYPE_ICE, TYPE_FAIRY}, + .itemRare = ITEM_SNOWBALL, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, + .bodyColor = BODY_COLOR_BLUE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_VULPIX + +#if P_FAMILY_JIGGLYPUFF +#if P_UPDATED_TYPES >= GEN_6 + #define JIGGLYPUFF_FAMILY_TYPES { TYPE_NORMAL, TYPE_FAIRY} +#else + #define JIGGLYPUFF_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL} +#endif + + [SPECIES_IGGLYBUFF] = + { + .baseHP = 90, + .baseAttack = 30, + .baseDefense = 15, + .baseSpeed = 15, + .baseSpAttack = 40, + .baseSpDefense = 20, + .types = JIGGLYPUFF_FAMILY_TYPES, + .catchRate = 170, + .expYield = 42, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(75), + .eggCycles = 10, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = TRUE, }, [SPECIES_JIGGLYPUFF] = @@ -1722,11 +1317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 20, .baseSpAttack = 45, .baseSpDefense = 25, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_NORMAL, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif + .types = JIGGLYPUFF_FAMILY_TYPES, .catchRate = 170, .expYield = 95, .evYield_HP = 2, @@ -1747,17 +1338,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 45, .baseSpeed = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 85 : 75, .baseSpDefense = 50, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 85, - #else - .baseSpAttack = 75, - #endif - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_NORMAL, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif + .types = JIGGLYPUFF_FAMILY_TYPES, .catchRate = 50, .expYield = 196, .evYield_HP = 3, @@ -1771,7 +1354,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, }, +#endif //P_FAMILY_JIGGLYPUFF +#if P_FAMILY_ZUBAT [SPECIES_ZUBAT] = { .baseHP = 40, @@ -1816,6 +1401,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_CROBAT] = + { + .baseHP = 85, + .baseAttack = 90, + .baseDefense = 80, + .baseSpeed = 130, + .baseSpAttack = 70, + .baseSpDefense = 80, + .types = { TYPE_POISON, TYPE_FLYING }, + .catchRate = 90, + .expYield = 241, + .evYield_Speed = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_ZUBAT + +#if P_FAMILY_ODDISH [SPECIES_ODDISH] = { .baseHP = 45, @@ -1868,12 +1477,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 85, .baseSpeed = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 110 : 100, .baseSpDefense = 90, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 110, - #else - .baseSpAttack = 100, - #endif .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 221, @@ -1889,6 +1494,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_BELLOSSOM] = + { + .baseHP = 75, + .baseAttack = 80, + .baseDefense = P_UPDATED_STATS >= GEN_6 ? 95 : 85, + .baseSpeed = 50, + .baseSpAttack = 90, + .baseSpDefense = 100, + .types = { TYPE_GRASS, TYPE_GRASS}, + .catchRate = 45, + .expYield = 221, + .evYield_SpDefense = 3, + .itemRare = ITEM_ABSORB_BULB, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HEALER}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_ODDISH + +#if P_FAMILY_PARAS [SPECIES_PARAS] = { .baseHP = 35, @@ -1937,7 +1567,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_PARAS +#if P_FAMILY_VENONAT [SPECIES_VENONAT] = { .baseHP = 60, @@ -1983,9 +1615,36 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_VENONAT + +#if P_FAMILY_DIGLETT +#define DIGLETT_FAMILY_MISC_INFO \ + .itemRare = ITEM_SOFT_SAND, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BROWN + +#define DIGLETT_MISC_INFO \ + .catchRate = 255, \ + .expYield = 53, \ + .evYield_Speed = 1, \ + .noFlip = FALSE, \ + DIGLETT_FAMILY_MISC_INFO + +#define DUGTRIO_MISC_INFO \ + .catchRate = 50, \ + .expYield = 149, \ + .evYield_Speed = 2, \ + DIGLETT_FAMILY_MISC_INFO + +#define DUGTRIO_ATTACK (P_UPDATED_STATS >= GEN_7 ? 100 : 80) [SPECIES_DIGLETT] = { + DIGLETT_MISC_INFO, .baseHP = 10, .baseAttack = 55, .baseDefense = 25, @@ -1993,72 +1652,97 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 35, .baseSpDefense = 45, .types = { TYPE_GROUND, TYPE_GROUND }, - .catchRate = 255, - .expYield = 53, - .evYield_Speed = 1, - .itemRare = ITEM_SOFT_SAND, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, [SPECIES_DUGTRIO] = { + DUGTRIO_MISC_INFO, .baseHP = 35, + .baseAttack = DUGTRIO_ATTACK, .baseDefense = 50, .baseSpeed = 120, .baseSpAttack = 50, .baseSpDefense = 70, - #if P_UPDATED_STATS >= GEN_7 - .baseAttack = 100, - #else - .baseAttack = 80, - #endif .types = { TYPE_GROUND, TYPE_GROUND}, - .catchRate = 50, - .expYield = 149, - .evYield_Speed = 2, - .itemRare = ITEM_SOFT_SAND, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#if P_ALOLAN_FORMS + [SPECIES_DIGLETT_ALOLAN] = + { + DIGLETT_MISC_INFO, + .baseHP = 10, + .baseAttack = 55, + .baseDefense = 30, + .baseSpeed = 90, + .baseSpAttack = 35, + .baseSpDefense = 45, + .types = { TYPE_GROUND, TYPE_STEEL}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, + + [SPECIES_DUGTRIO_ALOLAN] = + { + DUGTRIO_MISC_INFO, + .baseHP = 35, + .baseAttack = DUGTRIO_ATTACK, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 50, + .baseSpDefense = 70, + .types = { TYPE_GROUND, TYPE_STEEL}, + .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, + .noFlip = TRUE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_DIGLETT + +#if P_FAMILY_MEOWTH +#define MEOWTH_MISC_INFO \ + .catchRate = 255, \ + .expYield = 58, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define PERSIAN_MISC_INFO \ + .catchRate = 90, \ + .expYield = 154, \ + .evYield_Speed = 2, \ + .itemRare = ITEM_QUICK_CLAW, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + [SPECIES_MEOWTH] = { + MEOWTH_MISC_INFO, .baseHP = 40, .baseAttack = 45, .baseDefense = 35, .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 40, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 255, - .expYield = 58, .evYield_Speed = 1, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .itemRare = ITEM_QUICK_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, [SPECIES_PERSIAN] = { + PERSIAN_MISC_INFO, .baseHP = 65, .baseAttack = 70, .baseDefense = 60, @@ -2066,20 +1750,105 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 65, .baseSpDefense = 65, .types = { TYPE_NORMAL, TYPE_NORMAL }, + .abilities = {ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, + .bodyColor = BODY_COLOR_YELLOW, + }, + +#if P_ALOLAN_FORMS + [SPECIES_MEOWTH_ALOLAN] = + { + MEOWTH_MISC_INFO, + .baseHP = 40, + .baseAttack = 35, + .baseDefense = 35, + .baseSpeed = 90, + .baseSpAttack = 50, + .baseSpDefense = 40, + .evYield_Speed = 1, + .types = { TYPE_DARK, TYPE_DARK }, + .itemRare = ITEM_QUICK_CLAW, + .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_RATTLED}, + .bodyColor = BODY_COLOR_GRAY, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, + + [SPECIES_PERSIAN_ALOLAN] = + { + PERSIAN_MISC_INFO, + .baseHP = 65, + .baseAttack = 60, + .baseDefense = 60, + .baseSpeed = 115, + .baseSpAttack = 75, + .baseSpDefense = 65, + .types = { TYPE_DARK, TYPE_DARK}, + .abilities = {ABILITY_FUR_COAT, ABILITY_TECHNICIAN, ABILITY_RATTLED}, + .bodyColor = BODY_COLOR_GRAY, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS + +#if P_GALARIAN_FORMS + [SPECIES_MEOWTH_GALARIAN] = + { + MEOWTH_MISC_INFO, + .baseHP = 50, + .baseAttack = 65, + .baseDefense = 55, + .baseSpeed = 40, + .baseSpAttack = 40, + .baseSpDefense = 40, + .evYield_Attack = 1, + .types = { TYPE_STEEL, TYPE_STEEL }, + .abilities = {ABILITY_PICKUP, ABILITY_TOUGH_CLAWS, ABILITY_UNNERVE}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_PERRSERKER] = + { + .baseHP = 70, + .baseAttack = 110, + .baseDefense = 100, + .baseSpeed = 50, + .baseSpAttack = 50, + .baseSpDefense = 60, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 90, .expYield = 154, - .evYield_Speed = 2, - .itemRare = ITEM_QUICK_CLAW, + .evYield_Attack = 2, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_YELLOW, + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_TOUGH_CLAWS, ABILITY_STEELY_SPIRIT}, + .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_GALARIAN_FORMS +#if P_GIGANTAMAX_FORMS + [SPECIES_MEOWTH_GIGANTAMAX] = + { + MEOWTH_MISC_INFO, + .baseHP = 40, + .baseAttack = 45, + .baseDefense = 35, + .baseSpeed = 90, + .baseSpAttack = 40, + .baseSpDefense = 40, + .evYield_Speed = 1, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .itemRare = ITEM_QUICK_CLAW, + .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, + .bodyColor = BODY_COLOR_YELLOW, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_MEOWTH + +#if P_FAMILY_PSYDUCK [SPECIES_PSYDUCK] = { .baseHP = 50, @@ -2123,7 +1892,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_PSYDUCK +#if P_FAMILY_MANKEY [SPECIES_MANKEY] = { .baseHP = 40, @@ -2168,8 +1939,54 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_ANNIHILAPE] = + { + .baseHP = 110, + .baseAttack = 115, + .baseDefense = 80, + .baseSpeed = 90, + .baseSpAttack = 50, + .baseSpDefense = 90, + .types = { TYPE_FIGHTING, TYPE_GHOST }, + .catchRate = 45, + .expYield = 268, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_MANKEY + +#if P_FAMILY_GROWLITHE +#define GROWLITHE_FAMILY_MISC_INFO \ + .genderRatio = PERCENT_FEMALE(25), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + +#define GROWLITHE_MISC_INFO \ + .catchRate = 190, \ + .expYield = 70, \ + .evYield_Attack = 1, \ + GROWLITHE_FAMILY_MISC_INFO + +#define ARCANINE_MISC_INFO \ + .catchRate = 75, \ + .expYield = 194, \ + .evYield_Attack = 2, \ + GROWLITHE_FAMILY_MISC_INFO + [SPECIES_GROWLITHE] = { + GROWLITHE_MISC_INFO, .baseHP = 55, .baseAttack = 70, .baseDefense = 45, @@ -2177,21 +1994,12 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 70, .baseSpDefense = 50, .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 190, - .expYield = 70, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, [SPECIES_ARCANINE] = { + ARCANINE_MISC_INFO, .baseHP = 90, .baseAttack = 110, .baseDefense = 80, @@ -2199,19 +2007,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 100, .baseSpDefense = 80, .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 75, - .expYield = 194, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_GROWLITHE_HISUIAN] = + { + GROWLITHE_MISC_INFO, + .baseHP = 60, + .baseAttack = 75, + .baseDefense = 45, + .baseSpeed = 55, + .baseSpAttack = 65, + .baseSpDefense = 50, + .types = { TYPE_FIRE, TYPE_ROCK}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_ARCANINE_HISUIAN] = + { + ARCANINE_MISC_INFO, + .baseHP = 95, + .baseAttack = 115, + .baseDefense = 80, + .baseSpeed = 90, + .baseSpAttack = 95, + .baseSpDefense = 80, + .types = { TYPE_FIRE, TYPE_ROCK}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_GROWLITHE + +#if P_FAMILY_POLIWAG [SPECIES_POLIWAG] = { .baseHP = 40, @@ -2260,15 +2090,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_POLIWRATH] = { .baseHP = 90, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 95 : 85, .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 90, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 95, - #else - .baseAttack = 85, - #endif .types = { TYPE_WATER, TYPE_FIGHTING}, .catchRate = 45, .expYield = 230, @@ -2284,6 +2110,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, + [SPECIES_POLITOED] = + { + .baseHP = 90, + .baseAttack = 75, + .baseDefense = 75, + .baseSpeed = 70, + .baseSpAttack = 90, + .baseSpDefense = 100, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 45, + .expYield = 225, + .evYield_SpDefense = 3, + .itemRare = ITEM_KINGS_ROCK, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_DRIZZLE}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = TRUE, + }, +#endif //P_FAMILY_POLIWAG + +#if P_FAMILY_ABRA [SPECIES_ABRA] = { .baseHP = 25, @@ -2330,33 +2181,52 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, +#define ALAKAZAM_SP_DEF (P_UPDATED_STATS >= GEN_6 ? 95 : 85) + +#define ALAKAZAM_MISC_INFO \ + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ + .catchRate = 50, \ + .evYield_SpAttack = 3, \ + .itemRare = ITEM_TWISTED_SPOON, \ + .genderRatio = PERCENT_FEMALE(25), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_ALAKAZAM] = { + ALAKAZAM_MISC_INFO, .baseHP = 55, .baseAttack = 50, .baseDefense = 45, .baseSpeed = 120, .baseSpAttack = 135, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 95, - #else - .baseSpDefense = 85, - #endif - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 50, + .baseSpDefense = ALAKAZAM_SP_DEF, .expYield = 225, - .evYield_SpAttack = 3, - .itemRare = ITEM_TWISTED_SPOON, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_ALAKAZAM_MEGA] = + { + ALAKAZAM_MISC_INFO, + .baseHP = 55, + .baseAttack = 50, + .baseDefense = 65, + .baseSpeed = 150, + .baseSpAttack = 175, + .baseSpDefense = ALAKAZAM_SP_DEF + 10, + .expYield = 270, + .abilities = {ABILITY_TRACE, ABILITY_TRACE, ABILITY_TRACE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_ABRA + +#if P_FAMILY_MACHOP [SPECIES_MACHOP] = { .baseHP = 70, @@ -2403,29 +2273,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, +#define MACHAMP_MISC_INFO \ + .baseHP = 90, \ + .baseAttack = 130, \ + .baseDefense = 80, \ + .baseSpeed = 55, \ + .baseSpAttack = 65, \ + .baseSpDefense = 85, \ + .types = {TYPE_FIGHTING, TYPE_FIGHTING}, \ + .catchRate = 45, \ + .expYield = 227, \ + .evYield_Attack = 3, \ + .itemRare = ITEM_FOCUS_BAND, \ + .genderRatio = PERCENT_FEMALE(25), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + [SPECIES_MACHAMP] = { - .baseHP = 90, - .baseAttack = 130, - .baseDefense = 80, - .baseSpeed = 55, - .baseSpAttack = 65, - .baseSpDefense = 85, - .types = { TYPE_FIGHTING, TYPE_FIGHTING }, - .catchRate = 45, - .expYield = 227, - .evYield_Attack = 3, - .itemRare = ITEM_FOCUS_BAND, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, + MACHAMP_MISC_INFO }, +#if P_GIGANTAMAX_FORMS + [SPECIES_MACHAMP_GIGANTAMAX] = + { + MACHAMP_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_MACHOP + +#if P_FAMILY_BELLSPROUT [SPECIES_BELLSPROUT] = { .baseHP = 50, @@ -2477,11 +2360,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 70, .baseSpAttack = 100, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 70, - #else - .baseSpDefense = 60, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 70 : 60, .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 221, @@ -2495,7 +2374,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_BELLSPROUT +#if P_FAMILY_TENTACOOL [SPECIES_TENTACOOL] = { .baseHP = 40, @@ -2541,149 +2422,231 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TENTACOOL + +#if P_FAMILY_GEODUDE +#define KANTONIAN_GEODUDE_FAMILY_INFO \ + .types = { TYPE_ROCK, TYPE_GROUND }, \ + .itemRare = ITEM_EVERSTONE, \ + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL} + +#define GEODUDE_FAMILY_MISC_INFO \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + +#define GEODUDE_MISC_INFO \ + .baseHP = 40, \ + .baseAttack = 80, \ + .baseDefense = 100, \ + .baseSpeed = 20, \ + .baseSpAttack = 30, \ + .baseSpDefense = 30, \ + .catchRate = 255, \ + .expYield = 60, \ + .evYield_Defense = 1, \ + GEODUDE_FAMILY_MISC_INFO + +#define GRAVELER_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 95, \ + .baseDefense = 115, \ + .baseSpeed = 35, \ + .baseSpAttack = 45, \ + .baseSpDefense = 45, \ + .catchRate = 120, \ + .expYield = 137, \ + .evYield_Defense = 2, \ + GEODUDE_FAMILY_MISC_INFO + +#define GOLEM_ATTACK (P_UPDATED_STATS >= GEN_6 ? 120 : 110) + +#define GOLEM_MISC_INFO \ + .baseHP = 80, \ + .baseAttack = GOLEM_ATTACK, \ + .baseDefense = 130, \ + .baseSpeed = 45, \ + .baseSpAttack = 55, \ + .baseSpDefense = 65, \ + .catchRate = 45, \ + .expYield = 223, \ + .evYield_Defense = 3, \ + GEODUDE_FAMILY_MISC_INFO [SPECIES_GEODUDE] = { - .baseHP = 40, - .baseAttack = 80, - .baseDefense = 100, - .baseSpeed = 20, - .baseSpAttack = 30, - .baseSpDefense = 30, - .types = { TYPE_ROCK, TYPE_GROUND }, - .catchRate = 255, - .expYield = 60, - .evYield_Defense = 1, - .itemRare = ITEM_EVERSTONE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + KANTONIAN_GEODUDE_FAMILY_INFO, + GEODUDE_MISC_INFO, }, [SPECIES_GRAVELER] = { - .baseHP = 55, - .baseAttack = 95, - .baseDefense = 115, - .baseSpeed = 35, - .baseSpAttack = 45, - .baseSpDefense = 45, - .types = { TYPE_ROCK, TYPE_GROUND }, - .catchRate = 120, - .expYield = 137, - .evYield_Defense = 2, - .itemRare = ITEM_EVERSTONE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + KANTONIAN_GEODUDE_FAMILY_INFO, + GRAVELER_MISC_INFO, }, [SPECIES_GOLEM] = { - .baseHP = 80, - .baseDefense = 130, - .baseSpeed = 45, - .baseSpAttack = 55, - .baseSpDefense = 65, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 120, - #else - .baseAttack = 110, - #endif - .types = { TYPE_ROCK, TYPE_GROUND}, - .catchRate = 45, - .expYield = 223, - .evYield_Defense = 3, - .itemRare = ITEM_EVERSTONE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + KANTONIAN_GEODUDE_FAMILY_INFO, + GOLEM_MISC_INFO, }, +#if P_ALOLAN_FORMS +#define ALOLAN_GEODUDE_FAMILY_INFO \ + .types = { TYPE_ROCK, TYPE_ELECTRIC }, \ + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, \ + .flags = SPECIES_FLAG_ALOLAN_FORM + + [SPECIES_GEODUDE_ALOLAN] = + { + ALOLAN_GEODUDE_FAMILY_INFO, + GEODUDE_MISC_INFO, + .itemRare = ITEM_CELL_BATTERY, + }, + + [SPECIES_GRAVELER_ALOLAN] = + { + ALOLAN_GEODUDE_FAMILY_INFO, + GRAVELER_MISC_INFO, + .itemRare = ITEM_CELL_BATTERY, + }, + + [SPECIES_GOLEM_ALOLAN] = + { + ALOLAN_GEODUDE_FAMILY_INFO, + GOLEM_MISC_INFO, + .itemCommon = ITEM_CELL_BATTERY, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_GEODUDE + +#if P_FAMILY_PONYTA +#define KANTONIAN_PONYTA_FAMILY_INFO \ + .types = { TYPE_FIRE, TYPE_FIRE}, \ + .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY},\ + .bodyColor = BODY_COLOR_YELLOW + +#define PONYTA_FAMILY_MISC_INFO \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define PONYTA_MISC_INFO \ + .baseHP = 50, \ + .baseAttack = 85, \ + .baseDefense = 55, \ + .baseSpeed = 90, \ + .baseSpAttack = 65, \ + .baseSpDefense = 65, \ + .catchRate = 190, \ + .expYield = 82, \ + .evYield_Speed = 1, \ + PONYTA_FAMILY_MISC_INFO + +#define RAPIDASH_MISC_INFO \ + .baseHP = 65, \ + .baseAttack = 100, \ + .baseDefense = 70, \ + .baseSpeed = 105, \ + .baseSpAttack = 80, \ + .baseSpDefense = 80, \ + .catchRate = 60, \ + .expYield = 175, \ + .evYield_Speed = 2, \ + PONYTA_FAMILY_MISC_INFO + [SPECIES_PONYTA] = { - .baseHP = 50, - .baseAttack = 85, - .baseDefense = 55, - .baseSpeed = 90, - .baseSpAttack = 65, - .baseSpDefense = 65, - .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 190, - .expYield = 82, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, + KANTONIAN_PONYTA_FAMILY_INFO, + PONYTA_MISC_INFO, }, [SPECIES_RAPIDASH] = { - .baseHP = 65, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 105, - .baseSpAttack = 80, - .baseSpDefense = 80, - .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 60, - .expYield = 175, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, + KANTONIAN_PONYTA_FAMILY_INFO, + RAPIDASH_MISC_INFO, }, +#define GALARIAN_PONYTA_FAMILY_INFO \ + .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .flags = SPECIES_FLAG_GALARIAN_FORM + +#if P_GALARIAN_FORMS + [SPECIES_PONYTA_GALARIAN] = + { + GALARIAN_PONYTA_FAMILY_INFO, + PONYTA_MISC_INFO, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + }, + + [SPECIES_RAPIDASH_GALARIAN] = + { + GALARIAN_PONYTA_FAMILY_INFO, + RAPIDASH_MISC_INFO, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_PONYTA + +#if P_FAMILY_SLOWPOKE +#define SLOWPOKE_MISC_INFO \ + .baseHP = 90, \ + .baseAttack = 65, \ + .baseDefense = 65, \ + .baseSpeed = 15, \ + .baseSpAttack = 40, \ + .baseSpDefense = 40, \ + .catchRate = 190, \ + .expYield = 63, \ + .evYield_HP = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .bodyColor = BODY_COLOR_PINK, \ + .noFlip = FALSE + +#define SLOWBRO_MISC_INFO \ + .catchRate = 75, \ + .itemRare = ITEM_KINGS_ROCK, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .bodyColor = BODY_COLOR_PINK + +#define SLOWKING_MISC_INFO \ + .catchRate = 70, \ + .expYield = 172, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .bodyColor = BODY_COLOR_PINK, \ + .noFlip = FALSE + [SPECIES_SLOWPOKE] = { - .baseHP = 90, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 15, - .baseSpAttack = 40, - .baseSpDefense = 40, + SLOWPOKE_MISC_INFO, .types = { TYPE_WATER, TYPE_PSYCHIC }, - .catchRate = 190, - .expYield = 63, - .evYield_HP = 1, .itemRare = ITEM_LAGGING_TAIL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, }, [SPECIES_SLOWBRO] = { + SLOWBRO_MISC_INFO, .baseHP = 95, .baseAttack = 75, .baseDefense = 110, @@ -2691,20 +2654,90 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 100, .baseSpDefense = 80, .types = { TYPE_WATER, TYPE_PSYCHIC }, - .catchRate = 75, .expYield = 172, .evYield_Defense = 2, - .itemRare = ITEM_KINGS_ROCK, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, + [SPECIES_SLOWKING] = + { + SLOWKING_MISC_INFO, + .baseHP = 95, + .baseAttack = 75, + .baseDefense = 80, + .baseSpeed = 30, + .baseSpAttack = 100, + .baseSpDefense = 110, + .types = { TYPE_WATER, TYPE_PSYCHIC }, + .evYield_SpDefense = 3, + .itemRare = ITEM_KINGS_ROCK, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, + }, + +#if P_MEGA_EVOLUTIONS + [SPECIES_SLOWBRO_MEGA] = + { + SLOWBRO_MISC_INFO, + .baseHP = 95, + .baseAttack = 75, + .baseDefense = 180, + .baseSpeed = 30, + .baseSpAttack = 130, + .baseSpDefense = 80, + .types = { TYPE_WATER, TYPE_PSYCHIC}, + .expYield = 207, + .evYield_Defense = 2, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SHELL_ARMOR, ABILITY_SHELL_ARMOR}, + .noFlip = FALSE, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#if P_GALARIAN_FORMS + [SPECIES_SLOWPOKE_GALARIAN] = + { + SLOWPOKE_MISC_INFO, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + .abilities = {ABILITY_GLUTTONY, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_SLOWBRO_GALARIAN] = + { + SLOWBRO_MISC_INFO, + .baseHP = 95, + .baseAttack = 100, + .baseDefense = 95, + .baseSpeed = 30, + .baseSpAttack = 100, + .baseSpDefense = 70, + .types = { TYPE_POISON, TYPE_PSYCHIC}, + .expYield = 172, + .evYield_Attack = 2, + .abilities = {ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, + .noFlip = FALSE, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_SLOWKING_GALARIAN] = + { + SLOWKING_MISC_INFO, + .baseHP = 95, + .baseAttack = 65, + .baseDefense = 80, + .baseSpeed = 30, + .baseSpAttack = 110, + .baseSpDefense = 110, + .types = { TYPE_POISON, TYPE_PSYCHIC}, + .evYield_SpDefense = 2, + .abilities = {ABILITY_CURIOUS_MEDICINE, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_SLOWPOKE + +#if P_FAMILY_MAGNEMITE [SPECIES_MAGNEMITE] = { .baseHP = 25, @@ -2751,33 +2784,101 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_MAGNEZONE] = + { + .baseHP = 70, + .baseAttack = 70, + .baseDefense = 115, + .baseSpeed = 60, + .baseSpAttack = 130, + .baseSpDefense = 90, + .types = { TYPE_ELECTRIC, TYPE_STEEL}, + .catchRate = 30, + .expYield = 241, + .evYield_SpAttack = 3, + .itemRare = ITEM_METAL_COAT, + .genderRatio = MON_GENDERLESS, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_MAGNEMITE + +#if P_FAMILY_FARFETCHD +#define FARFETCHD_ATTACK (P_UPDATED_STATS >= GEN_7 ? 90 : 65) + +#define FARFETCHD_MISC_INFO \ + .catchRate = 45, \ + .expYield = 132, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_FARFETCHD] = { + FARFETCHD_MISC_INFO, .baseHP = 52, .baseDefense = 55, .baseSpeed = 60, .baseSpAttack = 58, .baseSpDefense = 62, - #if P_UPDATED_STATS >= GEN_7 - .baseAttack = 90, - #else - .baseAttack = 65, - #endif + .baseAttack = FARFETCHD_ATTACK, .types = { TYPE_NORMAL, TYPE_FLYING}, + .itemRare = ITEM_LEEK, + .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, + }, + +#if P_GALARIAN_FORMS + [SPECIES_FARFETCHD_GALARIAN] = + { + FARFETCHD_MISC_INFO, + .baseHP = 52, + .baseAttack = FARFETCHD_ATTACK + 5, + .baseDefense = 55, + .baseSpeed = 55, + .baseSpAttack = 58, + .baseSpDefense = 62, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, + .itemCommon = ITEM_LEEK, + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_SIRFETCHD] = + { + .baseHP = 62, + .baseAttack = 135, + .baseDefense = 95, + .baseSpeed = 65, + .baseSpAttack = 68, + .baseSpDefense = 82, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, - .expYield = 132, - .evYield_Attack = 1, + .expYield = 177, + .evYield_Attack = 2, .itemRare = ITEM_LEEK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, - .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, - .bodyColor = BODY_COLOR_BROWN, + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, + .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_FARFETCHD +#if P_FAMILY_DODUO [SPECIES_DODUO] = { .baseHP = 35, @@ -2806,13 +2907,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseHP = 60, .baseAttack = 110, .baseDefense = 70, + .baseSpeed = P_UPDATED_STATS >= GEN_7 ? 110 : 100, .baseSpAttack = 60, .baseSpDefense = 60, - #if P_UPDATED_STATS >= GEN_7 - .baseSpeed = 110, - #else - .baseSpeed = 100, - #endif .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 165, @@ -2827,7 +2924,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_DODUO +#if P_FAMILY_SEEL [SPECIES_SEEL] = { .baseHP = 65, @@ -2871,54 +2970,84 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_SEEL + +#if P_FAMILY_GRIMER +#define GRIMER_FAMILY_MISC_INFO \ + .itemRare = ITEM_BLACK_SLUDGE, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS} + +#define GRIMER_MISC_INFO \ + .baseHP = 80, \ + .baseAttack = 80, \ + .baseDefense = 50, \ + .baseSpeed = 25, \ + .baseSpAttack = 40, \ + .baseSpDefense = 50, \ + .catchRate = 190, \ + .expYield = 65, \ + .evYield_HP = 1, \ + .noFlip = FALSE, \ + GRIMER_FAMILY_MISC_INFO + +#define MUK_MISC_INFO \ + .baseHP = 105, \ + .baseAttack = 105, \ + .baseDefense = 75, \ + .baseSpeed = 50, \ + .baseSpAttack = 65, \ + .baseSpDefense = 100, \ + .catchRate = 75, \ + .expYield = 175, \ + .evYield_HP = 1, \ + .evYield_Attack = 1, \ + GRIMER_FAMILY_MISC_INFO + +#define KANTONIAN_GRIMER_FAMILY_INFO \ + .types = { TYPE_POISON, TYPE_POISON }, \ + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, \ + .bodyColor = BODY_COLOR_PURPLE [SPECIES_GRIMER] = { - .baseHP = 80, - .baseAttack = 80, - .baseDefense = 50, - .baseSpeed = 25, - .baseSpAttack = 40, - .baseSpDefense = 50, - .types = { TYPE_POISON, TYPE_POISON }, - .catchRate = 190, - .expYield = 65, - .evYield_HP = 1, - .itemRare = ITEM_BLACK_SLUDGE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, + KANTONIAN_GRIMER_FAMILY_INFO, + GRIMER_MISC_INFO, }, [SPECIES_MUK] = { - .baseHP = 105, - .baseAttack = 105, - .baseDefense = 75, - .baseSpeed = 50, - .baseSpAttack = 65, - .baseSpDefense = 100, - .types = { TYPE_POISON, TYPE_POISON }, - .catchRate = 75, - .expYield = 175, - .evYield_HP = 1, - .evYield_Attack = 1, - .itemCommon = ITEM_BLACK_SLUDGE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, - .bodyColor = BODY_COLOR_PURPLE, + KANTONIAN_GRIMER_FAMILY_INFO, + MUK_MISC_INFO, .noFlip = FALSE, }, +#if P_ALOLAN_FORMS +#define ALOLAN_GRIMER_FAMILY_INFO \ + .types = { TYPE_POISON, TYPE_DARK }, \ + .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY},\ + .bodyColor = BODY_COLOR_GREEN, \ + .flags = SPECIES_FLAG_ALOLAN_FORM + + [SPECIES_GRIMER_ALOLAN] = + { + ALOLAN_GRIMER_FAMILY_INFO, + GRIMER_MISC_INFO, + }, + + [SPECIES_MUK_ALOLAN] = + { + MUK_MISC_INFO, + ALOLAN_GRIMER_FAMILY_INFO, + .noFlip = TRUE, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_GRIMER + +#if P_FAMILY_SHELLDER [SPECIES_SHELLDER] = { .baseHP = 30, @@ -2966,7 +3095,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SHELLDER +#if P_FAMILY_GASTLY [SPECIES_GASTLY] = { .baseHP = 30, @@ -3011,32 +3142,71 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#if P_UPDATED_ABILITIES >= GEN_7 +#define GENGAR_ABILITIES {ABILITY_CURSED_BODY, ABILITY_NONE} +#else +#define GENGAR_ABILITIES {ABILITY_LEVITATE, ABILITY_NONE} +#endif + +#define GENGAR_MISC_INFO \ + .types = {TYPE_GHOST, TYPE_POISON}, \ + .catchRate = 45, \ + .evYield_SpAttack = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + [SPECIES_GENGAR] = { + GENGAR_MISC_INFO, .baseHP = 60, .baseAttack = 65, .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 75, - .types = { TYPE_GHOST, TYPE_POISON }, - .catchRate = 45, .expYield = 225, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #if P_UPDATED_ABILITIES >= GEN_7 - .abilities = {ABILITY_CURSED_BODY, ABILITY_NONE}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, + .abilities = GENGAR_ABILITIES, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_GENGAR_MEGA] = + { + GENGAR_MISC_INFO, + .baseHP = 60, + .baseAttack = 65, + .baseDefense = 80, + .baseSpeed = 130, + .baseSpAttack = 170, + .baseSpDefense = 95, + .expYield = 270, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_SHADOW_TAG, ABILITY_SHADOW_TAG}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#if P_GIGANTAMAX_FORMS + [SPECIES_GENGAR_GIGANTAMAX] = + { + GENGAR_MISC_INFO, + .baseHP = 60, + .baseAttack = 65, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 130, + .baseSpDefense = 75, + .expYield = 225, + .abilities = GENGAR_ABILITIES, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_GASTLY + +#if P_FAMILY_ONIX [SPECIES_ONIX] = { .baseHP = 35, @@ -3059,6 +3229,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define STEELIX_MISC_INFO \ + .types = { TYPE_STEEL, TYPE_GROUND}, \ + .catchRate = 25, \ + .evYield_Defense = 2, \ + .itemRare = ITEM_METAL_COAT, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + + [SPECIES_STEELIX] = + { + STEELIX_MISC_INFO, + .baseHP = 75, + .baseAttack = 85, + .baseDefense = 200, + .baseSpeed = 30, + .baseSpAttack = 55, + .baseSpDefense = 65, + .expYield = 179, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SHEER_FORCE}, + }, + +#if P_MEGA_EVOLUTIONS + [SPECIES_STEELIX_MEGA] = + { + STEELIX_MISC_INFO, + .baseHP = 75, + .baseAttack = 125, + .baseDefense = 230, + .baseSpeed = 30, + .baseSpAttack = 55, + .baseSpDefense = 95, + .expYield = 214, + .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_ONIX + +#if P_FAMILY_DROWZEE [SPECIES_DROWZEE] = { .baseHP = 60, @@ -3102,7 +3316,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_DROWZEE +#if P_FAMILY_KRABBY [SPECIES_KRABBY] = { .baseHP = 30, @@ -3125,76 +3341,105 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define KINGLER_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 130, \ + .baseDefense = 115, \ + .baseSpeed = 75, \ + .baseSpAttack = 50, \ + .baseSpDefense = 50, \ + .types = {TYPE_WATER, TYPE_WATER}, \ + .catchRate = 60, \ + .expYield = 166, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, \ + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = TRUE + [SPECIES_KINGLER] = { - .baseHP = 55, - .baseAttack = 130, - .baseDefense = 115, - .baseSpeed = 75, - .baseSpAttack = 50, - .baseSpDefense = 50, - .types = { TYPE_WATER, TYPE_WATER }, - .catchRate = 60, - .expYield = 166, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, + KINGLER_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_KINGLER_GIGANTAMAX] = + { + KINGLER_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_KRABBY + +#if P_FAMILY_VOLTORB +#define VOLTORB_FAMILY_MISC_INFO \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + +#define VOLTORB_MISC_INFO \ + .baseHP = 40, \ + .baseAttack = 30, \ + .baseDefense = 50, \ + .baseSpeed = 100, \ + .baseSpAttack = 55, \ + .baseSpDefense = 55, \ + .catchRate = 190, \ + .expYield = 66, \ + .evYield_Speed = 1, \ + VOLTORB_FAMILY_MISC_INFO + +#define ELECTRODE_MISC_INFO \ + .baseHP = 60, \ + .baseAttack = 50, \ + .baseDefense = 70, \ + .baseSpAttack = 80, \ + .baseSpDefense = 80, \ + .baseSpeed = P_UPDATED_STATS >= GEN_7 ? 150 : 140, \ + .catchRate = 60, \ + .expYield = 172, \ + .evYield_Speed = 2, \ + VOLTORB_FAMILY_MISC_INFO + [SPECIES_VOLTORB] = { - .baseHP = 40, - .baseAttack = 30, - .baseDefense = 50, - .baseSpeed = 100, - .baseSpAttack = 55, - .baseSpDefense = 55, + VOLTORB_MISC_INFO, .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, - .catchRate = 190, - .expYield = 66, - .evYield_Speed = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, [SPECIES_ELECTRODE] = { - .baseHP = 60, - .baseAttack = 50, - .baseDefense = 70, - .baseSpAttack = 80, - .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_7 - .baseSpeed = 150, - #else - .baseSpeed = 140, - #endif + ELECTRODE_MISC_INFO, .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 60, - .expYield = 172, - .evYield_Speed = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_VOLTORB_HISUIAN] = + { + VOLTORB_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_GRASS}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_ELECTRODE_HISUIAN] = + { + ELECTRODE_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_GRASS}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_VOLTORB + +#if P_FAMILY_EXEGGCUTE [SPECIES_EXEGGCUTE] = { .baseHP = 60, @@ -3218,32 +3463,51 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define EXEGGUTOR_MISC_INFO \ + .catchRate = 45, \ + .expYield = 186, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + +#define EXEGGUTOR_SP_DEF (P_UPDATED_STATS >= GEN_7 ? 75 : 65) + [SPECIES_EXEGGUTOR] = { + EXEGGUTOR_MISC_INFO, .baseHP = 95, .baseAttack = 95, .baseDefense = 85, .baseSpeed = 55, .baseSpAttack = 125, - #if P_UPDATED_STATS >= GEN_7 - .baseSpDefense = 75, - #else - .baseSpDefense = 65, - #endif + .baseSpDefense = EXEGGUTOR_SP_DEF, .types = { TYPE_GRASS, TYPE_PSYCHIC}, - .catchRate = 45, - .expYield = 186, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, +#if P_ALOLAN_FORMS + [SPECIES_EXEGGUTOR_ALOLAN] = + { + EXEGGUTOR_MISC_INFO, + .baseHP = 95, + .baseAttack = 105, + .baseDefense = 85, + .baseSpeed = 45, + .baseSpAttack = 125, + .baseSpDefense = EXEGGUTOR_SP_DEF, + .types = { TYPE_GRASS, TYPE_DRAGON}, + .abilities = {ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST}, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_EXEGGCUTE + +#if P_FAMILY_CUBONE [SPECIES_CUBONE] = { .baseHP = 50, @@ -3267,26 +3531,64 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define MAROWAK_MISC_INFO \ + .baseHP = 60, \ + .baseAttack = 80, \ + .baseDefense = 110, \ + .baseSpeed = 45, \ + .baseSpAttack = 50, \ + .baseSpDefense = 80, \ + .catchRate = 75, \ + .expYield = 149, \ + .evYield_Defense = 2, \ + .itemRare = ITEM_THICK_CLUB, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, \ + .noFlip = FALSE + [SPECIES_MAROWAK] = { - .baseHP = 60, - .baseAttack = 80, - .baseDefense = 110, - .baseSpeed = 45, - .baseSpAttack = 50, - .baseSpDefense = 80, + MAROWAK_MISC_INFO, .types = { TYPE_GROUND, TYPE_GROUND }, - .catchRate = 75, - .expYield = 149, - .evYield_Defense = 2, - .itemRare = ITEM_THICK_CLUB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD, ABILITY_BATTLE_ARMOR}, .bodyColor = BODY_COLOR_BROWN, + }, + +#if P_ALOLAN_FORMS + [SPECIES_MAROWAK_ALOLAN] = + { + MAROWAK_MISC_INFO, + .types = { TYPE_FIRE, TYPE_GHOST}, + .abilities = {ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, + .bodyColor = BODY_COLOR_PURPLE, + .flags = SPECIES_FLAG_ALOLAN_FORM, + }, +#endif //P_ALOLAN_FORMS +#endif //P_FAMILY_CUBONE + +#if P_FAMILY_HITMONS + [SPECIES_TYROGUE] = + { + .baseHP = 35, + .baseAttack = 35, + .baseDefense = 35, + .baseSpeed = 35, + .baseSpAttack = 35, + .baseSpDefense = 35, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, + .catchRate = 75, + .expYield = 42, + .evYield_Attack = 1, + .genderRatio = MON_MALE, + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT}, + .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, @@ -3334,6 +3636,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_HITMONTOP] = + { + .baseHP = 50, + .baseAttack = 95, + .baseDefense = 95, + .baseSpeed = 70, + .baseSpAttack = 35, + .baseSpDefense = 110, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, + .catchRate = 45, + .expYield = 159, + .evYield_SpDefense = 2, + .genderRatio = MON_MALE, + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_HITMONS + +#if P_FAMILY_LICKITUNG [SPECIES_LICKITUNG] = { .baseHP = 90, @@ -3357,6 +3683,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_LICKILICKY] = + { + .baseHP = 110, + .baseAttack = 85, + .baseDefense = 95, + .baseSpeed = 50, + .baseSpAttack = 80, + .baseSpDefense = 95, + .types = { TYPE_NORMAL, TYPE_NORMAL}, + .catchRate = 30, + .expYield = 180, + .evYield_HP = 3, + .itemRare = ITEM_LAGGING_TAIL, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS, ABILITY_CLOUD_NINE}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_LICKITUNG + +#if P_FAMILY_KOFFING [SPECIES_KOFFING] = { .baseHP = 40, @@ -3384,33 +3735,46 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define WEEZING_MISC_INFO \ + .baseHP = 65, \ + .baseAttack = 90, \ + .baseDefense = 120, \ + .baseSpeed = 60, \ + .baseSpAttack = 85, \ + .baseSpDefense = 70, \ + .catchRate = 60, \ + .expYield = 172, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .noFlip = TRUE + [SPECIES_WEEZING] = { - .baseHP = 65, - .baseAttack = 90, - .baseDefense = 120, - .baseSpeed = 60, - .baseSpAttack = 85, - .baseSpDefense = 70, + WEEZING_MISC_INFO, .types = { TYPE_POISON, TYPE_POISON }, - .catchRate = 60, - .expYield = 172, - .evYield_Defense = 2, .itemRare = ITEM_SMOKE_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #if P_UPDATED_ABILITIES >= GEN_8 .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, - #else - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - #endif .bodyColor = BODY_COLOR_PURPLE, - .noFlip = TRUE, }, +#if P_GALARIAN_FORMS + [SPECIES_WEEZING_GALARIAN] = + { + WEEZING_MISC_INFO, + .types = { TYPE_POISON, TYPE_FAIRY}, + .itemRare = ITEM_MISTY_SEED, + .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE}, + .bodyColor = BODY_COLOR_GRAY, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_KOFFING + +#if P_FAMILY_RHYHORN [SPECIES_RHYHORN] = { .baseHP = 80, @@ -3455,6 +3819,53 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_RHYPERIOR] = + { + .baseHP = 115, + .baseAttack = 140, + .baseDefense = 130, + .baseSpeed = 40, + .baseSpAttack = 55, + .baseSpDefense = 55, + .types = { TYPE_GROUND, TYPE_ROCK}, + .catchRate = 30, + .expYield = 241, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_SOLID_ROCK, ABILITY_RECKLESS}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_RHYHORN + +#if P_FAMILY_CHANSEY + [SPECIES_HAPPINY] = + { + .baseHP = 100, + .baseAttack = 5, + .baseDefense = 5, + .baseSpeed = 30, + .baseSpAttack = 15, + .baseSpDefense = 65, + .types = { TYPE_NORMAL, TYPE_NORMAL}, + .catchRate = 130, + .expYield = 110, + .evYield_HP = 1, + .itemCommon = ITEM_OVAL_STONE, + .genderRatio = MON_FEMALE, + .eggCycles = 40, + .friendship = 140, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_FRIEND_GUARD}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, + [SPECIES_CHANSEY] = { .baseHP = 250, @@ -3478,6 +3889,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_BLISSEY] = + { + .baseHP = 255, + .baseAttack = 10, + .baseDefense = 10, + .baseSpeed = 55, + .baseSpAttack = 75, + .baseSpDefense = 135, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .catchRate = 30, + .expYield = 608, + .evYield_HP = 3, + .itemRare = ITEM_LUCKY_EGG, + .genderRatio = MON_FEMALE, + .eggCycles = 40, + .friendship = 140, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_CHANSEY + +#if P_FAMILY_TANGELA [SPECIES_TANGELA] = { .baseHP = 65, @@ -3500,28 +3936,73 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_TANGROWTH] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 125, + .baseSpeed = 50, + .baseSpAttack = 110, + .baseSpDefense = 50, + .types = { TYPE_GRASS, TYPE_GRASS}, + .catchRate = 30, + .expYield = 187, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TANGELA + +#if P_FAMILY_KANGASKHAN +#define KANGASKHAN_MISC_INFO \ + .types = { TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 45, \ + .evYield_HP = 2, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_KANGASKHAN] = { + KANGASKHAN_MISC_INFO, .baseHP = 105, .baseAttack = 95, .baseDefense = 80, .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 80, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 45, .expYield = 172, - .evYield_HP = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_EARLY_BIRD, ABILITY_SCRAPPY, ABILITY_INNER_FOCUS}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_KANGASKHAN_MEGA] = + { + KANGASKHAN_MISC_INFO, + .baseHP = 105, + .baseAttack = 125, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 60, + .baseSpDefense = 100, + .expYield = 207, + .abilities = {ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_KANGASKHAN + +#if P_FAMILY_HORSEA [SPECIES_HORSEA] = { .baseHP = 30, @@ -3569,6 +4050,33 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_KINGDRA] = + { + .baseHP = 75, + .baseAttack = 95, + .baseDefense = 95, + .baseSpeed = 85, + .baseSpAttack = 95, + .baseSpDefense = 95, + .types = { TYPE_WATER, TYPE_DRAGON }, + .catchRate = 45, + .expYield = 243, + .evYield_Attack = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 1, + .itemRare = ITEM_DRAGON_SCALE, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_HORSEA + +#if P_FAMILY_GOLDEEN [SPECIES_GOLDEEN] = { .baseHP = 45, @@ -3614,7 +4122,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_GOLDEEN +#if P_FAMILY_STARYU [SPECIES_STARYU] = { .baseHP = 30, @@ -3662,9 +4172,48 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_STARYU + +#if P_FAMILY_MR_MIME + [SPECIES_MIME_JR] = + { + .baseHP = 20, + .baseAttack = 25, + .baseDefense = 45, + .baseSpeed = 60, + .baseSpAttack = 70, + .baseSpDefense = 90, + #if P_UPDATED_TYPES >= GEN_6 + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, + #else + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + #endif + .catchRate = 145, + .expYield = 62, + .evYield_SpDefense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, + +#define MR_MIME_MISC_INFO \ + .catchRate = 45, \ + .expYield = 161, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .noFlip = FALSE [SPECIES_MR_MIME] = { + MR_MIME_MISC_INFO, .baseHP = 40, .baseAttack = 45, .baseDefense = 65, @@ -3676,19 +4225,53 @@ const struct SpeciesInfo gSpeciesInfo[] = #else .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif - .catchRate = 45, - .expYield = 161, .evYield_SpDefense = 2, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, + .bodyColor = BODY_COLOR_PINK, + }, + +#if P_GALARIAN_FORMS + [SPECIES_MR_MIME_GALARIAN] = + { + MR_MIME_MISC_INFO, + .baseHP = 50, + .baseAttack = 65, + .baseDefense = 65, + .baseSpeed = 100, + .baseSpAttack = 90, + .baseSpDefense = 90, + .types = { TYPE_ICE, TYPE_PSYCHIC}, + .evYield_Speed = 2, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_MR_RIME] = + { + .baseHP = 80, + .baseAttack = 85, + .baseDefense = 75, + .baseSpeed = 70, + .baseSpAttack = 110, + .baseSpDefense = 100, + .types = { TYPE_ICE, TYPE_PSYCHIC}, + .catchRate = 45, + .expYield = 182, + .evYield_SpAttack = 3, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, - .bodyColor = BODY_COLOR_PINK, + .abilities = {ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_MR_MIME +#if P_FAMILY_SCYTHER [SPECIES_SCYTHER] = { .baseHP = 70, @@ -3711,6 +4294,93 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SCIZOR_MISC_INFO \ + .types = { TYPE_BUG, TYPE_STEEL}, \ + .catchRate = 25, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + + [SPECIES_SCIZOR] = + { + SCIZOR_MISC_INFO, + .baseHP = 70, + .baseAttack = 130, + .baseDefense = 100, + .baseSpeed = 65, + .baseSpAttack = 55, + .baseSpDefense = 80, + .expYield = 175, + .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL}, + }, + +#if P_MEGA_EVOLUTIONS + [SPECIES_SCIZOR_MEGA] = + { + SCIZOR_MISC_INFO, + .baseHP = 70, + .baseAttack = 150, + .baseDefense = 140, + .baseSpeed = 75, + .baseSpAttack = 65, + .baseSpDefense = 100, + .expYield = 210, + .abilities = {ABILITY_TECHNICIAN, ABILITY_TECHNICIAN, ABILITY_TECHNICIAN}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + + [SPECIES_KLEAVOR] = + { + .baseHP = 70, + .baseAttack = 135, + .baseDefense = 95, + .baseSpeed = 85, + .baseSpAttack = 45, + .baseSpDefense = 70, + .types = { TYPE_BUG, TYPE_ROCK}, + .catchRate = 15, + .expYield = 175, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_SHEER_FORCE, ABILITY_SHARPNESS}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_SCYTHER + +#if P_FAMILY_JYNX + [SPECIES_SMOOCHUM] = + { + .baseHP = 45, + .baseAttack = 30, + .baseDefense = 15, + .baseSpeed = 65, + .baseSpAttack = 85, + .baseSpDefense = 65, + .types = { TYPE_ICE, TYPE_PSYCHIC }, + .catchRate = 45, + .expYield = 61, + .evYield_SpAttack = 1, + .genderRatio = MON_FEMALE, + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, + [SPECIES_JYNX] = { .baseHP = 65, @@ -3732,6 +4402,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_JYNX + +#if P_FAMILY_ELECTABUZZ + [SPECIES_ELEKID] = + { + .baseHP = 45, + .baseAttack = 63, + .baseDefense = 37, + .baseSpeed = 95, + .baseSpAttack = 65, + .baseSpDefense = 55, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, + .catchRate = 45, + .expYield = 72, + .evYield_Speed = 1, + .itemRare = ITEM_ELECTIRIZER, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = TRUE, + }, [SPECIES_ELECTABUZZ] = { @@ -3756,6 +4451,54 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, + [SPECIES_ELECTIVIRE] = + { + .baseHP = 75, + .baseAttack = 123, + .baseDefense = 67, + .baseSpeed = 95, + .baseSpAttack = 95, + .baseSpDefense = 85, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, + .catchRate = 30, + .expYield = 243, + .evYield_Attack = 3, + .itemRare = ITEM_ELECTIRIZER, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_MOTOR_DRIVE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, +#endif //P_FAMILY_ELECTABUZZ + +#if P_FAMILY_MAGMAR + [SPECIES_MAGBY] = + { + .baseHP = 45, + .baseAttack = 75, + .baseDefense = 37, + .baseSpeed = 83, + .baseSpAttack = 70, + .baseSpDefense = 55, + .types = { TYPE_FIRE, TYPE_FIRE }, + .catchRate = 45, + .expYield = 73, + .evYield_Speed = 1, + .itemRare = ITEM_MAGMARIZER, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, + .bodyColor = BODY_COLOR_RED, + .noFlip = TRUE, + }, + [SPECIES_MAGMAR] = { .baseHP = 65, @@ -3779,8 +4522,45 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_MAGMORTAR] = + { + .baseHP = 75, + .baseAttack = 95, + .baseDefense = 67, + .baseSpeed = 83, + .baseSpAttack = 125, + .baseSpDefense = 95, + .types = { TYPE_FIRE, TYPE_FIRE}, + .catchRate = 30, + .expYield = 243, + .evYield_SpAttack = 3, + .itemRare = ITEM_MAGMARIZER, + .genderRatio = PERCENT_FEMALE(25), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, + .bodyColor = BODY_COLOR_RED, + .noFlip = TRUE, + }, +#endif //P_FAMILY_MAGMAR + +#if P_FAMILY_PINSIR +#define PINSIR_MISC_INFO \ + .catchRate = 45, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_PINSIR] = { + PINSIR_MISC_INFO, .baseHP = 65, .baseAttack = 125, .baseDefense = 100, @@ -3788,42 +4568,89 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 55, .baseSpDefense = 70, .types = { TYPE_BUG, TYPE_BUG }, - .catchRate = 45, .expYield = 175, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_PINSIR_MEGA] = + { + PINSIR_MISC_INFO, + .baseHP = 65, + .baseAttack = 155, + .baseDefense = 120, + .baseSpeed = 105, + .baseSpAttack = 65, + .baseSpDefense = 90, + .types = { TYPE_BUG, TYPE_FLYING}, + .expYield = 210, + .abilities = {ABILITY_AERILATE, ABILITY_AERILATE, ABILITY_AERILATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_PINSIR + +#if P_FAMILY_TAUROS +#define TAUROS_MISC_INFO \ + .baseHP = 75, \ + .baseAttack = 100, \ + .baseDefense = 95, \ + .baseSpeed = 110, \ + .baseSpAttack = 40, \ + .baseSpDefense = 70, \ + .catchRate = 45, \ + .expYield = 172, \ + .genderRatio = MON_MALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + [SPECIES_TAUROS] = { - .baseHP = 75, - .baseAttack = 100, - .baseDefense = 95, - .baseSpeed = 110, - .baseSpAttack = 40, - .baseSpDefense = 70, + TAUROS_MISC_INFO, .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 45, - .expYield = 172, .evYield_Attack = 1, .evYield_Speed = 1, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_PALDEAN_FORMS + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = + { + TAUROS_MISC_INFO, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, + .evYield_Attack = 2, + .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_PALDEAN_FORM, + }, + + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = + { + TAUROS_MISC_INFO, + .types = { TYPE_FIGHTING, TYPE_FIRE }, + .evYield_Attack = 2, + .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_PALDEAN_FORM, + }, + + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = + { + TAUROS_MISC_INFO, + .types = { TYPE_FIGHTING, TYPE_WATER }, + .evYield_Attack = 2, + .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_CUD_CHEW}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_PALDEAN_FORM, + }, +#endif //P_PALDEAN_FORMS +#endif //P_FAMILY_TAUROS + +#if P_FAMILY_MAGIKARP [SPECIES_MAGIKARP] = { .baseHP = 20, @@ -3846,8 +4673,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GYARADOS_MISC_INFO \ + .catchRate = 45, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 5, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON},\ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_GYARADOS] = { + GYARADOS_MISC_INFO, .baseHP = 95, .baseAttack = 125, .baseDefense = 79, @@ -3855,43 +4694,66 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 60, .baseSpDefense = 100, .types = { TYPE_WATER, TYPE_FLYING }, - .catchRate = 45, .expYield = 189, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 5, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_GYARADOS_MEGA] = + { + GYARADOS_MISC_INFO, + .baseHP = 95, + .baseAttack = 155, + .baseDefense = 109, + .baseSpeed = 81, + .baseSpAttack = 70, + .baseSpDefense = 130, + .types = { TYPE_WATER, TYPE_DARK}, + .expYield = 224, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MAGIKARP + +#if P_FAMILY_LAPRAS +#define LAPRAS_MISC_INFO \ + .baseHP = 130, \ + .baseAttack = 85, \ + .baseDefense = 80, \ + .baseSpeed = 60, \ + .baseSpAttack = 85, \ + .baseSpDefense = 95, \ + .types = {TYPE_WATER, TYPE_ICE}, \ + .catchRate = 45, \ + .expYield = 187, \ + .evYield_HP = 2, \ + .itemCommon = ITEM_MYSTIC_WATER, \ + .itemRare = ITEM_MYSTIC_WATER, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR, ABILITY_HYDRATION},\ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_LAPRAS] = { - .baseHP = 130, - .baseAttack = 85, - .baseDefense = 80, - .baseSpeed = 60, - .baseSpAttack = 85, - .baseSpDefense = 95, - .types = { TYPE_WATER, TYPE_ICE }, - .catchRate = 45, - .expYield = 187, - .evYield_HP = 2, - .itemCommon = ITEM_MYSTIC_WATER, - .itemRare = ITEM_MYSTIC_WATER, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR, ABILITY_HYDRATION}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + LAPRAS_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_LAPRAS_GIGANTAMAX] = + { + LAPRAS_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_LAPRAS + +#if P_FAMILY_DITTO [SPECIES_DITTO] = { .baseHP = 48, @@ -3915,29 +4777,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_DITTO + +#if P_FAMILY_EEVEE +#define EEVEE_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 55, \ + .baseDefense = 50, \ + .baseSpeed = 55, \ + .baseSpAttack = 45, \ + .baseSpDefense = 65, \ + .types = {TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 45, \ + .expYield = 65, \ + .evYield_SpDefense = 1, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 35, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION},\ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE [SPECIES_EEVEE] = { - .baseHP = 55, - .baseAttack = 55, - .baseDefense = 50, - .baseSpeed = 55, - .baseSpAttack = 45, - .baseSpDefense = 65, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 45, - .expYield = 65, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, + EEVEE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_EEVEE_GIGANTAMAX] = + { + EEVEE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif + [SPECIES_VAPOREON] = { .baseHP = 130, @@ -4004,6 +4879,118 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_ESPEON] = + { + .baseHP = 65, + .baseAttack = 65, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 130, + .baseSpDefense = 95, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + .expYield = 184, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_MAGIC_BOUNCE}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + }, + + [SPECIES_UMBREON] = + { + .baseHP = 95, + .baseAttack = 65, + .baseDefense = 110, + .baseSpeed = 65, + .baseSpAttack = 60, + .baseSpDefense = 130, + .types = { TYPE_DARK, TYPE_DARK }, + .catchRate = 45, + .expYield = 184, + .evYield_SpDefense = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 35, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, + + [SPECIES_LEAFEON] = + { + .baseHP = 65, + .baseAttack = 110, + .baseDefense = 130, + .baseSpeed = 95, + .baseSpAttack = 60, + .baseSpDefense = 65, + .types = { TYPE_GRASS, TYPE_GRASS}, + .catchRate = 45, + .expYield = 184, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 35, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_LEAF_GUARD, ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_GLACEON] = + { + .baseHP = 65, + .baseAttack = 60, + .baseDefense = 110, + .baseSpeed = 65, + .baseSpAttack = 130, + .baseSpDefense = 95, + .types = { TYPE_ICE, TYPE_ICE}, + .catchRate = 45, + .expYield = 184, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 35, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SNOW_CLOAK, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, + + [SPECIES_SYLVEON] = + { + .baseHP = 95, + .baseAttack = 65, + .baseDefense = 65, + .baseSpeed = 60, + .baseSpAttack = 110, + .baseSpDefense = 130, + .types = { TYPE_FAIRY, TYPE_FAIRY}, + .catchRate = 45, + .expYield = 184, + .evYield_SpDefense = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM, ABILITY_PIXILATE}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = TRUE, + }, +#endif //P_FAMILY_EEVEE + +#if P_FAMILY_PORYGON [SPECIES_PORYGON] = { .baseHP = 65, @@ -4026,6 +5013,52 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_PORYGON2] = + { + .baseHP = 85, + .baseAttack = 80, + .baseDefense = 90, + .baseSpeed = 60, + .baseSpAttack = 105, + .baseSpDefense = 95, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .catchRate = 45, + .expYield = 180, + .evYield_SpAttack = 2, + .genderRatio = MON_GENDERLESS, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, + + [SPECIES_PORYGON_Z] = + { + .baseHP = 85, + .baseAttack = 80, + .baseDefense = 70, + .baseSpeed = 90, + .baseSpAttack = 135, + .baseSpDefense = 75, + .types = { TYPE_NORMAL, TYPE_NORMAL}, + .catchRate = 30, + .expYield = 241, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_ADAPTABILITY, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, +#endif //P_FAMILY_PORYGON + +#if P_FAMILY_OMANYTE [SPECIES_OMANYTE] = { .baseHP = 35, @@ -4069,7 +5102,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_OMANYTE +#if P_FAMILY_KABUTO [SPECIES_KABUTO] = { .baseHP = 30, @@ -4113,55 +5148,124 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_KABUTO + +#if P_FAMILY_AERODACTYL +#define AERODACTYL_MISC_INFO \ + .types = { TYPE_ROCK, TYPE_FLYING}, \ + .catchRate = 45, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 35, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE [SPECIES_AERODACTYL] = { + AERODACTYL_MISC_INFO, .baseHP = 80, .baseAttack = 105, .baseDefense = 65, .baseSpeed = 130, .baseSpAttack = 60, .baseSpDefense = 75, - .types = { TYPE_ROCK, TYPE_FLYING }, - .catchRate = 45, .expYield = 180, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, - [SPECIES_SNORLAX] = +#if P_MEGA_EVOLUTIONS + [SPECIES_AERODACTYL_MEGA] = { - .baseHP = 160, - .baseAttack = 110, - .baseDefense = 65, - .baseSpeed = 30, - .baseSpAttack = 65, - .baseSpDefense = 110, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 25, - .expYield = 189, - .evYield_HP = 2, + AERODACTYL_MISC_INFO, + .baseHP = 80, + .baseAttack = 135, + .baseDefense = 85, + .baseSpeed = 150, + .baseSpAttack = 70, + .baseSpDefense = 95, + .expYield = 215, + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_AERODACTYL + +#if P_FAMILY_SNORLAX + [SPECIES_MUNCHLAX] = + { + .baseHP = 135, + .baseAttack = 85, + .baseDefense = 40, + .baseSpeed = 5, + .baseSpAttack = 40, + .baseSpDefense = 85, + .types = { TYPE_NORMAL, TYPE_NORMAL}, + .catchRate = 50, + .expYield = 78, + .evYield_HP = 1, .itemCommon = ITEM_LEFTOVERS, .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#define SNORLAX_MISC_INFO \ + .baseHP = 160, \ + .baseAttack = 110, \ + .baseDefense = 65, \ + .baseSpeed = 30, \ + .baseSpAttack = 65, \ + .baseSpDefense = 110, \ + .types = {TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 25, \ + .expYield = 189, \ + .evYield_HP = 2, \ + .itemCommon = ITEM_LEFTOVERS, \ + .itemRare = ITEM_LEFTOVERS, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, \ + .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE + + [SPECIES_SNORLAX] = + { + SNORLAX_MISC_INFO, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_SNORLAX_GIGANTAMAX] = + { + SNORLAX_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SNORLAX + +#if P_FAMILY_ARTICUNO +#define ARTICUNO_MISC_INFO \ + .catchRate = 3, \ + .genderRatio = MON_GENDERLESS, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED },\ + .noFlip = FALSE + [SPECIES_ARTICUNO] = { + ARTICUNO_MISC_INFO, .baseHP = 90, .baseAttack = 85, .baseDefense = 100, @@ -4169,22 +5273,48 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 95, .baseSpDefense = 125, .types = { TYPE_ICE, TYPE_FLYING }, - .catchRate = 3, .expYield = 261, .evYield_SpDefense = 3, - .genderRatio = MON_GENDERLESS, .eggCycles = 80, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_SNOW_CLOAK}, .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_GALARIAN_FORMS + [SPECIES_ARTICUNO_GALARIAN] = + { + ARTICUNO_MISC_INFO, + .baseHP = 90, + .baseAttack = 85, + .baseDefense = 85, + .baseSpeed = 95, + .baseSpAttack = 125, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, + .expYield = 290, + .evYield_SpAttack = 3, + .eggCycles = 120, + .abilities = {ABILITY_COMPETITIVE, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_PURPLE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ARTICUNO + +#if P_FAMILY_ZAPDOS +#define ZAPDOS_MISC_INFO \ + .catchRate = 3, \ + .genderRatio = MON_GENDERLESS, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED },\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + [SPECIES_ZAPDOS] = { + ZAPDOS_MISC_INFO, .baseHP = 90, .baseAttack = 90, .baseDefense = 85, @@ -4192,26 +5322,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 125, .baseSpDefense = 90, .types = { TYPE_ELECTRIC, TYPE_FLYING }, - .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, .eggCycles = 80, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_STATIC}, #else .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, #endif - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_GALARIAN_FORMS + [SPECIES_ZAPDOS_GALARIAN] = + { + ZAPDOS_MISC_INFO, + .baseHP = 90, + .baseAttack = 125, + .baseDefense = 90, + .baseSpeed = 100, + .baseSpAttack = 85, + .baseSpDefense = 90, + .types = { TYPE_FIGHTING, TYPE_FLYING}, + .expYield = 290, + .evYield_Attack = 3, + .eggCycles = 120, + .abilities = {ABILITY_DEFIANT, ABILITY_NONE, ABILITY_NONE}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ZAPDOS + +#if P_FAMILY_MOLTRES +#define MOLTRES_MISC_INFO \ + .catchRate = 3, \ + .genderRatio = MON_GENDERLESS, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED },\ + .noFlip = FALSE + [SPECIES_MOLTRES] = { + MOLTRES_MISC_INFO, .baseHP = 90, .baseAttack = 100, .baseDefense = 90, @@ -4219,20 +5372,36 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 125, .baseSpDefense = 85, .types = { TYPE_FIRE, TYPE_FLYING }, - .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, .eggCycles = 80, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_GALARIAN_FORMS + [SPECIES_MOLTRES_GALARIAN] = + { + MOLTRES_MISC_INFO, + .baseHP = 90, + .baseAttack = 85, + .baseDefense = 90, + .baseSpeed = 90, + .baseSpAttack = 100, + .baseSpDefense = 125, + .types = { TYPE_DARK, TYPE_FLYING}, + .expYield = 290, + .evYield_SpDefense = 3, + .eggCycles = 120, + .abilities = {ABILITY_BERSERK, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_RED, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_MOLTRES + +#if P_FAMILY_DRATINI [SPECIES_DRATINI] = { .baseHP = 41, @@ -4301,9 +5470,23 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_DRATINI + +#if P_FAMILY_MEWTWO +#define SPECIES_MEWTWO_MISC_INFO \ + .catchRate = 3, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE [SPECIES_MEWTWO] = { + SPECIES_MEWTWO_MISC_INFO, .baseHP = 106, .baseAttack = 110, .baseDefense = 90, @@ -4311,20 +5494,45 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 154, .baseSpDefense = 90, .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, - .catchRate = 3, .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_MEWTWO_MEGA_X] = + { + SPECIES_MEWTWO_MISC_INFO, + .baseHP = 106, + .baseAttack = 190, + .baseDefense = 100, + .baseSpeed = 130, + .baseSpAttack = 154, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, + .expYield = 351, + .abilities = {ABILITY_STEADFAST, ABILITY_STEADFAST, ABILITY_STEADFAST}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, + }, + + [SPECIES_MEWTWO_MEGA_Y] = + { + SPECIES_MEWTWO_MISC_INFO, + .baseHP = 106, + .baseAttack = 150, + .baseDefense = 70, + .baseSpeed = 140, + .baseSpAttack = 194, + .baseSpDefense = 120, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + .expYield = 351, + .abilities = {ABILITY_INSOMNIA, ABILITY_INSOMNIA, ABILITY_INSOMNIA}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MEWTWO + +#if P_FAMILY_MEW [SPECIES_MEW] = { .baseHP = 100, @@ -4349,7 +5557,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_MEW +#if P_FAMILY_CHIKORITA [SPECIES_CHIKORITA] = { .baseHP = 45, @@ -4417,7 +5627,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_CHIKORITA +#if P_FAMILY_CYNDAQUIL [SPECIES_CYNDAQUIL] = { .baseHP = 39, @@ -4463,8 +5675,21 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define TYPHLOSION_MISC_INFO \ + .catchRate = 45, \ + .expYield = 240, \ + .evYield_SpAttack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + [SPECIES_TYPHLOSION] = { + TYPHLOSION_MISC_INFO, .baseHP = 78, .baseAttack = 84, .baseDefense = 78, @@ -4472,19 +5697,27 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 109, .baseSpDefense = 85, .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 45, - .expYield = 240, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_TYPHLOSION_HISUIAN] = + { + TYPHLOSION_MISC_INFO, + .baseHP = 73, + .baseAttack = 84, + .baseDefense = 78, + .baseSpeed = 95, + .baseSpAttack = 119, + .baseSpDefense = 85, + .types = { TYPE_FIRE, TYPE_GHOST}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FRISK}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_CYNDAQUIL + +#if P_FAMILY_TOTODILE [SPECIES_TOTODILE] = { .baseHP = 50, @@ -4552,7 +5785,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TOTODILE +#if P_FAMILY_SENTRET [SPECIES_SENTRET] = { .baseHP = 35, @@ -4596,7 +5831,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SENTRET +#if P_FAMILY_HOOTHOOT [SPECIES_HOOTHOOT] = { .baseHP = 60, @@ -4625,12 +5862,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 50, .baseDefense = 50, .baseSpeed = 70, + .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 86 : 76, .baseSpDefense = 96, - #if P_UPDATED_STATS >= GEN_7 - .baseSpAttack = 86, - #else - .baseSpAttack = 76, - #endif .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 90, .expYield = 158, @@ -4644,7 +5877,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_HOOTHOOT +#if P_FAMILY_LEDYBA [SPECIES_LEDYBA] = { .baseHP = 40, @@ -4688,7 +5923,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_LEDYBA +#if P_FAMILY_SPINARAK [SPECIES_SPINARAK] = { .baseHP = 40, @@ -4718,11 +5955,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 40, .baseSpAttack = 60, - #if P_UPDATED_STATS >= GEN_7 - .baseSpDefense = 70, - #else - .baseSpDefense = 60, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_7 ? 70 : 60, .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 90, .expYield = 140, @@ -4736,29 +5969,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_SPINARAK - [SPECIES_CROBAT] = - { - .baseHP = 85, - .baseAttack = 90, - .baseDefense = 80, - .baseSpeed = 130, - .baseSpAttack = 70, - .baseSpDefense = 80, - .types = { TYPE_POISON, TYPE_FLYING }, - .catchRate = 90, - .expYield = 241, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - +#if P_FAMILY_CHINCHOU [SPECIES_CHINCHOU] = { .baseHP = 75, @@ -4804,61 +6017,10 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CHINCHOU - [SPECIES_PICHU] = PICHU_SPECIES_INFO(FLIP), - - [SPECIES_CLEFFA] = - { - .baseHP = 50, - .baseAttack = 25, - .baseDefense = 28, - .baseSpeed = 15, - .baseSpAttack = 45, - .baseSpDefense = 55, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif - .catchRate = 150, - .expYield = 44, - .evYield_SpDefense = 1, - .itemRare = ITEM_MOON_STONE, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 10, - .friendship = 140, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = TRUE, - }, - - [SPECIES_IGGLYBUFF] = - { - .baseHP = 90, - .baseAttack = 30, - .baseDefense = 15, - .baseSpeed = 15, - .baseSpAttack = 40, - .baseSpDefense = 20, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_NORMAL, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif - .catchRate = 170, - .expYield = 42, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 10, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = TRUE, - }, +#if P_FAMILY_TOGEPI +#define TOGEPI_FAMILY_TYPE (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_NORMAL) [SPECIES_TOGEPI] = { @@ -4868,11 +6030,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 20, .baseSpAttack = 40, .baseSpDefense = 65, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif + .types = { TOGEPI_FAMILY_TYPE, TOGEPI_FAMILY_TYPE }, .catchRate = 190, .expYield = 49, .evYield_SpDefense = 1, @@ -4894,11 +6052,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 40, .baseSpAttack = 80, .baseSpDefense = 105, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FLYING}, - #else - .types = { TYPE_NORMAL, TYPE_FLYING}, - #endif + .types = { TOGEPI_FAMILY_TYPE, TYPE_FLYING }, .catchRate = 75, .expYield = 142, .evYield_SpDefense = 2, @@ -4912,6 +6066,35 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_TOGEKISS] = + { + .baseHP = 85, + .baseAttack = 50, + .baseDefense = 95, + .baseSpeed = 80, + .baseSpAttack = 120, + .baseSpDefense = 115, + #if P_UPDATED_TYPES >= GEN_6 + .types = { TOGEPI_FAMILY_TYPE, TYPE_FLYING}, + #else + .types = { TYPE_NORMAL, TYPE_FLYING}, + #endif + .catchRate = 30, + .expYield = 245, + .evYield_SpAttack = 2, + .evYield_SpDefense = 1, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 10, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = TRUE, + }, +#endif //P_FAMILY_TOGEPI + +#if P_FAMILY_NATU [SPECIES_NATU] = { .baseHP = 40, @@ -4956,7 +6139,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_NATU +#if P_FAMILY_MAREEP [SPECIES_MAREEP] = { .baseHP = 55, @@ -5001,56 +6186,75 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define AMPHAROS_MISC_INFO \ + .catchRate = 45, \ + .evYield_SpAttack = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + +#define AMPHAROS_DEFENSE (P_UPDATED_STATS >= GEN_6 ? 85 : 75) + [SPECIES_AMPHAROS] = { + AMPHAROS_MISC_INFO, .baseHP = 90, .baseAttack = 75, + .baseDefense = AMPHAROS_DEFENSE, .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 90, - #if P_UPDATED_STATS >= GEN_6 - .baseDefense = 85, - #else - .baseDefense = 75, - #endif .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 45, .expYield = 230, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_PLUS}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, - [SPECIES_BELLOSSOM] = +#if P_MEGA_EVOLUTIONS + [SPECIES_AMPHAROS_MEGA] = { - .baseHP = 75, - .baseAttack = 80, - .baseSpeed = 50, - .baseSpAttack = 90, - .baseSpDefense = 100, - #if P_UPDATED_STATS >= GEN_6 - .baseDefense = 95, - #else - .baseDefense = 85, - #endif - .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 45, - .expYield = 221, - .evYield_SpDefense = 3, - .itemRare = ITEM_ABSORB_BULB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, + AMPHAROS_MISC_INFO, + .baseHP = 90, + .baseAttack = 95, + .baseDefense = AMPHAROS_DEFENSE + 20, + .baseSpeed = 45, + .baseSpAttack = 165, + .baseSpDefense = 110, + .types = { TYPE_ELECTRIC, TYPE_DRAGON}, + .expYield = 275, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MAREEP + +#if P_FAMILY_MARILL + [SPECIES_AZURILL] = + { + .baseHP = 50, + .baseAttack = 20, + .baseDefense = 40, + .baseSpeed = 20, + .baseSpAttack = 20, + .baseSpDefense = 40, + #if P_UPDATED_TYPES >= GEN_6 + .types = { TYPE_NORMAL, TYPE_FAIRY}, + #else + .types = { TYPE_NORMAL, TYPE_NORMAL}, + #endif + .catchRate = 150, + .expYield = 38, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(75), + .eggCycles = 10, .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HEALER}, - .bodyColor = BODY_COLOR_GREEN, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, + .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, @@ -5062,11 +6266,11 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 40, .baseSpAttack = 20, .baseSpDefense = 50, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_WATER, TYPE_FAIRY}, - #else - .types = { TYPE_WATER, TYPE_WATER}, - #endif + #if P_UPDATED_TYPES >= GEN_6 + .types = { TYPE_WATER, TYPE_FAIRY}, + #else + .types = { TYPE_WATER, TYPE_WATER}, + #endif .catchRate = 190, .expYield = 88, .evYield_HP = 2, @@ -5086,17 +6290,13 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 50, .baseDefense = 80, .baseSpeed = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 60 : 50, .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 60, - #else - .baseSpAttack = 50, - #endif - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_WATER, TYPE_FAIRY}, - #else - .types = { TYPE_WATER, TYPE_WATER}, - #endif + #if P_UPDATED_TYPES >= GEN_6 + .types = { TYPE_WATER, TYPE_FAIRY}, + #else + .types = { TYPE_WATER, TYPE_WATER}, + #endif .catchRate = 75, .expYield = 189, .evYield_HP = 3, @@ -5109,6 +6309,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_MARILL + +#if P_FAMILY_SUDOWOODO + [SPECIES_BONSLY] = + { + .baseHP = 50, + .baseAttack = 80, + .baseDefense = 95, + .baseSpeed = 10, + .baseSpAttack = 10, + .baseSpDefense = 45, + .types = { TYPE_ROCK, TYPE_ROCK}, + .catchRate = 255, + .expYield = 58, + .evYield_Defense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, [SPECIES_SUDOWOODO] = { @@ -5131,30 +6355,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SUDOWOODO - [SPECIES_POLITOED] = - { - .baseHP = 90, - .baseAttack = 75, - .baseDefense = 75, - .baseSpeed = 70, - .baseSpAttack = 90, - .baseSpDefense = 100, - .types = { TYPE_WATER, TYPE_WATER }, - .catchRate = 45, - .expYield = 225, - .evYield_SpDefense = 3, - .itemRare = ITEM_KINGS_ROCK, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_DRIZZLE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, - +#if P_FAMILY_HOPPIP [SPECIES_HOPPIP] = { .baseHP = 35, @@ -5206,11 +6409,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 110, .baseSpAttack = 55, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 95, - #else - .baseSpDefense = 85, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 95 : 85, .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 207, @@ -5224,7 +6423,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_HOPPIP +#if P_FAMILY_AIPOM [SPECIES_AIPOM] = { .baseHP = 55, @@ -5247,6 +6448,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_AMBIPOM] = + { + .baseHP = 75, + .baseAttack = 100, + .baseDefense = 66, + .baseSpeed = 115, + .baseSpAttack = 60, + .baseSpDefense = 66, + .types = { TYPE_NORMAL, TYPE_NORMAL}, + .catchRate = 45, + .expYield = 169, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 100, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_TECHNICIAN, ABILITY_PICKUP, ABILITY_SKILL_LINK}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_AIPOM + +#if P_FAMILY_SUNKERN [SPECIES_SUNKERN] = { .baseHP = 30, @@ -5290,7 +6515,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_SUNKERN +#if P_FAMILY_YANMA [SPECIES_YANMA] = { .baseHP = 65, @@ -5314,26 +6541,54 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_WOOPER] = + [SPECIES_YANMEGA] = { - .baseHP = 55, - .baseAttack = 45, - .baseDefense = 45, - .baseSpeed = 15, - .baseSpAttack = 25, - .baseSpDefense = 25, - .types = { TYPE_WATER, TYPE_GROUND }, - .catchRate = 255, - .expYield = 42, - .evYield_HP = 1, + .baseHP = 86, + .baseAttack = 76, + .baseDefense = 86, + .baseSpeed = 95, + .baseSpAttack = 116, + .baseSpDefense = 56, + .types = { TYPE_BUG, TYPE_FLYING}, + .catchRate = 30, + .expYield = 180, + .evYield_Attack = 2, + .itemRare = ITEM_WIDE_LENS, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_TINTED_LENS, ABILITY_FRISK}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_YANMA + +#if P_FAMILY_WOOPER +#define WOOPER_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 45, \ + .baseDefense = 45, \ + .baseSpeed = 15, \ + .baseSpAttack = 25, \ + .baseSpDefense = 25, \ + .catchRate = 255, \ + .expYield = 42, \ + .evYield_HP = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + + [SPECIES_WOOPER] = + { + .types = { TYPE_WATER, TYPE_GROUND }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + WOOPER_MISC_INFO }, [SPECIES_QUAGSIRE] = @@ -5358,50 +6613,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_ESPEON] = +#if P_PALDEAN_FORMS + [SPECIES_WOOPER_PALDEAN] = { - .baseHP = 65, - .baseAttack = 65, + .types = { TYPE_POISON, TYPE_GROUND }, + .abilities = {ABILITY_POISON_POINT, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, + .bodyColor = BODY_COLOR_BROWN, + .flags = SPECIES_FLAG_PALDEAN_FORM, + WOOPER_MISC_INFO + }, + + [SPECIES_CLODSIRE] = + { + .baseHP = 130, + .baseAttack = 75, .baseDefense = 60, - .baseSpeed = 110, - .baseSpAttack = 130, - .baseSpDefense = 95, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, - .catchRate = 45, - .expYield = 184, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, + .baseSpeed = 20, + .baseSpAttack = 45, + .baseSpDefense = 100, + .types = { TYPE_POISON, TYPE_GROUND }, + .catchRate = 90, + .expYield = 151, + .evYield_HP = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_MAGIC_BOUNCE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_UMBREON] = - { - .baseHP = 95, - .baseAttack = 65, - .baseDefense = 110, - .baseSpeed = 65, - .baseSpAttack = 60, - .baseSpDefense = 130, - .types = { TYPE_DARK, TYPE_DARK }, - .catchRate = 45, - .expYield = 184, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, - .bodyColor = BODY_COLOR_BLACK, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, + .abilities = {ABILITY_POISON_POINT, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, + .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_PALDEAN_FORMS +#endif //P_FAMILY_WOOPER +#if P_FAMILY_MURKROW [SPECIES_MURKROW] = { .baseHP = 60, @@ -5424,29 +6670,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_SLOWKING] = + [SPECIES_HONCHKROW] = { - .baseHP = 95, - .baseAttack = 75, - .baseDefense = 80, - .baseSpeed = 30, - .baseSpAttack = 100, - .baseSpDefense = 110, - .types = { TYPE_WATER, TYPE_PSYCHIC }, - .catchRate = 70, - .expYield = 172, - .evYield_SpDefense = 3, - .itemRare = ITEM_KINGS_ROCK, + .baseHP = 100, + .baseAttack = 125, + .baseDefense = 52, + .baseSpeed = 71, + .baseSpAttack = 105, + .baseSpDefense = 52, + .types = { TYPE_DARK, TYPE_FLYING}, + .catchRate = 30, + .expYield = 177, + .evYield_Attack = 2, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, + .friendship = 35, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_MOXIE}, + .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_MURKROW +#if P_FAMILY_MISDREAVUS [SPECIES_MISDREAVUS] = { .baseHP = 60, @@ -5469,7 +6716,242 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_UNOWN] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_MISMAGIUS] = + { + .baseHP = 60, + .baseAttack = 60, + .baseDefense = 60, + .baseSpeed = 105, + .baseSpAttack = 105, + .baseSpDefense = 105, + .types = { TYPE_GHOST, TYPE_GHOST}, + .catchRate = 45, + .expYield = 173, + .evYield_SpAttack = 1, + .evYield_SpDefense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = 35, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_MISDREAVUS + +#if P_FAMILY_UNOWN +#define UNOWN_MISC_INFO(letter) \ + .baseHP = 48, \ + .baseAttack = 72, \ + .baseDefense = 48, \ + .baseSpeed = 48, \ + .baseSpAttack = 72, \ + .baseSpDefense = 48, \ + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ + .catchRate = 225, \ + .expYield = 118, \ + .evYield_Attack = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLACK + + [SPECIES_UNOWN] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(A), + }, + + [SPECIES_UNOWN_B] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(B), + }, + + [SPECIES_UNOWN_C] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(C), + }, + + [SPECIES_UNOWN_D] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(D), + }, + + [SPECIES_UNOWN_E] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(E), + }, + + [SPECIES_UNOWN_F] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(F), + }, + + [SPECIES_UNOWN_G] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(G), + }, + + [SPECIES_UNOWN_H] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(H), + }, + + [SPECIES_UNOWN_I] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(I), + }, + + [SPECIES_UNOWN_J] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(J), + }, + + [SPECIES_UNOWN_K] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(K), + }, + + [SPECIES_UNOWN_L] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(L), + }, + + [SPECIES_UNOWN_M] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(M), + }, + + [SPECIES_UNOWN_N] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(N), + }, + + [SPECIES_UNOWN_O] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(O), + }, + + [SPECIES_UNOWN_P] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(P), + }, + + [SPECIES_UNOWN_Q] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(Q), + }, + + [SPECIES_UNOWN_R] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(R), + }, + + [SPECIES_UNOWN_S] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(S), + }, + + [SPECIES_UNOWN_T] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(T), + }, + + [SPECIES_UNOWN_U] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(U), + }, + + [SPECIES_UNOWN_V] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(V), + }, + + [SPECIES_UNOWN_W] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(W), + }, + + [SPECIES_UNOWN_X] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(X), + }, + + [SPECIES_UNOWN_Y] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(Y), + }, + + [SPECIES_UNOWN_Z] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(Z), + }, + + [SPECIES_UNOWN_EMARK] = + { + .noFlip = FALSE, + UNOWN_MISC_INFO(ExclamationMark), + }, + + [SPECIES_UNOWN_QMARK] = + { + .noFlip = TRUE, + UNOWN_MISC_INFO(QuestionMark), + }, +#endif //P_FAMILY_UNOWN + +#if P_FAMILY_WOBBUFFET + [SPECIES_WYNAUT] = + { + .baseHP = 95, + .baseAttack = 23, + .baseDefense = 48, + .baseSpeed = 23, + .baseSpAttack = 23, + .baseSpDefense = 48, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + .catchRate = 125, + .expYield = 52, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, [SPECIES_WOBBUFFET] = { @@ -5492,7 +6974,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_WOBBUFFET +#if P_FAMILY_GIRAFARIG [SPECIES_GIRAFARIG] = { .baseHP = 70, @@ -5515,6 +6999,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_FARIGIRAF] = + { + .baseHP = 120, + .baseAttack = 90, + .baseDefense = 70, + .baseSpeed = 60, + .baseSpAttack = 110, + .baseSpDefense = 70, + .types = { TYPE_NORMAL, TYPE_PSYCHIC }, + .catchRate = 45, + .expYield = 260, + .evYield_HP = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_CUD_CHEW, ABILITY_ARMOR_TAIL, ABILITY_SAP_SIPPER}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_GIRAFARIG + +#if P_FAMILY_PINECO [SPECIES_PINECO] = { .baseHP = 50, @@ -5558,7 +7066,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_PINECO +#if P_FAMILY_DUNSPARCE [SPECIES_DUNSPARCE] = { .baseHP = 100, @@ -5581,6 +7091,33 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define DUDUNSPARCE_SPECIES_INFO \ + { \ + .baseHP = 125, \ + .baseAttack = 100, \ + .baseDefense = 80, \ + .baseSpeed = 55, \ + .baseSpAttack = 85, \ + .baseSpDefense = 75, \ + .types = { TYPE_NORMAL, TYPE_NORMAL }, \ + .catchRate = 45, \ + .expYield = 182, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE, \ + } + + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = DUDUNSPARCE_SPECIES_INFO, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = DUDUNSPARCE_SPECIES_INFO, +#endif //P_FAMILY_DUNSPARCE + +#if P_FAMILY_GLIGAR [SPECIES_GLIGAR] = { .baseHP = 65, @@ -5603,29 +7140,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_STEELIX] = + [SPECIES_GLISCOR] = { .baseHP = 75, - .baseAttack = 85, - .baseDefense = 200, - .baseSpeed = 30, - .baseSpAttack = 55, - .baseSpDefense = 65, - .types = { TYPE_STEEL, TYPE_GROUND }, - .catchRate = 25, + .baseAttack = 95, + .baseDefense = 125, + .baseSpeed = 95, + .baseSpAttack = 45, + .baseSpDefense = 75, + .types = { TYPE_GROUND, TYPE_FLYING}, + .catchRate = 30, .expYield = 179, .evYield_Defense = 2, - .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, + .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SHEER_FORCE}, - .bodyColor = BODY_COLOR_GRAY, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_POISON_HEAL}, + .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_GLIGAR +#if P_FAMILY_SNUBBULL [SPECIES_SNUBBULL] = { .baseHP = 60, @@ -5677,56 +7215,69 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SNUBBULL + +#if P_FAMILY_QWILFISH +#define QWILFISH_MISC_INFO \ + .baseHP = 65, \ + .baseAttack = 95, \ + .baseDefense = P_UPDATED_STATS >= GEN_7 ? 85 : 75, \ + .baseSpeed = 85, \ + .baseSpAttack = 55, \ + .baseSpDefense = 55, \ + .catchRate = 45, \ + .expYield = 88, \ + .evYield_Attack = 1, \ + .itemRare = ITEM_POISON_BARB, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE},\ + .noFlip = FALSE [SPECIES_QWILFISH] = { - .baseHP = 65, - .baseAttack = 95, - .baseSpeed = 85, - .baseSpAttack = 55, - .baseSpDefense = 55, - #if P_UPDATED_STATS >= GEN_7 - .baseDefense = 85, - #else - .baseDefense = 75, - #endif + QWILFISH_MISC_INFO, .types = { TYPE_WATER, TYPE_POISON}, + .bodyColor = BODY_COLOR_GRAY, + }, + +#if P_HISUIAN_FORMS + [SPECIES_QWILFISH_HISUIAN] = + { + QWILFISH_MISC_INFO, + .types = { TYPE_DARK, TYPE_POISON}, + .bodyColor = BODY_COLOR_BLACK, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_OVERQWIL] = + { + .baseHP = 85, + .baseAttack = 115, + .baseDefense = 95, + .baseSpeed = 85, + .baseSpAttack = 65, + .baseSpDefense = 65, + .types = { TYPE_DARK, TYPE_POISON}, .catchRate = 45, - .expYield = 88, - .evYield_Attack = 1, - .itemRare = ITEM_POISON_BARB, + .expYield = 179, + .evYield_Attack = 2, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_SCIZOR] = - { - .baseHP = 70, - .baseAttack = 130, - .baseDefense = 100, - .baseSpeed = 65, - .baseSpAttack = 55, - .baseSpDefense = 80, - .types = { TYPE_BUG, TYPE_STEEL }, - .catchRate = 25, - .expYield = 175, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL}, - .bodyColor = BODY_COLOR_RED, + .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_QWILFISH +#if P_FAMILY_SHUCKLE [SPECIES_SHUCKLE] = { .baseHP = 20, @@ -5751,40 +7302,90 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_SHUCKLE + +#if P_FAMILY_HERACROSS +#define HERACROSS_MISC_INFO \ + .types = { TYPE_BUG, TYPE_FIGHTING}, \ + .catchRate = 45, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE [SPECIES_HERACROSS] = { + HERACROSS_MISC_INFO, .baseHP = 80, .baseAttack = 125, .baseDefense = 75, .baseSpeed = 85, .baseSpAttack = 40, .baseSpDefense = 95, - .types = { TYPE_BUG, TYPE_FIGHTING }, - .catchRate = 45, .expYield = 175, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_GUTS, ABILITY_MOXIE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_HERACROSS_MEGA] = + { + HERACROSS_MISC_INFO, + .baseHP = 80, + .baseAttack = 185, + .baseDefense = 115, + .baseSpeed = 75, + .baseSpAttack = 40, + .baseSpDefense = 105, + .expYield = 210, + .abilities = {ABILITY_SKILL_LINK, ABILITY_SKILL_LINK, ABILITY_SKILL_LINK}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_HERACROSS + +#if P_FAMILY_SNEASEL +#define SNEASEL_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 95, \ + .baseDefense = 55, \ + .baseSpeed = 115, \ + .baseSpAttack = 35, \ + .baseSpDefense = 75, \ + .catchRate = 60, \ + .expYield = 86, \ + .evYield_Speed = 1, \ + .itemRare = ITEM_QUICK_CLAW, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 35, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = TRUE + [SPECIES_SNEASEL] = { - .baseHP = 55, - .baseAttack = 95, - .baseDefense = 55, - .baseSpeed = 115, - .baseSpAttack = 35, - .baseSpDefense = 75, + SNEASEL_MISC_INFO, .types = { TYPE_DARK, TYPE_ICE }, - .catchRate = 60, - .expYield = 86, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, + .bodyColor = BODY_COLOR_BLACK, + }, + + [SPECIES_WEAVILE] = + { + .baseHP = 70, + .baseAttack = 120, + .baseDefense = 65, + .baseSpeed = 125, + .baseSpAttack = 45, + .baseSpDefense = 85, + .types = { TYPE_DARK, TYPE_ICE}, + .catchRate = 45, + .expYield = 179, + .evYield_Attack = 1, .evYield_Speed = 1, .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), @@ -5792,11 +7393,46 @@ const struct SpeciesInfo gSpeciesInfo[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, + .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_SNEASEL_HISUIAN] = + { + SNEASEL_MISC_INFO, + .types = { TYPE_POISON, TYPE_FIGHTING}, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, + .bodyColor = BODY_COLOR_GRAY, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_SNEASLER] = + { + .baseHP = 80, + .baseAttack = 130, + .baseDefense = 60, + .baseSpeed = 120, + .baseSpAttack = 40, + .baseSpDefense = 80, + .types = { TYPE_FIGHTING, TYPE_POISON}, + .catchRate = 20, + .expYield = 102, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PRESSURE, ABILITY_UNBURDEN, ABILITY_POISON_TOUCH}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_SNEASEL + +#if P_FAMILY_TEDDIURSA [SPECIES_TEDDIURSA] = { .baseHP = 60, @@ -5841,6 +7477,52 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_URSALUNA] = + { + .baseHP = 130, + .baseAttack = 140, + .baseDefense = 105, + .baseSpeed = 50, + .baseSpAttack = 45, + .baseSpDefense = 80, + .types = { TYPE_GROUND, TYPE_NORMAL}, + .catchRate = 20, + .expYield = 275, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_GUTS, ABILITY_BULLETPROOF, ABILITY_UNNERVE}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_URSALUNA_BLOODMOON] = + { + .baseHP = 113, + .baseAttack = 70, + .baseDefense = 120, + .baseSpeed = 52, + .baseSpAttack = 135, + .baseSpDefense = 65, + .types = { TYPE_GROUND, TYPE_NORMAL}, + .catchRate = 5, + .expYield = 275, + .evYield_SpAttack = 3, + .genderRatio = MON_MALE, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_MINDS_EYE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TEDDIURSA + +#if P_FAMILY_SLUGMA [SPECIES_SLUGMA] = { .baseHP = 40, @@ -5865,17 +7547,12 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_MAGCARGO] = { - .baseSpDefense = 80, + .baseHP = P_UPDATED_STATS >= GEN_7 ? 60 : 50, .baseAttack = 50, .baseDefense = 120, .baseSpeed = 30, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 60, - .baseSpAttack = 90, - #else - .baseHP = 50, - .baseSpAttack = 80, - #endif + .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 90 : 80, + .baseSpDefense = 80, .types = { TYPE_FIRE, TYPE_ROCK}, .catchRate = 75, .expYield = 151, @@ -5889,7 +7566,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, +#endif //P_FAMILY_SLUGMA +#if P_FAMILY_SWINUB [SPECIES_SWINUB] = { .baseHP = 50, @@ -5935,36 +7614,101 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_MAMOSWINE] = + { + .baseHP = 110, + .baseAttack = 130, + .baseDefense = 80, + .baseSpeed = 80, + .baseSpAttack = 70, + .baseSpDefense = 60, + .types = { TYPE_ICE, TYPE_GROUND}, + .catchRate = 50, + .expYield = 239, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_SWINUB + +#if P_FAMILY_CORSOLA +#define CORSOLA_HP (P_UPDATED_STATS >= GEN_7 ? 65 : 55) +#define CORSOLA_DEFENSES (P_UPDATED_STATS >= GEN_7 ? 95 : 85) + +#define CORSOLA_MISC_INFO \ + .catchRate = 60, \ + .expYield = 144, \ + .evYield_SpDefense = 1, \ + .genderRatio = PERCENT_FEMALE(75), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, \ + .noFlip = FALSE + [SPECIES_CORSOLA] = { + CORSOLA_MISC_INFO, + .baseHP = CORSOLA_HP, .baseAttack = 55, + .baseDefense = CORSOLA_DEFENSES, .baseSpeed = 35, .baseSpAttack = 65, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 65, - .baseDefense = 95, - .baseSpDefense = 95, - #else - .baseHP = 55, - .baseDefense = 85, - .baseSpDefense = 85, - #endif + .baseSpDefense = CORSOLA_DEFENSES, .types = { TYPE_WATER, TYPE_ROCK}, - .catchRate = 60, - .expYield = 144, .evYield_Defense = 1, - .evYield_SpDefense = 1, .itemRare = ITEM_LUMINOUS_MOSS, + .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE, ABILITY_REGENERATOR}, + .bodyColor = BODY_COLOR_PINK, + }, + +#if P_GALARIAN_FORMS + [SPECIES_CORSOLA_GALARIAN] = + { + CORSOLA_MISC_INFO, + .baseHP = CORSOLA_HP - 5, + .baseAttack = 55, + .baseDefense = CORSOLA_DEFENSES + 5, + .baseSpeed = 30, + .baseSpAttack = 65, + .baseSpDefense = CORSOLA_DEFENSES + 5, + .types = { TYPE_GHOST, TYPE_GHOST}, + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_CURSOLA] = + { + .baseHP = 60, + .baseAttack = 95, + .baseDefense = 50, + .baseSpeed = 30, + .baseSpAttack = 145, + .baseSpDefense = 130, + .types = { TYPE_GHOST, TYPE_GHOST}, + .catchRate = 30, + .expYield = 179, + .evYield_SpAttack = 2, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, - .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY}, + .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_CORSOLA +#if P_FAMILY_REMORAID [SPECIES_REMORAID] = { .baseHP = 35, @@ -6009,7 +7753,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_REMORAID +#if P_FAMILY_DELIBIRD [SPECIES_DELIBIRD] = { .baseHP = 45, @@ -6031,19 +7777,39 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_DELIBIRD + +#if P_FAMILY_MANTINE + [SPECIES_MANTYKE] = + { + .baseHP = 45, + .baseAttack = 20, + .baseDefense = 50, + .baseSpeed = 50, + .baseSpAttack = 60, + .baseSpDefense = 120, + .types = { TYPE_WATER, TYPE_FLYING}, + .catchRate = 25, + .expYield = 69, + .evYield_SpDefense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB, ABILITY_WATER_VEIL}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, [SPECIES_MANTINE] = { + .baseHP = P_UPDATED_STATS >= GEN_7 ? 85 : 65, .baseAttack = 40, .baseDefense = 70, .baseSpeed = 70, .baseSpAttack = 80, .baseSpDefense = 140, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 85, - #else - .baseHP = 65, - #endif .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 25, .expYield = 170, @@ -6057,7 +7823,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_MANTINE +#if P_FAMILY_SKARMORY [SPECIES_SKARMORY] = { .baseHP = 65, @@ -6080,7 +7848,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_SKARMORY +#if P_FAMILY_HOUNDOUR [SPECIES_HOUNDOUR] = { .baseHP = 45, @@ -6103,53 +7873,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define HOUNDOOM_MISC_INFO \ + .types = { TYPE_DARK, TYPE_FIRE}, \ + .catchRate = 45, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE + [SPECIES_HOUNDOOM] = { + HOUNDOOM_MISC_INFO, .baseHP = 75, .baseAttack = 90, .baseDefense = 50, .baseSpeed = 95, .baseSpAttack = 110, .baseSpDefense = 80, - .types = { TYPE_DARK, TYPE_FIRE }, - .catchRate = 45, .expYield = 175, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, }, - [SPECIES_KINGDRA] = +#if P_MEGA_EVOLUTIONS + [SPECIES_HOUNDOOM_MEGA] = { + HOUNDOOM_MISC_INFO, .baseHP = 75, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 85, - .baseSpAttack = 95, - .baseSpDefense = 95, - .types = { TYPE_WATER, TYPE_DRAGON }, - .catchRate = 45, - .expYield = 243, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .evYield_SpDefense = 1, - .itemRare = ITEM_DRAGON_SCALE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + .baseAttack = 90, + .baseDefense = 90, + .baseSpeed = 115, + .baseSpAttack = 140, + .baseSpDefense = 90, + .expYield = 210, + .abilities = {ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, }, +#endif +#endif //P_FAMILY_HOUNDOUR +#if P_FAMILY_PHANPY [SPECIES_PHANPY] = { .baseHP = 90, @@ -6194,29 +7960,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_PHANPY - [SPECIES_PORYGON2] = - { - .baseHP = 85, - .baseAttack = 80, - .baseDefense = 90, - .baseSpeed = 60, - .baseSpAttack = 105, - .baseSpDefense = 95, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 45, - .expYield = 180, - .evYield_SpAttack = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - +#if P_FAMILY_STANTLER [SPECIES_STANTLER] = { .baseHP = 73, @@ -6239,6 +7985,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_WYRDEER] = + { + .baseHP = 103, + .baseAttack = 105, + .baseDefense = 72, + .baseSpeed = 65, + .baseSpAttack = 105, + .baseSpDefense = 75, + .types = { TYPE_NORMAL, TYPE_PSYCHIC}, + .catchRate = 45, + .expYield = 263, + .evYield_Attack = 1, + .evYield_SpAttack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_STANTLER + +#if P_FAMILY_SMEARGLE [SPECIES_SMEARGLE] = { .baseHP = 55, @@ -6260,119 +8031,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_SMEARGLE - [SPECIES_TYROGUE] = - { - .baseHP = 35, - .baseAttack = 35, - .baseDefense = 35, - .baseSpeed = 35, - .baseSpAttack = 35, - .baseSpDefense = 35, - .types = { TYPE_FIGHTING, TYPE_FIGHTING }, - .catchRate = 75, - .expYield = 42, - .evYield_Attack = 1, - .genderRatio = MON_MALE, - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_HITMONTOP] = - { - .baseHP = 50, - .baseAttack = 95, - .baseDefense = 95, - .baseSpeed = 70, - .baseSpAttack = 35, - .baseSpDefense = 110, - .types = { TYPE_FIGHTING, TYPE_FIGHTING }, - .catchRate = 45, - .expYield = 159, - .evYield_SpDefense = 2, - .genderRatio = MON_MALE, - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_SMOOCHUM] = - { - .baseHP = 45, - .baseAttack = 30, - .baseDefense = 15, - .baseSpeed = 65, - .baseSpAttack = 85, - .baseSpDefense = 65, - .types = { TYPE_ICE, TYPE_PSYCHIC }, - .catchRate = 45, - .expYield = 61, - .evYield_SpAttack = 1, - .genderRatio = MON_FEMALE, - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_ELEKID] = - { - .baseHP = 45, - .baseAttack = 63, - .baseDefense = 37, - .baseSpeed = 95, - .baseSpAttack = 65, - .baseSpDefense = 55, - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, - .catchRate = 45, - .expYield = 72, - .evYield_Speed = 1, - .itemRare = ITEM_ELECTIRIZER, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - }, - - [SPECIES_MAGBY] = - { - .baseHP = 45, - .baseAttack = 75, - .baseDefense = 37, - .baseSpeed = 83, - .baseSpAttack = 70, - .baseSpDefense = 55, - .types = { TYPE_FIRE, TYPE_FIRE }, - .catchRate = 45, - .expYield = 73, - .evYield_Speed = 1, - .itemRare = ITEM_MAGMARIZER, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - +#if P_FAMILY_MILTANK [SPECIES_MILTANK] = { .baseHP = 95, @@ -6396,30 +8057,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_MILTANK - [SPECIES_BLISSEY] = - { - .baseHP = 255, - .baseAttack = 10, - .baseDefense = 10, - .baseSpeed = 55, - .baseSpAttack = 75, - .baseSpDefense = 135, - .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 30, - .expYield = 608, - .evYield_HP = 3, - .itemRare = ITEM_LUCKY_EGG, - .genderRatio = MON_FEMALE, - .eggCycles = 40, - .friendship = 140, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - +#if P_FAMILY_RAIKOU [SPECIES_RAIKOU] = { .baseHP = 90, @@ -6447,7 +8087,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_RAIKOU +#if P_FAMILY_ENTEI [SPECIES_ENTEI] = { .baseHP = 115, @@ -6475,7 +8117,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_ENTEI +#if P_FAMILY_SUICUNE [SPECIES_SUICUNE] = { .baseHP = 100, @@ -6503,7 +8147,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_SUICUNE +#if P_FAMILY_LARVITAR [SPECIES_LARVITAR] = { .baseHP = 50, @@ -6548,28 +8194,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define TYRANITAR_MISC_INFO \ + .types = { TYPE_ROCK, TYPE_DARK}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_TYRANITAR] = { + TYRANITAR_MISC_INFO, .baseHP = 100, .baseAttack = 134, .baseDefense = 110, .baseSpeed = 61, .baseSpAttack = 95, .baseSpDefense = 100, - .types = { TYPE_ROCK, TYPE_DARK }, - .catchRate = 45, .expYield = 270, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_TYRANITAR_MEGA] = + { + TYRANITAR_MISC_INFO, + .baseHP = 100, + .baseAttack = 164, + .baseDefense = 150, + .baseSpeed = 71, + .baseSpAttack = 95, + .baseSpDefense = 120, + .expYield = 315, + .abilities = {ABILITY_SAND_STREAM, ABILITY_SAND_STREAM, ABILITY_SAND_STREAM}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_LARVITAR + +#if P_FAMILY_LUGIA [SPECIES_LUGIA] = { .baseHP = 106, @@ -6592,7 +8259,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_LUGIA +#if P_FAMILY_HO_OH [SPECIES_HO_OH] = { .baseHP = 106, @@ -6617,7 +8286,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_HO_OH +#if P_FAMILY_CELEBI [SPECIES_CELEBI] = { .baseHP = 100, @@ -6642,7 +8313,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_CELEBI +#if P_FAMILY_TREECKO [SPECIES_TREECKO] = { .baseHP = 40, @@ -6687,8 +8360,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SCEPTILE_MISC_INFO \ + .catchRate = 45, \ + .evYield_Speed = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON},\ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_SCEPTILE] = { + SCEPTILE_MISC_INFO, .baseHP = 70, .baseAttack = 85, .baseDefense = 65, @@ -6696,19 +8381,29 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 105, .baseSpDefense = 85, .types = { TYPE_GRASS, TYPE_GRASS }, - .catchRate = 45, .expYield = 239, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_SCEPTILE_MEGA] = + { + SCEPTILE_MISC_INFO, + .baseHP = 70, + .baseAttack = 110, + .baseDefense = 75, + .baseSpeed = 145, + .baseSpAttack = 145, + .baseSpDefense = 85, + .types = { TYPE_GRASS, TYPE_DRAGON}, + .expYield = 284, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_LIGHTNING_ROD, ABILITY_LIGHTNING_ROD}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_TREECKO + +#if P_FAMILY_TORCHIC [SPECIES_TORCHIC] = { .baseHP = 45, @@ -6754,28 +8449,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BLAZIKEN_MISC_INFO \ + .types = { TYPE_FIRE, TYPE_FIGHTING}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_BLAZIKEN] = { + BLAZIKEN_MISC_INFO, .baseHP = 80, .baseAttack = 120, .baseDefense = 70, .baseSpeed = 80, .baseSpAttack = 110, .baseSpDefense = 70, - .types = { TYPE_FIRE, TYPE_FIGHTING }, - .catchRate = 45, .expYield = 239, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SPEED_BOOST}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_BLAZIKEN_MEGA] = + { + BLAZIKEN_MISC_INFO, + .baseHP = 80, + .baseAttack = 160, + .baseDefense = 80, + .baseSpeed = 100, + .baseSpAttack = 130, + .baseSpDefense = 80, + .expYield = 284, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_SPEED_BOOST, ABILITY_SPEED_BOOST}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_TORCHIC + +#if P_FAMILY_MUDKIP [SPECIES_MUDKIP] = { .baseHP = 50, @@ -6820,28 +8536,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SWAMPERT_MISC_INFO \ + .types = { TYPE_WATER, TYPE_GROUND}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_SWAMPERT] = { + SWAMPERT_MISC_INFO, .baseHP = 100, .baseAttack = 110, .baseDefense = 90, .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 90, - .types = { TYPE_WATER, TYPE_GROUND }, - .catchRate = 45, .expYield = 241, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DAMP}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_SWAMPERT_MEGA] = + { + SWAMPERT_MISC_INFO, + .baseHP = 100, + .baseAttack = 150, + .baseDefense = 110, + .baseSpeed = 70, + .baseSpAttack = 95, + .baseSpDefense = 110, + .expYield = 286, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SWIFT_SWIM, ABILITY_SWIFT_SWIM}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MUDKIP + +#if P_FAMILY_POOCHYENA [SPECIES_POOCHYENA] = { .baseHP = 35, @@ -6885,55 +8622,104 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_POOCHYENA + +#if P_FAMILY_ZIGZAGOON +#define ZIGZAGOON_MISC_INFO \ + .baseHP = 38, \ + .baseAttack = 30, \ + .baseDefense = 41, \ + .baseSpeed = 60, \ + .baseSpAttack = 30, \ + .baseSpDefense = 41, \ + .catchRate = 255, \ + .expYield = 56, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET},\ + .noFlip = FALSE + +#define LINOONE_MISC_INFO \ + .baseHP = 78, \ + .baseAttack = 70, \ + .baseDefense = 61, \ + .baseSpeed = 100, \ + .baseSpAttack = 50, \ + .baseSpDefense = 61, \ + .catchRate = 90, \ + .expYield = 147, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE [SPECIES_ZIGZAGOON] = { - .baseHP = 38, - .baseAttack = 30, - .baseDefense = 41, - .baseSpeed = 60, - .baseSpAttack = 30, - .baseSpDefense = 41, + ZIGZAGOON_MISC_INFO, .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 255, - .expYield = 56, - .evYield_Speed = 1, .itemCommon = ITEM_POTION, .itemRare = ITEM_REVIVE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, [SPECIES_LINOONE] = { - .baseHP = 78, - .baseAttack = 70, - .baseDefense = 61, - .baseSpeed = 100, - .baseSpAttack = 50, - .baseSpDefense = 61, + LINOONE_MISC_INFO, .types = { TYPE_NORMAL, TYPE_NORMAL }, - .catchRate = 90, - .expYield = 147, - .evYield_Speed = 2, .itemCommon = ITEM_POTION, .itemRare = ITEM_MAX_REVIVE, + }, + +#if P_GALARIAN_FORMS + [SPECIES_ZIGZAGOON_GALARIAN] = + { + ZIGZAGOON_MISC_INFO, + .types = { TYPE_DARK, TYPE_NORMAL}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_LINOONE_GALARIAN] = + { + LINOONE_MISC_INFO, + .types = { TYPE_DARK, TYPE_NORMAL}, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_OBSTAGOON] = + { + .baseHP = 93, + .baseAttack = 90, + .baseDefense = 101, + .baseSpeed = 95, + .baseSpAttack = 60, + .baseSpDefense = 81, + .types = { TYPE_DARK, TYPE_NORMAL}, + .catchRate = 45, + .expYield = 260, + .evYield_Defense = 3, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - .bodyColor = BODY_COLOR_WHITE, + .abilities = {ABILITY_RECKLESS, ABILITY_GUTS, ABILITY_DEFIANT}, + .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_ZIGZAGOON +#if P_FAMILY_WURMPLE [SPECIES_WURMPLE] = { .baseHP = 45, @@ -6986,12 +8772,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 50, .baseSpeed = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 100 : 90, .baseSpDefense = 50, - #if P_UPDATED_STATS >= GEN_6 - .baseSpAttack = 100, - #else - .baseSpAttack = 90, - #endif .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 178, @@ -7051,7 +8833,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_WURMPLE +#if P_FAMILY_LOTAD [SPECIES_LOTAD] = { .baseHP = 40, @@ -7120,7 +8904,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_LOTAD +#if P_FAMILY_SEEDOT [SPECIES_SEEDOT] = { .baseHP = 40, @@ -7193,7 +8979,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SEEDOT +#if P_FAMILY_TAILLOW [SPECIES_TAILLOW] = { .baseHP = 40, @@ -7222,12 +9010,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 85, .baseDefense = 60, .baseSpeed = 125, + .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 75 : 50, .baseSpDefense = 50, - #if P_UPDATED_STATS >= GEN_7 - .baseSpAttack = 75, - #else - .baseSpAttack = 50, - #endif .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 159, @@ -7241,7 +9025,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TAILLOW +#if P_FAMILY_WINGULL [SPECIES_WINGULL] = { .baseHP = 40, @@ -7271,12 +9057,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 50, .baseDefense = 100, .baseSpeed = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_7 ? 95 : 85, .baseSpDefense = 70, - #if P_UPDATED_STATS >= GEN_7 - .baseSpAttack = 95, - #else - .baseSpAttack = 85, - #endif .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 45, .expYield = 154, @@ -7291,6 +9073,16 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_WINGULL + +#if P_FAMILY_RALTS +#define RALTS_FAMILY_TYPE2 (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_PSYCHIC) + +#if P_UPDATED_EGG_GROUPS >= GEN_8 + #define RALTS_FAMILY_EGG_GROUPS { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS } +#else + #define RALTS_FAMILY_EGG_GROUPS { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS } +#endif [SPECIES_RALTS] = { @@ -7300,11 +9092,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 35, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - #else - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - #endif + .types = { TYPE_PSYCHIC, RALTS_FAMILY_TYPE2 }, .catchRate = 235, .expYield = 40, .evYield_SpAttack = 1, @@ -7312,11 +9100,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, - #else - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #endif + .eggGroups = RALTS_FAMILY_EGG_GROUPS, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7330,11 +9114,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 55, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - #else - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - #endif + .types = { TYPE_PSYCHIC, RALTS_FAMILY_TYPE2 }, .catchRate = 120, .expYield = 97, .evYield_SpAttack = 2, @@ -7342,46 +9122,100 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, - #else - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #endif + .eggGroups = RALTS_FAMILY_EGG_GROUPS, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#define GARDEVOIR_MISC_INFO \ + .catchRate = 45, \ + .evYield_SpAttack = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = RALTS_FAMILY_EGG_GROUPS, \ + .types = { TYPE_PSYCHIC, RALTS_FAMILY_TYPE2 }, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE + [SPECIES_GARDEVOIR] = { + GARDEVOIR_MISC_INFO, .baseHP = 68, .baseAttack = 65, .baseDefense = 65, .baseSpeed = 80, .baseSpAttack = 125, .baseSpDefense = 115, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - #else - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - #endif - .catchRate = 45, .expYield = 233, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, - #else - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #endif .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_GARDEVOIR_MEGA] = + { + GARDEVOIR_MISC_INFO, + .baseHP = 68, + .baseAttack = 85, + .baseDefense = 65, + .baseSpeed = 100, + .baseSpAttack = 165, + .baseSpDefense = 135, + .expYield = 278, + .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE, ABILITY_PIXILATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + +#define GALLADE_MISC_INFO \ + .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .genderRatio = MON_MALE, \ + .eggCycles = 20, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = RALTS_FAMILY_EGG_GROUPS, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE + + [SPECIES_GALLADE] = + { + GALLADE_MISC_INFO, + .baseHP = 68, + .baseAttack = 125, + .baseDefense = 65, + .baseSpeed = 80, + .baseSpAttack = 65, + .baseSpDefense = 115, + .expYield = 233, + #if P_UPDATED_ABILITIES >= GEN_9 + .abilities = {ABILITY_STEADFAST, ABILITY_SHARPNESS, ABILITY_JUSTIFIED}, + #else + .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_JUSTIFIED}, + #endif + }, + +#if P_MEGA_EVOLUTIONS + [SPECIES_GALLADE_MEGA] = + { + GALLADE_MISC_INFO, + .baseHP = 68, + .baseAttack = 165, + .baseDefense = 95, + .baseSpeed = 110, + .baseSpAttack = 65, + .baseSpDefense = 115, + .expYield = 278, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_INNER_FOCUS, ABILITY_INNER_FOCUS}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_RALTS + +#if P_FAMILY_SURSKIT [SPECIES_SURSKIT] = { .baseHP = 40, @@ -7433,7 +9267,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_SURSKIT +#if P_FAMILY_SHROOMISH [SPECIES_SHROOMISH] = { .baseHP = 60, @@ -7481,7 +9317,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_SHROOMISH +#if P_FAMILY_SLAKOTH [SPECIES_SLAKOTH] = { .baseHP = 60, @@ -7547,7 +9385,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SLAKOTH +#if P_FAMILY_NINCADA [SPECIES_NINCADA] = { .baseHP = 31, @@ -7614,7 +9454,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_NINCADA +#if P_FAMILY_WHISMUR [SPECIES_WHISMUR] = { .baseHP = 64, @@ -7666,11 +9508,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 63, .baseSpeed = 68, .baseSpAttack = 91, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 73, - #else - .baseSpDefense = 63, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 73 : 63, .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 221, @@ -7684,7 +9522,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_WHISMUR +#if P_FAMILY_MAKUHITA [SPECIES_MAKUHITA] = { .baseHP = 72, @@ -7730,33 +9570,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_MAKUHITA - [SPECIES_AZURILL] = - { - .baseHP = 50, - .baseAttack = 20, - .baseDefense = 40, - .baseSpeed = 20, - .baseSpAttack = 20, - .baseSpDefense = 40, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_NORMAL, TYPE_FAIRY}, - #else - .types = { TYPE_NORMAL, TYPE_NORMAL}, - #endif - .catchRate = 150, - .expYield = 38, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 10, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - +#if P_FAMILY_NOSEPASS [SPECIES_NOSEPASS] = { .baseHP = 30, @@ -7780,6 +9596,32 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_PROBOPASS] = + { + .baseHP = 60, + .baseAttack = 55, + .baseDefense = 145, + .baseSpeed = 40, + .baseSpAttack = 75, + .baseSpDefense = 150, + .types = { TYPE_ROCK, TYPE_STEEL}, + .catchRate = 60, + .expYield = 184, + .evYield_Defense = 1, + .evYield_SpDefense = 2, + .itemRare = ITEM_MAGNET, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_NOSEPASS + +#if P_FAMILY_SKITTY [SPECIES_SKITTY] = { .baseHP = 50, @@ -7807,13 +9649,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseHP = 70, .baseAttack = 65, .baseDefense = 65, + .baseSpeed = P_UPDATED_STATS >= GEN_7 ? 90 : 70, .baseSpAttack = 55, .baseSpDefense = 55, - #if P_UPDATED_STATS >= GEN_7 - .baseSpeed = 90, - #else - .baseSpeed = 70, - #endif .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 140, @@ -7828,59 +9666,105 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SKITTY + +#if P_FAMILY_SABLEYE +#define SABLEYE_MISC_INFO \ + .types = { TYPE_DARK, TYPE_GHOST}, \ + .catchRate = 45, \ + .evYield_Attack = 1, \ + .evYield_Defense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = 35, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE [SPECIES_SABLEYE] = { + SABLEYE_MISC_INFO, .baseHP = 50, .baseAttack = 75, .baseDefense = 75, .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 65, - .types = { TYPE_DARK, TYPE_GHOST}, - .catchRate = 45, .expYield = 133, - .evYield_Attack = 1, - .evYield_Defense = 1, .itemRare = ITEM_WIDE_LENS, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_SABLEYE_MEGA] = + { + SABLEYE_MISC_INFO, + .baseHP = 50, + .baseAttack = 85, + .baseDefense = 125, + .baseSpeed = 20, + .baseSpAttack = 85, + .baseSpDefense = 115, + .expYield = 168, + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_SABLEYE + +#if P_FAMILY_MAWILE +#if P_UPDATED_TYPES >= GEN_6 + #define MAWILE_TYPES { TYPE_STEEL, TYPE_FAIRY } +#else + #define MAWILE_TYPES { TYPE_STEEL, TYPE_STEEL } +#endif + +#define MAWILE_MISC_INFO \ + .types = MAWILE_TYPES, \ + .catchRate = 45, \ + .evYield_Attack = 1, \ + .evYield_Defense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE + [SPECIES_MAWILE] = { + MAWILE_MISC_INFO, .baseHP = 50, .baseAttack = 85, .baseDefense = 85, .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 55, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_STEEL, TYPE_FAIRY}, - #else - .types = { TYPE_STEEL, TYPE_STEEL}, - #endif - .catchRate = 45, .expYield = 133, - .evYield_Attack = 1, - .evYield_Defense = 1, .itemRare = ITEM_IRON_BALL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE, ABILITY_SHEER_FORCE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_MAWILE_MEGA] = + { + MAWILE_MISC_INFO, + .baseHP = 50, + .baseAttack = 105, + .baseDefense = 125, + .baseSpeed = 50, + .baseSpAttack = 55, + .baseSpDefense = 95, + .expYield = 168, + .abilities = {ABILITY_HUGE_POWER, ABILITY_HUGE_POWER, ABILITY_HUGE_POWER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MAWILE + +#if P_FAMILY_ARON [SPECIES_ARON] = { .baseHP = 50, @@ -7927,8 +9811,21 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define AGGRON_MISC_INFO \ + .catchRate = 45, \ + .evYield_Defense = 3, \ + .itemRare = ITEM_HARD_STONE, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 35, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + [SPECIES_AGGRON] = { + AGGRON_MISC_INFO, .baseHP = 70, .baseAttack = 110, .baseDefense = 180, @@ -7936,20 +9833,29 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 60, .baseSpDefense = 60, .types = { TYPE_STEEL, TYPE_ROCK }, - .catchRate = 45, .expYield = 239, - .evYield_Defense = 3, - .itemRare = ITEM_HARD_STONE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 35, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_AGGRON_MEGA] = + { + AGGRON_MISC_INFO, + .baseHP = 70, + .baseAttack = 140, + .baseDefense = 230, + .baseSpeed = 50, + .baseSpAttack = 60, + .baseSpDefense = 80, + .types = { TYPE_STEEL, TYPE_STEEL}, + .expYield = 284, + .abilities = {ABILITY_FILTER, ABILITY_FILTER, ABILITY_FILTER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_ARON + +#if P_FAMILY_MEDITITE [SPECIES_MEDITITE] = { .baseHP = 30, @@ -7972,28 +9878,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define MEDICHAM_MISC_INFO \ + .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, \ + .catchRate = 90, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_MEDICHAM] = { + MEDICHAM_MISC_INFO, .baseHP = 60, .baseAttack = 60, .baseDefense = 75, .baseSpeed = 80, .baseSpAttack = 60, .baseSpDefense = 75, - .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, - .catchRate = 90, .expYield = 144, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_MEDICHAM_MEGA] = + { + MEDICHAM_MISC_INFO, + .baseHP = 60, + .baseAttack = 100, + .baseDefense = 85, + .baseSpeed = 100, + .baseSpAttack = 80, + .baseSpDefense = 85, + .expYield = 179, + .abilities = {ABILITY_PURE_POWER, ABILITY_PURE_POWER, ABILITY_PURE_POWER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_MEDITITE + +#if P_FAMILY_ELECTRIKE [SPECIES_ELECTRIKE] = { .baseHP = 40, @@ -8016,28 +9943,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define MANECTRIC_MISC_INFO \ + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ + .catchRate = 45, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + [SPECIES_MANECTRIC] = { + MANECTRIC_MISC_INFO, .baseHP = 70, .baseAttack = 75, .baseDefense = 60, .baseSpeed = 105, .baseSpAttack = 105, .baseSpDefense = 60, - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 45, .expYield = 166, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD, ABILITY_MINUS}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_MANECTRIC_MEGA] = + { + MANECTRIC_MISC_INFO, + .baseHP = 70, + .baseAttack = 75, + .baseDefense = 80, + .baseSpeed = 135, + .baseSpAttack = 135, + .baseSpDefense = 80, + .expYield = 201, + .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_ELECTRIKE + +#if P_FAMILY_PLUSLE [SPECIES_PLUSLE] = { .baseHP = 60, @@ -8060,7 +10008,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_PLUSLE +#if P_FAMILY_MINUN [SPECIES_MINUN] = { .baseHP = 60, @@ -8083,7 +10033,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_MINUN +#if P_FAMILY_VOLBEAT_ILLUMISE [SPECIES_VOLBEAT] = { .baseHP = 65, @@ -8139,6 +10091,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_VOLBEAT_ILLUMISE + +#if P_FAMILY_ROSELIA + [SPECIES_BUDEW] = + { + .baseHP = 40, + .baseAttack = 30, + .baseDefense = 35, + .baseSpeed = 55, + .baseSpAttack = 50, + .baseSpDefense = 70, + .types = { TYPE_GRASS, TYPE_POISON}, + .catchRate = 255, + .expYield = 56, + .evYield_SpAttack = 1, + .itemRare = ITEM_POISON_BARB, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = TRUE, + }, [SPECIES_ROSELIA] = { @@ -8163,6 +10140,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, + [SPECIES_ROSERADE] = + { + .baseHP = 60, + .baseAttack = 70, + .baseDefense = P_UPDATED_STATS >= GEN_6 ? 65 : 55, + .baseSpeed = 90, + .baseSpAttack = 125, + .baseSpDefense = 105, + .types = { TYPE_GRASS, TYPE_POISON}, + .catchRate = 75, + .expYield = 232, + .evYield_SpAttack = 3, + .itemRare = ITEM_POISON_BARB, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_TECHNICIAN}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = TRUE, + }, +#endif //P_FAMILY_ROSELIA + +#if P_FAMILY_GULPIN [SPECIES_GULPIN] = { .baseHP = 70, @@ -8210,7 +10212,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_GULPIN +#if P_FAMILY_CARVANHA [SPECIES_CARVANHA] = { .baseHP = 45, @@ -8234,29 +10238,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SHARPEDO_MISC_INFO \ + .types = { TYPE_WATER, TYPE_DARK}, \ + .catchRate = 60, \ + .evYield_Attack = 2, \ + .itemRare = ITEM_DEEP_SEA_TOOTH, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_SHARPEDO] = { + SHARPEDO_MISC_INFO, .baseHP = 70, .baseAttack = 120, .baseDefense = 40, .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 40, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 60, .expYield = 161, - .evYield_Attack = 2, - .itemRare = ITEM_DEEP_SEA_TOOTH, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE, ABILITY_SPEED_BOOST}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_SHARPEDO_MEGA] = + { + SHARPEDO_MISC_INFO, + .baseHP = 70, + .baseAttack = 140, + .baseDefense = 70, + .baseSpeed = 105, + .baseSpAttack = 110, + .baseSpDefense = 65, + .expYield = 196, + .abilities = {ABILITY_STRONG_JAW, ABILITY_STRONG_JAW, ABILITY_STRONG_JAW}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_CARVANHA + +#if P_FAMILY_WAILMER [SPECIES_WAILMER] = { .baseHP = 130, @@ -8300,7 +10325,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_WAILMER +#if P_FAMILY_NUMEL [SPECIES_NUMEL] = { .baseHP = 60, @@ -8323,29 +10350,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define CAMERUPT_MISC_INFO \ + .types = { TYPE_FIRE, TYPE_GROUND}, \ + .catchRate = 150, \ + .evYield_Attack = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_CAMERUPT] = { + CAMERUPT_MISC_INFO, .baseHP = 70, .baseAttack = 100, .baseDefense = 70, .baseSpeed = 40, .baseSpAttack = 105, .baseSpDefense = 75, - .types = { TYPE_FIRE, TYPE_GROUND}, - .catchRate = 150, .expYield = 161, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_CAMERUPT_MEGA] = + { + CAMERUPT_MISC_INFO, + .baseHP = 70, + .baseAttack = 120, + .baseDefense = 100, + .baseSpeed = 20, + .baseSpAttack = 145, + .baseSpDefense = 105, + .expYield = 196, + .abilities = {ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_NUMEL + +#if P_FAMILY_TORKOAL [SPECIES_TORKOAL] = { .baseHP = 70, @@ -8368,7 +10416,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_TORKOAL +#if P_FAMILY_SPOINK [SPECIES_SPOINK] = { .baseHP = 60, @@ -8412,7 +10462,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SPOINK +#if P_FAMILY_SPINDA [SPECIES_SPINDA] = { .baseHP = 60, @@ -8434,7 +10486,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, +#endif //P_FAMILY_SPINDA +#if P_FAMILY_TRAPINCH [SPECIES_TRAPINCH] = { .baseHP = 45, @@ -8515,7 +10569,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_TRAPINCH +#if P_FAMILY_CACNEA [SPECIES_CACNEA] = { .baseHP = 50, @@ -8562,7 +10618,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_CACNEA +#if P_FAMILY_SWABLU [SPECIES_SWABLU] = { .baseHP = 45, @@ -8585,8 +10643,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define ALTARIA_MISC_INFO \ + .catchRate = 45, \ + .evYield_SpDefense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_ERRATIC, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_ALTARIA] = { + ALTARIA_MISC_INFO, .baseHP = 75, .baseAttack = 70, .baseDefense = 90, @@ -8594,19 +10664,29 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 70, .baseSpDefense = 105, .types = { TYPE_DRAGON, TYPE_FLYING}, - .catchRate = 45, .expYield = 172, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_ERRATIC, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE, ABILITY_CLOUD_NINE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_ALTARIA_MEGA] = + { + ALTARIA_MISC_INFO, + .baseHP = 75, + .baseAttack = 110, + .baseDefense = 110, + .baseSpeed = 80, + .baseSpAttack = 110, + .baseSpDefense = 105, + .types = { TYPE_DRAGON, TYPE_FAIRY}, + .expYield = 207, + .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE, ABILITY_PIXILATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_SWABLU + +#if P_FAMILY_ZANGOOSE [SPECIES_ZANGOOSE] = { .baseHP = 73, @@ -8629,7 +10709,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, +#endif //P_FAMILY_ZANGOOSE +#if P_FAMILY_SEVIPER [SPECIES_SEVIPER] = { .baseHP = 73, @@ -8653,19 +10735,17 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, }, +#endif //P_FAMILY_SEVIPER +#if P_FAMILY_LUNATONE [SPECIES_LUNATONE] = { + .baseHP = P_UPDATED_STATS >= GEN_7 ? 90 : 70, .baseAttack = 55, .baseDefense = 65, .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 85, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 90, - #else - .baseHP = 70, - #endif .types = { TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 161, @@ -8681,19 +10761,17 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_LUNATONE +#if P_FAMILY_SOLROCK [SPECIES_SOLROCK] = { + .baseHP = P_UPDATED_STATS >= GEN_7 ? 90 : 70, .baseAttack = 95, .baseDefense = 85, .baseSpeed = 70, .baseSpAttack = 55, .baseSpDefense = 65, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 90, - #else - .baseHP = 70, - #endif .types = { TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 161, @@ -8709,7 +10787,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_SOLROCK +#if P_FAMILY_BARBOACH [SPECIES_BARBOACH] = { .baseHP = 50, @@ -8753,7 +10833,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_BARBOACH +#if P_FAMILY_CORPHISH [SPECIES_CORPHISH] = { .baseHP = 43, @@ -8797,7 +10879,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_CORPHISH +#if P_FAMILY_BALTOY [SPECIES_BALTOY] = { .baseHP = 40, @@ -8843,7 +10927,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_BALTOY +#if P_FAMILY_LILEEP [SPECIES_LILEEP] = { .baseHP = 66, @@ -8889,7 +10975,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_LILEEP +#if P_FAMILY_ANORITH [SPECIES_ANORITH] = { .baseHP = 45, @@ -8933,7 +11021,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_ANORITH +#if P_FAMILY_FEEBAS [SPECIES_FEEBAS] = { .baseHP = 20, @@ -8977,9 +11067,59 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_FEEBAS - [SPECIES_CASTFORM] = CASTFORM_SPECIES_INFO(TYPE_NORMAL, BODY_COLOR_GRAY), +#if P_FAMILY_CASTFORM +#define CASTFORM_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 70, \ + .baseDefense = 70, \ + .baseSpeed = 70, \ + .baseSpAttack = 70, \ + .baseSpDefense = 70, \ + .catchRate = 45, \ + .expYield = 147, \ + .evYield_HP = 1, \ + .itemCommon = ITEM_MYSTIC_WATER, \ + .itemRare = ITEM_MYSTIC_WATER, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_FORECAST, ABILITY_NONE}, \ + .noFlip = FALSE + [SPECIES_CASTFORM_NORMAL] = + { + CASTFORM_MISC_INFO, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .bodyColor = BODY_COLOR_GRAY, + }, + + [SPECIES_CASTFORM_SUNNY] = + { + CASTFORM_MISC_INFO, + .types = { TYPE_FIRE, TYPE_FIRE }, + .bodyColor = BODY_COLOR_RED, + }, + + [SPECIES_CASTFORM_RAINY] = + { + CASTFORM_MISC_INFO, + .types = { TYPE_WATER, TYPE_WATER }, + .bodyColor = BODY_COLOR_BLUE, + }, + + [SPECIES_CASTFORM_SNOWY] = + { + CASTFORM_MISC_INFO, + .types = { TYPE_ICE, TYPE_ICE }, + .bodyColor = BODY_COLOR_WHITE, + }, +#endif //P_FAMILY_CASTFORM + +#if P_FAMILY_KECLEON [SPECIES_KECLEON] = { .baseHP = 60, @@ -9001,7 +11141,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_KECLEON +#if P_FAMILY_SHUPPET [SPECIES_SHUPPET] = { .baseHP = 44, @@ -9025,29 +11167,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BANETTE_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GHOST}, \ + .catchRate = 45, \ + .evYield_Attack = 2, \ + .itemRare = ITEM_SPELL_TAG, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = 35, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE + [SPECIES_BANETTE] = { + BANETTE_MISC_INFO, .baseHP = 64, .baseAttack = 115, .baseDefense = 65, .baseSpeed = 65, .baseSpAttack = 83, .baseSpDefense = 63, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 45, .expYield = 159, - .evYield_Attack = 2, - .itemRare = ITEM_SPELL_TAG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_BANETTE_MEGA] = + { + BANETTE_MISC_INFO, + .baseHP = 64, + .baseAttack = 165, + .baseDefense = 75, + .baseSpeed = 75, + .baseSpAttack = 93, + .baseSpDefense = 83, + .expYield = 194, + .abilities = {ABILITY_PRANKSTER, ABILITY_PRANKSTER, ABILITY_PRANKSTER}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_SHUPPET + +#if P_FAMILY_DUSKULL [SPECIES_DUSKULL] = { .baseHP = 20, @@ -9095,6 +11258,32 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_DUSKNOIR] = + { + .baseHP = 45, + .baseAttack = 100, + .baseDefense = 135, + .baseSpeed = 45, + .baseSpAttack = 65, + .baseSpDefense = 135, + .types = { TYPE_GHOST, TYPE_GHOST}, + .catchRate = 45, + .expYield = 236, + .evYield_Defense = 1, + .evYield_SpDefense = 2, + .itemRare = ITEM_SPELL_TAG, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = 35, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_DUSKULL + +#if P_FAMILY_TROPIUS [SPECIES_TROPIUS] = { .baseHP = 99, @@ -9116,6 +11305,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_TROPIUS + +#if P_FAMILY_CHIMECHO + [SPECIES_CHINGLING] = + { + .baseHP = 45, + .baseAttack = 30, + .baseDefense = 50, + .baseSpeed = 45, + .baseSpAttack = 65, + .baseSpDefense = 50, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, + .catchRate = 120, + .expYield = 57, + .evYield_SpAttack = 1, + .itemRare = ITEM_CLEANSE_TAG, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, [SPECIES_CHIMECHO] = { @@ -9146,51 +11360,52 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CHIMECHO + +#if P_FAMILY_ABSOL +#define ABSOL_MISC_INFO \ + .types = { TYPE_DARK, TYPE_DARK}, \ + .catchRate = 30, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = 35, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = TRUE [SPECIES_ABSOL] = { + ABSOL_MISC_INFO, .baseHP = 65, .baseAttack = 130, .baseDefense = 60, .baseSpeed = 75, .baseSpAttack = 75, .baseSpDefense = 60, - .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 30, .expYield = 163, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, }, - [SPECIES_WYNAUT] = +#if P_MEGA_EVOLUTIONS + [SPECIES_ABSOL_MEGA] = { - .baseHP = 95, - .baseAttack = 23, - .baseDefense = 48, - .baseSpeed = 23, - .baseSpAttack = 23, - .baseSpDefense = 48, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 125, - .expYield = 52, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + ABSOL_MISC_INFO, + .baseHP = 65, + .baseAttack = 150, + .baseDefense = 60, + .baseSpeed = 115, + .baseSpAttack = 115, + .baseSpDefense = 60, + .expYield = 198, + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, }, +#endif +#endif //P_FAMILY_ABSOL +#if P_FAMILY_SNORUNT [SPECIES_SNORUNT] = { .baseHP = 50, @@ -9214,28 +11429,71 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GLALIE_MISC_INFO \ + .types = { TYPE_ICE, TYPE_ICE}, \ + .catchRate = 75, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + [SPECIES_GLALIE] = { + GLALIE_MISC_INFO, .baseHP = 80, .baseAttack = 80, .baseDefense = 80, .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 80, - .types = { TYPE_ICE, TYPE_ICE}, + .expYield = 168, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, + }, + +#if P_MEGA_EVOLUTIONS + [SPECIES_GLALIE_MEGA] = + { + GLALIE_MISC_INFO, + .baseHP = 80, + .baseAttack = 120, + .baseDefense = 80, + .baseSpeed = 100, + .baseSpAttack = 120, + .baseSpDefense = 80, + .expYield = 203, + .abilities = {ABILITY_REFRIGERATE, ABILITY_REFRIGERATE, ABILITY_REFRIGERATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif + + [SPECIES_FROSLASS] = + { + .baseHP = 70, + .baseAttack = 80, + .baseDefense = 70, + .baseSpeed = 110, + .baseSpAttack = 80, + .baseSpDefense = 70, + .types = { TYPE_ICE, TYPE_GHOST}, .catchRate = 75, .expYield = 168, - .evYield_HP = 2, - .genderRatio = PERCENT_FEMALE(50), + .evYield_Speed = 2, + .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, - .bodyColor = BODY_COLOR_GRAY, + .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_CURSED_BODY}, + .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_SNORUNT +#if P_FAMILY_SPHEAL [SPECIES_SPHEAL] = { .baseHP = 70, @@ -9301,7 +11559,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_SPHEAL +#if P_FAMILY_CLAMPERL [SPECIES_CLAMPERL] = { .baseHP = 35, @@ -9372,7 +11632,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_CLAMPERL +#if P_FAMILY_RELICANTH [SPECIES_RELICANTH] = { .baseHP = 100, @@ -9396,7 +11658,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_RELICANTH +#if P_FAMILY_LUVDISC [SPECIES_LUVDISC] = { .baseHP = 43, @@ -9419,7 +11683,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_LUVDISC +#if P_FAMILY_BAGON [SPECIES_BAGON] = { .baseHP = 45, @@ -9466,29 +11732,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SALAMENCE_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_FLYING}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .itemRare = ITEM_DRAGON_FANG, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_SALAMENCE] = { + SALAMENCE_MISC_INFO, .baseHP = 95, .baseAttack = 135, .baseDefense = 80, .baseSpeed = 100, .baseSpAttack = 110, .baseSpDefense = 80, - .types = { TYPE_DRAGON, TYPE_FLYING }, - .catchRate = 45, .expYield = 270, - .evYield_Attack = 3, - .itemRare = ITEM_DRAGON_FANG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_SALAMENCE_MEGA] = + { + SALAMENCE_MISC_INFO, + .baseHP = 95, + .baseAttack = 145, + .baseDefense = 130, + .baseSpeed = 120, + .baseSpAttack = 120, + .baseSpDefense = 90, + .expYield = 315, + .abilities = {ABILITY_AERILATE, ABILITY_AERILATE, ABILITY_AERILATE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_BAGON + +#if P_FAMILY_BELDUM [SPECIES_BELDUM] = { .baseHP = 40, @@ -9535,29 +11822,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define METAGROSS_MISC_INFO \ + .types = { TYPE_STEEL, TYPE_PSYCHIC}, \ + .catchRate = 3, \ + .evYield_Defense = 3, \ + .itemRare = ITEM_METAL_COAT, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 40, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_METAGROSS] = { + METAGROSS_MISC_INFO, .baseHP = 80, .baseAttack = 135, .baseDefense = 130, .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 90, - .types = { TYPE_STEEL, TYPE_PSYCHIC }, - .catchRate = 3, .expYield = 270, - .evYield_Defense = 3, - .itemRare = ITEM_METAL_COAT, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_METAGROSS_MEGA] = + { + METAGROSS_MISC_INFO, + .baseHP = 80, + .baseAttack = 145, + .baseDefense = 150, + .baseSpeed = 110, + .baseSpAttack = 105, + .baseSpDefense = 110, + .expYield = 315, + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_BELDUM + +#if P_FAMILY_REGIROCK [SPECIES_REGIROCK] = { .baseHP = 80, @@ -9580,7 +11888,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGIROCK +#if P_FAMILY_REGICE [SPECIES_REGICE] = { .baseHP = 80, @@ -9603,7 +11913,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGICE +#if P_FAMILY_REGISTEEL [SPECIES_REGISTEEL] = { .baseHP = 80, @@ -9627,78 +11939,155 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGISTEEL + +#if P_FAMILY_LATIAS +#define LATIAS_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_PSYCHIC}, \ + .catchRate = 3, \ + .evYield_SpDefense = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 120, \ + .friendship = 90, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .noFlip = FALSE [SPECIES_LATIAS] = { + LATIAS_MISC_INFO, .baseHP = 80, .baseAttack = 80, .baseDefense = 90, .baseSpeed = 110, .baseSpAttack = 110, .baseSpDefense = 130, - .types = { TYPE_DRAGON, TYPE_PSYCHIC }, - .catchRate = 3, .expYield = 270, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_LATIAS_MEGA] = + { + LATIAS_MISC_INFO, + .baseHP = 80, + .baseAttack = 100, + .baseDefense = 120, + .baseSpeed = 110, + .baseSpAttack = 140, + .baseSpDefense = 150, + .expYield = 315, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE}, + .bodyColor = BODY_COLOR_PURPLE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_LATIAS + +#if P_FAMILY_LATIOS +#define LATIOS_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_PSYCHIC}, \ + .catchRate = 3, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_MALE, \ + .eggCycles = 120, \ + .friendship = 90, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .noFlip = FALSE + [SPECIES_LATIOS] = { + LATIOS_MISC_INFO, .baseHP = 80, .baseAttack = 90, .baseDefense = 80, .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 110, - .types = { TYPE_DRAGON, TYPE_PSYCHIC }, - .catchRate = 3, .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_LATIOS_MEGA] = + { + LATIOS_MISC_INFO, + .baseHP = 80, + .baseAttack = 130, + .baseDefense = 100, + .baseSpeed = 110, + .baseSpAttack = 160, + .baseSpDefense = 120, + .expYield = 315, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE}, + .bodyColor = BODY_COLOR_PURPLE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_LATIOS + +#if P_FAMILY_KYOGRE +#define KYOGRE_MISC_INFO \ + .types = { TYPE_WATER, TYPE_WATER}, \ + .catchRate = 3, \ + .expYield = 302, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_KYOGRE] = { + KYOGRE_MISC_INFO, .baseHP = 100, .baseAttack = 100, .baseDefense = 90, .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 140, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 3, - .expYield = 302, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_KYOGRE_PRIMAL] = + { + KYOGRE_MISC_INFO, + .baseHP = 100, + .baseAttack = 150, + .baseDefense = 90, + .baseSpeed = 90, + .baseSpAttack = 180, + .baseSpDefense = 160, + .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, + }, +#endif //P_FAMILY_KYOGRE + +#if P_FAMILY_GROUDON +#define GROUDON_MISC_INFO \ + .catchRate = 3, \ + .expYield = 302, \ + .evYield_Attack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_GROUDON] = { + GROUDON_MISC_INFO, .baseHP = 100, .baseAttack = 150, .baseDefense = 140, @@ -9706,44 +12095,70 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 100, .baseSpDefense = 90, .types = { TYPE_GROUND, TYPE_GROUND}, - .catchRate = 3, - .expYield = 302, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_GROUDON_PRIMAL] = + { + GROUDON_MISC_INFO, + .baseHP = 100, + .baseAttack = 180, + .baseDefense = 160, + .baseSpeed = 90, + .baseSpAttack = 150, + .baseSpDefense = 90, + .types = { TYPE_GROUND, TYPE_FIRE}, + .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, + }, +#endif //P_FAMILY_GROUDON + +#if P_FAMILY_RAYQUAZA +#define RAYQUAZA_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_FLYING}, \ + .catchRate = 45, \ + .expYield = 306, \ + .evYield_Attack = 2, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_RAYQUAZA] = { + RAYQUAZA_MISC_INFO, .baseHP = 105, .baseAttack = 150, .baseDefense = 90, .baseSpeed = 95, .baseSpAttack = 150, .baseSpDefense = 90, - .types = { TYPE_DRAGON, TYPE_FLYING}, - .catchRate = 45, - .expYield = 306, - .evYield_Attack = 2, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_RAYQUAZA_MEGA] = + { + RAYQUAZA_MISC_INFO, + .baseHP = 105, + .baseAttack = 180, + .baseDefense = 100, + .baseSpeed = 115, + .baseSpAttack = 180, + .baseSpDefense = 100, + .abilities = {ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_RAYQUAZA + +#if P_FAMILY_JIRACHI [SPECIES_JIRACHI] = { .baseHP = 100, @@ -9768,33 +12183,80 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_JIRACHI - [SPECIES_DEOXYS] = +#if P_FAMILY_DEOXYS +#define DEOXYS_MISC_INFO \ + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ + .catchRate = 3, \ + .expYield = 270, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_RED, \ + .flags = SPECIES_FLAG_MYTHICAL + + [SPECIES_DEOXYS_NORMAL] = { + DEOXYS_MISC_INFO, .baseHP = 50, .baseAttack = 150, .baseDefense = 50, .baseSpeed = 150, .baseSpAttack = 150, .baseSpDefense = 50, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, - .catchRate = 3, - .expYield = 270, .evYield_Attack = 1, .evYield_Speed = 1, .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, }, -#if P_GEN_4_POKEMON == TRUE + [SPECIES_DEOXYS_ATTACK] = + { + DEOXYS_MISC_INFO, + .baseHP = 50, + .baseAttack = 180, + .baseDefense = 20, + .baseSpeed = 150, + .baseSpAttack = 180, + .baseSpDefense = 20, + .evYield_Attack = 2, + .evYield_SpAttack = 1, + .noFlip = FALSE, + }, + + [SPECIES_DEOXYS_DEFENSE] = + { + DEOXYS_MISC_INFO, + .baseHP = 50, + .baseAttack = 70, + .baseDefense = 160, + .baseSpeed = 90, + .baseSpAttack = 70, + .baseSpDefense = 160, + .evYield_Defense = 2, + .evYield_SpDefense = 1, + .noFlip = FALSE, + }, + + [SPECIES_DEOXYS_SPEED] = + { + DEOXYS_MISC_INFO, + .baseHP = 50, + .baseAttack = 95, + .baseDefense = 90, + .baseSpeed = 180, + .baseSpAttack = 95, + .baseSpDefense = 90, + .evYield_Speed = 3, + .noFlip = TRUE, + }, +#endif //P_FAMILY_DEOXYS + +#if P_FAMILY_TURTWIG [SPECIES_TURTWIG] = { .baseHP = 55, @@ -9862,7 +12324,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, +#endif //P_FAMILY_TURTWIG +#if P_FAMILY_CHIMCHAR [SPECIES_CHIMCHAR] = { .baseHP = 44, @@ -9931,7 +12395,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_CHIMCHAR +#if P_FAMILY_PIPLUP [SPECIES_PIPLUP] = { .baseHP = 53, @@ -10009,7 +12475,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_PIPLUP +#if P_FAMILY_STARLY [SPECIES_STARLY] = { .baseHP = 40, @@ -10061,11 +12529,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 100, .baseSpAttack = 50, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 60, - #else - .baseSpDefense = 50, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 60 : 50, .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 218, @@ -10079,7 +12543,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_STARLY +#if P_FAMILY_BIDOOF [SPECIES_BIDOOF] = { .baseHP = 59, @@ -10123,7 +12589,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_BIDOOF +#if P_FAMILY_KRICKETOT [SPECIES_KRICKETOT] = { .baseHP = 37, @@ -10169,7 +12637,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_KRICKETOT +#if P_FAMILY_SHINX [SPECIES_SHINX] = { .baseHP = 45, @@ -10235,57 +12705,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_SHINX - [SPECIES_BUDEW] = - { - .baseHP = 40, - .baseAttack = 30, - .baseDefense = 35, - .baseSpeed = 55, - .baseSpAttack = 50, - .baseSpDefense = 70, - .types = { TYPE_GRASS, TYPE_POISON}, - .catchRate = 255, - .expYield = 56, - .evYield_SpAttack = 1, - .itemRare = ITEM_POISON_BARB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, - - [SPECIES_ROSERADE] = - { - .baseHP = 60, - .baseAttack = 70, - .baseSpeed = 90, - .baseSpAttack = 125, - .baseSpDefense = 105, - #if P_UPDATED_STATS >= GEN_6 - .baseDefense = 65, - #else - .baseDefense = 55, - #endif - .types = { TYPE_GRASS, TYPE_POISON}, - .catchRate = 75, - .expYield = 232, - .evYield_SpAttack = 3, - .itemRare = ITEM_POISON_BARB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, - .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_TECHNICIAN}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, - +#if P_FAMILY_CRANIDOS [SPECIES_CRANIDOS] = { .baseHP = 67, @@ -10329,7 +12751,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CRANIDOS +#if P_FAMILY_SHIELDON [SPECIES_SHIELDON] = { .baseHP = 30, @@ -10373,11 +12797,61 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_SHIELDON - [SPECIES_BURMY] = BURMY_SPECIES_INFO(BODY_COLOR_GREEN), +#if P_FAMILY_BURMY +#define BURMY_MISC_INFO \ + .baseHP = 40, \ + .baseAttack = 29, \ + .baseDefense = 45, \ + .baseSpeed = 36, \ + .baseSpAttack = 29, \ + .baseSpDefense = 45, \ + .types = { TYPE_BUG, TYPE_BUG}, \ + .catchRate = 120, \ + .expYield = 45, \ + .evYield_SpDefense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_OVERCOAT}, \ + .noFlip = FALSE - [SPECIES_WORMADAM] = + [SPECIES_BURMY_PLANT_CLOAK] = { + BURMY_MISC_INFO, + .bodyColor = BODY_COLOR_GREEN, + }, + + [SPECIES_BURMY_SANDY_CLOAK] = + { + BURMY_MISC_INFO, + .bodyColor = BODY_COLOR_BROWN, + }, + + [SPECIES_BURMY_TRASH_CLOAK] = + { + BURMY_MISC_INFO, + .bodyColor = BODY_COLOR_RED, + }, + +#define WORMADAM_MISC_INFO \ + .catchRate = 45, \ + .expYield = 148, \ + .itemRare = ITEM_SILVER_POWDER, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT},\ + .noFlip = FALSE + + [SPECIES_WORMADAM_PLANT_CLOAK] = + { + WORMADAM_MISC_INFO, .baseHP = 60, .baseAttack = 59, .baseDefense = 85, @@ -10385,18 +12859,37 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 79, .baseSpDefense = 105, .types = { TYPE_BUG, TYPE_GRASS}, - .catchRate = 45, - .expYield = 148, .evYield_SpDefense = 2, - .itemRare = ITEM_SILVER_POWDER, - .genderRatio = MON_FEMALE, - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + }, + + [SPECIES_WORMADAM_SANDY_CLOAK] = + { + WORMADAM_MISC_INFO, + .baseHP = 60, + .baseAttack = 79, + .baseDefense = 105, + .baseSpeed = 36, + .baseSpAttack = 59, + .baseSpDefense = 85, + .types = { TYPE_BUG, TYPE_GROUND}, + .evYield_Defense = 2, + .bodyColor = BODY_COLOR_BROWN, + }, + + [SPECIES_WORMADAM_TRASH_CLOAK] = + { + WORMADAM_MISC_INFO, + .baseHP = 60, + .baseAttack = 69, + .baseDefense = 95, + .baseSpeed = 36, + .baseSpAttack = 69, + .baseSpDefense = 95, + .types = { TYPE_BUG, TYPE_STEEL}, + .evYield_Defense = 1, + .evYield_SpDefense = 1, + .bodyColor = BODY_COLOR_RED, }, [SPECIES_MOTHIM] = @@ -10422,7 +12915,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_BURMY +#if P_FAMILY_COMBEE [SPECIES_COMBEE] = { .baseHP = 30, @@ -10469,7 +12964,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_COMBEE +#if P_FAMILY_PACHIRISU [SPECIES_PACHIRISU] = { .baseHP = 60, @@ -10491,7 +12988,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_PACHIRISU +#if P_FAMILY_BUIZEL [SPECIES_BUIZEL] = { .baseHP = 55, @@ -10535,7 +13034,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_BUIZEL +#if P_FAMILY_CHERUBI [SPECIES_CHERUBI] = { .baseHP = 45, @@ -10559,34 +13060,104 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_CHERRIM] = CHERRIM_SPECIES_INFO(BODY_COLOR_PURPLE), +#define CHERRIM_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 60, \ + .baseDefense = 70, \ + .baseSpeed = 85, \ + .baseSpAttack = 87, \ + .baseSpDefense = 78, \ + .types = { TYPE_GRASS, TYPE_GRASS}, \ + .catchRate = 75, \ + .expYield = 158, \ + .evYield_SpAttack = 2, \ + .itemRare = ITEM_MIRACLE_SEED, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, \ + .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE},\ + .noFlip = FALSE - [SPECIES_SHELLOS] = SHELLOS_SPECIES_INFO(BODY_COLOR_PURPLE), - - [SPECIES_GASTRODON] = GASTRODON_SPECIES_INFO(BODY_COLOR_PURPLE), - - [SPECIES_AMBIPOM] = + [SPECIES_CHERRIM_OVERCAST] = { - .baseHP = 75, - .baseAttack = 100, - .baseDefense = 66, - .baseSpeed = 115, - .baseSpAttack = 60, - .baseSpDefense = 66, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 45, - .expYield = 169, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 100, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_TECHNICIAN, ABILITY_PICKUP, ABILITY_SKILL_LINK}, + CHERRIM_MISC_INFO, .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, + [SPECIES_CHERRIM_SUNSHINE] = + { + CHERRIM_MISC_INFO, + .bodyColor = BODY_COLOR_PINK, + }, +#endif //P_FAMILY_CHERUBI + +#if P_FAMILY_SHELLOS +#define SHELLOS_MISC_INFO \ + .baseHP = 76, \ + .baseAttack = 48, \ + .baseDefense = 48, \ + .baseSpeed = 34, \ + .baseSpAttack = 57, \ + .baseSpDefense = 62, \ + .types = { TYPE_WATER, TYPE_WATER}, \ + .catchRate = 190, \ + .expYield = 65, \ + .evYield_HP = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ + .noFlip = FALSE + + [SPECIES_SHELLOS_WEST_SEA] = + { + SHELLOS_MISC_INFO, + .bodyColor = BODY_COLOR_PURPLE, + }, + + [SPECIES_SHELLOS_EAST_SEA] = + { + SHELLOS_MISC_INFO, + .bodyColor = BODY_COLOR_BLUE, + }, + +#define GASTRODON_MISC_INFO \ + .baseHP = 111, \ + .baseAttack = 83, \ + .baseDefense = 68, \ + .baseSpeed = 39, \ + .baseSpAttack = 92, \ + .baseSpDefense = 82, \ + .types = { TYPE_WATER, TYPE_GROUND}, \ + .catchRate = 75, \ + .expYield = 166, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ + .noFlip = FALSE + + [SPECIES_GASTRODON_WEST_SEA] = + { + GASTRODON_MISC_INFO, + .bodyColor = BODY_COLOR_PURPLE, + }, + + [SPECIES_GASTRODON_EAST_SEA] = + { + GASTRODON_MISC_INFO, + .bodyColor = BODY_COLOR_BLUE, + }, +#endif //P_FAMILY_SHELLOS + +#if P_FAMILY_DRIFLOON [SPECIES_DRIFLOON] = { .baseHP = 90, @@ -10630,7 +13201,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_DRIFLOON +#if P_FAMILY_BUNEARY [SPECIES_BUNEARY] = { .baseHP = 55, @@ -10653,8 +13226,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define LOPUNNY_MISC_INFO \ + .catchRate = 60, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = 140, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_LOPUNNY] = { + LOPUNNY_MISC_INFO, .baseHP = 65, .baseAttack = 76, .baseDefense = 84, @@ -10662,64 +13247,29 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 54, .baseSpDefense = 96, .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 60, .expYield = 168, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 140, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_KLUTZ, ABILITY_LIMBER}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, - [SPECIES_MISMAGIUS] = +#if P_MEGA_EVOLUTIONS + [SPECIES_LOPUNNY_MEGA] = { - .baseHP = 60, - .baseAttack = 60, - .baseDefense = 60, - .baseSpeed = 105, - .baseSpAttack = 105, - .baseSpDefense = 105, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 45, - .expYield = 173, - .evYield_SpAttack = 1, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_HONCHKROW] = - { - .baseHP = 100, - .baseAttack = 125, - .baseDefense = 52, - .baseSpeed = 71, - .baseSpAttack = 105, - .baseSpDefense = 52, - .types = { TYPE_DARK, TYPE_FLYING}, - .catchRate = 30, - .expYield = 177, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_MOXIE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, + LOPUNNY_MISC_INFO, + .baseHP = 65, + .baseAttack = 136, + .baseDefense = 94, + .baseSpeed = 135, + .baseSpAttack = 54, + .baseSpDefense = 96, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, + .expYield = 203, + .abilities = {ABILITY_SCRAPPY, ABILITY_SCRAPPY, ABILITY_SCRAPPY}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, }, +#endif +#endif //P_FAMILY_BUNEARY +#if P_FAMILY_GLAMEOW [SPECIES_GLAMEOW] = { .baseHP = 49, @@ -10763,30 +13313,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_GLAMEOW - [SPECIES_CHINGLING] = - { - .baseHP = 45, - .baseAttack = 30, - .baseDefense = 50, - .baseSpeed = 45, - .baseSpAttack = 65, - .baseSpDefense = 50, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 120, - .expYield = 57, - .evYield_SpAttack = 1, - .itemRare = ITEM_CLEANSE_TAG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - +#if P_FAMILY_STUNKY [SPECIES_STUNKY] = { .baseHP = 63, @@ -10830,7 +13359,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_STUNKY +#if P_FAMILY_BRONZOR [SPECIES_BRONZOR] = { .baseHP = 57, @@ -10877,78 +13408,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_BRONZOR - [SPECIES_BONSLY] = - { - .baseHP = 50, - .baseAttack = 80, - .baseDefense = 95, - .baseSpeed = 10, - .baseSpAttack = 10, - .baseSpDefense = 45, - .types = { TYPE_ROCK, TYPE_ROCK}, - .catchRate = 255, - .expYield = 58, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_MIME_JR] = - { - .baseHP = 20, - .baseAttack = 25, - .baseDefense = 45, - .baseSpeed = 60, - .baseSpAttack = 70, - .baseSpDefense = 90, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - #else - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - #endif - .catchRate = 145, - .expYield = 62, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_HAPPINY] = - { - .baseHP = 100, - .baseAttack = 5, - .baseDefense = 5, - .baseSpeed = 30, - .baseSpAttack = 15, - .baseSpDefense = 65, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 130, - .expYield = 110, - .evYield_HP = 1, - .itemCommon = ITEM_OVAL_STONE, - .genderRatio = MON_FEMALE, - .eggCycles = 40, - .friendship = 140, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_FRIEND_GUARD}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - +#if P_FAMILY_CHATOT [SPECIES_CHATOT] = { .baseHP = 76, @@ -10971,7 +13433,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_CHATOT +#if P_FAMILY_SPIRITOMB [SPECIES_SPIRITOMB] = { .baseHP = 50, @@ -10994,7 +13458,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SPIRITOMB +#if P_FAMILY_GIBLE [SPECIES_GIBLE] = { .baseHP = 58, @@ -11039,52 +13505,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GARCHOMP_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_GROUND}, \ + .catchRate = 45, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON},\ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_GARCHOMP] = { + GARCHOMP_MISC_INFO, .baseHP = 108, .baseAttack = 130, .baseDefense = 95, .baseSpeed = 102, .baseSpAttack = 80, .baseSpDefense = 85, - .types = { TYPE_DRAGON, TYPE_GROUND}, - .catchRate = 45, .expYield = 270, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_ROUGH_SKIN}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, - [SPECIES_MUNCHLAX] = +#if P_MEGA_EVOLUTIONS + [SPECIES_GARCHOMP_MEGA] = { - .baseHP = 135, - .baseAttack = 85, - .baseDefense = 40, - .baseSpeed = 5, - .baseSpAttack = 40, - .baseSpDefense = 85, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 50, - .expYield = 78, - .evYield_HP = 1, - .itemCommon = ITEM_LEFTOVERS, - .itemRare = ITEM_LEFTOVERS, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, + GARCHOMP_MISC_INFO, + .baseHP = 108, + .baseAttack = 170, + .baseDefense = 115, + .baseSpeed = 92, + .baseSpAttack = 120, + .baseSpDefense = 95, + .expYield = 315, + .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, }, +#endif +#endif //P_FAMILY_GIBLE +#if P_FAMILY_RIOLU [SPECIES_RIOLU] = { .baseHP = 40, @@ -11107,29 +13570,50 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define LUCARIO_MISC_INFO \ + .types = { TYPE_FIGHTING, TYPE_STEEL}, \ + .catchRate = 45, \ + .evYield_Attack = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_LUCARIO] = { + LUCARIO_MISC_INFO, .baseHP = 70, .baseAttack = 110, .baseDefense = 70, .baseSpeed = 90, .baseSpAttack = 115, .baseSpDefense = 70, - .types = { TYPE_FIGHTING, TYPE_STEEL}, - .catchRate = 45, .expYield = 184, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_JUSTIFIED}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_LUCARIO_MEGA] = + { + LUCARIO_MISC_INFO, + .baseHP = 70, + .baseAttack = 145, + .baseDefense = 88, + .baseSpeed = 112, + .baseSpAttack = 140, + .baseSpDefense = 70, + .expYield = 219, + .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_RIOLU + +#if P_FAMILY_HIPPOPOTAS [SPECIES_HIPPOPOTAS] = { .baseHP = 68, @@ -11173,7 +13657,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_HIPPOPOTAS +#if P_FAMILY_SKORUPI [SPECIES_SKORUPI] = { .baseHP = 40, @@ -11219,7 +13705,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_SKORUPI +#if P_FAMILY_CROAGUNK [SPECIES_CROAGUNK] = { .baseHP = 48, @@ -11265,7 +13753,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CROAGUNK +#if P_FAMILY_CARNIVINE [SPECIES_CARNIVINE] = { .baseHP = 74, @@ -11287,7 +13777,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_CARNIVINE +#if P_FAMILY_FINNEON [SPECIES_FINNEON] = { .baseHP = 49, @@ -11331,29 +13823,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_FINNEON - [SPECIES_MANTYKE] = - { - .baseHP = 45, - .baseAttack = 20, - .baseDefense = 50, - .baseSpeed = 50, - .baseSpAttack = 60, - .baseSpDefense = 120, - .types = { TYPE_WATER, TYPE_FLYING}, - .catchRate = 25, - .expYield = 69, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB, ABILITY_WATER_VEIL}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - +#if P_FAMILY_SNOVER [SPECIES_SNOVER] = { .baseHP = 60, @@ -11377,452 +13849,66 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define ABOMASNOW_MISC_INFO \ + .types = { TYPE_GRASS, TYPE_ICE}, \ + .catchRate = 60, \ + .evYield_Attack = 1, \ + .evYield_SpAttack = 1, \ + .itemRare = ITEM_NEVER_MELT_ICE, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE + [SPECIES_ABOMASNOW] = { + ABOMASNOW_MISC_INFO, .baseHP = 90, .baseAttack = 92, .baseDefense = 75, .baseSpeed = 60, .baseSpAttack = 92, .baseSpDefense = 85, - .types = { TYPE_GRASS, TYPE_ICE}, - .catchRate = 60, .expYield = 173, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .itemRare = ITEM_NEVER_MELT_ICE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, }, - [SPECIES_WEAVILE] = +#if P_MEGA_EVOLUTIONS + [SPECIES_ABOMASNOW_MEGA] = { - .baseHP = 70, - .baseAttack = 120, - .baseDefense = 65, - .baseSpeed = 125, - .baseSpAttack = 45, - .baseSpDefense = 85, - .types = { TYPE_DARK, TYPE_ICE}, - .catchRate = 45, - .expYield = 179, - .evYield_Attack = 1, - .evYield_Speed = 1, - .itemRare = ITEM_QUICK_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_PICKPOCKET}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, + ABOMASNOW_MISC_INFO, + .baseHP = 90, + .baseAttack = 132, + .baseDefense = 105, + .baseSpeed = 30, + .baseSpAttack = 132, + .baseSpDefense = 105, + .expYield = 208, + .abilities = {ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING}, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, }, +#endif +#endif //P_FAMILY_SNOVER - [SPECIES_MAGNEZONE] = - { - .baseHP = 70, - .baseAttack = 70, - .baseDefense = 115, - .baseSpeed = 60, - .baseSpAttack = 130, - .baseSpDefense = 90, - .types = { TYPE_ELECTRIC, TYPE_STEEL}, - .catchRate = 30, - .expYield = 241, - .evYield_SpAttack = 3, - .itemRare = ITEM_METAL_COAT, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_LICKILICKY] = - { - .baseHP = 110, - .baseAttack = 85, - .baseDefense = 95, - .baseSpeed = 50, - .baseSpAttack = 80, - .baseSpDefense = 95, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 30, - .expYield = 180, - .evYield_HP = 3, - .itemRare = ITEM_LAGGING_TAIL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS, ABILITY_CLOUD_NINE}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - }, - - [SPECIES_RHYPERIOR] = - { - .baseHP = 115, - .baseAttack = 140, - .baseDefense = 130, - .baseSpeed = 40, - .baseSpAttack = 55, - .baseSpDefense = 55, - .types = { TYPE_GROUND, TYPE_ROCK}, - .catchRate = 30, - .expYield = 241, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_SOLID_ROCK, ABILITY_RECKLESS}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_TANGROWTH] = - { - .baseHP = 100, - .baseAttack = 100, - .baseDefense = 125, - .baseSpeed = 50, - .baseSpAttack = 110, - .baseSpDefense = 50, - .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 30, - .expYield = 187, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_ELECTIVIRE] = - { - .baseHP = 75, - .baseAttack = 123, - .baseDefense = 67, - .baseSpeed = 95, - .baseSpAttack = 95, - .baseSpDefense = 85, - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 30, - .expYield = 243, - .evYield_Attack = 3, - .itemRare = ITEM_ELECTIRIZER, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_MOTOR_DRIVE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - }, - - [SPECIES_MAGMORTAR] = - { - .baseHP = 75, - .baseAttack = 95, - .baseDefense = 67, - .baseSpeed = 83, - .baseSpAttack = 125, - .baseSpDefense = 95, - .types = { TYPE_FIRE, TYPE_FIRE}, - .catchRate = 30, - .expYield = 243, - .evYield_SpAttack = 3, - .itemRare = ITEM_MAGMARIZER, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - - [SPECIES_TOGEKISS] = - { - .baseHP = 85, - .baseAttack = 50, - .baseDefense = 95, - .baseSpeed = 80, - .baseSpAttack = 120, - .baseSpDefense = 115, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_FAIRY, TYPE_FLYING}, - #else - .types = { TYPE_NORMAL, TYPE_FLYING}, - #endif - .catchRate = 30, - .expYield = 245, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 10, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, - }, - - [SPECIES_YANMEGA] = - { - .baseHP = 86, - .baseAttack = 76, - .baseDefense = 86, - .baseSpeed = 95, - .baseSpAttack = 116, - .baseSpDefense = 56, - .types = { TYPE_BUG, TYPE_FLYING}, - .catchRate = 30, - .expYield = 180, - .evYield_Attack = 2, - .itemRare = ITEM_WIDE_LENS, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_SPEED_BOOST, ABILITY_TINTED_LENS, ABILITY_FRISK}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_LEAFEON] = - { - .baseHP = 65, - .baseAttack = 110, - .baseDefense = 130, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 65, - .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 45, - .expYield = 184, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_LEAF_GUARD, ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_GLACEON] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 110, - .baseSpeed = 65, - .baseSpAttack = 130, - .baseSpDefense = 95, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 45, - .expYield = 184, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SNOW_CLOAK, ABILITY_ICE_BODY}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_GLISCOR] = - { - .baseHP = 75, - .baseAttack = 95, - .baseDefense = 125, - .baseSpeed = 95, - .baseSpAttack = 45, - .baseSpDefense = 75, - .types = { TYPE_GROUND, TYPE_FLYING}, - .catchRate = 30, - .expYield = 179, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_POISON_HEAL}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_MAMOSWINE] = - { - .baseHP = 110, - .baseAttack = 130, - .baseDefense = 80, - .baseSpeed = 80, - .baseSpAttack = 70, - .baseSpDefense = 60, - .types = { TYPE_ICE, TYPE_GROUND}, - .catchRate = 50, - .expYield = 239, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_PORYGON_Z] = - { - .baseHP = 85, - .baseAttack = 80, - .baseDefense = 70, - .baseSpeed = 90, - .baseSpAttack = 135, - .baseSpDefense = 75, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 30, - .expYield = 241, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_ADAPTABILITY, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_GALLADE] = - { - .baseHP = 68, - .baseAttack = 125, - .baseDefense = 65, - .baseSpeed = 80, - .baseSpAttack = 65, - .baseSpDefense = 115, - .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 233, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, - #else - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - #endif - #if P_UPDATED_ABILITIES >= GEN_9 - .abilities = {ABILITY_STEADFAST, ABILITY_SHARPNESS, ABILITY_JUSTIFIED}, - #else - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_JUSTIFIED}, - #endif - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_PROBOPASS] = - { - .baseHP = 60, - .baseAttack = 55, - .baseDefense = 145, - .baseSpeed = 40, - .baseSpAttack = 75, - .baseSpDefense = 150, - .types = { TYPE_ROCK, TYPE_STEEL}, - .catchRate = 60, - .expYield = 184, - .evYield_Defense = 1, - .evYield_SpDefense = 2, - .itemRare = ITEM_MAGNET, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_DUSKNOIR] = - { - .baseHP = 45, - .baseAttack = 100, - .baseDefense = 135, - .baseSpeed = 45, - .baseSpAttack = 65, - .baseSpDefense = 135, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 45, - .expYield = 236, - .evYield_Defense = 1, - .evYield_SpDefense = 2, - .itemRare = ITEM_SPELL_TAG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_FROSLASS] = - { - .baseHP = 70, - .baseAttack = 80, - .baseDefense = 70, - .baseSpeed = 110, - .baseSpAttack = 80, - .baseSpDefense = 70, - .types = { TYPE_ICE, TYPE_GHOST}, - .catchRate = 75, - .expYield = 168, - .evYield_Speed = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_CURSED_BODY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, +#if P_FAMILY_ROTOM +#define ROTOM_MISC_INFO \ + .catchRate = 45, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_RED [SPECIES_ROTOM] = { + ROTOM_MISC_INFO, .baseHP = 50, .baseAttack = 50, .baseDefense = 77, @@ -11830,20 +13916,61 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 95, .baseSpDefense = 77, .types = { TYPE_ELECTRIC, TYPE_GHOST}, - .catchRate = 45, .expYield = 154, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#define ROTOM_APPLIANCE_INFO(form) \ + .baseHP = 50, \ + .baseAttack = 65, \ + .baseDefense = 107, \ + .baseSpeed = 86, \ + .baseSpAttack = 105, \ + .baseSpDefense = 107, \ + .expYield = 182 + + [SPECIES_ROTOM_HEAT] = + { + ROTOM_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_FIRE }, + .noFlip = FALSE, + ROTOM_APPLIANCE_INFO(Heat), + }, + + [SPECIES_ROTOM_WASH] = + { + ROTOM_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_WATER }, + .noFlip = TRUE, + ROTOM_APPLIANCE_INFO(Wash), + }, + + [SPECIES_ROTOM_FROST] = + { + ROTOM_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_ICE }, + .noFlip = FALSE, + ROTOM_APPLIANCE_INFO(Frost), + }, + + [SPECIES_ROTOM_FAN] = + { + ROTOM_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_FLYING }, + .noFlip = FALSE, + ROTOM_APPLIANCE_INFO(Fan), + }, + + [SPECIES_ROTOM_MOW] = + { + ROTOM_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_GRASS }, + .noFlip = FALSE, + ROTOM_APPLIANCE_INFO(Mow), + }, +#endif //P_FAMILY_ROTOM + +#if P_FAMILY_UXIE [SPECIES_UXIE] = { .baseHP = 75, @@ -11867,7 +13994,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_UXIE +#if P_FAMILY_MESPRIT [SPECIES_MESPRIT] = { .baseHP = 80, @@ -11892,7 +14021,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_MESPRIT +#if P_FAMILY_AZELF [SPECIES_AZELF] = { .baseHP = 75, @@ -11916,53 +14047,87 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_AZELF + +#if P_FAMILY_DIALGA +#define DIALGA_MISC_INFO \ + .types = { TYPE_STEEL, TYPE_DRAGON}, \ + .catchRate = 3, \ + .expYield = 306, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY [SPECIES_DIALGA] = { + DIALGA_MISC_INFO, .baseHP = 100, .baseAttack = 120, .baseDefense = 120, .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 100, - .types = { TYPE_STEEL, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_DIALGA_ORIGIN] = + { + DIALGA_MISC_INFO, + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 120, + .baseSpeed = 90, + .baseSpAttack = 150, + .baseSpDefense = 120, + }, +#endif //P_FAMILY_DIALGA + +#if P_FAMILY_PALKIA +#define PALKIA_MISC_INFO \ + .types = { TYPE_WATER, TYPE_DRAGON}, \ + .catchRate = 3, \ + .expYield = 306, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + [SPECIES_PALKIA] = { + PALKIA_MISC_INFO, .baseHP = 90, .baseAttack = 120, .baseDefense = 100, .baseSpeed = 100, .baseSpAttack = 150, .baseSpDefense = 120, - .types = { TYPE_WATER, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_PALKIA_ORIGIN] = + { + PALKIA_MISC_INFO, + .baseHP = 90, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 120, + .baseSpAttack = 150, + .baseSpDefense = 120, + }, +#endif //P_FAMILY_PALKIA + +#if P_FAMILY_HEATRAN [SPECIES_HEATRAN] = { .baseHP = 91, @@ -11985,7 +14150,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_HEATRAN +#if P_FAMILY_REGIGIGAS [SPECIES_REGIGIGAS] = { .baseHP = 110, @@ -12008,38 +14175,57 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGIGIGAS - [SPECIES_GIRATINA] = +#if P_FAMILY_GIRATINA +#define GIRATINA_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_DRAGON}, \ + .catchRate = 3, \ + .expYield = 306, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_GIRATINA_ALTERED] = { + GIRATINA_MISC_INFO, .baseHP = 150, .baseAttack = 100, .baseDefense = 120, .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 120, - .types = { TYPE_GHOST, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_GIRATINA_ORIGIN] = + { + GIRATINA_MISC_INFO, + .baseHP = 150, + .baseAttack = 120, + .baseDefense = 100, + .baseSpeed = 90, + .baseSpAttack = 120, + .baseSpDefense = 100, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE}, + }, +#endif //P_FAMILY_GIRATINA + +#if P_FAMILY_CRESSELIA [SPECIES_CRESSELIA] = { .baseHP = 120, .baseAttack = 70, - .baseDefense = 120, + .baseDefense = P_UPDATED_STATS >= GEN_9 ? 110 : 120, .baseSpeed = 85, .baseSpAttack = 75, - .baseSpDefense = 130, + .baseSpDefense = P_UPDATED_STATS >= GEN_9 ? 120 : 130, .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, @@ -12054,7 +14240,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_CRESSELIA +#if P_FAMILY_MANAPHY [SPECIES_PHIONE] = { .baseHP = 80, @@ -12100,7 +14288,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_MANAPHY +#if P_FAMILY_DARKRAI [SPECIES_DARKRAI] = { .baseHP = 70, @@ -12124,9 +14314,26 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_DARKRAI - [SPECIES_SHAYMIN] = +#if P_FAMILY_SHAYMIN +#define SHAYMIN_MISC_INFO \ + .catchRate = 45, \ + .expYield = 270, \ + .evYield_HP = 3, \ + .itemCommon = ITEM_LUM_BERRY, \ + .itemRare = ITEM_LUM_BERRY, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 100, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .flags = SPECIES_FLAG_MYTHICAL + + [SPECIES_SHAYMIN_LAND] = { + SHAYMIN_MISC_INFO, .baseHP = 100, .baseAttack = 100, .baseDefense = 100, @@ -12134,47 +14341,70 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 100, .baseSpDefense = 100, .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 45, - .expYield = 270, - .evYield_HP = 3, - .itemCommon = ITEM_LUM_BERRY, - .itemRare = ITEM_LUM_BERRY, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 100, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, }, - [SPECIES_ARCEUS] = + [SPECIES_SHAYMIN_SKY] = { - .baseHP = 120, - .baseAttack = 120, - .baseDefense = 120, - .baseSpeed = 120, + SHAYMIN_MISC_INFO, + .baseHP = 100, + .baseAttack = 103, + .baseDefense = 75, + .baseSpeed = 127, .baseSpAttack = 120, - .baseSpDefense = 120, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 3, - .expYield = 324, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, + .baseSpDefense = 75, + .types = { TYPE_GRASS, TYPE_FLYING}, + .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, + .noFlip = TRUE, }, -#endif +#endif //P_FAMILY_SHAYMIN -#if P_GEN_5_POKEMON == TRUE +#if P_FAMILY_ARCEUS +#define ARCEUS_SPECIES_INFO(type) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .types = { type, type }, \ + .catchRate = 3, \ + .expYield = 324, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL, \ + } + + [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL), + [SPECIES_ARCEUS_FIGHTING] = ARCEUS_SPECIES_INFO(TYPE_FIGHTING), + [SPECIES_ARCEUS_FLYING] = ARCEUS_SPECIES_INFO(TYPE_FLYING), + [SPECIES_ARCEUS_POISON] = ARCEUS_SPECIES_INFO(TYPE_POISON), + [SPECIES_ARCEUS_GROUND] = ARCEUS_SPECIES_INFO(TYPE_GROUND), + [SPECIES_ARCEUS_ROCK] = ARCEUS_SPECIES_INFO(TYPE_ROCK), + [SPECIES_ARCEUS_BUG] = ARCEUS_SPECIES_INFO(TYPE_BUG), + [SPECIES_ARCEUS_GHOST] = ARCEUS_SPECIES_INFO(TYPE_GHOST), + [SPECIES_ARCEUS_STEEL] = ARCEUS_SPECIES_INFO(TYPE_STEEL), + [SPECIES_ARCEUS_FIRE] = ARCEUS_SPECIES_INFO(TYPE_FIRE), + [SPECIES_ARCEUS_WATER] = ARCEUS_SPECIES_INFO(TYPE_WATER), + [SPECIES_ARCEUS_GRASS] = ARCEUS_SPECIES_INFO(TYPE_GRASS), + [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_SPECIES_INFO(TYPE_ELECTRIC), + [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_SPECIES_INFO(TYPE_PSYCHIC), + [SPECIES_ARCEUS_ICE] = ARCEUS_SPECIES_INFO(TYPE_ICE), + [SPECIES_ARCEUS_DRAGON] = ARCEUS_SPECIES_INFO(TYPE_DRAGON), + [SPECIES_ARCEUS_DARK] = ARCEUS_SPECIES_INFO(TYPE_DARK), + [SPECIES_ARCEUS_FAIRY] = ARCEUS_SPECIES_INFO(TYPE_FAIRY), +#endif //P_FAMILY_ARCEUS + +#if P_FAMILY_VICTINI [SPECIES_VICTINI] = { .baseHP = 100, @@ -12197,7 +14427,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_VICTINI +#if P_FAMILY_SNIVY [SPECIES_SNIVY] = { .baseHP = 45, @@ -12263,7 +14495,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_SNIVY +#if P_FAMILY_TEPIG [SPECIES_TEPIG] = { .baseHP = 65, @@ -12329,7 +14563,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, +#endif //P_FAMILY_TEPIG +#if P_FAMILY_OSHAWOTT [SPECIES_OSHAWOTT] = { .baseHP = 55, @@ -12374,8 +14610,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SAMUROTT_MISC_INFO \ + .catchRate = 45, \ + .expYield = 238, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_SAMUROTT] = { + SAMUROTT_MISC_INFO, .baseHP = 95, .baseAttack = 100, .baseDefense = 85, @@ -12383,19 +14631,29 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 108, .baseSpDefense = 70, .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 45, - .expYield = 238, .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_SAMUROTT_HISUIAN] = + { + SAMUROTT_MISC_INFO, + .baseHP = 90, + .baseAttack = 108, + .baseDefense = 80, + .baseSpeed = 85, + .baseSpAttack = 100, + .baseSpDefense = 65, + .types = { TYPE_WATER, TYPE_DARK}, + .evYield_Attack = 3, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHARPNESS}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_OSHAWOTT + +#if P_FAMILY_PATRAT [SPECIES_PATRAT] = { .baseHP = 45, @@ -12439,7 +14697,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_PATRAT +#if P_FAMILY_LILLIPUP [SPECIES_LILLIPUP] = { .baseHP = 45, @@ -12487,15 +14747,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_STOUTLAND] = { .baseHP = 85, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 110 : 100, .baseDefense = 90, .baseSpeed = 80, .baseSpAttack = 45, .baseSpDefense = 90, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 110, - #else - .baseAttack = 100, - #endif .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 225, @@ -12509,7 +14765,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_LILLIPUP +#if P_FAMILY_PURRLOIN [SPECIES_PURRLOIN] = { .baseHP = 41, @@ -12553,7 +14811,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_PURRLOIN +#if P_FAMILY_PANSAGE [SPECIES_PANSAGE] = { .baseHP = 50, @@ -12597,7 +14857,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_PANSAGE +#if P_FAMILY_PANSEAR [SPECIES_PANSEAR] = { .baseHP = 50, @@ -12641,7 +14903,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, +#endif //P_FAMILY_PANSEAR +#if P_FAMILY_PANPOUR [SPECIES_PANPOUR] = { .baseHP = 50, @@ -12685,7 +14949,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_PANPOUR +#if P_FAMILY_MUNNA [SPECIES_MUNNA] = { .baseHP = 76, @@ -12729,7 +14995,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_MUNNA +#if P_FAMILY_PIDOVE [SPECIES_PIDOVE] = { .baseHP = 50, @@ -12777,15 +15045,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_UNFEZANT] = { .baseHP = 80, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 115 : 105, .baseDefense = 80, .baseSpeed = 93, .baseSpAttack = 65, .baseSpDefense = 55, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 115, - #else - .baseAttack = 105, - #endif .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 220, @@ -12799,7 +15063,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_PIDOVE +#if P_FAMILY_BLITZLE [SPECIES_BLITZLE] = { .baseHP = 45, @@ -12843,7 +15109,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_BLITZLE +#if P_FAMILY_ROGGENROLA [SPECIES_ROGGENROLA] = { .baseHP = 55, @@ -12900,11 +15168,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 130, .baseSpeed = 25, .baseSpAttack = 60, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 80, - #else - .baseSpDefense = 70, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 80 : 70, .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 45, .expYield = 232, @@ -12920,19 +15184,17 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_ROGGENROLA +#if P_FAMILY_WOOBAT [SPECIES_WOOBAT] = { + .baseHP = P_UPDATED_STATS >= GEN_7 ? 65 : 55, .baseAttack = 45, .baseDefense = 43, .baseSpeed = 72, .baseSpAttack = 55, .baseSpDefense = 43, - #if P_UPDATED_STATS >= GEN_7 - .baseHP = 65, - #else - .baseHP = 55, - #endif .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 190, .expYield = 65, @@ -12968,7 +15230,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_WOOBAT +#if P_FAMILY_DRILBUR [SPECIES_DRILBUR] = { .baseHP = 60, @@ -13012,9 +15276,24 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, +#endif //P_FAMILY_DRILBUR +#define AUDINO_MISC_INFO \ + .catchRate = 255, \ + .evYield_HP = 2, \ + .itemCommon = ITEM_ORAN_BERRY, \ + .itemRare = ITEM_SITRUS_BERRY, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + .noFlip = FALSE + +#if P_FAMILY_AUDINO [SPECIES_AUDINO] = { + AUDINO_MISC_INFO, .baseHP = 103, .baseAttack = 60, .baseDefense = 86, @@ -13022,21 +15301,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 60, .baseSpDefense = 86, .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 255, .expYield = 390, - .evYield_HP = 2, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_SITRUS_BERRY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_REGENERATOR, ABILITY_KLUTZ}, .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, }, +#if P_MEGA_EVOLUTIONS + [SPECIES_AUDINO_MEGA] = + { + AUDINO_MISC_INFO, + .baseHP = 103, + .baseAttack = 60, + .baseDefense = 126, + .baseSpeed = 50, + .baseSpAttack = 80, + .baseSpDefense = 126, + .types = { TYPE_NORMAL, TYPE_FAIRY}, + .expYield = 425, + .abilities = {ABILITY_HEALER, ABILITY_HEALER, ABILITY_HEALER}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_AUDINO + +#if P_FAMILY_TIMBURR [SPECIES_TIMBURR] = { .baseHP = 75, @@ -13102,7 +15391,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_TIMBURR +#if P_FAMILY_TYMPOLE [SPECIES_TYMPOLE] = { .baseHP = 50, @@ -13150,15 +15441,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_SEISMITOAD] = { .baseHP = 105, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 95 : 85, .baseDefense = 75, .baseSpeed = 74, .baseSpAttack = 85, .baseSpDefense = 75, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 95, - #else - .baseAttack = 85, - #endif .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 45, .expYield = 229, @@ -13172,7 +15459,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TYMPOLE +#if P_FAMILY_THROH [SPECIES_THROH] = { .baseHP = 120, @@ -13195,7 +15484,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_THROH +#if P_FAMILY_SAWK [SPECIES_SAWK] = { .baseHP = 75, @@ -13218,7 +15509,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, +#endif //P_FAMILY_SAWK +#if P_FAMILY_SEWADDLE [SPECIES_SEWADDLE] = { .baseHP = 45, @@ -13272,11 +15565,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 92, .baseSpAttack = 70, - #if P_UPDATED_STATS >= GEN_6 - .baseSpDefense = 80, - #else - .baseSpDefense = 70, - #endif + .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 80 : 70, .types = { TYPE_BUG, TYPE_GRASS}, .catchRate = 45, .expYield = 225, @@ -13291,7 +15580,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_SEWADDLE +#if P_FAMILY_VENIPEDE [SPECIES_VENIPEDE] = { .baseHP = 30, @@ -13349,15 +15640,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_SCOLIPEDE] = { .baseHP = 60, + .baseAttack = P_UPDATED_STATS >= GEN_6 ? 100 : 90, .baseDefense = 89, .baseSpeed = 112, .baseSpAttack = 55, .baseSpDefense = 69, - #if P_UPDATED_STATS >= GEN_6 - .baseAttack = 100, - #else - .baseAttack = 90, - #endif .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 218, @@ -13376,6 +15663,14 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_VENIPEDE + +#if P_FAMILY_COTTONEE +#if P_UPDATED_TYPES >= GEN_6 + #define COTTONEE_FAMILY_TYPES { TYPE_GRASS, TYPE_FAIRY } +#else + #define COTTONEE_FAMILY_TYPES { TYPE_GRASS, TYPE_GRASS } +#endif [SPECIES_COTTONEE] = { @@ -13385,11 +15680,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 66, .baseSpAttack = 37, .baseSpDefense = 50, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_GRASS, TYPE_FAIRY}, - #else - .types = { TYPE_GRASS, TYPE_GRASS}, - #endif + .types = COTTONEE_FAMILY_TYPES, .catchRate = 190, .expYield = 56, .evYield_Speed = 1, @@ -13412,11 +15703,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 116, .baseSpAttack = 77, .baseSpDefense = 75, - #if P_UPDATED_TYPES >= GEN_6 - .types = { TYPE_GRASS, TYPE_FAIRY}, - #else - .types = { TYPE_GRASS, TYPE_GRASS}, - #endif + .types = COTTONEE_FAMILY_TYPES, .catchRate = 75, .expYield = 168, .evYield_Speed = 2, @@ -13430,7 +15717,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_COTTONEE +#if P_FAMILY_PETILIL [SPECIES_PETILIL] = { .baseHP = 45, @@ -13454,8 +15743,21 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define LILLIGANT_MISC_INFO \ + .catchRate = 75, \ + .expYield = 168, \ + .itemRare = ITEM_ABSORB_BULB, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = TRUE + [SPECIES_LILLIGANT] = { + LILLIGANT_MISC_INFO, .baseHP = 70, .baseAttack = 60, .baseDefense = 75, @@ -13463,43 +15765,109 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 110, .baseSpDefense = 75, .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 75, - .expYield = 168, .evYield_SpAttack = 2, - .itemRare = ITEM_ABSORB_BULB, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, }, - [SPECIES_BASCULIN] = +#if P_HISUIAN_FORMS + [SPECIES_LILLIGANT_HISUIAN] = { + LILLIGANT_MISC_INFO, .baseHP = 70, + .baseAttack = 105, + .baseDefense = 75, + .baseSpeed = 105, + .baseSpAttack = 50, + .baseSpDefense = 75, + .types = { TYPE_GRASS, TYPE_FIGHTING}, + .evYield_Attack = 1, + .evYield_Speed = 1, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_HUSTLE, ABILITY_LEAF_GUARD}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_PETILIL + +#if P_FAMILY_BASCULIN +#define BASCULIN_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 92, \ + .baseDefense = 65, \ + .baseSpeed = 98, \ + .baseSpAttack = 80, \ + .baseSpDefense = 55, \ + .types = { TYPE_WATER, TYPE_WATER}, \ + .catchRate = 190, \ + .expYield = 161, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + + [SPECIES_BASCULIN_RED_STRIPED] = + { + BASCULIN_MISC_INFO, + .itemRare = ITEM_DEEP_SEA_TOOTH, + .abilities = {ABILITY_RECKLESS, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, + }, + + [SPECIES_BASCULIN_BLUE_STRIPED] = + { + BASCULIN_MISC_INFO, + .itemRare = ITEM_DEEP_SEA_SCALE, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, + }, + + [SPECIES_BASCULIN_WHITE_STRIPED] = + { + BASCULIN_MISC_INFO, + .itemRare = ITEM_DEEP_SEA_SCALE, + .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, + }, + +#define BASCULEGION_MISC_INFO \ + .types = { TYPE_WATER, TYPE_GHOST}, \ + .catchRate = 45, \ + .expYield = 265, \ + .evYield_HP = 3, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + + [SPECIES_BASCULEGION_MALE] = + { + BASCULEGION_MISC_INFO, + .baseHP = 120, + .baseAttack = 112, + .baseDefense = 65, + .baseSpeed = 78, + .baseSpAttack = 80, + .baseSpDefense = 75, + .genderRatio = MON_MALE, + }, + + [SPECIES_BASCULEGION_FEMALE] = + { + BASCULEGION_MISC_INFO, + .baseHP = 120, .baseAttack = 92, .baseDefense = 65, - .baseSpeed = 98, - .baseSpAttack = 80, - .baseSpDefense = 55, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 25, - .expYield = 161, - .evYield_Speed = 2, - .itemRare = ITEM_DEEP_SEA_TOOTH, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_RECKLESS, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + .baseSpeed = 78, + .baseSpAttack = 100, + .baseSpDefense = 75, + .genderRatio = MON_FEMALE, }, +#endif //P_FAMILY_BASCULIN +#if P_FAMILY_SANDILE [SPECIES_SANDILE] = { .baseHP = 50, @@ -13550,14 +15918,10 @@ const struct SpeciesInfo gSpeciesInfo[] = { .baseHP = 95, .baseAttack = 117, + .baseDefense = P_UPDATED_STATS >= GEN_6 ? 80 : 70, .baseSpeed = 92, .baseSpAttack = 65, .baseSpDefense = 70, - #if P_UPDATED_STATS >= GEN_6 - .baseDefense = 80, - #else - .baseDefense = 70, - #endif .types = { TYPE_GROUND, TYPE_DARK}, .catchRate = 45, .expYield = 234, @@ -13572,51 +15936,118 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_SANDILE + +#if P_FAMILY_DARUMAKA +#define DARUMAKA_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 90, \ + .baseDefense = 45, \ + .baseSpeed = 50, \ + .baseSpAttack = 15, \ + .baseSpDefense = 45, \ + .catchRate = 120, \ + .expYield = 63, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, \ + .noFlip = FALSE + +#define DARMANITAN_MISC_INFO \ + .catchRate = 60, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + +#define DARMANITAN_STANDARD_MISC_INFO \ + .baseHP = 105, \ + .baseAttack = 140, \ + .baseDefense = 55, \ + .baseSpeed = 95, \ + .baseSpAttack = 30, \ + .baseSpDefense = 55, \ + .expYield = 168, \ + .evYield_Attack = 2, \ + DARMANITAN_MISC_INFO + +#define DARMANITAN_ZEN_MODE_MISC_INFO \ + .expYield = 189, \ + .evYield_SpAttack = 2, \ + DARMANITAN_MISC_INFO [SPECIES_DARUMAKA] = { - .baseHP = 70, - .baseAttack = 90, - .baseDefense = 45, - .baseSpeed = 50, - .baseSpAttack = 15, - .baseSpDefense = 45, + DARUMAKA_MISC_INFO, .types = { TYPE_FIRE, TYPE_FIRE}, - .catchRate = 120, - .expYield = 63, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, - [SPECIES_DARMANITAN] = + [SPECIES_DARMANITAN_STANDARD_MODE] = { - .baseHP = 105, - .baseAttack = 140, - .baseDefense = 55, - .baseSpeed = 95, - .baseSpAttack = 30, - .baseSpDefense = 55, + DARMANITAN_STANDARD_MISC_INFO, .types = { TYPE_FIRE, TYPE_FIRE}, - .catchRate = 60, - .expYield = 168, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, + [SPECIES_DARMANITAN_ZEN_MODE] = + { + DARMANITAN_ZEN_MODE_MISC_INFO, + .baseHP = 105, + .baseAttack = 30, + .baseDefense = 105, + .baseSpeed = 55, + .baseSpAttack = 140, + .baseSpDefense = 105, + .types = { TYPE_FIRE, TYPE_PSYCHIC}, + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, + .bodyColor = BODY_COLOR_BLUE, + }, + +#if P_GALARIAN_FORMS + [SPECIES_DARUMAKA_GALARIAN] = + { + DARUMAKA_MISC_INFO, + .types = { TYPE_ICE, TYPE_ICE}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + +#define DARMANITAN_GALARIAN_MISC_INFO \ + .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .flags = SPECIES_FLAG_GALARIAN_FORM + + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = + { + DARMANITAN_GALARIAN_MISC_INFO, + DARMANITAN_STANDARD_MISC_INFO, + .types = { TYPE_ICE, TYPE_ICE}, + }, + + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = + { + DARMANITAN_GALARIAN_MISC_INFO, + DARMANITAN_ZEN_MODE_MISC_INFO, + .baseHP = 105, + .baseAttack = 160, + .baseDefense = 55, + .baseSpeed = 135, + .baseSpAttack = 30, + .baseSpDefense = 55, + .types = { TYPE_ICE, TYPE_FIRE}, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_DARUMAKA + +#if P_FAMILY_MARACTUS [SPECIES_MARACTUS] = { .baseHP = 75, @@ -13639,7 +16070,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_MARACTUS +#if P_FAMILY_DWEBBLE [SPECIES_DWEBBLE] = { .baseHP = 50, @@ -13666,15 +16099,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_CRUSTLE] = { .baseHP = 70, + .baseAttack = P_UPDATED_STATS >= GEN_7 ? 105 : 95, .baseDefense = 125, .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 75, - #if P_UPDATED_STATS >= GEN_7 - .baseAttack = 105, - #else - .baseAttack = 95, - #endif .types = { TYPE_BUG, TYPE_ROCK}, .catchRate = 75, .expYield = 170, @@ -13689,7 +16118,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_DWEBBLE +#if P_FAMILY_SCRAGGY [SPECIES_SCRAGGY] = { .baseHP = 50, @@ -13736,7 +16167,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_SCRAGGY +#if P_FAMILY_SIGILYPH [SPECIES_SIGILYPH] = { .baseHP = 72, @@ -13758,9 +16191,24 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_SIGILYPH + +#if P_FAMILY_YAMASK +#define YAMASK_MISC_INFO \ + .catchRate = 190, \ + .expYield = 61, \ + .evYield_Defense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE [SPECIES_YAMASK] = { + YAMASK_MISC_INFO, .baseHP = 38, .baseAttack = 30, .baseDefense = 85, @@ -13768,18 +16216,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 55, .baseSpDefense = 65, .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 190, - .expYield = 61, - .evYield_Defense = 1, .itemRare = ITEM_SPELL_TAG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MUMMY, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, }, [SPECIES_COFAGRIGUS] = @@ -13805,6 +16243,46 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#if P_GALARIAN_FORMS + [SPECIES_YAMASK_GALARIAN] = + { + YAMASK_MISC_INFO, + .baseHP = 38, + .baseAttack = 55, + .baseDefense = 85, + .baseSpeed = 30, + .baseSpAttack = 30, + .baseSpDefense = 65, + .types = { TYPE_GROUND, TYPE_GHOST}, + .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, + + [SPECIES_RUNERIGUS] = + { + .baseHP = 58, + .baseAttack = 95, + .baseDefense = 145, + .baseSpeed = 30, + .baseSpAttack = 50, + .baseSpDefense = 105, + .types = { TYPE_GROUND, TYPE_GHOST}, + .catchRate = 90, + .expYield = 169, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, + .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_YAMASK + +#if P_FAMILY_TIRTOUGA [SPECIES_TIRTOUGA] = { .baseHP = 54, @@ -13848,7 +16326,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TIRTOUGA +#if P_FAMILY_ARCHEN [SPECIES_ARCHEN] = { .baseHP = 55, @@ -13892,7 +16372,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_ARCHEN +#if P_FAMILY_TRUBBISH [SPECIES_TRUBBISH] = { .baseHP = 50, @@ -13916,32 +16398,72 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GARBODOR_MISC_INFO \ + .baseHP = 80, \ + .baseAttack = 95, \ + .baseDefense = 82, \ + .baseSpeed = 75, \ + .baseSpAttack = 60, \ + .baseSpDefense = 82, \ + .types = {TYPE_POISON, TYPE_POISON}, \ + .catchRate = 60, \ + .expYield = 166, \ + .evYield_Attack = 2, \ + .itemCommon = ITEM_SILK_SCARF, \ + .itemRare = ITEM_BLACK_SLUDGE, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_STENCH, ABILITY_WEAK_ARMOR, ABILITY_AFTERMATH}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = TRUE + [SPECIES_GARBODOR] = { - .baseHP = 80, - .baseAttack = 95, - .baseDefense = 82, - .baseSpeed = 75, - .baseSpAttack = 60, - .baseSpDefense = 82, - .types = { TYPE_POISON, TYPE_POISON}, - .catchRate = 60, - .expYield = 166, - .evYield_Attack = 2, - .itemCommon = ITEM_SILK_SCARF, - .itemRare = ITEM_BLACK_SLUDGE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STENCH, ABILITY_WEAK_ARMOR, ABILITY_AFTERMATH}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, + GARBODOR_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_GARBODOR_GIGANTAMAX] = + { + GARBODOR_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_TRUBBISH + +#if P_FAMILY_ZORUA +#define ZORUA_MISC_INFO \ + .catchRate = 75, \ + .expYield = 66, \ + .evYield_SpAttack = 1, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + +#define ZOROARK_MISC_INFO \ + .catchRate = 45, \ + .expYield = 179, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + [SPECIES_ZORUA] = { + ZORUA_MISC_INFO, .baseHP = 40, .baseAttack = 65, .baseDefense = 40, @@ -13949,21 +16471,11 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 80, .baseSpDefense = 40, .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 75, - .expYield = 66, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, }, [SPECIES_ZOROARK] = { + ZOROARK_MISC_INFO, .baseHP = 60, .baseAttack = 105, .baseDefense = 60, @@ -13971,19 +16483,38 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 120, .baseSpDefense = 60, .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 45, - .expYield = 179, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_ZORUA_HISUIAN] = + { + ZORUA_MISC_INFO, + .baseHP = 35, + .baseAttack = 60, + .baseDefense = 40, + .baseSpeed = 70, + .baseSpAttack = 85, + .baseSpDefense = 40, + .types = { TYPE_NORMAL, TYPE_GHOST}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_ZOROARK_HISUIAN] = + { + ZOROARK_MISC_INFO, + .baseHP = 55, + .baseAttack = 100, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 125, + .baseSpDefense = 60, + .types = { TYPE_NORMAL, TYPE_GHOST}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_ZORUA + +#if P_FAMILY_MINCCINO [SPECIES_MINCCINO] = { .baseHP = 55, @@ -14027,7 +16558,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, +#endif //P_FAMILY_MINCCINO +#if P_FAMILY_GOTHITA [SPECIES_GOTHITA] = { .baseHP = 45, @@ -14093,7 +16626,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_GOTHITA +#if P_FAMILY_SOLOSIS [SPECIES_SOLOSIS] = { .baseHP = 45, @@ -14159,7 +16694,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_SOLOSIS +#if P_FAMILY_DUCKLETT [SPECIES_DUCKLETT] = { .baseHP = 62, @@ -14203,7 +16740,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_DUCKLETT +#if P_FAMILY_VANILLITE [SPECIES_VANILLITE] = { .baseHP = 36, @@ -14272,11 +16811,65 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_VANILLITE - [SPECIES_DEERLING] = DEERLING_SPECIES_INFO(BODY_COLOR_PINK), +#if P_FAMILY_DEERLING +#define DEERLING_SPECIES_INFO(color) \ + { \ + .baseHP = 60, \ + .baseAttack = 60, \ + .baseDefense = 50, \ + .baseSpeed = 75, \ + .baseSpAttack = 40, \ + .baseSpDefense = 50, \ + .types = { TYPE_NORMAL, TYPE_GRASS}, \ + .catchRate = 190, \ + .expYield = 67, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } - [SPECIES_SAWSBUCK] = SAWSBUCK_SPECIES_INFO, + [SPECIES_DEERLING_SPRING] = DEERLING_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_DEERLING_SUMMER] = DEERLING_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_DEERLING_AUTUMN] = DEERLING_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_DEERLING_WINTER] = DEERLING_SPECIES_INFO(BODY_COLOR_BROWN), +#define SAWSBUCK_SPECIES_INFO \ + { \ + .baseHP = 80, \ + .baseAttack = 100, \ + .baseDefense = 70, \ + .baseSpeed = 95, \ + .baseSpAttack = 60, \ + .baseSpDefense = 70, \ + .types = { TYPE_NORMAL, TYPE_GRASS}, \ + .catchRate = 75, \ + .expYield = 166, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE, \ + } + + [SPECIES_SAWSBUCK_SPRING] = SAWSBUCK_SPECIES_INFO, + [SPECIES_SAWSBUCK_SUMMER] = SAWSBUCK_SPECIES_INFO, + [SPECIES_SAWSBUCK_AUTUMN] = SAWSBUCK_SPECIES_INFO, + [SPECIES_SAWSBUCK_WINTER] = SAWSBUCK_SPECIES_INFO, +#endif //P_FAMILY_DEERLING + +#if P_FAMILY_EMOLGA [SPECIES_EMOLGA] = { .baseHP = 55, @@ -14298,7 +16891,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_EMOLGA +#if P_FAMILY_KARRABLAST [SPECIES_KARRABLAST] = { .baseHP = 50, @@ -14342,7 +16937,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_KARRABLAST +#if P_FAMILY_FOONGUS [SPECIES_FOONGUS] = { .baseHP = 69, @@ -14390,7 +16987,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, }, +#endif //P_FAMILY_FOONGUS +#if P_FAMILY_FRILLISH [SPECIES_FRILLISH] = { .baseHP = 55, @@ -14434,7 +17033,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_FRILLISH +#if P_FAMILY_ALOMOMOLA [SPECIES_ALOMOMOLA] = { .baseHP = 165, @@ -14456,7 +17057,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_ALOMOMOLA +#if P_FAMILY_JOLTIK [SPECIES_JOLTIK] = { .baseHP = 50, @@ -14500,7 +17103,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_JOLTIK +#if P_FAMILY_FERROSEED [SPECIES_FERROSEED] = { .baseHP = 44, @@ -14546,7 +17151,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_FERROSEED +#if P_FAMILY_KLINK [SPECIES_KLINK] = { .baseHP = 40, @@ -14612,7 +17219,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, +#endif //P_FAMILY_KLINK +#if P_FAMILY_TYNAMO [SPECIES_TYNAMO] = { .baseHP = 35, @@ -14678,7 +17287,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_TYNAMO +#if P_FAMILY_ELGYEM [SPECIES_ELGYEM] = { .baseHP = 55, @@ -14722,7 +17333,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_ELGYEM +#if P_FAMILY_LITWICK [SPECIES_LITWICK] = { .baseHP = 50, @@ -14800,7 +17413,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_LITWICK +#if P_FAMILY_AXEW [SPECIES_AXEW] = { .baseHP = 46, @@ -14866,7 +17481,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_AXEW +#if P_FAMILY_CUBCHOO [SPECIES_CUBCHOO] = { .baseHP = 55, @@ -14892,15 +17509,11 @@ const struct SpeciesInfo gSpeciesInfo[] = [SPECIES_BEARTIC] = { .baseHP = 95, + .baseAttack = P_UPDATED_STATS >= GEN_7 ? 130 : 110, .baseDefense = 80, .baseSpeed = 50, .baseSpAttack = 70, .baseSpDefense = 80, - #if P_UPDATED_STATS >= GEN_7 - .baseAttack = 130, - #else - .baseAttack = 110, - #endif .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 60, .expYield = 177, @@ -14914,7 +17527,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_CUBCHOO +#if P_FAMILY_CRYOGONAL [SPECIES_CRYOGONAL] = { .baseAttack = 50, @@ -14942,7 +17557,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CRYOGONAL +#if P_FAMILY_SHELMET [SPECIES_SHELMET] = { .baseHP = 50, @@ -14986,9 +17603,22 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_SHELMET + +#if P_FAMILY_STUNFISK +#define STUNFISK_MISC_INFO \ + .catchRate = 75, \ + .expYield = 165, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ + .noFlip = FALSE [SPECIES_STUNFISK] = { + STUNFISK_MISC_INFO, .baseHP = 109, .baseAttack = 66, .baseDefense = 84, @@ -14996,20 +17626,32 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 81, .baseSpDefense = 99, .types = { TYPE_GROUND, TYPE_ELECTRIC}, - .catchRate = 75, - .expYield = 165, - .evYield_HP = 2, .itemRare = ITEM_SOFT_SAND, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, .friendship = 70, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STATIC, ABILITY_LIMBER, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_GALARIAN_FORMS + [SPECIES_STUNFISK_GALARIAN] = + { + STUNFISK_MISC_INFO, + .baseHP = 109, + .baseAttack = 81, + .baseDefense = 99, + .baseSpeed = 32, + .baseSpAttack = 66, + .baseSpDefense = 84, + .types = { TYPE_GROUND, TYPE_STEEL}, + .friendship = STANDARD_FRIENDSHIP, + .abilities = {ABILITY_MIMICRY, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GREEN, + .flags = SPECIES_FLAG_GALARIAN_FORM, + }, +#endif //P_GALARIAN_FORMS +#endif //P_FAMILY_STUNFISK + +#if P_FAMILY_MIENFOO [SPECIES_MIENFOO] = { .baseHP = 45, @@ -15053,7 +17695,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_MIENFOO +#if P_FAMILY_DRUDDIGON [SPECIES_DRUDDIGON] = { .baseHP = 77, @@ -15076,7 +17720,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_DRUDDIGON +#if P_FAMILY_GOLETT [SPECIES_GOLETT] = { .baseHP = 59, @@ -15122,7 +17768,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, +#endif //P_FAMILY_GOLETT +#if P_FAMILY_PAWNIARD [SPECIES_PAWNIARD] = { .baseHP = 45, @@ -15167,6 +17815,30 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, + [SPECIES_KINGAMBIT] = + { + .baseHP = 100, + .baseAttack = 135, + .baseDefense = 120, + .baseSpeed = 50, + .baseSpAttack = 60, + .baseSpDefense = 85, + .types = { TYPE_DARK, TYPE_STEEL }, + .catchRate = 25, + .expYield = 275, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_DEFIANT, ABILITY_SUPREME_OVERLORD, ABILITY_PRESSURE}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_PAWNIARD + +#if P_FAMILY_BOUFFALANT [SPECIES_BOUFFALANT] = { .baseHP = 95, @@ -15188,7 +17860,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_BOUFFALANT +#if P_FAMILY_RUFFLET [SPECIES_RUFFLET] = { .baseHP = 70, @@ -15211,8 +17885,19 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define BRAVIARY_MISC_INFO \ + .catchRate = 60, \ + .expYield = 179, \ + .genderRatio = MON_MALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .noFlip = FALSE + [SPECIES_BRAVIARY] = { + BRAVIARY_MISC_INFO, .baseHP = 100, .baseAttack = 123, .baseDefense = 75, @@ -15220,19 +17905,31 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 57, .baseSpDefense = 75, .types = { TYPE_NORMAL, TYPE_FLYING}, - .catchRate = 60, - .expYield = 179, .evYield_Attack = 2, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_BRAVIARY_HISUIAN] = + { + BRAVIARY_MISC_INFO, + .baseHP = 110, + .baseAttack = 83, + .baseDefense = 70, + .baseSpeed = 65, + .baseSpAttack = 112, + .baseSpDefense = 70, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, + .evYield_SpAttack = 2, + .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_TINTED_LENS}, + .bodyColor = BODY_COLOR_WHITE, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_RUFFLET + +#if P_FAMILY_VULLABY [SPECIES_VULLABY] = { .baseHP = 70, @@ -15276,7 +17973,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_VULLABY +#if P_FAMILY_HEATMOR [SPECIES_HEATMOR] = { .baseHP = 85, @@ -15298,7 +17997,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_HEATMOR +#if P_FAMILY_DURANT [SPECIES_DURANT] = { .baseHP = 58, @@ -15320,7 +18021,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_DURANT +#if P_FAMILY_DEINO [SPECIES_DEINO] = { .baseHP = 52, @@ -15386,7 +18089,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_DEINO +#if P_FAMILY_LARVESTA [SPECIES_LARVESTA] = { .baseHP = 55, @@ -15432,7 +18137,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_LARVESTA +#if P_FAMILY_COBALION [SPECIES_COBALION] = { .baseHP = 91, @@ -15455,7 +18162,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_COBALION +#if P_FAMILY_TERRAKION [SPECIES_TERRAKION] = { .baseHP = 91, @@ -15478,7 +18187,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_TERRAKION +#if P_FAMILY_VIRIZION [SPECIES_VIRIZION] = { .baseHP = 91, @@ -15501,53 +18212,90 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_VIRIZION - [SPECIES_TORNADUS] = +#if P_FAMILY_TORNADUS +#define TORNADUS_MISC_INFO \ + .types = { TYPE_FLYING, TYPE_FLYING}, \ + .catchRate = 3, \ + .expYield = 261, \ + .evYield_Attack = 3, \ + .genderRatio = MON_MALE, \ + .eggCycles = 120, \ + .friendship = 90, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_TORNADUS_INCARNATE] = { + TORNADUS_MISC_INFO, .baseHP = 79, .baseAttack = 115, .baseDefense = 70, .baseSpeed = 111, .baseSpAttack = 125, .baseSpDefense = 80, - .types = { TYPE_FLYING, TYPE_FLYING}, - .catchRate = 3, - .expYield = 261, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_THUNDURUS] = + [SPECIES_TORNADUS_THERIAN] = { + TORNADUS_MISC_INFO, + .baseHP = 79, + .baseAttack = 100, + .baseDefense = 80, + .baseSpeed = 121, + .baseSpAttack = 110, + .baseSpDefense = 90, + .abilities = {ABILITY_REGENERATOR, ABILITY_NONE, ABILITY_REGENERATOR}, + }, +#endif //P_FAMILY_TORNADUS + +#if P_FAMILY_THUNDURUS +#define THUNDURUS_MISC_INFO \ + .types = { TYPE_ELECTRIC, TYPE_FLYING}, \ + .catchRate = 3, \ + .expYield = 261, \ + .genderRatio = MON_MALE, \ + .eggCycles = 120, \ + .friendship = 90, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_THUNDURUS_INCARNATE] = + { + THUNDURUS_MISC_INFO, .baseHP = 79, .baseAttack = 115, .baseDefense = 70, .baseSpeed = 111, .baseSpAttack = 125, .baseSpDefense = 80, - .types = { TYPE_ELECTRIC, TYPE_FLYING}, - .catchRate = 3, - .expYield = 261, .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_THUNDURUS_THERIAN] = + { + THUNDURUS_MISC_INFO, + .baseHP = 79, + .baseAttack = 105, + .baseDefense = 70, + .baseSpeed = 101, + .baseSpAttack = 145, + .baseSpDefense = 80, + .evYield_SpAttack = 3, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE, ABILITY_VOLT_ABSORB}, + }, +#endif //P_FAMILY_THUNDURUS + +#if P_FAMILY_RESHIRAM [SPECIES_RESHIRAM] = { .baseHP = 100, @@ -15570,7 +18318,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_RESHIRAM +#if P_FAMILY_ZEKROM [SPECIES_ZEKROM] = { .baseHP = 100, @@ -15593,80 +18343,163 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_ZEKROM - [SPECIES_LANDORUS] = +#if P_FAMILY_LANDORUS +#define LANDORUS_MISC_INFO \ + .types = { TYPE_GROUND, TYPE_FLYING}, \ + .catchRate = 3, \ + .expYield = 270, \ + .genderRatio = MON_MALE, \ + .eggCycles = 120, \ + .friendship = 90, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_LANDORUS_INCARNATE] = { + LANDORUS_MISC_INFO, .baseHP = 89, .baseAttack = 125, .baseDefense = 90, .baseSpeed = 101, .baseSpAttack = 115, .baseSpDefense = 80, - .types = { TYPE_GROUND, TYPE_FLYING}, - .catchRate = 3, - .expYield = 270, .evYield_SpAttack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SAND_FORCE, ABILITY_NONE, ABILITY_SHEER_FORCE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_LANDORUS_THERIAN] = + { + LANDORUS_MISC_INFO, + .baseHP = 89, + .baseAttack = 145, + .baseDefense = 90, + .baseSpeed = 91, + .baseSpAttack = 105, + .baseSpDefense = 80, + .evYield_Attack = 3, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, + }, +#endif //P_FAMILY_LANDORUS + +#if P_FAMILY_KYUREM +#define KYUREM_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_ICE}, \ + .catchRate = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = TRUE + [SPECIES_KYUREM] = { + KYUREM_MISC_INFO, .baseHP = 125, .baseAttack = 130, .baseDefense = 90, .baseSpeed = 95, .baseSpAttack = 130, .baseSpDefense = 90, - .types = { TYPE_DRAGON, TYPE_ICE}, - .catchRate = 3, .expYield = 297, .evYield_HP = 1, .evYield_Attack = 1, .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = TRUE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_KELDEO] = + [SPECIES_KYUREM_WHITE] = { - .baseHP = 91, - .baseAttack = 72, + KYUREM_MISC_INFO, + .baseHP = 125, + .baseAttack = 120, .baseDefense = 90, - .baseSpeed = 108, - .baseSpAttack = 129, - .baseSpDefense = 90, - .types = { TYPE_WATER, TYPE_FIGHTING}, - .catchRate = 3, - .expYield = 261, + .baseSpeed = 95, + .baseSpAttack = 170, + .baseSpDefense = 100, + .expYield = 315, .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 80, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, + .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, }, - [SPECIES_MELOETTA] = + [SPECIES_KYUREM_BLACK] = { + KYUREM_MISC_INFO, + .baseHP = 125, + .baseAttack = 170, + .baseDefense = 100, + .baseSpeed = 95, + .baseSpAttack = 120, + .baseSpDefense = 90, + .expYield = 315, + .evYield_Attack = 3, + .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, + }, +#endif //P_FAMILY_KYUREM + +#if P_FAMILY_KELDEO +#define KELDEO_MISC_INFO \ + .baseHP = 91, \ + .baseAttack = 72, \ + .baseDefense = 90, \ + .baseSpeed = 108, \ + .baseSpAttack = 129, \ + .baseSpDefense = 90, \ + .types = { TYPE_WATER, TYPE_FIGHTING}, \ + .catchRate = 3, \ + .expYield = 261, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 80, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .flags = SPECIES_FLAG_MYTHICAL + + [SPECIES_KELDEO_ORDINARY] = + { + KELDEO_MISC_INFO, + .noFlip = FALSE, + }, + + [SPECIES_KELDEO_RESOLUTE] = + { + KELDEO_MISC_INFO, + .noFlip = TRUE, + }, +#endif //P_FAMILY_KELDEO + +#if P_FAMILY_MELOETTA +#define MELOETTA_MISC_INFO \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_Speed = 1, \ + .itemCommon = ITEM_STAR_PIECE, \ + .itemRare = ITEM_STAR_PIECE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 100, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = TRUE, \ + .flags = SPECIES_FLAG_MYTHICAL + + [SPECIES_MELOETTA_ARIA] = + { + MELOETTA_MISC_INFO, .baseHP = 100, .baseAttack = 77, .baseDefense = 77, @@ -15674,28 +18507,59 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 128, .baseSpDefense = 128, .types = { TYPE_NORMAL, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 270, - .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_STAR_PIECE, - .itemRare = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 100, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, - .flags = SPECIES_FLAG_MYTHICAL, }, - [SPECIES_GENESECT] = GENESECT_SPECIES_INFO, -#endif + [SPECIES_MELOETTA_PIROUETTE] = + { + MELOETTA_MISC_INFO, + .baseHP = 100, + .baseAttack = 128, + .baseDefense = 90, + .baseSpeed = 128, + .baseSpAttack = 77, + .baseSpDefense = 77, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, + .evYield_Attack = 1, + .evYield_Defense = 1, + }, +#endif //P_FAMILY_MELOETTA -#if P_GEN_6_POKEMON == TRUE +#if P_FAMILY_GENESECT +#define GENESECT_SPECIES_INFO \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = { TYPE_BUG, TYPE_STEEL}, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL, \ + } + + [SPECIES_GENESECT] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_SPECIES_INFO, +#endif //P_FAMILY_GENESECT + +#if P_FAMILY_CHESPIN [SPECIES_CHESPIN] = { .baseHP = 56, @@ -15761,7 +18625,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_CHESPIN +#if P_FAMILY_FENNEKIN [SPECIES_FENNEKIN] = { .baseHP = 40, @@ -15827,7 +18693,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_FENNEKIN +#if P_FAMILY_FROAKIE [SPECIES_FROAKIE] = { .baseHP = 41, @@ -15872,28 +18740,60 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GRENINJA_NORMAL_MISC_INFO \ + .baseHP = 72, \ + .baseAttack = 95, \ + .baseDefense = 67, \ + .baseSpeed = 122, \ + .baseSpAttack = 103, \ + .baseSpDefense = 71, \ + .expYield = 239 + +#define GRENINJA_MISC_INFO \ + .types = { TYPE_WATER, TYPE_DARK}, \ + .catchRate = 45, \ + .evYield_Speed = 3, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = TRUE + [SPECIES_GRENINJA] = { - .baseHP = 72, - .baseAttack = 95, - .baseDefense = 67, - .baseSpeed = 122, - .baseSpAttack = 103, - .baseSpDefense = 71, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 45, - .expYield = 239, - .evYield_Speed = 3, + GRENINJA_MISC_INFO, + GRENINJA_NORMAL_MISC_INFO, .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, }, + [SPECIES_GRENINJA_BATTLE_BOND] = + { + GRENINJA_MISC_INFO, + GRENINJA_NORMAL_MISC_INFO, + .genderRatio = MON_MALE, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE, ABILITY_NONE}, + }, + + [SPECIES_GRENINJA_ASH] = + { + GRENINJA_MISC_INFO, + .baseHP = 72, + .baseAttack = 145, + .baseDefense = 67, + .baseSpeed = 132, + .baseSpAttack = 153, + .baseSpDefense = 71, + .expYield = 288, + .genderRatio = MON_MALE, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE, ABILITY_NONE}, + }, +#endif //P_FAMILY_FROAKIE + +#if P_FAMILY_BUNNELBY [SPECIES_BUNNELBY] = { .baseHP = 38, @@ -15937,7 +18837,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_BUNNELBY +#if P_FAMILY_FLETCHLING [SPECIES_FLETCHLING] = { .baseHP = 45, @@ -16003,7 +18905,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_FLETCHLING +#if P_FAMILY_SCATTERBUG [SPECIES_SCATTERBUG] = { .baseHP = 38, @@ -16048,8 +18952,53 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_VIVILLON] = VIVILLON_SPECIES_INFO(BODY_COLOR_WHITE), +#define VIVILLON_SPECIES_INFO(color) \ + { \ + .baseHP = 80, \ + .baseAttack = 52, \ + .baseDefense = 50, \ + .baseSpeed = 89, \ + .baseSpAttack = 90, \ + .baseSpDefense = 50, \ + .types = { TYPE_BUG, TYPE_FLYING}, \ + .catchRate = 45, \ + .expYield = 185, \ + .evYield_HP = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD},\ + .bodyColor = color, \ + .noFlip = FALSE, \ + } + [SPECIES_VIVILLON_ICY_SNOW] = VIVILLON_SPECIES_INFO(BODY_COLOR_WHITE), + [SPECIES_VIVILLON_POLAR] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_TUNDRA] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_CONTINENTAL] = VIVILLON_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_VIVILLON_GARDEN] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_ELEGANT] = VIVILLON_SPECIES_INFO(BODY_COLOR_PURPLE), + [SPECIES_VIVILLON_MEADOW] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_VIVILLON_MODERN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_MARINE] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_ARCHIPELAGO] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_HIGH_PLAINS] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_SANDSTORM] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_RIVER] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_MONSOON] = VIVILLON_SPECIES_INFO(BODY_COLOR_GRAY), + [SPECIES_VIVILLON_SAVANNA] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_SUN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_OCEAN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_JUNGLE] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_FANCY] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_VIVILLON_POKE_BALL] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), +#endif //P_FAMILY_SCATTERBUG + +#if P_FAMILY_LITLEO [SPECIES_LITLEO] = { .baseHP = 62, @@ -16093,13 +19042,110 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_LITLEO - [SPECIES_FLABEBE] = FLABEBE_SPECIES_INFO, +#if P_FAMILY_FLABEBE +#define FLABEBE_SPECIES_INFO \ + { \ + .baseHP = 44, \ + .baseAttack = 38, \ + .baseDefense = 39, \ + .baseSpeed = 42, \ + .baseSpAttack = 61, \ + .baseSpDefense = 79, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ + .catchRate = 225, \ + .expYield = 61, \ + .evYield_SpDefense = 1, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } - [SPECIES_FLOETTE] = FLOETTE_SPECIES_INFO, + [SPECIES_FLABEBE_RED_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_YELLOW_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_ORANGE_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_BLUE_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_WHITE_FLOWER] = FLABEBE_SPECIES_INFO, - [SPECIES_FLORGES] = FLORGES_SPECIES_INFO, +#define FLOETTE_MISC_INFO \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ + .catchRate = 120, \ + .evYield_SpDefense = 2, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE +#define FLOETTE_NORMAL_INFO(form, FORM, iconPal) \ + { \ + .baseHP = 54, \ + .baseAttack = 45, \ + .baseDefense = 47, \ + .baseSpeed = 52, \ + .baseSpAttack = 75, \ + .baseSpDefense = 98, \ + .expYield = 130, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + FLOETTE_MISC_INFO, \ + } + + [SPECIES_FLOETTE_RED_FLOWER] = FLOETTE_NORMAL_INFO(RedFlower, RED_FLOWER, 1), + [SPECIES_FLOETTE_YELLOW_FLOWER] = FLOETTE_NORMAL_INFO(YellowFlower, YELLOW_FLOWER, 1), + [SPECIES_FLOETTE_ORANGE_FLOWER] = FLOETTE_NORMAL_INFO(OrangeFlower, ORANGE_FLOWER, 0), + [SPECIES_FLOETTE_BLUE_FLOWER] = FLOETTE_NORMAL_INFO(BlueFlower, BLUE_FLOWER, 0), + [SPECIES_FLOETTE_WHITE_FLOWER] = FLOETTE_NORMAL_INFO(WhiteFlower, WHITE_FLOWER, 1), + [SPECIES_FLOETTE_ETERNAL_FLOWER] = + { + FLOETTE_MISC_INFO, + .baseHP = 74, + .baseAttack = 65, + .baseDefense = 67, + .baseSpeed = 92, + .baseSpAttack = 125, + .baseSpDefense = 128, + .expYield = 243, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + }, + +#define FLORGES_SPECIES_INFO \ + { \ + .baseHP = 78, \ + .baseAttack = 65, \ + .baseDefense = 68, \ + .baseSpeed = 75, \ + .baseSpAttack = 112, \ + .baseSpDefense = 154, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ + .catchRate = 45, \ + .expYield = 248, \ + .evYield_SpDefense = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } + + [SPECIES_FLORGES_RED_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_YELLOW_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_ORANGE_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_BLUE_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_WHITE_FLOWER] = FLORGES_SPECIES_INFO, +#endif //P_FAMILY_FLABEBE + +#if P_FAMILY_SKIDDO [SPECIES_SKIDDO] = { .baseHP = 66, @@ -16143,7 +19189,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SKIDDO +#if P_FAMILY_PANCHAM [SPECIES_PANCHAM] = { .baseHP = 67, @@ -16189,9 +19237,44 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_PANCHAM - [SPECIES_FURFROU] = FURFROU_SPECIES_INFO(FLIP), +#if P_FAMILY_FURFROU +#define FURFROU_SPECIES_INFO(flip) \ + { \ + .baseHP = 75, \ + .baseAttack = 80, \ + .baseDefense = 60, \ + .baseSpeed = 102, \ + .baseSpAttack = 65, \ + .baseSpDefense = 90, \ + .types = { TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 160, \ + .expYield = 165, \ + .evYield_Speed = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_FUR_COAT, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = flip, \ + } + [SPECIES_FURFROU_NATURAL] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_HEART_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_STAR_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DIAMOND_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DEBUTANTE_TRIM] = FURFROU_SPECIES_INFO(NO_FLIP), + [SPECIES_FURFROU_MATRON_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DANDY_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_LA_REINE_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_KABUKI_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_PHARAOH_TRIM] = FURFROU_SPECIES_INFO(FLIP), +#endif //P_FAMILY_FURFROU + +#if P_FAMILY_ESPURR [SPECIES_ESPURR] = { .baseHP = 62, @@ -16214,28 +19297,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_MEOWSTIC] = +#define MEOWSTIC_MISC_INFO \ + .baseHP = 74, \ + .baseAttack = 48, \ + .baseDefense = 76, \ + .baseSpeed = 104, \ + .baseSpAttack = 83, \ + .baseSpDefense = 81, \ + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ + .catchRate = 75, \ + .expYield = 163, \ + .evYield_Speed = 2, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + + [SPECIES_MEOWSTIC_MALE] = { - .baseHP = 74, - .baseAttack = 48, - .baseDefense = 76, - .baseSpeed = 104, - .baseSpAttack = 83, - .baseSpDefense = 81, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 75, - .expYield = 163, - .evYield_Speed = 2, + MEOWSTIC_MISC_INFO, .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, + [SPECIES_MEOWSTIC_FEMALE] = + { + MEOWSTIC_MISC_INFO, + .genderRatio = MON_FEMALE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_COMPETITIVE}, + .bodyColor = BODY_COLOR_WHITE, + }, +#endif //P_FAMILY_ESPURR + +#if P_FAMILY_HONEDGE [SPECIES_HONEDGE] = { .baseHP = 45, @@ -16280,34 +19376,49 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_AEGISLASH] = +#define AEGISLASH_MISC_INFO \ + .types = { TYPE_STEEL, TYPE_GHOST}, \ + .catchRate = 45, \ + .expYield = 234, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + +#define AEGISLASH_MAIN_STAT (P_UPDATED_STATS >= GEN_8 ? 140 : 150) + + [SPECIES_AEGISLASH_SHIELD] = { + AEGISLASH_MISC_INFO, .baseHP = 60, .baseAttack = 50, + .baseDefense = AEGISLASH_MAIN_STAT, .baseSpeed = 60, .baseSpAttack = 50, - #if P_UPDATED_STATS >= GEN_8 - .baseDefense = 140, - .baseSpDefense = 140, - #else - .baseDefense = 150, - .baseSpDefense = 150, - #endif - .types = { TYPE_STEEL, TYPE_GHOST}, - .catchRate = 45, - .expYield = 234, + .baseSpDefense = AEGISLASH_MAIN_STAT, .evYield_Defense = 2, .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, + [SPECIES_AEGISLASH_BLADE] = + { + AEGISLASH_MISC_INFO, + .baseHP = 60, + .baseAttack = AEGISLASH_MAIN_STAT, + .baseDefense = 50, + .baseSpeed = 60, + .baseSpAttack = AEGISLASH_MAIN_STAT, + .baseSpDefense = 50, + .evYield_Attack = 2, + .evYield_SpAttack = 1, + }, +#endif //P_FAMILY_HONEDGE + +#if P_FAMILY_SPRITZEE [SPECIES_SPRITZEE] = { .baseHP = 78, @@ -16351,7 +19462,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_SPRITZEE +#if P_FAMILY_SWIRLIX [SPECIES_SWIRLIX] = { .baseHP = 62, @@ -16395,7 +19508,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_SWIRLIX +#if P_FAMILY_INKAY [SPECIES_INKAY] = { .baseHP = 53, @@ -16439,7 +19554,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_INKAY +#if P_FAMILY_BINACLE [SPECIES_BINACLE] = { .baseHP = 42, @@ -16483,7 +19600,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, }, +#endif //P_FAMILY_BINACLE +#if P_FAMILY_SKRELP [SPECIES_SKRELP] = { .baseHP = 50, @@ -16527,7 +19646,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SKRELP +#if P_FAMILY_CLAUNCHER [SPECIES_CLAUNCHER] = { .baseHP = 50, @@ -16571,7 +19692,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, +#endif //P_FAMILY_CLAUNCHER +#if P_FAMILY_HELIOPTILE [SPECIES_HELIOPTILE] = { .baseHP = 44, @@ -16616,7 +19739,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_HELIOPTILE +#if P_FAMILY_TYRUNT [SPECIES_TYRUNT] = { .baseHP = 58, @@ -16660,7 +19785,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_TYRUNT +#if P_FAMILY_AMAURA [SPECIES_AMAURA] = { .baseHP = 77, @@ -16704,29 +19831,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_AMAURA - [SPECIES_SYLVEON] = - { - .baseHP = 95, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 60, - .baseSpAttack = 110, - .baseSpDefense = 130, - .types = { TYPE_FAIRY, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 184, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM, ABILITY_PIXILATE}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = TRUE, - }, - +#if P_FAMILY_HAWLUCHA [SPECIES_HAWLUCHA] = { .baseHP = 78, @@ -16753,7 +19860,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_HAWLUCHA +#if P_FAMILY_DEDENNE [SPECIES_DEDENNE] = { .baseHP = 67, @@ -16775,7 +19884,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_DEDENNE +#if P_FAMILY_CARBINK [SPECIES_CARBINK] = { .baseHP = 50, @@ -16798,7 +19909,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_CARBINK +#if P_FAMILY_GOOMY [SPECIES_GOOMY] = { .baseHP = 45, @@ -16822,8 +19935,34 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SLIGGOO_MISC_INFO \ + .catchRate = 45, \ + .expYield = 158, \ + .evYield_SpDefense = 2, \ + .itemRare = ITEM_SHED_SHELL, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + +#define GOODRA_MISC_INFO \ + .catchRate = 45, \ + .expYield = 270, \ + .evYield_SpDefense = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = 35, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + [SPECIES_SLIGGOO] = { + SLIGGOO_MISC_INFO, .baseHP = 68, .baseAttack = 75, .baseDefense = 53, @@ -16831,22 +19970,12 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 83, .baseSpDefense = 113, .types = { TYPE_DRAGON, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 158, - .evYield_SpDefense = 2, - .itemRare = ITEM_SHED_SHELL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, [SPECIES_GOODRA] = { + GOODRA_MISC_INFO, .baseHP = 90, .baseAttack = 100, .baseDefense = 70, @@ -16854,19 +19983,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 110, .baseSpDefense = 150, .types = { TYPE_DRAGON, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 270, - .evYield_SpDefense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_SLIGGOO_HISUIAN] = + { + SLIGGOO_MISC_INFO, + .baseHP = 58, + .baseAttack = 75, + .baseDefense = 83, + .baseSpeed = 40, + .baseSpAttack = 83, + .baseSpDefense = 113, + .types = { TYPE_DRAGON, TYPE_STEEL}, + .abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, + + [SPECIES_GOODRA_HISUIAN] = + { + GOODRA_MISC_INFO, + .baseHP = 80, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 60, + .baseSpAttack = 110, + .baseSpDefense = 150, + .types = { TYPE_DRAGON, TYPE_STEEL}, + .abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_GOOMY + +#if P_FAMILY_KLEFKI [SPECIES_KLEFKI] = { .baseHP = 57, @@ -16888,7 +20039,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, }, +#endif //P_FAMILY_KLEFKI +#if P_FAMILY_PHANTUMP [SPECIES_PHANTUMP] = { .baseHP = 43, @@ -16932,29 +20085,137 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_PHANTUMP - [SPECIES_PUMPKABOO] = +#if P_FAMILY_PUMPKABOO +#define PUMPKABOO_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GRASS}, \ + .catchRate = 120, \ + .expYield = 67, \ + .evYield_Defense = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + + [SPECIES_PUMPKABOO_AVERAGE] = { + PUMPKABOO_MISC_INFO, .baseHP = 49, .baseAttack = 66, .baseDefense = 70, .baseSpeed = 51, .baseSpAttack = 44, .baseSpDefense = 55, - PUMKPABOO_MISC_INFO, }, - [SPECIES_GOURGEIST] = + [SPECIES_PUMPKABOO_SMALL] = { + PUMPKABOO_MISC_INFO, + .baseHP = 44, + .baseAttack = 66, + .baseDefense = 70, + .baseSpeed = 56, + .baseSpAttack = 44, + .baseSpDefense = 55, + }, + + [SPECIES_PUMPKABOO_LARGE] = + { + PUMPKABOO_MISC_INFO, + .baseHP = 54, + .baseAttack = 66, + .baseDefense = 70, + .baseSpeed = 46, + .baseSpAttack = 44, + .baseSpDefense = 55, + }, + + [SPECIES_PUMPKABOO_SUPER] = + { + PUMPKABOO_MISC_INFO, + .baseHP = 59, + .baseAttack = 66, + .baseDefense = 70, + .baseSpeed = 41, + .baseSpAttack = 44, + .baseSpDefense = 55, + .itemCommon = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, + }, + +#define GOURGEIST_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GRASS}, \ + .catchRate = 60, \ + .expYield = 173, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + + [SPECIES_GOURGEIST_AVERAGE] = + { + GOURGEIST_MISC_INFO, .baseHP = 65, .baseAttack = 90, .baseDefense = 122, .baseSpeed = 84, .baseSpAttack = 58, .baseSpDefense = 75, - GOURGEIST_MISC_INFO, }, + [SPECIES_GOURGEIST_SMALL] = + { + GOURGEIST_MISC_INFO, + .baseHP = 55, + .baseAttack = 85, + .baseDefense = 122, + .baseSpeed = 99, + .baseSpAttack = 58, + .baseSpDefense = 75, + }, + + [SPECIES_GOURGEIST_LARGE] = + { + GOURGEIST_MISC_INFO, + .baseHP = 75, + .baseAttack = 95, + .baseDefense = 122, + .baseSpeed = 69, + .baseSpAttack = 58, + .baseSpDefense = 75, + }, + + [SPECIES_GOURGEIST_SUPER] = + { + GOURGEIST_MISC_INFO, + .baseHP = 85, + .baseAttack = 100, + .baseDefense = 122, + .baseSpeed = 54, + .baseSpAttack = 58, + .baseSpDefense = 75, + .itemCommon = ITEM_MIRACLE_SEED, + .itemRare = ITEM_MIRACLE_SEED, + }, +#endif //P_FAMILY_PUMPKABOO + +#if P_FAMILY_BERGMITE +#if P_UPDATED_EGG_GROUPS >= GEN_8 + #define BERGMITE_EGG_GROUPS {EGG_GROUP_MONSTER, EGG_GROUP_MINERAL } +#else + #define BERGMITE_EGG_GROUPS {EGG_GROUP_MONSTER, EGG_GROUP_MONSTER } +#endif + [SPECIES_BERGMITE] = { .baseHP = 55, @@ -16971,18 +20232,27 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - #else - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, - #endif + .eggGroups = BERGMITE_EGG_GROUPS, .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#define AVALUGG_MISC_INFO \ + .catchRate = 55, \ + .expYield = 180, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = BERGMITE_EGG_GROUPS, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_AVALUGG] = { + AVALUGG_MISC_INFO, .baseHP = 95, .baseAttack = 117, .baseDefense = 184, @@ -16990,23 +20260,27 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 44, .baseSpDefense = 46, .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 55, - .expYield = 180, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - #else - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, - #endif .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_AVALUGG_HISUIAN] = + { + AVALUGG_MISC_INFO, + .baseHP = 95, + .baseAttack = 127, + .baseDefense = 184, + .baseSpeed = 38, + .baseSpAttack = 34, + .baseSpDefense = 36, + .types = { TYPE_ICE, TYPE_ROCK}, + .abilities = {ABILITY_STRONG_JAW, ABILITY_ICE_BODY, ABILITY_STURDY}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_BERGMITE + +#if P_FAMILY_NOIBAT [SPECIES_NOIBAT] = { .baseHP = 40, @@ -17058,9 +20332,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_NOIBAT - [SPECIES_XERNEAS] = XERNEAS_SPECIES_INFO, +#if P_FAMILY_XERNEAS +#define XERNEAS_MISC_INFO \ + .baseHP = 126, \ + .baseAttack = 131, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 131, \ + .baseSpDefense = 98, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ + .catchRate = 45, \ + .expYield = 306, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + [SPECIES_XERNEAS_NEUTRAL] = + { + XERNEAS_MISC_INFO, + }, + + [SPECIES_XERNEAS_ACTIVE] = + { + XERNEAS_MISC_INFO, + }, +#endif //P_FAMILY_XERNEAS + +#if P_FAMILY_YVELTAL [SPECIES_YVELTAL] = { .baseHP = 126, @@ -17083,35 +20390,130 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_YVELTAL - [SPECIES_ZYGARDE] = ZYGARDE_50_SPECIES_INFO(ABILITY_AURA_BREAK), +#if P_FAMILY_ZYGARDE +#define ZYGARDE_MISC_INFO \ + .types = { TYPE_DRAGON, TYPE_GROUND}, \ + .catchRate = 3, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .noFlip = TRUE, \ + .flags = SPECIES_FLAG_LEGENDARY + +#define ZYGARDE_50_SPECIES_INFO(ability) \ + { \ + .baseHP = 108, \ + .baseAttack = 100, \ + .baseDefense = 121, \ + .baseSpeed = 95, \ + .baseSpAttack = 81, \ + .baseSpDefense = 95, \ + .expYield = 270, \ + .abilities = {ability, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GREEN, \ + ZYGARDE_MISC_INFO, \ + } + +#define ZYGARDE_10_SPECIES_INFO(ability) \ + { \ + .baseHP = 54, \ + .baseAttack = 100, \ + .baseDefense = 71, \ + .baseSpeed = 115, \ + .baseSpAttack = 61, \ + .baseSpDefense = 85, \ + .expYield = 219, \ + .abilities = {ability, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_BLACK, \ + ZYGARDE_MISC_INFO, \ + } + + [SPECIES_ZYGARDE_50_AURA_BREAK] = ZYGARDE_50_SPECIES_INFO(ABILITY_AURA_BREAK), + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = ZYGARDE_50_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), + [SPECIES_ZYGARDE_10_AURA_BREAK] = ZYGARDE_10_SPECIES_INFO(ABILITY_AURA_BREAK), + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = ZYGARDE_10_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), + [SPECIES_ZYGARDE_COMPLETE] = + { + ZYGARDE_MISC_INFO, + .baseHP = 216, + .baseAttack = 100, + .baseDefense = 121, + .baseSpeed = 85, + .baseSpAttack = 91, + .baseSpDefense = 95, + .expYield = 319, + .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLACK, + }, +#endif //P_FAMILY_ZYGARDE + +#if P_FAMILY_DIANCIE +#define DIANCE_MISC_INFO \ + .types = { TYPE_ROCK, TYPE_FAIRY}, \ + .catchRate = 3, \ + .evYield_Defense = 1, \ + .evYield_SpDefense = 2, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_PINK, \ + .noFlip = FALSE [SPECIES_DIANCIE] = { + DIANCE_MISC_INFO, .baseHP = 50, .baseAttack = 100, .baseDefense = 150, .baseSpeed = 50, .baseSpAttack = 100, .baseSpDefense = 150, - .types = { TYPE_ROCK, TYPE_FAIRY}, - .catchRate = 3, .expYield = 270, - .evYield_Defense = 1, - .evYield_SpDefense = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, - [SPECIES_HOOPA] = +#if P_MEGA_EVOLUTIONS + [SPECIES_DIANCIE_MEGA] = { + DIANCE_MISC_INFO, + .baseHP = 50, + .baseAttack = 160, + .baseDefense = 110, + .baseSpeed = 110, + .baseSpAttack = 160, + .baseSpDefense = 110, + .expYield = 315, + .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, + .flags = SPECIES_FLAG_MYTHICAL | SPECIES_FLAG_MEGA_EVOLUTION, + }, +#endif +#endif //P_FAMILY_DIANCIE + +#if P_FAMILY_HOOPA +#define HOOPA_MISC_INFO \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL + + [SPECIES_HOOPA_CONFINED] = + { + HOOPA_MISC_INFO, .baseHP = 80, .baseAttack = 110, .baseDefense = 60, @@ -17119,20 +20521,24 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 150, .baseSpDefense = 130, .types = { TYPE_PSYCHIC, TYPE_GHOST}, - .catchRate = 3, - .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, .friendship = 100, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, }, + [SPECIES_HOOPA_UNBOUND] = + { + HOOPA_MISC_INFO, + .baseHP = 80, + .baseAttack = 160, + .baseDefense = 60, + .baseSpeed = 80, + .baseSpAttack = 170, + .baseSpDefense = 130, + .types = { TYPE_PSYCHIC, TYPE_DARK}, + .friendship = P_UPDATED_FRIENDSHIP >= GEN_8 ? STANDARD_FRIENDSHIP : 100, + }, +#endif //P_FAMILY_HOOPA + +#if P_FAMILY_VOLCANION [SPECIES_VOLCANION] = { .baseHP = 80, @@ -17155,9 +20561,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, -#endif +#endif //P_FAMILY_VOLCANION -#if P_GEN_7_POKEMON == TRUE +#if P_FAMILY_ROWLET [SPECIES_ROWLET] = { .baseHP = 68, @@ -17202,8 +20608,21 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, }, +#define DECIDUEYE_MISC_INFO \ + .catchRate = 45, \ + .expYield = 239, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE + [SPECIES_DECIDUEYE] = { + DECIDUEYE_MISC_INFO, .baseHP = 78, .baseAttack = 107, .baseDefense = 75, @@ -17211,19 +20630,27 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpAttack = 100, .baseSpDefense = 100, .types = { TYPE_GRASS, TYPE_GHOST}, - .catchRate = 45, - .expYield = 239, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, +#if P_HISUIAN_FORMS + [SPECIES_DECIDUEYE_HISUIAN] = + { + DECIDUEYE_MISC_INFO, + .baseHP = 88, + .baseAttack = 112, + .baseDefense = 80, + .baseSpeed = 60, + .baseSpAttack = 95, + .baseSpDefense = 95, + .types = { TYPE_GRASS, TYPE_FIGHTING}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SCRAPPY}, + .flags = SPECIES_FLAG_HISUIAN_FORM, + }, +#endif //P_HISUIAN_FORMS +#endif //P_FAMILY_ROWLET + +#if P_FAMILY_LITTEN [SPECIES_LITTEN] = { .baseHP = 45, @@ -17289,7 +20716,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_LITTEN +#if P_FAMILY_POPPLIO [SPECIES_POPPLIO] = { .baseHP = 50, @@ -17355,7 +20784,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_POPPLIO +#if P_FAMILY_PIKIPEK [SPECIES_PIKIPEK] = { .baseHP = 35, @@ -17424,7 +20855,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_PIKIPEK +#if P_FAMILY_YUNGOOS [SPECIES_YUNGOOS] = { .baseHP = 48, @@ -17470,7 +20903,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_YUNGOOS +#if P_FAMILY_GRUBBIN [SPECIES_GRUBBIN] = { .baseHP = 47, @@ -17537,7 +20972,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_GRUBBIN +#if P_FAMILY_CRABRAWLER [SPECIES_CRABRAWLER] = { .baseHP = 47, @@ -17583,9 +21020,58 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_CRABRAWLER - [SPECIES_ORICORIO] = ORICORIO_SPECIES_INFO(TYPE_FIRE, BODY_COLOR_RED), +#if P_FAMILY_ORICORIO +#define ORICORIO_MISC_INFO \ + .baseHP = 75, \ + .baseAttack = 70, \ + .baseDefense = 70, \ + .baseSpeed = 93, \ + .baseSpAttack = 98, \ + .baseSpDefense = 70, \ + .catchRate = 45, \ + .expYield = 167, \ + .evYield_SpAttack = 2, \ + .itemRare = ITEM_HONEY, \ + .genderRatio = PERCENT_FEMALE(75), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .abilities = {ABILITY_DANCER, ABILITY_NONE}, \ + .noFlip = FALSE + [SPECIES_ORICORIO_BAILE] = + { + ORICORIO_MISC_INFO, + .types = { TYPE_FIRE, TYPE_FLYING }, + .bodyColor = BODY_COLOR_RED, + }, + + [SPECIES_ORICORIO_POM_POM] = + { + ORICORIO_MISC_INFO, + .types = { TYPE_ELECTRIC, TYPE_FLYING }, + .bodyColor = BODY_COLOR_YELLOW, + }, + + [SPECIES_ORICORIO_PAU] = + { + ORICORIO_MISC_INFO, + .types = { TYPE_PSYCHIC, TYPE_FLYING }, + .bodyColor = BODY_COLOR_PINK, + }, + + [SPECIES_ORICORIO_SENSU] = + { + ORICORIO_MISC_INFO, + .types = { TYPE_GHOST, TYPE_FLYING }, + .bodyColor = BODY_COLOR_PURPLE, + }, +#endif //P_FAMILY_ORICORIO + +#if P_FAMILY_CUTIEFLY [SPECIES_CUTIEFLY] = { .baseHP = 40, @@ -17631,53 +21117,131 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_CUTIEFLY - [SPECIES_ROCKRUFF] = ROCKRUFF_SPECIES_INFO(ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST), +#if P_FAMILY_ROCKRUFF +#define ROCKRUFF_MISC_INFO \ + .baseHP = 45, \ + .baseAttack = 65, \ + .baseDefense = 40, \ + .baseSpeed = 60, \ + .baseSpAttack = 30, \ + .baseSpDefense = 40, \ + .types = { TYPE_ROCK, TYPE_ROCK}, \ + .catchRate = 190, \ + .expYield = 56, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE - [SPECIES_LYCANROC] = + [SPECIES_ROCKRUFF] = { + ROCKRUFF_MISC_INFO, + .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST}, + }, + + [SPECIES_ROCKRUFF_OWN_TEMPO] = + { + ROCKRUFF_MISC_INFO, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_NONE}, + }, + +#define LYCANROC_MISC_INFO \ + .types = { TYPE_ROCK, TYPE_ROCK}, \ + .catchRate = 90, \ + .expYield = 170, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .noFlip = FALSE + + [SPECIES_LYCANROC_MIDDAY] = + { + LYCANROC_MISC_INFO, .baseHP = 75, .baseAttack = 115, .baseDefense = 65, .baseSpeed = 112, .baseSpAttack = 55, .baseSpDefense = 65, - .types = { TYPE_ROCK, TYPE_ROCK}, - .catchRate = 90, - .expYield = 170, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SAND_RUSH, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, }, - [SPECIES_WISHIWASHI] = + [SPECIES_LYCANROC_MIDNIGHT] = { + LYCANROC_MISC_INFO, + .baseHP = 85, + .baseAttack = 115, + .baseDefense = 75, + .baseSpeed = 82, + .baseSpAttack = 55, + .baseSpDefense = 75, + .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_NO_GUARD}, + .bodyColor = BODY_COLOR_RED, + }, + + [SPECIES_LYCANROC_DUSK] = + { + LYCANROC_MISC_INFO, + .baseHP = 75, + .baseAttack = 117, + .baseDefense = 65, + .baseSpeed = 110, + .baseSpAttack = 55, + .baseSpDefense = 65, + .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + }, +#endif //P_FAMILY_ROCKRUFF + +#if P_FAMILY_WISHIWASHI +#define WISHIWASHI_MISC_INFO \ + .types = { TYPE_WATER, TYPE_WATER}, \ + .catchRate = 60, \ + .expYield = 61, \ + .evYield_HP = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + + [SPECIES_WISHIWASHI_SOLO] = + { + WISHIWASHI_MISC_INFO, .baseHP = 45, .baseAttack = 20, .baseDefense = 20, .baseSpeed = 40, .baseSpAttack = 25, .baseSpDefense = 25, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 60, - .expYield = 61, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, }, + [SPECIES_WISHIWASHI_SCHOOL] = + { + WISHIWASHI_MISC_INFO, + .baseHP = 45, + .baseAttack = 140, + .baseDefense = 130, + .baseSpeed = 30, + .baseSpAttack = 140, + .baseSpDefense = 135, + }, +#endif //P_FAMILY_WISHIWASHI + +#if P_FAMILY_MAREANIE [SPECIES_MAREANIE] = { .baseHP = 50, @@ -17723,7 +21287,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_MAREANIE +#if P_FAMILY_MUDBRAY [SPECIES_MUDBRAY] = { .baseHP = 70, @@ -17769,7 +21335,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_MUDBRAY +#if P_FAMILY_DEWPIDER [SPECIES_DEWPIDER] = { .baseHP = 38, @@ -17815,7 +21383,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_DEWPIDER +#if P_FAMILY_FOMANTIS [SPECIES_FOMANTIS] = { .baseHP = 40, @@ -17861,7 +21431,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_FOMANTIS +#if P_FAMILY_MORELULL [SPECIES_MORELULL] = { .baseHP = 40, @@ -17909,7 +21481,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_MORELULL +#if P_FAMILY_SALANDIT [SPECIES_SALANDIT] = { .baseHP = 48, @@ -17955,7 +21529,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_SALANDIT +#if P_FAMILY_STUFFUL [SPECIES_STUFFUL] = { .baseHP = 70, @@ -17999,7 +21575,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_STUFFUL +#if P_FAMILY_BOUNSWEET [SPECIES_BOUNSWEET] = { .baseHP = 42, @@ -18068,7 +21646,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, }, +#endif //P_FAMILY_BOUNSWEET +#if P_FAMILY_COMFEY [SPECIES_COMFEY] = { .baseHP = 51, @@ -18091,7 +21671,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, +#endif //P_FAMILY_COMFEY +#if P_FAMILY_ORANGURU [SPECIES_ORANGURU] = { .baseHP = 90, @@ -18113,7 +21695,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_ORANGURU +#if P_FAMILY_PASSIMIAN [SPECIES_PASSIMIAN] = { .baseHP = 100, @@ -18135,7 +21719,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_PASSIMIAN +#if P_FAMILY_WIMPOD [SPECIES_WIMPOD] = { .baseHP = 25, @@ -18179,7 +21765,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_WIMPOD +#if P_FAMILY_SANDYGAST [SPECIES_SANDYGAST] = { .baseHP = 55, @@ -18225,7 +21813,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SANDYGAST +#if P_FAMILY_PYUKUMUKU [SPECIES_PYUKUMUKU] = { .baseHP = 55, @@ -18247,7 +21837,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, +#endif //P_FAMILY_PYUKUMUKU +#if P_FAMILY_TYPE_NULL [SPECIES_TYPE_NULL] = { .baseHP = 95, @@ -18271,10 +21863,105 @@ const struct SpeciesInfo gSpeciesInfo[] = .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_SILVALLY] = SILVALLY_SPECIES_INFO(TYPE_NORMAL), +#define SILVALLY_SPECIES_INFO(type) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .types = { type, type }, \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY, \ + } - [SPECIES_MINIOR] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_SILVALLY_NORMAL] = SILVALLY_SPECIES_INFO(TYPE_NORMAL), + [SPECIES_SILVALLY_FIGHTING] = SILVALLY_SPECIES_INFO(TYPE_FIGHTING), + [SPECIES_SILVALLY_FLYING] = SILVALLY_SPECIES_INFO(TYPE_FLYING), + [SPECIES_SILVALLY_POISON] = SILVALLY_SPECIES_INFO(TYPE_POISON), + [SPECIES_SILVALLY_GROUND] = SILVALLY_SPECIES_INFO(TYPE_GROUND), + [SPECIES_SILVALLY_ROCK] = SILVALLY_SPECIES_INFO(TYPE_ROCK), + [SPECIES_SILVALLY_BUG] = SILVALLY_SPECIES_INFO(TYPE_BUG), + [SPECIES_SILVALLY_GHOST] = SILVALLY_SPECIES_INFO(TYPE_GHOST), + [SPECIES_SILVALLY_STEEL] = SILVALLY_SPECIES_INFO(TYPE_STEEL), + [SPECIES_SILVALLY_FIRE] = SILVALLY_SPECIES_INFO(TYPE_FIRE), + [SPECIES_SILVALLY_WATER] = SILVALLY_SPECIES_INFO(TYPE_WATER), + [SPECIES_SILVALLY_GRASS] = SILVALLY_SPECIES_INFO(TYPE_GRASS), + [SPECIES_SILVALLY_ELECTRIC] = SILVALLY_SPECIES_INFO(TYPE_ELECTRIC), + [SPECIES_SILVALLY_PSYCHIC] = SILVALLY_SPECIES_INFO(TYPE_PSYCHIC), + [SPECIES_SILVALLY_ICE] = SILVALLY_SPECIES_INFO(TYPE_ICE), + [SPECIES_SILVALLY_DRAGON] = SILVALLY_SPECIES_INFO(TYPE_DRAGON), + [SPECIES_SILVALLY_DARK] = SILVALLY_SPECIES_INFO(TYPE_DARK), + [SPECIES_SILVALLY_FAIRY] = SILVALLY_SPECIES_INFO(TYPE_FAIRY), +#endif //P_FAMILY_TYPE_NULL +#if P_FAMILY_MINIOR +#define MINIOR_MISC_INFO(color) \ + .types = { TYPE_ROCK, TYPE_FLYING}, \ + .catchRate = 30, \ + .expYield = 154, \ + .evYield_Defense = 1, \ + .evYield_SpDefense = 1, \ + .itemRare = ITEM_STAR_PIECE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, \ + .bodyColor = color, \ + .noFlip = TRUE + +#define MINIOR_METEOR_SPECIES_INFO \ + { \ + .baseHP = 60, \ + .baseAttack = 60, \ + .baseDefense = 100, \ + .baseSpeed = 60, \ + .baseSpAttack = 60, \ + .baseSpDefense = 100, \ + MINIOR_MISC_INFO(BODY_COLOR_BROWN), \ + } + +#define MINIOR_CORE_SPECIES_INFO(color) \ + { \ + .baseHP = 60, \ + .baseAttack = 100, \ + .baseDefense = 60, \ + .baseSpeed = 120, \ + .baseSpAttack = 100, \ + .baseSpDefense = 60, \ + MINIOR_MISC_INFO(color), \ + } + + [SPECIES_MINIOR_METEOR_RED] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_PURPLE), +#endif //P_FAMILY_MINIOR + +#if P_FAMILY_KOMALA [SPECIES_KOMALA] = { .baseHP = 65, @@ -18296,7 +21983,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_KOMALA +#if P_FAMILY_TURTONATOR [SPECIES_TURTONATOR] = { .baseHP = 60, @@ -18319,7 +22008,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, +#endif //P_FAMILY_TURTONATOR +#if P_FAMILY_TOGEDEMARU [SPECIES_TOGEDEMARU] = { .baseHP = 65, @@ -18342,9 +22033,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_TOGEDEMARU - [SPECIES_MIMIKYU] = MIMIKYU_SPECIES_INFO, +#if P_FAMILY_MIMIKYU +#define MIMIKYU_MISC_INFO \ + .baseHP = 55, \ + .baseAttack = 90, \ + .baseDefense = 80, \ + .baseSpeed = 96, \ + .baseSpAttack = 50, \ + .baseSpDefense = 105, \ + .types = { TYPE_GHOST, TYPE_FAIRY}, \ + .catchRate = 45, \ + .expYield = 167, \ + .evYield_SpDefense = 2, \ + .itemRare = ITEM_CHESTO_BERRY, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_DISGUISE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + [SPECIES_MIMIKYU_DISGUISED] = + { + MIMIKYU_MISC_INFO, + }, + + [SPECIES_MIMIKYU_BUSTED] = + { + MIMIKYU_MISC_INFO, + }, +#endif //P_FAMILY_MIMIKYU + +#if P_FAMILY_BRUXISH [SPECIES_BRUXISH] = { .baseHP = 68, @@ -18367,7 +22091,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, +#endif //P_FAMILY_BRUXISH +#if P_FAMILY_DRAMPA [SPECIES_DRAMPA] = { .baseHP = 78, @@ -18390,7 +22116,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_DRAMPA +#if P_FAMILY_DHELMISE [SPECIES_DHELMISE] = { .baseHP = 70, @@ -18412,7 +22140,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, +#endif //P_FAMILY_DHELMISE +#if P_FAMILY_JANGMO_O [SPECIES_JANGMO_O] = { .baseHP = 45, @@ -18481,7 +22211,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_JANGMO_O +#if P_FAMILY_TAPU_KOKO [SPECIES_TAPU_KOKO] = { .baseHP = 70, @@ -18504,7 +22236,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_TAPU_KOKO +#if P_FAMILY_TAPU_LELE [SPECIES_TAPU_LELE] = { .baseHP = 70, @@ -18527,7 +22261,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_TAPU_LELE +#if P_FAMILY_TAPU_BULU [SPECIES_TAPU_BULU] = { .baseHP = 70, @@ -18550,7 +22286,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_TAPU_BULU +#if P_FAMILY_TAPU_FINI [SPECIES_TAPU_FINI] = { .baseHP = 70, @@ -18573,7 +22311,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_TAPU_FINI +#if P_FAMILY_COSMOG [SPECIES_COSMOG] = { .baseHP = 43, @@ -18666,7 +22406,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_COSMOG +#if P_FAMILY_NIHILEGO [SPECIES_NIHILEGO] = { .baseHP = 109, @@ -18689,7 +22431,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_NIHILEGO +#if P_FAMILY_BUZZWOLE [SPECIES_BUZZWOLE] = { .baseHP = 107, @@ -18713,7 +22457,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_BUZZWOLE +#if P_FAMILY_PHEROMOSA [SPECIES_PHEROMOSA] = { .baseHP = 71, @@ -18736,7 +22482,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_PHEROMOSA +#if P_FAMILY_XURKITREE [SPECIES_XURKITREE] = { .baseHP = 83, @@ -18759,7 +22507,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_XURKITREE +#if P_FAMILY_CELESTEELA [SPECIES_CELESTEELA] = { .baseHP = 97, @@ -18784,7 +22534,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_CELESTEELA +#if P_FAMILY_KARTANA [SPECIES_KARTANA] = { .baseHP = 59, @@ -18807,7 +22559,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_KARTANA +#if P_FAMILY_GUZZLORD [SPECIES_GUZZLORD] = { .baseHP = 223, @@ -18830,9 +22584,20 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_GUZZLORD + +#if P_FAMILY_NECROZMA +#define NECROZMA_MISC_INFO \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .noFlip = TRUE [SPECIES_NECROZMA] = { + NECROZMA_MISC_INFO, .baseHP = 97, .baseAttack = 107, .baseDefense = 101, @@ -18844,19 +22609,97 @@ const struct SpeciesInfo gSpeciesInfo[] = .expYield = 270, .evYield_Attack = 1, .evYield_SpAttack = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_MAGEARNA] = MAGEARNA_SPECIES_INFO(BODY_COLOR_GRAY), + [SPECIES_NECROZMA_DUSK_MANE] = + { + NECROZMA_MISC_INFO, + .baseHP = 97, + .baseAttack = 157, + .baseDefense = 127, + .baseSpeed = 77, + .baseSpAttack = 113, + .baseSpDefense = 109, + .types = { TYPE_PSYCHIC, TYPE_STEEL}, + .catchRate = 255, + .expYield = 306, + .evYield_Attack = 3, + .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, + }, + [SPECIES_NECROZMA_DAWN_WINGS] = + { + NECROZMA_MISC_INFO, + .baseHP = 97, + .baseAttack = 113, + .baseDefense = 109, + .baseSpeed = 77, + .baseSpAttack = 157, + .baseSpDefense = 127, + .types = { TYPE_PSYCHIC, TYPE_GHOST}, + .catchRate = 255, + .expYield = 306, + .evYield_SpAttack = 3, + .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, + }, + + [SPECIES_NECROZMA_ULTRA] = + { + NECROZMA_MISC_INFO, + .baseHP = 97, + .baseAttack = 167, + .baseDefense = 97, + .baseSpeed = 129, + .baseSpAttack = 167, + .baseSpDefense = 97, + .types = { TYPE_PSYCHIC, TYPE_DRAGON}, + .catchRate = 255, + .expYield = 339, + .evYield_Attack = 1, + .evYield_Speed = 1, + .evYield_SpAttack = 1, + .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_ULTRA_BURST, + }, +#endif //P_FAMILY_NECROZMA + +#if P_FAMILY_MAGEARNA +#define MAGEARNA_SPECIES_INFO(color) \ + { \ + .baseHP = 80, \ + .baseAttack = 95, \ + .baseDefense = 115, \ + .baseSpeed = 65, \ + .baseSpAttack = 130, \ + .baseSpDefense = 115, \ + .types = { TYPE_STEEL, TYPE_FAIRY}, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE}, \ + .bodyColor = color, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL, \ + } + + [SPECIES_MAGEARNA] = MAGEARNA_SPECIES_INFO(BODY_COLOR_GRAY), + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_SPECIES_INFO(BODY_COLOR_RED), +#endif //P_FAMILY_MAGEARNA + +#if P_FAMILY_MARSHADOW [SPECIES_MARSHADOW] = { .baseHP = 90, @@ -18880,7 +22723,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_MARSHADOW +#if P_FAMILY_POIPOLE [SPECIES_POIPOLE] = { .baseHP = 67, @@ -18926,7 +22771,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_POIPOLE +#if P_FAMILY_STAKATAKA [SPECIES_STAKATAKA] = { .baseHP = 61, @@ -18949,7 +22796,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_STAKATAKA +#if P_FAMILY_BLACEPHALON [SPECIES_BLACEPHALON] = { .baseHP = 53, @@ -18972,7 +22821,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = TRUE, .flags = SPECIES_FLAG_ULTRA_BEAST, }, +#endif //P_FAMILY_BLACEPHALON +#if P_FAMILY_ZERAORA [SPECIES_ZERAORA] = { .baseHP = 88, @@ -18995,7 +22846,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_MYTHICAL, }, +#endif //P_FAMILY_ZERAORA +#if P_FAMILY_MELTAN [SPECIES_MELTAN] = { .baseHP = 46, @@ -19019,31 +22872,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .flags = SPECIES_FLAG_MYTHICAL, }, +#define MELMETAL_MISC_INFO \ + .baseHP = 135, \ + .baseAttack = 143, \ + .baseDefense = 143, \ + .baseSpeed = 34, \ + .baseSpAttack = 80, \ + .baseSpDefense = 65, \ + .types = {TYPE_STEEL, TYPE_STEEL}, \ + .catchRate = 3, \ + .expYield = 270, \ + .evYield_Attack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_IRON_FIST, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL + [SPECIES_MELMETAL] = { - .baseHP = 135, - .baseAttack = 143, - .baseDefense = 143, - .baseSpeed = 34, - .baseSpAttack = 80, - .baseSpDefense = 65, - .types = { TYPE_STEEL, TYPE_STEEL}, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_IRON_FIST, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, + MELMETAL_MISC_INFO, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_MELMETAL_GIGANTAMAX] = + { + MELMETAL_MISC_INFO, + .gigantamax = TRUE, }, #endif +#endif //P_FAMILY_MELTAN -#if P_GEN_8_POKEMON == TRUE +#if P_FAMILY_GROOKEY [SPECIES_GROOKEY] = { .baseHP = 50, @@ -19088,28 +22952,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define RILLABOOM_MISC_INFO \ + .baseHP = 100, \ + .baseAttack = 125, \ + .baseDefense = 90, \ + .baseSpeed = 85, \ + .baseSpAttack = 60, \ + .baseSpDefense = 70, \ + .types = {TYPE_GRASS, TYPE_GRASS}, \ + .catchRate = 45, \ + .expYield = 265, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_GRASS}, \ + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE},\ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_RILLABOOM] = { - .baseHP = 100, - .baseAttack = 125, - .baseDefense = 90, - .baseSpeed = 85, - .baseSpAttack = 60, - .baseSpDefense = 70, - .types = { TYPE_GRASS, TYPE_GRASS}, - .catchRate = 45, - .expYield = 265, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + RILLABOOM_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_RILLABOOM_GIGANTAMAX] = + { + RILLABOOM_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_GROOKEY + +#if P_FAMILY_SCORBUNNY [SPECIES_SCORBUNNY] = { .baseHP = 50, @@ -19154,28 +23031,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define CINDERACE_MISC_INFO \ + .baseHP = 80, \ + .baseAttack = 116, \ + .baseDefense = 75, \ + .baseSpeed = 119, \ + .baseSpAttack = 65, \ + .baseSpDefense = 75, \ + .types = {TYPE_FIRE, TYPE_FIRE}, \ + .catchRate = 45, \ + .expYield = 265, \ + .evYield_Speed = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, \ + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE + [SPECIES_CINDERACE] = { - .baseHP = 80, - .baseAttack = 116, - .baseDefense = 75, - .baseSpeed = 119, - .baseSpAttack = 65, - .baseSpDefense = 75, - .types = { TYPE_FIRE, TYPE_FIRE}, - .catchRate = 45, - .expYield = 265, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, + CINDERACE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_CINDERACE_GIGANTAMAX] = + { + CINDERACE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SCORBUNNY + +#if P_FAMILY_SOBBLE [SPECIES_SOBBLE] = { .baseHP = 50, @@ -19221,28 +23111,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define INTELEON_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 85, \ + .baseDefense = 65, \ + .baseSpeed = 120, \ + .baseSpAttack = 125, \ + .baseSpDefense = 65, \ + .types = {TYPE_WATER, TYPE_WATER}, \ + .catchRate = 45, \ + .expYield = 265, \ + .evYield_Speed = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + [SPECIES_INTELEON] = { - .baseHP = 70, - .baseAttack = 85, - .baseDefense = 65, - .baseSpeed = 120, - .baseSpAttack = 125, - .baseSpDefense = 65, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 45, - .expYield = 265, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + INTELEON_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_INTELEON_GIGANTAMAX] = + { + INTELEON_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SOBBLE + +#if P_FAMILY_SKWOVET [SPECIES_SKWOVET] = { .baseHP = 70, @@ -19288,7 +23191,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_SKWOVET +#if P_FAMILY_ROOKIDEE [SPECIES_ROOKIDEE] = { .baseHP = 38, @@ -19333,28 +23238,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define CORVIKNIGHT_MISC_INFO \ + .baseHP = 98, \ + .baseAttack = 87, \ + .baseDefense = 105, \ + .baseSpeed = 67, \ + .baseSpAttack = 53, \ + .baseSpDefense = 85, \ + .types = {TYPE_FLYING, TYPE_STEEL}, \ + .catchRate = 45, \ + .expYield = 248, \ + .evYield_Defense = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .abilities = {ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + [SPECIES_CORVIKNIGHT] = { - .baseHP = 98, - .baseAttack = 87, - .baseDefense = 105, - .baseSpeed = 67, - .baseSpAttack = 53, - .baseSpDefense = 85, - .types = { TYPE_FLYING, TYPE_STEEL}, - .catchRate = 45, - .expYield = 248, - .evYield_Defense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, + CORVIKNIGHT_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = + { + CORVIKNIGHT_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_ROOKIDEE + +#if P_FAMILY_BLIPBUG [SPECIES_BLIPBUG] = { .baseHP = 25, @@ -19400,29 +23318,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define ORBEETLE_MISC_INFO \ + .baseHP = 60, \ + .baseAttack = 45, \ + .baseDefense = 110, \ + .baseSpeed = 90, \ + .baseSpAttack = 80, \ + .baseSpDefense = 120, \ + .types = {TYPE_BUG, TYPE_PSYCHIC}, \ + .catchRate = 45, \ + .expYield = 253, \ + .evYield_SpDefense = 3, \ + .itemRare = ITEM_PSYCHIC_SEED, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_SWARM, ABILITY_FRISK, ABILITY_TELEPATHY}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_ORBEETLE] = { - .baseHP = 60, - .baseAttack = 45, - .baseDefense = 110, - .baseSpeed = 90, - .baseSpAttack = 80, - .baseSpDefense = 120, - .types = { TYPE_BUG, TYPE_PSYCHIC}, - .catchRate = 45, - .expYield = 253, - .evYield_SpDefense = 3, - .itemRare = ITEM_PSYCHIC_SEED, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_SWARM, ABILITY_FRISK, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, + ORBEETLE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_ORBEETLE_GIGANTAMAX] = + { + ORBEETLE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_BLIPBUG + +#if P_FAMILY_NICKIT [SPECIES_NICKIT] = { .baseHP = 40, @@ -19466,7 +23397,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_NICKIT +#if P_FAMILY_GOSSIFLEUR [SPECIES_GOSSIFLEUR] = { .baseHP = 40, @@ -19510,7 +23443,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_GOSSIFLEUR +#if P_FAMILY_WOOLOO [SPECIES_WOOLOO] = { .baseHP = 42, @@ -19554,7 +23489,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_WOOLOO +#if P_FAMILY_CHEWTLE [SPECIES_CHEWTLE] = { .baseHP = 50, @@ -19577,28 +23514,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define DREDNAW_MISC_INFO \ + .baseHP = 90, \ + .baseAttack = 115, \ + .baseDefense = 90, \ + .baseSpeed = 74, \ + .baseSpAttack = 48, \ + .baseSpDefense = 68, \ + .types = {TYPE_WATER, TYPE_ROCK}, \ + .catchRate = 75, \ + .expYield = 170, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, \ + .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_DREDNAW] = { - .baseHP = 90, - .baseAttack = 115, - .baseDefense = 90, - .baseSpeed = 74, - .baseSpAttack = 48, - .baseSpDefense = 68, - .types = { TYPE_WATER, TYPE_ROCK}, - .catchRate = 75, - .expYield = 170, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + DREDNAW_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_DREDNAW_GIGANTAMAX] = + { + DREDNAW_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_CHEWTLE + +#if P_FAMILY_YAMPER [SPECIES_YAMPER] = { .baseHP = 59, @@ -19642,7 +23592,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_YAMPER +#if P_FAMILY_ROLYCOLY [SPECIES_ROLYCOLY] = { .baseHP = 30, @@ -19687,28 +23639,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define COALOSSAL_MISC_INFO \ + .baseHP = 110, \ + .baseAttack = 80, \ + .baseDefense = 120, \ + .baseSpeed = 30, \ + .baseSpAttack = 80, \ + .baseSpDefense = 90, \ + .types = {TYPE_ROCK, TYPE_FIRE}, \ + .catchRate = 45, \ + .expYield = 255, \ + .evYield_Defense = 3, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE},\ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE + [SPECIES_COALOSSAL] = { - .baseHP = 110, - .baseAttack = 80, - .baseDefense = 120, - .baseSpeed = 30, - .baseSpAttack = 80, - .baseSpDefense = 90, - .types = { TYPE_ROCK, TYPE_FIRE}, - .catchRate = 45, - .expYield = 255, - .evYield_Defense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, + COALOSSAL_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_COALOSSAL_GIGANTAMAX] = + { + COALOSSAL_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_ROLYCOLY + +#if P_FAMILY_APPLIN [SPECIES_APPLIN] = { .baseHP = 40, @@ -19731,50 +23696,96 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define FLAPPLE_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 110, \ + .baseDefense = 80, \ + .baseSpeed = 70, \ + .baseSpAttack = 95, \ + .baseSpDefense = 60, \ + .types = {TYPE_GRASS, TYPE_DRAGON}, \ + .catchRate = 45, \ + .expYield = 170, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_ERRATIC, \ + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, \ + .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_HUSTLE}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_FLAPPLE] = { - .baseHP = 70, - .baseAttack = 110, - .baseDefense = 80, - .baseSpeed = 70, - .baseSpAttack = 95, - .baseSpDefense = 60, - .types = { TYPE_GRASS, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 170, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_ERRATIC, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_HUSTLE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + FLAPPLE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_FLAPPLE_GIGANTAMAX] = + { + FLAPPLE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif + +#define APPLETUN_MISC_INFO \ + .baseHP = 110, \ + .baseAttack = 85, \ + .baseDefense = 80, \ + .baseSpeed = 30, \ + .baseSpAttack = 100, \ + .baseSpDefense = 80, \ + .types = {TYPE_GRASS, TYPE_DRAGON}, \ + .catchRate = 45, \ + .expYield = 170, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_ERRATIC, \ + .eggGroups = {EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, \ + .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_APPLETUN] = { - .baseHP = 110, - .baseAttack = 85, - .baseDefense = 80, - .baseSpeed = 30, - .baseSpAttack = 100, + APPLETUN_MISC_INFO, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_APPLETUN_GIGANTAMAX] = + { + APPLETUN_MISC_INFO, + .gigantamax = TRUE, + }, +#endif + + [SPECIES_DIPPLIN] = + { + .baseHP = 80, + .baseAttack = 80, + .baseDefense = 110, + .baseSpeed = 40, + .baseSpAttack = 95, .baseSpDefense = 80, - .types = { TYPE_GRASS, TYPE_DRAGON}, + .types = { TYPE_GRASS, TYPE_DRAGON }, .catchRate = 45, .expYield = 170, - .evYield_HP = 2, + .evYield_Defense = 2, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, + .abilities = {ABILITY_SUPERSWEET_SYRUP, ABILITY_GLUTTONY, ABILITY_STICKY_HOLD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_APPLIN +#if P_FAMILY_SILICOBRA [SPECIES_SILICOBRA] = { .baseHP = 52, @@ -19797,30 +23808,78 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define SANDACONDA_MISC_INFO \ + .baseHP = 72, \ + .baseAttack = 107, \ + .baseDefense = 125, \ + .baseSpeed = 71, \ + .baseSpAttack = 65, \ + .baseSpDefense = 70, \ + .types = {TYPE_GROUND, TYPE_GROUND}, \ + .catchRate = 120, \ + .expYield = 179, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, \ + .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_SANDACONDA] = { - .baseHP = 72, - .baseAttack = 107, - .baseDefense = 125, - .baseSpeed = 71, - .baseSpAttack = 65, - .baseSpDefense = 70, - .types = { TYPE_GROUND, TYPE_GROUND}, - .catchRate = 120, - .expYield = 179, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + SANDACONDA_MISC_INFO, }, - [SPECIES_CRAMORANT] = CRAMORANT_SPECIES_INFO, +#if P_GIGANTAMAX_FORMS + [SPECIES_SANDACONDA_GIGANTAMAX] = + { + SANDACONDA_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SILICOBRA +#if P_FAMILY_CRAMORANT +#define CRAMORANT_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 85, \ + .baseDefense = 55, \ + .baseSpeed = 85, \ + .baseSpAttack = 85, \ + .baseSpDefense = 95, \ + .types = { TYPE_FLYING, TYPE_WATER}, \ + .catchRate = 45, \ + .expYield = 166, \ + .evYield_SpDefense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING},\ + .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + + [SPECIES_CRAMORANT] = + { + CRAMORANT_MISC_INFO, + }, + + [SPECIES_CRAMORANT_GULPING] = + { + CRAMORANT_MISC_INFO, + }, + + [SPECIES_CRAMORANT_GORGING] = + { + CRAMORANT_MISC_INFO, + }, +#endif //P_FAMILY_CRAMORANT + +#if P_FAMILY_ARROKUDA [SPECIES_ARROKUDA] = { .baseHP = 41, @@ -19864,7 +23923,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, }, +#endif //P_FAMILY_ARROKUDA +#if P_FAMILY_TOXEL [SPECIES_TOXEL] = { .baseHP = 40, @@ -19887,8 +23948,57 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_TOXTRICITY] = TOXTRICITY_SPECIES_INFO(ABILITY_PLUS), +#define TOXTRICITY_MISC_INFO \ + .baseHP = 75, \ + .baseAttack = 98, \ + .baseDefense = 70, \ + .baseSpeed = 75, \ + .baseSpAttack = 114, \ + .baseSpDefense = 70, \ + .types = { TYPE_ELECTRIC, TYPE_POISON}, \ + .catchRate = 45, \ + .expYield = 176, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + [SPECIES_TOXTRICITY_AMPED] = + { + TOXTRICITY_MISC_INFO, + .abilities = {ABILITY_PUNK_ROCK, ABILITY_PLUS, ABILITY_TECHNICIAN}, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = + { + TOXTRICITY_MISC_INFO, + .abilities = {ABILITY_PUNK_ROCK, ABILITY_PLUS, ABILITY_TECHNICIAN}, + .gigantamax = TRUE, + }, +#endif + + [SPECIES_TOXTRICITY_LOW_KEY] = + { + TOXTRICITY_MISC_INFO, + .abilities = {ABILITY_PUNK_ROCK, ABILITY_MINUS, ABILITY_TECHNICIAN}, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = + { + TOXTRICITY_MISC_INFO, + .abilities = {ABILITY_PUNK_ROCK, ABILITY_MINUS, ABILITY_TECHNICIAN}, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_TOXEL + +#if P_FAMILY_SIZZLIPEDE [SPECIES_SIZZLIPEDE] = { .baseHP = 50, @@ -19911,28 +24021,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define CENTISKORCH_MISC_INFO \ + .baseHP = 100, \ + .baseAttack = 115, \ + .baseDefense = 65, \ + .baseSpeed = 65, \ + .baseSpAttack = 90, \ + .baseSpDefense = 90, \ + .types = {TYPE_FIRE, TYPE_BUG}, \ + .catchRate = 75, \ + .expYield = 184, \ + .evYield_Attack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_BUG, EGG_GROUP_BUG}, \ + .abilities = {ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE + [SPECIES_CENTISKORCH] = { - .baseHP = 100, - .baseAttack = 115, - .baseDefense = 65, - .baseSpeed = 65, - .baseSpAttack = 90, - .baseSpDefense = 90, - .types = { TYPE_FIRE, TYPE_BUG}, - .catchRate = 75, - .expYield = 184, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, + CENTISKORCH_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_CENTISKORCH_GIGANTAMAX] = + { + CENTISKORCH_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_SIZZLIPEDE + +#if P_FAMILY_CLOBBOPUS [SPECIES_CLOBBOPUS] = { .baseHP = 50, @@ -19976,11 +24099,71 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_CLOBBOPUS - [SPECIES_SINISTEA] = SINISTEA_SPECIES_INFO, +#if P_FAMILY_SINISTEA +#define SINISTEA_MISC_INFO \ + .baseHP = 40, \ + .baseAttack = 45, \ + .baseDefense = 45, \ + .baseSpeed = 50, \ + .baseSpAttack = 74, \ + .baseSpDefense = 54, \ + .types = { TYPE_GHOST, TYPE_GHOST}, \ + .catchRate = 120, \ + .expYield = 62, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE - [SPECIES_POLTEAGEIST] = POLTEAGEIST_SPECIES_INFO, + [SPECIES_SINISTEA_PHONY] = + { + SINISTEA_MISC_INFO, + }, + [SPECIES_SINISTEA_ANTIQUE] = + { + SINISTEA_MISC_INFO, + }, + +#define POLTEAGEIST_MISC_INFO \ + .baseHP = 60, \ + .baseAttack = 65, \ + .baseDefense = 65, \ + .baseSpeed = 70, \ + .baseSpAttack = 134, \ + .baseSpDefense = 114, \ + .types = { TYPE_GHOST, TYPE_GHOST}, \ + .catchRate = 60, \ + .expYield = 178, \ + .evYield_SpAttack = 2, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + + [SPECIES_POLTEAGEIST_PHONY] = + { + POLTEAGEIST_MISC_INFO, + }, + + [SPECIES_POLTEAGEIST_ANTIQUE] = + { + POLTEAGEIST_MISC_INFO, + }, +#endif //P_FAMILY_SINISTEA + +#if P_FAMILY_HATENNA [SPECIES_HATENNA] = { .baseHP = 42, @@ -20025,28 +24208,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define HATTERENE_MISC_INFO \ + .baseHP = 57, \ + .baseAttack = 90, \ + .baseDefense = 95, \ + .baseSpeed = 29, \ + .baseSpAttack = 136, \ + .baseSpDefense = 103, \ + .types = {TYPE_PSYCHIC, TYPE_FAIRY}, \ + .catchRate = 45, \ + .expYield = 255, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, \ + .bodyColor = BODY_COLOR_PINK, \ + .noFlip = FALSE + [SPECIES_HATTERENE] = { - .baseHP = 57, - .baseAttack = 90, - .baseDefense = 95, - .baseSpeed = 29, - .baseSpAttack = 136, - .baseSpDefense = 103, - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 255, - .evYield_SpAttack = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, + HATTERENE_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_HATTERENE_GIGANTAMAX] = + { + HATTERENE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_HATENNA + +#if P_FAMILY_IMPIDIMP [SPECIES_IMPIDIMP] = { .baseHP = 45, @@ -20091,161 +24287,41 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define GRIMMSNARL_MISC_INFO \ + .baseHP = 95, \ + .baseAttack = 120, \ + .baseDefense = 65, \ + .baseSpeed = 60, \ + .baseSpAttack = 95, \ + .baseSpDefense = 75, \ + .types = {TYPE_DARK, TYPE_FAIRY}, \ + .catchRate = 45, \ + .expYield = 255, \ + .evYield_Attack = 3, \ + .genderRatio = MON_MALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FAIRY, EGG_GROUP_HUMAN_LIKE}, \ + .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET},\ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + [SPECIES_GRIMMSNARL] = { - .baseHP = 95, - .baseAttack = 120, - .baseDefense = 65, - .baseSpeed = 60, - .baseSpAttack = 95, - .baseSpDefense = 75, - .types = { TYPE_DARK, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 255, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, + GRIMMSNARL_MISC_INFO, }, - [SPECIES_OBSTAGOON] = +#if P_GIGANTAMAX_FORMS + [SPECIES_GRIMMSNARL_GIGANTAMAX] = { - .baseHP = 93, - .baseAttack = 90, - .baseDefense = 101, - .baseSpeed = 95, - .baseSpAttack = 60, - .baseSpDefense = 81, - .types = { TYPE_DARK, TYPE_NORMAL}, - .catchRate = 45, - .expYield = 260, - .evYield_Defense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RECKLESS, ABILITY_GUTS, ABILITY_DEFIANT}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_PERRSERKER] = - { - .baseHP = 70, - .baseAttack = 110, - .baseDefense = 100, - .baseSpeed = 50, - .baseSpAttack = 50, - .baseSpDefense = 60, - .types = { TYPE_STEEL, TYPE_STEEL}, - .catchRate = 90, - .expYield = 154, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_TOUGH_CLAWS, ABILITY_STEELY_SPIRIT}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_CURSOLA] = - { - .baseHP = 60, - .baseAttack = 95, - .baseDefense = 50, - .baseSpeed = 30, - .baseSpAttack = 145, - .baseSpDefense = 130, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 30, - .expYield = 179, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_SIRFETCHD] = - { - .baseHP = 62, - .baseAttack = 135, - .baseDefense = 95, - .baseSpeed = 65, - .baseSpAttack = 68, - .baseSpDefense = 82, - .types = { TYPE_FIGHTING, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 177, - .evYield_Attack = 2, - .itemRare = ITEM_LEEK, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_MR_RIME] = - { - .baseHP = 80, - .baseAttack = 85, - .baseDefense = 75, - .baseSpeed = 70, - .baseSpAttack = 110, - .baseSpDefense = 100, - .types = { TYPE_ICE, TYPE_PSYCHIC}, - .catchRate = 45, - .expYield = 182, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_RUNERIGUS] = - { - .baseHP = 58, - .baseAttack = 95, - .baseDefense = 145, - .baseSpeed = 30, - .baseSpAttack = 50, - .baseSpDefense = 105, - .types = { TYPE_GROUND, TYPE_GHOST}, - .catchRate = 90, - .expYield = 169, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, + GRIMMSNARL_MISC_INFO, + .gigantamax = TRUE, }, +#endif +#endif //P_FAMILY_IMPIDIMP +#if P_FAMILY_MILCERY [SPECIES_MILCERY] = { .baseHP = 45, @@ -20268,8 +24344,103 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, - [SPECIES_ALCREMIE] = ALCREMIE_SPECIES_INFO(BODY_COLOR_WHITE), +#define ALCREMIE_MISC_INFO(color) \ + .baseHP = 65, \ + .baseAttack = 60, \ + .baseDefense = 75, \ + .baseSpeed = 64, \ + .baseSpAttack = 110, \ + .baseSpDefense = 121, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ + .catchRate = 100, \ + .expYield = 173, \ + .evYield_SpDefense = 2, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL},\ + .bodyColor = color, \ + .noFlip = FALSE +// For later +#define ALCREMIE_REGULAR_MISC_INFO(color, sweet, cream) \ + ALCREMIE_MISC_INFO(color) + + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Strawberry, VanillaCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Strawberry, RubyCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Strawberry, MatchaCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Strawberry, MintCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Strawberry, LemonCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Strawberry, SaltedCream), }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Strawberry, RubySwirl), }, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Strawberry, CaramelSwirl), }, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Strawberry, RainbowSwirl), }, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Berry, VanillaCream) }, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Berry, RubyCream) }, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Berry, MatchaCream), }, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Berry, MintCream), }, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Berry, LemonCream), }, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Berry, SaltedCream), }, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Berry, RubySwirl), }, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Berry, CaramelSwirl), }, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Berry, RainbowSwirl), }, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Love, VanillaCream) }, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Love, RubyCream) }, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Love, MatchaCream), }, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Love, MintCream), }, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Love, LemonCream), }, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Love, SaltedCream), }, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Love, RubySwirl), }, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Love, CaramelSwirl), }, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Love, RainbowSwirl), }, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Star, VanillaCream) }, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Star, RubyCream) }, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Star, MatchaCream), }, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Star, MintCream), }, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Star, LemonCream), }, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Star, SaltedCream), }, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Star, RubySwirl), }, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Star, CaramelSwirl), }, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Star, RainbowSwirl), }, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Clover, VanillaCream) }, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Clover, RubyCream) }, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Clover, MatchaCream), }, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Clover, MintCream), }, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Clover, LemonCream), }, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Clover, SaltedCream), }, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Clover, RubySwirl), }, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Clover, CaramelSwirl), }, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Clover, RainbowSwirl), }, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Flower, VanillaCream) }, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Flower, RubyCream) }, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Flower, MatchaCream), }, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Flower, MintCream), }, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Flower, LemonCream), }, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Flower, SaltedCream), }, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Flower, RubySwirl), }, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Flower, CaramelSwirl), }, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Flower, RainbowSwirl), }, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Ribbon, VanillaCream) }, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_PINK, Ribbon, RubyCream) }, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_GREEN, Ribbon, MatchaCream), }, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BLUE, Ribbon, MintCream), }, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Ribbon, LemonCream), }, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_WHITE, Ribbon, SaltedCream), }, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Ribbon, RubySwirl), }, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_BROWN, Ribbon, CaramelSwirl), }, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = { ALCREMIE_REGULAR_MISC_INFO(BODY_COLOR_YELLOW, Ribbon, RainbowSwirl), }, +#if P_GIGANTAMAX_FORMS + [SPECIES_ALCREMIE_GIGANTAMAX] = + { + ALCREMIE_MISC_INFO(BODY_COLOR_PINK), + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_MILCERY + +#if P_FAMILY_FALINKS [SPECIES_FALINKS] = { .baseHP = 65, @@ -20292,7 +24463,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, +#endif //P_FAMILY_FALINKS +#if P_FAMILY_PINCURCHIN [SPECIES_PINCURCHIN] = { .baseHP = 48, @@ -20314,7 +24487,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, +#endif //P_FAMILY_PINCURCHIN +#if P_FAMILY_SNOM [SPECIES_SNOM] = { .baseHP = 30, @@ -20359,7 +24534,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, +#endif //P_FAMILY_SNOM +#if P_FAMILY_STONJOURNER [SPECIES_STONJOURNER] = { .baseHP = 100, @@ -20381,8 +24558,24 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, +#endif //P_FAMILY_STONJOURNER - [SPECIES_EISCUE] = +#if P_FAMILY_EISCUE +#define EISCUE_MISC_INFO(form) \ + .types = { TYPE_ICE, TYPE_ICE}, \ + .catchRate = 60, \ + .expYield = 165, \ + .evYield_Defense = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, \ + .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + + [SPECIES_EISCUE_ICE_FACE] = { .baseHP = 75, .baseAttack = 80, @@ -20390,44 +24583,95 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 90, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 60, - .expYield = 165, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, + EISCUE_MISC_INFO(IceFace), }, - [SPECIES_INDEEDEE] = + [SPECIES_EISCUE_NOICE_FACE] = { + .baseHP = 75, + .baseAttack = 80, + .baseDefense = 70, + .baseSpeed = 130, + .baseSpAttack = 65, + .baseSpDefense = 50, + EISCUE_MISC_INFO(NoiceFace), + }, +#endif //P_FAMILY_EISCUE + +#if P_FAMILY_INDEEDEE +#define INDEEDEE_MISC_INFO \ + .types = { TYPE_PSYCHIC, TYPE_NORMAL}, \ + .catchRate = 30, \ + .expYield = 166, \ + .eggCycles = 40, \ + .friendship = 140, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE + + [SPECIES_INDEEDEE_MALE] = + { + INDEEDEE_MISC_INFO, .baseHP = 60, .baseAttack = 65, .baseDefense = 55, .baseSpeed = 95, .baseSpAttack = 105, .baseSpDefense = 95, - .types = { TYPE_PSYCHIC, TYPE_NORMAL}, - .catchRate = 30, - .expYield = 166, .evYield_SpAttack = 2, .genderRatio = MON_MALE, - .eggCycles = 40, - .friendship = 140, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, }, - [SPECIES_MORPEKO] = MORPEKO_SPECIES_INFO, + [SPECIES_INDEEDEE_FEMALE] = + { + INDEEDEE_MISC_INFO, + .baseHP = 70, + .baseAttack = 55, + .baseDefense = 65, + .baseSpeed = 85, + .baseSpAttack = 95, + .baseSpDefense = 105, + .evYield_SpDefense = 2, + .genderRatio = MON_FEMALE, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, + }, +#endif //P_FAMILY_INDEEDEE +#if P_FAMILY_MORPEKO +#define MORPEKO_MISC_INFO \ + .baseHP = 58, \ + .baseAttack = 95, \ + .baseDefense = 58, \ + .baseSpeed = 97, \ + .baseSpAttack = 70, \ + .baseSpDefense = 58, \ + .types = { TYPE_ELECTRIC, TYPE_DARK}, \ + .catchRate = 180, \ + .expYield = 153, \ + .evYield_Speed = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE},\ + .bodyColor = BODY_COLOR_YELLOW, \ + .noFlip = FALSE + + [SPECIES_MORPEKO_FULL_BELLY] = + { + MORPEKO_MISC_INFO, + }, + + [SPECIES_MORPEKO_HANGRY] = + { + MORPEKO_MISC_INFO, + }, +#endif //P_FAMILY_MORPEKO + +#if P_FAMILY_CUFANT [SPECIES_CUFANT] = { .baseHP = 72, @@ -20451,29 +24695,42 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, }, +#define COPPERAJAH_MISC_INFO \ + .baseHP = 122, \ + .baseAttack = 130, \ + .baseDefense = 69, \ + .baseSpeed = 30, \ + .baseSpAttack = 80, \ + .baseSpDefense = 69, \ + .types = {TYPE_STEEL, TYPE_STEEL}, \ + .catchRate = 90, \ + .expYield = 175, \ + .evYield_Attack = 2, \ + .itemRare = ITEM_LAGGING_TAIL, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 25, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE + [SPECIES_COPPERAJAH] = { - .baseHP = 122, - .baseAttack = 130, - .baseDefense = 69, - .baseSpeed = 30, - .baseSpAttack = 80, - .baseSpDefense = 69, - .types = { TYPE_STEEL, TYPE_STEEL}, - .catchRate = 90, - .expYield = 175, - .evYield_Attack = 2, - .itemRare = ITEM_LAGGING_TAIL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, + COPPERAJAH_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_COPPERAJAH_GIGANTAMAX] = + { + COPPERAJAH_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_CUFANT + +#if P_FAMILY_DRACOZOLT [SPECIES_DRACOZOLT] = { .baseHP = 90, @@ -20495,7 +24752,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_DRACOZOLT +#if P_FAMILY_ARCTOZOLT [SPECIES_ARCTOZOLT] = { .baseHP = 90, @@ -20517,7 +24776,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_ARCTOZOLT +#if P_FAMILY_DRACOVISH [SPECIES_DRACOVISH] = { .baseHP = 90, @@ -20539,7 +24800,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_DRACOVISH +#if P_FAMILY_ARCTOVISH [SPECIES_ARCTOVISH] = { .baseHP = 90, @@ -20561,29 +24824,44 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, +#endif //P_FAMILY_ARCTOVISH + +#if P_FAMILY_DURALUDON +#define DURALUDON_MISC_INFO \ + .baseHP = 70, \ + .baseAttack = 95, \ + .baseDefense = 115, \ + .baseSpeed = 85, \ + .baseSpAttack = 120, \ + .baseSpDefense = 50, \ + .types = {TYPE_STEEL, TYPE_DRAGON}, \ + .catchRate = 45, \ + .expYield = 187, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 30, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = {EGG_GROUP_MINERAL, EGG_GROUP_DRAGON}, \ + .abilities = {ABILITY_LIGHT_METAL, ABILITY_HEAVY_METAL, ABILITY_STALWART}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE [SPECIES_DURALUDON] = { - .baseHP = 70, - .baseAttack = 95, - .baseDefense = 115, - .baseSpeed = 85, - .baseSpAttack = 120, - .baseSpDefense = 50, - .types = { TYPE_STEEL, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 187, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 30, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_LIGHT_METAL, ABILITY_HEAVY_METAL, ABILITY_STALWART}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, + DURALUDON_MISC_INFO, }, +#if P_GIGANTAMAX_FORMS + [SPECIES_DURALUDON_GIGANTAMAX] = + { + DURALUDON_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_DURALUDON + +#if P_FAMILY_DREEPY [SPECIES_DREEPY] = { .baseHP = 28, @@ -20649,76 +24927,131 @@ const struct SpeciesInfo gSpeciesInfo[] = .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, +#endif //P_FAMILY_DREEPY - [SPECIES_ZACIAN] = +#if P_FAMILY_ZACIAN +#define ZACIAN_MISC_INFO \ + .catchRate = 10, \ + .evYield_Speed = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = { + ZACIAN_MISC_INFO, .baseHP = 92, - .baseAttack = 130, + .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, .baseDefense = 115, .baseSpeed = 138, .baseSpAttack = 80, .baseSpDefense = 115, .types = { TYPE_FAIRY, TYPE_FAIRY}, - .catchRate = 10, .expYield = 335, - .evYield_Speed = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_ZAMAZENTA] = + [SPECIES_ZACIAN_CROWNED_SWORD] = { + ZACIAN_MISC_INFO, .baseHP = 92, - .baseAttack = 130, + .baseAttack = P_UPDATED_STATS >= GEN_9 ? 150 : 170, + .baseDefense = 115, + .baseSpeed = 148, + .baseSpAttack = 80, + .baseSpDefense = 115, + .types = { TYPE_FAIRY, TYPE_STEEL}, + .expYield = 360, + }, +#endif //P_FAMILY_ZACIAN + +#if P_FAMILY_ZAMAZENTA +#define ZAMAZENTA_MISC_INFO \ + .catchRate = 10, \ + .evYield_Speed = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_RED, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = + { + ZAMAZENTA_MISC_INFO, + .baseHP = 92, + .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, .baseDefense = 115, .baseSpeed = 138, .baseSpAttack = 80, .baseSpDefense = 115, .types = { TYPE_FIGHTING, TYPE_FIGHTING}, - .catchRate = 10, .expYield = 335, - .evYield_Speed = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = + { + ZAMAZENTA_MISC_INFO, + .baseHP = 92, + .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, + .baseDefense = P_UPDATED_STATS >= GEN_9 ? 140 : 145, + .baseSpeed = 128, + .baseSpAttack = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_9 ? 140 : 145, + .types = { TYPE_FIGHTING, TYPE_STEEL}, + .expYield = 360, + }, +#endif //P_FAMILY_ZAMAZENTA + +#if P_FAMILY_ETERNATUS +#define ETERNATUS_MISC_INFO \ + .types = { TYPE_POISON, TYPE_DRAGON}, \ + .catchRate = 255, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + [SPECIES_ETERNATUS] = { + ETERNATUS_MISC_INFO, .baseHP = 140, .baseAttack = 85, .baseDefense = 95, .baseSpeed = 130, .baseSpAttack = 145, .baseSpDefense = 95, - .types = { TYPE_POISON, TYPE_DRAGON}, - .catchRate = 255, .expYield = 345, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, }, + [SPECIES_ETERNATUS_ETERNAMAX] = + { + ETERNATUS_MISC_INFO, + .baseHP = 255, + .baseAttack = 115, + .baseDefense = 250, + .baseSpeed = 130, + .baseSpAttack = 125, + .baseSpDefense = 250, + .expYield = 563, + }, +#endif //P_FAMILY_ETERNATUS + +#if P_FAMILY_KUBFU [SPECIES_KUBFU] = { .baseHP = 60, @@ -20742,31 +25075,90 @@ const struct SpeciesInfo gSpeciesInfo[] = .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_URSHIFU] = +#define URSHIFU_MISC_INFO(style) \ + .baseHP = 100, \ + .baseAttack = 130, \ + .baseDefense = 100, \ + .baseSpeed = 97, \ + .baseSpAttack = 63, \ + .baseSpDefense = 60, \ + .catchRate = 3, \ + .expYield = 275, \ + .evYield_Attack = 3, \ + .genderRatio = PERCENT_FEMALE(12.5), \ + .eggCycles = 120, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = {EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + +#define URSHIFU_SINGLE_STRIKE_STYLE_MISC_INFO \ + .types = {TYPE_FIGHTING, TYPE_DARK}, \ + URSHIFU_MISC_INFO(SingleStrike) + + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = { - .baseHP = 100, - .baseAttack = 130, - .baseDefense = 100, - .baseSpeed = 97, - .baseSpAttack = 63, - .baseSpDefense = 60, - .types = { TYPE_FIGHTING, TYPE_DARK}, - .catchRate = 3, - .expYield = 275, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 120, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, + URSHIFU_SINGLE_STRIKE_STYLE_MISC_INFO, }, - [SPECIES_ZARUDE] = ZARUDE_SPECIES_INFO, +#if P_GIGANTAMAX_FORMS + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = + { + URSHIFU_SINGLE_STRIKE_STYLE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#define URSHIFU_RAPID_STRIKE_STYLE_MISC_INFO \ + .types = {TYPE_FIGHTING, TYPE_WATER}, \ + URSHIFU_MISC_INFO(RapidStrike) + + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = + { + URSHIFU_RAPID_STRIKE_STYLE_MISC_INFO, + }, + +#if P_GIGANTAMAX_FORMS + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = + { + URSHIFU_RAPID_STRIKE_STYLE_MISC_INFO, + .gigantamax = TRUE, + }, +#endif +#endif //P_FAMILY_KUBFU + +#if P_FAMILY_ZARUDE +#define ZARUDE_SPECIES_INFO \ + { \ + .baseHP = 105, \ + .baseAttack = 120, \ + .baseDefense = 105, \ + .baseSpeed = 105, \ + .baseSpAttack = 70, \ + .baseSpDefense = 95, \ + .types = { TYPE_DARK, TYPE_GRASS}, \ + .catchRate = 3, \ + .expYield = 300, \ + .evYield_Attack = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_MYTHICAL, \ + } + + [SPECIES_ZARUDE] = ZARUDE_SPECIES_INFO, + [SPECIES_ZARUDE_DADA] = ZARUDE_SPECIES_INFO, +#endif //P_FAMILY_ZARUDE + +#if P_FAMILY_REGIELEKI [SPECIES_REGIELEKI] = { .baseHP = 80, @@ -20789,7 +25181,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGIELEKI +#if P_FAMILY_REGIDRAGO [SPECIES_REGIDRAGO] = { .baseHP = 200, @@ -20812,7 +25206,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_REGIDRAGO +#if P_FAMILY_GLASTRIER [SPECIES_GLASTRIER] = { .baseHP = 100, @@ -20835,7 +25231,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_GLASTRIER +#if P_FAMILY_SPECTRIER [SPECIES_SPECTRIER] = { .baseHP = 100, @@ -20858,7 +25256,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, +#endif //P_FAMILY_SPECTRIER +#if P_FAMILY_CALYREX [SPECIES_CALYREX] = { .baseHP = 100, @@ -20882,3801 +25282,6 @@ const struct SpeciesInfo gSpeciesInfo[] = .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_WYRDEER] = - { - .baseHP = 103, - .baseAttack = 105, - .baseDefense = 72, - .baseSpeed = 65, - .baseSpAttack = 105, - .baseSpDefense = 75, - .types = { TYPE_NORMAL, TYPE_PSYCHIC}, - .catchRate = 45, - .expYield = 184, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - }, - - [SPECIES_KLEAVOR] = - { - .baseHP = 70, - .baseAttack = 135, - .baseDefense = 95, - .baseSpeed = 85, - .baseSpAttack = 45, - .baseSpDefense = 70, - .types = { TYPE_BUG, TYPE_ROCK}, - .catchRate = 25, - .expYield = 175, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_SWARM, ABILITY_SHEER_FORCE, ABILITY_STEADFAST}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_URSALUNA] = - { - .baseHP = 130, - .baseAttack = 140, - .baseDefense = 105, - .baseSpeed = 50, - .baseSpAttack = 45, - .baseSpDefense = 80, - .types = { TYPE_GROUND, TYPE_NORMAL}, - .catchRate = 75, - .expYield = 194, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_GUTS, ABILITY_BULLETPROOF, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_BASCULEGION] = - { - .baseHP = 120, - .baseAttack = 112, - .baseDefense = 65, - .baseSpeed = 78, - .baseSpAttack = 80, - .baseSpDefense = 75, - .types = { TYPE_WATER, TYPE_GHOST}, - .catchRate = 25, - .expYield = 186, - .evYield_HP = 2, - .genderRatio = MON_MALE, - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_BASCULEGION_FEMALE] = - { - .baseHP = 120, - .baseAttack = 92, - .baseDefense = 65, - .baseSpeed = 78, - .baseSpAttack = 100, - .baseSpDefense = 75, - .types = { TYPE_WATER, TYPE_GHOST}, - .catchRate = 25, - .expYield = 186, - .evYield_HP = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_SNEASLER] = - { - .baseHP = 80, - .baseAttack = 130, - .baseDefense = 60, - .baseSpeed = 120, - .baseSpAttack = 40, - .baseSpDefense = 80, - .types = { TYPE_FIGHTING, TYPE_POISON}, - .catchRate = 135, - .expYield = 179, - .evYield_Attack = 1, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_POISON_TOUCH}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_OVERQWIL] = - { - .baseHP = 85, - .baseAttack = 115, - .baseDefense = 95, - .baseSpeed = 85, - .baseSpAttack = 65, - .baseSpDefense = 65, - .types = { TYPE_DARK, TYPE_POISON}, - .catchRate = 135, - .expYield = 180, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_ENAMORUS] = - { - .baseHP = 74, - .baseAttack = 115, - .baseDefense = 70, - .baseSpeed = 106, - .baseSpAttack = 135, - .baseSpDefense = 80, - .types = { TYPE_FAIRY, TYPE_FLYING}, - .catchRate = 3, - .expYield = 261, - .evYield_SpAttack = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_CONTRARY}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, -#endif - - [SPECIES_VENUSAUR_MEGA] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 123, - .baseSpeed = 80, - .baseSpAttack = 122, - .baseSpDefense = 120, - .types = { TYPE_GRASS, TYPE_POISON}, - .catchRate = 45, - .expYield = 281, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, - .abilities = {ABILITY_THICK_FAT, ABILITY_THICK_FAT}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_CHARIZARD_MEGA_X] = - { - .baseHP = 78, - .baseAttack = 130, - .baseDefense = 111, - .baseSpeed = 100, - .baseSpAttack = 130, - .baseSpDefense = 85, - .types = { TYPE_FIRE, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 285, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_CHARIZARD_MEGA_Y] = - { - .baseHP = 78, - .baseAttack = 104, - .baseDefense = 78, - .baseSpeed = 100, - .baseSpAttack = 159, - .baseSpDefense = 115, - .types = { TYPE_FIRE, TYPE_FLYING}, - .catchRate = 45, - .expYield = 285, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_DROUGHT, ABILITY_DROUGHT}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_BLASTOISE_MEGA] = - { - .baseHP = 79, - .baseAttack = 103, - .baseDefense = 120, - .baseSpeed = 78, - .baseSpAttack = 135, - .baseSpDefense = 115, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 45, - .expYield = 284, - .evYield_SpDefense = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_BEEDRILL_MEGA] = - { - .baseHP = 65, - .baseAttack = 150, - .baseDefense = 40, - .baseSpeed = 145, - .baseSpAttack = 15, - .baseSpDefense = 80, - .types = { TYPE_BUG, TYPE_POISON}, - .catchRate = 45, - .expYield = 223, - .evYield_Attack = 2, - .evYield_SpDefense = 1, - .itemRare = ITEM_POISON_BARB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_PIDGEOT_MEGA] = - { - .baseHP = 83, - .baseAttack = 80, - .baseDefense = 80, - .baseSpeed = 121, - .baseSpAttack = 135, - .baseSpDefense = 80, - .types = { TYPE_NORMAL, TYPE_FLYING}, - .catchRate = 45, - .expYield = 261, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_NO_GUARD, ABILITY_NO_GUARD}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_ALAKAZAM_MEGA] = - { - .baseHP = 55, - .baseAttack = 50, - .baseDefense = 65, - .baseSpeed = 150, - .baseSpAttack = 175, - #if P_UPDATED_STATS >= GEN_7 - .baseSpDefense = 105, - #else - .baseSpDefense = 95, - #endif - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 50, - .expYield = 270, - .evYield_SpAttack = 3, - .itemRare = ITEM_TWISTED_SPOON, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_TRACE, ABILITY_TRACE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SLOWBRO_MEGA] = - { - .baseHP = 95, - .baseAttack = 75, - .baseDefense = 180, - .baseSpeed = 30, - .baseSpAttack = 130, - .baseSpDefense = 80, - .types = { TYPE_WATER, TYPE_PSYCHIC}, - .catchRate = 75, - .expYield = 207, - .evYield_Defense = 2, - .itemRare = ITEM_KINGS_ROCK, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SHELL_ARMOR}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GENGAR_MEGA] = - { - .baseHP = 60, - .baseAttack = 65, - .baseDefense = 80, - .baseSpeed = 130, - .baseSpAttack = 170, - .baseSpDefense = 95, - .types = { TYPE_GHOST, TYPE_POISON}, - .catchRate = 45, - .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_SHADOW_TAG, ABILITY_SHADOW_TAG}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_KANGASKHAN_MEGA] = - { - .baseHP = 105, - .baseAttack = 125, - .baseDefense = 100, - .baseSpeed = 100, - .baseSpAttack = 60, - .baseSpDefense = 100, - .types = { TYPE_NORMAL, TYPE_NORMAL}, - .catchRate = 45, - .expYield = 207, - .evYield_HP = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_PINSIR_MEGA] = - { - .baseHP = 65, - .baseAttack = 155, - .baseDefense = 120, - .baseSpeed = 105, - .baseSpAttack = 65, - .baseSpDefense = 90, - .types = { TYPE_BUG, TYPE_FLYING}, - .catchRate = 45, - .expYield = 210, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GYARADOS_MEGA] = - { - .baseHP = 95, - .baseAttack = 155, - .baseDefense = 109, - .baseSpeed = 81, - .baseSpAttack = 70, - .baseSpDefense = 130, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 45, - .expYield = 224, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 5, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_AERODACTYL_MEGA] = - { - .baseHP = 80, - .baseAttack = 135, - .baseDefense = 85, - .baseSpeed = 150, - .baseSpAttack = 70, - .baseSpDefense = 95, - .types = { TYPE_ROCK, TYPE_FLYING}, - .catchRate = 45, - .expYield = 215, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 35, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_MEWTWO_MEGA_X] = - { - .baseHP = 106, - .baseAttack = 190, - .baseDefense = 100, - .baseSpeed = 130, - .baseSpAttack = 154, - .baseSpDefense = 100, - .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, - .catchRate = 3, - .expYield = 351, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_STEADFAST, ABILITY_STEADFAST}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_MEWTWO_MEGA_Y] = - { - .baseHP = 106, - .baseAttack = 150, - .baseDefense = 70, - .baseSpeed = 140, - .baseSpAttack = 194, - .baseSpDefense = 120, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 351, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_INSOMNIA, ABILITY_INSOMNIA}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_AMPHAROS_MEGA] = - { - .baseHP = 90, - .baseAttack = 95, - .baseDefense = 105, - .baseSpeed = 45, - .baseSpAttack = 165, - .baseSpDefense = 110, - .types = { TYPE_ELECTRIC, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 275, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, - .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_STEELIX_MEGA] = - { - .baseHP = 75, - .baseAttack = 125, - .baseDefense = 230, - .baseSpeed = 30, - .baseSpAttack = 55, - .baseSpDefense = 95, - .types = { TYPE_STEEL, TYPE_GROUND}, - .catchRate = 25, - .expYield = 214, - .evYield_Defense = 2, - .itemRare = ITEM_METAL_COAT, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SCIZOR_MEGA] = - { - .baseHP = 70, - .baseAttack = 150, - .baseDefense = 140, - .baseSpeed = 75, - .baseSpAttack = 65, - .baseSpDefense = 100, - .types = { TYPE_BUG, TYPE_STEEL}, - .catchRate = 25, - .expYield = 210, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_TECHNICIAN, ABILITY_TECHNICIAN}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_HERACROSS_MEGA] = - { - .baseHP = 80, - .baseAttack = 185, - .baseDefense = 115, - .baseSpeed = 75, - .baseSpAttack = 40, - .baseSpDefense = 105, - .types = { TYPE_BUG, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 210, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_SKILL_LINK, ABILITY_SKILL_LINK}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_HOUNDOOM_MEGA] = - { - .baseHP = 75, - .baseAttack = 90, - .baseDefense = 90, - .baseSpeed = 115, - .baseSpAttack = 140, - .baseSpDefense = 90, - .types = { TYPE_DARK, TYPE_FIRE}, - .catchRate = 45, - .expYield = 210, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_TYRANITAR_MEGA] = - { - .baseHP = 100, - .baseAttack = 164, - .baseDefense = 150, - .baseSpeed = 71, - .baseSpAttack = 95, - .baseSpDefense = 120, - .types = { TYPE_ROCK, TYPE_DARK}, - .catchRate = 45, - .expYield = 315, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_SAND_STREAM, ABILITY_SAND_STREAM}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SCEPTILE_MEGA] = - { - .baseHP = 70, - .baseAttack = 110, - .baseDefense = 75, - .baseSpeed = 145, - .baseSpAttack = 145, - .baseSpDefense = 85, - .types = { TYPE_GRASS, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 284, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_LIGHTNING_ROD}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_BLAZIKEN_MEGA] = - { - .baseHP = 80, - .baseAttack = 160, - .baseDefense = 80, - .baseSpeed = 100, - .baseSpAttack = 130, - .baseSpDefense = 80, - .types = { TYPE_FIRE, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 284, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SPEED_BOOST, ABILITY_SPEED_BOOST}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SWAMPERT_MEGA] = - { - .baseHP = 100, - .baseAttack = 150, - .baseDefense = 110, - .baseSpeed = 70, - .baseSpAttack = 95, - .baseSpDefense = 110, - .types = { TYPE_WATER, TYPE_GROUND}, - .catchRate = 45, - .expYield = 286, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SWIFT_SWIM}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GARDEVOIR_MEGA] = - { - .baseHP = 68, - .baseAttack = 85, - .baseDefense = 65, - .baseSpeed = 100, - .baseSpAttack = 165, - .baseSpDefense = 135, - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 278, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SABLEYE_MEGA] = - { - .baseHP = 50, - .baseAttack = 85, - .baseDefense = 125, - .baseSpeed = 20, - .baseSpAttack = 85, - .baseSpDefense = 115, - .types = { TYPE_DARK, TYPE_GHOST}, - .catchRate = 45, - .expYield = 168, - .evYield_Attack = 1, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_MAWILE_MEGA] = - { - .baseHP = 50, - .baseAttack = 105, - .baseDefense = 125, - .baseSpeed = 50, - .baseSpAttack = 55, - .baseSpDefense = 95, - .types = { TYPE_STEEL, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 168, - .evYield_Attack = 1, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_HUGE_POWER, ABILITY_HUGE_POWER}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_AGGRON_MEGA] = - { - .baseHP = 70, - .baseAttack = 140, - .baseDefense = 230, - .baseSpeed = 50, - .baseSpAttack = 60, - .baseSpDefense = 80, - .types = { TYPE_STEEL, TYPE_STEEL}, - .catchRate = 45, - .expYield = 284, - .evYield_Defense = 3, - .itemRare = ITEM_HARD_STONE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 35, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_FILTER, ABILITY_FILTER}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_MEDICHAM_MEGA] = - { - .baseHP = 60, - .baseAttack = 100, - .baseDefense = 85, - .baseSpeed = 100, - .baseSpAttack = 80, - .baseSpDefense = 85, - .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, - .catchRate = 90, - .expYield = 179, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_PURE_POWER, ABILITY_PURE_POWER}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_MANECTRIC_MEGA] = - { - .baseHP = 70, - .baseAttack = 75, - .baseDefense = 80, - .baseSpeed = 135, - .baseSpAttack = 135, - .baseSpDefense = 80, - .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, - .catchRate = 45, - .expYield = 201, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SHARPEDO_MEGA] = - { - .baseHP = 70, - .baseAttack = 140, - .baseDefense = 70, - .baseSpeed = 105, - .baseSpAttack = 110, - .baseSpDefense = 65, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 60, - .expYield = 196, - .evYield_Attack = 2, - .itemRare = ITEM_DEEP_SEA_TOOTH, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_STRONG_JAW, ABILITY_STRONG_JAW}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_CAMERUPT_MEGA] = - { - .baseHP = 70, - .baseAttack = 120, - .baseDefense = 100, - .baseSpeed = 20, - .baseSpAttack = 145, - .baseSpDefense = 105, - .types = { TYPE_FIRE, TYPE_GROUND}, - .catchRate = 150, - .expYield = 196, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_ALTARIA_MEGA] = - { - .baseHP = 75, - .baseAttack = 110, - .baseDefense = 110, - .baseSpeed = 80, - .baseSpAttack = 110, - .baseSpDefense = 105, - .types = { TYPE_DRAGON, TYPE_FAIRY}, - .catchRate = 45, - .expYield = 207, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_ERRATIC, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_BANETTE_MEGA] = - { - .baseHP = 64, - .baseAttack = 165, - .baseDefense = 75, - .baseSpeed = 75, - .baseSpAttack = 93, - .baseSpDefense = 83, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 45, - .expYield = 194, - .evYield_Attack = 2, - .itemRare = ITEM_SPELL_TAG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_PRANKSTER, ABILITY_PRANKSTER}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_ABSOL_MEGA] = - { - .baseHP = 65, - .baseAttack = 150, - .baseDefense = 60, - .baseSpeed = 115, - .baseSpAttack = 115, - .baseSpDefense = 60, - .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 30, - .expYield = 198, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GLALIE_MEGA] = - { - .baseHP = 80, - .baseAttack = 120, - .baseDefense = 80, - .baseSpeed = 100, - .baseSpAttack = 120, - .baseSpDefense = 80, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 75, - .expYield = 203, - .evYield_HP = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_REFRIGERATE, ABILITY_REFRIGERATE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_SALAMENCE_MEGA] = - { - .baseHP = 95, - .baseAttack = 145, - .baseDefense = 130, - .baseSpeed = 120, - .baseSpAttack = 120, - .baseSpDefense = 90, - .types = { TYPE_DRAGON, TYPE_FLYING}, - .catchRate = 45, - .expYield = 315, - .evYield_Attack = 3, - .itemRare = ITEM_DRAGON_FANG, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_METAGROSS_MEGA] = - { - .baseHP = 80, - .baseAttack = 145, - .baseDefense = 150, - .baseSpeed = 110, - .baseSpAttack = 105, - .baseSpDefense = 110, - .types = { TYPE_STEEL, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 315, - .evYield_Defense = 3, - .itemRare = ITEM_METAL_COAT, - .genderRatio = MON_GENDERLESS, - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_LATIAS_MEGA] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 120, - .baseSpeed = 110, - .baseSpAttack = 140, - .baseSpDefense = 150, - .types = { TYPE_DRAGON, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 315, - .evYield_SpDefense = 3, - .genderRatio = MON_FEMALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_LATIOS_MEGA] = - { - .baseHP = 80, - .baseAttack = 130, - .baseDefense = 100, - .baseSpeed = 110, - .baseSpAttack = 160, - .baseSpDefense = 120, - .types = { TYPE_DRAGON, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 315, - .evYield_SpAttack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, - }, - -#if P_GEN_4_POKEMON == TRUE - [SPECIES_LOPUNNY_MEGA] = - { - .baseHP = 65, - .baseAttack = 136, - .baseDefense = 94, - .baseSpeed = 135, - .baseSpAttack = 54, - .baseSpDefense = 96, - .types = { TYPE_NORMAL, TYPE_FIGHTING}, - .catchRate = 60, - .expYield = 203, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 140, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_SCRAPPY, ABILITY_SCRAPPY}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GARCHOMP_MEGA] = - { - .baseHP = 108, - .baseAttack = 170, - .baseDefense = 115, - .baseSpeed = 92, - .baseSpAttack = 120, - .baseSpDefense = 95, - .types = { TYPE_DRAGON, TYPE_GROUND}, - .catchRate = 45, - .expYield = 315, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_LUCARIO_MEGA] = - { - .baseHP = 70, - .baseAttack = 145, - .baseDefense = 88, - .baseSpeed = 112, - .baseSpAttack = 140, - .baseSpDefense = 70, - .types = { TYPE_FIGHTING, TYPE_STEEL}, - .catchRate = 45, - .expYield = 219, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_ABOMASNOW_MEGA] = - { - .baseHP = 90, - .baseAttack = 132, - .baseDefense = 105, - .baseSpeed = 30, - .baseSpAttack = 132, - .baseSpDefense = 105, - .types = { TYPE_GRASS, TYPE_ICE}, - .catchRate = 60, - .expYield = 208, - .evYield_Attack = 1, - .evYield_SpAttack = 1, - .itemRare = ITEM_NEVER_MELT_ICE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, - .abilities = {ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_GALLADE_MEGA] = - { - .baseHP = 68, - .baseAttack = 165, - .baseDefense = 95, - .baseSpeed = 110, - .baseSpAttack = 65, - .baseSpDefense = 115, - .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 278, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_INNER_FOCUS, ABILITY_INNER_FOCUS}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, -#endif - -#if P_GEN_5_POKEMON == TRUE - [SPECIES_AUDINO_MEGA] = - { - .baseHP = 103, - .baseAttack = 60, - .baseDefense = 126, - .baseSpeed = 50, - .baseSpAttack = 80, - .baseSpDefense = 126, - .types = { TYPE_NORMAL, TYPE_FAIRY}, - .catchRate = 255, - .expYield = 425, - .evYield_HP = 2, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_SITRUS_BERRY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_HEALER, ABILITY_HEALER}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MEGA_EVOLUTION, - }, -#endif - -#if P_GEN_6_POKEMON == TRUE - [SPECIES_DIANCIE_MEGA] = - { - .baseHP = 50, - .baseAttack = 160, - .baseDefense = 110, - .baseSpeed = 110, - .baseSpAttack = 160, - .baseSpDefense = 110, - .types = { TYPE_ROCK, TYPE_FAIRY}, - .catchRate = 3, - .expYield = 315, - .evYield_Defense = 1, - .evYield_SpDefense = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL | SPECIES_FLAG_MEGA_EVOLUTION, - }, -#endif - - [SPECIES_RAYQUAZA_MEGA] = - { - .baseHP = 105, - .baseAttack = 180, - .baseDefense = 100, - .baseSpeed = 115, - .baseSpAttack = 180, - .baseSpDefense = 100, - .types = { TYPE_DRAGON, TYPE_FLYING}, - .catchRate = 45, - .expYield = 306, - .evYield_Attack = 2, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MEGA_EVOLUTION, - }, - - [SPECIES_KYOGRE_PRIMAL] = - { - .baseHP = 100, - .baseAttack = 150, - .baseDefense = 90, - .baseSpeed = 90, - .baseSpAttack = 180, - .baseSpDefense = 160, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 3, - .expYield = 302, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, - }, - - [SPECIES_GROUDON_PRIMAL] = - { - .baseHP = 100, - .baseAttack = 180, - .baseDefense = 160, - .baseSpeed = 90, - .baseSpAttack = 150, - .baseSpDefense = 90, - .types = { TYPE_GROUND, TYPE_FIRE}, - .catchRate = 3, - .expYield = 302, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, - }, - - [SPECIES_RATTATA_ALOLAN] = - { - .baseHP = 30, - .baseAttack = 56, - .baseDefense = 35, - .baseSpeed = 72, - .baseSpAttack = 25, - .baseSpDefense = 35, - .types = { TYPE_DARK, TYPE_NORMAL}, - .catchRate = 255, - .expYield = 51, - .evYield_Speed = 1, - .itemRare = ITEM_PECHA_BERRY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_RATICATE_ALOLAN] = - { - .baseHP = 75, - .baseAttack = 71, - .baseDefense = 70, - .baseSpeed = 77, - .baseSpAttack = 40, - .baseSpDefense = 80, - .types = { TYPE_DARK, TYPE_NORMAL}, - .catchRate = 127, - .expYield = 145, - .evYield_Speed = 2, - .itemRare = ITEM_PECHA_BERRY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_RAICHU_ALOLAN] = - { - .baseHP = 60, - .baseAttack = 85, - .baseDefense = 50, - .baseSpeed = 110, - .baseSpAttack = 95, - .baseSpDefense = 85, - .types = { TYPE_ELECTRIC, TYPE_PSYCHIC}, - .catchRate = 75, - .expYield = 218, - .evYield_Speed = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 10, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_SURGE_SURFER, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_SANDSHREW_ALOLAN] = - { - .baseHP = 50, - .baseAttack = 75, - .baseDefense = 90, - .baseSpeed = 40, - .baseSpAttack = 10, - .baseSpDefense = 35, - .types = { TYPE_ICE, TYPE_STEEL}, - .catchRate = 255, - .expYield = 60, - .evYield_Defense = 1, - .itemRare = ITEM_GRIP_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_SANDSLASH_ALOLAN] = - { - .baseHP = 75, - .baseAttack = 100, - .baseDefense = 120, - .baseSpeed = 65, - .baseSpAttack = 25, - .baseSpDefense = 65, - .types = { TYPE_ICE, TYPE_STEEL}, - .catchRate = 90, - .expYield = 158, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_VULPIX_ALOLAN] = - { - .baseHP = 38, - .baseAttack = 41, - .baseDefense = 40, - .baseSpeed = 65, - .baseSpAttack = 50, - .baseSpDefense = 65, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 190, - .expYield = 60, - .evYield_Speed = 1, - .itemRare = ITEM_SNOWBALL, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_NINETALES_ALOLAN] = - { - .baseHP = 73, - .baseAttack = 67, - .baseDefense = 75, - .baseSpeed = 109, - .baseSpAttack = 81, - .baseSpDefense = 100, - .types = { TYPE_ICE, TYPE_FAIRY}, - .catchRate = 75, - .expYield = 177, - .evYield_Speed = 1, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_DIGLETT_ALOLAN] = - { - .baseHP = 10, - .baseAttack = 55, - .baseDefense = 30, - .baseSpeed = 90, - .baseSpAttack = 35, - .baseSpDefense = 45, - .types = { TYPE_GROUND, TYPE_STEEL}, - .catchRate = 255, - .expYield = 53, - .evYield_Speed = 1, - .itemRare = ITEM_SOFT_SAND, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_DUGTRIO_ALOLAN] = - { - .baseHP = 35, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 110, - .baseSpAttack = 50, - .baseSpDefense = 70, - .types = { TYPE_GROUND, TYPE_STEEL}, - .catchRate = 50, - .expYield = 149, - .evYield_Speed = 2, - .itemRare = ITEM_SOFT_SAND, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = TRUE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_MEOWTH_ALOLAN] = - { - .baseHP = 40, - .baseAttack = 35, - .baseDefense = 35, - .baseSpeed = 90, - .baseSpAttack = 50, - .baseSpDefense = 40, - .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 255, - .expYield = 58, - .evYield_Speed = 1, - .itemRare = ITEM_QUICK_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_RATTLED}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_PERSIAN_ALOLAN] = - { - .baseHP = 65, - .baseAttack = 60, - .baseDefense = 60, - .baseSpeed = 115, - .baseSpAttack = 75, - .baseSpDefense = 65, - .types = { TYPE_DARK, TYPE_DARK}, - .catchRate = 90, - .expYield = 154, - .evYield_Speed = 2, - .itemRare = ITEM_QUICK_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_FUR_COAT, ABILITY_TECHNICIAN, ABILITY_RATTLED}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_GEODUDE_ALOLAN] = - { - .baseHP = 40, - .baseAttack = 80, - .baseDefense = 100, - .baseSpeed = 20, - .baseSpAttack = 30, - .baseSpDefense = 30, - .types = { TYPE_ROCK, TYPE_ELECTRIC}, - .catchRate = 255, - .expYield = 60, - .evYield_Defense = 1, - .itemRare = ITEM_CELL_BATTERY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_GRAVELER_ALOLAN] = - { - .baseHP = 55, - .baseAttack = 95, - .baseDefense = 115, - .baseSpeed = 35, - .baseSpAttack = 45, - .baseSpDefense = 45, - .types = { TYPE_ROCK, TYPE_ELECTRIC}, - .catchRate = 120, - .expYield = 137, - .evYield_Defense = 2, - .itemRare = ITEM_CELL_BATTERY, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_GOLEM_ALOLAN] = - { - .baseHP = 80, - .baseAttack = 120, - .baseDefense = 130, - .baseSpeed = 45, - .baseSpAttack = 55, - .baseSpDefense = 65, - .types = { TYPE_ROCK, TYPE_ELECTRIC}, - .catchRate = 45, - .expYield = 223, - .evYield_Defense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_GRIMER_ALOLAN] = - { - .baseHP = 80, - .baseAttack = 80, - .baseDefense = 50, - .baseSpeed = 25, - .baseSpAttack = 40, - .baseSpDefense = 50, - .types = { TYPE_POISON, TYPE_DARK}, - .catchRate = 190, - .expYield = 65, - .evYield_HP = 1, - .itemRare = ITEM_BLACK_SLUDGE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_MUK_ALOLAN] = - { - .baseHP = 105, - .baseAttack = 105, - .baseDefense = 75, - .baseSpeed = 50, - .baseSpAttack = 65, - .baseSpDefense = 100, - .types = { TYPE_POISON, TYPE_DARK}, - .catchRate = 75, - .expYield = 175, - .evYield_HP = 1, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_EXEGGUTOR_ALOLAN] = - { - .baseHP = 95, - .baseAttack = 105, - .baseDefense = 85, - .baseSpeed = 45, - .baseSpAttack = 125, - .baseSpDefense = 75, - .types = { TYPE_GRASS, TYPE_DRAGON}, - .catchRate = 45, - .expYield = 186, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, - .abilities = {ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_MAROWAK_ALOLAN] = - { - .baseHP = 60, - .baseAttack = 80, - .baseDefense = 110, - .baseSpeed = 45, - .baseSpAttack = 50, - .baseSpDefense = 80, - .types = { TYPE_FIRE, TYPE_GHOST}, - .catchRate = 75, - .expYield = 149, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, - .abilities = {ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_ALOLAN_FORM, - }, - - [SPECIES_MEOWTH_GALARIAN] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 55, - .baseSpeed = 40, - .baseSpAttack = 40, - .baseSpDefense = 40, - .types = { TYPE_STEEL, TYPE_STEEL}, - .catchRate = 255, - .expYield = 58, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_TOUGH_CLAWS, ABILITY_UNNERVE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_PONYTA_GALARIAN] = - { - .baseHP = 50, - .baseAttack = 85, - .baseDefense = 55, - .baseSpeed = 90, - .baseSpAttack = 65, - .baseSpDefense = 65, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 190, - .expYield = 82, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_RAPIDASH_GALARIAN] = - { - .baseHP = 65, - .baseAttack = 100, - .baseDefense = 70, - .baseSpeed = 105, - .baseSpAttack = 80, - .baseSpDefense = 80, - .types = { TYPE_PSYCHIC, TYPE_FAIRY}, - .catchRate = 60, - .expYield = 175, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_SLOWPOKE_GALARIAN] = - { - .baseHP = 90, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 15, - .baseSpAttack = 40, - .baseSpDefense = 40, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 190, - .expYield = 63, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_GLUTTONY, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_SLOWBRO_GALARIAN] = - { - .baseHP = 95, - .baseAttack = 100, - .baseDefense = 95, - .baseSpeed = 30, - .baseSpAttack = 100, - .baseSpDefense = 70, - .types = { TYPE_POISON, TYPE_PSYCHIC}, - .catchRate = 75, - .expYield = 172, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_FARFETCHD_GALARIAN] = - { - .baseHP = 52, - .baseAttack = 95, - .baseDefense = 55, - .baseSpeed = 55, - .baseSpAttack = 58, - .baseSpDefense = 62, - .types = { TYPE_FIGHTING, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 132, - .evYield_Attack = 1, - .itemCommon = ITEM_LEEK, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, - .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_WEEZING_GALARIAN] = - { - .baseHP = 65, - .baseAttack = 90, - .baseDefense = 120, - .baseSpeed = 60, - .baseSpAttack = 85, - .baseSpDefense = 70, - .types = { TYPE_POISON, TYPE_FAIRY}, - .catchRate = 60, - .expYield = 172, - .evYield_Defense = 2, - .itemRare = ITEM_MISTY_SEED, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_MR_MIME_GALARIAN] = - { - .baseHP = 50, - .baseAttack = 65, - .baseDefense = 65, - .baseSpeed = 100, - .baseSpAttack = 90, - .baseSpDefense = 90, - .types = { TYPE_ICE, TYPE_PSYCHIC}, - .catchRate = 45, - .expYield = 161, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, - .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_ARTICUNO_GALARIAN] = - { - .baseHP = 90, - .baseAttack = 85, - .baseDefense = 85, - .baseSpeed = 95, - .baseSpAttack = 125, - .baseSpDefense = 100, - .types = { TYPE_PSYCHIC, TYPE_FLYING}, - .catchRate = 3, - .expYield = 290, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_COMPETITIVE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_ZAPDOS_GALARIAN] = - { - .baseHP = 90, - .baseAttack = 125, - .baseDefense = 90, - .baseSpeed = 100, - .baseSpAttack = 85, - .baseSpDefense = 90, - .types = { TYPE_FIGHTING, TYPE_FLYING}, - .catchRate = 3, - .expYield = 290, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_DEFIANT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_MOLTRES_GALARIAN] = - { - .baseHP = 90, - .baseAttack = 85, - .baseDefense = 90, - .baseSpeed = 90, - .baseSpAttack = 100, - .baseSpDefense = 125, - .types = { TYPE_DARK, TYPE_FLYING}, - .catchRate = 3, - .expYield = 290, - .evYield_SpDefense = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_BERSERK, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_SLOWKING_GALARIAN] = - { - .baseHP = 95, - .baseAttack = 65, - .baseDefense = 80, - .baseSpeed = 30, - .baseSpAttack = 110, - .baseSpDefense = 110, - .types = { TYPE_POISON, TYPE_PSYCHIC}, - .catchRate = 70, - .expYield = 172, - .evYield_SpDefense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, - .abilities = {ABILITY_CURIOUS_MEDICINE, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, - .bodyColor = BODY_COLOR_PINK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_CORSOLA_GALARIAN] = - { - .baseHP = 60, - .baseAttack = 55, - .baseDefense = 100, - .baseSpeed = 30, - .baseSpAttack = 65, - .baseSpDefense = 100, - .types = { TYPE_GHOST, TYPE_GHOST}, - .catchRate = 60, - .expYield = 144, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(75), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, - .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_ZIGZAGOON_GALARIAN] = - { - .baseHP = 38, - .baseAttack = 30, - .baseDefense = 41, - .baseSpeed = 60, - .baseSpAttack = 30, - .baseSpDefense = 41, - .types = { TYPE_DARK, TYPE_NORMAL}, - .catchRate = 255, - .expYield = 56, - .evYield_Speed = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_LINOONE_GALARIAN] = - { - .baseHP = 78, - .baseAttack = 70, - .baseDefense = 61, - .baseSpeed = 100, - .baseSpAttack = 50, - .baseSpDefense = 61, - .types = { TYPE_DARK, TYPE_NORMAL}, - .catchRate = 90, - .expYield = 147, - .evYield_Speed = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - -#if P_GEN_5_POKEMON == TRUE - [SPECIES_DARUMAKA_GALARIAN] = - { - .baseHP = 70, - .baseAttack = 90, - .baseDefense = 45, - .baseSpeed = 50, - .baseSpAttack = 15, - .baseSpDefense = 45, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 120, - .expYield = 63, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_DARMANITAN_GALARIAN] = - { - .baseHP = 105, - .baseAttack = 140, - .baseDefense = 55, - .baseSpeed = 95, - .baseSpAttack = 30, - .baseSpDefense = 55, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 60, - .expYield = 168, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_YAMASK_GALARIAN] = - { - .baseHP = 38, - .baseAttack = 55, - .baseDefense = 85, - .baseSpeed = 30, - .baseSpAttack = 30, - .baseSpDefense = 65, - .types = { TYPE_GROUND, TYPE_GHOST}, - .catchRate = 190, - .expYield = 61, - .evYield_Defense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_STUNFISK_GALARIAN] = - { - .baseHP = 109, - .baseAttack = 81, - .baseDefense = 99, - .baseSpeed = 32, - .baseSpAttack = 66, - .baseSpDefense = 84, - .types = { TYPE_GROUND, TYPE_STEEL}, - .catchRate = 75, - .expYield = 165, - .evYield_HP = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, - .abilities = {ABILITY_MIMICRY, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, -#endif - - [SPECIES_GROWLITHE_HISUIAN] = - { - .baseHP = 60, - .baseAttack = 75, - .baseDefense = 45, - .baseSpeed = 55, - .baseSpAttack = 65, - .baseSpDefense = 50, - .types = { TYPE_FIRE, TYPE_ROCK}, - .catchRate = 190, - .expYield = 70, - .evYield_Attack = 1, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_ARCANINE_HISUIAN] = - { - .baseHP = 95, - .baseAttack = 115, - .baseDefense = 80, - .baseSpeed = 90, - .baseSpAttack = 95, - .baseSpDefense = 80, - .types = { TYPE_FIRE, TYPE_ROCK}, - .catchRate = 75, - .expYield = 194, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(25), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_VOLTORB_HISUIAN] = - { - .baseHP = 40, - .baseAttack = 30, - .baseDefense = 50, - .baseSpeed = 100, - .baseSpAttack = 55, - .baseSpDefense = 55, - .types = { TYPE_ELECTRIC, TYPE_GRASS}, - .catchRate = 190, - .expYield = 66, - .evYield_Speed = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_ELECTRODE_HISUIAN] = - { - .baseHP = 60, - .baseAttack = 50, - .baseDefense = 70, - .baseSpAttack = 80, - .baseSpDefense = 80, - .baseSpeed = 150, - .types = { TYPE_ELECTRIC, TYPE_GRASS}, - .catchRate = 60, - .expYield = 172, - .evYield_Speed = 2, - .genderRatio = MON_GENDERLESS, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_TYPHLOSION_HISUIAN] = - { - .baseHP = 73, - .baseAttack = 84, - .baseDefense = 78, - .baseSpeed = 95, - .baseSpAttack = 119, - .baseSpDefense = 85, - .types = { TYPE_FIRE, TYPE_GHOST}, - .catchRate = 45, - .expYield = 240, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FRISK}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_QWILFISH_HISUIAN] = - { - .baseHP = 65, - .baseAttack = 95, - .baseDefense = 85, - .baseSpeed = 85, - .baseSpAttack = 55, - .baseSpDefense = 55, - .types = { TYPE_DARK, TYPE_POISON}, - .catchRate = 45, - .expYield = 88, - .evYield_Attack = 1, - .itemRare = ITEM_POISON_BARB, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_SNEASEL_HISUIAN] = - { - .baseHP = 55, - .baseAttack = 95, - .baseDefense = 55, - .baseSpeed = 115, - .baseSpAttack = 35, - .baseSpDefense = 75, - .types = { TYPE_POISON, TYPE_FIGHTING}, - .catchRate = 60, - .expYield = 86, - .evYield_Speed = 1, - .itemRare = ITEM_QUICK_CLAW, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = 35, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_POISON_TOUCH}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - -#if P_GEN_5_POKEMON == TRUE - [SPECIES_SAMUROTT_HISUIAN] = - { - .baseHP = 90, - .baseAttack = 108, - .baseDefense = 80, - .baseSpeed = 85, - .baseSpAttack = 100, - .baseSpDefense = 65, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 45, - .expYield = 238, - .evYield_SpAttack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHARPNESS}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_LILLIGANT_HISUIAN] = - { - .baseHP = 70, - .baseAttack = 105, - .baseDefense = 75, - .baseSpeed = 105, - .baseSpAttack = 50, - .baseSpDefense = 75, - .types = { TYPE_GRASS, TYPE_FIGHTING}, - .catchRate = 75, - .expYield = 168, - .evYield_Attack = 2, - .itemRare = ITEM_ABSORB_BULB, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, - .abilities = {ABILITY_CHLOROPHYLL, ABILITY_HUSTLE, ABILITY_LEAF_GUARD}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_ZORUA_HISUIAN] = - { - .baseHP = 35, - .baseAttack = 60, - .baseDefense = 40, - .baseSpeed = 70, - .baseSpAttack = 85, - .baseSpDefense = 40, - .types = { TYPE_NORMAL, TYPE_GHOST}, - .catchRate = 75, - .expYield = 66, - .evYield_SpAttack = 1, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_ZOROARK_HISUIAN] = - { - .baseHP = 55, - .baseAttack = 100, - .baseDefense = 60, - .baseSpeed = 110, - .baseSpAttack = 125, - .baseSpDefense = 60, - .types = { TYPE_NORMAL, TYPE_GHOST}, - .catchRate = 45, - .expYield = 179, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_BRAVIARY_HISUIAN] = - { - .baseHP = 110, - .baseAttack = 83, - .baseDefense = 70, - .baseSpeed = 65, - .baseSpAttack = 112, - .baseSpDefense = 70, - .types = { TYPE_PSYCHIC, TYPE_FLYING}, - .catchRate = 60, - .expYield = 179, - .evYield_SpAttack = 2, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_TINTED_LENS}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, -#endif - -#if P_GEN_6_POKEMON == TRUE - [SPECIES_SLIGGOO_HISUIAN] = - { - .baseHP = 58, - .baseAttack = 75, - .baseDefense = 83, - .baseSpeed = 40, - .baseSpAttack = 83, - .baseSpDefense = 113, - .types = { TYPE_DRAGON, TYPE_STEEL}, - .catchRate = 45, - .expYield = 158, - .evYield_SpDefense = 2, - .itemRare = ITEM_SHED_SHELL, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_GOODRA_HISUIAN] = - { - .baseHP = 80, - .baseAttack = 100, - .baseDefense = 100, - .baseSpeed = 60, - .baseSpAttack = 110, - .baseSpDefense = 150, - .types = { TYPE_DRAGON, TYPE_STEEL}, - .catchRate = 45, - .expYield = 270, - .evYield_SpDefense = 3, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, - .abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, - - [SPECIES_AVALUGG_HISUIAN] = - { - .baseHP = 95, - .baseAttack = 127, - .baseDefense = 184, - .baseSpeed = 38, - .baseSpAttack = 34, - .baseSpDefense = 36, - .types = { TYPE_ICE, TYPE_ROCK}, - .catchRate = 55, - .expYield = 180, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STRONG_JAW, ABILITY_ICE_BODY, ABILITY_STURDY}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, -#endif - -#if P_GEN_7_POKEMON == TRUE - [SPECIES_DECIDUEYE_HISUIAN] = - { - .baseHP = 88, - .baseAttack = 112, - .baseDefense = 80, - .baseSpeed = 60, - .baseSpAttack = 95, - .baseSpDefense = 95, - .types = { TYPE_GRASS, TYPE_FIGHTING}, - .catchRate = 45, - .expYield = 239, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, - .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SCRAPPY}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_HISUIAN_FORM, - }, -#endif - - [SPECIES_PIKACHU_COSPLAY] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_ROCK_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_BELLE] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), - [SPECIES_PIKACHU_POP_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), - [SPECIES_PIKACHU_PH_D] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_LIBRE] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), - - [SPECIES_PIKACHU_ORIGINAL_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), - [SPECIES_PIKACHU_HOENN_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_SINNOH_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_UNOVA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_KALOS_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_ALOLA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - [SPECIES_PIKACHU_PARTNER_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), - [SPECIES_PIKACHU_WORLD_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), - - [SPECIES_PICHU_SPIKY_EARED] = PICHU_SPECIES_INFO(NO_FLIP), - - [SPECIES_UNOWN_B] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_C] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_D] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_E] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_F] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_G] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_H] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_I] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_J] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_K] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_L] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_M] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_N] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_O] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_P] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_Q] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_R] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_S] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_T] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_U] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_V] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_W] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_X] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_Y] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_Z] = UNOWN_SPECIES_INFO(NO_FLIP), - [SPECIES_UNOWN_EMARK] = UNOWN_SPECIES_INFO(FLIP), - [SPECIES_UNOWN_QMARK] = UNOWN_SPECIES_INFO(NO_FLIP), - - [SPECIES_CASTFORM_SUNNY] = CASTFORM_SPECIES_INFO(TYPE_FIRE, BODY_COLOR_RED), - [SPECIES_CASTFORM_RAINY] = CASTFORM_SPECIES_INFO(TYPE_WATER, BODY_COLOR_BLUE), - [SPECIES_CASTFORM_SNOWY] = CASTFORM_SPECIES_INFO(TYPE_ICE, BODY_COLOR_WHITE), - - [SPECIES_DEOXYS_ATTACK] = - { - .baseHP = 50, - .baseAttack = 180, - .baseDefense = 20, - .baseSpeed = 150, - .baseSpAttack = 180, - .baseSpDefense = 20, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 2, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_DEOXYS_DEFENSE] = - { - .baseHP = 50, - .baseAttack = 70, - .baseDefense = 160, - .baseSpeed = 90, - .baseSpAttack = 70, - .baseSpDefense = 160, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 270, - .evYield_Defense = 2, - .evYield_SpDefense = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_DEOXYS_SPEED] = - { - .baseHP = 50, - .baseAttack = 95, - .baseDefense = 90, - .baseSpeed = 180, - .baseSpAttack = 95, - .baseSpDefense = 90, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 3, - .expYield = 270, - .evYield_Speed = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = TRUE, - }, - -#if P_GEN_4_POKEMON == TRUE - [SPECIES_BURMY_SANDY_CLOAK] = BURMY_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_BURMY_TRASH_CLOAK] = BURMY_SPECIES_INFO(BODY_COLOR_RED), - - [SPECIES_WORMADAM_SANDY_CLOAK] = - { - .baseHP = 60, - .baseAttack = 79, - .baseDefense = 105, - .baseSpeed = 36, - .baseSpAttack = 59, - .baseSpDefense = 85, - .types = { TYPE_BUG, TYPE_GROUND}, - .catchRate = 45, - .expYield = 148, - .evYield_Defense = 2, - .itemRare = ITEM_SILVER_POWDER, - .genderRatio = MON_FEMALE, - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_WORMADAM_TRASH_CLOAK] = - { - .baseHP = 60, - .baseAttack = 69, - .baseDefense = 95, - .baseSpeed = 36, - .baseSpAttack = 69, - .baseSpDefense = 95, - .types = { TYPE_BUG, TYPE_STEEL}, - .catchRate = 45, - .expYield = 148, - .evYield_Defense = 1, - .evYield_SpDefense = 1, - .itemRare = ITEM_SILVER_POWDER, - .genderRatio = MON_FEMALE, - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, - .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_CHERRIM_SUNSHINE] = CHERRIM_SPECIES_INFO(BODY_COLOR_PINK), - - [SPECIES_SHELLOS_EAST_SEA] = SHELLOS_SPECIES_INFO(BODY_COLOR_BLUE), - - [SPECIES_GASTRODON_EAST_SEA] = GASTRODON_SPECIES_INFO(BODY_COLOR_BLUE), - - [SPECIES_ROTOM_HEAT] = ROTOM_FORM_SPECIES_INFO(TYPE_FIRE, FLIP), - [SPECIES_ROTOM_WASH] = ROTOM_FORM_SPECIES_INFO(TYPE_WATER, NO_FLIP), - [SPECIES_ROTOM_FROST] = ROTOM_FORM_SPECIES_INFO(TYPE_ICE, FLIP), - [SPECIES_ROTOM_FAN] = ROTOM_FORM_SPECIES_INFO(TYPE_FLYING, FLIP), - [SPECIES_ROTOM_MOW] = ROTOM_FORM_SPECIES_INFO(TYPE_GRASS, FLIP), - - [SPECIES_DIALGA_ORIGIN] = - { - .baseHP = 100, - .baseAttack = 100, - .baseDefense = 120, - .baseSpeed = 90, - .baseSpAttack = 150, - .baseSpDefense = 120, - .types = { TYPE_STEEL, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_PALKIA_ORIGIN] = - { - .baseHP = 90, - .baseAttack = 100, - .baseDefense = 100, - .baseSpeed = 120, - .baseSpAttack = 150, - .baseSpDefense = 120, - .types = { TYPE_WATER, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_GIRATINA_ORIGIN] = - { - .baseHP = 150, - .baseAttack = 120, - .baseDefense = 100, - .baseSpeed = 90, - .baseSpAttack = 120, - .baseSpDefense = 100, - .types = { TYPE_GHOST, TYPE_DRAGON}, - .catchRate = 3, - .expYield = 306, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = FALSE, - }, - - [SPECIES_SHAYMIN_SKY] = - { - .baseHP = 100, - .baseAttack = 103, - .baseDefense = 75, - .baseSpeed = 127, - .baseSpAttack = 120, - .baseSpDefense = 75, - .types = { TYPE_GRASS, TYPE_FLYING}, - .catchRate = 45, - .expYield = 270, - .evYield_HP = 3, - .itemCommon = ITEM_LUM_BERRY, - .itemRare = ITEM_LUM_BERRY, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 100, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = TRUE, - }, - - [SPECIES_ARCEUS_FIGHTING] = ARCEUS_SPECIES_INFO(TYPE_FIGHTING), - [SPECIES_ARCEUS_FLYING] = ARCEUS_SPECIES_INFO(TYPE_FLYING), - [SPECIES_ARCEUS_POISON] = ARCEUS_SPECIES_INFO(TYPE_POISON), - [SPECIES_ARCEUS_GROUND] = ARCEUS_SPECIES_INFO(TYPE_GROUND), - [SPECIES_ARCEUS_ROCK] = ARCEUS_SPECIES_INFO(TYPE_ROCK), - [SPECIES_ARCEUS_BUG] = ARCEUS_SPECIES_INFO(TYPE_BUG), - [SPECIES_ARCEUS_GHOST] = ARCEUS_SPECIES_INFO(TYPE_GHOST), - [SPECIES_ARCEUS_STEEL] = ARCEUS_SPECIES_INFO(TYPE_STEEL), - [SPECIES_ARCEUS_FIRE] = ARCEUS_SPECIES_INFO(TYPE_FIRE), - [SPECIES_ARCEUS_WATER] = ARCEUS_SPECIES_INFO(TYPE_WATER), - [SPECIES_ARCEUS_GRASS] = ARCEUS_SPECIES_INFO(TYPE_GRASS), - [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_SPECIES_INFO(TYPE_ELECTRIC), - [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_SPECIES_INFO(TYPE_PSYCHIC), - [SPECIES_ARCEUS_ICE] = ARCEUS_SPECIES_INFO(TYPE_ICE), - [SPECIES_ARCEUS_DRAGON] = ARCEUS_SPECIES_INFO(TYPE_DRAGON), - [SPECIES_ARCEUS_DARK] = ARCEUS_SPECIES_INFO(TYPE_DARK), - [SPECIES_ARCEUS_FAIRY] = ARCEUS_SPECIES_INFO(TYPE_FAIRY), -#endif - -#if P_GEN_5_POKEMON == TRUE - [SPECIES_BASCULIN_BLUE_STRIPED] = - { - .baseHP = 70, - .baseAttack = 92, - .baseDefense = 65, - .baseSpeed = 98, - .baseSpAttack = 80, - .baseSpDefense = 55, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 25, - .expYield = 161, - .evYield_Speed = 2, - .itemRare = ITEM_DEEP_SEA_SCALE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_ROCK_HEAD, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_BASCULIN_WHITE_STRIPED] = - { - .baseHP = 70, - .baseAttack = 92, - .baseDefense = 65, - .baseSpeed = 98, - .baseSpAttack = 80, - .baseSpDefense = 55, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 25, - .expYield = 161, - .evYield_Speed = 2, - .itemRare = ITEM_DEEP_SEA_SCALE, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 40, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - }, - - [SPECIES_DARMANITAN_ZEN_MODE] = - { - .baseHP = 105, - .baseAttack = 30, - .baseDefense = 105, - .baseSpeed = 55, - .baseSpAttack = 140, - .baseSpDefense = 105, - .types = { TYPE_FIRE, TYPE_PSYCHIC}, - .catchRate = 60, - .expYield = 189, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = - { - .baseHP = 105, - .baseAttack = 160, - .baseDefense = 55, - .baseSpeed = 135, - .baseSpAttack = 30, - .baseSpDefense = 55, - .types = { TYPE_ICE, TYPE_FIRE}, - .catchRate = 60, - .expYield = 189, - .evYield_SpAttack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_GALARIAN_FORM, - }, - - [SPECIES_DEERLING_SUMMER] = DEERLING_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_DEERLING_AUTUMN] = DEERLING_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_DEERLING_WINTER] = DEERLING_SPECIES_INFO(BODY_COLOR_BROWN), - - [SPECIES_SAWSBUCK_SUMMER] = SAWSBUCK_SPECIES_INFO, - [SPECIES_SAWSBUCK_AUTUMN] = SAWSBUCK_SPECIES_INFO, - [SPECIES_SAWSBUCK_WINTER] = SAWSBUCK_SPECIES_INFO, - - [SPECIES_TORNADUS_THERIAN] = - { - .baseHP = 79, - .baseAttack = 100, - .baseDefense = 80, - .baseSpeed = 121, - .baseSpAttack = 110, - .baseSpDefense = 90, - .types = { TYPE_FLYING, TYPE_FLYING}, - .catchRate = 3, - .expYield = 261, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_REGENERATOR, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GREEN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_THUNDURUS_THERIAN] = - { - .baseHP = 79, - .baseAttack = 105, - .baseDefense = 70, - .baseSpeed = 101, - .baseSpAttack = 145, - .baseSpDefense = 80, - .types = { TYPE_ELECTRIC, TYPE_FLYING}, - .catchRate = 3, - .expYield = 261, - .evYield_SpAttack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_LANDORUS_THERIAN] = - { - .baseHP = 89, - .baseAttack = 145, - .baseDefense = 90, - .baseSpeed = 91, - .baseSpAttack = 105, - .baseSpDefense = 80, - .types = { TYPE_GROUND, TYPE_FLYING}, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 3, - .genderRatio = MON_MALE, - .eggCycles = 120, - .friendship = 90, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_KYUREM_WHITE] = - { - .baseHP = 125, - .baseAttack = 120, - .baseDefense = 90, - .baseSpeed = 95, - .baseSpAttack = 170, - .baseSpDefense = 100, - .types = { TYPE_DRAGON, TYPE_ICE}, - .catchRate = 3, - .expYield = 315, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, - }, - - [SPECIES_KYUREM_BLACK] = - { - .baseHP = 125, - .baseAttack = 170, - .baseDefense = 100, - .baseSpeed = 95, - .baseSpAttack = 120, - .baseSpDefense = 90, - .types = { TYPE_DRAGON, TYPE_ICE}, - .catchRate = 3, - .expYield = 315, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, - }, - - [SPECIES_KELDEO_RESOLUTE] = - { - .baseHP = 91, - .baseAttack = 72, - .baseDefense = 90, - .baseSpeed = 108, - .baseSpAttack = 129, - .baseSpDefense = 90, - .types = { TYPE_WATER, TYPE_FIGHTING}, - .catchRate = 3, - .expYield = 261, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 80, - .friendship = 35, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - .flags = SPECIES_FLAG_MYTHICAL, - }, - - [SPECIES_MELOETTA_PIROUETTE] = - { - .baseHP = 100, - .baseAttack = 128, - .baseDefense = 90, - .baseSpeed = 128, - .baseSpAttack = 77, - .baseSpDefense = 77, - .types = { TYPE_NORMAL, TYPE_FIGHTING}, - .catchRate = 3, - .expYield = 270, - .evYield_Attack = 1, - .evYield_Defense = 1, - .evYield_Speed = 1, - .itemCommon = ITEM_STAR_PIECE, - .itemRare = ITEM_STAR_PIECE, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 100, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = TRUE, - .flags = SPECIES_FLAG_MYTHICAL, - }, - - [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_SPECIES_INFO, - [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_SPECIES_INFO, - [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_SPECIES_INFO, - [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_SPECIES_INFO, -#endif - -#if P_GEN_6_POKEMON == TRUE - [SPECIES_GRENINJA_BATTLE_BOND] = - { - .baseHP = 72, - .baseAttack = 95, - .baseDefense = 67, - .baseSpeed = 122, - .baseSpAttack = 103, - .baseSpDefense = 71, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 45, - .expYield = 239, - .evYield_Speed = 3, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, - }, - - [SPECIES_GRENINJA_ASH] = - { - .baseHP = 72, - .baseAttack = 145, - .baseDefense = 67, - .baseSpeed = 132, - .baseSpAttack = 153, - .baseSpDefense = 71, - .types = { TYPE_WATER, TYPE_DARK}, - .catchRate = 45, - .expYield = 288, - .evYield_Speed = 3, - .genderRatio = MON_MALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, - }, - - [SPECIES_VIVILLON_POLAR] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_VIVILLON_TUNDRA] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_VIVILLON_CONTINENTAL] = VIVILLON_SPECIES_INFO(BODY_COLOR_YELLOW), - [SPECIES_VIVILLON_GARDEN] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_VIVILLON_ELEGANT] = VIVILLON_SPECIES_INFO(BODY_COLOR_PURPLE), - [SPECIES_VIVILLON_MEADOW] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), - [SPECIES_VIVILLON_MODERN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_VIVILLON_MARINE] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_VIVILLON_ARCHIPELAGO] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_VIVILLON_HIGH_PLAINS] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_VIVILLON_SANDSTORM] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_VIVILLON_RIVER] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_VIVILLON_MONSOON] = VIVILLON_SPECIES_INFO(BODY_COLOR_GRAY), - [SPECIES_VIVILLON_SAVANNA] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_VIVILLON_SUN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_VIVILLON_OCEAN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_VIVILLON_JUNGLE] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_VIVILLON_FANCY] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), - [SPECIES_VIVILLON_POKE_BALL] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), - - [SPECIES_FLABEBE_YELLOW_FLOWER] = FLABEBE_SPECIES_INFO, - [SPECIES_FLABEBE_ORANGE_FLOWER] = FLABEBE_SPECIES_INFO, - [SPECIES_FLABEBE_BLUE_FLOWER] = FLABEBE_SPECIES_INFO, - [SPECIES_FLABEBE_WHITE_FLOWER] = FLABEBE_SPECIES_INFO, - - [SPECIES_FLOETTE_YELLOW_FLOWER] = FLOETTE_SPECIES_INFO, - [SPECIES_FLOETTE_ORANGE_FLOWER] = FLOETTE_SPECIES_INFO, - [SPECIES_FLOETTE_BLUE_FLOWER] = FLOETTE_SPECIES_INFO, - [SPECIES_FLOETTE_WHITE_FLOWER] = FLOETTE_SPECIES_INFO, - - [SPECIES_FLOETTE_ETERNAL_FLOWER] = - { - .baseHP = 74, - .baseAttack = 65, - .baseDefense = 67, - .baseSpeed = 92, - .baseSpAttack = 125, - .baseSpDefense = 128, - .types = { TYPE_FAIRY, TYPE_FAIRY}, - .catchRate = 120, - .expYield = 243, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_FLORGES_YELLOW_FLOWER] = FLORGES_SPECIES_INFO, - [SPECIES_FLORGES_ORANGE_FLOWER] = FLORGES_SPECIES_INFO, - [SPECIES_FLORGES_BLUE_FLOWER] = FLORGES_SPECIES_INFO, - [SPECIES_FLORGES_WHITE_FLOWER] = FLORGES_SPECIES_INFO, - - [SPECIES_FURFROU_HEART_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_STAR_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_DIAMOND_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_DEBUTANTE_TRIM] = FURFROU_SPECIES_INFO(NO_FLIP), - [SPECIES_FURFROU_MATRON_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_DANDY_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_LA_REINE_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_KABUKI_TRIM] = FURFROU_SPECIES_INFO(FLIP), - [SPECIES_FURFROU_PHARAOH_TRIM] = FURFROU_SPECIES_INFO(FLIP), - - [SPECIES_MEOWSTIC_FEMALE] = - { - .baseHP = 74, - .baseAttack = 48, - .baseDefense = 76, - .baseSpeed = 104, - .baseSpAttack = 83, - .baseSpDefense = 81, - .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, - .catchRate = 75, - .expYield = 163, - .evYield_Speed = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_COMPETITIVE}, - .bodyColor = BODY_COLOR_WHITE, - .noFlip = FALSE, - }, - - [SPECIES_AEGISLASH_BLADE] = - { - .baseHP = 60, - .baseDefense = 50, - .baseSpeed = 60, - #if P_UPDATED_STATS >= GEN_8 - .baseAttack = 140, - .baseSpAttack = 140, - #else - .baseAttack = 150, - .baseSpAttack = 150, - #endif - .baseSpDefense = 50, - .types = { TYPE_STEEL, TYPE_GHOST}, - .catchRate = 45, - .expYield = 234, - .evYield_Defense = 2, - .evYield_SpDefense = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, - .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_PUMPKABOO_SMALL] = - { - .baseHP = 44, - .baseAttack = 66, - .baseDefense = 70, - .baseSpeed = 56, - .baseSpAttack = 44, - .baseSpDefense = 55, - PUMKPABOO_MISC_INFO, - }, - - [SPECIES_PUMPKABOO_LARGE] = - { - .baseHP = 54, - .baseAttack = 66, - .baseDefense = 70, - .baseSpeed = 46, - .baseSpAttack = 44, - .baseSpDefense = 55, - PUMKPABOO_MISC_INFO, - }, - - [SPECIES_PUMPKABOO_SUPER] = - { - .baseHP = 59, - .baseAttack = 66, - .baseDefense = 70, - .baseSpeed = 41, - .baseSpAttack = 44, - .baseSpDefense = 55, - .itemCommon = ITEM_MIRACLE_SEED, - .itemRare = ITEM_MIRACLE_SEED, - PUMKPABOO_MISC_INFO, - }, - - [SPECIES_GOURGEIST_SMALL] = - { - .baseHP = 55, - .baseAttack = 85, - .baseDefense = 122, - .baseSpeed = 99, - .baseSpAttack = 58, - .baseSpDefense = 75, - GOURGEIST_MISC_INFO, - }, - - [SPECIES_GOURGEIST_LARGE] = - { - .baseHP = 75, - .baseAttack = 95, - .baseDefense = 122, - .baseSpeed = 69, - .baseSpAttack = 58, - .baseSpDefense = 75, - GOURGEIST_MISC_INFO, - }, - - [SPECIES_GOURGEIST_SUPER] = - { - .baseHP = 85, - .baseAttack = 100, - .baseDefense = 122, - .baseSpeed = 54, - .baseSpAttack = 58, - .baseSpDefense = 75, - .itemCommon = ITEM_MIRACLE_SEED, - .itemRare = ITEM_MIRACLE_SEED, - GOURGEIST_MISC_INFO, - }, - - [SPECIES_XERNEAS_ACTIVE] = XERNEAS_SPECIES_INFO, - - [SPECIES_ZYGARDE_10] = ZYGARDE_10_SPECIES_INFO(ABILITY_AURA_BREAK), - [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = ZYGARDE_50_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), - [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = ZYGARDE_50_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), - - [SPECIES_ZYGARDE_COMPLETE] = - { - .baseHP = 216, - .baseAttack = 100, - .baseDefense = 121, - .baseSpeed = 85, - .baseSpAttack = 91, - .baseSpDefense = 95, - .types = { TYPE_DRAGON, TYPE_GROUND}, - .catchRate = 3, - .expYield = 319, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLACK, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_HOOPA_UNBOUND] = - { - .baseHP = 80, - .baseAttack = 160, - .baseDefense = 60, - .baseSpeed = 80, - .baseSpAttack = 170, - .baseSpDefense = 130, - .types = { TYPE_PSYCHIC, TYPE_DARK}, - .catchRate = 3, - .expYield = 270, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 100, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_MYTHICAL, - }, -#endif - -#if P_GEN_7_POKEMON == TRUE - [SPECIES_ORICORIO_POM_POM] = ORICORIO_SPECIES_INFO(TYPE_ELECTRIC, BODY_COLOR_YELLOW), - [SPECIES_ORICORIO_PAU] = ORICORIO_SPECIES_INFO(TYPE_PSYCHIC, BODY_COLOR_PINK), - [SPECIES_ORICORIO_SENSU] = ORICORIO_SPECIES_INFO(TYPE_GHOST, BODY_COLOR_PURPLE), - - [SPECIES_ROCKRUFF_OWN_TEMPO] = ROCKRUFF_SPECIES_INFO(ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_NONE), - - [SPECIES_LYCANROC_MIDNIGHT] = - { - .baseHP = 85, - .baseAttack = 115, - .baseDefense = 75, - .baseSpeed = 82, - .baseSpAttack = 55, - .baseSpDefense = 75, - .types = { TYPE_ROCK, TYPE_ROCK}, - .catchRate = 90, - .expYield = 170, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_NO_GUARD}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - }, - - [SPECIES_LYCANROC_DUSK] = - { - .baseHP = 75, - .baseAttack = 117, - .baseDefense = 65, - .baseSpeed = 110, - .baseSpAttack = 55, - .baseSpDefense = 65, - .types = { TYPE_ROCK, TYPE_ROCK}, - .catchRate = 90, - .expYield = 170, - .evYield_Attack = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, - .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BROWN, - .noFlip = FALSE, - }, - - [SPECIES_WISHIWASHI_SCHOOL] = - { - .baseHP = 45, - .baseAttack = 140, - .baseDefense = 130, - .baseSpeed = 30, - .baseSpAttack = 140, - .baseSpDefense = 135, - .types = { TYPE_WATER, TYPE_WATER}, - .catchRate = 60, - .expYield = 61, - .evYield_HP = 1, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 15, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, - .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_SILVALLY_FIGHTING] = SILVALLY_SPECIES_INFO(TYPE_FIGHTING), - [SPECIES_SILVALLY_FLYING] = SILVALLY_SPECIES_INFO(TYPE_FLYING), - [SPECIES_SILVALLY_POISON] = SILVALLY_SPECIES_INFO(TYPE_POISON), - [SPECIES_SILVALLY_GROUND] = SILVALLY_SPECIES_INFO(TYPE_GROUND), - [SPECIES_SILVALLY_ROCK] = SILVALLY_SPECIES_INFO(TYPE_ROCK), - [SPECIES_SILVALLY_BUG] = SILVALLY_SPECIES_INFO(TYPE_BUG), - [SPECIES_SILVALLY_GHOST] = SILVALLY_SPECIES_INFO(TYPE_GHOST), - [SPECIES_SILVALLY_STEEL] = SILVALLY_SPECIES_INFO(TYPE_STEEL), - [SPECIES_SILVALLY_FIRE] = SILVALLY_SPECIES_INFO(TYPE_FIRE), - [SPECIES_SILVALLY_WATER] = SILVALLY_SPECIES_INFO(TYPE_WATER), - [SPECIES_SILVALLY_GRASS] = SILVALLY_SPECIES_INFO(TYPE_GRASS), - [SPECIES_SILVALLY_ELECTRIC] = SILVALLY_SPECIES_INFO(TYPE_ELECTRIC), - [SPECIES_SILVALLY_PSYCHIC] = SILVALLY_SPECIES_INFO(TYPE_PSYCHIC), - [SPECIES_SILVALLY_ICE] = SILVALLY_SPECIES_INFO(TYPE_ICE), - [SPECIES_SILVALLY_DRAGON] = SILVALLY_SPECIES_INFO(TYPE_DRAGON), - [SPECIES_SILVALLY_DARK] = SILVALLY_SPECIES_INFO(TYPE_DARK), - [SPECIES_SILVALLY_FAIRY] = SILVALLY_SPECIES_INFO(TYPE_FAIRY), - - [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_SPECIES_INFO, - [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_SPECIES_INFO, - [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_SPECIES_INFO, - [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_SPECIES_INFO, - [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_SPECIES_INFO, - [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_SPECIES_INFO, - - [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), - [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_YELLOW), - [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_PURPLE), - - [SPECIES_MIMIKYU_BUSTED] = MIMIKYU_SPECIES_INFO, - - [SPECIES_NECROZMA_DUSK_MANE] = - { - .baseHP = 97, - .baseAttack = 157, - .baseDefense = 127, - .baseSpeed = 77, - .baseSpAttack = 113, - .baseSpDefense = 109, - .types = { TYPE_PSYCHIC, TYPE_STEEL}, - .catchRate = 255, - .expYield = 306, - .evYield_Attack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, - }, - - [SPECIES_NECROZMA_DAWN_WINGS] = - { - .baseHP = 97, - .baseAttack = 113, - .baseDefense = 109, - .baseSpeed = 77, - .baseSpAttack = 157, - .baseSpDefense = 127, - .types = { TYPE_PSYCHIC, TYPE_GHOST}, - .catchRate = 255, - .expYield = 306, - .evYield_SpAttack = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, - }, - - [SPECIES_NECROZMA_ULTRA] = - { - .baseHP = 97, - .baseAttack = 167, - .baseDefense = 97, - .baseSpeed = 129, - .baseSpAttack = 167, - .baseSpDefense = 97, - .types = { TYPE_PSYCHIC, TYPE_DRAGON}, - .catchRate = 255, - .expYield = 339, - .evYield_Attack = 1, - .evYield_Speed = 1, - .evYield_SpAttack = 1, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_YELLOW, - .noFlip = TRUE, - .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_ULTRA_BURST, - }, - - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_SPECIES_INFO(BODY_COLOR_RED), -#endif - -#if P_GEN_8_POKEMON == TRUE - [SPECIES_CRAMORANT_GULPING] = CRAMORANT_SPECIES_INFO, - [SPECIES_CRAMORANT_GORGING] = CRAMORANT_SPECIES_INFO, - - [SPECIES_TOXTRICITY_LOW_KEY] = TOXTRICITY_SPECIES_INFO(ABILITY_MINUS), - - [SPECIES_SINISTEA_ANTIQUE] = SINISTEA_SPECIES_INFO, - - [SPECIES_POLTEAGEIST_ANTIQUE] = POLTEAGEIST_SPECIES_INFO, - - [SPECIES_ALCREMIE_RUBY_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_PINK), - [SPECIES_ALCREMIE_MATCHA_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_GREEN), - [SPECIES_ALCREMIE_MINT_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_ALCREMIE_LEMON_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), - [SPECIES_ALCREMIE_SALTED_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_WHITE), - [SPECIES_ALCREMIE_RUBY_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), - - [SPECIES_EISCUE_NOICE_FACE] = - { - .baseHP = 75, - .baseAttack = 80, - .baseDefense = 70, - .baseSpeed = 130, - .baseSpAttack = 65, - .baseSpDefense = 50, - .types = { TYPE_ICE, TYPE_ICE}, - .catchRate = 60, - .expYield = 165, - .evYield_Defense = 2, - .genderRatio = PERCENT_FEMALE(50), - .eggCycles = 25, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, - .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - }, - - [SPECIES_INDEEDEE_FEMALE] = - { - .baseHP = 70, - .baseAttack = 55, - .baseDefense = 65, - .baseSpeed = 85, - .baseSpAttack = 95, - .baseSpDefense = 105, - .types = { TYPE_PSYCHIC, TYPE_NORMAL}, - .catchRate = 30, - .expYield = 166, - .evYield_SpDefense = 2, - .genderRatio = MON_FEMALE, - .eggCycles = 40, - .friendship = 140, - .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, - .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - }, - - [SPECIES_MORPEKO_HANGRY] = MORPEKO_SPECIES_INFO, - - [SPECIES_ZACIAN_CROWNED_SWORD] = - { - .baseHP = 92, - .baseAttack = 170, - .baseDefense = 115, - .baseSpeed = 148, - .baseSpAttack = 80, - .baseSpDefense = 115, - .types = { TYPE_FAIRY, TYPE_STEEL}, - .catchRate = 10, - .expYield = 360, - .evYield_Speed = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, - .bodyColor = BODY_COLOR_BLUE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = - { - .baseHP = 92, - .baseAttack = 130, - .baseDefense = 145, - .baseSpeed = 128, - .baseSpAttack = 80, - .baseSpDefense = 145, - .types = { TYPE_FIGHTING, TYPE_STEEL}, - .catchRate = 10, - .expYield = 360, - .evYield_Speed = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, - .bodyColor = BODY_COLOR_RED, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_ETERNATUS_ETERNAMAX] = - { - .baseHP = 255, - .baseAttack = 115, - .baseDefense = 250, - .baseSpeed = 130, - .baseSpAttack = 125, - .baseSpDefense = 250, - .types = { TYPE_POISON, TYPE_DRAGON}, - .catchRate = 255, - .expYield = 563, - .evYield_HP = 3, - .genderRatio = MON_GENDERLESS, - .eggCycles = 120, - .friendship = 0, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, - .bodyColor = BODY_COLOR_PURPLE, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = - { - .baseHP = 100, - .baseAttack = 130, - .baseDefense = 100, - .baseSpeed = 97, - .baseSpAttack = 63, - .baseSpDefense = 60, - .types = { TYPE_FIGHTING, TYPE_WATER}, - .catchRate = 3, - .expYield = 275, - .evYield_Attack = 3, - .genderRatio = PERCENT_FEMALE(12.5), - .eggCycles = 120, - .friendship = STANDARD_FRIENDSHIP, - .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, - .bodyColor = BODY_COLOR_GRAY, - .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, - }, - - [SPECIES_ZARUDE_DADA] = ZARUDE_SPECIES_INFO, - [SPECIES_CALYREX_ICE_RIDER] = { .baseHP = 100, @@ -24722,28 +25327,2641 @@ const struct SpeciesInfo gSpeciesInfo[] = .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_CANNOT_BE_TRADED, }, +#endif //P_FAMILY_CALYREX + +#if P_FAMILY_ENAMORUS +#define ENAMORUS_MISC_INFO \ + .types = { TYPE_FAIRY, TYPE_FLYING}, \ + .catchRate = 3, \ + .expYield = 116, \ + .evYield_SpAttack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .bodyColor = BODY_COLOR_PINK, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY + + [SPECIES_ENAMORUS_INCARNATE] = + { + ENAMORUS_MISC_INFO, + .baseHP = 74, + .baseAttack = 115, + .baseDefense = 70, + .baseSpeed = 106, + .baseSpAttack = 135, + .baseSpDefense = 80, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_CONTRARY}, + }, [SPECIES_ENAMORUS_THERIAN] = { + ENAMORUS_MISC_INFO, .baseHP = 74, .baseAttack = 115, .baseDefense = 110, .baseSpeed = 46, .baseSpAttack = 135, .baseSpDefense = 100, - .types = { TYPE_FAIRY, TYPE_FLYING}, - .catchRate = 3, - .expYield = 270, - .evYield_SpAttack = 3, + .abilities = {ABILITY_OVERCOAT, ABILITY_NONE, ABILITY_NONE}, + }, +#endif //P_FAMILY_ENAMORUS + +#if P_FAMILY_SPRIGATITO + [SPECIES_SPRIGATITO] = + { + .baseHP = 40, + .baseAttack = 61, + .baseDefense = 54, + .baseSpeed = 65, + .baseSpAttack = 45, + .baseSpDefense = 45, + .types = { TYPE_GRASS, TYPE_GRASS }, + .catchRate = 45, + .expYield = 62, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_PROTEAN}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_FLORAGATO] = + { + .baseHP = 61, + .baseAttack = 80, + .baseDefense = 63, + .baseSpeed = 83, + .baseSpAttack = 60, + .baseSpDefense = 63, + .types = { TYPE_GRASS, TYPE_GRASS }, + .catchRate = 45, + .expYield = 144, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_PROTEAN}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_MEOWSCARADA] = + { + .baseHP = 76, + .baseAttack = 110, + .baseDefense = 70, + .baseSpeed = 123, + .baseSpAttack = 81, + .baseSpDefense = 70, + .types = { TYPE_GRASS, TYPE_DARK }, + .catchRate = 45, + .expYield = 265, + .evYield_Speed = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_PROTEAN}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_SPRIGATITO + +#if P_FAMILY_FUECOCO + [SPECIES_FUECOCO] = + { + .baseHP = 67, + .baseAttack = 45, + .baseDefense = 59, + .baseSpeed = 36, + .baseSpAttack = 63, + .baseSpDefense = 40, + .types = { TYPE_FIRE, TYPE_FIRE }, + .catchRate = 45, + .expYield = 62, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_UNAWARE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, + + [SPECIES_CROCALOR] = + { + .baseHP = 81, + .baseAttack = 55, + .baseDefense = 78, + .baseSpeed = 49, + .baseSpAttack = 90, + .baseSpDefense = 58, + .types = { TYPE_FIRE, TYPE_FIRE }, + .catchRate = 45, + .expYield = 144, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_UNAWARE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, + + [SPECIES_SKELEDIRGE] = + { + .baseHP = 104, + .baseAttack = 75, + .baseDefense = 100, + .baseSpeed = 66, + .baseSpAttack = 110, + .baseSpDefense = 75, + .types = { TYPE_FIRE, TYPE_GHOST }, + .catchRate = 45, + .expYield = 265, + .evYield_SpAttack = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_UNAWARE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, +#endif //P_FAMILY_FUECOCO + +#if P_FAMILY_QUAXLY + [SPECIES_QUAXLY] = + { + .baseHP = 55, + .baseAttack = 65, + .baseDefense = 45, + .baseSpeed = 50, + .baseSpAttack = 50, + .baseSpDefense = 45, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 45, + .expYield = 62, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_MOXIE}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + + [SPECIES_QUAXWELL] = + { + .baseHP = 70, + .baseAttack = 85, + .baseDefense = 65, + .baseSpeed = 65, + .baseSpAttack = 65, + .baseSpDefense = 60, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 45, + .expYield = 144, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_MOXIE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, + + [SPECIES_QUAQUAVAL] = + { + .baseHP = 85, + .baseAttack = 120, + .baseDefense = 80, + .baseSpeed = 85, + .baseSpAttack = 85, + .baseSpDefense = 75, + .types = { TYPE_WATER, TYPE_FIGHTING }, + .catchRate = 45, + .expYield = 265, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(12.5), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_MOXIE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_QUAXLY + +#if P_FAMILY_LECHONK + [SPECIES_LECHONK] = + { + .baseHP = 54, + .baseAttack = 45, + .baseDefense = 40, + .baseSpeed = 35, + .baseSpAttack = 35, + .baseSpDefense = 45, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .catchRate = 255, + .expYield = 51, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_AROMA_VEIL, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + +#define OINKOLOGNE_MISC_INFO \ + .types = { TYPE_NORMAL, TYPE_NORMAL }, \ + .catchRate = 100, \ + .expYield = 171, \ + .evYield_HP = 2, \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .bodyColor = BODY_COLOR_GRAY, \ + .noFlip = FALSE + + [SPECIES_OINKOLOGNE_MALE] = + { + OINKOLOGNE_MISC_INFO, + .baseHP = 110, + .baseAttack = 100, + .baseDefense = 75, + .baseSpeed = 65, + .baseSpAttack = 59, + .baseSpDefense = 80, + .genderRatio = PERCENT_FEMALE(0), + .abilities = {ABILITY_LINGERING_AROMA, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, + }, + + [SPECIES_OINKOLOGNE_FEMALE] = + { + OINKOLOGNE_MISC_INFO, + .baseHP = 115, + .baseAttack = 90, + .baseDefense = 70, + .baseSpeed = 65, + .baseSpAttack = 59, + .baseSpDefense = 90, + .genderRatio = PERCENT_FEMALE(100), + .abilities = {ABILITY_AROMA_VEIL, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, + }, +#endif //P_FAMILY_LECHONK + +#if P_FAMILY_TAROUNTULA + [SPECIES_TAROUNTULA] = + { + .baseHP = 35, + .baseAttack = 41, + .baseDefense = 45, + .baseSpeed = 20, + .baseSpAttack = 29, + .baseSpDefense = 40, + .types = { TYPE_BUG, TYPE_BUG }, + .catchRate = 255, + .expYield = 42, + .evYield_Defense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_ERRATIC, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_STAKEOUT}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + + [SPECIES_SPIDOPS] = + { + .baseHP = 60, + .baseAttack = 79, + .baseDefense = 92, + .baseSpeed = 35, + .baseSpAttack = 52, + .baseSpDefense = 86, + .types = { TYPE_BUG, TYPE_BUG }, + .catchRate = 120, + .expYield = 141, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_ERRATIC, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_STAKEOUT}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TAROUNTULA + +#if P_FAMILY_NYMBLE + [SPECIES_NYMBLE] = + { + .baseHP = 33, + .baseAttack = 46, + .baseDefense = 40, + .baseSpeed = 45, + .baseSpAttack = 21, + .baseSpDefense = 25, + .types = { TYPE_BUG, TYPE_BUG }, + .catchRate = 190, + .expYield = 42, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 20, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TINTED_LENS}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_LOKIX] = + { + .baseHP = 71, + .baseAttack = 102, + .baseDefense = 78, + .baseSpeed = 92, + .baseSpAttack = 52, + .baseSpDefense = 55, + .types = { TYPE_BUG, TYPE_DARK }, + .catchRate = 30, + .expYield = 158, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = 0, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TINTED_LENS}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_NYMBLE + +#if P_FAMILY_PAWMI + [SPECIES_PAWMI] = + { + .baseHP = 45, + .baseAttack = 50, + .baseDefense = 20, + .baseSpeed = 60, + .baseSpAttack = 40, + .baseSpDefense = 25, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, + .catchRate = 190, + .expYield = 48, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_STATIC, ABILITY_NATURAL_CURE, ABILITY_IRON_FIST}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_PAWMO] = + { + .baseHP = 60, + .baseAttack = 75, + .baseDefense = 40, + .baseSpeed = 85, + .baseSpAttack = 50, + .baseSpDefense = 40, + .types = { TYPE_ELECTRIC, TYPE_FIGHTING }, + .catchRate = 80, + .expYield = 123, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NATURAL_CURE, ABILITY_IRON_FIST}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_PAWMOT] = + { + .baseHP = 70, + .baseAttack = 115, + .baseDefense = 70, + .baseSpeed = 105, + .baseSpAttack = 70, + .baseSpDefense = 60, + .types = { TYPE_ELECTRIC, TYPE_FIGHTING }, + .catchRate = 45, + .expYield = 245, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 15, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NATURAL_CURE, ABILITY_IRON_FIST}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, +#endif //P_FAMILY_PAWMI + +#if P_FAMILY_TANDEMAUS + [SPECIES_TANDEMAUS] = + { + .baseHP = 50, + .baseAttack = 50, + .baseDefense = 45, + .baseSpeed = 75, + .baseSpAttack = 40, + .baseSpDefense = 45, + .types = { TYPE_NORMAL, TYPE_NORMAL }, + .catchRate = 150, + .expYield = 61, + .evYield_Speed = 1, + .genderRatio = MON_GENDERLESS, + .eggCycles = 10, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP, ABILITY_OWN_TEMPO}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + +#define MAUSHOLD_SPECIES_INFO \ + { \ + .baseHP = 74, \ + .baseAttack = 75, \ + .baseDefense = 70, \ + .baseSpeed = 111, \ + .baseSpAttack = 65, \ + .baseSpDefense = 75, \ + .types = { TYPE_NORMAL, TYPE_NORMAL }, \ + .catchRate = 75, \ + .expYield = 165, \ + .evYield_Speed = 2, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ + .abilities = {ABILITY_FRIEND_GUARD, ABILITY_CHEEK_POUCH, ABILITY_TECHNICIAN}, \ + .bodyColor = BODY_COLOR_WHITE, \ + .noFlip = FALSE, \ + } + + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = MAUSHOLD_SPECIES_INFO, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = MAUSHOLD_SPECIES_INFO, +#endif //P_FAMILY_TANDEMAUS + +#if P_FAMILY_FIDOUGH + [SPECIES_FIDOUGH] = + { + .baseHP = 37, + .baseAttack = 55, + .baseDefense = 70, + .baseSpeed = 65, + .baseSpAttack = 30, + .baseSpDefense = 55, + .types = { TYPE_FAIRY, TYPE_FAIRY }, + .catchRate = 190, + .expYield = 62, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_KLUTZ}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_DACHSBUN] = + { + .baseHP = 57, + .baseAttack = 80, + .baseDefense = 115, + .baseSpeed = 95, + .baseSpAttack = 50, + .baseSpDefense = 80, + .types = { TYPE_FAIRY, TYPE_FAIRY }, + .catchRate = 90, + .expYield = 167, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_WELL_BAKED_BODY, ABILITY_NONE, ABILITY_AROMA_VEIL}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_FIDOUGH + +#if P_FAMILY_SMOLIV + [SPECIES_SMOLIV] = + { + .baseHP = 41, + .baseAttack = 35, + .baseDefense = 45, + .baseSpeed = 30, + .baseSpAttack = 58, + .baseSpDefense = 51, + .types = { TYPE_GRASS, TYPE_NORMAL }, + .catchRate = 255, + .expYield = 52, + .evYield_SpAttack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE, ABILITY_HARVEST}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_DOLLIV] = + { + .baseHP = 52, + .baseAttack = 53, + .baseDefense = 60, + .baseSpeed = 33, + .baseSpAttack = 78, + .baseSpDefense = 78, + .types = { TYPE_GRASS, TYPE_NORMAL }, + .catchRate = 120, + .expYield = 124, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE, ABILITY_HARVEST}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_ARBOLIVA] = + { + .baseHP = 78, + .baseAttack = 69, + .baseDefense = 90, + .baseSpeed = 39, + .baseSpAttack = 125, + .baseSpDefense = 109, + .types = { TYPE_GRASS, TYPE_NORMAL }, + .catchRate = 45, + .expYield = 255, + .evYield_SpAttack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_SEED_SOWER, ABILITY_NONE, ABILITY_HARVEST}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_SMOLIV + +#if P_FAMILY_SQUAWKABILLY +#define SQUAWKABILLY_MISC_INFO \ + .baseHP = 82, \ + .baseAttack = 96, \ + .baseDefense = 51, \ + .baseSpeed = 92, \ + .baseSpAttack = 45, \ + .baseSpDefense = 51, \ + .types = { TYPE_NORMAL, TYPE_FLYING }, \ + .catchRate = 190, \ + .expYield = 146, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_ERRATIC, \ + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, \ + .noFlip = FALSE + + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = + { + SQUAWKABILLY_MISC_INFO, + .abilities = {ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS}, + .bodyColor = BODY_COLOR_GREEN, + }, + + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = + { + SQUAWKABILLY_MISC_INFO, + .abilities = {ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS}, + .bodyColor = BODY_COLOR_BLUE, + }, + + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = + { + SQUAWKABILLY_MISC_INFO, + .abilities = {ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE}, + .bodyColor = BODY_COLOR_YELLOW, + }, + + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = + { + SQUAWKABILLY_MISC_INFO, + .abilities = {ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE}, + .bodyColor = BODY_COLOR_WHITE, + }, +#endif //P_FAMILY_SQUAWKABILLY + +#if P_FAMILY_NACLI + [SPECIES_NACLI] = + { + .baseHP = 55, + .baseAttack = 55, + .baseDefense = 75, + .baseSpeed = 25, + .baseSpAttack = 35, + .baseSpDefense = 35, + .types = { TYPE_ROCK, TYPE_ROCK }, + .catchRate = 255, + .expYield = 56, + .evYield_Defense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_PURIFYING_SALT, ABILITY_STURDY, ABILITY_CLEAR_BODY}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_NACLSTACK] = + { + .baseHP = 60, + .baseAttack = 60, + .baseDefense = 100, + .baseSpeed = 35, + .baseSpAttack = 35, + .baseSpDefense = 65, + .types = { TYPE_ROCK, TYPE_ROCK }, + .catchRate = 120, + .expYield = 124, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_PURIFYING_SALT, ABILITY_STURDY, ABILITY_CLEAR_BODY}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_GARGANACL] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 130, + .baseSpeed = 35, + .baseSpAttack = 45, + .baseSpDefense = 90, + .types = { TYPE_ROCK, TYPE_ROCK }, + .catchRate = 45, + .expYield = 250, + .evYield_Defense = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_PURIFYING_SALT, ABILITY_STURDY, ABILITY_CLEAR_BODY}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_NACLI + +#if P_FAMILY_CHARCADET + [SPECIES_CHARCADET] = + { + .baseHP = 40, + .baseAttack = 50, + .baseDefense = 40, + .baseSpeed = 35, + .baseSpAttack = 50, + .baseSpDefense = 40, + .types = { TYPE_FIRE, TYPE_FIRE }, + .catchRate = 90, + .expYield = 51, + .evYield_SpAttack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_FLAME_BODY}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, + + [SPECIES_ARMAROUGE] = + { + .baseHP = 85, + .baseAttack = 60, + .baseDefense = 100, + .baseSpeed = 75, + .baseSpAttack = 125, + .baseSpDefense = 80, + .types = { TYPE_FIRE, TYPE_PSYCHIC }, + .catchRate = 25, + .expYield = 263, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = 20, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_WEAK_ARMOR}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, + + [SPECIES_CERULEDGE] = + { + .baseHP = 75, + .baseAttack = 125, + .baseDefense = 80, + .baseSpeed = 85, + .baseSpAttack = 60, + .baseSpDefense = 100, + .types = { TYPE_FIRE, TYPE_GHOST }, + .catchRate = 25, + .expYield = 263, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = 20, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_WEAK_ARMOR}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_CHARCADET + +#if P_FAMILY_TADBULB + [SPECIES_TADBULB] = + { + .baseHP = 61, + .baseAttack = 31, + .baseDefense = 41, + .baseSpeed = 45, + .baseSpAttack = 59, + .baseSpDefense = 35, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, + .catchRate = 190, + .expYield = 54, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_STATIC, ABILITY_DAMP}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_BELLIBOLT] = + { + .baseHP = 109, + .baseAttack = 64, + .baseDefense = 91, + .baseSpeed = 45, + .baseSpAttack = 103, + .baseSpDefense = 83, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, + .catchRate = 50, + .expYield = 173, + .evYield_HP = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, + .abilities = {ABILITY_ELECTROMORPHOSIS, ABILITY_STATIC, ABILITY_DAMP}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TADBULB + +#if P_FAMILY_WATTREL + [SPECIES_WATTREL] = + { + .baseHP = 40, + .baseAttack = 40, + .baseDefense = 35, + .baseSpeed = 70, + .baseSpAttack = 55, + .baseSpDefense = 40, + .types = { TYPE_ELECTRIC, TYPE_FLYING }, + .catchRate = 180, + .expYield = 56, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, + .abilities = {ABILITY_WIND_POWER, ABILITY_VOLT_ABSORB, ABILITY_COMPETITIVE}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, + + [SPECIES_KILOWATTREL] = + { + .baseHP = 70, + .baseAttack = 70, + .baseDefense = 60, + .baseSpeed = 125, + .baseSpAttack = 105, + .baseSpDefense = 60, + .types = { TYPE_ELECTRIC, TYPE_FLYING }, + .catchRate = 90, + .expYield = 172, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, + .abilities = {ABILITY_WIND_POWER, ABILITY_VOLT_ABSORB, ABILITY_COMPETITIVE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, +#endif //P_FAMILY_WATTREL + +#if P_FAMILY_MASCHIFF + [SPECIES_MASCHIFF] = + { + .baseHP = 60, + .baseAttack = 78, + .baseDefense = 60, + .baseSpeed = 51, + .baseSpAttack = 40, + .baseSpDefense = 51, + .types = { TYPE_DARK, TYPE_DARK }, + .catchRate = 150, + .expYield = 68, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY, ABILITY_STAKEOUT}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_MABOSSTIFF] = + { + .baseHP = 80, + .baseAttack = 120, + .baseDefense = 90, + .baseSpeed = 85, + .baseSpAttack = 60, + .baseSpDefense = 70, + .types = { TYPE_DARK, TYPE_DARK }, + .catchRate = 75, + .expYield = 177, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_INTIMIDATE, ABILITY_GUARD_DOG, ABILITY_STAKEOUT}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_MASCHIFF + +#if P_FAMILY_SHROODLE + [SPECIES_SHROODLE] = + { + .baseHP = 40, + .baseAttack = 65, + .baseDefense = 35, + .baseSpeed = 75, + .baseSpAttack = 40, + .baseSpDefense = 35, + .types = { TYPE_POISON, TYPE_NORMAL }, + .catchRate = 190, + .expYield = 58, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_UNBURDEN, ABILITY_PICKPOCKET, ABILITY_PRANKSTER}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_GRAFAIAI] = + { + .baseHP = 63, + .baseAttack = 95, + .baseDefense = 65, + .baseSpeed = 110, + .baseSpAttack = 80, + .baseSpDefense = 72, + .types = { TYPE_POISON, TYPE_NORMAL }, + .catchRate = 90, + .expYield = 170, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_UNBURDEN, ABILITY_POISON_TOUCH, ABILITY_PRANKSTER}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_SHROODLE + +#if P_FAMILY_BRAMBLIN + [SPECIES_BRAMBLIN] = + { + .baseHP = 40, + .baseAttack = 65, + .baseDefense = 30, + .baseSpeed = 60, + .baseSpAttack = 45, + .baseSpDefense = 35, + .types = { TYPE_GRASS, TYPE_GHOST }, + .catchRate = 190, + .expYield = 55, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_WIND_RIDER, ABILITY_NONE, ABILITY_INFILTRATOR}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_BRAMBLEGHAST] = + { + .baseHP = 55, + .baseAttack = 115, + .baseDefense = 70, + .baseSpeed = 90, + .baseSpAttack = 80, + .baseSpDefense = 70, + .types = { TYPE_GRASS, TYPE_GHOST }, + .catchRate = 45, + .expYield = 168, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_WIND_RIDER, ABILITY_NONE, ABILITY_INFILTRATOR}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_BRAMBLIN + +#if P_FAMILY_TOEDSCOOL + [SPECIES_TOEDSCOOL] = + { + .baseHP = 40, + .baseAttack = 40, + .baseDefense = 35, + .baseSpeed = 70, + .baseSpAttack = 50, + .baseSpDefense = 100, + .types = { TYPE_GROUND, TYPE_GRASS }, + .catchRate = 190, + .expYield = 67, + .evYield_SpDefense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_MYCELIUM_MIGHT, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_TOEDSCRUEL] = + { + .baseHP = 80, + .baseAttack = 70, + .baseDefense = 65, + .baseSpeed = 100, + .baseSpAttack = 80, + .baseSpDefense = 120, + .types = { TYPE_GROUND, TYPE_GRASS }, + .catchRate = 90, + .expYield = 180, + .evYield_SpDefense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_MYCELIUM_MIGHT, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TOEDSCOOL + +#if P_FAMILY_KLAWF + [SPECIES_KLAWF] = + { + .baseHP = 70, + .baseAttack = 100, + .baseDefense = 115, + .baseSpeed = 75, + .baseSpAttack = 35, + .baseSpDefense = 55, + .types = { TYPE_ROCK, TYPE_ROCK }, + .catchRate = 120, + .expYield = 158, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_ANGER_SHELL, ABILITY_SHELL_ARMOR, ABILITY_REGENERATOR}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, +#endif //P_FAMILY_KLAWF + +#if P_FAMILY_CAPSAKID + [SPECIES_CAPSAKID] = + { + .baseHP = 50, + .baseAttack = 62, + .baseDefense = 40, + .baseSpeed = 50, + .baseSpAttack = 62, + .baseSpDefense = 40, + .types = { TYPE_GRASS, TYPE_GRASS }, + .catchRate = 190, + .expYield = 61, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_INSOMNIA, ABILITY_KLUTZ}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, + + [SPECIES_SCOVILLAIN] = + { + .baseHP = 65, + .baseAttack = 108, + .baseDefense = 65, + .baseSpeed = 75, + .baseSpAttack = 108, + .baseSpDefense = 65, + .types = { TYPE_GRASS, TYPE_FIRE }, + .catchRate = 75, + .expYield = 170, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_INSOMNIA, ABILITY_MOODY}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_CAPSAKID + +#if P_FAMILY_RELLOR + [SPECIES_RELLOR] = + { + .baseHP = 41, + .baseAttack = 50, + .baseDefense = 60, + .baseSpeed = 30, + .baseSpAttack = 31, + .baseSpDefense = 58, + .types = { TYPE_BUG, TYPE_BUG }, + .catchRate = 190, + .expYield = 54, + .evYield_Defense = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_SHED_SKIN}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + }, + + [SPECIES_RABSCA] = + { + .baseHP = 75, + .baseAttack = 50, + .baseDefense = 85, + .baseSpeed = 45, + .baseSpAttack = 115, + .baseSpDefense = 100, + .types = { TYPE_BUG, TYPE_PSYCHIC }, + .catchRate = 45, + .expYield = 165, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE, ABILITY_TELEPATHY}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_RELLOR + +#if P_FAMILY_FLITTLE + [SPECIES_FLITTLE] = + { + .baseHP = 30, + .baseAttack = 35, + .baseDefense = 30, + .baseSpeed = 75, + .baseSpAttack = 55, + .baseSpDefense = 30, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 120, + .expYield = 51, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_ANTICIPATION, ABILITY_FRISK, ABILITY_SPEED_BOOST}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, + + [SPECIES_ESPATHRA] = + { + .baseHP = 95, + .baseAttack = 60, + .baseDefense = 60, + .baseSpeed = 105, + .baseSpAttack = 101, + .baseSpDefense = 60, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 60, + .expYield = 168, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_OPPORTUNIST, ABILITY_FRISK, ABILITY_SPEED_BOOST}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, +#endif //P_FAMILY_FLITTLE + +#if P_FAMILY_TINKATINK + [SPECIES_TINKATINK] = + { + .baseHP = 50, + .baseAttack = 45, + .baseDefense = 45, + .baseSpeed = 58, + .baseSpAttack = 35, + .baseSpDefense = 64, + .types = { TYPE_FAIRY, TYPE_STEEL }, + .catchRate = 190, + .expYield = 59, + .evYield_SpDefense = 1, .genderRatio = MON_FEMALE, - .eggCycles = 120, - .friendship = 90, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_OWN_TEMPO, ABILITY_PICKPOCKET}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, + + [SPECIES_TINKATUFF] = + { + .baseHP = 65, + .baseAttack = 55, + .baseDefense = 55, + .baseSpeed = 78, + .baseSpAttack = 45, + .baseSpDefense = 82, + .types = { TYPE_FAIRY, TYPE_STEEL }, + .catchRate = 90, + .expYield = 133, + .evYield_SpDefense = 2, + .genderRatio = MON_FEMALE, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_OWN_TEMPO, ABILITY_PICKPOCKET}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, + + [SPECIES_TINKATON] = + { + .baseHP = 85, + .baseAttack = 75, + .baseDefense = 77, + .baseSpeed = 94, + .baseSpAttack = 70, + .baseSpDefense = 105, + .types = { TYPE_FAIRY, TYPE_STEEL }, + .catchRate = 45, + .expYield = 253, + .evYield_SpDefense = 3, + .genderRatio = MON_FEMALE, + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_OWN_TEMPO, ABILITY_PICKPOCKET}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_TINKATINK + +#if P_FAMILY_WIGLETT + [SPECIES_WIGLETT] = + { + .baseHP = 10, + .baseAttack = 55, + .baseDefense = 25, + .baseSpeed = 95, + .baseSpAttack = 35, + .baseSpDefense = 25, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 255, + .expYield = 49, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_GOOEY, ABILITY_RATTLED, ABILITY_SAND_VEIL}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + + [SPECIES_WUGTRIO] = + { + .baseHP = 35, + .baseAttack = 100, + .baseDefense = 50, + .baseSpeed = 120, + .baseSpAttack = 50, + .baseSpDefense = 70, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 50, + .expYield = 149, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, + .abilities = {ABILITY_GOOEY, ABILITY_RATTLED, ABILITY_SAND_VEIL}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + }, +#endif //P_FAMILY_WIGLETT + +#if P_FAMILY_BOMBIRDIER + [SPECIES_BOMBIRDIER] = + { + .baseHP = 70, + .baseAttack = 103, + .baseDefense = 85, + .baseSpeed = 82, + .baseSpAttack = 60, + .baseSpDefense = 85, + .types = { TYPE_FLYING, TYPE_DARK }, + .catchRate = 25, + .expYield = 243, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_BIG_PECKS, ABILITY_KEEN_EYE, ABILITY_ROCKY_PAYLOAD}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_BOMBIRDIER + +#if P_FAMILY_FINIZEN + [SPECIES_FINIZEN] = + { + .baseHP = 70, + .baseAttack = 45, + .baseDefense = 40, + .baseSpeed = 75, + .baseSpAttack = 45, + .baseSpDefense = 40, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 200, + .expYield = 63, + .evYield_Speed = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_WATER_VEIL, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, + +#define PALAFIN_MISC_INFO \ + .types = { TYPE_WATER, TYPE_WATER }, \ + .catchRate = 45, \ + .evYield_HP = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 40, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, \ + .abilities = {ABILITY_ZERO_TO_HERO, ABILITY_NONE}, \ + .bodyColor = BODY_COLOR_BLUE, \ + .noFlip = FALSE + + [SPECIES_PALAFIN_ZERO] = + { + PALAFIN_MISC_INFO, + .baseHP = 100, + .baseAttack = 70, + .baseDefense = 72, + .baseSpeed = 100, + .baseSpAttack = 53, + .baseSpDefense = 62, + .expYield = 160, + }, + + [SPECIES_PALAFIN_HERO] = + { + PALAFIN_MISC_INFO, + .baseHP = 100, + .baseAttack = 160, + .baseDefense = 97, + .baseSpeed = 100, + .baseSpAttack = 106, + .baseSpDefense = 87, + .expYield = 228, + }, +#endif //P_FAMILY_FINIZEN + +#if P_FAMILY_VAROOM + [SPECIES_VAROOM] = + { + .baseHP = 45, + .baseAttack = 70, + .baseDefense = 63, + .baseSpeed = 47, + .baseSpAttack = 30, + .baseSpDefense = 45, + .types = { TYPE_STEEL, TYPE_POISON }, + .catchRate = 190, + .expYield = 60, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_OVERCOAT, ABILITY_NONE, ABILITY_SLOW_START}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_REVAVROOM] = + { + .baseHP = 80, + .baseAttack = 119, + .baseDefense = 90, + .baseSpeed = 90, + .baseSpAttack = 54, + .baseSpDefense = 67, + .types = { TYPE_STEEL, TYPE_POISON }, + .catchRate = 75, + .expYield = 175, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_FAST, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_OVERCOAT, ABILITY_NONE, ABILITY_FILTER}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_VAROOM + +#if P_FAMILY_CYCLIZAR + [SPECIES_CYCLIZAR] = + { + .baseHP = 70, + .baseAttack = 95, + .baseDefense = 65, + .baseSpeed = 121, + .baseSpAttack = 85, + .baseSpDefense = 65, + .types = { TYPE_DRAGON, TYPE_NORMAL }, + .catchRate = 190, + .expYield = 175, + .evYield_Speed = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 30, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_REGENERATOR}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + }, +#endif //P_FAMILY_CYCLIZAR + +#if P_FAMILY_ORTHWORM + [SPECIES_ORTHWORM] = + { + .baseHP = 70, + .baseAttack = 85, + .baseDefense = 145, + .baseSpeed = 65, + .baseSpAttack = 60, + .baseSpDefense = 55, + .types = { TYPE_STEEL, TYPE_STEEL }, + .catchRate = 25, + .expYield = 240, + .evYield_Defense = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 35, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_EARTH_EATER, ABILITY_NONE, ABILITY_SAND_VEIL}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_ORTHWORM + +#if P_FAMILY_GLIMMET + [SPECIES_GLIMMET] = + { + .baseHP = 48, + .baseAttack = 35, + .baseDefense = 42, + .baseSpeed = 60, + .baseSpAttack = 105, + .baseSpDefense = 60, + .types = { TYPE_ROCK, TYPE_POISON }, + .catchRate = 70, + .expYield = 70, + .evYield_SpAttack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 30, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_TOXIC_DEBRIS, ABILITY_NONE, ABILITY_CORROSION}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, + + [SPECIES_GLIMMORA] = + { + .baseHP = 83, + .baseAttack = 55, + .baseDefense = 90, + .baseSpeed = 86, + .baseSpAttack = 130, + .baseSpDefense = 81, + .types = { TYPE_ROCK, TYPE_POISON }, + .catchRate = 25, + .expYield = 184, + .evYield_SpAttack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 30, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_TOXIC_DEBRIS, ABILITY_NONE, ABILITY_CORROSION}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_GLIMMET + +#if P_FAMILY_GREAVARD + [SPECIES_GREAVARD] = + { + .baseHP = 50, + .baseAttack = 61, + .baseDefense = 60, + .baseSpeed = 34, + .baseSpAttack = 30, + .baseSpDefense = 55, + .types = { TYPE_GHOST, TYPE_GHOST }, + .catchRate = 120, + .expYield = 58, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_FLUFFY}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + + [SPECIES_HOUNDSTONE] = + { + .baseHP = 72, + .baseAttack = 101, + .baseDefense = 100, + .baseSpeed = 68, + .baseSpAttack = 50, + .baseSpDefense = 97, + .types = { TYPE_GHOST, TYPE_GHOST }, + .catchRate = 60, + .expYield = 171, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_SAND_RUSH, ABILITY_NONE, ABILITY_FLUFFY}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_GREAVARD + +#if P_FAMILY_FLAMIGO + [SPECIES_FLAMIGO] = + { + .baseHP = 82, + .baseAttack = 115, + .baseDefense = 74, + .baseSpeed = 90, + .baseSpAttack = 75, + .baseSpDefense = 64, + .types = { TYPE_FLYING, TYPE_FIGHTING }, + .catchRate = 100, + .expYield = 175, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, + .abilities = {ABILITY_SCRAPPY, ABILITY_TANGLED_FEET, ABILITY_COSTAR}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + }, +#endif //P_FAMILY_FLAMIGO + +#if P_FAMILY_CETODDLE + [SPECIES_CETODDLE] = + { + .baseHP = 108, + .baseAttack = 68, + .baseDefense = 45, + .baseSpeed = 43, + .baseSpAttack = 30, + .baseSpDefense = 40, + .types = { TYPE_ICE, TYPE_ICE }, + .catchRate = 150, + .expYield = 67, + .evYield_HP = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_SNOW_CLOAK, ABILITY_SHEER_FORCE}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, + + [SPECIES_CETITAN] = + { + .baseHP = 170, + .baseAttack = 113, + .baseDefense = 65, + .baseSpeed = 73, + .baseSpAttack = 45, + .baseSpDefense = 55, + .types = { TYPE_ICE, TYPE_ICE }, + .catchRate = 50, + .expYield = 182, + .evYield_HP = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 25, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, + .abilities = {ABILITY_THICK_FAT, ABILITY_SLUSH_RUSH, ABILITY_SHEER_FORCE}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_CETODDLE + +#if P_FAMILY_VELUZA + [SPECIES_VELUZA] = + { + .baseHP = 90, + .baseAttack = 102, + .baseDefense = 73, + .baseSpeed = 70, + .baseSpAttack = 78, + .baseSpDefense = 65, + .types = { TYPE_WATER, TYPE_PSYCHIC }, + .catchRate = 100, + .expYield = 167, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 20, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_FAST, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHARPNESS}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_VELUZA + +#if P_FAMILY_DONDOZO + [SPECIES_DONDOZO] = + { + .baseHP = 150, + .baseAttack = 100, + .baseDefense = 115, + .baseSpeed = 35, + .baseSpAttack = 65, + .baseSpDefense = 65, + .types = { TYPE_WATER, TYPE_WATER }, + .catchRate = 25, + .expYield = 265, + .evYield_HP = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, + .abilities = {ABILITY_UNAWARE, ABILITY_OBLIVIOUS, ABILITY_WATER_VEIL}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + }, +#endif //P_FAMILY_DONDOZO + +#if P_FAMILY_TATSUGIRI +#define TATSUGIRI_MISC_INFO \ + .baseHP = 68, \ + .baseAttack = 50, \ + .baseDefense = 60, \ + .baseSpeed = 82, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = { TYPE_DRAGON, TYPE_WATER }, \ + .catchRate = 100, \ + .expYield = 166, \ + .evYield_SpAttack = 2, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 35, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, \ + .abilities = {ABILITY_COMMANDER, ABILITY_NONE, ABILITY_STORM_DRAIN},\ + .noFlip = FALSE + + [SPECIES_TATSUGIRI_CURLY] = + { + TATSUGIRI_MISC_INFO, + .bodyColor = BODY_COLOR_PINK, + }, + + [SPECIES_TATSUGIRI_DROOPY] = + { + TATSUGIRI_MISC_INFO, + .bodyColor = BODY_COLOR_RED, + }, + + [SPECIES_TATSUGIRI_STRETCHY] = + { + TATSUGIRI_MISC_INFO, + .bodyColor = BODY_COLOR_YELLOW, + }, +#endif //P_FAMILY_TATSUGIRI + +#if P_FAMILY_GREAT_TUSK + [SPECIES_GREAT_TUSK] = + { + .baseHP = 115, + .baseAttack = 131, + .baseDefense = 131, + .baseSpeed = 87, + .baseSpAttack = 53, + .baseSpDefense = 53, + .types = { TYPE_GROUND, TYPE_FIGHTING }, + .catchRate = 30, + .expYield = 285, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, - .abilities = {ABILITY_OVERCOAT, ABILITY_NONE}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_PURPLE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_GREAT_TUSK + +#if P_FAMILY_SCREAM_TAIL + [SPECIES_SCREAM_TAIL] = + { + .baseHP = 115, + .baseAttack = 65, + .baseDefense = 99, + .baseSpeed = 111, + .baseSpAttack = 65, + .baseSpDefense = 115, + .types = { TYPE_FAIRY, TYPE_PSYCHIC }, + .catchRate = 50, + .expYield = 285, + .evYield_HP = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_SCREAM_TAIL + +#if P_FAMILY_BRUTE_BONNET + [SPECIES_BRUTE_BONNET] = + { + .baseHP = 111, + .baseAttack = 127, + .baseDefense = 99, + .baseSpeed = 55, + .baseSpAttack = 79, + .baseSpDefense = 99, + .types = { TYPE_GRASS, TYPE_DARK }, + .catchRate = 50, + .expYield = 285, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_BRUTE_BONNET + +#if P_FAMILY_FLUTTER_MANE + [SPECIES_FLUTTER_MANE] = + { + .baseHP = 55, + .baseAttack = 55, + .baseDefense = 55, + .baseSpeed = 135, + .baseSpAttack = 135, + .baseSpDefense = 135, + .types = { TYPE_GHOST, TYPE_FAIRY }, + .catchRate = 30, + .expYield = 285, + .evYield_Speed = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 1, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_FLUTTER_MANE + +#if P_FAMILY_SLITHER_WING + [SPECIES_SLITHER_WING] = + { + .baseHP = 85, + .baseAttack = 135, + .baseDefense = 79, + .baseSpeed = 81, + .baseSpAttack = 85, + .baseSpDefense = 105, + .types = { TYPE_BUG, TYPE_FIGHTING }, + .catchRate = 30, + .expYield = 285, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_SLITHER_WING + +#if P_FAMILY_SANDY_SHOCKS + [SPECIES_SANDY_SHOCKS] = + { + .baseHP = 85, + .baseAttack = 81, + .baseDefense = 97, + .baseSpeed = 101, + .baseSpAttack = 121, + .baseSpDefense = 85, + .types = { TYPE_ELECTRIC, TYPE_GROUND }, + .catchRate = 30, + .expYield = 285, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_SANDY_SHOCKS + +#if P_FAMILY_IRON_TREADS + [SPECIES_IRON_TREADS] = + { + .baseHP = 90, + .baseAttack = 112, + .baseDefense = 120, + .baseSpeed = 106, + .baseSpAttack = 72, + .baseSpDefense = 70, + .types = { TYPE_GROUND, TYPE_STEEL }, + .catchRate = 30, + .expYield = 285, + .evYield_Defense = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_TREADS + +#if P_FAMILY_IRON_BUNDLE + [SPECIES_IRON_BUNDLE] = + { + .baseHP = 56, + .baseAttack = 80, + .baseDefense = 114, + .baseSpeed = 136, + .baseSpAttack = 124, + .baseSpDefense = 60, + .types = { TYPE_ICE, TYPE_WATER }, + .catchRate = 50, + .expYield = 285, + .evYield_Speed = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_BUNDLE + +#if P_FAMILY_IRON_HANDS + [SPECIES_IRON_HANDS] = + { + .baseHP = 154, + .baseAttack = 140, + .baseDefense = 108, + .baseSpeed = 50, + .baseSpAttack = 50, + .baseSpDefense = 68, + .types = { TYPE_FIGHTING, TYPE_ELECTRIC }, + .catchRate = 50, + .expYield = 285, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_HANDS + +#if P_FAMILY_IRON_JUGULIS + [SPECIES_IRON_JUGULIS] = + { + .baseHP = 94, + .baseAttack = 80, + .baseDefense = 86, + .baseSpeed = 108, + .baseSpAttack = 122, + .baseSpDefense = 80, + .types = { TYPE_DARK, TYPE_FLYING }, + .catchRate = 30, + .expYield = 285, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_JUGULIS + +#if P_FAMILY_IRON_MOTH + [SPECIES_IRON_MOTH] = + { + .baseHP = 80, + .baseAttack = 70, + .baseDefense = 60, + .baseSpeed = 110, + .baseSpAttack = 140, + .baseSpDefense = 110, + .types = { TYPE_FIRE, TYPE_POISON }, + .catchRate = 30, + .expYield = 285, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_MOTH + +#if P_FAMILY_IRON_THORNS + [SPECIES_IRON_THORNS] = + { + .baseHP = 100, + .baseAttack = 134, + .baseDefense = 110, + .baseSpeed = 72, + .baseSpAttack = 70, + .baseSpDefense = 84, + .types = { TYPE_ROCK, TYPE_ELECTRIC }, + .catchRate = 30, + .expYield = 285, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_THORNS + +#if P_FAMILY_FRIGIBAX + [SPECIES_FRIGIBAX] = + { + .baseHP = 65, + .baseAttack = 75, + .baseDefense = 45, + .baseSpeed = 55, + .baseSpAttack = 35, + .baseSpDefense = 45, + .types = { TYPE_DRAGON, TYPE_ICE }, + .catchRate = 45, + .expYield = 64, + .evYield_Attack = 1, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_THERMAL_EXCHANGE, ABILITY_NONE, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_ARCTIBAX] = + { + .baseHP = 90, + .baseAttack = 95, + .baseDefense = 66, + .baseSpeed = 62, + .baseSpAttack = 45, + .baseSpDefense = 65, + .types = { TYPE_DRAGON, TYPE_ICE }, + .catchRate = 25, + .expYield = 148, + .evYield_Attack = 2, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_THERMAL_EXCHANGE, ABILITY_NONE, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, + + [SPECIES_BAXCALIBUR] = + { + .baseHP = 115, + .baseAttack = 145, + .baseDefense = 92, + .baseSpeed = 87, + .baseSpAttack = 75, + .baseSpDefense = 86, + .types = { TYPE_DRAGON, TYPE_ICE }, + .catchRate = 10, + .expYield = 300, + .evYield_Attack = 3, + .genderRatio = PERCENT_FEMALE(50), + .eggCycles = 40, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MINERAL}, + .abilities = {ABILITY_THERMAL_EXCHANGE, ABILITY_NONE, ABILITY_ICE_BODY}, + .bodyColor = BODY_COLOR_GRAY, + .noFlip = FALSE, + }, +#endif //P_FAMILY_FRIGIBAX + +#if P_FAMILY_GIMMIGHOUL +#define GIMMIGHOUL_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GHOST }, \ + .catchRate = 45, \ + .expYield = 60, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 50, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ + .noFlip = FALSE + + [SPECIES_GIMMIGHOUL_CHEST] = + { + GIMMIGHOUL_MISC_INFO, + .baseHP = 45, + .baseAttack = 30, + .baseDefense = 70, + .baseSpeed = 10, + .baseSpAttack = 75, + .baseSpDefense = 70, + .abilities = {ABILITY_RATTLED, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + }, + + [SPECIES_GIMMIGHOUL_ROAMING] = + { + GIMMIGHOUL_MISC_INFO, + .baseHP = 45, + .baseAttack = 30, + .baseDefense = 25, + .baseSpeed = 80, + .baseSpAttack = 75, + .baseSpDefense = 45, + .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + }, + + [SPECIES_GHOLDENGO] = + { + .baseHP = 87, + .baseAttack = 60, + .baseDefense = 95, + .baseSpeed = 84, + .baseSpAttack = 133, + .baseSpDefense = 91, + .types = { TYPE_STEEL, TYPE_GHOST }, + .catchRate = 45, + .expYield = 275, + .evYield_SpAttack = 2, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = STANDARD_FRIENDSHIP, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_GOOD_AS_GOLD, ABILITY_NONE}, + .bodyColor = BODY_COLOR_YELLOW, + .noFlip = FALSE, + }, +#endif //P_FAMILY_GIMMIGHOUL + +#if P_FAMILY_WO_CHIEN + [SPECIES_WO_CHIEN] = + { + .baseHP = 85, + .baseAttack = 85, + .baseDefense = 100, + .baseSpeed = 70, + .baseSpAttack = 95, + .baseSpDefense = 135, + .types = { TYPE_DARK, TYPE_GRASS }, + .catchRate = 6, + .expYield = 285, + .evYield_SpDefense = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_TABLETS_OF_RUIN, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, -#endif +#endif //P_FAMILY_WO_CHIEN + +#if P_FAMILY_CHIEN_PAO + [SPECIES_CHIEN_PAO] = + { + .baseHP = 80, + .baseAttack = 120, + .baseDefense = 80, + .baseSpeed = 135, + .baseSpAttack = 90, + .baseSpDefense = 65, + .types = { TYPE_DARK, TYPE_ICE }, + .catchRate = 6, + .expYield = 285, + .evYield_Speed = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_SWORD_OF_RUIN, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_CHIEN_PAO + +#if P_FAMILY_TING_LU + [SPECIES_TING_LU] = + { + .baseHP = 155, + .baseAttack = 110, + .baseDefense = 125, + .baseSpeed = 45, + .baseSpAttack = 55, + .baseSpDefense = 80, + .types = { TYPE_DARK, TYPE_GROUND }, + .catchRate = 6, + .expYield = 285, + .evYield_Defense = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_VESSEL_OF_RUIN, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BROWN, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_TING_LU + +#if P_FAMILY_CHI_YU + [SPECIES_CHI_YU] = + { + .baseHP = 55, + .baseAttack = 80, + .baseDefense = 80, + .baseSpeed = 100, + .baseSpAttack = 135, + .baseSpDefense = 120, + .types = { TYPE_DARK, TYPE_FIRE }, + .catchRate = 6, + .expYield = 285, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_BEADS_OF_RUIN, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_CHI_YU + +#if P_FAMILY_ROARING_MOON + [SPECIES_ROARING_MOON] = + { + .baseHP = 105, + .baseAttack = 139, + .baseDefense = 71, + .baseSpeed = 119, + .baseSpAttack = 55, + .baseSpDefense = 101, + .types = { TYPE_DRAGON, TYPE_DARK }, + .catchRate = 10, + .expYield = 295, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_ROARING_MOON + +#if P_FAMILY_IRON_VALIANT + [SPECIES_IRON_VALIANT] = + { + .baseHP = 74, + .baseAttack = 130, + .baseDefense = 90, + .baseSpeed = 116, + .baseSpAttack = 120, + .baseSpDefense = 60, + .types = { TYPE_FAIRY, TYPE_FIGHTING }, + .catchRate = 10, + .expYield = 295, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_WHITE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_VALIANT + +#if P_FAMILY_KORAIDON + [SPECIES_KORAIDON] = + { + .baseHP = 100, + .baseAttack = 135, + .baseDefense = 115, + .baseSpeed = 135, + .baseSpAttack = 85, + .baseSpDefense = 100, + .types = { TYPE_FIGHTING, TYPE_DRAGON }, + .catchRate = 3, + .expYield = 335, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_ORICHALCUM_PULSE, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_RED, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_KORAIDON + +#if P_FAMILY_MIRAIDON + [SPECIES_MIRAIDON] = + { + .baseHP = 100, + .baseAttack = 85, + .baseDefense = 100, + .baseSpeed = 135, + .baseSpAttack = 135, + .baseSpDefense = 115, + .types = { TYPE_ELECTRIC, TYPE_DRAGON }, + .catchRate = 3, + .expYield = 335, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_HADRON_ENGINE, ABILITY_NONE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_MIRAIDON + +#if P_FAMILY_WALKING_WAKE + [SPECIES_WALKING_WAKE] = + { + .baseHP = 99, + .baseAttack = 83, + .baseDefense = 91, + .baseSpeed = 109, + .baseSpAttack = 125, + .baseSpDefense = 83, + .types = { TYPE_WATER, TYPE_DRAGON }, + .catchRate = 5, + .expYield = 295, + .evYield_SpAttack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_PROTOSYNTHESIS, ABILITY_NONE}, + .bodyColor = BODY_COLOR_BLUE, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_WALKING_WAKE + +#if P_FAMILY_IRON_LEAVES + [SPECIES_IRON_LEAVES] = + { + .baseHP = 90, + .baseAttack = 130, + .baseDefense = 88, + .baseSpeed = 104, + .baseSpAttack = 70, + .baseSpDefense = 108, + .types = { TYPE_GRASS, TYPE_PSYCHIC }, + .catchRate = 5, + .expYield = 295, + .evYield_Attack = 3, + .genderRatio = MON_GENDERLESS, + .eggCycles = 50, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_QUARK_DRIVE, ABILITY_NONE}, + .bodyColor = BODY_COLOR_GREEN, + .noFlip = FALSE, + .flags = SPECIES_FLAG_PARADOX, + }, +#endif //P_FAMILY_IRON_LEAVES + +#if P_FAMILY_POLTCHAGEIST +#define POLTCHAGEIST_SPECIES_INFO \ + { \ + .baseHP = 40, \ + .baseAttack = 45, \ + .baseDefense = 45, \ + .baseSpeed = 50, \ + .baseSpAttack = 74, \ + .baseSpDefense = 54, \ + .types = { TYPE_GRASS, TYPE_GHOST}, \ + .catchRate = 120, \ + .expYield = 62, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE, \ + } + + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = POLTCHAGEIST_SPECIES_INFO, + [SPECIES_POLTCHAGEIST_ARTISAN] = POLTCHAGEIST_SPECIES_INFO, + +#define SINISTCHA_SPECIES_INFO \ + { \ + .baseHP = 71, \ + .baseAttack = 60, \ + .baseDefense = 106, \ + .baseSpeed = 70, \ + .baseSpAttack = 121, \ + .baseSpDefense = 80, \ + .types = { TYPE_GRASS, TYPE_GHOST}, \ + .catchRate = 60, \ + .expYield = 178, \ + .evYield_SpAttack = 2, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 20, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ + .abilities = {ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF}, \ + .bodyColor = BODY_COLOR_GREEN, \ + .noFlip = FALSE, \ + } + + [SPECIES_SINISTCHA_UNREMARKABLE] = SINISTCHA_SPECIES_INFO, + [SPECIES_SINISTCHA_MASTERPIECE] = SINISTCHA_SPECIES_INFO, +#endif //P_FAMILY_POLTCHAGEIST + +#if P_FAMILY_OKIDOGI + [SPECIES_OKIDOGI] = + { + .baseHP = 88, + .baseAttack = 128, + .baseDefense = 115, + .baseSpeed = 80, + .baseSpAttack = 58, + .baseSpDefense = 86, + .types = { TYPE_POISON, TYPE_FIGHTING }, + .catchRate = 3, + .expYield = 278, + .evYield_Attack = 3, + .genderRatio = MON_MALE, + .eggCycles = 120, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_TOXIC_CHAIN, ABILITY_NONE, ABILITY_GUARD_DOG}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_OKIDOGI + +#if P_FAMILY_MUNKIDORI + [SPECIES_MUNKIDORI] = + { + .baseHP = 88, + .baseAttack = 75, + .baseDefense = 66, + .baseSpeed = 106, + .baseSpAttack = 130, + .baseSpDefense = 90, + .types = { TYPE_POISON, TYPE_PSYCHIC }, + .catchRate = 3, + .expYield = 278, + .evYield_SpAttack = 3, + .genderRatio = MON_MALE, + .eggCycles = 120, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_TOXIC_CHAIN, ABILITY_NONE, ABILITY_FRISK}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_MUNKIDORI + +#if P_FAMILY_FEZANDIPITI + [SPECIES_FEZANDIPITI] = + { + .baseHP = 88, + .baseAttack = 91, + .baseDefense = 82, + .baseSpeed = 99, + .baseSpAttack = 70, + .baseSpDefense = 125, + .types = { TYPE_POISON, TYPE_FAIRY }, + .catchRate = 3, + .expYield = 278, + .evYield_SpDefense = 3, + .genderRatio = MON_MALE, + .eggCycles = 120, + .friendship = 0, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_TOXIC_CHAIN, ABILITY_NONE, ABILITY_TECHNICIAN}, + .bodyColor = BODY_COLOR_BLACK, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, +#endif //P_FAMILY_FEZANDIPITI + +#if P_FAMILY_OGERPON +#define OGERPON_SPECIES_INFO(type, ability, color) \ + { \ + .baseHP = 80, \ + .baseAttack = 120, \ + .baseDefense = 84, \ + .baseSpeed = 110, \ + .baseSpAttack = 60, \ + .baseSpDefense = 96, \ + .types = { TYPE_GRASS, type }, \ + .catchRate = 5, \ + .expYield = 275, \ + .evYield_Attack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED },\ + .abilities = {ability, ABILITY_NONE}, \ + .bodyColor = color, \ + .noFlip = FALSE, \ + .flags = SPECIES_FLAG_LEGENDARY, \ + } + + [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN), + [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE), + [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED), + [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY), + [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL, BODY_COLOR_GREEN), + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING, BODY_COLOR_BLUE), + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME, BODY_COLOR_RED), + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE, BODY_COLOR_GRAY), +#endif //P_FAMILY_OGERPON }; diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h index f8faf62d8f..4bb31a97e2 100644 --- a/src/data/pokemon/teachable_learnset_pointers.h +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -129,6 +129,9 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_MAGMAR] = sMagmarTeachableLearnset, [SPECIES_PINSIR] = sPinsirTeachableLearnset, [SPECIES_TAUROS] = sTaurosTeachableLearnset, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = sTaurosPaldeanCombatBreedTeachableLearnset, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = sTaurosPaldeanBlazeBreedTeachableLearnset, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = sTaurosPaldeanAquaBreedTeachableLearnset, [SPECIES_MAGIKARP] = sMagikarpTeachableLearnset, [SPECIES_GYARADOS] = sGyaradosTeachableLearnset, [SPECIES_LAPRAS] = sLaprasTeachableLearnset, @@ -195,6 +198,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_SUNFLORA] = sSunfloraTeachableLearnset, [SPECIES_YANMA] = sYanmaTeachableLearnset, [SPECIES_WOOPER] = sWooperTeachableLearnset, + [SPECIES_WOOPER_PALDEAN] = sWooperPaldeanTeachableLearnset, [SPECIES_QUAGSIRE] = sQuagsireTeachableLearnset, [SPECIES_ESPEON] = sEspeonTeachableLearnset, [SPECIES_UMBREON] = sUmbreonTeachableLearnset, @@ -360,7 +364,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_ARON] = sAronTeachableLearnset, [SPECIES_LAIRON] = sLaironTeachableLearnset, [SPECIES_AGGRON] = sAggronTeachableLearnset, - [SPECIES_CASTFORM] = sCastformTeachableLearnset, + [SPECIES_CASTFORM_NORMAL] = sCastformTeachableLearnset, [SPECIES_VOLBEAT] = sVolbeatTeachableLearnset, [SPECIES_ILLUMISE] = sIllumiseTeachableLearnset, [SPECIES_LILEEP] = sLileepTeachableLearnset, @@ -385,7 +389,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_LATIAS] = sLatiasTeachableLearnset, [SPECIES_LATIOS] = sLatiosTeachableLearnset, [SPECIES_JIRACHI] = sJirachiTeachableLearnset, - [SPECIES_DEOXYS] = sDeoxysTeachableLearnset, + [SPECIES_DEOXYS_NORMAL] = sDeoxysNormalTeachableLearnset, [SPECIES_CHIMECHO] = sChimechoTeachableLearnset, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = sTurtwigTeachableLearnset, @@ -413,8 +417,8 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_RAMPARDOS] = sRampardosTeachableLearnset, [SPECIES_SHIELDON] = sShieldonTeachableLearnset, [SPECIES_BASTIODON] = sBastiodonTeachableLearnset, - [SPECIES_BURMY] = sBurmyTeachableLearnset, - [SPECIES_WORMADAM] = sWormadamTeachableLearnset, + [SPECIES_BURMY_PLANT_CLOAK] = sBurmyTeachableLearnset, + [SPECIES_WORMADAM_PLANT_CLOAK] = sWormadamPlantCloakTeachableLearnset, [SPECIES_MOTHIM] = sMothimTeachableLearnset, [SPECIES_COMBEE] = sCombeeTeachableLearnset, [SPECIES_VESPIQUEN] = sVespiquenTeachableLearnset, @@ -422,9 +426,9 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_BUIZEL] = sBuizelTeachableLearnset, [SPECIES_FLOATZEL] = sFloatzelTeachableLearnset, [SPECIES_CHERUBI] = sCherubiTeachableLearnset, - [SPECIES_CHERRIM] = sCherrimTeachableLearnset, - [SPECIES_SHELLOS] = sShellosTeachableLearnset, - [SPECIES_GASTRODON] = sGastrodonTeachableLearnset, + [SPECIES_CHERRIM_OVERCAST] = sCherrimTeachableLearnset, + [SPECIES_SHELLOS_WEST_SEA] = sShellosTeachableLearnset, + [SPECIES_GASTRODON_WEST_SEA] = sGastrodonTeachableLearnset, [SPECIES_AMBIPOM] = sAmbipomTeachableLearnset, [SPECIES_DRIFLOON] = sDrifloonTeachableLearnset, [SPECIES_DRIFBLIM] = sDrifblimTeachableLearnset, @@ -488,13 +492,13 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_PALKIA] = sPalkiaTeachableLearnset, [SPECIES_HEATRAN] = sHeatranTeachableLearnset, [SPECIES_REGIGIGAS] = sRegigigasTeachableLearnset, - [SPECIES_GIRATINA] = sGiratinaTeachableLearnset, + [SPECIES_GIRATINA_ALTERED] = sGiratinaTeachableLearnset, [SPECIES_CRESSELIA] = sCresseliaTeachableLearnset, [SPECIES_PHIONE] = sPhioneTeachableLearnset, [SPECIES_MANAPHY] = sManaphyTeachableLearnset, [SPECIES_DARKRAI] = sDarkraiTeachableLearnset, - [SPECIES_SHAYMIN] = sShayminTeachableLearnset, - [SPECIES_ARCEUS] = sArceusTeachableLearnset, + [SPECIES_SHAYMIN_LAND] = sShayminLandTeachableLearnset, + [SPECIES_ARCEUS_NORMAL] = sArceusTeachableLearnset, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = sVictiniTeachableLearnset, @@ -553,12 +557,12 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_WHIMSICOTT] = sWhimsicottTeachableLearnset, [SPECIES_PETILIL] = sPetililTeachableLearnset, [SPECIES_LILLIGANT] = sLilligantTeachableLearnset, - [SPECIES_BASCULIN] = sBasculinTeachableLearnset, + [SPECIES_BASCULIN_RED_STRIPED] = sBasculinTeachableLearnset, [SPECIES_SANDILE] = sSandileTeachableLearnset, [SPECIES_KROKOROK] = sKrokorokTeachableLearnset, [SPECIES_KROOKODILE] = sKrookodileTeachableLearnset, [SPECIES_DARUMAKA] = sDarumakaTeachableLearnset, - [SPECIES_DARMANITAN] = sDarmanitanTeachableLearnset, + [SPECIES_DARMANITAN_STANDARD_MODE] = sDarmanitanTeachableLearnset, [SPECIES_MARACTUS] = sMaractusTeachableLearnset, [SPECIES_DWEBBLE] = sDwebbleTeachableLearnset, [SPECIES_CRUSTLE] = sCrustleTeachableLearnset, @@ -588,8 +592,8 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_VANILLITE] = sVanilliteTeachableLearnset, [SPECIES_VANILLISH] = sVanillishTeachableLearnset, [SPECIES_VANILLUXE] = sVanilluxeTeachableLearnset, - [SPECIES_DEERLING] = sDeerlingTeachableLearnset, - [SPECIES_SAWSBUCK] = sSawsbuckTeachableLearnset, + [SPECIES_DEERLING_SPRING] = sDeerlingTeachableLearnset, + [SPECIES_SAWSBUCK_SPRING] = sSawsbuckTeachableLearnset, [SPECIES_EMOLGA] = sEmolgaTeachableLearnset, [SPECIES_KARRABLAST] = sKarrablastTeachableLearnset, [SPECIES_ESCAVALIER] = sEscavalierTeachableLearnset, @@ -644,14 +648,14 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_COBALION] = sCobalionTeachableLearnset, [SPECIES_TERRAKION] = sTerrakionTeachableLearnset, [SPECIES_VIRIZION] = sVirizionTeachableLearnset, - [SPECIES_TORNADUS] = sTornadusTeachableLearnset, - [SPECIES_THUNDURUS] = sThundurusTeachableLearnset, + [SPECIES_TORNADUS_INCARNATE] = sTornadusTeachableLearnset, + [SPECIES_THUNDURUS_INCARNATE] = sThundurusTeachableLearnset, [SPECIES_RESHIRAM] = sReshiramTeachableLearnset, [SPECIES_ZEKROM] = sZekromTeachableLearnset, - [SPECIES_LANDORUS] = sLandorusTeachableLearnset, + [SPECIES_LANDORUS_INCARNATE] = sLandorusTeachableLearnset, [SPECIES_KYUREM] = sKyuremTeachableLearnset, - [SPECIES_KELDEO] = sKeldeoTeachableLearnset, - [SPECIES_MELOETTA] = sMeloettaTeachableLearnset, + [SPECIES_KELDEO_ORDINARY] = sKeldeoTeachableLearnset, + [SPECIES_MELOETTA_ARIA] = sMeloettaTeachableLearnset, [SPECIES_GENESECT] = sGenesectTeachableLearnset, #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_TALONFLAME] = sTalonflameTeachableLearnset, [SPECIES_SCATTERBUG] = sScatterbugTeachableLearnset, [SPECIES_SPEWPA] = sSpewpaTeachableLearnset, - [SPECIES_VIVILLON] = sVivillonTeachableLearnset, + [SPECIES_VIVILLON_ICY_SNOW] = sVivillonTeachableLearnset, [SPECIES_LITLEO] = sLitleoTeachableLearnset, [SPECIES_PYROAR] = sPyroarTeachableLearnset, - [SPECIES_FLABEBE] = sFlabebeTeachableLearnset, - [SPECIES_FLOETTE] = sFloetteTeachableLearnset, - [SPECIES_FLORGES] = sFlorgesTeachableLearnset, + [SPECIES_FLABEBE_RED_FLOWER] = sFlabebeTeachableLearnset, + [SPECIES_FLOETTE_RED_FLOWER] = sFloetteTeachableLearnset, + [SPECIES_FLORGES_RED_FLOWER] = sFlorgesTeachableLearnset, [SPECIES_SKIDDO] = sSkiddoTeachableLearnset, [SPECIES_GOGOAT] = sGogoatTeachableLearnset, [SPECIES_PANCHAM] = sPanchamTeachableLearnset, [SPECIES_PANGORO] = sPangoroTeachableLearnset, - [SPECIES_FURFROU] = sFurfrouTeachableLearnset, + [SPECIES_FURFROU_NATURAL] = sFurfrouTeachableLearnset, [SPECIES_ESPURR] = sEspurrTeachableLearnset, - [SPECIES_MEOWSTIC] = sMeowsticTeachableLearnset, + [SPECIES_MEOWSTIC] = sMeowsticMaleTeachableLearnset, [SPECIES_HONEDGE] = sHonedgeTeachableLearnset, [SPECIES_DOUBLADE] = sDoubladeTeachableLearnset, - [SPECIES_AEGISLASH] = sAegislashTeachableLearnset, + [SPECIES_AEGISLASH_SHIELD] = sAegislashTeachableLearnset, [SPECIES_SPRITZEE] = sSpritzeeTeachableLearnset, [SPECIES_AROMATISSE] = sAromatisseTeachableLearnset, [SPECIES_SWIRLIX] = sSwirlixTeachableLearnset, @@ -715,17 +719,17 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_KLEFKI] = sKlefkiTeachableLearnset, [SPECIES_PHANTUMP] = sPhantumpTeachableLearnset, [SPECIES_TREVENANT] = sTrevenantTeachableLearnset, - [SPECIES_PUMPKABOO] = sPumpkabooTeachableLearnset, - [SPECIES_GOURGEIST] = sGourgeistTeachableLearnset, + [SPECIES_PUMPKABOO_AVERAGE] = sPumpkabooTeachableLearnset, + [SPECIES_GOURGEIST_AVERAGE] = sGourgeistTeachableLearnset, [SPECIES_BERGMITE] = sBergmiteTeachableLearnset, [SPECIES_AVALUGG] = sAvaluggTeachableLearnset, [SPECIES_NOIBAT] = sNoibatTeachableLearnset, [SPECIES_NOIVERN] = sNoivernTeachableLearnset, - [SPECIES_XERNEAS] = sXerneasTeachableLearnset, + [SPECIES_XERNEAS_NEUTRAL] = sXerneasTeachableLearnset, [SPECIES_YVELTAL] = sYveltalTeachableLearnset, - [SPECIES_ZYGARDE] = sZygardeTeachableLearnset, + [SPECIES_ZYGARDE_50_AURA_BREAK] = sZygardeTeachableLearnset, [SPECIES_DIANCIE] = sDiancieTeachableLearnset, - [SPECIES_HOOPA] = sHoopaTeachableLearnset, + [SPECIES_HOOPA_CONFINED] = sHoopaConfinedTeachableLearnset, [SPECIES_VOLCANION] = sVolcanionTeachableLearnset, #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_VIKAVOLT] = sVikavoltTeachableLearnset, [SPECIES_CRABRAWLER] = sCrabrawlerTeachableLearnset, [SPECIES_CRABOMINABLE] = sCrabominableTeachableLearnset, - [SPECIES_ORICORIO] = sOricorioTeachableLearnset, + [SPECIES_ORICORIO_BAILE] = sOricorioTeachableLearnset, [SPECIES_CUTIEFLY] = sCutieflyTeachableLearnset, [SPECIES_RIBOMBEE] = sRibombeeTeachableLearnset, [SPECIES_ROCKRUFF] = sRockruffTeachableLearnset, - [SPECIES_LYCANROC] = sLycanrocTeachableLearnset, - [SPECIES_WISHIWASHI] = sWishiwashiTeachableLearnset, + [SPECIES_LYCANROC_MIDDAY] = sLycanrocMiddayTeachableLearnset, + [SPECIES_WISHIWASHI_SOLO] = sWishiwashiTeachableLearnset, [SPECIES_MAREANIE] = sMareanieTeachableLearnset, [SPECIES_TOXAPEX] = sToxapexTeachableLearnset, [SPECIES_MUDBRAY] = sMudbrayTeachableLearnset, @@ -780,12 +784,12 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_PALOSSAND] = sPalossandTeachableLearnset, [SPECIES_PYUKUMUKU] = sPyukumukuTeachableLearnset, [SPECIES_TYPE_NULL] = sTypeNullTeachableLearnset, - [SPECIES_SILVALLY] = sSilvallyTeachableLearnset, - [SPECIES_MINIOR] = sMiniorTeachableLearnset, + [SPECIES_SILVALLY_NORMAL] = sSilvallyTeachableLearnset, + [SPECIES_MINIOR_METEOR_RED] = sMiniorTeachableLearnset, [SPECIES_KOMALA] = sKomalaTeachableLearnset, [SPECIES_TURTONATOR] = sTurtonatorTeachableLearnset, [SPECIES_TOGEDEMARU] = sTogedemaruTeachableLearnset, - [SPECIES_MIMIKYU] = sMimikyuTeachableLearnset, + [SPECIES_MIMIKYU_DISGUISED] = sMimikyuTeachableLearnset, [SPECIES_BRUXISH] = sBruxishTeachableLearnset, [SPECIES_DRAMPA] = sDrampaTeachableLearnset, [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, @@ -858,13 +862,13 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_ARROKUDA] = sArrokudaTeachableLearnset, [SPECIES_BARRASKEWDA] = sBarraskewdaTeachableLearnset, [SPECIES_TOXEL] = sToxelTeachableLearnset, - [SPECIES_TOXTRICITY] = sToxtricityTeachableLearnset, + [SPECIES_TOXTRICITY_AMPED] = sToxtricityAmpedTeachableLearnset, [SPECIES_SIZZLIPEDE] = sSizzlipedeTeachableLearnset, [SPECIES_CENTISKORCH] = sCentiskorchTeachableLearnset, [SPECIES_CLOBBOPUS] = sClobbopusTeachableLearnset, [SPECIES_GRAPPLOCT] = sGrapploctTeachableLearnset, - [SPECIES_SINISTEA] = sSinisteaTeachableLearnset, - [SPECIES_POLTEAGEIST] = sPolteageistTeachableLearnset, + [SPECIES_SINISTEA_PHONY] = sSinisteaTeachableLearnset, + [SPECIES_POLTEAGEIST_PHONY] = sPolteageistTeachableLearnset, [SPECIES_HATENNA] = sHatennaTeachableLearnset, [SPECIES_HATTREM] = sHattremTeachableLearnset, [SPECIES_HATTERENE] = sHattereneTeachableLearnset, @@ -878,15 +882,77 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_MR_RIME] = sMrRimeTeachableLearnset, [SPECIES_RUNERIGUS] = sRunerigusTeachableLearnset, [SPECIES_MILCERY] = sMilceryTeachableLearnset, - [SPECIES_ALCREMIE] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, [SPECIES_FALINKS] = sFalinksTeachableLearnset, [SPECIES_PINCURCHIN] = sPincurchinTeachableLearnset, [SPECIES_SNOM] = sSnomTeachableLearnset, [SPECIES_FROSMOTH] = sFrosmothTeachableLearnset, [SPECIES_STONJOURNER] = sStonjournerTeachableLearnset, - [SPECIES_EISCUE] = sEiscueTeachableLearnset, - [SPECIES_INDEEDEE] = sIndeedeeTeachableLearnset, - [SPECIES_MORPEKO] = sMorpekoTeachableLearnset, + [SPECIES_EISCUE_ICE_FACE] = sEiscueTeachableLearnset, + [SPECIES_INDEEDEE_MALE] = sIndeedeeMaleTeachableLearnset, + [SPECIES_MORPEKO_FULL_BELLY] = sMorpekoTeachableLearnset, [SPECIES_CUFANT] = sCufantTeachableLearnset, [SPECIES_COPPERAJAH] = sCopperajahTeachableLearnset, [SPECIES_DRACOZOLT] = sDracozoltTeachableLearnset, @@ -897,11 +963,11 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_DREEPY] = sDreepyTeachableLearnset, [SPECIES_DRAKLOAK] = sDrakloakTeachableLearnset, [SPECIES_DRAGAPULT] = sDragapultTeachableLearnset, - [SPECIES_ZACIAN] = sZacianTeachableLearnset, - [SPECIES_ZAMAZENTA] = sZamazentaTeachableLearnset, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = sZacianTeachableLearnset, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = sZamazentaTeachableLearnset, [SPECIES_ETERNATUS] = sEternatusTeachableLearnset, [SPECIES_KUBFU] = sKubfuTeachableLearnset, - [SPECIES_URSHIFU] = sUrshifuTeachableLearnset, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = sUrshifuSingleStrikeStyleTeachableLearnset, [SPECIES_ZARUDE] = sZarudeTeachableLearnset, [SPECIES_REGIELEKI] = sRegielekiTeachableLearnset, [SPECIES_REGIDRAGO] = sRegidragoTeachableLearnset, @@ -911,10 +977,144 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_WYRDEER] = sWyrdeerTeachableLearnset, [SPECIES_KLEAVOR] = sKleavorTeachableLearnset, [SPECIES_URSALUNA] = sUrsalunaTeachableLearnset, - [SPECIES_BASCULEGION] = sBasculegionTeachableLearnset, + [SPECIES_URSALUNA_BLOODMOON] = sUrsalunaBloodmoonTeachableLearnset, + [SPECIES_BASCULEGION_MALE] = sBasculegionTeachableLearnset, [SPECIES_SNEASLER] = sSneaslerTeachableLearnset, [SPECIES_OVERQWIL] = sOverqwilTeachableLearnset, - [SPECIES_ENAMORUS] = sEnamorusTeachableLearnset, + [SPECIES_ENAMORUS_INCARNATE] = sEnamorusTeachableLearnset, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = sSprigatitoTeachableLearnset, + [SPECIES_FLORAGATO] = sFloragatoTeachableLearnset, + [SPECIES_MEOWSCARADA] = sMeowscaradaTeachableLearnset, + [SPECIES_FUECOCO] = sFuecocoTeachableLearnset, + [SPECIES_CROCALOR] = sCrocalorTeachableLearnset, + [SPECIES_SKELEDIRGE] = sSkeledirgeTeachableLearnset, + [SPECIES_QUAXLY] = sQuaxlyTeachableLearnset, + [SPECIES_QUAXWELL] = sQuaxwellTeachableLearnset, + [SPECIES_QUAQUAVAL] = sQuaquavalTeachableLearnset, + [SPECIES_LECHONK] = sLechonkTeachableLearnset, + [SPECIES_OINKOLOGNE_MALE] = sOinkologneMaleTeachableLearnset, + [SPECIES_OINKOLOGNE_FEMALE] = sOinkologneFemaleTeachableLearnset, + [SPECIES_TAROUNTULA] = sTarountulaTeachableLearnset, + [SPECIES_SPIDOPS] = sSpidopsTeachableLearnset, + [SPECIES_NYMBLE] = sNymbleTeachableLearnset, + [SPECIES_LOKIX] = sLokixTeachableLearnset, + [SPECIES_PAWMI] = sPawmiTeachableLearnset, + [SPECIES_PAWMO] = sPawmoTeachableLearnset, + [SPECIES_PAWMOT] = sPawmotTeachableLearnset, + [SPECIES_TANDEMAUS] = sTandemausTeachableLearnset, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = sMausholdTeachableLearnset, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = sMausholdTeachableLearnset, + [SPECIES_FIDOUGH] = sFidoughTeachableLearnset, + [SPECIES_DACHSBUN] = sDachsbunTeachableLearnset, + [SPECIES_SMOLIV] = sSmolivTeachableLearnset, + [SPECIES_DOLLIV] = sDollivTeachableLearnset, + [SPECIES_ARBOLIVA] = sArbolivaTeachableLearnset, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = sSquawkabillyTeachableLearnset, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = sSquawkabillyTeachableLearnset, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = sSquawkabillyTeachableLearnset, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = sSquawkabillyTeachableLearnset, + [SPECIES_NACLI] = sNacliTeachableLearnset, + [SPECIES_NACLSTACK] = sNaclstackTeachableLearnset, + [SPECIES_GARGANACL] = sGarganaclTeachableLearnset, + [SPECIES_CHARCADET] = sCharcadetTeachableLearnset, + [SPECIES_ARMAROUGE] = sArmarougeTeachableLearnset, + [SPECIES_CERULEDGE] = sCeruledgeTeachableLearnset, + [SPECIES_TADBULB] = sTadbulbTeachableLearnset, + [SPECIES_BELLIBOLT] = sBelliboltTeachableLearnset, + [SPECIES_WATTREL] = sWattrelTeachableLearnset, + [SPECIES_KILOWATTREL] = sKilowattrelTeachableLearnset, + [SPECIES_MASCHIFF] = sMaschiffTeachableLearnset, + [SPECIES_MABOSSTIFF] = sMabosstiffTeachableLearnset, + [SPECIES_SHROODLE] = sShroodleTeachableLearnset, + [SPECIES_GRAFAIAI] = sGrafaiaiTeachableLearnset, + [SPECIES_BRAMBLIN] = sBramblinTeachableLearnset, + [SPECIES_BRAMBLEGHAST] = sBrambleghastTeachableLearnset, + [SPECIES_TOEDSCOOL] = sToedscoolTeachableLearnset, + [SPECIES_TOEDSCRUEL] = sToedscruelTeachableLearnset, + [SPECIES_KLAWF] = sKlawfTeachableLearnset, + [SPECIES_CAPSAKID] = sCapsakidTeachableLearnset, + [SPECIES_SCOVILLAIN] = sScovillainTeachableLearnset, + [SPECIES_RELLOR] = sRellorTeachableLearnset, + [SPECIES_RABSCA] = sRabscaTeachableLearnset, + [SPECIES_FLITTLE] = sFlittleTeachableLearnset, + [SPECIES_ESPATHRA] = sEspathraTeachableLearnset, + [SPECIES_TINKATINK] = sTinkatinkTeachableLearnset, + [SPECIES_TINKATUFF] = sTinkatuffTeachableLearnset, + [SPECIES_TINKATON] = sTinkatonTeachableLearnset, + [SPECIES_WIGLETT] = sWiglettTeachableLearnset, + [SPECIES_WUGTRIO] = sWugtrioTeachableLearnset, + [SPECIES_BOMBIRDIER] = sBombirdierTeachableLearnset, + [SPECIES_FINIZEN] = sFinizenTeachableLearnset, + [SPECIES_PALAFIN_ZERO] = sPalafinTeachableLearnset, + [SPECIES_PALAFIN_HERO] = sPalafinTeachableLearnset, + [SPECIES_VAROOM] = sVaroomTeachableLearnset, + [SPECIES_REVAVROOM] = sRevavroomTeachableLearnset, + [SPECIES_CYCLIZAR] = sCyclizarTeachableLearnset, + [SPECIES_ORTHWORM] = sOrthwormTeachableLearnset, + [SPECIES_GLIMMET] = sGlimmetTeachableLearnset, + [SPECIES_GLIMMORA] = sGlimmoraTeachableLearnset, + [SPECIES_GREAVARD] = sGreavardTeachableLearnset, + [SPECIES_HOUNDSTONE] = sHoundstoneTeachableLearnset, + [SPECIES_FLAMIGO] = sFlamigoTeachableLearnset, + [SPECIES_CETODDLE] = sCetoddleTeachableLearnset, + [SPECIES_CETITAN] = sCetitanTeachableLearnset, + [SPECIES_VELUZA] = sVeluzaTeachableLearnset, + [SPECIES_DONDOZO] = sDondozoTeachableLearnset, + [SPECIES_TATSUGIRI_CURLY] = sTatsugiriTeachableLearnset, + [SPECIES_TATSUGIRI_DROOPY] = sTatsugiriTeachableLearnset, + [SPECIES_TATSUGIRI_STRETCHY] = sTatsugiriTeachableLearnset, + [SPECIES_ANNIHILAPE] = sAnnihilapeTeachableLearnset, + [SPECIES_CLODSIRE] = sClodsireTeachableLearnset, + [SPECIES_FARIGIRAF] = sFarigirafTeachableLearnset, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = sDudunsparceTeachableLearnset, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = sDudunsparceTeachableLearnset, + [SPECIES_KINGAMBIT] = sKingambitTeachableLearnset, + [SPECIES_GREAT_TUSK] = sGreatTuskTeachableLearnset, + [SPECIES_SCREAM_TAIL] = sScreamTailTeachableLearnset, + [SPECIES_BRUTE_BONNET] = sBruteBonnetTeachableLearnset, + [SPECIES_FLUTTER_MANE] = sFlutterManeTeachableLearnset, + [SPECIES_SLITHER_WING] = sSlitherWingTeachableLearnset, + [SPECIES_SANDY_SHOCKS] = sSandyShocksTeachableLearnset, + [SPECIES_IRON_TREADS] = sIronTreadsTeachableLearnset, + [SPECIES_IRON_BUNDLE] = sIronBundleTeachableLearnset, + [SPECIES_IRON_HANDS] = sIronHandsTeachableLearnset, + [SPECIES_IRON_JUGULIS] = sIronJugulisTeachableLearnset, + [SPECIES_IRON_MOTH] = sIronMothTeachableLearnset, + [SPECIES_IRON_THORNS] = sIronThornsTeachableLearnset, + [SPECIES_FRIGIBAX] = sFrigibaxTeachableLearnset, + [SPECIES_ARCTIBAX] = sArctibaxTeachableLearnset, + [SPECIES_BAXCALIBUR] = sBaxcaliburTeachableLearnset, + [SPECIES_GIMMIGHOUL_CHEST] = sGimmighoulTeachableLearnset, + [SPECIES_GIMMIGHOUL_ROAMING] = sGimmighoulTeachableLearnset, + [SPECIES_GHOLDENGO] = sGholdengoTeachableLearnset, + [SPECIES_WO_CHIEN] = sWoChienTeachableLearnset, + [SPECIES_CHIEN_PAO] = sChienPaoTeachableLearnset, + [SPECIES_TING_LU] = sTingLuTeachableLearnset, + [SPECIES_CHI_YU] = sChiYuTeachableLearnset, + [SPECIES_ROARING_MOON] = sRoaringMoonTeachableLearnset, + [SPECIES_IRON_VALIANT] = sIronValiantTeachableLearnset, + [SPECIES_KORAIDON] = sKoraidonTeachableLearnset, + [SPECIES_MIRAIDON] = sMiraidonTeachableLearnset, + [SPECIES_WALKING_WAKE] = sWalkingWakeTeachableLearnset, + [SPECIES_IRON_LEAVES] = sIronLeavesTeachableLearnset, + [SPECIES_DIPPLIN] = sDipplinTeachableLearnset, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = sPoltchageistTeachableLearnset, + [SPECIES_POLTCHAGEIST_ARTISAN] = sPoltchageistTeachableLearnset, + [SPECIES_SINISTCHA_UNREMARKABLE] = sSinistchaTeachableLearnset, + [SPECIES_SINISTCHA_MASTERPIECE] = sSinistchaTeachableLearnset, + [SPECIES_OKIDOGI] = sOkidogiTeachableLearnset, + [SPECIES_MUNKIDORI] = sMunkidoriTeachableLearnset, + [SPECIES_FEZANDIPITI] = sFezandipitiTeachableLearnset, + [SPECIES_OGERPON_TEAL_MASK] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_WELLSPRING_MASK] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_CORNERSTONE_MASK] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_TEAL_MASK_TERA] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = sOgerponTeachableLearnset, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = sOgerponTeachableLearnset, #endif // Megas [SPECIES_VENUSAUR_MEGA] = sVenusaurTeachableLearnset, @@ -1011,7 +1211,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_LINOONE_GALARIAN] = sLinooneGalarianTeachableLearnset, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = sDarumakaGalarianTeachableLearnset, - [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianTeachableLearnset, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = sDarmanitanGalarianTeachableLearnset, [SPECIES_YAMASK_GALARIAN] = sYamaskGalarianTeachableLearnset, [SPECIES_STUNFISK_GALARIAN] = sStunfiskGalarianTeachableLearnset, #endif @@ -1143,7 +1343,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_BASCULIN_WHITE_STRIPED] = sBasculinTeachableLearnset, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanTeachableLearnset, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianTeachableLearnset, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = sDarmanitanGalarianTeachableLearnset, // Deerling [SPECIES_DEERLING_SUMMER] = sDeerlingTeachableLearnset, [SPECIES_DEERLING_AUTUMN] = sDeerlingTeachableLearnset, @@ -1234,7 +1434,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = // Xerneas [SPECIES_XERNEAS_ACTIVE] = sXerneasTeachableLearnset, // Zygarde - [SPECIES_ZYGARDE_10] = sZygardeTeachableLearnset, + [SPECIES_ZYGARDE_10_AURA_BREAK] = sZygardeTeachableLearnset, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardeTeachableLearnset, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardeTeachableLearnset, [SPECIES_ZYGARDE_COMPLETE] = sZygardeTeachableLearnset, @@ -1304,15 +1504,6 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_SINISTEA_ANTIQUE] = sSinisteaTeachableLearnset, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = sPolteageistTeachableLearnset, - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_MATCHA_CREAM] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_MINT_CREAM] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_LEMON_CREAM] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_SALTED_CREAM] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_RUBY_SWIRL] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAlcremieTeachableLearnset, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAlcremieTeachableLearnset, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = sEiscueTeachableLearnset, // Indeedee @@ -1334,6 +1525,46 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexShadowRiderTeachableLearnset, // Enamorus [SPECIES_ENAMORUS_THERIAN] = sEnamorusTeachableLearnset, + // Basculegion [SPECIES_BASCULEGION_FEMALE] = sBasculegionTeachableLearnset, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = sVenusaurTeachableLearnset, + [SPECIES_CHARIZARD_GIGANTAMAX] = sCharizardTeachableLearnset, + [SPECIES_BLASTOISE_GIGANTAMAX] = sBlastoiseTeachableLearnset, + [SPECIES_BUTTERFREE_GIGANTAMAX] = sButterfreeTeachableLearnset, + [SPECIES_PIKACHU_GIGANTAMAX] = sPikachuTeachableLearnset, + [SPECIES_MEOWTH_GIGANTAMAX] = sMeowthTeachableLearnset, + [SPECIES_MACHAMP_GIGANTAMAX] = sMachampTeachableLearnset, + [SPECIES_GENGAR_GIGANTAMAX] = sGengarTeachableLearnset, + [SPECIES_KINGLER_GIGANTAMAX] = sKinglerTeachableLearnset, + [SPECIES_LAPRAS_GIGANTAMAX] = sLaprasTeachableLearnset, + [SPECIES_EEVEE_GIGANTAMAX] = sEeveeTeachableLearnset, + [SPECIES_SNORLAX_GIGANTAMAX] = sSnorlaxTeachableLearnset, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_GARBODOR_GIGANTAMAX] = sGarbodorTeachableLearnset, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_MELMETAL_GIGANTAMAX] = sMelmetalTeachableLearnset, +#endif + [SPECIES_RILLABOOM_GIGANTAMAX] = sRillaboomTeachableLearnset, + [SPECIES_CINDERACE_GIGANTAMAX] = sCinderaceTeachableLearnset, + [SPECIES_INTELEON_GIGANTAMAX] = sInteleonTeachableLearnset, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = sCorviknightTeachableLearnset, + [SPECIES_ORBEETLE_GIGANTAMAX] = sOrbeetleTeachableLearnset, + [SPECIES_DREDNAW_GIGANTAMAX] = sDrednawTeachableLearnset, + [SPECIES_COALOSSAL_GIGANTAMAX] = sCoalossalTeachableLearnset, + [SPECIES_FLAPPLE_GIGANTAMAX] = sFlappleTeachableLearnset, + [SPECIES_APPLETUN_GIGANTAMAX] = sAppletunTeachableLearnset, + [SPECIES_SANDACONDA_GIGANTAMAX] = sSandacondaTeachableLearnset, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = sToxtricityAmpedTeachableLearnset, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = sToxtricityLowKeyTeachableLearnset, + [SPECIES_CENTISKORCH_GIGANTAMAX] = sCentiskorchTeachableLearnset, + [SPECIES_HATTERENE_GIGANTAMAX] = sHattereneTeachableLearnset, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = sGrimmsnarlTeachableLearnset, + [SPECIES_ALCREMIE_GIGANTAMAX] = sAlcremieTeachableLearnset, + [SPECIES_COPPERAJAH_GIGANTAMAX] = sCopperajahTeachableLearnset, + [SPECIES_DURALUDON_GIGANTAMAX] = sDuraludonTeachableLearnset, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = sUrshifuSingleStrikeStyleTeachableLearnset, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = sUrshifuRapidStrikeStyleTeachableLearnset, #endif }; diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index b0f162c6d9..5c4de9c7d3 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -16053,7 +16053,7 @@ static const u16 sJirachiTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sDeoxysTeachableLearnset[] = { +static const u16 sDeoxysNormalTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CALM_MIND, @@ -17025,7 +17025,7 @@ static const u16 sBurmyTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sWormadamTeachableLearnset[] = { +static const u16 sWormadamPlantCloakTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, @@ -20141,7 +20141,7 @@ static const u16 sDarkraiTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sShayminTeachableLearnset[] = { +static const u16 sShayminLandTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, MOVE_FACADE, @@ -26250,7 +26250,7 @@ static const u16 sEspurrTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sMeowsticTeachableLearnset[] = { +static const u16 sMeowsticMaleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_CUT, @@ -27666,7 +27666,7 @@ static const u16 sDiancieTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sHoopaTeachableLearnset[] = { +static const u16 sHoopaConfinedTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, @@ -28364,7 +28364,7 @@ static const u16 sRockruffTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sLycanrocTeachableLearnset[] = { +static const u16 sLycanrocMiddayTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, @@ -30945,7 +30945,7 @@ static const u16 sToxelTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sToxtricityTeachableLearnset[] = { +static const u16 sToxtricityAmpedTeachableLearnset[] = { MOVE_ATTRACT, MOVE_FACADE, MOVE_HYPER_BEAM, @@ -31538,7 +31538,7 @@ static const u16 sEiscueTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sIndeedeeTeachableLearnset[] = { +static const u16 sIndeedeeMaleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_FACADE, @@ -31908,7 +31908,7 @@ static const u16 sKubfuTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sUrshifuTeachableLearnset[] = { +static const u16 sUrshifuSingleStrikeStyleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, @@ -32081,6 +32081,10 @@ static const u16 sUrsalunaTeachableLearnset[] = { MOVE_UNAVAILABLE, }; +static const u16 sUrsalunaBloodmoonTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + static const u16 sBasculegionTeachableLearnset[] = { MOVE_UNAVAILABLE, }; @@ -33008,6 +33012,213 @@ static const u16 sDecidueyeHisuianTeachableLearnset[] = { }; #endif +static const u16 sWooperPaldeanTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_AMNESIA, + MOVE_ATTRACT, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_EARTH_POWER, + MOVE_EARTHQUAKE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FRUSTRATION, + MOVE_HELPING_HAND, + MOVE_HIDDEN_POWER, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SECRET_POWER, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNOWSCAPE, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_TOXIC, + MOVE_TRAILBLAZE, + MOVE_WATER_PULSE, + MOVE_WATERFALL, + MOVE_UNAVAILABLE, +}; + +static const u16 sTaurosPaldeanCombatBreedTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_TRAILBLAZE, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTaurosPaldeanBlazeBreedTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_TRAILBLAZE, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTaurosPaldeanAquaBreedTeachableLearnset[] = { + MOVE_ATTRACT, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_FRUSTRATION, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HIDDEN_POWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_RETURN, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SECRET_POWER, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_TOXIC, + MOVE_TRAILBLAZE, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + + static const u16 sDeoxysAttackTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, @@ -33541,3 +33752,4173 @@ static const u16 sCalyrexShadowRiderTeachableLearnset[] = { MOVE_UNAVAILABLE, }; #endif + +#if P_GEN_9_POKEMON == TRUE +static const u16 sSprigatitoTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_GRASS_PLEDGE, + MOVE_HELPING_HAND, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SLAP, + MOVE_NASTY_PLOT, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sFloragatoTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLING, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_GRASS_PLEDGE, + MOVE_HELPING_HAND, + MOVE_LEAF_STORM, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SLAP, + MOVE_NASTY_PLOT, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER_PUNCH, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sMeowscaradaTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AURA_SPHERE, + MOVE_BRICK_BREAK, + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_DARK_PULSE, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_FRENZY_PLANT, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_GRASS_PLEDGE, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SLAP, + MOVE_NASTY_PLOT, + MOVE_PLAY_ROUGH, + MOVE_POLLEN_PUFF, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SHADOW_CLAW, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_PUNCH, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sFuecocoTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_PLEDGE, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HYPER_VOICE, + MOVE_MUD_SLAP, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCrocalorTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_PLEDGE, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HYPER_VOICE, + MOVE_MUD_SLAP, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSkeledirgeTeachableLearnset[] = { + MOVE_BLAST_BURN, + MOVE_BODY_SLAM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_PLEDGE, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IMPRISON, + MOVE_MUD_SLAP, + MOVE_NIGHT_SHADE, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuaxlyTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BATON_PASS, + MOVE_BRAVE_BIRD, + MOVE_CHILLING_WATER, + MOVE_DISARMING_VOICE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_MISTY_TERRAIN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PLEDGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuaxwellTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BATON_PASS, + MOVE_BRAVE_BIRD, + MOVE_CHILLING_WATER, + MOVE_DISARMING_VOICE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MISTY_TERRAIN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PLEDGE, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sQuaquavalTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BATON_PASS, + MOVE_BRAVE_BIRD, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CHILLING_WATER, + MOVE_CLOSE_COMBAT, + MOVE_DISARMING_VOICE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HURRICANE, + MOVE_HYDRO_CANNON, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICE_SPINNER, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MISTY_TERRAIN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_U_TURN, + MOVE_WATER_PLEDGE, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sLechonkTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_BULLET_SEED, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HELPING_HAND, + MOVE_HYPER_VOICE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sOinkologneMaleTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_BULLET_SEED, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sOinkologneFemaleTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_BULLET_SEED, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_DISARMING_VOICE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTarountulaTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_BUG_BUZZ, + MOVE_BULLET_SEED, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_GIGA_DRAIN, + MOVE_GRASS_KNOT, + MOVE_LEECH_LIFE, + MOVE_POISON_JAB, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SPIKES, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sSpidopsTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BUG_BUZZ, + MOVE_BULLET_SEED, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_FLING, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_LEECH_LIFE, + MOVE_LOW_KICK, + MOVE_POISON_JAB, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_TOMB, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SPIKES, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sNymbleTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BUG_BUZZ, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_LEECH_LIFE, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sLokixTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BRICK_BREAK, + MOVE_BUG_BUZZ, + MOVE_DARK_PULSE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_LEECH_LIFE, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sPawmiTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_CHARGE_BEAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_HELPING_HAND, + MOVE_METAL_CLAW, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPawmoTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_CHARGE_BEAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_HELPING_HAND, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METAL_CLAW, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sPawmotTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_BODY_PRESS, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CHARGE_BEAM, + MOVE_CHARM, + MOVE_CLOSE_COMBAT, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_PUNCH, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METAL_CLAW, + MOVE_METRONOME, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTandemausTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_VOICE, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_U_TURN, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMausholdTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFidoughTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_BODY_SLAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DAZZLING_GLEAM, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_HELPING_HAND, + MOVE_ICE_FANG, + MOVE_MISTY_TERRAIN, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDachsbunTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DAZZLING_GLEAM, + MOVE_DIG, + MOVE_DRAINING_KISS, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_MISTY_TERRAIN, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSmolivTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sDollivTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_PROTECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sArbolivaTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CHARM, + MOVE_DAZZLING_GLEAM, + MOVE_EARTH_POWER, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_LEAF_STORM, + MOVE_LIGHT_SCREEN, + MOVE_MAGICAL_LEAF, + MOVE_METRONOME, + MOVE_POLLEN_PUFF, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sSquawkabillyTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BRAVE_BIRD, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLY, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sNacliTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sNaclstackTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGarganaclTeachableLearnset[] = { + MOVE_AVALANCHE, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_PUNCH, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_PUNCH, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCharcadetTeachableLearnset[] = { + MOVE_CONFUSE_RAY, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_NIGHT_SHADE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WILL_O_WISP, + MOVE_UNAVAILABLE, +}; + +static const u16 sArmarougeTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_AURA_SPHERE, + MOVE_CALM_MIND, + MOVE_CONFUSE_RAY, + MOVE_DARK_PULSE, + MOVE_DRAGON_PULSE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_IRON_DEFENSE, + MOVE_LIGHT_SCREEN, + MOVE_NIGHT_SHADE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_WILL_O_WISP, + MOVE_UNAVAILABLE, +}; + +static const u16 sCeruledgeTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_CLOSE_COMBAT, + MOVE_CONFUSE_RAY, + MOVE_DRAGON_CLAW, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_FIRE_BLAST, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_FLING, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_LIGHT_SCREEN, + MOVE_NIGHT_SHADE, + MOVE_OVERHEAT, + MOVE_PHANTOM_FORCE, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_WILL_O_WISP, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sTadbulbTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_CHARGE_BEAM, + MOVE_CHILLING_WATER, + MOVE_CONFUSE_RAY, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_HYPER_VOICE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WATER_PULSE, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBelliboltTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_CHARGE_BEAM, + MOVE_CHILLING_WATER, + MOVE_CONFUSE_RAY, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_GIGA_IMPACT, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WATER_PULSE, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWattrelTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BRAVE_BIRD, + MOVE_CHARGE_BEAM, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLY, + MOVE_HURRICANE, + MOVE_PROTECT, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_U_TURN, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sKilowattrelTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BRAVE_BIRD, + MOVE_CHARGE_BEAM, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLY, + MOVE_GIGA_IMPACT, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_PROTECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_U_TURN, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMaschiffTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FIRE_FANG, + MOVE_HELPING_HAND, + MOVE_ICE_FANG, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_FANG, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sMabosstiffTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_CHARM, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FIRE_FANG, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_FANG, + MOVE_OUTRAGE, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_FANG, + MOVE_TRAILBLAZE, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sShroodleTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_ACROBATICS, + MOVE_BATON_PASS, + MOVE_DIG, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_GUNK_SHOT, + MOVE_HELPING_HAND, + MOVE_METRONOME, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_NASTY_PLOT, + MOVE_POISON_JAB, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sGrafaiaiTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_ACROBATICS, + MOVE_BATON_PASS, + MOVE_DIG, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HELPING_HAND, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METRONOME, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_NASTY_PLOT, + MOVE_POISON_JAB, + MOVE_POISON_TAIL, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_VENOSHOCK, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sBramblinTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CONFUSE_RAY, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_LEAF_STORM, + MOVE_NIGHT_SHADE, + MOVE_PHANTOM_FORCE, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_SUBSTITUTE, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBrambleghastTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CONFUSE_RAY, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_NIGHT_SHADE, + MOVE_PHANTOM_FORCE, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_SUBSTITUTE, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_UNAVAILABLE, +}; + +static const u16 sToedscoolTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_BULLET_SEED, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FLASH_CANNON, + MOVE_FOUL_PLAY, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_LEAF_STORM, + MOVE_LIGHT_SCREEN, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_TRICK_ROOM, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sToedscruelTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_BULLET_SEED, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FLASH_CANNON, + MOVE_FOUL_PLAY, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_LIGHT_SCREEN, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_TRICK_ROOM, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sKlawfTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_DIG, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_METAL_CLAW, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sCapsakidTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CRUNCH, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_PROTECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sScovillainTeachableLearnset[] = { + MOVE_BULLET_SEED, + MOVE_CRUNCH, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FLAMETHROWER, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRellorTeachableLearnset[] = { + MOVE_BUG_BUZZ, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_GUNK_SHOT, + MOVE_IRON_DEFENSE, + MOVE_LEECH_LIFE, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sRabscaTeachableLearnset[] = { + MOVE_BUG_BUZZ, + MOVE_CALM_MIND, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_DIG, + MOVE_EARTH_POWER, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HYPER_BEAM, + MOVE_IMPRISON, + MOVE_IRON_DEFENSE, + MOVE_LEECH_LIFE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_POUNCE, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_STORED_POWER, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_X_SCISSOR, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlittleTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_CALM_MIND, + MOVE_CONFUSE_RAY, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FOUL_PLAY, + MOVE_HELPING_HAND, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SEED_BOMB, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_U_TURN, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sEspathraTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BATON_PASS, + MOVE_BODY_SLAM, + MOVE_BRAVE_BIRD, + MOVE_CALM_MIND, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_DISARMING_VOICE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_LIGHT_SCREEN, + MOVE_LOW_KICK, + MOVE_MUD_SLAP, + MOVE_NIGHT_SHADE, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_U_TURN, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTinkatinkTeachableLearnset[] = { + MOVE_DRAINING_KISS, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_HELPING_HAND, + MOVE_LIGHT_SCREEN, + MOVE_METAL_CLAW, + MOVE_METRONOME, + MOVE_PLAY_ROUGH, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTinkatuffTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_DRAINING_KISS, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_HELPING_HAND, + MOVE_LIGHT_SCREEN, + MOVE_METAL_CLAW, + MOVE_METRONOME, + MOVE_PLAY_ROUGH, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sTinkatonTeachableLearnset[] = { + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_DRAINING_KISS, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOUL_PLAY, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_LIGHT_SCREEN, + MOVE_METAL_CLAW, + MOVE_METRONOME, + MOVE_PLAY_ROUGH, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWiglettTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BLIZZARD, + MOVE_BULLDOZE, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FOUL_PLAY, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_LIQUIDATION, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sWugtrioTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BLIZZARD, + MOVE_BULLDOZE, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_LIQUIDATION, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sBombirdierTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BRAVE_BIRD, + MOVE_DARK_PULSE, + MOVE_DRILL_RUN, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLY, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICY_WIND, + MOVE_NASTY_PLOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STEALTH_ROCK, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sFinizenTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_DISARMING_VOICE, + MOVE_DRAINING_KISS, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sPalafinTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_AURA_SPHERE, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULK_UP, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_CLOSE_COMBAT, + MOVE_DISARMING_VOICE, + MOVE_DRAINING_KISS, + MOVE_DRAIN_PUNCH, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_LIQUIDATION, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sVaroomTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GUNK_SHOT, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_STEEL_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TOXIC_SPIKES, + MOVE_VENOSHOCK, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRevavroomTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_OVERHEAT, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_STEEL_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TOXIC_SPIKES, + MOVE_VENOSHOCK, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sCyclizarTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_BODY_SLAM, + MOVE_CRUNCH, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_GIGA_IMPACT, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_SPINNER, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sOrthwormTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlimmetTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GUNK_SHOT, + MOVE_IRON_DEFENSE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sGlimmoraTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SOLAR_BEAM, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sGreavardTeachableLearnset[] = { + MOVE_BULLDOZE, + MOVE_CHARM, + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_ICE_FANG, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_NIGHT_SHADE, + MOVE_PHANTOM_FORCE, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_FANG, + MOVE_TRICK, + MOVE_UNAVAILABLE, +}; + +static const u16 sHoundstoneTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BULLDOZE, + MOVE_CHARM, + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_NIGHT_SHADE, + MOVE_PHANTOM_FORCE, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_FANG, + MOVE_TRICK, + MOVE_WILL_O_WISP, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlamigoTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BRAVE_BIRD, + MOVE_BULK_UP, + MOVE_CHILLING_WATER, + MOVE_CLOSE_COMBAT, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_FLY, + MOVE_GIGA_IMPACT, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_U_TURN, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCetoddleTeachableLearnset[] = { + MOVE_AMNESIA, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_SPINNER, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sCetitanTeachableLearnset[] = { + MOVE_AMNESIA, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHARM, + MOVE_CHILLING_WATER, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_PUNCH, + MOVE_ICE_SPINNER, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sVeluzaTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_CHILLING_WATER, + MOVE_CRUNCH, + MOVE_DRILL_RUN, + MOVE_ENDURE, + MOVE_GIGA_IMPACT, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICY_WIND, + MOVE_LIQUIDATION, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_PSYCHIC_FANGS, + MOVE_PSYCHIC_TERRAIN, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDondozoTeachableLearnset[] = { + MOVE_AVALANCHE, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHILLING_WATER, + MOVE_CRUNCH, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_LIQUIDATION, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sTatsugiriTeachableLearnset[] = { + MOVE_BATON_PASS, + MOVE_CHILLING_WATER, + MOVE_DRACO_METEOR, + MOVE_DRAGON_DANCE, + MOVE_DRAGON_PULSE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_NASTY_PLOT, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sAnnihilapeTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DIG, + MOVE_DRAIN_PUNCH, + MOVE_EARTHQUAKE, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_PUNCH, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METRONOME, + MOVE_NIGHT_SHADE, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PHANTOM_FORCE, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SHADOW_BALL, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_U_TURN, + MOVE_UNAVAILABLE, +}; + +static const u16 sClodsireTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_AMNESIA, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_GUNK_SHOT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_IRON_HEAD, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_POISON_JAB, + MOVE_POISON_TAIL, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SURF, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_TRAILBLAZE, + MOVE_VENOSHOCK, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFarigirafTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_AMNESIA, + MOVE_BATON_PASS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CALM_MIND, + MOVE_CHARGE_BEAM, + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DAZZLING_GLEAM, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IMPRISON, + MOVE_IRON_HEAD, + MOVE_LIGHT_SCREEN, + MOVE_LOW_KICK, + MOVE_NASTY_PLOT, + MOVE_NIGHT_SHADE, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_FANGS, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_TRAILBLAZE, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sDudunsparceTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_AIR_SLASH, + MOVE_AMNESIA, + MOVE_BATON_PASS, + MOVE_BLIZZARD, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CALM_MIND, + MOVE_CHILLING_WATER, + MOVE_DIG, + MOVE_DRAGON_TAIL, + MOVE_DRILL_RUN, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_BEAM, + MOVE_ICE_SPINNER, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_OUTRAGE, + MOVE_POISON_JAB, + MOVE_POISON_TAIL, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_SOLAR_BEAM, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sKingambitTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AIR_SLASH, + MOVE_BRICK_BREAK, + MOVE_DARK_PULSE, + MOVE_DIG, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_FOUL_PLAY, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METAL_CLAW, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER_WAVE, + MOVE_X_SCISSOR, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGreatTuskTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_SPINNER, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYSHOCK, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sScreamTailTeachableLearnset[] = { + MOVE_AMNESIA, + MOVE_BATON_PASS, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BULK_UP, + MOVE_CALM_MIND, + MOVE_CRUNCH, + MOVE_DAZZLING_GLEAM, + MOVE_DIG, + MOVE_DRAIN_PUNCH, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FAKE_TEARS, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_PUNCH, + MOVE_IMPRISON, + MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MISTY_TERRAIN, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_FANGS, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_WATER_PULSE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sBruteBonnetTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLET_SEED, + MOVE_CLOSE_COMBAT, + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_OUTRAGE, + MOVE_POLLEN_PUFF, + MOVE_PROTECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_TRAILBLAZE, + MOVE_VENOSHOCK, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sFlutterManeTeachableLearnset[] = { + MOVE_CALM_MIND, + MOVE_CHARGE_BEAM, + MOVE_CHARM, + MOVE_CONFUSE_RAY, + MOVE_DARK_PULSE, + MOVE_DAZZLING_GLEAM, + MOVE_DISARMING_VOICE, + MOVE_DRAINING_KISS, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FAKE_TEARS, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICY_WIND, + MOVE_IMPRISON, + MOVE_MAGICAL_LEAF, + MOVE_MISTY_TERRAIN, + MOVE_NIGHT_SHADE, + MOVE_PHANTOM_FORCE, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYSHOCK, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_TRICK_ROOM, + MOVE_UNAVAILABLE, +}; + +static const u16 sSlitherWingTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BUG_BUZZ, + MOVE_BULK_UP, + MOVE_CLOSE_COMBAT, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HEAVY_SLAM, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_LEECH_LIFE, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_U_TURN, + MOVE_WILD_CHARGE, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sSandyShocksTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_CHARGE_BEAM, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_IRON_DEFENSE, + MOVE_LIGHT_SCREEN, + MOVE_MUD_SHOT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronTreadsTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_SPINNER, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SMART_STRIKE, + MOVE_STEALTH_ROCK, + MOVE_STEEL_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDER_FANG, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronBundleTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_AIR_CUTTER, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_CHILLING_WATER, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLING, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICE_SPINNER, + MOVE_ICY_WIND, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_U_TURN, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronHandsTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_DRAIN_PUNCH, + MOVE_EARTHQUAKE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_PUNCH, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_METRONOME, + MOVE_PLAY_ROUGH, + MOVE_PROTECT, + MOVE_REST, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronJugulisTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AIR_CUTTER, + MOVE_AIR_SLASH, + MOVE_BODY_SLAM, + MOVE_CHARGE_BEAM, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_EARTH_POWER, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FLAMETHROWER, + MOVE_FLASH_CANNON, + MOVE_FLY, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HURRICANE, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_TOMB, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_U_TURN, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronMothTeachableLearnset[] = { + MOVE_ACID_SPRAY, + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_AIR_SLASH, + MOVE_BUG_BUZZ, + MOVE_CHARGE_BEAM, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HELPING_HAND, + MOVE_HURRICANE, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OVERHEAT, + MOVE_POUNCE, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_STRUGGLE_BUG, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_TOXIC_SPIKES, + MOVE_U_TURN, + MOVE_VENOSHOCK, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronThornsTeachableLearnset[] = { + MOVE_BLIZZARD, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_CHARGE_BEAM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_DRAGON_TAIL, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_PUNCH, + MOVE_IRON_DEFENSE, + MOVE_IRON_HEAD, + MOVE_LOW_KICK, + MOVE_METAL_CLAW, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_BLAST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SNARL, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_FANG, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_UNAVAILABLE, +}; + +static const u16 sFrigibaxTeachableLearnset[] = { + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HELPING_HAND, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICY_WIND, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_UNAVAILABLE, +}; + +static const u16 sArctibaxTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_HELPING_HAND, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_UNAVAILABLE, +}; + +static const u16 sBaxcaliburTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULLDOZE, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_GIGA_IMPACT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, + MOVE_ICE_FANG, + MOVE_ICY_WIND, + MOVE_IRON_HEAD, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNOWSCAPE, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sGimmighoulTeachableLearnset[] = { + MOVE_CONFUSE_RAY, + MOVE_ENDURE, + MOVE_HEX, + MOVE_LIGHT_SCREEN, + MOVE_NASTY_PLOT, + MOVE_NIGHT_SHADE, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_UNAVAILABLE, +}; + +static const u16 sGholdengoTeachableLearnset[] = { + MOVE_CHARGE_BEAM, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FLASH_CANNON, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_IRON_HEAD, + MOVE_LIGHT_SCREEN, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_NASTY_PLOT, + MOVE_NIGHT_SHADE, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_PSYSHOCK, + MOVE_REFLECT, + MOVE_REST, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_STEEL_BEAM, + MOVE_SUBSTITUTE, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_TRICK, + MOVE_UNAVAILABLE, +}; + +static const u16 sWoChienTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLET_SEED, + MOVE_DARK_PULSE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FOUL_PLAY, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_LEAF_STORM, + MOVE_LIGHT_SCREEN, + MOVE_MAGICAL_LEAF, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_POLLEN_PUFF, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SEED_BOMB, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sChienPaoTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AVALANCHE, + MOVE_BLIZZARD, + MOVE_BRICK_BREAK, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_GIGA_IMPACT, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_ICE_SPINNER, + MOVE_ICY_WIND, + MOVE_PROTECT, + MOVE_PSYCHIC_FANGS, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SNOWSCAPE, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_UNAVAILABLE, +}; + +static const u16 sTingLuTeachableLearnset[] = { + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BULLDOZE, + MOVE_DARK_PULSE, + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_EARTH_POWER, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SPIKES, + MOVE_STEALTH_ROCK, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sChiYuTeachableLearnset[] = { + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_NASTY_PLOT, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_WILL_O_WISP, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sRoaringMoonTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AERIAL_ACE, + MOVE_AIR_SLASH, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_CRUNCH, + MOVE_DARK_PULSE, + MOVE_DIG, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLY, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HURRICANE, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_IRON_HEAD, + MOVE_METAL_CLAW, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_STOMPING_TANTRUM, + MOVE_STONE_EDGE, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_TAILWIND, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_U_TURN, + MOVE_X_SCISSOR, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronValiantTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AURA_SPHERE, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CHARGE_BEAM, + MOVE_CLOSE_COMBAT, + MOVE_CONFUSE_RAY, + MOVE_DAZZLING_GLEAM, + MOVE_DRAIN_PUNCH, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENCORE, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FALSE_SWIPE, + MOVE_FIRE_PUNCH, + MOVE_FLING, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HEX, + MOVE_HYPER_BEAM, + MOVE_HYPER_VOICE, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_IMPRISON, + MOVE_LIGHT_SCREEN, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_MAGICAL_LEAF, + MOVE_METRONOME, + MOVE_MISTY_TERRAIN, + MOVE_POISON_JAB, + MOVE_PROTECT, + MOVE_PSYBEAM, + MOVE_PSYCHIC, + MOVE_PSYCHIC_TERRAIN, + MOVE_PSYSHOCK, + MOVE_REFLECT, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SHADOW_BALL, + MOVE_SHADOW_CLAW, + MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_STORED_POWER, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, + MOVE_TRICK, + MOVE_TRICK_ROOM, + MOVE_X_SCISSOR, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sKoraidonTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_BODY_PRESS, + MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, + MOVE_BULK_UP, + MOVE_BULLDOZE, + MOVE_CLOSE_COMBAT, + MOVE_CRUNCH, + MOVE_DIG, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_DRAIN_PUNCH, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FIRE_FANG, + MOVE_FIRE_SPIN, + MOVE_FLAMETHROWER, + MOVE_FLAME_CHARGE, + MOVE_FLARE_BLITZ, + MOVE_FOCUS_BLAST, + MOVE_GIGA_IMPACT, + MOVE_HEAT_WAVE, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_ICE_FANG, + MOVE_IRON_HEAD, + MOVE_LOW_KICK, + MOVE_LOW_SWEEP, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SHADOW_CLAW, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SOLAR_BEAM, + MOVE_STOMPING_TANTRUM, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER_FANG, + MOVE_U_TURN, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sMiraidonTeachableLearnset[] = { + MOVE_ACROBATICS, + MOVE_AGILITY, + MOVE_BODY_SLAM, + MOVE_CALM_MIND, + MOVE_CHARGE_BEAM, + MOVE_CONFUSE_RAY, + MOVE_CRUNCH, + MOVE_DAZZLING_GLEAM, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_EERIE_IMPULSE, + MOVE_ELECTRIC_TERRAIN, + MOVE_ELECTRO_BALL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH_CANNON, + MOVE_GIGA_IMPACT, + MOVE_HEAVY_SLAM, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_OUTRAGE, + MOVE_OVERHEAT, + MOVE_POWER_GEM, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_THUNDER, + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_U_TURN, + MOVE_VOLT_SWITCH, + MOVE_WILD_CHARGE, + MOVE_ZEN_HEADBUTT, + MOVE_UNAVAILABLE, +}; + +static const u16 sWalkingWakeTeachableLearnset[] = { + MOVE_AGILITY, + MOVE_BODY_SLAM, + MOVE_CHILLING_WATER, + MOVE_CRUNCH, + MOVE_DRACO_METEOR, + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_DRAGON_PULSE, + MOVE_DRAGON_TAIL, + MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_FANG, + MOVE_FLAMETHROWER, + MOVE_GIGA_IMPACT, + MOVE_HURRICANE, + MOVE_HYDRO_PUMP, + MOVE_HYPER_BEAM, + MOVE_LIQUIDATION, + MOVE_LOW_KICK, + MOVE_MUD_SHOT, + MOVE_OUTRAGE, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SNARL, + MOVE_SUBSTITUTE, + MOVE_SUNNY_DAY, + MOVE_SURF, + MOVE_SWIFT, + MOVE_TAKE_DOWN, + MOVE_TERA_BLAST, + MOVE_WATERFALL, + MOVE_WATER_PULSE, + MOVE_UNAVAILABLE, +}; + +static const u16 sIronLeavesTeachableLearnset[] = { + MOVE_AERIAL_ACE, + MOVE_AGILITY, + MOVE_AIR_SLASH, + MOVE_BRICK_BREAK, + MOVE_CALM_MIND, + MOVE_CLOSE_COMBAT, + MOVE_ELECTRIC_TERRAIN, + MOVE_ENDURE, + MOVE_ENERGY_BALL, + MOVE_FACADE, + MOVE_FALSE_SWIPE, + MOVE_FOCUS_BLAST, + MOVE_GIGA_DRAIN, + MOVE_GIGA_IMPACT, + MOVE_GRASSY_TERRAIN, + MOVE_GRASS_KNOT, + MOVE_HELPING_HAND, + MOVE_HYPER_BEAM, + MOVE_IMPRISON, + MOVE_IRON_DEFENSE, + MOVE_LEAF_STORM, + MOVE_MAGICAL_LEAF, + MOVE_PROTECT, + MOVE_PSYCHIC_TERRAIN, + MOVE_REST, + MOVE_REVERSAL, + MOVE_SCARY_FACE, + MOVE_SLEEP_TALK, + MOVE_SMART_STRIKE, + MOVE_SOLAR_BEAM, + MOVE_SUBSTITUTE, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, + MOVE_TAKE_DOWN, + MOVE_TAUNT, + MOVE_TERA_BLAST, + MOVE_TRAILBLAZE, + MOVE_WILD_CHARGE, + MOVE_X_SCISSOR, + MOVE_UNAVAILABLE, +}; + +static const u16 sDipplinTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sPoltchageistTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sSinistchaTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sOkidogiTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sMunkidoriTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sFezandipitiTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + +static const u16 sOgerponTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; +#endif diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index d967a50fca..a7d03e09e1 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -152,6 +152,9 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_MAGMAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_PINSIR] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_TAUROS] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 13 }, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_MAGIKARP] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_GYARADOS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, [SPECIES_LAPRAS] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, @@ -218,6 +221,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_SUNFLORA] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, [SPECIES_YANMA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_WOOPER] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, + [SPECIES_WOOPER_PALDEAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, [SPECIES_QUAGSIRE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_ESPEON] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_UMBREON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, @@ -383,7 +387,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_ARON] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, [SPECIES_LAIRON] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 15 }, [SPECIES_AGGRON] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, - [SPECIES_CASTFORM] = { .size = MON_COORDS_SIZE(32, 64), .y_offset = 0 }, + [SPECIES_CASTFORM_NORMAL] = { .size = MON_COORDS_SIZE(32, 64), .y_offset = 0 }, [SPECIES_VOLBEAT] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_ILLUMISE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 8 }, [SPECIES_LILEEP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 8 }, @@ -408,7 +412,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_LATIAS] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_LATIOS] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_JIRACHI] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, - [SPECIES_DEOXYS] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, + [SPECIES_DEOXYS_NORMAL] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_CHIMECHO] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, @@ -436,8 +440,8 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_RAMPARDOS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, [SPECIES_SHIELDON] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_BASTIODON] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, - [SPECIES_BURMY] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 6 }, - [SPECIES_WORMADAM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, + [SPECIES_BURMY_PLANT_CLOAK] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 6 }, + [SPECIES_WORMADAM_PLANT_CLOAK] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_MOTHIM] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_COMBEE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 22 }, [SPECIES_VESPIQUEN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -445,9 +449,9 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_BUIZEL] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_FLOATZEL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, [SPECIES_CHERUBI] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 13 }, - [SPECIES_CHERRIM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 9 }, - [SPECIES_SHELLOS] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 8 }, - [SPECIES_GASTRODON] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, + [SPECIES_CHERRIM_OVERCAST] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 9 }, + [SPECIES_SHELLOS_WEST_SEA] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 8 }, + [SPECIES_GASTRODON_WEST_SEA] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, [SPECIES_AMBIPOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_DRIFLOON] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, [SPECIES_DRIFBLIM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, @@ -511,13 +515,13 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_PALKIA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, [SPECIES_HEATRAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, [SPECIES_REGIGIGAS] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, - [SPECIES_GIRATINA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_GIRATINA_ALTERED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_CRESSELIA] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_PHIONE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_MANAPHY] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 10 }, [SPECIES_DARKRAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_SHAYMIN] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, - [SPECIES_ARCEUS] = ARCEUS_BACK_PIC_COORDS, + [SPECIES_SHAYMIN_LAND] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, + [SPECIES_ARCEUS_NORMAL] = ARCEUS_BACK_PIC_COORDS, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 7 }, @@ -576,12 +580,12 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_WHIMSICOTT] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_PETILIL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 9 }, [SPECIES_LILLIGANT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, - [SPECIES_BASCULIN] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 16 }, + [SPECIES_BASCULIN_RED_STRIPED] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 16 }, [SPECIES_SANDILE] = { .size = MON_COORDS_SIZE(64, 32), .y_offset = 18 }, [SPECIES_KROKOROK] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, [SPECIES_KROOKODILE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_DARUMAKA] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 12 }, - [SPECIES_DARMANITAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_DARMANITAN_STANDARD_MODE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_MARACTUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_DWEBBLE] = { .size = MON_COORDS_SIZE(56, 32), .y_offset = 17 }, [SPECIES_CRUSTLE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, @@ -611,8 +615,8 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_VANILLITE] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, [SPECIES_VANILLISH] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, [SPECIES_VANILLUXE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, - [SPECIES_DEERLING] = DEERLING_BACK_PIC_COORDS, - [SPECIES_SAWSBUCK] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 5 }, + [SPECIES_DEERLING_SPRING] = DEERLING_BACK_PIC_COORDS, + [SPECIES_SAWSBUCK_SPRING] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 5 }, [SPECIES_EMOLGA] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 16 }, [SPECIES_KARRABLAST] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 14 }, [SPECIES_ESCAVALIER] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, @@ -667,14 +671,14 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_COBALION] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 6 }, [SPECIES_TERRAKION] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, [SPECIES_VIRIZION] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, - [SPECIES_TORNADUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_THUNDURUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TORNADUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_THUNDURUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_RESHIRAM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, [SPECIES_ZEKROM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_LANDORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_LANDORUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KYUREM] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, - [SPECIES_KELDEO] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 4 }, - [SPECIES_MELOETTA] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, + [SPECIES_KELDEO_ORDINARY] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 4 }, + [SPECIES_MELOETTA_ARIA] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, [SPECIES_GENESECT] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, #endif #if P_GEN_6_POKEMON == TRUE @@ -694,22 +698,22 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_TALONFLAME] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_SCATTERBUG] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 12 }, [SPECIES_SPEWPA] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 12 }, - [SPECIES_VIVILLON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_VIVILLON_ICY_SNOW] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_LITLEO] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 9 }, [SPECIES_PYROAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_FLABEBE] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, - [SPECIES_FLOETTE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - [SPECIES_FLORGES] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, + [SPECIES_FLABEBE_RED_FLOWER] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, + [SPECIES_FLOETTE_RED_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_FLORGES_RED_FLOWER] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_SKIDDO] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_GOGOAT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, [SPECIES_PANCHAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, [SPECIES_PANGORO] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, - [SPECIES_FURFROU] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_FURFROU_NATURAL] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_ESPURR] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - [SPECIES_MEOWSTIC] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_MEOWSTIC_MALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, [SPECIES_HONEDGE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, [SPECIES_DOUBLADE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, - [SPECIES_AEGISLASH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_AEGISLASH_SHIELD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, [SPECIES_SPRITZEE] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_AROMATISSE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, [SPECIES_SWIRLIX] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 12 }, @@ -738,23 +742,23 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_KLEFKI] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 8 }, [SPECIES_PHANTUMP] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, [SPECIES_TREVENANT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, - [SPECIES_PUMPKABOO] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 13 }, - [SPECIES_GOURGEIST] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, + [SPECIES_PUMPKABOO_AVERAGE] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 13 }, + [SPECIES_GOURGEIST_AVERAGE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_BERGMITE] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 13 }, [SPECIES_AVALUGG] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, [SPECIES_NOIBAT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 7 }, [SPECIES_NOIVERN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, - [SPECIES_XERNEAS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_XERNEAS_NEUTRAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_YVELTAL] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 10 }, - [SPECIES_ZYGARDE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_ZYGARDE_50_AURA_BREAK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_DIANCIE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, - [SPECIES_HOOPA] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, + [SPECIES_HOOPA_CONFINED] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_VOLCANION] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_ROWLET] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 15 }, - [SPECIES_DARTRIX] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 4 }, - [SPECIES_DECIDUEYE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, + [SPECIES_ROWLET] = { .size = MON_COORDS_SIZE(43, 36), .y_offset = 15 }, + [SPECIES_DARTRIX] = { .size = MON_COORDS_SIZE(56, 54), .y_offset = 4 }, + [SPECIES_DECIDUEYE] = { .size = MON_COORDS_SIZE(46, 62), .y_offset = 0 }, [SPECIES_LITTEN] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 11 }, [SPECIES_TORRACAT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_INCINEROAR] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, @@ -771,12 +775,12 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_VIKAVOLT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_CRABRAWLER] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_CRABOMINABLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_ORICORIO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ORICORIO_BAILE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CUTIEFLY] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 15 }, [SPECIES_RIBOMBEE] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_ROCKRUFF] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, - [SPECIES_LYCANROC] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, - [SPECIES_WISHIWASHI] = { .size = MON_COORDS_SIZE(56, 32), .y_offset = 18 }, + [SPECIES_LYCANROC_MIDDAY] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, + [SPECIES_WISHIWASHI_SOLO] = { .size = MON_COORDS_SIZE(56, 32), .y_offset = 18 }, [SPECIES_MAREANIE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 15 }, [SPECIES_TOXAPEX] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_MUDBRAY] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, @@ -796,25 +800,25 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_TSAREENA] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_COMFEY] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 11 }, [SPECIES_ORANGURU] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 12 }, - [SPECIES_PASSIMIAN] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, + [SPECIES_PASSIMIAN] = { .size = MON_COORDS_SIZE(51, 52), .y_offset = 7 }, [SPECIES_WIMPOD] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 10 }, [SPECIES_GOLISOPOD] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_SANDYGAST] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, [SPECIES_PALOSSAND] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_PYUKUMUKU] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 16 }, [SPECIES_TYPE_NULL] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, - [SPECIES_SILVALLY] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - [SPECIES_MINIOR] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 14 }, + [SPECIES_SILVALLY_NORMAL] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_MINIOR_METEOR_RED] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 14 }, [SPECIES_KOMALA] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_TURTONATOR] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 9 }, [SPECIES_TOGEDEMARU] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 13 }, - [SPECIES_MIMIKYU] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, + [SPECIES_MIMIKYU_DISGUISED] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, [SPECIES_BRUXISH] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 14 }, [SPECIES_DRAMPA] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_DHELMISE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_JANGMO_O] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, - [SPECIES_HAKAMO_O] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 5 }, - [SPECIES_KOMMO_O] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_JANGMO_O] = { .size = MON_COORDS_SIZE(42, 56), .y_offset = 5 }, + [SPECIES_HAKAMO_O] = { .size = MON_COORDS_SIZE(49, 56), .y_offset = 5 }, + [SPECIES_KOMMO_O] = { .size = MON_COORDS_SIZE(60, 60), .y_offset = 2 }, [SPECIES_TAPU_KOKO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_TAPU_LELE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_TAPU_BULU] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, @@ -881,13 +885,13 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_ARROKUDA] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 15 }, [SPECIES_BARRASKEWDA] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 11 }, [SPECIES_TOXEL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 8 }, - [SPECIES_TOXTRICITY] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_TOXTRICITY_AMPED] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_SIZZLIPEDE] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 16 }, [SPECIES_CENTISKORCH] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_CLOBBOPUS] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 14 }, [SPECIES_GRAPPLOCT] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, - [SPECIES_SINISTEA] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 16 }, - [SPECIES_POLTEAGEIST] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, + [SPECIES_SINISTEA_PHONY] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 16 }, + [SPECIES_POLTEAGEIST_PHONY] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, [SPECIES_HATENNA] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 12 }, [SPECIES_HATTREM] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_HATTERENE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, @@ -901,15 +905,77 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_MR_RIME] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_RUNERIGUS] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_MILCERY] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 16 }, - [SPECIES_ALCREMIE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, [SPECIES_FALINKS] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 15 }, [SPECIES_PINCURCHIN] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 13 }, [SPECIES_SNOM] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 17 }, [SPECIES_FROSMOTH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_STONJOURNER] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, - [SPECIES_EISCUE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, - [SPECIES_INDEEDEE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - [SPECIES_MORPEKO] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 8 }, + [SPECIES_EISCUE_ICE_FACE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, + [SPECIES_INDEEDEE_MALE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, + [SPECIES_MORPEKO_FULL_BELLY] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 8 }, [SPECIES_CUFANT] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 11 }, [SPECIES_COPPERAJAH] = { .size = MON_COORDS_SIZE(64, 32), .y_offset = 16 }, [SPECIES_DRACOZOLT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, @@ -920,11 +986,11 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_DREEPY] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, [SPECIES_DRAKLOAK] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 11 }, [SPECIES_DRAGAPULT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, - [SPECIES_ZACIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, - [SPECIES_ZAMAZENTA] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_ETERNATUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_KUBFU] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 9 }, - [SPECIES_URSHIFU] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_ZARUDE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_REGIELEKI] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 9 }, [SPECIES_REGIDRAGO] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, @@ -934,10 +1000,144 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_WYRDEER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KLEAVOR] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_URSALUNA] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 14 }, - [SPECIES_BASCULEGION] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_URSALUNA_BLOODMOON] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 3 }, + [SPECIES_BASCULEGION_MALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SNEASLER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_OVERQWIL] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, - [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ENAMORUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_FLORAGATO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_MEOWSCARADA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_FUECOCO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_CROCALOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SKELEDIRGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_QUAXLY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_QUAXWELL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_QUAQUAVAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_LECHONK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_OINKOLOGNE_MALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_OINKOLOGNE_FEMALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_TAROUNTULA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_SPIDOPS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_NYMBLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_LOKIX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_PAWMI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_PAWMO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_PAWMOT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_TANDEMAUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_FIDOUGH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_DACHSBUN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_SMOLIV] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_DOLLIV] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_ARBOLIVA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_NACLI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_NACLSTACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GARGANACL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_CHARCADET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_ARMAROUGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_CERULEDGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TADBULB] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_BELLIBOLT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_WATTREL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_KILOWATTREL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_MASCHIFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_MABOSSTIFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_SHROODLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_GRAFAIAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_BRAMBLIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_BRAMBLEGHAST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_TOEDSCOOL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_TOEDSCRUEL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_KLAWF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 20 }, + [SPECIES_CAPSAKID] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_SCOVILLAIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_RELLOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_RABSCA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FLITTLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_ESPATHRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_TINKATINK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_TINKATUFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_TINKATON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_WIGLETT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_WUGTRIO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_BOMBIRDIER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_FINIZEN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_PALAFIN_ZERO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_PALAFIN_HERO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_VAROOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_REVAVROOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_CYCLIZAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_ORTHWORM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GLIMMET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_GLIMMORA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_GREAVARD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_HOUNDSTONE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_FLAMIGO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_CETODDLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_CETITAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_VELUZA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_DONDOZO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_TATSUGIRI_CURLY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 17 }, + [SPECIES_TATSUGIRI_DROOPY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 17 }, + [SPECIES_TATSUGIRI_STRETCHY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 17 }, + [SPECIES_ANNIHILAPE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_CLODSIRE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_FARIGIRAF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_KINGAMBIT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GREAT_TUSK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_SCREAM_TAIL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_BRUTE_BONNET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_FLUTTER_MANE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_SLITHER_WING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SANDY_SHOCKS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_IRON_TREADS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_IRON_BUNDLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_IRON_HANDS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_IRON_JUGULIS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_MOTH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_IRON_THORNS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FRIGIBAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_ARCTIBAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_BAXCALIBUR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_GIMMIGHOUL_CHEST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GIMMIGHOUL_ROAMING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_GHOLDENGO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_WO_CHIEN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_CHIEN_PAO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TING_LU] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_CHI_YU] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ROARING_MOON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_IRON_VALIANT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_KORAIDON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MIRAIDON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_WALKING_WAKE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_IRON_LEAVES] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_DIPPLIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_POLTCHAGEIST_ARTISAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_SINISTCHA_UNREMARKABLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_SINISTCHA_MASTERPIECE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_OKIDOGI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_MUNKIDORI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FEZANDIPITI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_OGERPON_TEAL_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_OGERPON_WELLSPRING_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_OGERPON_CORNERSTONE_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 16 }, + [SPECIES_OGERPON_TEAL_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif [SPECIES_VENUSAUR_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, [SPECIES_CHARIZARD_MEGA_X] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, @@ -1033,7 +1233,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_LINOONE_GALARIAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, - [SPECIES_DARMANITAN_GALARIAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_YAMASK_GALARIAN] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, [SPECIES_STUNFISK_GALARIAN] = { .size = MON_COORDS_SIZE(64, 24), .y_offset = 23 }, #endif @@ -1165,7 +1365,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_BASCULIN_WHITE_STRIPED] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 16 }, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, // Deerling [SPECIES_DEERLING_SUMMER] = DEERLING_BACK_PIC_COORDS, [SPECIES_DEERLING_AUTUMN] = DEERLING_BACK_PIC_COORDS, @@ -1256,7 +1456,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = // Xerneas [SPECIES_XERNEAS_ACTIVE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, // Zygarde - [SPECIES_ZYGARDE_10] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, + [SPECIES_ZYGARDE_10_AURA_BREAK] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_ZYGARDE_COMPLETE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1326,15 +1526,6 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_SINISTEA_ANTIQUE] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 16 }, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_MINT_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_LEMON_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_SALTED_CREAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, // Indeedee @@ -1358,6 +1549,41 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES + 1] = [SPECIES_ENAMORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, // Basculegion [SPECIES_BASCULEGION_FEMALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_CHARIZARD_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_BLASTOISE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_BUTTERFREE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_PIKACHU_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MEOWTH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_MACHAMP_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_GENGAR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_KINGLER_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_LAPRAS_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_EEVEE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_SNORLAX_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_GARBODOR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_MELMETAL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_RILLABOOM_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_CINDERACE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_INTELEON_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_ORBEETLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_DREDNAW_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_COALOSSAL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_FLAPPLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_APPLETUN_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_SANDACONDA_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CENTISKORCH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_HATTERENE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_ALCREMIE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_COPPERAJAH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_DURALUDON_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, #endif [SPECIES_EGG] = { .size = MON_COORDS_SIZE(24, 24), .y_offset = 20 }, }; diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index a232abb567..0ebcf172f4 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -129,6 +129,9 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(MAGMAR, gMonBackPic_Magmar), SPECIES_SPRITE(PINSIR, gMonBackPic_Pinsir), SPECIES_SPRITE(TAUROS, gMonBackPic_Tauros), + SPECIES_SPRITE(TAUROS_PALDEAN_COMBAT_BREED, gMonBackPic_TaurosPaldeanCombatBreed), + SPECIES_SPRITE(TAUROS_PALDEAN_BLAZE_BREED, gMonBackPic_TaurosPaldeanBlazeBreed), + SPECIES_SPRITE(TAUROS_PALDEAN_AQUA_BREED, gMonBackPic_TaurosPaldeanAquaBreed), SPECIES_SPRITE(MAGIKARP, gMonBackPic_Magikarp), SPECIES_SPRITE(GYARADOS, gMonBackPic_Gyarados), SPECIES_SPRITE(LAPRAS, gMonBackPic_Lapras), @@ -195,6 +198,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(SUNFLORA, gMonBackPic_Sunflora), SPECIES_SPRITE(YANMA, gMonBackPic_Yanma), SPECIES_SPRITE(WOOPER, gMonBackPic_Wooper), + SPECIES_SPRITE(WOOPER_PALDEAN, gMonBackPic_WooperPaldean), SPECIES_SPRITE(QUAGSIRE, gMonBackPic_Quagsire), SPECIES_SPRITE(ESPEON, gMonBackPic_Espeon), SPECIES_SPRITE(UMBREON, gMonBackPic_Umbreon), @@ -360,7 +364,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ARON, gMonBackPic_Aron), SPECIES_SPRITE(LAIRON, gMonBackPic_Lairon), SPECIES_SPRITE(AGGRON, gMonBackPic_Aggron), - SPECIES_SPRITE(CASTFORM, gMonBackPic_Castform), + SPECIES_SPRITE(CASTFORM_NORMAL, gMonBackPic_CastformNormal), SPECIES_SPRITE(VOLBEAT, gMonBackPic_Volbeat), SPECIES_SPRITE(ILLUMISE, gMonBackPic_Illumise), SPECIES_SPRITE(LILEEP, gMonBackPic_Lileep), @@ -385,7 +389,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(LATIAS, gMonBackPic_Latias), SPECIES_SPRITE(LATIOS, gMonBackPic_Latios), SPECIES_SPRITE(JIRACHI, gMonBackPic_Jirachi), - SPECIES_SPRITE(DEOXYS, gMonBackPic_Deoxys), + SPECIES_SPRITE(DEOXYS_NORMAL, gMonBackPic_DeoxysNormal), SPECIES_SPRITE(CHIMECHO, gMonBackPic_Chimecho), #if P_GEN_4_POKEMON == TRUE SPECIES_SPRITE(TURTWIG, gMonBackPic_Turtwig), @@ -413,8 +417,8 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(RAMPARDOS, gMonBackPic_Rampardos), SPECIES_SPRITE(SHIELDON, gMonBackPic_Shieldon), SPECIES_SPRITE(BASTIODON, gMonBackPic_Bastiodon), - SPECIES_SPRITE(BURMY, gMonBackPic_Burmy), - SPECIES_SPRITE(WORMADAM, gMonBackPic_Wormadam), + SPECIES_SPRITE(BURMY_PLANT_CLOAK, gMonBackPic_BurmyPlantCloak), + SPECIES_SPRITE(WORMADAM_PLANT_CLOAK, gMonBackPic_WormadamPlantCloak), SPECIES_SPRITE(MOTHIM, gMonBackPic_Mothim), SPECIES_SPRITE(COMBEE, gMonBackPic_Combee), SPECIES_SPRITE(VESPIQUEN, gMonBackPic_Vespiquen), @@ -422,9 +426,9 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(BUIZEL, gMonBackPic_Buizel), SPECIES_SPRITE(FLOATZEL, gMonBackPic_Floatzel), SPECIES_SPRITE(CHERUBI, gMonBackPic_Cherubi), - SPECIES_SPRITE(CHERRIM, gMonBackPic_Cherrim), - SPECIES_SPRITE(SHELLOS, gMonBackPic_Shellos), - SPECIES_SPRITE(GASTRODON, gMonBackPic_Gastrodon), + SPECIES_SPRITE(CHERRIM_OVERCAST, gMonBackPic_CherrimOvercast), + SPECIES_SPRITE(SHELLOS_WEST_SEA, gMonBackPic_ShellosWestSea), + SPECIES_SPRITE(GASTRODON_WEST_SEA, gMonBackPic_GastrodonWestSea), SPECIES_SPRITE(AMBIPOM, gMonBackPic_Ambipom), SPECIES_SPRITE(DRIFLOON, gMonBackPic_Drifloon), SPECIES_SPRITE(DRIFBLIM, gMonBackPic_Drifblim), @@ -488,12 +492,12 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(PALKIA, gMonBackPic_Palkia), SPECIES_SPRITE(HEATRAN, gMonBackPic_Heatran), SPECIES_SPRITE(REGIGIGAS, gMonBackPic_Regigigas), - SPECIES_SPRITE(GIRATINA, gMonBackPic_Giratina), + SPECIES_SPRITE(GIRATINA_ALTERED, gMonBackPic_GiratinaAltered), SPECIES_SPRITE(CRESSELIA, gMonBackPic_Cresselia), SPECIES_SPRITE(PHIONE, gMonBackPic_Phione), SPECIES_SPRITE(MANAPHY, gMonBackPic_Manaphy), SPECIES_SPRITE(DARKRAI, gMonBackPic_Darkrai), - SPECIES_SPRITE(SHAYMIN, gMonBackPic_Shaymin), + SPECIES_SPRITE(SHAYMIN_LAND, gMonBackPic_ShayminLand), SPECIES_SPRITE(ARCEUS, gMonBackPic_Arceus), #endif #if P_GEN_5_POKEMON == TRUE @@ -553,12 +557,12 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(WHIMSICOTT, gMonBackPic_Whimsicott), SPECIES_SPRITE(PETILIL, gMonBackPic_Petilil), SPECIES_SPRITE(LILLIGANT, gMonBackPic_Lilligant), - SPECIES_SPRITE(BASCULIN, gMonBackPic_Basculin), + SPECIES_SPRITE(BASCULIN, gMonBackPic_BasculinRedStriped), SPECIES_SPRITE(SANDILE, gMonBackPic_Sandile), SPECIES_SPRITE(KROKOROK, gMonBackPic_Krokorok), SPECIES_SPRITE(KROOKODILE, gMonBackPic_Krookodile), SPECIES_SPRITE(DARUMAKA, gMonBackPic_Darumaka), - SPECIES_SPRITE(DARMANITAN, gMonBackPic_Darmanitan), + SPECIES_SPRITE(DARMANITAN_STANDARD_MODE, gMonBackPic_DarmanitanStandardMode), SPECIES_SPRITE(MARACTUS, gMonBackPic_Maractus), SPECIES_SPRITE(DWEBBLE, gMonBackPic_Dwebble), SPECIES_SPRITE(CRUSTLE, gMonBackPic_Crustle), @@ -588,8 +592,8 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(VANILLITE, gMonBackPic_Vanillite), SPECIES_SPRITE(VANILLISH, gMonBackPic_Vanillish), SPECIES_SPRITE(VANILLUXE, gMonBackPic_Vanilluxe), - SPECIES_SPRITE(DEERLING, gMonBackPic_Deerling), - SPECIES_SPRITE(SAWSBUCK, gMonBackPic_Sawsbuck), + SPECIES_SPRITE(DEERLING_SPRING, gMonBackPic_Deerling), + SPECIES_SPRITE(SAWSBUCK_SPRING, gMonBackPic_SawsbuckSpring), SPECIES_SPRITE(EMOLGA, gMonBackPic_Emolga), SPECIES_SPRITE(KARRABLAST, gMonBackPic_Karrablast), SPECIES_SPRITE(ESCAVALIER, gMonBackPic_Escavalier), @@ -644,14 +648,14 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(COBALION, gMonBackPic_Cobalion), SPECIES_SPRITE(TERRAKION, gMonBackPic_Terrakion), SPECIES_SPRITE(VIRIZION, gMonBackPic_Virizion), - SPECIES_SPRITE(TORNADUS, gMonBackPic_Tornadus), - SPECIES_SPRITE(THUNDURUS, gMonBackPic_Thundurus), + SPECIES_SPRITE(TORNADUS_INCARNATE, gMonBackPic_TornadusIncarnate), + SPECIES_SPRITE(THUNDURUS_INCARNATE, gMonBackPic_ThundurusIncarnate), SPECIES_SPRITE(RESHIRAM, gMonBackPic_Reshiram), SPECIES_SPRITE(ZEKROM, gMonBackPic_Zekrom), - SPECIES_SPRITE(LANDORUS, gMonBackPic_Landorus), + SPECIES_SPRITE(LANDORUS_INCARNATE, gMonBackPic_LandorusIncarnate), SPECIES_SPRITE(KYUREM, gMonBackPic_Kyurem), - SPECIES_SPRITE(KELDEO, gMonBackPic_Keldeo), - SPECIES_SPRITE(MELOETTA, gMonBackPic_Meloetta), + SPECIES_SPRITE(KELDEO_ORDINARY, gMonBackPic_KeldeoOrdinary), + SPECIES_SPRITE(MELOETTA, gMonBackPic_MeloettaAria), SPECIES_SPRITE(GENESECT, gMonBackPic_Genesect), #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(TALONFLAME, gMonBackPic_Talonflame), SPECIES_SPRITE(SCATTERBUG, gMonBackPic_Scatterbug), SPECIES_SPRITE(SPEWPA, gMonBackPic_Spewpa), - SPECIES_SPRITE(VIVILLON, gMonBackPic_Vivillon), + SPECIES_SPRITE(VIVILLON_ICY_SNOW, gMonBackPic_VivillonIcySnow), SPECIES_SPRITE(LITLEO, gMonBackPic_Litleo), SPECIES_SPRITE(PYROAR, gMonBackPic_Pyroar), - SPECIES_SPRITE(FLABEBE, gMonBackPic_Flabebe), - SPECIES_SPRITE(FLOETTE, gMonBackPic_Floette), - SPECIES_SPRITE(FLORGES, gMonBackPic_Florges), + SPECIES_SPRITE(FLABEBE_RED_FLOWER, gMonBackPic_Flabebe), + SPECIES_SPRITE(FLOETTE_RED_FLOWER, gMonBackPic_Floette), + SPECIES_SPRITE(FLORGES_RED_FLOWER, gMonBackPic_Florges), SPECIES_SPRITE(SKIDDO, gMonBackPic_Skiddo), SPECIES_SPRITE(GOGOAT, gMonBackPic_Gogoat), SPECIES_SPRITE(PANCHAM, gMonBackPic_Pancham), SPECIES_SPRITE(PANGORO, gMonBackPic_Pangoro), - SPECIES_SPRITE(FURFROU, gMonBackPic_Furfrou), + SPECIES_SPRITE(FURFROU_NATURAL, gMonBackPic_FurfrouNatural), SPECIES_SPRITE(ESPURR, gMonBackPic_Espurr), - SPECIES_SPRITE(MEOWSTIC, gMonBackPic_Meowstic), + SPECIES_SPRITE(MEOWSTIC_MALE, gMonBackPic_MeowsticMale), SPECIES_SPRITE(HONEDGE, gMonBackPic_Honedge), SPECIES_SPRITE(DOUBLADE, gMonBackPic_Doublade), - SPECIES_SPRITE(AEGISLASH, gMonBackPic_Aegislash), + SPECIES_SPRITE(AEGISLASH_SHIELD, gMonBackPic_AegislashShield), SPECIES_SPRITE(SPRITZEE, gMonBackPic_Spritzee), SPECIES_SPRITE(AROMATISSE, gMonBackPic_Aromatisse), SPECIES_SPRITE(SWIRLIX, gMonBackPic_Swirlix), @@ -715,17 +719,17 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(KLEFKI, gMonBackPic_Klefki), SPECIES_SPRITE(PHANTUMP, gMonBackPic_Phantump), SPECIES_SPRITE(TREVENANT, gMonBackPic_Trevenant), - SPECIES_SPRITE(PUMPKABOO, gMonBackPic_Pumpkaboo), - SPECIES_SPRITE(GOURGEIST, gMonBackPic_Gourgeist), + SPECIES_SPRITE(PUMPKABOO_AVERAGE, gMonBackPic_PumpkabooAverage), + SPECIES_SPRITE(GOURGEIST_AVERAGE, gMonBackPic_GourgeistAverage), SPECIES_SPRITE(BERGMITE, gMonBackPic_Bergmite), SPECIES_SPRITE(AVALUGG, gMonBackPic_Avalugg), SPECIES_SPRITE(NOIBAT, gMonBackPic_Noibat), SPECIES_SPRITE(NOIVERN, gMonBackPic_Noivern), - SPECIES_SPRITE(XERNEAS, gMonBackPic_Xerneas), + SPECIES_SPRITE(XERNEAS_NEUTRAL, gMonBackPic_XerneasNeutral), SPECIES_SPRITE(YVELTAL, gMonBackPic_Yveltal), - SPECIES_SPRITE(ZYGARDE, gMonBackPic_Zygarde), + SPECIES_SPRITE(ZYGARDE_50_AURA_BREAK, gMonBackPic_Zygarde50), SPECIES_SPRITE(DIANCIE, gMonBackPic_Diancie), - SPECIES_SPRITE(HOOPA, gMonBackPic_Hoopa), + SPECIES_SPRITE(HOOPA_CONFINED, gMonBackPic_HoopaConfined), SPECIES_SPRITE(VOLCANION, gMonBackPic_Volcanion), #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(VIKAVOLT, gMonBackPic_Vikavolt), SPECIES_SPRITE(CRABRAWLER, gMonBackPic_Crabrawler), SPECIES_SPRITE(CRABOMINABLE, gMonBackPic_Crabominable), - SPECIES_SPRITE(ORICORIO, gMonBackPic_Oricorio), + SPECIES_SPRITE(ORICORIO_BAILE, gMonBackPic_OricorioBaile), SPECIES_SPRITE(CUTIEFLY, gMonBackPic_Cutiefly), SPECIES_SPRITE(RIBOMBEE, gMonBackPic_Ribombee), SPECIES_SPRITE(ROCKRUFF, gMonBackPic_Rockruff), - SPECIES_SPRITE(LYCANROC, gMonBackPic_Lycanroc), - SPECIES_SPRITE(WISHIWASHI, gMonBackPic_Wishiwashi), + SPECIES_SPRITE(LYCANROC_MIDDAY, gMonBackPic_LycanrocMidday), + SPECIES_SPRITE(WISHIWASHI_SOLO, gMonBackPic_WishiwashiSolo), SPECIES_SPRITE(MAREANIE, gMonBackPic_Mareanie), SPECIES_SPRITE(TOXAPEX, gMonBackPic_Toxapex), SPECIES_SPRITE(MUDBRAY, gMonBackPic_Mudbray), @@ -781,11 +785,11 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(PYUKUMUKU, gMonBackPic_Pyukumuku), SPECIES_SPRITE(TYPE_NULL, gMonBackPic_TypeNull), SPECIES_SPRITE(SILVALLY, gMonBackPic_Silvally), - SPECIES_SPRITE(MINIOR, gMonBackPic_Minior), + SPECIES_SPRITE(MINIOR_METEOR_RED, gMonBackPic_MiniorMeteor), SPECIES_SPRITE(KOMALA, gMonBackPic_Komala), SPECIES_SPRITE(TURTONATOR, gMonBackPic_Turtonator), SPECIES_SPRITE(TOGEDEMARU, gMonBackPic_Togedemaru), - SPECIES_SPRITE(MIMIKYU, gMonBackPic_Mimikyu), + SPECIES_SPRITE(MIMIKYU_DISGUISED, gMonBackPic_MimikyuDisguised), SPECIES_SPRITE(BRUXISH, gMonBackPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonBackPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonBackPic_Dhelmise), @@ -858,13 +862,13 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ARROKUDA, gMonBackPic_Arrokuda), SPECIES_SPRITE(BARRASKEWDA, gMonBackPic_Barraskewda), SPECIES_SPRITE(TOXEL, gMonBackPic_Toxel), - SPECIES_SPRITE(TOXTRICITY, gMonBackPic_Toxtricity), + SPECIES_SPRITE(TOXTRICITY_AMPED, gMonBackPic_ToxtricityAmped), SPECIES_SPRITE(SIZZLIPEDE, gMonBackPic_Sizzlipede), SPECIES_SPRITE(CENTISKORCH, gMonBackPic_Centiskorch), SPECIES_SPRITE(CLOBBOPUS, gMonBackPic_Clobbopus), SPECIES_SPRITE(GRAPPLOCT, gMonBackPic_Grapploct), - SPECIES_SPRITE(SINISTEA, gMonBackPic_Sinistea), - SPECIES_SPRITE(POLTEAGEIST, gMonBackPic_Polteageist), + SPECIES_SPRITE(SINISTEA_PHONY, gMonBackPic_Sinistea), + SPECIES_SPRITE(POLTEAGEIST_PHONY, gMonBackPic_Polteageist), SPECIES_SPRITE(HATENNA, gMonBackPic_Hatenna), SPECIES_SPRITE(HATTREM, gMonBackPic_Hattrem), SPECIES_SPRITE(HATTERENE, gMonBackPic_Hatterene), @@ -878,15 +882,77 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(MR_RIME, gMonBackPic_MrRime), SPECIES_SPRITE(RUNERIGUS, gMonBackPic_Runerigus), SPECIES_SPRITE(MILCERY, gMonBackPic_Milcery), - SPECIES_SPRITE(ALCREMIE, gMonBackPic_Alcremie), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_VANILLA_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RUBY_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_MATCHA_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_MINT_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_LEMON_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_SALTED_CREAM, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RUBY_SWIRL, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, gMonBackPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_BERRY_VANILLA_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RUBY_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_MATCHA_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_MINT_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_LEMON_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_SALTED_CREAM, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RUBY_SWIRL, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_CARAMEL_SWIRL, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RAINBOW_SWIRL, gMonBackPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_LOVE_VANILLA_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RUBY_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_MATCHA_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_MINT_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_LEMON_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_SALTED_CREAM, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RUBY_SWIRL, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_CARAMEL_SWIRL, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RAINBOW_SWIRL, gMonBackPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_STAR_VANILLA_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RUBY_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_MATCHA_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_MINT_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_LEMON_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_SALTED_CREAM, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RUBY_SWIRL, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_CARAMEL_SWIRL, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RAINBOW_SWIRL, gMonBackPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_CLOVER_VANILLA_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RUBY_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_MATCHA_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_MINT_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_LEMON_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_SALTED_CREAM, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RUBY_SWIRL, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_CARAMEL_SWIRL, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RAINBOW_SWIRL, gMonBackPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_FLOWER_VANILLA_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RUBY_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_MATCHA_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_MINT_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_LEMON_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_SALTED_CREAM, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RUBY_SWIRL, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_CARAMEL_SWIRL, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RAINBOW_SWIRL, gMonBackPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_RIBBON_VANILLA_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RUBY_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_MATCHA_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_MINT_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_LEMON_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_SALTED_CREAM, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RUBY_SWIRL, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_CARAMEL_SWIRL, gMonBackPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RAINBOW_SWIRL, gMonBackPic_AlcremieRibbon), SPECIES_SPRITE(FALINKS, gMonBackPic_Falinks), SPECIES_SPRITE(PINCURCHIN, gMonBackPic_Pincurchin), SPECIES_SPRITE(SNOM, gMonBackPic_Snom), SPECIES_SPRITE(FROSMOTH, gMonBackPic_Frosmoth), SPECIES_SPRITE(STONJOURNER, gMonBackPic_Stonjourner), - SPECIES_SPRITE(EISCUE, gMonBackPic_Eiscue), - SPECIES_SPRITE(INDEEDEE, gMonBackPic_Indeedee), - SPECIES_SPRITE(MORPEKO, gMonBackPic_Morpeko), + SPECIES_SPRITE(EISCUE_ICE_FACE, gMonBackPic_EiscueIceFace), + SPECIES_SPRITE(INDEEDEE_MALE, gMonBackPic_IndeedeeMale), + SPECIES_SPRITE(MORPEKO_FULL_BELLY, gMonBackPic_MorpekoFullBelly), SPECIES_SPRITE(CUFANT, gMonBackPic_Cufant), SPECIES_SPRITE(COPPERAJAH, gMonBackPic_Copperajah), SPECIES_SPRITE(DRACOZOLT, gMonBackPic_Dracozolt), @@ -897,11 +963,11 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(DREEPY, gMonBackPic_Dreepy), SPECIES_SPRITE(DRAKLOAK, gMonBackPic_Drakloak), SPECIES_SPRITE(DRAGAPULT, gMonBackPic_Dragapult), - SPECIES_SPRITE(ZACIAN, gMonBackPic_Zacian), - SPECIES_SPRITE(ZAMAZENTA, gMonBackPic_Zamazenta), + SPECIES_SPRITE(ZACIAN_HERO_OF_MANY_BATTLES, gMonBackPic_ZacianHeroOfManyBattles), + SPECIES_SPRITE(ZAMAZENTA_HERO_OF_MANY_BATTLES, gMonBackPic_ZamazentaHeroOfManyBattles), SPECIES_SPRITE(ETERNATUS, gMonBackPic_Eternatus), SPECIES_SPRITE(KUBFU, gMonBackPic_Kubfu), - SPECIES_SPRITE(URSHIFU, gMonBackPic_Urshifu), + SPECIES_SPRITE(URSHIFU_SINGLE_STRIKE_STYLE, gMonBackPic_UrshifuSingleStrikeStyle), SPECIES_SPRITE(ZARUDE, gMonBackPic_Zarude), SPECIES_SPRITE(REGIELEKI, gMonBackPic_Regieleki), SPECIES_SPRITE(REGIDRAGO, gMonBackPic_Regidrago), @@ -911,10 +977,11 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(WYRDEER, gMonBackPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonBackPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonBackPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonBackPic_Basculegion), + SPECIES_SPRITE(URSALUNA_BLOODMOON, gMonBackPic_UrsalunaBloodmoon), + SPECIES_SPRITE(BASCULEGION_MALE, gMonBackPic_BasculegionMale), SPECIES_SPRITE(SNEASLER, gMonBackPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonBackPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), + SPECIES_SPRITE(ENAMORUS_INCARNATE, gMonBackPic_EnamorusIncarnate), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonBackPic_VenusaurMega), @@ -1011,7 +1078,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(LINOONE_GALARIAN, gMonBackPic_LinooneGalarian), #if P_GEN_5_POKEMON == TRUE SPECIES_SPRITE(DARUMAKA_GALARIAN, gMonBackPic_DarumakaGalarian), - SPECIES_SPRITE(DARMANITAN_GALARIAN, gMonBackPic_DarmanitanGalarian), + SPECIES_SPRITE(DARMANITAN_GALARIAN_STANDARD_MODE, gMonBackPic_DarmanitanGalarianStandardMode), SPECIES_SPRITE(YAMASK_GALARIAN, gMonBackPic_YamaskGalarian), SPECIES_SPRITE(STUNFISK_GALARIAN, gMonBackPic_StunfiskGalarian), #endif @@ -1035,7 +1102,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(GOODRA_HISUIAN, gMonBackPic_GoodraHisuian), SPECIES_SPRITE(AVALUGG_HISUIAN, gMonBackPic_AvaluggHisuian), #endif -#if P_GEN_8_POKEMON == TRUE +#if P_GEN_7_POKEMON == TRUE SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_DecidueyeHisuian), #endif @@ -1141,7 +1208,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(BASCULIN_WHITE_STRIPED, gMonBackPic_BasculinWhiteStriped), SPECIES_SPRITE(DARMANITAN_ZEN_MODE, gMonBackPic_DarmanitanZenMode), - SPECIES_SPRITE(DARMANITAN_ZEN_MODE_GALARIAN, gMonBackPic_DarmanitanZenModeGalarian), + SPECIES_SPRITE(DARMANITAN_GALARIAN_ZEN_MODE, gMonBackPic_DarmanitanGalarianZenMode), SPECIES_SPRITE(DEERLING_SUMMER, gMonBackPic_Deerling), SPECIES_SPRITE(DEERLING_AUTUMN, gMonBackPic_Deerling), @@ -1234,7 +1301,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ZYGARDE_10, gMonBackPic_Zygarde10), SPECIES_SPRITE(ZYGARDE_10_POWER_CONSTRUCT, gMonBackPic_Zygarde10), - SPECIES_SPRITE(ZYGARDE_50_POWER_CONSTRUCT, gMonBackPic_Zygarde), + SPECIES_SPRITE(ZYGARDE_50_POWER_CONSTRUCT, gMonBackPic_Zygarde50), SPECIES_SPRITE(ZYGARDE_COMPLETE, gMonBackPic_ZygardeComplete), SPECIES_SPRITE(HOOPA_UNBOUND, gMonBackPic_HoopaUnbound), @@ -1270,12 +1337,12 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(SILVALLY_DARK, gMonBackPic_Silvally), SPECIES_SPRITE(SILVALLY_FAIRY, gMonBackPic_Silvally), - SPECIES_SPRITE(MINIOR_METEOR_ORANGE, gMonBackPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_YELLOW, gMonBackPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_GREEN, gMonBackPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_BLUE, gMonBackPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_INDIGO, gMonBackPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_VIOLET, gMonBackPic_Minior), + SPECIES_SPRITE(MINIOR_METEOR_ORANGE, gMonBackPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_YELLOW, gMonBackPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_GREEN, gMonBackPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_BLUE, gMonBackPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_INDIGO, gMonBackPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_VIOLET, gMonBackPic_MiniorMeteor), SPECIES_SPRITE(MINIOR_CORE_RED, gMonBackPic_MiniorCore), SPECIES_SPRITE(MINIOR_CORE_ORANGE, gMonBackPic_MiniorCore), SPECIES_SPRITE(MINIOR_CORE_YELLOW, gMonBackPic_MiniorCore), @@ -1303,15 +1370,6 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(POLTEAGEIST_ANTIQUE, gMonBackPic_Polteageist), - SPECIES_SPRITE(ALCREMIE_RUBY_CREAM, gMonBackPic_AlcremieRubyCream), - SPECIES_SPRITE(ALCREMIE_MATCHA_CREAM, gMonBackPic_AlcremieMatchaCream), - SPECIES_SPRITE(ALCREMIE_MINT_CREAM, gMonBackPic_AlcremieMintCream), - SPECIES_SPRITE(ALCREMIE_LEMON_CREAM, gMonBackPic_AlcremieLemonCream), - SPECIES_SPRITE(ALCREMIE_SALTED_CREAM, gMonBackPic_AlcremieSaltedCream), - SPECIES_SPRITE(ALCREMIE_RUBY_SWIRL, gMonBackPic_AlcremieRubySwirl), - SPECIES_SPRITE(ALCREMIE_CARAMEL_SWIRL, gMonBackPic_AlcremieCaramelSwirl), - SPECIES_SPRITE(ALCREMIE_RAINBOW_SWIRL, gMonBackPic_AlcremieRainbowSwirl), - SPECIES_SPRITE(EISCUE_NOICE_FACE, gMonBackPic_EiscueNoiceFace), SPECIES_SPRITE(INDEEDEE_FEMALE, gMonBackPic_IndeedeeFemale), @@ -1334,6 +1392,176 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_EnamorusTherian), SPECIES_SPRITE(BASCULEGION_FEMALE, gMonBackPic_BasculegionFemale), + + // Gigantamax Forms + SPECIES_SPRITE(VENUSAUR_GIGANTAMAX, gMonBackPic_VenusaurGigantamax), + SPECIES_SPRITE(CHARIZARD_GIGANTAMAX, gMonBackPic_CharizardGigantamax), + SPECIES_SPRITE(BLASTOISE_GIGANTAMAX, gMonBackPic_BlastoiseGigantamax), + SPECIES_SPRITE(BUTTERFREE_GIGANTAMAX, gMonBackPic_ButterfreeGigantamax), + SPECIES_SPRITE(PIKACHU_GIGANTAMAX, gMonBackPic_PikachuGigantamax), + SPECIES_SPRITE(MEOWTH_GIGANTAMAX, gMonBackPic_MeowthGigantamax), + SPECIES_SPRITE(MACHAMP_GIGANTAMAX, gMonBackPic_MachampGigantamax), + SPECIES_SPRITE(GENGAR_GIGANTAMAX, gMonBackPic_GengarGigantamax), + SPECIES_SPRITE(KINGLER_GIGANTAMAX, gMonBackPic_KinglerGigantamax), + SPECIES_SPRITE(LAPRAS_GIGANTAMAX, gMonBackPic_LaprasGigantamax), + SPECIES_SPRITE(EEVEE_GIGANTAMAX, gMonBackPic_EeveeGigantamax), + SPECIES_SPRITE(SNORLAX_GIGANTAMAX, gMonBackPic_SnorlaxGigantamax), + SPECIES_SPRITE(GARBODOR_GIGANTAMAX, gMonBackPic_GarbodorGigantamax), + SPECIES_SPRITE(MELMETAL_GIGANTAMAX, gMonBackPic_MelmetalGigantamax), + SPECIES_SPRITE(RILLABOOM_GIGANTAMAX, gMonBackPic_RillaboomGigantamax), + SPECIES_SPRITE(CINDERACE_GIGANTAMAX, gMonBackPic_CinderaceGigantamax), + SPECIES_SPRITE(INTELEON_GIGANTAMAX, gMonBackPic_InteleonGigantamax), + SPECIES_SPRITE(CORVIKNIGHT_GIGANTAMAX, gMonBackPic_CorviknightGigantamax), + SPECIES_SPRITE(ORBEETLE_GIGANTAMAX, gMonBackPic_OrbeetleGigantamax), + SPECIES_SPRITE(DREDNAW_GIGANTAMAX, gMonBackPic_DrednawGigantamax), + SPECIES_SPRITE(COALOSSAL_GIGANTAMAX, gMonBackPic_CoalossalGigantamax), + SPECIES_SPRITE(FLAPPLE_GIGANTAMAX, gMonBackPic_FlappleGigantamax), + SPECIES_SPRITE(APPLETUN_GIGANTAMAX, gMonBackPic_AppletunGigantamax), + SPECIES_SPRITE(SANDACONDA_GIGANTAMAX, gMonBackPic_SandacondaGigantamax), + SPECIES_SPRITE(TOXTRICITY_AMPED_GIGANTAMAX, gMonBackPic_ToxtricityGigantamax), + SPECIES_SPRITE(TOXTRICITY_LOW_KEY_GIGANTAMAX, gMonBackPic_ToxtricityGigantamax), + SPECIES_SPRITE(CENTISKORCH_GIGANTAMAX, gMonBackPic_CentiskorchGigantamax), + SPECIES_SPRITE(HATTERENE_GIGANTAMAX, gMonBackPic_HattereneGigantamax), + SPECIES_SPRITE(GRIMMSNARL_GIGANTAMAX, gMonBackPic_GrimmsnarlGigantamax), + SPECIES_SPRITE(ALCREMIE_GIGANTAMAX, gMonBackPic_AlcremieGigantamax), + SPECIES_SPRITE(COPPERAJAH_GIGANTAMAX, gMonBackPic_CopperajahGigantamax), + SPECIES_SPRITE(DURALUDON_GIGANTAMAX, gMonBackPic_DuraludonGigantamax), + SPECIES_SPRITE(URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, gMonBackPic_UrshifuSingleStrikeGigantamax), + SPECIES_SPRITE(URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, gMonBackPic_UrshifuRapidStrikeGigantamax), +#endif + +#if P_GEN_9_POKEMON == TRUE + SPECIES_SPRITE(SPRIGATITO, gMonBackPic_Sprigatito), + SPECIES_SPRITE(FLORAGATO, gMonBackPic_Floragato), + SPECIES_SPRITE(MEOWSCARADA, gMonBackPic_Meowscarada), + SPECIES_SPRITE(FUECOCO, gMonBackPic_Fuecoco), + SPECIES_SPRITE(CROCALOR, gMonBackPic_Crocalor), + SPECIES_SPRITE(SKELEDIRGE, gMonBackPic_Skeledirge), + SPECIES_SPRITE(QUAXLY, gMonBackPic_Quaxly), + SPECIES_SPRITE(QUAXWELL, gMonBackPic_Quaxwell), + SPECIES_SPRITE(QUAQUAVAL, gMonBackPic_Quaquaval), + SPECIES_SPRITE(LECHONK, gMonBackPic_Lechonk), + SPECIES_SPRITE(OINKOLOGNE_MALE, gMonBackPic_OinkologneMale), + SPECIES_SPRITE(OINKOLOGNE_FEMALE, gMonBackPic_OinkologneFemale), + SPECIES_SPRITE(TAROUNTULA, gMonBackPic_Tarountula), + SPECIES_SPRITE(SPIDOPS, gMonBackPic_Spidops), + SPECIES_SPRITE(NYMBLE, gMonBackPic_Nymble), + SPECIES_SPRITE(LOKIX, gMonBackPic_Lokix), + SPECIES_SPRITE(PAWMI, gMonBackPic_Pawmi), + SPECIES_SPRITE(PAWMO, gMonBackPic_Pawmo), + SPECIES_SPRITE(PAWMOT, gMonBackPic_Pawmot), + SPECIES_SPRITE(TANDEMAUS, gMonBackPic_Tandemaus), + SPECIES_SPRITE(MAUSHOLD_FAMILY_OF_THREE, gMonBackPic_MausholdFamilyOfThree), + SPECIES_SPRITE(MAUSHOLD_FAMILY_OF_FOUR, gMonBackPic_MausholdFamilyOfFour), + SPECIES_SPRITE(FIDOUGH, gMonBackPic_Fidough), + SPECIES_SPRITE(DACHSBUN, gMonBackPic_Dachsbun), + SPECIES_SPRITE(SMOLIV, gMonBackPic_Smoliv), + SPECIES_SPRITE(DOLLIV, gMonBackPic_Dolliv), + SPECIES_SPRITE(ARBOLIVA, gMonBackPic_Arboliva), + SPECIES_SPRITE(SQUAWKABILLY_GREEN_PLUMAGE, gMonBackPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_BLUE_PLUMAGE, gMonBackPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_YELLOW_PLUMAGE, gMonBackPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_WHITE_PLUMAGE, gMonBackPic_Squawkabilly), + SPECIES_SPRITE(NACLI, gMonBackPic_Nacli), + SPECIES_SPRITE(NACLSTACK, gMonBackPic_Naclstack), + SPECIES_SPRITE(GARGANACL, gMonBackPic_Garganacl), + SPECIES_SPRITE(CHARCADET, gMonBackPic_Charcadet), + SPECIES_SPRITE(ARMAROUGE, gMonBackPic_Armarouge), + SPECIES_SPRITE(CERULEDGE, gMonBackPic_Ceruledge), + SPECIES_SPRITE(TADBULB, gMonBackPic_Tadbulb), + SPECIES_SPRITE(BELLIBOLT, gMonBackPic_Bellibolt), + SPECIES_SPRITE(WATTREL, gMonBackPic_Wattrel), + SPECIES_SPRITE(KILOWATTREL, gMonBackPic_Kilowattrel), + SPECIES_SPRITE(MASCHIFF, gMonBackPic_Maschiff), + SPECIES_SPRITE(MABOSSTIFF, gMonBackPic_Mabosstiff), + SPECIES_SPRITE(SHROODLE, gMonBackPic_Shroodle), + SPECIES_SPRITE(GRAFAIAI, gMonBackPic_Grafaiai), + SPECIES_SPRITE(BRAMBLIN, gMonBackPic_Bramblin), + SPECIES_SPRITE(BRAMBLEGHAST, gMonBackPic_Brambleghast), + SPECIES_SPRITE(TOEDSCOOL, gMonBackPic_Toedscool), + SPECIES_SPRITE(TOEDSCRUEL, gMonBackPic_Toedscruel), + SPECIES_SPRITE(KLAWF, gMonBackPic_Klawf), + SPECIES_SPRITE(CAPSAKID, gMonBackPic_Capsakid), + SPECIES_SPRITE(SCOVILLAIN, gMonBackPic_Scovillain), + SPECIES_SPRITE(RELLOR, gMonBackPic_Rellor), + SPECIES_SPRITE(RABSCA, gMonBackPic_Rabsca), + SPECIES_SPRITE(FLITTLE, gMonBackPic_Flittle), + SPECIES_SPRITE(ESPATHRA, gMonBackPic_Espathra), + SPECIES_SPRITE(TINKATINK, gMonBackPic_Tinkatink), + SPECIES_SPRITE(TINKATUFF, gMonBackPic_Tinkatuff), + SPECIES_SPRITE(TINKATON, gMonBackPic_Tinkaton), + SPECIES_SPRITE(WIGLETT, gMonBackPic_Wiglett), + SPECIES_SPRITE(WUGTRIO, gMonBackPic_Wugtrio), + SPECIES_SPRITE(BOMBIRDIER, gMonBackPic_Bombirdier), + SPECIES_SPRITE(FINIZEN, gMonBackPic_Finizen), + SPECIES_SPRITE(PALAFIN_ZERO, gMonBackPic_PalafinZero), + SPECIES_SPRITE(PALAFIN_HERO, gMonBackPic_PalafinHero), + SPECIES_SPRITE(VAROOM, gMonBackPic_Varoom), + SPECIES_SPRITE(REVAVROOM, gMonBackPic_Revavroom), + SPECIES_SPRITE(CYCLIZAR, gMonBackPic_Cyclizar), + SPECIES_SPRITE(ORTHWORM, gMonBackPic_Orthworm), + SPECIES_SPRITE(GLIMMET, gMonBackPic_Glimmet), + SPECIES_SPRITE(GLIMMORA, gMonBackPic_Glimmora), + SPECIES_SPRITE(GREAVARD, gMonBackPic_Greavard), + SPECIES_SPRITE(HOUNDSTONE, gMonBackPic_Houndstone), + SPECIES_SPRITE(FLAMIGO, gMonBackPic_Flamigo), + SPECIES_SPRITE(CETODDLE, gMonBackPic_Cetoddle), + SPECIES_SPRITE(CETITAN, gMonBackPic_Cetitan), + SPECIES_SPRITE(VELUZA, gMonBackPic_Veluza), + SPECIES_SPRITE(DONDOZO, gMonBackPic_Dondozo), + SPECIES_SPRITE(TATSUGIRI_CURLY, gMonBackPic_TatsugiriCurly), + SPECIES_SPRITE(TATSUGIRI_DROOPY, gMonBackPic_TatsugiriDroopy), + SPECIES_SPRITE(TATSUGIRI_STRETCHY, gMonBackPic_TatsugiriStretchy), + SPECIES_SPRITE(ANNIHILAPE, gMonBackPic_Annihilape), + SPECIES_SPRITE(CLODSIRE, gMonBackPic_Clodsire), + SPECIES_SPRITE(FARIGIRAF, gMonBackPic_Farigiraf), + SPECIES_SPRITE(DUDUNSPARCE_TWO_SEGMENT, gMonBackPic_DudunsparceTwoSegment), + SPECIES_SPRITE(DUDUNSPARCE_THREE_SEGMENT, gMonBackPic_DudunsparceThreeSegment), + SPECIES_SPRITE(KINGAMBIT, gMonBackPic_Kingambit), + SPECIES_SPRITE(GREAT_TUSK, gMonBackPic_GreatTusk), + SPECIES_SPRITE(SCREAM_TAIL, gMonBackPic_ScreamTail), + SPECIES_SPRITE(BRUTE_BONNET, gMonBackPic_BruteBonnet), + SPECIES_SPRITE(FLUTTER_MANE, gMonBackPic_FlutterMane), + SPECIES_SPRITE(SLITHER_WING, gMonBackPic_SlitherWing), + SPECIES_SPRITE(SANDY_SHOCKS, gMonBackPic_SandyShocks), + SPECIES_SPRITE(IRON_TREADS, gMonBackPic_IronTreads), + SPECIES_SPRITE(IRON_BUNDLE, gMonBackPic_IronBundle), + SPECIES_SPRITE(IRON_HANDS, gMonBackPic_IronHands), + SPECIES_SPRITE(IRON_JUGULIS, gMonBackPic_IronJugulis), + SPECIES_SPRITE(IRON_MOTH, gMonBackPic_IronMoth), + SPECIES_SPRITE(IRON_THORNS, gMonBackPic_IronThorns), + SPECIES_SPRITE(FRIGIBAX, gMonBackPic_Frigibax), + SPECIES_SPRITE(ARCTIBAX, gMonBackPic_Arctibax), + SPECIES_SPRITE(BAXCALIBUR, gMonBackPic_Baxcalibur), + SPECIES_SPRITE(GIMMIGHOUL_CHEST, gMonBackPic_GimmighoulChest), + SPECIES_SPRITE(GIMMIGHOUL_ROAMING, gMonBackPic_GimmighoulRoaming), + SPECIES_SPRITE(GHOLDENGO, gMonBackPic_Gholdengo), + SPECIES_SPRITE(WO_CHIEN, gMonBackPic_WoChien), + SPECIES_SPRITE(CHIEN_PAO, gMonBackPic_ChienPao), + SPECIES_SPRITE(TING_LU, gMonBackPic_TingLu), + SPECIES_SPRITE(CHI_YU, gMonBackPic_ChiYu), + SPECIES_SPRITE(ROARING_MOON, gMonBackPic_RoaringMoon), + SPECIES_SPRITE(IRON_VALIANT, gMonBackPic_IronValiant), + SPECIES_SPRITE(KORAIDON, gMonBackPic_Koraidon), + SPECIES_SPRITE(MIRAIDON, gMonBackPic_Miraidon), + SPECIES_SPRITE(WALKING_WAKE, gMonBackPic_WalkingWake), + SPECIES_SPRITE(IRON_LEAVES, gMonBackPic_IronLeaves), + SPECIES_SPRITE(DIPPLIN, gMonBackPic_Dipplin), + SPECIES_SPRITE(POLTCHAGEIST_COUNTERFEIT, gMonBackPic_Poltchageist), + SPECIES_SPRITE(POLTCHAGEIST_ARTISAN, gMonBackPic_Poltchageist), + SPECIES_SPRITE(SINISTCHA_UNREMARKABLE, gMonBackPic_Sinistcha), + SPECIES_SPRITE(SINISTCHA_MASTERPIECE, gMonBackPic_Sinistcha), + SPECIES_SPRITE(OKIDOGI, gMonBackPic_Okidogi), + SPECIES_SPRITE(MUNKIDORI, gMonBackPic_Munkidori), + SPECIES_SPRITE(FEZANDIPITI, gMonBackPic_Fezandipiti), + SPECIES_SPRITE(OGERPON_TEAL_MASK, gMonBackPic_OgerponTealMask), + SPECIES_SPRITE(OGERPON_WELLSPRING_MASK, gMonBackPic_OgerponWellspringMask), + SPECIES_SPRITE(OGERPON_HEARTHFLAME_MASK, gMonBackPic_OgerponHearthflameMask), + SPECIES_SPRITE(OGERPON_CORNERSTONE_MASK, gMonBackPic_OgerponCornerstoneMask), + // SPECIES_SPRITE(OGERPON_TEAL_MASK_TERA, gMonBackPic_OgerponTealMaskTera), + // SPECIES_SPRITE(OGERPON_WELLSPRING_MASK_TERA, gMonBackPic_OgerponWellspringMaskTera), + // SPECIES_SPRITE(OGERPON_HEARTHFLAME_MASK_TERA, gMonBackPic_OgerponHearthflameMaskTera), + // SPECIES_SPRITE(OGERPON_CORNERSTONE_MASK_TERA, gMonBackPic_OgerponCornerstoneMaskTera), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; diff --git a/src/data/pokemon_graphics/enemy_mon_elevation.h b/src/data/pokemon_graphics/enemy_mon_elevation.h index 007c6a90a7..004e1be917 100644 --- a/src/data/pokemon_graphics/enemy_mon_elevation.h +++ b/src/data/pokemon_graphics/enemy_mon_elevation.h @@ -51,7 +51,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_DUSKULL] = 13, [SPECIES_SHUPPET] = 14, [SPECIES_BANETTE] = 8, - [SPECIES_CASTFORM] = 16, + [SPECIES_CASTFORM_NORMAL] = 16, [SPECIES_BELDUM] = 8, [SPECIES_RAYQUAZA] = 6, [SPECIES_LATIAS] = 12, @@ -99,19 +99,19 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_BRAVIARY] = 8, [SPECIES_HYDREIGON] = 3, [SPECIES_VOLCARONA] = 6, - [SPECIES_TORNADUS] = 7, - [SPECIES_THUNDURUS] = 7, - [SPECIES_LANDORUS] = 7, - [SPECIES_MELOETTA] = 8, + [SPECIES_TORNADUS_INCARNATE] = 7, + [SPECIES_THUNDURUS_INCARNATE] = 7, + [SPECIES_LANDORUS_INCARNATE] = 7, + [SPECIES_MELOETTA_ARIA] = 8, // Gen 6 [SPECIES_FLETCHINDER] = 9, [SPECIES_TALONFLAME] = 7, - [SPECIES_VIVILLON] = 9, - [SPECIES_FLABEBE] = 6, - [SPECIES_FLOETTE] = 4, + [SPECIES_VIVILLON_ICY_SNOW] = 9, + [SPECIES_FLABEBE_RED_FLOWER] = 6, + [SPECIES_FLOETTE_RED_FLOWER] = 4, [SPECIES_HONEDGE] = 4, [SPECIES_DOUBLADE] = 5, - [SPECIES_AEGISLASH] = 3, + [SPECIES_AEGISLASH_SHIELD] = 3, [SPECIES_SPRITZEE] = 14, [SPECIES_INKAY] = 14, [SPECIES_CARBINK] = 4, @@ -119,13 +119,13 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_PHANTUMP] = 5, [SPECIES_NOIBAT] = 8, [SPECIES_YVELTAL] = 5, - [SPECIES_HOOPA] = 13, + [SPECIES_HOOPA_CONFINED] = 13, // Gen 7 [SPECIES_VIKAVOLT] = 8, [SPECIES_CUTIEFLY] = 10, [SPECIES_RIBOMBEE] = 6, [SPECIES_COMFEY] = 8, - [SPECIES_MINIOR] = 17, + [SPECIES_MINIOR_METEOR_RED] = 17, [SPECIES_DHELMISE] = 2, [SPECIES_TAPU_KOKO] = 9, [SPECIES_TAPU_LELE] = 8, @@ -143,8 +143,8 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_CORVISQUIRE] = 10, [SPECIES_ORBEETLE] = 8, [SPECIES_FLAPPLE] = 9, - [SPECIES_SINISTEA] = 9, - [SPECIES_POLTEAGEIST] = 11, + [SPECIES_SINISTEA_PHONY] = 9, + [SPECIES_POLTEAGEIST_PHONY] = 11, [SPECIES_RUNERIGUS] = 5, [SPECIES_MILCERY] = 10, [SPECIES_FROSMOTH] = 7, @@ -268,4 +268,20 @@ const u8 gEnemyMonElevation[NUM_SPECIES + 1] = [SPECIES_SINISTEA_ANTIQUE] = 10, [SPECIES_POLTEAGEIST_ANTIQUE] = 12, [SPECIES_ETERNATUS_ETERNAMAX] = 13, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_TADBULB] = 12, + [SPECIES_BRAMBLIN] = 1, + [SPECIES_BRAMBLEGHAST] = 1, + [SPECIES_BOMBIRDIER] = 11, + [SPECIES_GLIMMET] = 1, + [SPECIES_GLIMMORA] = 10, + [SPECIES_VELUZA] = 1, + [SPECIES_DONDOZO] = 1, + [SPECIES_FLUTTER_MANE] = 5, + [SPECIES_IRON_JUGULIS] = 7, + [SPECIES_IRON_MOTH] = 4, + [SPECIES_CHI_YU] = 2, + [SPECIES_ROARING_MOON] = 20, +#endif + [SPECIES_BUTTERFREE_GIGANTAMAX] = 10, }; diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h index 38737ac439..b3dd284a3a 100644 --- a/src/data/pokemon_graphics/footprint_table.h +++ b/src/data/pokemon_graphics/footprint_table.h @@ -129,6 +129,9 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_MAGMAR] = gMonFootprint_Magmar, [SPECIES_PINSIR] = gMonFootprint_Pinsir, [SPECIES_TAUROS] = gMonFootprint_Tauros, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = gMonFootprint_Tauros, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = gMonFootprint_Tauros, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = gMonFootprint_Tauros, [SPECIES_MAGIKARP] = gMonFootprint_Magikarp, [SPECIES_GYARADOS] = gMonFootprint_Gyarados, [SPECIES_LAPRAS] = gMonFootprint_Lapras, @@ -195,6 +198,7 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_SUNFLORA] = gMonFootprint_Sunflora, [SPECIES_YANMA] = gMonFootprint_Yanma, [SPECIES_WOOPER] = gMonFootprint_Wooper, + [SPECIES_WOOPER_PALDEAN] = gMonFootprint_Wooper, [SPECIES_QUAGSIRE] = gMonFootprint_Quagsire, [SPECIES_ESPEON] = gMonFootprint_Espeon, [SPECIES_UMBREON] = gMonFootprint_Umbreon, @@ -360,7 +364,7 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_ARON] = gMonFootprint_Aron, [SPECIES_LAIRON] = gMonFootprint_Lairon, [SPECIES_AGGRON] = gMonFootprint_Aggron, - [SPECIES_CASTFORM] = gMonFootprint_Castform, + [SPECIES_CASTFORM_NORMAL] = gMonFootprint_Castform, [SPECIES_VOLBEAT] = gMonFootprint_Volbeat, [SPECIES_ILLUMISE] = gMonFootprint_Illumise, [SPECIES_LILEEP] = gMonFootprint_Lileep, @@ -385,7 +389,7 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_LATIAS] = gMonFootprint_Latias, [SPECIES_LATIOS] = gMonFootprint_Latios, [SPECIES_JIRACHI] = gMonFootprint_Jirachi, - [SPECIES_DEOXYS] = gMonFootprint_Deoxys, + [SPECIES_DEOXYS_NORMAL] = gMonFootprint_Deoxys, [SPECIES_CHIMECHO] = gMonFootprint_Chimecho, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = gMonFootprint_Turtwig, @@ -413,8 +417,8 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_RAMPARDOS] = gMonFootprint_Rampardos, [SPECIES_SHIELDON] = gMonFootprint_Shieldon, [SPECIES_BASTIODON] = gMonFootprint_Bastiodon, - [SPECIES_BURMY] = gMonFootprint_Burmy, - [SPECIES_WORMADAM] = gMonFootprint_Wormadam, + [SPECIES_BURMY_PLANT_CLOAK] = gMonFootprint_Burmy, + [SPECIES_WORMADAM_PLANT_CLOAK] = gMonFootprint_Wormadam, [SPECIES_MOTHIM] = gMonFootprint_Mothim, [SPECIES_COMBEE] = gMonFootprint_Combee, [SPECIES_VESPIQUEN] = gMonFootprint_Vespiquen, @@ -422,9 +426,9 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_BUIZEL] = gMonFootprint_Buizel, [SPECIES_FLOATZEL] = gMonFootprint_Floatzel, [SPECIES_CHERUBI] = gMonFootprint_Cherubi, - [SPECIES_CHERRIM] = gMonFootprint_Cherrim, - [SPECIES_SHELLOS] = gMonFootprint_Shellos, - [SPECIES_GASTRODON] = gMonFootprint_Gastrodon, + [SPECIES_CHERRIM_OVERCAST] = gMonFootprint_Cherrim, + [SPECIES_SHELLOS_WEST_SEA] = gMonFootprint_Shellos, + [SPECIES_GASTRODON_WEST_SEA] = gMonFootprint_Gastrodon, [SPECIES_AMBIPOM] = gMonFootprint_Ambipom, [SPECIES_DRIFLOON] = gMonFootprint_Drifloon, [SPECIES_DRIFBLIM] = gMonFootprint_Drifblim, @@ -488,13 +492,13 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_PALKIA] = gMonFootprint_Palkia, [SPECIES_HEATRAN] = gMonFootprint_Heatran, [SPECIES_REGIGIGAS] = gMonFootprint_Regigigas, - [SPECIES_GIRATINA] = gMonFootprint_Giratina, + [SPECIES_GIRATINA_ALTERED] = gMonFootprint_Giratina, [SPECIES_CRESSELIA] = gMonFootprint_Cresselia, [SPECIES_PHIONE] = gMonFootprint_Phione, [SPECIES_MANAPHY] = gMonFootprint_Manaphy, [SPECIES_DARKRAI] = gMonFootprint_Darkrai, - [SPECIES_SHAYMIN] = gMonFootprint_Shaymin, - [SPECIES_ARCEUS] = gMonFootprint_Arceus, + [SPECIES_SHAYMIN_LAND] = gMonFootprint_Shaymin, + [SPECIES_ARCEUS_NORMAL] = gMonFootprint_Arceus, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = gMonFootprint_Victini, @@ -553,12 +557,12 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_WHIMSICOTT] = gMonFootprint_Whimsicott, [SPECIES_PETILIL] = gMonFootprint_Petilil, [SPECIES_LILLIGANT] = gMonFootprint_Lilligant, - [SPECIES_BASCULIN] = gMonFootprint_Basculin, + [SPECIES_BASCULIN_RED_STRIPED] = gMonFootprint_Basculin, [SPECIES_SANDILE] = gMonFootprint_Sandile, [SPECIES_KROKOROK] = gMonFootprint_Krokorok, [SPECIES_KROOKODILE] = gMonFootprint_Krookodile, [SPECIES_DARUMAKA] = gMonFootprint_Darumaka, - [SPECIES_DARMANITAN] = gMonFootprint_Darmanitan, + [SPECIES_DARMANITAN_STANDARD_MODE] = gMonFootprint_Darmanitan, [SPECIES_MARACTUS] = gMonFootprint_Maractus, [SPECIES_DWEBBLE] = gMonFootprint_Dwebble, [SPECIES_CRUSTLE] = gMonFootprint_Crustle, @@ -588,8 +592,8 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_VANILLITE] = gMonFootprint_Vanillite, [SPECIES_VANILLISH] = gMonFootprint_Vanillish, [SPECIES_VANILLUXE] = gMonFootprint_Vanilluxe, - [SPECIES_DEERLING] = gMonFootprint_Deerling, - [SPECIES_SAWSBUCK] = gMonFootprint_Sawsbuck, + [SPECIES_DEERLING_SPRING] = gMonFootprint_Deerling, + [SPECIES_SAWSBUCK_SPRING] = gMonFootprint_Sawsbuck, [SPECIES_EMOLGA] = gMonFootprint_Emolga, [SPECIES_KARRABLAST] = gMonFootprint_Karrablast, [SPECIES_ESCAVALIER] = gMonFootprint_Escavalier, @@ -644,14 +648,14 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_COBALION] = gMonFootprint_Cobalion, [SPECIES_TERRAKION] = gMonFootprint_Terrakion, [SPECIES_VIRIZION] = gMonFootprint_Virizion, - [SPECIES_TORNADUS] = gMonFootprint_Tornadus, - [SPECIES_THUNDURUS] = gMonFootprint_Thundurus, + [SPECIES_TORNADUS_INCARNATE] = gMonFootprint_Tornadus, + [SPECIES_THUNDURUS_INCARNATE] = gMonFootprint_Thundurus, [SPECIES_RESHIRAM] = gMonFootprint_Reshiram, [SPECIES_ZEKROM] = gMonFootprint_Zekrom, - [SPECIES_LANDORUS] = gMonFootprint_Landorus, + [SPECIES_LANDORUS_INCARNATE] = gMonFootprint_Landorus, [SPECIES_KYUREM] = gMonFootprint_Kyurem, - [SPECIES_KELDEO] = gMonFootprint_Keldeo, - [SPECIES_MELOETTA] = gMonFootprint_Meloetta, + [SPECIES_KELDEO_ORDINARY] = gMonFootprint_Keldeo, + [SPECIES_MELOETTA_ARIA] = gMonFootprint_Meloetta, [SPECIES_GENESECT] = gMonFootprint_Genesect, #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_TALONFLAME] = gMonFootprint_Talonflame, [SPECIES_SCATTERBUG] = gMonFootprint_Scatterbug, [SPECIES_SPEWPA] = gMonFootprint_Spewpa, - [SPECIES_VIVILLON] = gMonFootprint_Vivillon, + [SPECIES_VIVILLON_ICY_SNOW] = gMonFootprint_Vivillon, [SPECIES_LITLEO] = gMonFootprint_Litleo, [SPECIES_PYROAR] = gMonFootprint_Pyroar, - [SPECIES_FLABEBE] = gMonFootprint_Flabebe, - [SPECIES_FLOETTE] = gMonFootprint_Floette, - [SPECIES_FLORGES] = gMonFootprint_Florges, + [SPECIES_FLABEBE_RED_FLOWER] = gMonFootprint_Flabebe, + [SPECIES_FLOETTE_RED_FLOWER] = gMonFootprint_Floette, + [SPECIES_FLORGES_RED_FLOWER] = gMonFootprint_Florges, [SPECIES_SKIDDO] = gMonFootprint_Skiddo, [SPECIES_GOGOAT] = gMonFootprint_Gogoat, [SPECIES_PANCHAM] = gMonFootprint_Pancham, [SPECIES_PANGORO] = gMonFootprint_Pangoro, - [SPECIES_FURFROU] = gMonFootprint_Furfrou, + [SPECIES_FURFROU_NATURAL] = gMonFootprint_Furfrou, [SPECIES_ESPURR] = gMonFootprint_Espurr, - [SPECIES_MEOWSTIC] = gMonFootprint_Meowstic, + [SPECIES_MEOWSTIC_MALE] = gMonFootprint_Meowstic, [SPECIES_HONEDGE] = gMonFootprint_Honedge, [SPECIES_DOUBLADE] = gMonFootprint_Doublade, - [SPECIES_AEGISLASH] = gMonFootprint_Aegislash, + [SPECIES_AEGISLASH_SHIELD] = gMonFootprint_Aegislash, [SPECIES_SPRITZEE] = gMonFootprint_Spritzee, [SPECIES_AROMATISSE] = gMonFootprint_Aromatisse, [SPECIES_SWIRLIX] = gMonFootprint_Swirlix, @@ -715,17 +719,17 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_KLEFKI] = gMonFootprint_Klefki, [SPECIES_PHANTUMP] = gMonFootprint_Phantump, [SPECIES_TREVENANT] = gMonFootprint_Trevenant, - [SPECIES_PUMPKABOO] = gMonFootprint_Pumpkaboo, - [SPECIES_GOURGEIST] = gMonFootprint_Gourgeist, + [SPECIES_PUMPKABOO_AVERAGE] = gMonFootprint_Pumpkaboo, + [SPECIES_GOURGEIST_AVERAGE] = gMonFootprint_Gourgeist, [SPECIES_BERGMITE] = gMonFootprint_Bergmite, [SPECIES_AVALUGG] = gMonFootprint_Avalugg, [SPECIES_NOIBAT] = gMonFootprint_Noibat, [SPECIES_NOIVERN] = gMonFootprint_Noivern, - [SPECIES_XERNEAS] = gMonFootprint_Xerneas, + [SPECIES_XERNEAS_NEUTRAL] = gMonFootprint_Xerneas, [SPECIES_YVELTAL] = gMonFootprint_Yveltal, - [SPECIES_ZYGARDE] = gMonFootprint_Zygarde, + [SPECIES_ZYGARDE_50_AURA_BREAK] = gMonFootprint_Zygarde, [SPECIES_DIANCIE] = gMonFootprint_Diancie, - [SPECIES_HOOPA] = gMonFootprint_Hoopa, + [SPECIES_HOOPA_CONFINED] = gMonFootprint_Hoopa, [SPECIES_VOLCANION] = gMonFootprint_Volcanion, #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_VIKAVOLT] = gMonFootprint_Vikavolt, [SPECIES_CRABRAWLER] = gMonFootprint_Crabrawler, [SPECIES_CRABOMINABLE] = gMonFootprint_Crabominable, - [SPECIES_ORICORIO] = gMonFootprint_Oricorio, + [SPECIES_ORICORIO_BAILE] = gMonFootprint_Oricorio, [SPECIES_CUTIEFLY] = gMonFootprint_Cutiefly, [SPECIES_RIBOMBEE] = gMonFootprint_Ribombee, [SPECIES_ROCKRUFF] = gMonFootprint_Rockruff, - [SPECIES_LYCANROC] = gMonFootprint_Lycanroc, - [SPECIES_WISHIWASHI] = gMonFootprint_Wishiwashi, + [SPECIES_LYCANROC_MIDDAY] = gMonFootprint_Lycanroc, + [SPECIES_WISHIWASHI_SOLO] = gMonFootprint_Wishiwashi, [SPECIES_MAREANIE] = gMonFootprint_Mareanie, [SPECIES_TOXAPEX] = gMonFootprint_Toxapex, [SPECIES_MUDBRAY] = gMonFootprint_Mudbray, @@ -780,12 +784,12 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_PALOSSAND] = gMonFootprint_Palossand, [SPECIES_PYUKUMUKU] = gMonFootprint_Pyukumuku, [SPECIES_TYPE_NULL] = gMonFootprint_Type_Null, - [SPECIES_SILVALLY] = gMonFootprint_Silvally, - [SPECIES_MINIOR] = gMonFootprint_Minior, + [SPECIES_SILVALLY_NORMAL] = gMonFootprint_Silvally, + [SPECIES_MINIOR_METEOR_RED] = gMonFootprint_Minior, [SPECIES_KOMALA] = gMonFootprint_Komala, [SPECIES_TURTONATOR] = gMonFootprint_Turtonator, [SPECIES_TOGEDEMARU] = gMonFootprint_Togedemaru, - [SPECIES_MIMIKYU] = gMonFootprint_Mimikyu, + [SPECIES_MIMIKYU_DISGUISED] = gMonFootprint_Mimikyu, [SPECIES_BRUXISH] = gMonFootprint_Bruxish, [SPECIES_DRAMPA] = gMonFootprint_Drampa, [SPECIES_DHELMISE] = gMonFootprint_Dhelmise, @@ -858,13 +862,13 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_ARROKUDA] = gMonFootprint_Arrokuda, [SPECIES_BARRASKEWDA] = gMonFootprint_Barraskewda, [SPECIES_TOXEL] = gMonFootprint_Toxel, - [SPECIES_TOXTRICITY] = gMonFootprint_Toxtricity, + [SPECIES_TOXTRICITY_AMPED] = gMonFootprint_Toxtricity, [SPECIES_SIZZLIPEDE] = gMonFootprint_Sizzlipede, [SPECIES_CENTISKORCH] = gMonFootprint_Centiskorch, [SPECIES_CLOBBOPUS] = gMonFootprint_Clobbopus, [SPECIES_GRAPPLOCT] = gMonFootprint_Grapploct, - [SPECIES_SINISTEA] = gMonFootprint_Sinistea, - [SPECIES_POLTEAGEIST] = gMonFootprint_Polteageist, + [SPECIES_SINISTEA_PHONY] = gMonFootprint_Sinistea, + [SPECIES_POLTEAGEIST_PHONY] = gMonFootprint_Polteageist, [SPECIES_HATENNA] = gMonFootprint_Hatenna, [SPECIES_HATTREM] = gMonFootprint_Hattrem, [SPECIES_HATTERENE] = gMonFootprint_Hatterene, @@ -878,15 +882,77 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_MR_RIME] = gMonFootprint_Mr_Rime, [SPECIES_RUNERIGUS] = gMonFootprint_Runerigus, [SPECIES_MILCERY] = gMonFootprint_Milcery, - [SPECIES_ALCREMIE] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = gMonFootprint_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = gMonFootprint_Alcremie, [SPECIES_FALINKS] = gMonFootprint_Falinks, [SPECIES_PINCURCHIN] = gMonFootprint_Pincurchin, [SPECIES_SNOM] = gMonFootprint_Snom, [SPECIES_FROSMOTH] = gMonFootprint_Frosmoth, [SPECIES_STONJOURNER] = gMonFootprint_Stonjourner, - [SPECIES_EISCUE] = gMonFootprint_Eiscue, - [SPECIES_INDEEDEE] = gMonFootprint_Indeedee, - [SPECIES_MORPEKO] = gMonFootprint_Morpeko, + [SPECIES_EISCUE_ICE_FACE] = gMonFootprint_Eiscue, + [SPECIES_INDEEDEE_MALE] = gMonFootprint_Indeedee, + [SPECIES_MORPEKO_FULL_BELLY] = gMonFootprint_Morpeko, [SPECIES_CUFANT] = gMonFootprint_Cufant, [SPECIES_COPPERAJAH] = gMonFootprint_Copperajah, [SPECIES_DRACOZOLT] = gMonFootprint_Dracozolt, @@ -897,17 +963,150 @@ const u8 *const gMonFootprintTable[NUM_SPECIES + 1] = [SPECIES_DREEPY] = gMonFootprint_Dreepy, [SPECIES_DRAKLOAK] = gMonFootprint_Drakloak, [SPECIES_DRAGAPULT] = gMonFootprint_Dragapult, - [SPECIES_ZACIAN] = gMonFootprint_Zacian, - [SPECIES_ZAMAZENTA] = gMonFootprint_Zamazenta, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = gMonFootprint_Zacian, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = gMonFootprint_Zamazenta, [SPECIES_ETERNATUS] = gMonFootprint_Eternatus, [SPECIES_KUBFU] = gMonFootprint_Kubfu, - [SPECIES_URSHIFU] = gMonFootprint_Urshifu, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = gMonFootprint_Urshifu, [SPECIES_ZARUDE] = gMonFootprint_Zarude, [SPECIES_REGIELEKI] = gMonFootprint_Regieleki, [SPECIES_REGIDRAGO] = gMonFootprint_Regidrago, [SPECIES_GLASTRIER] = gMonFootprint_Glastrier, [SPECIES_SPECTRIER] = gMonFootprint_Spectrier, [SPECIES_CALYREX] = gMonFootprint_Calyrex, +#endif +#if P_GEN_9_POKEMON == TRUE + //[SPECIES_SPRIGATITO] = gMonFootprint_Sprigatito, + //[SPECIES_FLORAGATO] = gMonFootprint_Floragato, + //[SPECIES_MEOWSCARADA] = gMonFootprint_Meowscarada, + //[SPECIES_FUECOCO] = gMonFootprint_Fuecoco, + //[SPECIES_CROCALOR] = gMonFootprint_Crocalor, + //[SPECIES_SKELEDIRGE] = gMonFootprint_Skeledirge, + //[SPECIES_QUAXLY] = gMonFootprint_Quaxly, + //[SPECIES_QUAXWELL] = gMonFootprint_Quaxwell, + //[SPECIES_QUAQUAVAL] = gMonFootprint_Quaquaval, + //[SPECIES_LECHONK] = gMonFootprint_Lechonk, + //[SPECIES_OINKOLOGNE_MALE] = gMonFootprint_Oinkologne, + //[SPECIES_OINKOLOGNE_FEMALE] = gMonFootprint_Oinkologne, + //[SPECIES_TAROUNTULA] = gMonFootprint_Tarountula, + //[SPECIES_SPIDOPS] = gMonFootprint_Spidops, + //[SPECIES_NYMBLE] = gMonFootprint_Nymble, + //[SPECIES_LOKIX] = gMonFootprint_Lokix, + //[SPECIES_PAWMI] = gMonFootprint_Pawmi, + //[SPECIES_PAWMO] = gMonFootprint_Pawmo, + //[SPECIES_PAWMOT] = gMonFootprint_Pawmot, + //[SPECIES_TANDEMAUS] = gMonFootprint_Tandemaus, + //[SPECIES_MAUSHOLD_FAMILY_OF_THREE] = gMonFootprint_Maushold, + //[SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = gMonFootprint_Maushold, + //[SPECIES_FIDOUGH] = gMonFootprint_Fidough, + //[SPECIES_DACHSBUN] = gMonFootprint_Dachsbun, + //[SPECIES_SMOLIV] = gMonFootprint_Smoliv, + //[SPECIES_DOLLIV] = gMonFootprint_Dolliv, + //[SPECIES_ARBOLIVA] = gMonFootprint_Arboliva, + //[SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = gMonFootprint_Squawkabilly, + //[SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = gMonFootprint_Squawkabilly, + //[SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = gMonFootprint_Squawkabilly, + //[SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = gMonFootprint_Squawkabilly, + //[SPECIES_NACLI] = gMonFootprint_Nacli, + //[SPECIES_NACLSTACK] = gMonFootprint_Naclstack, + //[SPECIES_GARGANACL] = gMonFootprint_Garganacl, + //[SPECIES_CHARCADET] = gMonFootprint_Charcadet, + //[SPECIES_ARMAROUGE] = gMonFootprint_Armarouge, + //[SPECIES_CERULEDGE] = gMonFootprint_Ceruledge, + //[SPECIES_TADBULB] = gMonFootprint_Tadbulb, + //[SPECIES_BELLIBOLT] = gMonFootprint_Bellibolt, + //[SPECIES_WATTREL] = gMonFootprint_Wattrel, + //[SPECIES_KILOWATTREL] = gMonFootprint_Kilowattrel, + //[SPECIES_MASCHIFF] = gMonFootprint_Maschiff, + //[SPECIES_MABOSSTIFF] = gMonFootprint_Mabosstiff, + //[SPECIES_SHROODLE] = gMonFootprint_Shroodle, + //[SPECIES_GRAFAIAI] = gMonFootprint_Grafaiai, + //[SPECIES_BRAMBLIN] = gMonFootprint_Bramblin, + //[SPECIES_BRAMBLEGHAST] = gMonFootprint_Brambleghast, + //[SPECIES_TOEDSCOOL] = gMonFootprint_Toedscool, + //[SPECIES_TOEDSCRUEL] = gMonFootprint_Toedscruel, + //[SPECIES_KLAWF] = gMonFootprint_Klawf, + //[SPECIES_CAPSAKID] = gMonFootprint_Capsakid, + //[SPECIES_SCOVILLAIN] = gMonFootprint_Scovillain, + //[SPECIES_RELLOR] = gMonFootprint_Rellor, + //[SPECIES_RABSCA] = gMonFootprint_Rabsca, + //[SPECIES_FLITTLE] = gMonFootprint_Flittle, + //[SPECIES_ESPATHRA] = gMonFootprint_Espathra, + //[SPECIES_TINKATINK] = gMonFootprint_Tinkatink, + //[SPECIES_TINKATUFF] = gMonFootprint_Tinkatuff, + //[SPECIES_TINKATON] = gMonFootprint_Tinkaton, + //[SPECIES_WIGLETT] = gMonFootprint_Wiglett, + //[SPECIES_WUGTRIO] = gMonFootprint_Wugtrio, + //[SPECIES_BOMBIRDIER] = gMonFootprint_Bombirdier, + //[SPECIES_FINIZEN] = gMonFootprint_Finizen, + //[SPECIES_PALAFIN_ZERO] = gMonFootprint_Palafin, + //[SPECIES_PALAFIN_HERO] = gMonFootprint_Palafin, + //[SPECIES_VAROOM] = gMonFootprint_Varoom, + //[SPECIES_REVAVROOM] = gMonFootprint_Revavroom, + //[SPECIES_CYCLIZAR] = gMonFootprint_Cyclizar, + //[SPECIES_ORTHWORM] = gMonFootprint_Orthworm, + //[SPECIES_GLIMMET] = gMonFootprint_Glimmet, + //[SPECIES_GLIMMORA] = gMonFootprint_Glimmora, + //[SPECIES_GREAVARD] = gMonFootprint_Greavard, + //[SPECIES_HOUNDSTONE] = gMonFootprint_Houndstone, + //[SPECIES_FLAMIGO] = gMonFootprint_Flamigo, + //[SPECIES_CETODDLE] = gMonFootprint_Cetoddle, + //[SPECIES_CETITAN] = gMonFootprint_Cetitan, + //[SPECIES_VELUZA] = gMonFootprint_Veluza, + //[SPECIES_DONDOZO] = gMonFootprint_Dondozo, + //[SPECIES_TATSUGIRI_CURLY] = gMonFootprint_Tatsugiri, + //[SPECIES_TATSUGIRI_DROOPY] = gMonFootprint_Tatsugiri, + //[SPECIES_TATSUGIRI_STRETCHY] = gMonFootprint_Tatsugiri, + //[SPECIES_ANNIHILAPE] = gMonFootprint_Annihilape, + //[SPECIES_CLODSIRE] = gMonFootprint_Clodsire, + //[SPECIES_FARIGIRAF] = gMonFootprint_Farigiraf, + //[SPECIES_DUDUNSPARCE_TWO_SEGMENT] = gMonFootprint_Dudunsparce, + //[SPECIES_DUDUNSPARCE_THREE_SEGMENT] = gMonFootprint_Dudunsparce, + //[SPECIES_KINGAMBIT] = gMonFootprint_Kingambit, + //[SPECIES_GREAT_TUSK] = gMonFootprint_GreatTusk, + //[SPECIES_SCREAM_TAIL] = gMonFootprint_ScreamTail, + //[SPECIES_BRUTE_BONNET] = gMonFootprint_BruteBonnet, + //[SPECIES_FLUTTER_MANE] = gMonFootprint_FlutterMane, + //[SPECIES_SLITHER_WING] = gMonFootprint_SlitherWing, + //[SPECIES_SANDY_SHOCKS] = gMonFootprint_SandyShocks, + //[SPECIES_IRON_TREADS] = gMonFootprint_IronTreads, + //[SPECIES_IRON_BUNDLE] = gMonFootprint_IronBundle, + //[SPECIES_IRON_HANDS] = gMonFootprint_IronHands, + //[SPECIES_IRON_JUGULIS] = gMonFootprint_IronJugulis, + //[SPECIES_IRON_MOTH] = gMonFootprint_IronMoth, + //[SPECIES_IRON_THORNS] = gMonFootprint_IronThorns, + //[SPECIES_FRIGIBAX] = gMonFootprint_Frigibax, + //[SPECIES_ARCTIBAX] = gMonFootprint_Arctibax, + //[SPECIES_BAXCALIBUR] = gMonFootprint_Baxcalibur, + //[SPECIES_GIMMIGHOUL_CHEST] = gMonFootprint_Gimmighoul, + //[SPECIES_GIMMIGHOUL_ROAMING] = gMonFootprint_Gimmighoul, + //[SPECIES_GHOLDENGO] = gMonFootprint_Gholdengo, + //[SPECIES_WO_CHIEN] = gMonFootprint_WoChien, + //[SPECIES_CHIEN_PAO] = gMonFootprint_ChienPao, + //[SPECIES_TING_LU] = gMonFootprint_TingLu, + //[SPECIES_CHI_YU] = gMonFootprint_ChiYu, + //[SPECIES_ROARING_MOON] = gMonFootprint_RoaringMoon, + //[SPECIES_IRON_VALIANT] = gMonFootprint_IronValiant, + //[SPECIES_KORAIDON] = gMonFootprint_Koraidon, + //[SPECIES_MIRAIDON] = gMonFootprint_Miraidon, + //[SPECIES_WALKING_WAKE] = gMonFootprint_WalkingWake, + //[SPECIES_IRON_LEAVES] = gMonFootprint_IronLeaves, + //[SPECIES_DIPPLIN] = gMonFootprint_Dipplin, + //[SPECIES_POLTCHAGEIST_COUNTERFEIT] = gMonFootprint_Poltchageist, + //[SPECIES_POLTCHAGEIST_ARTISAN] = gMonFootprint_Poltchageist, + //[SPECIES_SINISTCHA_UNREMARKABLE] = gMonFootprint_Sinistcha, + //[SPECIES_SINISTCHA_MASTERPIECE] = gMonFootprint_Sinistcha, + //[SPECIES_OKIDOGI] = gMonFootprint_Okidogi, + //[SPECIES_MUNKIDORI] = gMonFootprint_Munkidori, + //[SPECIES_FEZANDIPITI] = gMonFootprint_Fezandipiti, + //[SPECIES_OGERPON_TEAL_MASK] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_WELLSPRING_MASK] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_HEARTHFLAME_MASK] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_CORNERSTONE_MASK] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_TEAL_MASK_TERA] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_WELLSPRING_MASK_TERA] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = gMonFootprint_Ogerpon, + //[SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = gMonFootprint_Ogerpon, #endif [SPECIES_EGG] = gMonFootprint_Bulbasaur, }; diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index 95ea6f9437..f82bcc5e26 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -1,4 +1,11 @@ -#define PLACEHOLDER_TWO_FRAME_ANIMATION(name) \ +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} + +#define PLACEHOLDER_TWO_FRAME_ANIMATION(name) \ static const union AnimCmd sAnim_##name##_1[] = \ { \ ANIMCMD_FRAME(0, 30), \ @@ -4131,7 +4138,7 @@ static const union AnimCmd sAnim_Aggron_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Castform_1[] = +static const union AnimCmd sAnim_CastformNormal_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 24), @@ -4490,7 +4497,7 @@ static const union AnimCmd sAnim_Jirachi_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Deoxys_1[] = +static const union AnimCmd sAnim_DeoxysNormal_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -4500,15 +4507,6 @@ static const union AnimCmd sAnim_Deoxys_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Deoxys_2[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(2, 20), - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(2, 20), - ANIMCMD_END, -}; - static const union AnimCmd sAnim_Chimecho_1[] = { ANIMCMD_FRAME(0, 15), @@ -5894,7 +5892,7 @@ static const union AnimCmd sAnim_Regigigas_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Giratina_1[] = +static const union AnimCmd sAnim_GiratinaAltered_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -5937,7 +5935,7 @@ static const union AnimCmd sAnim_Darkrai_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Shaymin_1[] = +static const union AnimCmd sAnim_ShayminLand_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6606,7 +6604,7 @@ static const union AnimCmd sAnim_Darumaka_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Darmanitan_1[] = +static const union AnimCmd sAnim_DarmanitanStandardMode_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7480,7 +7478,7 @@ static const union AnimCmd sAnim_Virizion_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Tornadus_1[] = +static const union AnimCmd sAnim_TornadusIncarnate_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7507,7 +7505,7 @@ static const union AnimCmd sAnim_Tornadus_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Thundurus_1[] = +static const union AnimCmd sAnim_ThundurusIncarnate_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7548,7 +7546,7 @@ static const union AnimCmd sAnim_Zekrom_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Landorus_1[] = +static const union AnimCmd sAnim_LandorusIncarnate_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7584,14 +7582,14 @@ static const union AnimCmd sAnim_Kyurem_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Keldeo_1[] = +static const union AnimCmd sAnim_KeldeoOrdinary_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_Meloetta_1[] = +static const union AnimCmd sAnim_MeloettaAria_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 45), @@ -7603,7 +7601,7 @@ static const union AnimCmd sAnim_Meloetta_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Meloetta_2[] = +static const union AnimCmd sAnim_MeloettaAria_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7733,10 +7731,8 @@ static const union AnimCmd sAnim_GreninjaAsh_1[] = static const union AnimCmd sAnim_Bunnelby_1[] = { - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 25), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -7749,41 +7745,31 @@ static const union AnimCmd sAnim_Diggersby_1[] = static const union AnimCmd sAnim_Fletchling_1[] = { + ANIMCMD_FRAME(1, 7), ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(1, 50), - ANIMCMD_FRAME(1, 28), + ANIMCMD_FRAME(1, 7), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Fletchinder_1[] = { - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(1, 2), - ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Talonflame_1[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 20), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(1, 20), - ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(1, 55), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -7845,11 +7831,10 @@ static const union AnimCmd sAnim_Pyroar_1[] = static const union AnimCmd sAnim_Flabebe_1[] = { - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 27), + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(1, 23), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -7864,21 +7849,16 @@ static const union AnimCmd sAnim_Flabebe_2[] = static const union AnimCmd sAnim_Floette_1[] = { - ANIMCMD_FRAME(0, 33), - ANIMCMD_FRAME(1, 33), - ANIMCMD_FRAME(0, 33), - ANIMCMD_FRAME(1, 33), - ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(0, 25), + ANIMCMD_FRAME(1, 50), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Florges_1[] = { - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 45), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -7985,7 +7965,7 @@ static const union AnimCmd sAnim_Doublade_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Aegislash_1[] = +static const union AnimCmd sAnim_AegislashShield_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -8150,10 +8130,15 @@ static const union AnimCmd sAnim_Tyrantrum_1[] = static const union AnimCmd sAnim_Amaura_1[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 35), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 11), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -8191,15 +8176,7 @@ static const union AnimCmd sAnim_Dedenne_1[] = static const union AnimCmd sAnim_Carbink_1[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 15), - ANIMCMD_FRAME(0, 25), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(1, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; @@ -8348,7 +8325,7 @@ static const union AnimCmd sAnim_Yveltal_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Zygarde_1[] = +static const union AnimCmd sAnim_Zygarde50_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -8388,19 +8365,22 @@ static const union AnimCmd sAnim_Volcanion_1[] = #if P_GEN_7_POKEMON == TRUE static const union AnimCmd sAnim_Rowlet_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Dartrix_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Decidueye_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 50), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -8442,19 +8422,25 @@ static const union AnimCmd sAnim_Primarina_1[] = static const union AnimCmd sAnim_Pikipek_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(1, 20), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Trumbeak_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 15), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Toucannon_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 40), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -8518,29 +8504,75 @@ static const union AnimCmd sAnim_Oricorio_1[] = static const union AnimCmd sAnim_Cutiefly_1[] = { + ANIMCMD_FRAME(1, 1), ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 35), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Ribombee_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), ANIMCMD_END, }; static const union AnimCmd sAnim_Rockruff_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 9), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_Lycanroc_1[] = +static const union AnimCmd sAnim_LycanrocMidday_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 40), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_Wishiwashi_1[] = +static const union AnimCmd sAnim_WishiwashiSolo_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -8671,13 +8703,15 @@ static const union AnimCmd sAnim_Comfey_1[] = static const union AnimCmd sAnim_Oranguru_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 20), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_Passimian_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -8729,7 +8763,7 @@ static const union AnimCmd sAnim_Silvally_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Minior_1[] = +static const union AnimCmd sAnim_MiniorMeteor_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -8751,11 +8785,12 @@ static const union AnimCmd sAnim_Turtonator_1[] = static const union AnimCmd sAnim_Togedemaru_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_Mimikyu_1[] = +static const union AnimCmd sAnim_MimikyuDisguised_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -8769,7 +8804,8 @@ static const union AnimCmd sAnim_Bruxish_1[] = static const union AnimCmd sAnim_Drampa_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 50), + ANIMCMD_FRAME(0, 50), ANIMCMD_END, }; @@ -8781,17 +8817,15 @@ static const union AnimCmd sAnim_Dhelmise_1[] = static const union AnimCmd sAnim_JANGMO_O_1[] = { - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(1, 25), - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 15), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_HAKAMO_O_1[] = { - ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 30), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; @@ -9531,7 +9565,7 @@ static const union AnimCmd sAnim_Overqwil_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_Enamorus_1[] = +static const union AnimCmd sAnim_EnamorusIncarnate_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -10043,7 +10077,7 @@ static const union AnimCmd sAnim_DarumakaGalarian_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DarmanitanGalarian_1[] = +static const union AnimCmd sAnim_DarmanitanGalarianStandardMode_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -10161,6 +10195,210 @@ static const union AnimCmd sAnim_DecidueyeHisuian_1[] = ANIMCMD_END, }; #endif +PLACEHOLDER_ANIM_SINGLE_FRAME(WooperPaldean); +PLACEHOLDER_ANIM_SINGLE_FRAME(TaurosPaldean); + +static const union AnimCmd sAnim_VenusaurGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CharizardGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_BlastoiseGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ButterfreeGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_PikachuGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_MeowthGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_MachampGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_GengarGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_KinglerGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_LaprasGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_EeveeGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SnorlaxGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +#if P_GEN_5_POKEMON == TRUE +static const union AnimCmd sAnim_GarbodorGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +#endif +#if P_GEN_7_POKEMON == TRUE +static const union AnimCmd sAnim_MelmetalGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +#endif +#if P_GEN_8_POKEMON == TRUE +static const union AnimCmd sAnim_RillaboomGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CinderaceGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_InteleonGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CorviknightGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_OrbeetleGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_DrednawGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CoalossalGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_FlappleGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_AppletunGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_SandacondaGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_ToxtricityGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CentiskorchGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_HattereneGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_GrimmsnarlGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_AlcremieGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_CopperajahGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_DuraludonGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_UrshifuSingleStrikeStyleGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_UrshifuRapidStrikeStyleGigantamax_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +#endif static const union AnimCmd sAnim_PikachuCosplay_1[] = { @@ -10356,7 +10594,7 @@ static const union AnimCmd sAnim_DarmanitanZenMode_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DarmanitanZenModeGalarian_1[] = +static const union AnimCmd sAnim_DarmanitanGalarianZenMode_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -10491,22 +10729,141 @@ static const union AnimCmd sAnim_MimikyuBusted_1[] = static const union AnimCmd sAnim_LycanrocMidnight_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd sAnim_LycanrocDusk_1[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 40), + ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; #endif + #if P_GEN_8_POKEMON == TRUE static const union AnimCmd sAnim_EnamorusTherian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; + +PLACEHOLDER_ANIM_SINGLE_FRAME(UrsalunaBloodmoon); +#endif +#if P_GEN_9_POKEMON == TRUE +PLACEHOLDER_ANIM_SINGLE_FRAME(Sprigatito); +PLACEHOLDER_ANIM_SINGLE_FRAME(Floragato); +PLACEHOLDER_ANIM_SINGLE_FRAME(Meowscarada); +PLACEHOLDER_ANIM_SINGLE_FRAME(Fuecoco); +PLACEHOLDER_ANIM_SINGLE_FRAME(Crocalor); +PLACEHOLDER_ANIM_SINGLE_FRAME(Skeledirge); +PLACEHOLDER_ANIM_SINGLE_FRAME(Quaxly); +PLACEHOLDER_ANIM_SINGLE_FRAME(Quaxwell); +PLACEHOLDER_ANIM_SINGLE_FRAME(Quaquaval); +PLACEHOLDER_ANIM_SINGLE_FRAME(Lechonk); +PLACEHOLDER_ANIM_SINGLE_FRAME(Oinkologne); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tarountula); +PLACEHOLDER_ANIM_SINGLE_FRAME(Spidops); +PLACEHOLDER_ANIM_SINGLE_FRAME(Nymble); +PLACEHOLDER_ANIM_SINGLE_FRAME(Lokix); +PLACEHOLDER_ANIM_SINGLE_FRAME(Pawmi); +PLACEHOLDER_ANIM_SINGLE_FRAME(Pawmo); +PLACEHOLDER_ANIM_SINGLE_FRAME(Pawmot); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tandemaus); +PLACEHOLDER_ANIM_SINGLE_FRAME(Maushold); +PLACEHOLDER_ANIM_SINGLE_FRAME(Fidough); +PLACEHOLDER_ANIM_SINGLE_FRAME(Dachsbun); +PLACEHOLDER_ANIM_SINGLE_FRAME(Smoliv); +PLACEHOLDER_ANIM_SINGLE_FRAME(Dolliv); +PLACEHOLDER_ANIM_SINGLE_FRAME(Arboliva); +PLACEHOLDER_ANIM_SINGLE_FRAME(Squawkabilly); +PLACEHOLDER_ANIM_SINGLE_FRAME(Nacli); +PLACEHOLDER_ANIM_SINGLE_FRAME(Naclstack); +PLACEHOLDER_ANIM_SINGLE_FRAME(Garganacl); +PLACEHOLDER_ANIM_SINGLE_FRAME(Charcadet); +PLACEHOLDER_ANIM_SINGLE_FRAME(Armarouge); +PLACEHOLDER_ANIM_SINGLE_FRAME(Ceruledge); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tadbulb); +PLACEHOLDER_ANIM_SINGLE_FRAME(Bellibolt); +PLACEHOLDER_ANIM_SINGLE_FRAME(Wattrel); +PLACEHOLDER_ANIM_SINGLE_FRAME(Kilowattrel); +PLACEHOLDER_ANIM_SINGLE_FRAME(Maschiff); +PLACEHOLDER_ANIM_SINGLE_FRAME(Mabosstiff); +PLACEHOLDER_ANIM_SINGLE_FRAME(Shroodle); +PLACEHOLDER_ANIM_SINGLE_FRAME(Grafaiai); +PLACEHOLDER_ANIM_SINGLE_FRAME(Bramblin); +PLACEHOLDER_ANIM_SINGLE_FRAME(Brambleghast); +PLACEHOLDER_ANIM_SINGLE_FRAME(Toedscool); +PLACEHOLDER_ANIM_SINGLE_FRAME(Toedscruel); +PLACEHOLDER_ANIM_SINGLE_FRAME(Klawf); +PLACEHOLDER_ANIM_SINGLE_FRAME(Capsakid); +PLACEHOLDER_ANIM_SINGLE_FRAME(Scovillain); +PLACEHOLDER_ANIM_SINGLE_FRAME(Rellor); +PLACEHOLDER_ANIM_SINGLE_FRAME(Rabsca); +PLACEHOLDER_ANIM_SINGLE_FRAME(Flittle); +PLACEHOLDER_ANIM_SINGLE_FRAME(Espathra); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tinkatink); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tinkatuff); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tinkaton); +PLACEHOLDER_ANIM_SINGLE_FRAME(Wiglett); +PLACEHOLDER_ANIM_SINGLE_FRAME(Wugtrio); +PLACEHOLDER_ANIM_SINGLE_FRAME(Bombirdier); +PLACEHOLDER_ANIM_SINGLE_FRAME(Finizen); +PLACEHOLDER_ANIM_SINGLE_FRAME(Palafin); +PLACEHOLDER_ANIM_SINGLE_FRAME(Varoom); +PLACEHOLDER_ANIM_SINGLE_FRAME(Revavroom); +PLACEHOLDER_ANIM_SINGLE_FRAME(Cyclizar); +PLACEHOLDER_ANIM_SINGLE_FRAME(Orthworm); +PLACEHOLDER_ANIM_SINGLE_FRAME(Glimmet); +PLACEHOLDER_ANIM_SINGLE_FRAME(Glimmora); +PLACEHOLDER_ANIM_SINGLE_FRAME(Greavard); +PLACEHOLDER_ANIM_SINGLE_FRAME(Houndstone); +PLACEHOLDER_ANIM_SINGLE_FRAME(Flamigo); +PLACEHOLDER_ANIM_SINGLE_FRAME(Cetoddle); +PLACEHOLDER_ANIM_SINGLE_FRAME(Cetitan); +PLACEHOLDER_ANIM_SINGLE_FRAME(Veluza); +PLACEHOLDER_ANIM_SINGLE_FRAME(Dondozo); +PLACEHOLDER_ANIM_SINGLE_FRAME(Tatsugiri); +PLACEHOLDER_ANIM_SINGLE_FRAME(Annihilape); +PLACEHOLDER_ANIM_SINGLE_FRAME(Clodsire); +PLACEHOLDER_ANIM_SINGLE_FRAME(Farigiraf); +PLACEHOLDER_ANIM_SINGLE_FRAME(Dudunsparce); +PLACEHOLDER_ANIM_SINGLE_FRAME(Kingambit); +PLACEHOLDER_TWO_FRAME_ANIMATION(GreatTusk); +PLACEHOLDER_ANIM_SINGLE_FRAME(ScreamTail); +PLACEHOLDER_ANIM_SINGLE_FRAME(BruteBonnet); +PLACEHOLDER_ANIM_SINGLE_FRAME(FlutterMane); +PLACEHOLDER_ANIM_SINGLE_FRAME(SlitherWing); +PLACEHOLDER_ANIM_SINGLE_FRAME(SandyShocks); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronTreads); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronBundle); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronHands); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronJugulis); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronMoth); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronThorns); +PLACEHOLDER_TWO_FRAME_ANIMATION(Frigibax); +PLACEHOLDER_ANIM_SINGLE_FRAME(Arctibax); +PLACEHOLDER_ANIM_SINGLE_FRAME(Baxcalibur); +PLACEHOLDER_ANIM_SINGLE_FRAME(Gimmighoul); +PLACEHOLDER_ANIM_SINGLE_FRAME(Gholdengo); +PLACEHOLDER_ANIM_SINGLE_FRAME(WoChien); +PLACEHOLDER_ANIM_SINGLE_FRAME(ChienPao); +PLACEHOLDER_ANIM_SINGLE_FRAME(TingLu); +PLACEHOLDER_ANIM_SINGLE_FRAME(ChiYu); +PLACEHOLDER_ANIM_SINGLE_FRAME(RoaringMoon); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronValiant); +PLACEHOLDER_ANIM_SINGLE_FRAME(Koraidon); +PLACEHOLDER_ANIM_SINGLE_FRAME(Miraidon); +PLACEHOLDER_ANIM_SINGLE_FRAME(WalkingWake); +PLACEHOLDER_ANIM_SINGLE_FRAME(IronLeaves); +PLACEHOLDER_ANIM_SINGLE_FRAME(Dipplin); +PLACEHOLDER_ANIM_SINGLE_FRAME(Sinistcha); +PLACEHOLDER_ANIM_SINGLE_FRAME(Poltchageist); +PLACEHOLDER_ANIM_SINGLE_FRAME(Okidogi); +PLACEHOLDER_ANIM_SINGLE_FRAME(Munkidori); +PLACEHOLDER_ANIM_SINGLE_FRAME(Fezandipiti); +PLACEHOLDER_ANIM_SINGLE_FRAME(Ogerpon); #endif #define SINGLE_ANIMATION(name) \ @@ -10891,7 +11248,7 @@ SINGLE_ANIMATION(Relicanth); SINGLE_ANIMATION(Aron); SINGLE_ANIMATION(Lairon); SINGLE_ANIMATION(Aggron); -SINGLE_ANIMATION(Castform); +SINGLE_ANIMATION(CastformNormal); SINGLE_ANIMATION(CastformSunny); SINGLE_ANIMATION(CastformRainy); SINGLE_ANIMATION(CastformSnowy); @@ -10919,7 +11276,7 @@ DOUBLE_ANIMATION(Rayquaza); DOUBLE_ANIMATION(Latias); DOUBLE_ANIMATION(Latios); DOUBLE_ANIMATION(Jirachi); -DOUBLE_ANIMATION(Deoxys); +SINGLE_ANIMATION(DeoxysNormal); SINGLE_ANIMATION(Chimecho); SINGLE_ANIMATION(Egg); SINGLE_ANIMATION(UnownB); @@ -11056,12 +11413,12 @@ SINGLE_ANIMATION(Dialga); SINGLE_ANIMATION(Palkia); SINGLE_ANIMATION(Heatran); SINGLE_ANIMATION(Regigigas); -SINGLE_ANIMATION(Giratina); +SINGLE_ANIMATION(GiratinaAltered); SINGLE_ANIMATION(Cresselia); SINGLE_ANIMATION(Phione); SINGLE_ANIMATION(Manaphy); SINGLE_ANIMATION(Darkrai); -SINGLE_ANIMATION(Shaymin); +SINGLE_ANIMATION(ShayminLand); SINGLE_ANIMATION(Arceus); #endif #if P_GEN_5_POKEMON == TRUE @@ -11126,7 +11483,7 @@ SINGLE_ANIMATION(Sandile); SINGLE_ANIMATION(Krokorok); DOUBLE_ANIMATION(Krookodile); SINGLE_ANIMATION(Darumaka); -SINGLE_ANIMATION(Darmanitan); +SINGLE_ANIMATION(DarmanitanStandardMode); SINGLE_ANIMATION(Maractus); SINGLE_ANIMATION(Dwebble); SINGLE_ANIMATION(Crustle); @@ -11212,14 +11569,14 @@ SINGLE_ANIMATION(Volcarona); SINGLE_ANIMATION(Cobalion); DOUBLE_ANIMATION(Terrakion); SINGLE_ANIMATION(Virizion); -SINGLE_ANIMATION(Tornadus); -SINGLE_ANIMATION(Thundurus); +SINGLE_ANIMATION(TornadusIncarnate); +SINGLE_ANIMATION(ThundurusIncarnate); SINGLE_ANIMATION(Reshiram); SINGLE_ANIMATION(Zekrom); -SINGLE_ANIMATION(Landorus); +SINGLE_ANIMATION(LandorusIncarnate); SINGLE_ANIMATION(Kyurem); -SINGLE_ANIMATION(Keldeo); -DOUBLE_ANIMATION(Meloetta); +SINGLE_ANIMATION(KeldeoOrdinary); +DOUBLE_ANIMATION(MeloettaAria); SINGLE_ANIMATION(Genesect); #endif #if P_GEN_6_POKEMON == TRUE @@ -11255,7 +11612,7 @@ SINGLE_ANIMATION(Espurr); SINGLE_ANIMATION(Meowstic); SINGLE_ANIMATION(Honedge); DOUBLE_ANIMATION(Doublade); -SINGLE_ANIMATION(Aegislash); +SINGLE_ANIMATION(AegislashShield); SINGLE_ANIMATION(Spritzee); SINGLE_ANIMATION(Aromatisse); SINGLE_ANIMATION(Swirlix); @@ -11292,7 +11649,7 @@ SINGLE_ANIMATION(Noibat); SINGLE_ANIMATION(Noivern); SINGLE_ANIMATION(Xerneas); SINGLE_ANIMATION(Yveltal); -SINGLE_ANIMATION(Zygarde); +SINGLE_ANIMATION(Zygarde50); SINGLE_ANIMATION(Diancie); SINGLE_ANIMATION(Hoopa); SINGLE_ANIMATION(Volcanion); @@ -11321,8 +11678,8 @@ SINGLE_ANIMATION(Oricorio); SINGLE_ANIMATION(Cutiefly); SINGLE_ANIMATION(Ribombee); SINGLE_ANIMATION(Rockruff); -SINGLE_ANIMATION(Lycanroc); -SINGLE_ANIMATION(Wishiwashi); +SINGLE_ANIMATION(LycanrocMidday); +SINGLE_ANIMATION(WishiwashiSolo); SINGLE_ANIMATION(Mareanie); SINGLE_ANIMATION(Toxapex); SINGLE_ANIMATION(Mudbray); @@ -11350,11 +11707,11 @@ SINGLE_ANIMATION(Palossand); SINGLE_ANIMATION(Pyukumuku); SINGLE_ANIMATION(TypeNull); SINGLE_ANIMATION(Silvally); -SINGLE_ANIMATION(Minior); +SINGLE_ANIMATION(MiniorMeteor); SINGLE_ANIMATION(Komala); SINGLE_ANIMATION(Turtonator); SINGLE_ANIMATION(Togedemaru); -SINGLE_ANIMATION(Mimikyu); +SINGLE_ANIMATION(MimikyuDisguised); SINGLE_ANIMATION(Bruxish); SINGLE_ANIMATION(Drampa); SINGLE_ANIMATION(Dhelmise); @@ -11483,7 +11840,121 @@ SINGLE_ANIMATION(Ursaluna); SINGLE_ANIMATION(Basculegion); SINGLE_ANIMATION(Sneasler); SINGLE_ANIMATION(Overqwil); -SINGLE_ANIMATION(Enamorus); +SINGLE_ANIMATION(EnamorusIncarnate); +#endif +#if P_GEN_9_POKEMON == TRUE +SINGLE_ANIMATION(Sprigatito); +SINGLE_ANIMATION(Floragato); +SINGLE_ANIMATION(Meowscarada); +SINGLE_ANIMATION(Fuecoco); +SINGLE_ANIMATION(Crocalor); +SINGLE_ANIMATION(Skeledirge); +SINGLE_ANIMATION(Quaxly); +SINGLE_ANIMATION(Quaxwell); +SINGLE_ANIMATION(Quaquaval); +SINGLE_ANIMATION(Lechonk); +SINGLE_ANIMATION(Oinkologne); +SINGLE_ANIMATION(Tarountula); +SINGLE_ANIMATION(Spidops); +SINGLE_ANIMATION(Nymble); +SINGLE_ANIMATION(Lokix); +SINGLE_ANIMATION(Pawmi); +SINGLE_ANIMATION(Pawmo); +SINGLE_ANIMATION(Pawmot); +SINGLE_ANIMATION(Tandemaus); +SINGLE_ANIMATION(Maushold); +SINGLE_ANIMATION(Fidough); +SINGLE_ANIMATION(Dachsbun); +SINGLE_ANIMATION(Smoliv); +SINGLE_ANIMATION(Dolliv); +SINGLE_ANIMATION(Arboliva); +SINGLE_ANIMATION(Squawkabilly); +SINGLE_ANIMATION(Nacli); +SINGLE_ANIMATION(Naclstack); +SINGLE_ANIMATION(Garganacl); +SINGLE_ANIMATION(Charcadet); +SINGLE_ANIMATION(Armarouge); +SINGLE_ANIMATION(Ceruledge); +SINGLE_ANIMATION(Tadbulb); +SINGLE_ANIMATION(Bellibolt); +SINGLE_ANIMATION(Wattrel); +SINGLE_ANIMATION(Kilowattrel); +SINGLE_ANIMATION(Maschiff); +SINGLE_ANIMATION(Mabosstiff); +SINGLE_ANIMATION(Shroodle); +SINGLE_ANIMATION(Grafaiai); +SINGLE_ANIMATION(Bramblin); +SINGLE_ANIMATION(Brambleghast); +SINGLE_ANIMATION(Toedscool); +SINGLE_ANIMATION(Toedscruel); +SINGLE_ANIMATION(Klawf); +SINGLE_ANIMATION(Capsakid); +SINGLE_ANIMATION(Scovillain); +SINGLE_ANIMATION(Rellor); +SINGLE_ANIMATION(Rabsca); +SINGLE_ANIMATION(Flittle); +SINGLE_ANIMATION(Espathra); +SINGLE_ANIMATION(Tinkatink); +SINGLE_ANIMATION(Tinkatuff); +SINGLE_ANIMATION(Tinkaton); +SINGLE_ANIMATION(Wiglett); +SINGLE_ANIMATION(Wugtrio); +SINGLE_ANIMATION(Bombirdier); +SINGLE_ANIMATION(Finizen); +SINGLE_ANIMATION(Palafin); +SINGLE_ANIMATION(Varoom); +SINGLE_ANIMATION(Revavroom); +SINGLE_ANIMATION(Cyclizar); +SINGLE_ANIMATION(Orthworm); +SINGLE_ANIMATION(Glimmet); +SINGLE_ANIMATION(Glimmora); +SINGLE_ANIMATION(Greavard); +SINGLE_ANIMATION(Houndstone); +SINGLE_ANIMATION(Flamigo); +SINGLE_ANIMATION(Cetoddle); +SINGLE_ANIMATION(Cetitan); +SINGLE_ANIMATION(Veluza); +SINGLE_ANIMATION(Dondozo); +SINGLE_ANIMATION(Tatsugiri); +SINGLE_ANIMATION(Annihilape); +SINGLE_ANIMATION(Clodsire); +SINGLE_ANIMATION(Farigiraf); +SINGLE_ANIMATION(Dudunsparce); +SINGLE_ANIMATION(Kingambit); +SINGLE_ANIMATION(GreatTusk); +SINGLE_ANIMATION(ScreamTail); +SINGLE_ANIMATION(BruteBonnet); +SINGLE_ANIMATION(FlutterMane); +SINGLE_ANIMATION(SlitherWing); +SINGLE_ANIMATION(SandyShocks); +SINGLE_ANIMATION(IronTreads); +SINGLE_ANIMATION(IronBundle); +SINGLE_ANIMATION(IronHands); +SINGLE_ANIMATION(IronJugulis); +SINGLE_ANIMATION(IronMoth); +SINGLE_ANIMATION(IronThorns); +SINGLE_ANIMATION(Frigibax); +SINGLE_ANIMATION(Arctibax); +SINGLE_ANIMATION(Baxcalibur); +SINGLE_ANIMATION(Gimmighoul); +SINGLE_ANIMATION(Gholdengo); +SINGLE_ANIMATION(WoChien); +SINGLE_ANIMATION(ChienPao); +SINGLE_ANIMATION(TingLu); +SINGLE_ANIMATION(ChiYu); +SINGLE_ANIMATION(RoaringMoon); +SINGLE_ANIMATION(IronValiant); +SINGLE_ANIMATION(Koraidon); +SINGLE_ANIMATION(Miraidon); +SINGLE_ANIMATION(WalkingWake); +SINGLE_ANIMATION(IronLeaves); +SINGLE_ANIMATION(Dipplin); +SINGLE_ANIMATION(Sinistcha); +SINGLE_ANIMATION(Poltchageist); +SINGLE_ANIMATION(Okidogi); +SINGLE_ANIMATION(Munkidori); +SINGLE_ANIMATION(Fezandipiti); +SINGLE_ANIMATION(Ogerpon); #endif SINGLE_ANIMATION(VenusaurMega); SINGLE_ANIMATION(CHARIZARD_MEGA_X); @@ -11576,7 +12047,7 @@ SINGLE_ANIMATION(ZigzagoonGalarian); SINGLE_ANIMATION(LinooneGalarian); #if P_GEN_5_POKEMON == TRUE SINGLE_ANIMATION(DarumakaGalarian); -SINGLE_ANIMATION(DarmanitanGalarian); +SINGLE_ANIMATION(DarmanitanGalarianStandardMode); SINGLE_ANIMATION(YamaskGalarian); SINGLE_ANIMATION(StunfiskGalarian); #endif @@ -11602,6 +12073,8 @@ SINGLE_ANIMATION(AvaluggHisuian); #if P_GEN_7_POKEMON == TRUE SINGLE_ANIMATION(DecidueyeHisuian); #endif +SINGLE_ANIMATION(WooperPaldean); +SINGLE_ANIMATION(TaurosPaldean); SINGLE_ANIMATION(PikachuCosplay); SINGLE_ANIMATION(PikachuRockStar); SINGLE_ANIMATION(PikachuBelle); @@ -11628,7 +12101,7 @@ SINGLE_ANIMATION(ShayminSky); #endif #if P_GEN_5_POKEMON == TRUE SINGLE_ANIMATION(DarmanitanZenMode); -SINGLE_ANIMATION(DarmanitanZenModeGalarian); +SINGLE_ANIMATION(DarmanitanGalarianZenMode); SINGLE_ANIMATION(TornadusTherian); SINGLE_ANIMATION(ThundurusTherian); SINGLE_ANIMATION(LandorusTherian); @@ -11652,1278 +12125,1558 @@ SINGLE_ANIMATION(LycanrocDusk); #endif #if P_GEN_8_POKEMON == TRUE SINGLE_ANIMATION(EnamorusTherian); +SINGLE_ANIMATION(UrsalunaBloodmoon); +#endif +// Gigantamax Forms +SINGLE_ANIMATION(VenusaurGigantamax); +SINGLE_ANIMATION(CharizardGigantamax); +SINGLE_ANIMATION(BlastoiseGigantamax); +SINGLE_ANIMATION(ButterfreeGigantamax); +SINGLE_ANIMATION(PikachuGigantamax); +SINGLE_ANIMATION(MeowthGigantamax); +SINGLE_ANIMATION(MachampGigantamax); +SINGLE_ANIMATION(GengarGigantamax); +SINGLE_ANIMATION(KinglerGigantamax); +SINGLE_ANIMATION(LaprasGigantamax); +SINGLE_ANIMATION(EeveeGigantamax); +SINGLE_ANIMATION(SnorlaxGigantamax); +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(GarbodorGigantamax); +#endif +#if P_GEN_7_POKEMON == TRUE +SINGLE_ANIMATION(MelmetalGigantamax); +#endif +#if P_GEN_8_POKEMON == TRUE +SINGLE_ANIMATION(RillaboomGigantamax); +SINGLE_ANIMATION(CinderaceGigantamax); +SINGLE_ANIMATION(InteleonGigantamax); +SINGLE_ANIMATION(CorviknightGigantamax); +SINGLE_ANIMATION(OrbeetleGigantamax); +SINGLE_ANIMATION(DrednawGigantamax); +SINGLE_ANIMATION(CoalossalGigantamax); +SINGLE_ANIMATION(FlappleGigantamax); +SINGLE_ANIMATION(AppletunGigantamax); +SINGLE_ANIMATION(SandacondaGigantamax); +SINGLE_ANIMATION(ToxtricityGigantamax); +SINGLE_ANIMATION(CentiskorchGigantamax); +SINGLE_ANIMATION(HattereneGigantamax); +SINGLE_ANIMATION(GrimmsnarlGigantamax); +SINGLE_ANIMATION(AlcremieGigantamax); +SINGLE_ANIMATION(CopperajahGigantamax); +SINGLE_ANIMATION(DuraludonGigantamax); +SINGLE_ANIMATION(UrshifuSingleStrikeStyleGigantamax); +SINGLE_ANIMATION(UrshifuRapidStrikeStyleGigantamax); #endif const union AnimCmd *const *const gMonFrontAnimsPtrTable[NUM_SPECIES + 1] = -{ - [SPECIES_NONE] = sAnims_None, - [SPECIES_BULBASAUR] = sAnims_Bulbasaur, - [SPECIES_IVYSAUR] = sAnims_Ivysaur, - [SPECIES_VENUSAUR] = sAnims_Venusaur, - [SPECIES_CHARMANDER] = sAnims_Charmander, - [SPECIES_CHARMELEON] = sAnims_Charmeleon, - [SPECIES_CHARIZARD] = sAnims_Charizard, - [SPECIES_SQUIRTLE] = sAnims_Squirtle, - [SPECIES_WARTORTLE] = sAnims_Wartortle, - [SPECIES_BLASTOISE] = sAnims_Blastoise, - [SPECIES_CATERPIE] = sAnims_Caterpie, - [SPECIES_METAPOD] = sAnims_Metapod, - [SPECIES_BUTTERFREE] = sAnims_Butterfree, - [SPECIES_WEEDLE] = sAnims_Weedle, - [SPECIES_KAKUNA] = sAnims_Kakuna, - [SPECIES_BEEDRILL] = sAnims_Beedrill, - [SPECIES_PIDGEY] = sAnims_Pidgey, - [SPECIES_PIDGEOTTO] = sAnims_Pidgeotto, - [SPECIES_PIDGEOT] = sAnims_Pidgeot, - [SPECIES_RATTATA] = sAnims_Rattata, - [SPECIES_RATICATE] = sAnims_Raticate, - [SPECIES_SPEAROW] = sAnims_Spearow, - [SPECIES_FEAROW] = sAnims_Fearow, - [SPECIES_EKANS] = sAnims_Ekans, - [SPECIES_ARBOK] = sAnims_Arbok, - [SPECIES_PIKACHU] = sAnims_Pikachu, - [SPECIES_RAICHU] = sAnims_Raichu, - [SPECIES_SANDSHREW] = sAnims_Sandshrew, - [SPECIES_SANDSLASH] = sAnims_Sandslash, - [SPECIES_NIDORAN_F] = sAnims_NidoranF, - [SPECIES_NIDORINA] = sAnims_Nidorina, - [SPECIES_NIDOQUEEN] = sAnims_Nidoqueen, - [SPECIES_NIDORAN_M] = sAnims_NidoranM, - [SPECIES_NIDORINO] = sAnims_Nidorino, - [SPECIES_NIDOKING] = sAnims_Nidoking, - [SPECIES_CLEFAIRY] = sAnims_Clefairy, - [SPECIES_CLEFABLE] = sAnims_Clefable, - [SPECIES_VULPIX] = sAnims_Vulpix, - [SPECIES_NINETALES] = sAnims_Ninetales, - [SPECIES_JIGGLYPUFF] = sAnims_Jigglypuff, - [SPECIES_WIGGLYTUFF] = sAnims_Wigglytuff, - [SPECIES_ZUBAT] = sAnims_Zubat, - [SPECIES_GOLBAT] = sAnims_Golbat, - [SPECIES_ODDISH] = sAnims_Oddish, - [SPECIES_GLOOM] = sAnims_Gloom, - [SPECIES_VILEPLUME] = sAnims_Vileplume, - [SPECIES_PARAS] = sAnims_Paras, - [SPECIES_PARASECT] = sAnims_Parasect, - [SPECIES_VENONAT] = sAnims_Venonat, - [SPECIES_VENOMOTH] = sAnims_Venomoth, - [SPECIES_DIGLETT] = sAnims_Diglett, - [SPECIES_DUGTRIO] = sAnims_Dugtrio, - [SPECIES_MEOWTH] = sAnims_Meowth, - [SPECIES_PERSIAN] = sAnims_Persian, - [SPECIES_PSYDUCK] = sAnims_Psyduck, - [SPECIES_GOLDUCK] = sAnims_Golduck, - [SPECIES_MANKEY] = sAnims_Mankey, - [SPECIES_PRIMEAPE] = sAnims_Primeape, - [SPECIES_GROWLITHE] = sAnims_Growlithe, - [SPECIES_ARCANINE] = sAnims_Arcanine, - [SPECIES_POLIWAG] = sAnims_Poliwag, - [SPECIES_POLIWHIRL] = sAnims_Poliwhirl, - [SPECIES_POLIWRATH] = sAnims_Poliwrath, - [SPECIES_ABRA] = sAnims_Abra, - [SPECIES_KADABRA] = sAnims_Kadabra, - [SPECIES_ALAKAZAM] = sAnims_Alakazam, - [SPECIES_MACHOP] = sAnims_Machop, - [SPECIES_MACHOKE] = sAnims_Machoke, - [SPECIES_MACHAMP] = sAnims_Machamp, - [SPECIES_BELLSPROUT] = sAnims_Bellsprout, - [SPECIES_WEEPINBELL] = sAnims_Weepinbell, - [SPECIES_VICTREEBEL] = sAnims_Victreebel, - [SPECIES_TENTACOOL] = sAnims_Tentacool, - [SPECIES_TENTACRUEL] = sAnims_Tentacruel, - [SPECIES_GEODUDE] = sAnims_Geodude, - [SPECIES_GRAVELER] = sAnims_Graveler, - [SPECIES_GOLEM] = sAnims_Golem, - [SPECIES_PONYTA] = sAnims_Ponyta, - [SPECIES_RAPIDASH] = sAnims_Rapidash, - [SPECIES_SLOWPOKE] = sAnims_Slowpoke, - [SPECIES_SLOWBRO] = sAnims_Slowbro, - [SPECIES_MAGNEMITE] = sAnims_Magnemite, - [SPECIES_MAGNETON] = sAnims_Magneton, - [SPECIES_FARFETCHD] = sAnims_Farfetchd, - [SPECIES_DODUO] = sAnims_Doduo, - [SPECIES_DODRIO] = sAnims_Dodrio, - [SPECIES_SEEL] = sAnims_Seel, - [SPECIES_DEWGONG] = sAnims_Dewgong, - [SPECIES_GRIMER] = sAnims_Grimer, - [SPECIES_MUK] = sAnims_Muk, - [SPECIES_SHELLDER] = sAnims_Shellder, - [SPECIES_CLOYSTER] = sAnims_Cloyster, - [SPECIES_GASTLY] = sAnims_Gastly, - [SPECIES_HAUNTER] = sAnims_Haunter, - [SPECIES_GENGAR] = sAnims_Gengar, - [SPECIES_ONIX] = sAnims_Onix, - [SPECIES_DROWZEE] = sAnims_Drowzee, - [SPECIES_HYPNO] = sAnims_Hypno, - [SPECIES_KRABBY] = sAnims_Krabby, - [SPECIES_KINGLER] = sAnims_Kingler, - [SPECIES_VOLTORB] = sAnims_Voltorb, - [SPECIES_ELECTRODE] = sAnims_Electrode, - [SPECIES_EXEGGCUTE] = sAnims_Exeggcute, - [SPECIES_EXEGGUTOR] = sAnims_Exeggutor, - [SPECIES_CUBONE] = sAnims_Cubone, - [SPECIES_MAROWAK] = sAnims_Marowak, - [SPECIES_HITMONLEE] = sAnims_Hitmonlee, - [SPECIES_HITMONCHAN] = sAnims_Hitmonchan, - [SPECIES_LICKITUNG] = sAnims_Lickitung, - [SPECIES_KOFFING] = sAnims_Koffing, - [SPECIES_WEEZING] = sAnims_Weezing, - [SPECIES_RHYHORN] = sAnims_Rhyhorn, - [SPECIES_RHYDON] = sAnims_Rhydon, - [SPECIES_CHANSEY] = sAnims_Chansey, - [SPECIES_TANGELA] = sAnims_Tangela, - [SPECIES_KANGASKHAN] = sAnims_Kangaskhan, - [SPECIES_HORSEA] = sAnims_Horsea, - [SPECIES_SEADRA] = sAnims_Seadra, - [SPECIES_GOLDEEN] = sAnims_Goldeen, - [SPECIES_SEAKING] = sAnims_Seaking, - [SPECIES_STARYU] = sAnims_Staryu, - [SPECIES_STARMIE] = sAnims_Starmie, - [SPECIES_MR_MIME] = sAnims_MrMime, - [SPECIES_SCYTHER] = sAnims_Scyther, - [SPECIES_JYNX] = sAnims_Jynx, - [SPECIES_ELECTABUZZ] = sAnims_Electabuzz, - [SPECIES_MAGMAR] = sAnims_Magmar, - [SPECIES_PINSIR] = sAnims_Pinsir, - [SPECIES_TAUROS] = sAnims_Tauros, - [SPECIES_MAGIKARP] = sAnims_Magikarp, - [SPECIES_GYARADOS] = sAnims_Gyarados, - [SPECIES_LAPRAS] = sAnims_Lapras, - [SPECIES_DITTO] = sAnims_Ditto, - [SPECIES_EEVEE] = sAnims_Eevee, - [SPECIES_VAPOREON] = sAnims_Vaporeon, - [SPECIES_JOLTEON] = sAnims_Jolteon, - [SPECIES_FLAREON] = sAnims_Flareon, - [SPECIES_PORYGON] = sAnims_Porygon, - [SPECIES_OMANYTE] = sAnims_Omanyte, - [SPECIES_OMASTAR] = sAnims_Omastar, - [SPECIES_KABUTO] = sAnims_Kabuto, - [SPECIES_KABUTOPS] = sAnims_Kabutops, - [SPECIES_AERODACTYL] = sAnims_Aerodactyl, - [SPECIES_SNORLAX] = sAnims_Snorlax, - [SPECIES_ARTICUNO] = sAnims_Articuno, - [SPECIES_ZAPDOS] = sAnims_Zapdos, - [SPECIES_MOLTRES] = sAnims_Moltres, - [SPECIES_DRATINI] = sAnims_Dratini, - [SPECIES_DRAGONAIR] = sAnims_Dragonair, - [SPECIES_DRAGONITE] = sAnims_Dragonite, - [SPECIES_MEWTWO] = sAnims_Mewtwo, - [SPECIES_MEW] = sAnims_Mew, - [SPECIES_CHIKORITA] = sAnims_Chikorita, - [SPECIES_BAYLEEF] = sAnims_Bayleef, - [SPECIES_MEGANIUM] = sAnims_Meganium, - [SPECIES_CYNDAQUIL] = sAnims_Cyndaquil, - [SPECIES_QUILAVA] = sAnims_Quilava, - [SPECIES_TYPHLOSION] = sAnims_Typhlosion, - [SPECIES_TOTODILE] = sAnims_Totodile, - [SPECIES_CROCONAW] = sAnims_Croconaw, - [SPECIES_FERALIGATR] = sAnims_Feraligatr, - [SPECIES_SENTRET] = sAnims_Sentret, - [SPECIES_FURRET] = sAnims_Furret, - [SPECIES_HOOTHOOT] = sAnims_Hoothoot, - [SPECIES_NOCTOWL] = sAnims_Noctowl, - [SPECIES_LEDYBA] = sAnims_Ledyba, - [SPECIES_LEDIAN] = sAnims_Ledian, - [SPECIES_SPINARAK] = sAnims_Spinarak, - [SPECIES_ARIADOS] = sAnims_Ariados, - [SPECIES_CROBAT] = sAnims_Crobat, - [SPECIES_CHINCHOU] = sAnims_Chinchou, - [SPECIES_LANTURN] = sAnims_Lanturn, - [SPECIES_PICHU] = sAnims_Pichu, - [SPECIES_CLEFFA] = sAnims_Cleffa, - [SPECIES_IGGLYBUFF] = sAnims_Igglybuff, - [SPECIES_TOGEPI] = sAnims_Togepi, - [SPECIES_TOGETIC] = sAnims_Togetic, - [SPECIES_NATU] = sAnims_Natu, - [SPECIES_XATU] = sAnims_Xatu, - [SPECIES_MAREEP] = sAnims_Mareep, - [SPECIES_FLAAFFY] = sAnims_Flaaffy, - [SPECIES_AMPHAROS] = sAnims_Ampharos, - [SPECIES_BELLOSSOM] = sAnims_Bellossom, - [SPECIES_MARILL] = sAnims_Marill, - [SPECIES_AZUMARILL] = sAnims_Azumarill, - [SPECIES_SUDOWOODO] = sAnims_Sudowoodo, - [SPECIES_POLITOED] = sAnims_Politoed, - [SPECIES_HOPPIP] = sAnims_Hoppip, - [SPECIES_SKIPLOOM] = sAnims_Skiploom, - [SPECIES_JUMPLUFF] = sAnims_Jumpluff, - [SPECIES_AIPOM] = sAnims_Aipom, - [SPECIES_SUNKERN] = sAnims_Sunkern, - [SPECIES_SUNFLORA] = sAnims_Sunflora, - [SPECIES_YANMA] = sAnims_Yanma, - [SPECIES_WOOPER] = sAnims_Wooper, - [SPECIES_QUAGSIRE] = sAnims_Quagsire, - [SPECIES_ESPEON] = sAnims_Espeon, - [SPECIES_UMBREON] = sAnims_Umbreon, - [SPECIES_MURKROW] = sAnims_Murkrow, - [SPECIES_SLOWKING] = sAnims_Slowking, - [SPECIES_MISDREAVUS] = sAnims_Misdreavus, - [SPECIES_UNOWN] = sAnims_Unown, - [SPECIES_WOBBUFFET] = sAnims_Wobbuffet, - [SPECIES_GIRAFARIG] = sAnims_Girafarig, - [SPECIES_PINECO] = sAnims_Pineco, - [SPECIES_FORRETRESS] = sAnims_Forretress, - [SPECIES_DUNSPARCE] = sAnims_Dunsparce, - [SPECIES_GLIGAR] = sAnims_Gligar, - [SPECIES_STEELIX] = sAnims_Steelix, - [SPECIES_SNUBBULL] = sAnims_Snubbull, - [SPECIES_GRANBULL] = sAnims_Granbull, - [SPECIES_QWILFISH] = sAnims_Qwilfish, - [SPECIES_SCIZOR] = sAnims_Scizor, - [SPECIES_SHUCKLE] = sAnims_Shuckle, - [SPECIES_HERACROSS] = sAnims_Heracross, - [SPECIES_SNEASEL] = sAnims_Sneasel, - [SPECIES_TEDDIURSA] = sAnims_Teddiursa, - [SPECIES_URSARING] = sAnims_Ursaring, - [SPECIES_SLUGMA] = sAnims_Slugma, - [SPECIES_MAGCARGO] = sAnims_Magcargo, - [SPECIES_SWINUB] = sAnims_Swinub, - [SPECIES_PILOSWINE] = sAnims_Piloswine, - [SPECIES_CORSOLA] = sAnims_Corsola, - [SPECIES_REMORAID] = sAnims_Remoraid, - [SPECIES_OCTILLERY] = sAnims_Octillery, - [SPECIES_DELIBIRD] = sAnims_Delibird, - [SPECIES_MANTINE] = sAnims_Mantine, - [SPECIES_SKARMORY] = sAnims_Skarmory, - [SPECIES_HOUNDOUR] = sAnims_Houndour, - [SPECIES_HOUNDOOM] = sAnims_Houndoom, - [SPECIES_KINGDRA] = sAnims_Kingdra, - [SPECIES_PHANPY] = sAnims_Phanpy, - [SPECIES_DONPHAN] = sAnims_Donphan, - [SPECIES_PORYGON2] = sAnims_Porygon2, - [SPECIES_STANTLER] = sAnims_Stantler, - [SPECIES_SMEARGLE] = sAnims_Smeargle, - [SPECIES_TYROGUE] = sAnims_Tyrogue, - [SPECIES_HITMONTOP] = sAnims_Hitmontop, - [SPECIES_SMOOCHUM] = sAnims_Smoochum, - [SPECIES_ELEKID] = sAnims_Elekid, - [SPECIES_MAGBY] = sAnims_Magby, - [SPECIES_MILTANK] = sAnims_Miltank, - [SPECIES_BLISSEY] = sAnims_Blissey, - [SPECIES_RAIKOU] = sAnims_Raikou, - [SPECIES_ENTEI] = sAnims_Entei, - [SPECIES_SUICUNE] = sAnims_Suicune, - [SPECIES_LARVITAR] = sAnims_Larvitar, - [SPECIES_PUPITAR] = sAnims_Pupitar, - [SPECIES_TYRANITAR] = sAnims_Tyranitar, - [SPECIES_LUGIA] = sAnims_Lugia, - [SPECIES_HO_OH] = sAnims_HoOh, - [SPECIES_CELEBI] = sAnims_Celebi, - [SPECIES_TREECKO] = sAnims_Treecko, - [SPECIES_GROVYLE] = sAnims_Grovyle, - [SPECIES_SCEPTILE] = sAnims_Sceptile, - [SPECIES_TORCHIC] = sAnims_Torchic, - [SPECIES_COMBUSKEN] = sAnims_Combusken, - [SPECIES_BLAZIKEN] = sAnims_Blaziken, - [SPECIES_MUDKIP] = sAnims_Mudkip, - [SPECIES_MARSHTOMP] = sAnims_Marshtomp, - [SPECIES_SWAMPERT] = sAnims_Swampert, - [SPECIES_POOCHYENA] = sAnims_Poochyena, - [SPECIES_MIGHTYENA] = sAnims_Mightyena, - [SPECIES_ZIGZAGOON] = sAnims_Zigzagoon, - [SPECIES_LINOONE] = sAnims_Linoone, - [SPECIES_WURMPLE] = sAnims_Wurmple, - [SPECIES_SILCOON] = sAnims_Silcoon, - [SPECIES_BEAUTIFLY] = sAnims_Beautifly, - [SPECIES_CASCOON] = sAnims_Cascoon, - [SPECIES_DUSTOX] = sAnims_Dustox, - [SPECIES_LOTAD] = sAnims_Lotad, - [SPECIES_LOMBRE] = sAnims_Lombre, - [SPECIES_LUDICOLO] = sAnims_Ludicolo, - [SPECIES_SEEDOT] = sAnims_Seedot, - [SPECIES_NUZLEAF] = sAnims_Nuzleaf, - [SPECIES_SHIFTRY] = sAnims_Shiftry, - [SPECIES_NINCADA] = sAnims_Nincada, - [SPECIES_NINJASK] = sAnims_Ninjask, - [SPECIES_SHEDINJA] = sAnims_Shedinja, - [SPECIES_TAILLOW] = sAnims_Taillow, - [SPECIES_SWELLOW] = sAnims_Swellow, - [SPECIES_SHROOMISH] = sAnims_Shroomish, - [SPECIES_BRELOOM] = sAnims_Breloom, - [SPECIES_SPINDA] = sAnims_Spinda, - [SPECIES_WINGULL] = sAnims_Wingull, - [SPECIES_PELIPPER] = sAnims_Pelipper, - [SPECIES_SURSKIT] = sAnims_Surskit, - [SPECIES_MASQUERAIN] = sAnims_Masquerain, - [SPECIES_WAILMER] = sAnims_Wailmer, - [SPECIES_WAILORD] = sAnims_Wailord, - [SPECIES_SKITTY] = sAnims_Skitty, - [SPECIES_DELCATTY] = sAnims_Delcatty, - [SPECIES_KECLEON] = sAnims_Kecleon, - [SPECIES_BALTOY] = sAnims_Baltoy, - [SPECIES_CLAYDOL] = sAnims_Claydol, - [SPECIES_NOSEPASS] = sAnims_Nosepass, - [SPECIES_TORKOAL] = sAnims_Torkoal, - [SPECIES_SABLEYE] = sAnims_Sableye, - [SPECIES_BARBOACH] = sAnims_Barboach, - [SPECIES_WHISCASH] = sAnims_Whiscash, - [SPECIES_LUVDISC] = sAnims_Luvdisc, - [SPECIES_CORPHISH] = sAnims_Corphish, - [SPECIES_CRAWDAUNT] = sAnims_Crawdaunt, - [SPECIES_FEEBAS] = sAnims_Feebas, - [SPECIES_MILOTIC] = sAnims_Milotic, - [SPECIES_CARVANHA] = sAnims_Carvanha, - [SPECIES_SHARPEDO] = sAnims_Sharpedo, - [SPECIES_TRAPINCH] = sAnims_Trapinch, - [SPECIES_VIBRAVA] = sAnims_Vibrava, - [SPECIES_FLYGON] = sAnims_Flygon, - [SPECIES_MAKUHITA] = sAnims_Makuhita, - [SPECIES_HARIYAMA] = sAnims_Hariyama, - [SPECIES_ELECTRIKE] = sAnims_Electrike, - [SPECIES_MANECTRIC] = sAnims_Manectric, - [SPECIES_NUMEL] = sAnims_Numel, - [SPECIES_CAMERUPT] = sAnims_Camerupt, - [SPECIES_SPHEAL] = sAnims_Spheal, - [SPECIES_SEALEO] = sAnims_Sealeo, - [SPECIES_WALREIN] = sAnims_Walrein, - [SPECIES_CACNEA] = sAnims_Cacnea, - [SPECIES_CACTURNE] = sAnims_Cacturne, - [SPECIES_SNORUNT] = sAnims_Snorunt, - [SPECIES_GLALIE] = sAnims_Glalie, - [SPECIES_LUNATONE] = sAnims_Lunatone, - [SPECIES_SOLROCK] = sAnims_Solrock, - [SPECIES_AZURILL] = sAnims_Azurill, - [SPECIES_SPOINK] = sAnims_Spoink, - [SPECIES_GRUMPIG] = sAnims_Grumpig, - [SPECIES_PLUSLE] = sAnims_Plusle, - [SPECIES_MINUN] = sAnims_Minun, - [SPECIES_MAWILE] = sAnims_Mawile, - [SPECIES_MEDITITE] = sAnims_Meditite, - [SPECIES_MEDICHAM] = sAnims_Medicham, - [SPECIES_SWABLU] = sAnims_Swablu, - [SPECIES_ALTARIA] = sAnims_Altaria, - [SPECIES_WYNAUT] = sAnims_Wynaut, - [SPECIES_DUSKULL] = sAnims_Duskull, - [SPECIES_DUSCLOPS] = sAnims_Dusclops, - [SPECIES_ROSELIA] = sAnims_Roselia, - [SPECIES_SLAKOTH] = sAnims_Slakoth, - [SPECIES_VIGOROTH] = sAnims_Vigoroth, - [SPECIES_SLAKING] = sAnims_Slaking, - [SPECIES_GULPIN] = sAnims_Gulpin, - [SPECIES_SWALOT] = sAnims_Swalot, - [SPECIES_TROPIUS] = sAnims_Tropius, - [SPECIES_WHISMUR] = sAnims_Whismur, - [SPECIES_LOUDRED] = sAnims_Loudred, - [SPECIES_EXPLOUD] = sAnims_Exploud, - [SPECIES_CLAMPERL] = sAnims_Clamperl, - [SPECIES_HUNTAIL] = sAnims_Huntail, - [SPECIES_GOREBYSS] = sAnims_Gorebyss, - [SPECIES_ABSOL] = sAnims_Absol, - [SPECIES_SHUPPET] = sAnims_Shuppet, - [SPECIES_BANETTE] = sAnims_Banette, - [SPECIES_SEVIPER] = sAnims_Seviper, - [SPECIES_ZANGOOSE] = sAnims_Zangoose, - [SPECIES_RELICANTH] = sAnims_Relicanth, - [SPECIES_ARON] = sAnims_Aron, - [SPECIES_LAIRON] = sAnims_Lairon, - [SPECIES_AGGRON] = sAnims_Aggron, - [SPECIES_CASTFORM] = sAnims_Castform, - [SPECIES_VOLBEAT] = sAnims_Volbeat, - [SPECIES_ILLUMISE] = sAnims_Illumise, - [SPECIES_LILEEP] = sAnims_Lileep, - [SPECIES_CRADILY] = sAnims_Cradily, - [SPECIES_ANORITH] = sAnims_Anorith, - [SPECIES_ARMALDO] = sAnims_Armaldo, - [SPECIES_RALTS] = sAnims_Ralts, - [SPECIES_KIRLIA] = sAnims_Kirlia, - [SPECIES_GARDEVOIR] = sAnims_Gardevoir, - [SPECIES_BAGON] = sAnims_Bagon, - [SPECIES_SHELGON] = sAnims_Shelgon, - [SPECIES_SALAMENCE] = sAnims_Salamence, - [SPECIES_BELDUM] = sAnims_Beldum, - [SPECIES_METANG] = sAnims_Metang, - [SPECIES_METAGROSS] = sAnims_Metagross, - [SPECIES_REGIROCK] = sAnims_Regirock, - [SPECIES_REGICE] = sAnims_Regice, - [SPECIES_REGISTEEL] = sAnims_Registeel, - [SPECIES_KYOGRE] = sAnims_Kyogre, - [SPECIES_GROUDON] = sAnims_Groudon, - [SPECIES_RAYQUAZA] = sAnims_Rayquaza, - [SPECIES_LATIAS] = sAnims_Latias, - [SPECIES_LATIOS] = sAnims_Latios, - [SPECIES_JIRACHI] = sAnims_Jirachi, - [SPECIES_DEOXYS] = sAnims_Deoxys, - [SPECIES_CHIMECHO] = sAnims_Chimecho, +{ // Gen 1 + [SPECIES_NONE] = sAnims_None, + [SPECIES_BULBASAUR] = sAnims_Bulbasaur, + [SPECIES_IVYSAUR] = sAnims_Ivysaur, + [SPECIES_VENUSAUR] = sAnims_Venusaur, + [SPECIES_CHARMANDER] = sAnims_Charmander, + [SPECIES_CHARMELEON] = sAnims_Charmeleon, + [SPECIES_CHARIZARD] = sAnims_Charizard, + [SPECIES_SQUIRTLE] = sAnims_Squirtle, + [SPECIES_WARTORTLE] = sAnims_Wartortle, + [SPECIES_BLASTOISE] = sAnims_Blastoise, + [SPECIES_CATERPIE] = sAnims_Caterpie, + [SPECIES_METAPOD] = sAnims_Metapod, + [SPECIES_BUTTERFREE] = sAnims_Butterfree, + [SPECIES_WEEDLE] = sAnims_Weedle, + [SPECIES_KAKUNA] = sAnims_Kakuna, + [SPECIES_BEEDRILL] = sAnims_Beedrill, + [SPECIES_PIDGEY] = sAnims_Pidgey, + [SPECIES_PIDGEOTTO] = sAnims_Pidgeotto, + [SPECIES_PIDGEOT] = sAnims_Pidgeot, + [SPECIES_RATTATA] = sAnims_Rattata, + [SPECIES_RATICATE] = sAnims_Raticate, + [SPECIES_SPEAROW] = sAnims_Spearow, + [SPECIES_FEAROW] = sAnims_Fearow, + [SPECIES_EKANS] = sAnims_Ekans, + [SPECIES_ARBOK] = sAnims_Arbok, + [SPECIES_PIKACHU] = sAnims_Pikachu, + [SPECIES_RAICHU] = sAnims_Raichu, + [SPECIES_SANDSHREW] = sAnims_Sandshrew, + [SPECIES_SANDSLASH] = sAnims_Sandslash, + [SPECIES_NIDORAN_F] = sAnims_NidoranF, + [SPECIES_NIDORINA] = sAnims_Nidorina, + [SPECIES_NIDOQUEEN] = sAnims_Nidoqueen, + [SPECIES_NIDORAN_M] = sAnims_NidoranM, + [SPECIES_NIDORINO] = sAnims_Nidorino, + [SPECIES_NIDOKING] = sAnims_Nidoking, + [SPECIES_CLEFAIRY] = sAnims_Clefairy, + [SPECIES_CLEFABLE] = sAnims_Clefable, + [SPECIES_VULPIX] = sAnims_Vulpix, + [SPECIES_NINETALES] = sAnims_Ninetales, + [SPECIES_JIGGLYPUFF] = sAnims_Jigglypuff, + [SPECIES_WIGGLYTUFF] = sAnims_Wigglytuff, + [SPECIES_ZUBAT] = sAnims_Zubat, + [SPECIES_GOLBAT] = sAnims_Golbat, + [SPECIES_ODDISH] = sAnims_Oddish, + [SPECIES_GLOOM] = sAnims_Gloom, + [SPECIES_VILEPLUME] = sAnims_Vileplume, + [SPECIES_PARAS] = sAnims_Paras, + [SPECIES_PARASECT] = sAnims_Parasect, + [SPECIES_VENONAT] = sAnims_Venonat, + [SPECIES_VENOMOTH] = sAnims_Venomoth, + [SPECIES_DIGLETT] = sAnims_Diglett, + [SPECIES_DUGTRIO] = sAnims_Dugtrio, + [SPECIES_MEOWTH] = sAnims_Meowth, + [SPECIES_PERSIAN] = sAnims_Persian, + [SPECIES_PSYDUCK] = sAnims_Psyduck, + [SPECIES_GOLDUCK] = sAnims_Golduck, + [SPECIES_MANKEY] = sAnims_Mankey, + [SPECIES_PRIMEAPE] = sAnims_Primeape, + [SPECIES_GROWLITHE] = sAnims_Growlithe, + [SPECIES_ARCANINE] = sAnims_Arcanine, + [SPECIES_POLIWAG] = sAnims_Poliwag, + [SPECIES_POLIWHIRL] = sAnims_Poliwhirl, + [SPECIES_POLIWRATH] = sAnims_Poliwrath, + [SPECIES_ABRA] = sAnims_Abra, + [SPECIES_KADABRA] = sAnims_Kadabra, + [SPECIES_ALAKAZAM] = sAnims_Alakazam, + [SPECIES_MACHOP] = sAnims_Machop, + [SPECIES_MACHOKE] = sAnims_Machoke, + [SPECIES_MACHAMP] = sAnims_Machamp, + [SPECIES_BELLSPROUT] = sAnims_Bellsprout, + [SPECIES_WEEPINBELL] = sAnims_Weepinbell, + [SPECIES_VICTREEBEL] = sAnims_Victreebel, + [SPECIES_TENTACOOL] = sAnims_Tentacool, + [SPECIES_TENTACRUEL] = sAnims_Tentacruel, + [SPECIES_GEODUDE] = sAnims_Geodude, + [SPECIES_GRAVELER] = sAnims_Graveler, + [SPECIES_GOLEM] = sAnims_Golem, + [SPECIES_PONYTA] = sAnims_Ponyta, + [SPECIES_RAPIDASH] = sAnims_Rapidash, + [SPECIES_SLOWPOKE] = sAnims_Slowpoke, + [SPECIES_SLOWBRO] = sAnims_Slowbro, + [SPECIES_MAGNEMITE] = sAnims_Magnemite, + [SPECIES_MAGNETON] = sAnims_Magneton, + [SPECIES_FARFETCHD] = sAnims_Farfetchd, + [SPECIES_DODUO] = sAnims_Doduo, + [SPECIES_DODRIO] = sAnims_Dodrio, + [SPECIES_SEEL] = sAnims_Seel, + [SPECIES_DEWGONG] = sAnims_Dewgong, + [SPECIES_GRIMER] = sAnims_Grimer, + [SPECIES_MUK] = sAnims_Muk, + [SPECIES_SHELLDER] = sAnims_Shellder, + [SPECIES_CLOYSTER] = sAnims_Cloyster, + [SPECIES_GASTLY] = sAnims_Gastly, + [SPECIES_HAUNTER] = sAnims_Haunter, + [SPECIES_GENGAR] = sAnims_Gengar, + [SPECIES_ONIX] = sAnims_Onix, + [SPECIES_DROWZEE] = sAnims_Drowzee, + [SPECIES_HYPNO] = sAnims_Hypno, + [SPECIES_KRABBY] = sAnims_Krabby, + [SPECIES_KINGLER] = sAnims_Kingler, + [SPECIES_VOLTORB] = sAnims_Voltorb, + [SPECIES_ELECTRODE] = sAnims_Electrode, + [SPECIES_EXEGGCUTE] = sAnims_Exeggcute, + [SPECIES_EXEGGUTOR] = sAnims_Exeggutor, + [SPECIES_CUBONE] = sAnims_Cubone, + [SPECIES_MAROWAK] = sAnims_Marowak, + [SPECIES_HITMONLEE] = sAnims_Hitmonlee, + [SPECIES_HITMONCHAN] = sAnims_Hitmonchan, + [SPECIES_LICKITUNG] = sAnims_Lickitung, + [SPECIES_KOFFING] = sAnims_Koffing, + [SPECIES_WEEZING] = sAnims_Weezing, + [SPECIES_RHYHORN] = sAnims_Rhyhorn, + [SPECIES_RHYDON] = sAnims_Rhydon, + [SPECIES_CHANSEY] = sAnims_Chansey, + [SPECIES_TANGELA] = sAnims_Tangela, + [SPECIES_KANGASKHAN] = sAnims_Kangaskhan, + [SPECIES_HORSEA] = sAnims_Horsea, + [SPECIES_SEADRA] = sAnims_Seadra, + [SPECIES_GOLDEEN] = sAnims_Goldeen, + [SPECIES_SEAKING] = sAnims_Seaking, + [SPECIES_STARYU] = sAnims_Staryu, + [SPECIES_STARMIE] = sAnims_Starmie, + [SPECIES_MR_MIME] = sAnims_MrMime, + [SPECIES_SCYTHER] = sAnims_Scyther, + [SPECIES_JYNX] = sAnims_Jynx, + [SPECIES_ELECTABUZZ] = sAnims_Electabuzz, + [SPECIES_MAGMAR] = sAnims_Magmar, + [SPECIES_PINSIR] = sAnims_Pinsir, + [SPECIES_TAUROS] = sAnims_Tauros, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = sAnims_TaurosPaldean, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = sAnims_TaurosPaldean, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = sAnims_TaurosPaldean, + [SPECIES_MAGIKARP] = sAnims_Magikarp, + [SPECIES_GYARADOS] = sAnims_Gyarados, + [SPECIES_LAPRAS] = sAnims_Lapras, + [SPECIES_DITTO] = sAnims_Ditto, + [SPECIES_EEVEE] = sAnims_Eevee, + [SPECIES_VAPOREON] = sAnims_Vaporeon, + [SPECIES_JOLTEON] = sAnims_Jolteon, + [SPECIES_FLAREON] = sAnims_Flareon, + [SPECIES_PORYGON] = sAnims_Porygon, + [SPECIES_OMANYTE] = sAnims_Omanyte, + [SPECIES_OMASTAR] = sAnims_Omastar, + [SPECIES_KABUTO] = sAnims_Kabuto, + [SPECIES_KABUTOPS] = sAnims_Kabutops, + [SPECIES_AERODACTYL] = sAnims_Aerodactyl, + [SPECIES_SNORLAX] = sAnims_Snorlax, + [SPECIES_ARTICUNO] = sAnims_Articuno, + [SPECIES_ZAPDOS] = sAnims_Zapdos, + [SPECIES_MOLTRES] = sAnims_Moltres, + [SPECIES_DRATINI] = sAnims_Dratini, + [SPECIES_DRAGONAIR] = sAnims_Dragonair, + [SPECIES_DRAGONITE] = sAnims_Dragonite, + [SPECIES_MEWTWO] = sAnims_Mewtwo, + [SPECIES_MEW] = sAnims_Mew, + // Gen 2 + [SPECIES_CHIKORITA] = sAnims_Chikorita, + [SPECIES_BAYLEEF] = sAnims_Bayleef, + [SPECIES_MEGANIUM] = sAnims_Meganium, + [SPECIES_CYNDAQUIL] = sAnims_Cyndaquil, + [SPECIES_QUILAVA] = sAnims_Quilava, + [SPECIES_TYPHLOSION] = sAnims_Typhlosion, + [SPECIES_TOTODILE] = sAnims_Totodile, + [SPECIES_CROCONAW] = sAnims_Croconaw, + [SPECIES_FERALIGATR] = sAnims_Feraligatr, + [SPECIES_SENTRET] = sAnims_Sentret, + [SPECIES_FURRET] = sAnims_Furret, + [SPECIES_HOOTHOOT] = sAnims_Hoothoot, + [SPECIES_NOCTOWL] = sAnims_Noctowl, + [SPECIES_LEDYBA] = sAnims_Ledyba, + [SPECIES_LEDIAN] = sAnims_Ledian, + [SPECIES_SPINARAK] = sAnims_Spinarak, + [SPECIES_ARIADOS] = sAnims_Ariados, + [SPECIES_CROBAT] = sAnims_Crobat, + [SPECIES_CHINCHOU] = sAnims_Chinchou, + [SPECIES_LANTURN] = sAnims_Lanturn, + [SPECIES_PICHU] = sAnims_Pichu, + [SPECIES_CLEFFA] = sAnims_Cleffa, + [SPECIES_IGGLYBUFF] = sAnims_Igglybuff, + [SPECIES_TOGEPI] = sAnims_Togepi, + [SPECIES_TOGETIC] = sAnims_Togetic, + [SPECIES_NATU] = sAnims_Natu, + [SPECIES_XATU] = sAnims_Xatu, + [SPECIES_MAREEP] = sAnims_Mareep, + [SPECIES_FLAAFFY] = sAnims_Flaaffy, + [SPECIES_AMPHAROS] = sAnims_Ampharos, + [SPECIES_BELLOSSOM] = sAnims_Bellossom, + [SPECIES_MARILL] = sAnims_Marill, + [SPECIES_AZUMARILL] = sAnims_Azumarill, + [SPECIES_SUDOWOODO] = sAnims_Sudowoodo, + [SPECIES_POLITOED] = sAnims_Politoed, + [SPECIES_HOPPIP] = sAnims_Hoppip, + [SPECIES_SKIPLOOM] = sAnims_Skiploom, + [SPECIES_JUMPLUFF] = sAnims_Jumpluff, + [SPECIES_AIPOM] = sAnims_Aipom, + [SPECIES_SUNKERN] = sAnims_Sunkern, + [SPECIES_SUNFLORA] = sAnims_Sunflora, + [SPECIES_YANMA] = sAnims_Yanma, + [SPECIES_WOOPER] = sAnims_Wooper, + [SPECIES_WOOPER_PALDEAN] = sAnims_WooperPaldean, + [SPECIES_QUAGSIRE] = sAnims_Quagsire, + [SPECIES_ESPEON] = sAnims_Espeon, + [SPECIES_UMBREON] = sAnims_Umbreon, + [SPECIES_MURKROW] = sAnims_Murkrow, + [SPECIES_SLOWKING] = sAnims_Slowking, + [SPECIES_MISDREAVUS] = sAnims_Misdreavus, + [SPECIES_UNOWN] = sAnims_Unown, + [SPECIES_WOBBUFFET] = sAnims_Wobbuffet, + [SPECIES_GIRAFARIG] = sAnims_Girafarig, + [SPECIES_PINECO] = sAnims_Pineco, + [SPECIES_FORRETRESS] = sAnims_Forretress, + [SPECIES_DUNSPARCE] = sAnims_Dunsparce, + [SPECIES_GLIGAR] = sAnims_Gligar, + [SPECIES_STEELIX] = sAnims_Steelix, + [SPECIES_SNUBBULL] = sAnims_Snubbull, + [SPECIES_GRANBULL] = sAnims_Granbull, + [SPECIES_QWILFISH] = sAnims_Qwilfish, + [SPECIES_SCIZOR] = sAnims_Scizor, + [SPECIES_SHUCKLE] = sAnims_Shuckle, + [SPECIES_HERACROSS] = sAnims_Heracross, + [SPECIES_SNEASEL] = sAnims_Sneasel, + [SPECIES_TEDDIURSA] = sAnims_Teddiursa, + [SPECIES_URSARING] = sAnims_Ursaring, + [SPECIES_SLUGMA] = sAnims_Slugma, + [SPECIES_MAGCARGO] = sAnims_Magcargo, + [SPECIES_SWINUB] = sAnims_Swinub, + [SPECIES_PILOSWINE] = sAnims_Piloswine, + [SPECIES_CORSOLA] = sAnims_Corsola, + [SPECIES_REMORAID] = sAnims_Remoraid, + [SPECIES_OCTILLERY] = sAnims_Octillery, + [SPECIES_DELIBIRD] = sAnims_Delibird, + [SPECIES_MANTINE] = sAnims_Mantine, + [SPECIES_SKARMORY] = sAnims_Skarmory, + [SPECIES_HOUNDOUR] = sAnims_Houndour, + [SPECIES_HOUNDOOM] = sAnims_Houndoom, + [SPECIES_KINGDRA] = sAnims_Kingdra, + [SPECIES_PHANPY] = sAnims_Phanpy, + [SPECIES_DONPHAN] = sAnims_Donphan, + [SPECIES_PORYGON2] = sAnims_Porygon2, + [SPECIES_STANTLER] = sAnims_Stantler, + [SPECIES_SMEARGLE] = sAnims_Smeargle, + [SPECIES_TYROGUE] = sAnims_Tyrogue, + [SPECIES_HITMONTOP] = sAnims_Hitmontop, + [SPECIES_SMOOCHUM] = sAnims_Smoochum, + [SPECIES_ELEKID] = sAnims_Elekid, + [SPECIES_MAGBY] = sAnims_Magby, + [SPECIES_MILTANK] = sAnims_Miltank, + [SPECIES_BLISSEY] = sAnims_Blissey, + [SPECIES_RAIKOU] = sAnims_Raikou, + [SPECIES_ENTEI] = sAnims_Entei, + [SPECIES_SUICUNE] = sAnims_Suicune, + [SPECIES_LARVITAR] = sAnims_Larvitar, + [SPECIES_PUPITAR] = sAnims_Pupitar, + [SPECIES_TYRANITAR] = sAnims_Tyranitar, + [SPECIES_LUGIA] = sAnims_Lugia, + [SPECIES_HO_OH] = sAnims_HoOh, + [SPECIES_CELEBI] = sAnims_Celebi, + // Gen 3 + [SPECIES_TREECKO] = sAnims_Treecko, + [SPECIES_GROVYLE] = sAnims_Grovyle, + [SPECIES_SCEPTILE] = sAnims_Sceptile, + [SPECIES_TORCHIC] = sAnims_Torchic, + [SPECIES_COMBUSKEN] = sAnims_Combusken, + [SPECIES_BLAZIKEN] = sAnims_Blaziken, + [SPECIES_MUDKIP] = sAnims_Mudkip, + [SPECIES_MARSHTOMP] = sAnims_Marshtomp, + [SPECIES_SWAMPERT] = sAnims_Swampert, + [SPECIES_POOCHYENA] = sAnims_Poochyena, + [SPECIES_MIGHTYENA] = sAnims_Mightyena, + [SPECIES_ZIGZAGOON] = sAnims_Zigzagoon, + [SPECIES_LINOONE] = sAnims_Linoone, + [SPECIES_WURMPLE] = sAnims_Wurmple, + [SPECIES_SILCOON] = sAnims_Silcoon, + [SPECIES_BEAUTIFLY] = sAnims_Beautifly, + [SPECIES_CASCOON] = sAnims_Cascoon, + [SPECIES_DUSTOX] = sAnims_Dustox, + [SPECIES_LOTAD] = sAnims_Lotad, + [SPECIES_LOMBRE] = sAnims_Lombre, + [SPECIES_LUDICOLO] = sAnims_Ludicolo, + [SPECIES_SEEDOT] = sAnims_Seedot, + [SPECIES_NUZLEAF] = sAnims_Nuzleaf, + [SPECIES_SHIFTRY] = sAnims_Shiftry, + [SPECIES_NINCADA] = sAnims_Nincada, + [SPECIES_NINJASK] = sAnims_Ninjask, + [SPECIES_SHEDINJA] = sAnims_Shedinja, + [SPECIES_TAILLOW] = sAnims_Taillow, + [SPECIES_SWELLOW] = sAnims_Swellow, + [SPECIES_SHROOMISH] = sAnims_Shroomish, + [SPECIES_BRELOOM] = sAnims_Breloom, + [SPECIES_SPINDA] = sAnims_Spinda, + [SPECIES_WINGULL] = sAnims_Wingull, + [SPECIES_PELIPPER] = sAnims_Pelipper, + [SPECIES_SURSKIT] = sAnims_Surskit, + [SPECIES_MASQUERAIN] = sAnims_Masquerain, + [SPECIES_WAILMER] = sAnims_Wailmer, + [SPECIES_WAILORD] = sAnims_Wailord, + [SPECIES_SKITTY] = sAnims_Skitty, + [SPECIES_DELCATTY] = sAnims_Delcatty, + [SPECIES_KECLEON] = sAnims_Kecleon, + [SPECIES_BALTOY] = sAnims_Baltoy, + [SPECIES_CLAYDOL] = sAnims_Claydol, + [SPECIES_NOSEPASS] = sAnims_Nosepass, + [SPECIES_TORKOAL] = sAnims_Torkoal, + [SPECIES_SABLEYE] = sAnims_Sableye, + [SPECIES_BARBOACH] = sAnims_Barboach, + [SPECIES_WHISCASH] = sAnims_Whiscash, + [SPECIES_LUVDISC] = sAnims_Luvdisc, + [SPECIES_CORPHISH] = sAnims_Corphish, + [SPECIES_CRAWDAUNT] = sAnims_Crawdaunt, + [SPECIES_FEEBAS] = sAnims_Feebas, + [SPECIES_MILOTIC] = sAnims_Milotic, + [SPECIES_CARVANHA] = sAnims_Carvanha, + [SPECIES_SHARPEDO] = sAnims_Sharpedo, + [SPECIES_TRAPINCH] = sAnims_Trapinch, + [SPECIES_VIBRAVA] = sAnims_Vibrava, + [SPECIES_FLYGON] = sAnims_Flygon, + [SPECIES_MAKUHITA] = sAnims_Makuhita, + [SPECIES_HARIYAMA] = sAnims_Hariyama, + [SPECIES_ELECTRIKE] = sAnims_Electrike, + [SPECIES_MANECTRIC] = sAnims_Manectric, + [SPECIES_NUMEL] = sAnims_Numel, + [SPECIES_CAMERUPT] = sAnims_Camerupt, + [SPECIES_SPHEAL] = sAnims_Spheal, + [SPECIES_SEALEO] = sAnims_Sealeo, + [SPECIES_WALREIN] = sAnims_Walrein, + [SPECIES_CACNEA] = sAnims_Cacnea, + [SPECIES_CACTURNE] = sAnims_Cacturne, + [SPECIES_SNORUNT] = sAnims_Snorunt, + [SPECIES_GLALIE] = sAnims_Glalie, + [SPECIES_LUNATONE] = sAnims_Lunatone, + [SPECIES_SOLROCK] = sAnims_Solrock, + [SPECIES_AZURILL] = sAnims_Azurill, + [SPECIES_SPOINK] = sAnims_Spoink, + [SPECIES_GRUMPIG] = sAnims_Grumpig, + [SPECIES_PLUSLE] = sAnims_Plusle, + [SPECIES_MINUN] = sAnims_Minun, + [SPECIES_MAWILE] = sAnims_Mawile, + [SPECIES_MEDITITE] = sAnims_Meditite, + [SPECIES_MEDICHAM] = sAnims_Medicham, + [SPECIES_SWABLU] = sAnims_Swablu, + [SPECIES_ALTARIA] = sAnims_Altaria, + [SPECIES_WYNAUT] = sAnims_Wynaut, + [SPECIES_DUSKULL] = sAnims_Duskull, + [SPECIES_DUSCLOPS] = sAnims_Dusclops, + [SPECIES_ROSELIA] = sAnims_Roselia, + [SPECIES_SLAKOTH] = sAnims_Slakoth, + [SPECIES_VIGOROTH] = sAnims_Vigoroth, + [SPECIES_SLAKING] = sAnims_Slaking, + [SPECIES_GULPIN] = sAnims_Gulpin, + [SPECIES_SWALOT] = sAnims_Swalot, + [SPECIES_TROPIUS] = sAnims_Tropius, + [SPECIES_WHISMUR] = sAnims_Whismur, + [SPECIES_LOUDRED] = sAnims_Loudred, + [SPECIES_EXPLOUD] = sAnims_Exploud, + [SPECIES_CLAMPERL] = sAnims_Clamperl, + [SPECIES_HUNTAIL] = sAnims_Huntail, + [SPECIES_GOREBYSS] = sAnims_Gorebyss, + [SPECIES_ABSOL] = sAnims_Absol, + [SPECIES_SHUPPET] = sAnims_Shuppet, + [SPECIES_BANETTE] = sAnims_Banette, + [SPECIES_SEVIPER] = sAnims_Seviper, + [SPECIES_ZANGOOSE] = sAnims_Zangoose, + [SPECIES_RELICANTH] = sAnims_Relicanth, + [SPECIES_ARON] = sAnims_Aron, + [SPECIES_LAIRON] = sAnims_Lairon, + [SPECIES_AGGRON] = sAnims_Aggron, + [SPECIES_CASTFORM_NORMAL] = sAnims_CastformNormal, + [SPECIES_VOLBEAT] = sAnims_Volbeat, + [SPECIES_ILLUMISE] = sAnims_Illumise, + [SPECIES_LILEEP] = sAnims_Lileep, + [SPECIES_CRADILY] = sAnims_Cradily, + [SPECIES_ANORITH] = sAnims_Anorith, + [SPECIES_ARMALDO] = sAnims_Armaldo, + [SPECIES_RALTS] = sAnims_Ralts, + [SPECIES_KIRLIA] = sAnims_Kirlia, + [SPECIES_GARDEVOIR] = sAnims_Gardevoir, + [SPECIES_BAGON] = sAnims_Bagon, + [SPECIES_SHELGON] = sAnims_Shelgon, + [SPECIES_SALAMENCE] = sAnims_Salamence, + [SPECIES_BELDUM] = sAnims_Beldum, + [SPECIES_METANG] = sAnims_Metang, + [SPECIES_METAGROSS] = sAnims_Metagross, + [SPECIES_REGIROCK] = sAnims_Regirock, + [SPECIES_REGICE] = sAnims_Regice, + [SPECIES_REGISTEEL] = sAnims_Registeel, + [SPECIES_KYOGRE] = sAnims_Kyogre, + [SPECIES_GROUDON] = sAnims_Groudon, + [SPECIES_RAYQUAZA] = sAnims_Rayquaza, + [SPECIES_LATIAS] = sAnims_Latias, + [SPECIES_LATIOS] = sAnims_Latios, + [SPECIES_JIRACHI] = sAnims_Jirachi, + [SPECIES_DEOXYS_NORMAL] = sAnims_DeoxysNormal, + [SPECIES_CHIMECHO] = sAnims_Chimecho, #if P_GEN_4_POKEMON == TRUE - [SPECIES_TURTWIG] = sAnims_Turtwig, - [SPECIES_GROTLE] = sAnims_Grotle, - [SPECIES_TORTERRA] = sAnims_Torterra, - [SPECIES_CHIMCHAR] = sAnims_Chimchar, - [SPECIES_MONFERNO] = sAnims_Monferno, - [SPECIES_INFERNAPE] = sAnims_Infernape, - [SPECIES_PIPLUP] = sAnims_Piplup, - [SPECIES_PRINPLUP] = sAnims_Prinplup, - [SPECIES_EMPOLEON] = sAnims_Empoleon, - [SPECIES_STARLY] = sAnims_Starly, - [SPECIES_STARAVIA] = sAnims_Staravia, - [SPECIES_STARAPTOR] = sAnims_Staraptor, - [SPECIES_BIDOOF] = sAnims_Bidoof, - [SPECIES_BIBAREL] = sAnims_Bibarel, - [SPECIES_KRICKETOT] = sAnims_Kricketot, - [SPECIES_KRICKETUNE] = sAnims_Kricketune, - [SPECIES_SHINX] = sAnims_Shinx, - [SPECIES_LUXIO] = sAnims_Luxio, - [SPECIES_LUXRAY] = sAnims_Luxray, - [SPECIES_BUDEW] = sAnims_Budew, - [SPECIES_ROSERADE] = sAnims_Roserade, - [SPECIES_CRANIDOS] = sAnims_Cranidos, - [SPECIES_RAMPARDOS] = sAnims_Rampardos, - [SPECIES_SHIELDON] = sAnims_Shieldon, - [SPECIES_BASTIODON] = sAnims_Bastiodon, - [SPECIES_BURMY] = sAnims_Burmy, - [SPECIES_WORMADAM] = sAnims_Wormadam, - [SPECIES_MOTHIM] = sAnims_Mothim, - [SPECIES_COMBEE] = sAnims_Combee, - [SPECIES_VESPIQUEN] = sAnims_Vespiquen, - [SPECIES_PACHIRISU] = sAnims_Pachirisu, - [SPECIES_BUIZEL] = sAnims_Buizel, - [SPECIES_FLOATZEL] = sAnims_Floatzel, - [SPECIES_CHERUBI] = sAnims_Cherubi, - [SPECIES_CHERRIM] = sAnims_CherrimOvercast, - [SPECIES_SHELLOS] = sAnims_Shellos, - [SPECIES_GASTRODON] = sAnims_Gastrodon, - [SPECIES_AMBIPOM] = sAnims_Ambipom, - [SPECIES_DRIFLOON] = sAnims_Drifloon, - [SPECIES_DRIFBLIM] = sAnims_Drifblim, - [SPECIES_BUNEARY] = sAnims_Buneary, - [SPECIES_LOPUNNY] = sAnims_Lopunny, - [SPECIES_MISMAGIUS] = sAnims_Mismagius, - [SPECIES_HONCHKROW] = sAnims_Honchkrow, - [SPECIES_GLAMEOW] = sAnims_Glameow, - [SPECIES_PURUGLY] = sAnims_Purugly, - [SPECIES_CHINGLING] = sAnims_Chingling, - [SPECIES_STUNKY] = sAnims_Stunky, - [SPECIES_SKUNTANK] = sAnims_Skuntank, - [SPECIES_BRONZOR] = sAnims_Bronzor, - [SPECIES_BRONZONG] = sAnims_Bronzong, - [SPECIES_BONSLY] = sAnims_Bonsly, - [SPECIES_MIME_JR] = sAnims_MimeJr, - [SPECIES_HAPPINY] = sAnims_Happiny, - [SPECIES_CHATOT] = sAnims_Chatot, - [SPECIES_SPIRITOMB] = sAnims_Spiritomb, - [SPECIES_GIBLE] = sAnims_Gible, - [SPECIES_GABITE] = sAnims_Gabite, - [SPECIES_GARCHOMP] = sAnims_Garchomp, - [SPECIES_MUNCHLAX] = sAnims_Munchlax, - [SPECIES_RIOLU] = sAnims_Riolu, - [SPECIES_LUCARIO] = sAnims_Lucario, - [SPECIES_HIPPOPOTAS] = sAnims_Hippopotas, - [SPECIES_HIPPOWDON] = sAnims_Hippowdon, - [SPECIES_SKORUPI] = sAnims_Skorupi, - [SPECIES_DRAPION] = sAnims_Drapion, - [SPECIES_CROAGUNK] = sAnims_Croagunk, - [SPECIES_TOXICROAK] = sAnims_Toxicroak, - [SPECIES_CARNIVINE] = sAnims_Carnivine, - [SPECIES_FINNEON] = sAnims_Finneon, - [SPECIES_LUMINEON] = sAnims_Lumineon, - [SPECIES_MANTYKE] = sAnims_Mantyke, - [SPECIES_SNOVER] = sAnims_Snover, - [SPECIES_ABOMASNOW] = sAnims_Abomasnow, - [SPECIES_WEAVILE] = sAnims_Weavile, - [SPECIES_MAGNEZONE] = sAnims_Magnezone, - [SPECIES_LICKILICKY] = sAnims_Lickilicky, - [SPECIES_RHYPERIOR] = sAnims_Rhyperior, - [SPECIES_TANGROWTH] = sAnims_Tangrowth, - [SPECIES_ELECTIVIRE] = sAnims_Electivire, - [SPECIES_MAGMORTAR] = sAnims_Magmortar, - [SPECIES_TOGEKISS] = sAnims_Togekiss, - [SPECIES_YANMEGA] = sAnims_Yanmega, - [SPECIES_LEAFEON] = sAnims_Leafeon, - [SPECIES_GLACEON] = sAnims_Glaceon, - [SPECIES_GLISCOR] = sAnims_Gliscor, - [SPECIES_MAMOSWINE] = sAnims_Mamoswine, - [SPECIES_PORYGON_Z] = sAnims_PORYGON_Z, - [SPECIES_GALLADE] = sAnims_Gallade, - [SPECIES_PROBOPASS] = sAnims_Probopass, - [SPECIES_DUSKNOIR] = sAnims_Dusknoir, - [SPECIES_FROSLASS] = sAnims_Froslass, - [SPECIES_ROTOM] = sAnims_Rotom, - [SPECIES_UXIE] = sAnims_Uxie, - [SPECIES_MESPRIT] = sAnims_Mesprit, - [SPECIES_AZELF] = sAnims_Azelf, - [SPECIES_DIALGA] = sAnims_Dialga, - [SPECIES_PALKIA] = sAnims_Palkia, - [SPECIES_HEATRAN] = sAnims_Heatran, - [SPECIES_REGIGIGAS] = sAnims_Regigigas, - [SPECIES_GIRATINA] = sAnims_Giratina, - [SPECIES_CRESSELIA] = sAnims_Cresselia, - [SPECIES_PHIONE] = sAnims_Phione, - [SPECIES_MANAPHY] = sAnims_Manaphy, - [SPECIES_DARKRAI] = sAnims_Darkrai, - [SPECIES_SHAYMIN] = sAnims_Shaymin, - [SPECIES_ARCEUS] = sAnims_Arceus, + [SPECIES_TURTWIG] = sAnims_Turtwig, + [SPECIES_GROTLE] = sAnims_Grotle, + [SPECIES_TORTERRA] = sAnims_Torterra, + [SPECIES_CHIMCHAR] = sAnims_Chimchar, + [SPECIES_MONFERNO] = sAnims_Monferno, + [SPECIES_INFERNAPE] = sAnims_Infernape, + [SPECIES_PIPLUP] = sAnims_Piplup, + [SPECIES_PRINPLUP] = sAnims_Prinplup, + [SPECIES_EMPOLEON] = sAnims_Empoleon, + [SPECIES_STARLY] = sAnims_Starly, + [SPECIES_STARAVIA] = sAnims_Staravia, + [SPECIES_STARAPTOR] = sAnims_Staraptor, + [SPECIES_BIDOOF] = sAnims_Bidoof, + [SPECIES_BIBAREL] = sAnims_Bibarel, + [SPECIES_KRICKETOT] = sAnims_Kricketot, + [SPECIES_KRICKETUNE] = sAnims_Kricketune, + [SPECIES_SHINX] = sAnims_Shinx, + [SPECIES_LUXIO] = sAnims_Luxio, + [SPECIES_LUXRAY] = sAnims_Luxray, + [SPECIES_BUDEW] = sAnims_Budew, + [SPECIES_ROSERADE] = sAnims_Roserade, + [SPECIES_CRANIDOS] = sAnims_Cranidos, + [SPECIES_RAMPARDOS] = sAnims_Rampardos, + [SPECIES_SHIELDON] = sAnims_Shieldon, + [SPECIES_BASTIODON] = sAnims_Bastiodon, + [SPECIES_BURMY_PLANT_CLOAK] = sAnims_Burmy, + [SPECIES_WORMADAM_PLANT_CLOAK] = sAnims_Wormadam, + [SPECIES_MOTHIM] = sAnims_Mothim, + [SPECIES_COMBEE] = sAnims_Combee, + [SPECIES_VESPIQUEN] = sAnims_Vespiquen, + [SPECIES_PACHIRISU] = sAnims_Pachirisu, + [SPECIES_BUIZEL] = sAnims_Buizel, + [SPECIES_FLOATZEL] = sAnims_Floatzel, + [SPECIES_CHERUBI] = sAnims_Cherubi, + [SPECIES_CHERRIM_OVERCAST] = sAnims_CherrimOvercast, + [SPECIES_SHELLOS_WEST_SEA] = sAnims_Shellos, + [SPECIES_GASTRODON_WEST_SEA] = sAnims_Gastrodon, + [SPECIES_AMBIPOM] = sAnims_Ambipom, + [SPECIES_DRIFLOON] = sAnims_Drifloon, + [SPECIES_DRIFBLIM] = sAnims_Drifblim, + [SPECIES_BUNEARY] = sAnims_Buneary, + [SPECIES_LOPUNNY] = sAnims_Lopunny, + [SPECIES_MISMAGIUS] = sAnims_Mismagius, + [SPECIES_HONCHKROW] = sAnims_Honchkrow, + [SPECIES_GLAMEOW] = sAnims_Glameow, + [SPECIES_PURUGLY] = sAnims_Purugly, + [SPECIES_CHINGLING] = sAnims_Chingling, + [SPECIES_STUNKY] = sAnims_Stunky, + [SPECIES_SKUNTANK] = sAnims_Skuntank, + [SPECIES_BRONZOR] = sAnims_Bronzor, + [SPECIES_BRONZONG] = sAnims_Bronzong, + [SPECIES_BONSLY] = sAnims_Bonsly, + [SPECIES_MIME_JR] = sAnims_MimeJr, + [SPECIES_HAPPINY] = sAnims_Happiny, + [SPECIES_CHATOT] = sAnims_Chatot, + [SPECIES_SPIRITOMB] = sAnims_Spiritomb, + [SPECIES_GIBLE] = sAnims_Gible, + [SPECIES_GABITE] = sAnims_Gabite, + [SPECIES_GARCHOMP] = sAnims_Garchomp, + [SPECIES_MUNCHLAX] = sAnims_Munchlax, + [SPECIES_RIOLU] = sAnims_Riolu, + [SPECIES_LUCARIO] = sAnims_Lucario, + [SPECIES_HIPPOPOTAS] = sAnims_Hippopotas, + [SPECIES_HIPPOWDON] = sAnims_Hippowdon, + [SPECIES_SKORUPI] = sAnims_Skorupi, + [SPECIES_DRAPION] = sAnims_Drapion, + [SPECIES_CROAGUNK] = sAnims_Croagunk, + [SPECIES_TOXICROAK] = sAnims_Toxicroak, + [SPECIES_CARNIVINE] = sAnims_Carnivine, + [SPECIES_FINNEON] = sAnims_Finneon, + [SPECIES_LUMINEON] = sAnims_Lumineon, + [SPECIES_MANTYKE] = sAnims_Mantyke, + [SPECIES_SNOVER] = sAnims_Snover, + [SPECIES_ABOMASNOW] = sAnims_Abomasnow, + [SPECIES_WEAVILE] = sAnims_Weavile, + [SPECIES_MAGNEZONE] = sAnims_Magnezone, + [SPECIES_LICKILICKY] = sAnims_Lickilicky, + [SPECIES_RHYPERIOR] = sAnims_Rhyperior, + [SPECIES_TANGROWTH] = sAnims_Tangrowth, + [SPECIES_ELECTIVIRE] = sAnims_Electivire, + [SPECIES_MAGMORTAR] = sAnims_Magmortar, + [SPECIES_TOGEKISS] = sAnims_Togekiss, + [SPECIES_YANMEGA] = sAnims_Yanmega, + [SPECIES_LEAFEON] = sAnims_Leafeon, + [SPECIES_GLACEON] = sAnims_Glaceon, + [SPECIES_GLISCOR] = sAnims_Gliscor, + [SPECIES_MAMOSWINE] = sAnims_Mamoswine, + [SPECIES_PORYGON_Z] = sAnims_PORYGON_Z, + [SPECIES_GALLADE] = sAnims_Gallade, + [SPECIES_PROBOPASS] = sAnims_Probopass, + [SPECIES_DUSKNOIR] = sAnims_Dusknoir, + [SPECIES_FROSLASS] = sAnims_Froslass, + [SPECIES_ROTOM] = sAnims_Rotom, + [SPECIES_UXIE] = sAnims_Uxie, + [SPECIES_MESPRIT] = sAnims_Mesprit, + [SPECIES_AZELF] = sAnims_Azelf, + [SPECIES_DIALGA] = sAnims_Dialga, + [SPECIES_PALKIA] = sAnims_Palkia, + [SPECIES_HEATRAN] = sAnims_Heatran, + [SPECIES_REGIGIGAS] = sAnims_Regigigas, + [SPECIES_GIRATINA_ALTERED] = sAnims_GiratinaAltered, + [SPECIES_CRESSELIA] = sAnims_Cresselia, + [SPECIES_PHIONE] = sAnims_Phione, + [SPECIES_MANAPHY] = sAnims_Manaphy, + [SPECIES_DARKRAI] = sAnims_Darkrai, + [SPECIES_SHAYMIN_LAND] = sAnims_ShayminLand, + [SPECIES_ARCEUS_NORMAL] = sAnims_Arceus, #endif #if P_GEN_5_POKEMON == TRUE - [SPECIES_VICTINI] = sAnims_Victini, - [SPECIES_SNIVY] = sAnims_Snivy, - [SPECIES_SERVINE] = sAnims_Servine, - [SPECIES_SERPERIOR] = sAnims_Serperior, - [SPECIES_TEPIG] = sAnims_Tepig, - [SPECIES_PIGNITE] = sAnims_Pignite, - [SPECIES_EMBOAR] = sAnims_Emboar, - [SPECIES_OSHAWOTT] = sAnims_Oshawott, - [SPECIES_DEWOTT] = sAnims_Dewott, - [SPECIES_SAMUROTT] = sAnims_Samurott, - [SPECIES_PATRAT] = sAnims_Patrat, - [SPECIES_WATCHOG] = sAnims_Watchog, - [SPECIES_LILLIPUP] = sAnims_Lillipup, - [SPECIES_HERDIER] = sAnims_Herdier, - [SPECIES_STOUTLAND] = sAnims_Stoutland, - [SPECIES_PURRLOIN] = sAnims_Purrloin, - [SPECIES_LIEPARD] = sAnims_Liepard, - [SPECIES_PANSAGE] = sAnims_Pansage, - [SPECIES_SIMISAGE] = sAnims_Simisage, - [SPECIES_PANSEAR] = sAnims_Pansear, - [SPECIES_SIMISEAR] = sAnims_Simisear, - [SPECIES_PANPOUR] = sAnims_Panpour, - [SPECIES_SIMIPOUR] = sAnims_Simipour, - [SPECIES_MUNNA] = sAnims_Munna, - [SPECIES_MUSHARNA] = sAnims_Musharna, - [SPECIES_PIDOVE] = sAnims_Pidove, - [SPECIES_TRANQUILL] = sAnims_Tranquill, - [SPECIES_UNFEZANT] = sAnims_Unfezant, - [SPECIES_BLITZLE] = sAnims_Blitzle, - [SPECIES_ZEBSTRIKA] = sAnims_Zebstrika, - [SPECIES_ROGGENROLA] = sAnims_Roggenrola, - [SPECIES_BOLDORE] = sAnims_Boldore, - [SPECIES_GIGALITH] = sAnims_Gigalith, - [SPECIES_WOOBAT] = sAnims_Woobat, - [SPECIES_SWOOBAT] = sAnims_Swoobat, - [SPECIES_DRILBUR] = sAnims_Drilbur, - [SPECIES_EXCADRILL] = sAnims_Excadrill, - [SPECIES_AUDINO] = sAnims_Audino, - [SPECIES_TIMBURR] = sAnims_Timburr, - [SPECIES_GURDURR] = sAnims_Gurdurr, - [SPECIES_CONKELDURR] = sAnims_Conkeldurr, - [SPECIES_TYMPOLE] = sAnims_Tympole, - [SPECIES_PALPITOAD] = sAnims_Palpitoad, - [SPECIES_SEISMITOAD] = sAnims_Seismitoad, - [SPECIES_THROH] = sAnims_Throh, - [SPECIES_SAWK] = sAnims_Sawk, - [SPECIES_SEWADDLE] = sAnims_Sewaddle, - [SPECIES_SWADLOON] = sAnims_Swadloon, - [SPECIES_LEAVANNY] = sAnims_Leavanny, - [SPECIES_VENIPEDE] = sAnims_Venipede, - [SPECIES_WHIRLIPEDE] = sAnims_Whirlipede, - [SPECIES_SCOLIPEDE] = sAnims_Scolipede, - [SPECIES_COTTONEE] = sAnims_Cottonee, - [SPECIES_WHIMSICOTT] = sAnims_Whimsicott, - [SPECIES_PETILIL] = sAnims_Petilil, - [SPECIES_LILLIGANT] = sAnims_Lilligant, - [SPECIES_BASCULIN] = sAnims_Basculin, - [SPECIES_SANDILE] = sAnims_Sandile, - [SPECIES_KROKOROK] = sAnims_Krokorok, - [SPECIES_KROOKODILE] = sAnims_Krookodile, - [SPECIES_DARUMAKA] = sAnims_Darumaka, - [SPECIES_DARMANITAN] = sAnims_Darmanitan, - [SPECIES_MARACTUS] = sAnims_Maractus, - [SPECIES_DWEBBLE] = sAnims_Dwebble, - [SPECIES_CRUSTLE] = sAnims_Crustle, - [SPECIES_SCRAGGY] = sAnims_Scraggy, - [SPECIES_SCRAFTY] = sAnims_Scrafty, - [SPECIES_SIGILYPH] = sAnims_Sigilyph, - [SPECIES_YAMASK] = sAnims_Yamask, - [SPECIES_COFAGRIGUS] = sAnims_Cofagrigus, - [SPECIES_TIRTOUGA] = sAnims_Tirtouga, - [SPECIES_CARRACOSTA] = sAnims_Carracosta, - [SPECIES_ARCHEN] = sAnims_Archen, - [SPECIES_ARCHEOPS] = sAnims_Archeops, - [SPECIES_TRUBBISH] = sAnims_Trubbish, - [SPECIES_GARBODOR] = sAnims_Garbodor, - [SPECIES_ZORUA] = sAnims_Zorua, - [SPECIES_ZOROARK] = sAnims_Zoroark, - [SPECIES_MINCCINO] = sAnims_Minccino, - [SPECIES_CINCCINO] = sAnims_Cinccino, - [SPECIES_GOTHITA] = sAnims_Gothita, - [SPECIES_GOTHORITA] = sAnims_Gothorita, - [SPECIES_GOTHITELLE] = sAnims_Gothitelle, - [SPECIES_SOLOSIS] = sAnims_Solosis, - [SPECIES_DUOSION] = sAnims_Duosion, - [SPECIES_REUNICLUS] = sAnims_Reuniclus, - [SPECIES_DUCKLETT] = sAnims_Ducklett, - [SPECIES_SWANNA] = sAnims_Swanna, - [SPECIES_VANILLITE] = sAnims_Vanillite, - [SPECIES_VANILLISH] = sAnims_Vanillish, - [SPECIES_VANILLUXE] = sAnims_Vanilluxe, - [SPECIES_DEERLING] = sAnims_Deerling, - [SPECIES_SAWSBUCK] = sAnims_Sawsbuck, - [SPECIES_EMOLGA] = sAnims_Emolga, - [SPECIES_KARRABLAST] = sAnims_Karrablast, - [SPECIES_ESCAVALIER] = sAnims_Escavalier, - [SPECIES_FOONGUS] = sAnims_Foongus, - [SPECIES_AMOONGUSS] = sAnims_Amoonguss, - [SPECIES_FRILLISH] = sAnims_Frillish, - [SPECIES_JELLICENT] = sAnims_Jellicent, - [SPECIES_ALOMOMOLA] = sAnims_Alomomola, - [SPECIES_JOLTIK] = sAnims_Joltik, - [SPECIES_GALVANTULA] = sAnims_Galvantula, - [SPECIES_FERROSEED] = sAnims_Ferroseed, - [SPECIES_FERROTHORN] = sAnims_Ferrothorn, - [SPECIES_KLINK] = sAnims_Klink, - [SPECIES_KLANG] = sAnims_Klang, - [SPECIES_KLINKLANG] = sAnims_Klinklang, - [SPECIES_TYNAMO] = sAnims_Tynamo, - [SPECIES_EELEKTRIK] = sAnims_Eelektrik, - [SPECIES_EELEKTROSS] = sAnims_Eelektross, - [SPECIES_ELGYEM] = sAnims_Elgyem, - [SPECIES_BEHEEYEM] = sAnims_Beheeyem, - [SPECIES_LITWICK] = sAnims_Litwick, - [SPECIES_LAMPENT] = sAnims_Lampent, - [SPECIES_CHANDELURE] = sAnims_Chandelure, - [SPECIES_AXEW] = sAnims_Axew, - [SPECIES_FRAXURE] = sAnims_Fraxure, - [SPECIES_HAXORUS] = sAnims_Haxorus, - [SPECIES_CUBCHOO] = sAnims_Cubchoo, - [SPECIES_BEARTIC] = sAnims_Beartic, - [SPECIES_CRYOGONAL] = sAnims_Cryogonal, - [SPECIES_SHELMET] = sAnims_Shelmet, - [SPECIES_ACCELGOR] = sAnims_Accelgor, - [SPECIES_STUNFISK] = sAnims_Stunfisk, - [SPECIES_MIENFOO] = sAnims_Mienfoo, - [SPECIES_MIENSHAO] = sAnims_Mienshao, - [SPECIES_DRUDDIGON] = sAnims_Druddigon, - [SPECIES_GOLETT] = sAnims_Golett, - [SPECIES_GOLURK] = sAnims_Golurk, - [SPECIES_PAWNIARD] = sAnims_Pawniard, - [SPECIES_BISHARP] = sAnims_Bisharp, - [SPECIES_BOUFFALANT] = sAnims_Bouffalant, - [SPECIES_RUFFLET] = sAnims_Rufflet, - [SPECIES_BRAVIARY] = sAnims_Braviary, - [SPECIES_VULLABY] = sAnims_Vullaby, - [SPECIES_MANDIBUZZ] = sAnims_Mandibuzz, - [SPECIES_HEATMOR] = sAnims_Heatmor, - [SPECIES_DURANT] = sAnims_Durant, - [SPECIES_DEINO] = sAnims_Deino, - [SPECIES_ZWEILOUS] = sAnims_Zweilous, - [SPECIES_HYDREIGON] = sAnims_Hydreigon, - [SPECIES_LARVESTA] = sAnims_Larvesta, - [SPECIES_VOLCARONA] = sAnims_Volcarona, - [SPECIES_COBALION] = sAnims_Cobalion, - [SPECIES_TERRAKION] = sAnims_Terrakion, - [SPECIES_VIRIZION] = sAnims_Virizion, - [SPECIES_TORNADUS] = sAnims_Tornadus, - [SPECIES_THUNDURUS] = sAnims_Thundurus, - [SPECIES_RESHIRAM] = sAnims_Reshiram, - [SPECIES_ZEKROM] = sAnims_Zekrom, - [SPECIES_LANDORUS] = sAnims_Landorus, - [SPECIES_KYUREM] = sAnims_Kyurem, - [SPECIES_KELDEO] = sAnims_Keldeo, - [SPECIES_MELOETTA] = sAnims_Meloetta, - [SPECIES_GENESECT] = sAnims_Genesect, + [SPECIES_VICTINI] = sAnims_Victini, + [SPECIES_SNIVY] = sAnims_Snivy, + [SPECIES_SERVINE] = sAnims_Servine, + [SPECIES_SERPERIOR] = sAnims_Serperior, + [SPECIES_TEPIG] = sAnims_Tepig, + [SPECIES_PIGNITE] = sAnims_Pignite, + [SPECIES_EMBOAR] = sAnims_Emboar, + [SPECIES_OSHAWOTT] = sAnims_Oshawott, + [SPECIES_DEWOTT] = sAnims_Dewott, + [SPECIES_SAMUROTT] = sAnims_Samurott, + [SPECIES_PATRAT] = sAnims_Patrat, + [SPECIES_WATCHOG] = sAnims_Watchog, + [SPECIES_LILLIPUP] = sAnims_Lillipup, + [SPECIES_HERDIER] = sAnims_Herdier, + [SPECIES_STOUTLAND] = sAnims_Stoutland, + [SPECIES_PURRLOIN] = sAnims_Purrloin, + [SPECIES_LIEPARD] = sAnims_Liepard, + [SPECIES_PANSAGE] = sAnims_Pansage, + [SPECIES_SIMISAGE] = sAnims_Simisage, + [SPECIES_PANSEAR] = sAnims_Pansear, + [SPECIES_SIMISEAR] = sAnims_Simisear, + [SPECIES_PANPOUR] = sAnims_Panpour, + [SPECIES_SIMIPOUR] = sAnims_Simipour, + [SPECIES_MUNNA] = sAnims_Munna, + [SPECIES_MUSHARNA] = sAnims_Musharna, + [SPECIES_PIDOVE] = sAnims_Pidove, + [SPECIES_TRANQUILL] = sAnims_Tranquill, + [SPECIES_UNFEZANT] = sAnims_Unfezant, + [SPECIES_BLITZLE] = sAnims_Blitzle, + [SPECIES_ZEBSTRIKA] = sAnims_Zebstrika, + [SPECIES_ROGGENROLA] = sAnims_Roggenrola, + [SPECIES_BOLDORE] = sAnims_Boldore, + [SPECIES_GIGALITH] = sAnims_Gigalith, + [SPECIES_WOOBAT] = sAnims_Woobat, + [SPECIES_SWOOBAT] = sAnims_Swoobat, + [SPECIES_DRILBUR] = sAnims_Drilbur, + [SPECIES_EXCADRILL] = sAnims_Excadrill, + [SPECIES_AUDINO] = sAnims_Audino, + [SPECIES_TIMBURR] = sAnims_Timburr, + [SPECIES_GURDURR] = sAnims_Gurdurr, + [SPECIES_CONKELDURR] = sAnims_Conkeldurr, + [SPECIES_TYMPOLE] = sAnims_Tympole, + [SPECIES_PALPITOAD] = sAnims_Palpitoad, + [SPECIES_SEISMITOAD] = sAnims_Seismitoad, + [SPECIES_THROH] = sAnims_Throh, + [SPECIES_SAWK] = sAnims_Sawk, + [SPECIES_SEWADDLE] = sAnims_Sewaddle, + [SPECIES_SWADLOON] = sAnims_Swadloon, + [SPECIES_LEAVANNY] = sAnims_Leavanny, + [SPECIES_VENIPEDE] = sAnims_Venipede, + [SPECIES_WHIRLIPEDE] = sAnims_Whirlipede, + [SPECIES_SCOLIPEDE] = sAnims_Scolipede, + [SPECIES_COTTONEE] = sAnims_Cottonee, + [SPECIES_WHIMSICOTT] = sAnims_Whimsicott, + [SPECIES_PETILIL] = sAnims_Petilil, + [SPECIES_LILLIGANT] = sAnims_Lilligant, + [SPECIES_BASCULIN_RED_STRIPED] = sAnims_Basculin, + [SPECIES_SANDILE] = sAnims_Sandile, + [SPECIES_KROKOROK] = sAnims_Krokorok, + [SPECIES_KROOKODILE] = sAnims_Krookodile, + [SPECIES_DARUMAKA] = sAnims_Darumaka, + [SPECIES_DARMANITAN_STANDARD_MODE] = sAnims_DarmanitanStandardMode, + [SPECIES_MARACTUS] = sAnims_Maractus, + [SPECIES_DWEBBLE] = sAnims_Dwebble, + [SPECIES_CRUSTLE] = sAnims_Crustle, + [SPECIES_SCRAGGY] = sAnims_Scraggy, + [SPECIES_SCRAFTY] = sAnims_Scrafty, + [SPECIES_SIGILYPH] = sAnims_Sigilyph, + [SPECIES_YAMASK] = sAnims_Yamask, + [SPECIES_COFAGRIGUS] = sAnims_Cofagrigus, + [SPECIES_TIRTOUGA] = sAnims_Tirtouga, + [SPECIES_CARRACOSTA] = sAnims_Carracosta, + [SPECIES_ARCHEN] = sAnims_Archen, + [SPECIES_ARCHEOPS] = sAnims_Archeops, + [SPECIES_TRUBBISH] = sAnims_Trubbish, + [SPECIES_GARBODOR] = sAnims_Garbodor, + [SPECIES_ZORUA] = sAnims_Zorua, + [SPECIES_ZOROARK] = sAnims_Zoroark, + [SPECIES_MINCCINO] = sAnims_Minccino, + [SPECIES_CINCCINO] = sAnims_Cinccino, + [SPECIES_GOTHITA] = sAnims_Gothita, + [SPECIES_GOTHORITA] = sAnims_Gothorita, + [SPECIES_GOTHITELLE] = sAnims_Gothitelle, + [SPECIES_SOLOSIS] = sAnims_Solosis, + [SPECIES_DUOSION] = sAnims_Duosion, + [SPECIES_REUNICLUS] = sAnims_Reuniclus, + [SPECIES_DUCKLETT] = sAnims_Ducklett, + [SPECIES_SWANNA] = sAnims_Swanna, + [SPECIES_VANILLITE] = sAnims_Vanillite, + [SPECIES_VANILLISH] = sAnims_Vanillish, + [SPECIES_VANILLUXE] = sAnims_Vanilluxe, + [SPECIES_DEERLING_SPRING] = sAnims_Deerling, + [SPECIES_SAWSBUCK_SPRING] = sAnims_Sawsbuck, + [SPECIES_EMOLGA] = sAnims_Emolga, + [SPECIES_KARRABLAST] = sAnims_Karrablast, + [SPECIES_ESCAVALIER] = sAnims_Escavalier, + [SPECIES_FOONGUS] = sAnims_Foongus, + [SPECIES_AMOONGUSS] = sAnims_Amoonguss, + [SPECIES_FRILLISH] = sAnims_Frillish, + [SPECIES_JELLICENT] = sAnims_Jellicent, + [SPECIES_ALOMOMOLA] = sAnims_Alomomola, + [SPECIES_JOLTIK] = sAnims_Joltik, + [SPECIES_GALVANTULA] = sAnims_Galvantula, + [SPECIES_FERROSEED] = sAnims_Ferroseed, + [SPECIES_FERROTHORN] = sAnims_Ferrothorn, + [SPECIES_KLINK] = sAnims_Klink, + [SPECIES_KLANG] = sAnims_Klang, + [SPECIES_KLINKLANG] = sAnims_Klinklang, + [SPECIES_TYNAMO] = sAnims_Tynamo, + [SPECIES_EELEKTRIK] = sAnims_Eelektrik, + [SPECIES_EELEKTROSS] = sAnims_Eelektross, + [SPECIES_ELGYEM] = sAnims_Elgyem, + [SPECIES_BEHEEYEM] = sAnims_Beheeyem, + [SPECIES_LITWICK] = sAnims_Litwick, + [SPECIES_LAMPENT] = sAnims_Lampent, + [SPECIES_CHANDELURE] = sAnims_Chandelure, + [SPECIES_AXEW] = sAnims_Axew, + [SPECIES_FRAXURE] = sAnims_Fraxure, + [SPECIES_HAXORUS] = sAnims_Haxorus, + [SPECIES_CUBCHOO] = sAnims_Cubchoo, + [SPECIES_BEARTIC] = sAnims_Beartic, + [SPECIES_CRYOGONAL] = sAnims_Cryogonal, + [SPECIES_SHELMET] = sAnims_Shelmet, + [SPECIES_ACCELGOR] = sAnims_Accelgor, + [SPECIES_STUNFISK] = sAnims_Stunfisk, + [SPECIES_MIENFOO] = sAnims_Mienfoo, + [SPECIES_MIENSHAO] = sAnims_Mienshao, + [SPECIES_DRUDDIGON] = sAnims_Druddigon, + [SPECIES_GOLETT] = sAnims_Golett, + [SPECIES_GOLURK] = sAnims_Golurk, + [SPECIES_PAWNIARD] = sAnims_Pawniard, + [SPECIES_BISHARP] = sAnims_Bisharp, + [SPECIES_BOUFFALANT] = sAnims_Bouffalant, + [SPECIES_RUFFLET] = sAnims_Rufflet, + [SPECIES_BRAVIARY] = sAnims_Braviary, + [SPECIES_VULLABY] = sAnims_Vullaby, + [SPECIES_MANDIBUZZ] = sAnims_Mandibuzz, + [SPECIES_HEATMOR] = sAnims_Heatmor, + [SPECIES_DURANT] = sAnims_Durant, + [SPECIES_DEINO] = sAnims_Deino, + [SPECIES_ZWEILOUS] = sAnims_Zweilous, + [SPECIES_HYDREIGON] = sAnims_Hydreigon, + [SPECIES_LARVESTA] = sAnims_Larvesta, + [SPECIES_VOLCARONA] = sAnims_Volcarona, + [SPECIES_COBALION] = sAnims_Cobalion, + [SPECIES_TERRAKION] = sAnims_Terrakion, + [SPECIES_VIRIZION] = sAnims_Virizion, + [SPECIES_TORNADUS_INCARNATE] = sAnims_TornadusIncarnate, + [SPECIES_THUNDURUS_INCARNATE] = sAnims_ThundurusIncarnate, + [SPECIES_RESHIRAM] = sAnims_Reshiram, + [SPECIES_ZEKROM] = sAnims_Zekrom, + [SPECIES_LANDORUS_INCARNATE] = sAnims_LandorusIncarnate, + [SPECIES_KYUREM] = sAnims_Kyurem, + [SPECIES_KELDEO_ORDINARY] = sAnims_KeldeoOrdinary, + [SPECIES_MELOETTA_ARIA] = sAnims_MeloettaAria, + [SPECIES_GENESECT] = sAnims_Genesect, #endif #if P_GEN_6_POKEMON == TRUE - [SPECIES_CHESPIN] = sAnims_Chespin, - [SPECIES_QUILLADIN] = sAnims_Quilladin, - [SPECIES_CHESNAUGHT] = sAnims_Chesnaught, - [SPECIES_FENNEKIN] = sAnims_Fennekin, - [SPECIES_BRAIXEN] = sAnims_Braixen, - [SPECIES_DELPHOX] = sAnims_Delphox, - [SPECIES_FROAKIE] = sAnims_Froakie, - [SPECIES_FROGADIER] = sAnims_Frogadier, - [SPECIES_GRENINJA] = sAnims_Greninja, - [SPECIES_BUNNELBY] = sAnims_Bunnelby, - [SPECIES_DIGGERSBY] = sAnims_Diggersby, - [SPECIES_FLETCHLING] = sAnims_Fletchling, - [SPECIES_FLETCHINDER] = sAnims_Fletchinder, - [SPECIES_TALONFLAME] = sAnims_Talonflame, - [SPECIES_SCATTERBUG] = sAnims_Scatterbug, - [SPECIES_SPEWPA] = sAnims_Spewpa, - [SPECIES_VIVILLON] = sAnims_Vivillon, - [SPECIES_LITLEO] = sAnims_Litleo, - [SPECIES_PYROAR] = sAnims_Pyroar, - [SPECIES_FLABEBE] = sAnims_Flabebe, - [SPECIES_FLOETTE] = sAnims_Floette, - [SPECIES_FLORGES] = sAnims_Florges, - [SPECIES_SKIDDO] = sAnims_Skiddo, - [SPECIES_GOGOAT] = sAnims_Gogoat, - [SPECIES_PANCHAM] = sAnims_Pancham, - [SPECIES_PANGORO] = sAnims_Pangoro, - [SPECIES_FURFROU] = sAnims_Furfrou, - [SPECIES_ESPURR] = sAnims_Espurr, - [SPECIES_MEOWSTIC] = sAnims_Meowstic, - [SPECIES_HONEDGE] = sAnims_Honedge, - [SPECIES_DOUBLADE] = sAnims_Doublade, - [SPECIES_AEGISLASH] = sAnims_Aegislash, - [SPECIES_SPRITZEE] = sAnims_Spritzee, - [SPECIES_AROMATISSE] = sAnims_Aromatisse, - [SPECIES_SWIRLIX] = sAnims_Swirlix, - [SPECIES_SLURPUFF] = sAnims_Slurpuff, - [SPECIES_INKAY] = sAnims_Inkay, - [SPECIES_MALAMAR] = sAnims_Malamar, - [SPECIES_BINACLE] = sAnims_Binacle, - [SPECIES_BARBARACLE] = sAnims_Barbaracle, - [SPECIES_SKRELP] = sAnims_Skrelp, - [SPECIES_DRAGALGE] = sAnims_Dragalge, - [SPECIES_CLAUNCHER] = sAnims_Clauncher, - [SPECIES_CLAWITZER] = sAnims_Clawitzer, - [SPECIES_HELIOPTILE] = sAnims_Helioptile, - [SPECIES_HELIOLISK] = sAnims_Heliolisk, - [SPECIES_TYRUNT] = sAnims_Tyrunt, - [SPECIES_TYRANTRUM] = sAnims_Tyrantrum, - [SPECIES_AMAURA] = sAnims_Amaura, - [SPECIES_AURORUS] = sAnims_Aurorus, - [SPECIES_SYLVEON] = sAnims_Sylveon, - [SPECIES_HAWLUCHA] = sAnims_Hawlucha, - [SPECIES_DEDENNE] = sAnims_Dedenne, - [SPECIES_CARBINK] = sAnims_Carbink, - [SPECIES_GOOMY] = sAnims_Goomy, - [SPECIES_SLIGGOO] = sAnims_Sliggoo, - [SPECIES_GOODRA] = sAnims_Goodra, - [SPECIES_KLEFKI] = sAnims_Klefki, - [SPECIES_PHANTUMP] = sAnims_Phantump, - [SPECIES_TREVENANT] = sAnims_Trevenant, - [SPECIES_PUMPKABOO] = sAnims_Pumpkaboo, - [SPECIES_GOURGEIST] = sAnims_Gourgeist, - [SPECIES_BERGMITE] = sAnims_Bergmite, - [SPECIES_AVALUGG] = sAnims_Avalugg, - [SPECIES_NOIBAT] = sAnims_Noibat, - [SPECIES_NOIVERN] = sAnims_Noivern, - [SPECIES_XERNEAS] = sAnims_Xerneas, - [SPECIES_YVELTAL] = sAnims_Yveltal, - [SPECIES_ZYGARDE] = sAnims_Zygarde, - [SPECIES_DIANCIE] = sAnims_Diancie, - [SPECIES_HOOPA] = sAnims_Hoopa, - [SPECIES_VOLCANION] = sAnims_Volcanion, + [SPECIES_CHESPIN] = sAnims_Chespin, + [SPECIES_QUILLADIN] = sAnims_Quilladin, + [SPECIES_CHESNAUGHT] = sAnims_Chesnaught, + [SPECIES_FENNEKIN] = sAnims_Fennekin, + [SPECIES_BRAIXEN] = sAnims_Braixen, + [SPECIES_DELPHOX] = sAnims_Delphox, + [SPECIES_FROAKIE] = sAnims_Froakie, + [SPECIES_FROGADIER] = sAnims_Frogadier, + [SPECIES_GRENINJA] = sAnims_Greninja, + [SPECIES_BUNNELBY] = sAnims_Bunnelby, + [SPECIES_DIGGERSBY] = sAnims_Diggersby, + [SPECIES_FLETCHLING] = sAnims_Fletchling, + [SPECIES_FLETCHINDER] = sAnims_Fletchinder, + [SPECIES_TALONFLAME] = sAnims_Talonflame, + [SPECIES_SCATTERBUG] = sAnims_Scatterbug, + [SPECIES_SPEWPA] = sAnims_Spewpa, + [SPECIES_VIVILLON_ICY_SNOW] = sAnims_Vivillon, + [SPECIES_LITLEO] = sAnims_Litleo, + [SPECIES_PYROAR] = sAnims_Pyroar, + [SPECIES_FLABEBE_RED_FLOWER] = sAnims_Flabebe, + [SPECIES_FLOETTE_RED_FLOWER] = sAnims_Floette, + [SPECIES_FLORGES_RED_FLOWER] = sAnims_Florges, + [SPECIES_SKIDDO] = sAnims_Skiddo, + [SPECIES_GOGOAT] = sAnims_Gogoat, + [SPECIES_PANCHAM] = sAnims_Pancham, + [SPECIES_PANGORO] = sAnims_Pangoro, + [SPECIES_FURFROU_NATURAL] = sAnims_Furfrou, + [SPECIES_ESPURR] = sAnims_Espurr, + [SPECIES_MEOWSTIC_MALE] = sAnims_Meowstic, + [SPECIES_HONEDGE] = sAnims_Honedge, + [SPECIES_DOUBLADE] = sAnims_Doublade, + [SPECIES_AEGISLASH_SHIELD] = sAnims_AegislashShield, + [SPECIES_SPRITZEE] = sAnims_Spritzee, + [SPECIES_AROMATISSE] = sAnims_Aromatisse, + [SPECIES_SWIRLIX] = sAnims_Swirlix, + [SPECIES_SLURPUFF] = sAnims_Slurpuff, + [SPECIES_INKAY] = sAnims_Inkay, + [SPECIES_MALAMAR] = sAnims_Malamar, + [SPECIES_BINACLE] = sAnims_Binacle, + [SPECIES_BARBARACLE] = sAnims_Barbaracle, + [SPECIES_SKRELP] = sAnims_Skrelp, + [SPECIES_DRAGALGE] = sAnims_Dragalge, + [SPECIES_CLAUNCHER] = sAnims_Clauncher, + [SPECIES_CLAWITZER] = sAnims_Clawitzer, + [SPECIES_HELIOPTILE] = sAnims_Helioptile, + [SPECIES_HELIOLISK] = sAnims_Heliolisk, + [SPECIES_TYRUNT] = sAnims_Tyrunt, + [SPECIES_TYRANTRUM] = sAnims_Tyrantrum, + [SPECIES_AMAURA] = sAnims_Amaura, + [SPECIES_AURORUS] = sAnims_Aurorus, + [SPECIES_SYLVEON] = sAnims_Sylveon, + [SPECIES_HAWLUCHA] = sAnims_Hawlucha, + [SPECIES_DEDENNE] = sAnims_Dedenne, + [SPECIES_CARBINK] = sAnims_Carbink, + [SPECIES_GOOMY] = sAnims_Goomy, + [SPECIES_SLIGGOO] = sAnims_Sliggoo, + [SPECIES_GOODRA] = sAnims_Goodra, + [SPECIES_KLEFKI] = sAnims_Klefki, + [SPECIES_PHANTUMP] = sAnims_Phantump, + [SPECIES_TREVENANT] = sAnims_Trevenant, + [SPECIES_PUMPKABOO_AVERAGE] = sAnims_Pumpkaboo, + [SPECIES_GOURGEIST_AVERAGE] = sAnims_Gourgeist, + [SPECIES_BERGMITE] = sAnims_Bergmite, + [SPECIES_AVALUGG] = sAnims_Avalugg, + [SPECIES_NOIBAT] = sAnims_Noibat, + [SPECIES_NOIVERN] = sAnims_Noivern, + [SPECIES_XERNEAS_NEUTRAL] = sAnims_Xerneas, + [SPECIES_YVELTAL] = sAnims_Yveltal, + [SPECIES_ZYGARDE_50_AURA_BREAK] = sAnims_Zygarde50, + [SPECIES_DIANCIE] = sAnims_Diancie, + [SPECIES_HOOPA_CONFINED] = sAnims_Hoopa, + [SPECIES_VOLCANION] = sAnims_Volcanion, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_ROWLET] = sAnims_Rowlet, - [SPECIES_DARTRIX] = sAnims_Dartrix, - [SPECIES_DECIDUEYE] = sAnims_Decidueye, - [SPECIES_LITTEN] = sAnims_Litten, - [SPECIES_TORRACAT] = sAnims_Torracat, - [SPECIES_INCINEROAR] = sAnims_Incineroar, - [SPECIES_POPPLIO] = sAnims_Popplio, - [SPECIES_BRIONNE] = sAnims_Brionne, - [SPECIES_PRIMARINA] = sAnims_Primarina, - [SPECIES_PIKIPEK] = sAnims_Pikipek, - [SPECIES_TRUMBEAK] = sAnims_Trumbeak, - [SPECIES_TOUCANNON] = sAnims_Toucannon, - [SPECIES_YUNGOOS] = sAnims_Yungoos, - [SPECIES_GUMSHOOS] = sAnims_Gumshoos, - [SPECIES_GRUBBIN] = sAnims_Grubbin, - [SPECIES_CHARJABUG] = sAnims_Charjabug, - [SPECIES_VIKAVOLT] = sAnims_Vikavolt, - [SPECIES_CRABRAWLER] = sAnims_Crabrawler, - [SPECIES_CRABOMINABLE] = sAnims_Crabominable, - [SPECIES_ORICORIO] = sAnims_Oricorio, - [SPECIES_CUTIEFLY] = sAnims_Cutiefly, - [SPECIES_RIBOMBEE] = sAnims_Ribombee, - [SPECIES_ROCKRUFF] = sAnims_Rockruff, - [SPECIES_LYCANROC] = sAnims_Lycanroc, - [SPECIES_WISHIWASHI] = sAnims_Wishiwashi, - [SPECIES_MAREANIE] = sAnims_Mareanie, - [SPECIES_TOXAPEX] = sAnims_Toxapex, - [SPECIES_MUDBRAY] = sAnims_Mudbray, - [SPECIES_MUDSDALE] = sAnims_Mudsdale, - [SPECIES_DEWPIDER] = sAnims_Dewpider, - [SPECIES_ARAQUANID] = sAnims_Araquanid, - [SPECIES_FOMANTIS] = sAnims_Fomantis, - [SPECIES_LURANTIS] = sAnims_Lurantis, - [SPECIES_MORELULL] = sAnims_Morelull, - [SPECIES_SHIINOTIC] = sAnims_Shiinotic, - [SPECIES_SALANDIT] = sAnims_Salandit, - [SPECIES_SALAZZLE] = sAnims_Salazzle, - [SPECIES_STUFFUL] = sAnims_Stufful, - [SPECIES_BEWEAR] = sAnims_Bewear, - [SPECIES_BOUNSWEET] = sAnims_Bounsweet, - [SPECIES_STEENEE] = sAnims_Steenee, - [SPECIES_TSAREENA] = sAnims_Tsareena, - [SPECIES_COMFEY] = sAnims_Comfey, - [SPECIES_ORANGURU] = sAnims_Oranguru, - [SPECIES_PASSIMIAN] = sAnims_Passimian, - [SPECIES_WIMPOD] = sAnims_Wimpod, - [SPECIES_GOLISOPOD] = sAnims_Golisopod, - [SPECIES_SANDYGAST] = sAnims_Sandygast, - [SPECIES_PALOSSAND] = sAnims_Palossand, - [SPECIES_PYUKUMUKU] = sAnims_Pyukumuku, - [SPECIES_TYPE_NULL] = sAnims_TypeNull, - [SPECIES_SILVALLY] = sAnims_Silvally, - [SPECIES_MINIOR] = sAnims_Minior, - [SPECIES_KOMALA] = sAnims_Komala, - [SPECIES_TURTONATOR] = sAnims_Turtonator, - [SPECIES_TOGEDEMARU] = sAnims_Togedemaru, - [SPECIES_MIMIKYU] = sAnims_Mimikyu, - [SPECIES_BRUXISH] = sAnims_Bruxish, - [SPECIES_DRAMPA] = sAnims_Drampa, - [SPECIES_DHELMISE] = sAnims_Dhelmise, - [SPECIES_JANGMO_O] = sAnims_JANGMO_O, - [SPECIES_HAKAMO_O] = sAnims_HAKAMO_O, - [SPECIES_KOMMO_O] = sAnims_KOMMO_O, - [SPECIES_TAPU_KOKO] = sAnims_TapuKoko, - [SPECIES_TAPU_LELE] = sAnims_TapuLele, - [SPECIES_TAPU_BULU] = sAnims_TapuBulu, - [SPECIES_TAPU_FINI] = sAnims_TapuFini, - [SPECIES_COSMOG] = sAnims_Cosmog, - [SPECIES_COSMOEM] = sAnims_Cosmoem, - [SPECIES_SOLGALEO] = sAnims_Solgaleo, - [SPECIES_LUNALA] = sAnims_Lunala, - [SPECIES_NIHILEGO] = sAnims_Nihilego, - [SPECIES_BUZZWOLE] = sAnims_Buzzwole, - [SPECIES_PHEROMOSA] = sAnims_Pheromosa, - [SPECIES_XURKITREE] = sAnims_Xurkitree, - [SPECIES_CELESTEELA] = sAnims_Celesteela, - [SPECIES_KARTANA] = sAnims_Kartana, - [SPECIES_GUZZLORD] = sAnims_Guzzlord, - [SPECIES_NECROZMA] = sAnims_Necrozma, - [SPECIES_MAGEARNA] = sAnims_Magearna, - [SPECIES_MARSHADOW] = sAnims_Marshadow, - [SPECIES_POIPOLE] = sAnims_Poipole, - [SPECIES_NAGANADEL] = sAnims_Naganadel, - [SPECIES_STAKATAKA] = sAnims_Stakataka, - [SPECIES_BLACEPHALON] = sAnims_Blacephalon, - [SPECIES_ZERAORA] = sAnims_Zeraora, - [SPECIES_MELTAN] = sAnims_Meltan, - [SPECIES_MELMETAL] = sAnims_Melmetal, + [SPECIES_ROWLET] = sAnims_Rowlet, + [SPECIES_DARTRIX] = sAnims_Dartrix, + [SPECIES_DECIDUEYE] = sAnims_Decidueye, + [SPECIES_LITTEN] = sAnims_Litten, + [SPECIES_TORRACAT] = sAnims_Torracat, + [SPECIES_INCINEROAR] = sAnims_Incineroar, + [SPECIES_POPPLIO] = sAnims_Popplio, + [SPECIES_BRIONNE] = sAnims_Brionne, + [SPECIES_PRIMARINA] = sAnims_Primarina, + [SPECIES_PIKIPEK] = sAnims_Pikipek, + [SPECIES_TRUMBEAK] = sAnims_Trumbeak, + [SPECIES_TOUCANNON] = sAnims_Toucannon, + [SPECIES_YUNGOOS] = sAnims_Yungoos, + [SPECIES_GUMSHOOS] = sAnims_Gumshoos, + [SPECIES_GRUBBIN] = sAnims_Grubbin, + [SPECIES_CHARJABUG] = sAnims_Charjabug, + [SPECIES_VIKAVOLT] = sAnims_Vikavolt, + [SPECIES_CRABRAWLER] = sAnims_Crabrawler, + [SPECIES_CRABOMINABLE] = sAnims_Crabominable, + [SPECIES_ORICORIO_BAILE] = sAnims_Oricorio, + [SPECIES_CUTIEFLY] = sAnims_Cutiefly, + [SPECIES_RIBOMBEE] = sAnims_Ribombee, + [SPECIES_ROCKRUFF] = sAnims_Rockruff, + [SPECIES_LYCANROC_MIDDAY] = sAnims_LycanrocMidday, + [SPECIES_WISHIWASHI_SOLO] = sAnims_WishiwashiSolo, + [SPECIES_MAREANIE] = sAnims_Mareanie, + [SPECIES_TOXAPEX] = sAnims_Toxapex, + [SPECIES_MUDBRAY] = sAnims_Mudbray, + [SPECIES_MUDSDALE] = sAnims_Mudsdale, + [SPECIES_DEWPIDER] = sAnims_Dewpider, + [SPECIES_ARAQUANID] = sAnims_Araquanid, + [SPECIES_FOMANTIS] = sAnims_Fomantis, + [SPECIES_LURANTIS] = sAnims_Lurantis, + [SPECIES_MORELULL] = sAnims_Morelull, + [SPECIES_SHIINOTIC] = sAnims_Shiinotic, + [SPECIES_SALANDIT] = sAnims_Salandit, + [SPECIES_SALAZZLE] = sAnims_Salazzle, + [SPECIES_STUFFUL] = sAnims_Stufful, + [SPECIES_BEWEAR] = sAnims_Bewear, + [SPECIES_BOUNSWEET] = sAnims_Bounsweet, + [SPECIES_STEENEE] = sAnims_Steenee, + [SPECIES_TSAREENA] = sAnims_Tsareena, + [SPECIES_COMFEY] = sAnims_Comfey, + [SPECIES_ORANGURU] = sAnims_Oranguru, + [SPECIES_PASSIMIAN] = sAnims_Passimian, + [SPECIES_WIMPOD] = sAnims_Wimpod, + [SPECIES_GOLISOPOD] = sAnims_Golisopod, + [SPECIES_SANDYGAST] = sAnims_Sandygast, + [SPECIES_PALOSSAND] = sAnims_Palossand, + [SPECIES_PYUKUMUKU] = sAnims_Pyukumuku, + [SPECIES_TYPE_NULL] = sAnims_TypeNull, + [SPECIES_SILVALLY_NORMAL] = sAnims_Silvally, + [SPECIES_MINIOR_METEOR_RED] = sAnims_MiniorMeteor, + [SPECIES_KOMALA] = sAnims_Komala, + [SPECIES_TURTONATOR] = sAnims_Turtonator, + [SPECIES_TOGEDEMARU] = sAnims_Togedemaru, + [SPECIES_MIMIKYU_DISGUISED] = sAnims_MimikyuDisguised, + [SPECIES_BRUXISH] = sAnims_Bruxish, + [SPECIES_DRAMPA] = sAnims_Drampa, + [SPECIES_DHELMISE] = sAnims_Dhelmise, + [SPECIES_JANGMO_O] = sAnims_JANGMO_O, + [SPECIES_HAKAMO_O] = sAnims_HAKAMO_O, + [SPECIES_KOMMO_O] = sAnims_KOMMO_O, + [SPECIES_TAPU_KOKO] = sAnims_TapuKoko, + [SPECIES_TAPU_LELE] = sAnims_TapuLele, + [SPECIES_TAPU_BULU] = sAnims_TapuBulu, + [SPECIES_TAPU_FINI] = sAnims_TapuFini, + [SPECIES_COSMOG] = sAnims_Cosmog, + [SPECIES_COSMOEM] = sAnims_Cosmoem, + [SPECIES_SOLGALEO] = sAnims_Solgaleo, + [SPECIES_LUNALA] = sAnims_Lunala, + [SPECIES_NIHILEGO] = sAnims_Nihilego, + [SPECIES_BUZZWOLE] = sAnims_Buzzwole, + [SPECIES_PHEROMOSA] = sAnims_Pheromosa, + [SPECIES_XURKITREE] = sAnims_Xurkitree, + [SPECIES_CELESTEELA] = sAnims_Celesteela, + [SPECIES_KARTANA] = sAnims_Kartana, + [SPECIES_GUZZLORD] = sAnims_Guzzlord, + [SPECIES_NECROZMA] = sAnims_Necrozma, + [SPECIES_MAGEARNA] = sAnims_Magearna, + [SPECIES_MARSHADOW] = sAnims_Marshadow, + [SPECIES_POIPOLE] = sAnims_Poipole, + [SPECIES_NAGANADEL] = sAnims_Naganadel, + [SPECIES_STAKATAKA] = sAnims_Stakataka, + [SPECIES_BLACEPHALON] = sAnims_Blacephalon, + [SPECIES_ZERAORA] = sAnims_Zeraora, + [SPECIES_MELTAN] = sAnims_Meltan, + [SPECIES_MELMETAL] = sAnims_Melmetal, #endif #if P_GEN_8_POKEMON == TRUE - [SPECIES_GROOKEY] = sAnims_Grookey, - [SPECIES_THWACKEY] = sAnims_Thwackey, - [SPECIES_RILLABOOM] = sAnims_Rillaboom, - [SPECIES_SCORBUNNY] = sAnims_Scorbunny, - [SPECIES_RABOOT] = sAnims_Raboot, - [SPECIES_CINDERACE] = sAnims_Cinderace, - [SPECIES_SOBBLE] = sAnims_Sobble, - [SPECIES_DRIZZILE] = sAnims_Drizzile, - [SPECIES_INTELEON] = sAnims_Inteleon, - [SPECIES_SKWOVET] = sAnims_Skwovet, - [SPECIES_GREEDENT] = sAnims_Greedent, - [SPECIES_ROOKIDEE] = sAnims_Rookidee, - [SPECIES_CORVISQUIRE] = sAnims_Corvisquire, - [SPECIES_CORVIKNIGHT] = sAnims_Corviknight, - [SPECIES_BLIPBUG] = sAnims_Blipbug, - [SPECIES_DOTTLER] = sAnims_Dottler, - [SPECIES_ORBEETLE] = sAnims_Orbeetle, - [SPECIES_NICKIT] = sAnims_Nickit, - [SPECIES_THIEVUL] = sAnims_Thievul, - [SPECIES_GOSSIFLEUR] = sAnims_Gossifleur, - [SPECIES_ELDEGOSS] = sAnims_Eldegoss, - [SPECIES_WOOLOO] = sAnims_Wooloo, - [SPECIES_DUBWOOL] = sAnims_Dubwool, - [SPECIES_CHEWTLE] = sAnims_Chewtle, - [SPECIES_DREDNAW] = sAnims_Drednaw, - [SPECIES_YAMPER] = sAnims_Yamper, - [SPECIES_BOLTUND] = sAnims_Boltund, - [SPECIES_ROLYCOLY] = sAnims_Rolycoly, - [SPECIES_CARKOL] = sAnims_Carkol, - [SPECIES_COALOSSAL] = sAnims_Coalossal, - [SPECIES_APPLIN] = sAnims_Applin, - [SPECIES_FLAPPLE] = sAnims_Flapple, - [SPECIES_APPLETUN] = sAnims_Appletun, - [SPECIES_SILICOBRA] = sAnims_Silicobra, - [SPECIES_SANDACONDA] = sAnims_Sandaconda, - [SPECIES_CRAMORANT] = sAnims_Cramorant, - [SPECIES_ARROKUDA] = sAnims_Arrokuda, - [SPECIES_BARRASKEWDA] = sAnims_Barraskewda, - [SPECIES_TOXEL] = sAnims_Toxel, - [SPECIES_TOXTRICITY] = sAnims_Toxtricity, - [SPECIES_SIZZLIPEDE] = sAnims_Sizzlipede, - [SPECIES_CENTISKORCH] = sAnims_Centiskorch, - [SPECIES_CLOBBOPUS] = sAnims_Clobbopus, - [SPECIES_GRAPPLOCT] = sAnims_Grapploct, - [SPECIES_SINISTEA] = sAnims_Sinistea, - [SPECIES_POLTEAGEIST] = sAnims_Polteageist, - [SPECIES_HATENNA] = sAnims_Hatenna, - [SPECIES_HATTREM] = sAnims_Hattrem, - [SPECIES_HATTERENE] = sAnims_Hatterene, - [SPECIES_IMPIDIMP] = sAnims_Impidimp, - [SPECIES_MORGREM] = sAnims_Morgrem, - [SPECIES_GRIMMSNARL] = sAnims_Grimmsnarl, - [SPECIES_OBSTAGOON] = sAnims_Obstagoon, - [SPECIES_PERRSERKER] = sAnims_Perrserker, - [SPECIES_CURSOLA] = sAnims_Cursola, - [SPECIES_SIRFETCHD] = sAnims_Sirfetchd, - [SPECIES_MR_RIME] = sAnims_MrRime, - [SPECIES_RUNERIGUS] = sAnims_Runerigus, - [SPECIES_MILCERY] = sAnims_Milcery, - [SPECIES_ALCREMIE] = sAnims_Alcremie, - [SPECIES_FALINKS] = sAnims_Falinks, - [SPECIES_PINCURCHIN] = sAnims_Pincurchin, - [SPECIES_SNOM] = sAnims_Snom, - [SPECIES_FROSMOTH] = sAnims_Frosmoth, - [SPECIES_STONJOURNER] = sAnims_Stonjourner, - [SPECIES_EISCUE] = sAnims_Eiscue, - [SPECIES_INDEEDEE] = sAnims_Indeedee, - [SPECIES_MORPEKO] = sAnims_Morpeko, - [SPECIES_CUFANT] = sAnims_Cufant, - [SPECIES_COPPERAJAH] = sAnims_Copperajah, - [SPECIES_DRACOZOLT] = sAnims_Dracozolt, - [SPECIES_ARCTOZOLT] = sAnims_Arctozolt, - [SPECIES_DRACOVISH] = sAnims_Dracovish, - [SPECIES_ARCTOVISH] = sAnims_Arctovish, - [SPECIES_DURALUDON] = sAnims_Duraludon, - [SPECIES_DREEPY] = sAnims_Dreepy, - [SPECIES_DRAKLOAK] = sAnims_Drakloak, - [SPECIES_DRAGAPULT] = sAnims_Dragapult, - [SPECIES_ZACIAN] = sAnims_Zacian, - [SPECIES_ZAMAZENTA] = sAnims_Zamazenta, - [SPECIES_ETERNATUS] = sAnims_Eternatus, - [SPECIES_KUBFU] = sAnims_Kubfu, - [SPECIES_URSHIFU] = sAnims_Urshifu, - [SPECIES_ZARUDE] = sAnims_Zarude, - [SPECIES_REGIELEKI] = sAnims_Regieleki, - [SPECIES_REGIDRAGO] = sAnims_Regidrago, - [SPECIES_GLASTRIER] = sAnims_Glastrier, - [SPECIES_SPECTRIER] = sAnims_Spectrier, - [SPECIES_CALYREX] = sAnims_Calyrex, - [SPECIES_WYRDEER] = sAnims_Wyrdeer, - [SPECIES_KLEAVOR] = sAnims_Kleavor, - [SPECIES_URSALUNA] = sAnims_Ursaluna, - [SPECIES_BASCULEGION] = sAnims_Basculegion, - [SPECIES_SNEASLER] = sAnims_Sneasler, - [SPECIES_OVERQWIL] = sAnims_Overqwil, - [SPECIES_ENAMORUS] = sAnims_Enamorus, + [SPECIES_GROOKEY] = sAnims_Grookey, + [SPECIES_THWACKEY] = sAnims_Thwackey, + [SPECIES_RILLABOOM] = sAnims_Rillaboom, + [SPECIES_SCORBUNNY] = sAnims_Scorbunny, + [SPECIES_RABOOT] = sAnims_Raboot, + [SPECIES_CINDERACE] = sAnims_Cinderace, + [SPECIES_SOBBLE] = sAnims_Sobble, + [SPECIES_DRIZZILE] = sAnims_Drizzile, + [SPECIES_INTELEON] = sAnims_Inteleon, + [SPECIES_SKWOVET] = sAnims_Skwovet, + [SPECIES_GREEDENT] = sAnims_Greedent, + [SPECIES_ROOKIDEE] = sAnims_Rookidee, + [SPECIES_CORVISQUIRE] = sAnims_Corvisquire, + [SPECIES_CORVIKNIGHT] = sAnims_Corviknight, + [SPECIES_BLIPBUG] = sAnims_Blipbug, + [SPECIES_DOTTLER] = sAnims_Dottler, + [SPECIES_ORBEETLE] = sAnims_Orbeetle, + [SPECIES_NICKIT] = sAnims_Nickit, + [SPECIES_THIEVUL] = sAnims_Thievul, + [SPECIES_GOSSIFLEUR] = sAnims_Gossifleur, + [SPECIES_ELDEGOSS] = sAnims_Eldegoss, + [SPECIES_WOOLOO] = sAnims_Wooloo, + [SPECIES_DUBWOOL] = sAnims_Dubwool, + [SPECIES_CHEWTLE] = sAnims_Chewtle, + [SPECIES_DREDNAW] = sAnims_Drednaw, + [SPECIES_YAMPER] = sAnims_Yamper, + [SPECIES_BOLTUND] = sAnims_Boltund, + [SPECIES_ROLYCOLY] = sAnims_Rolycoly, + [SPECIES_CARKOL] = sAnims_Carkol, + [SPECIES_COALOSSAL] = sAnims_Coalossal, + [SPECIES_APPLIN] = sAnims_Applin, + [SPECIES_FLAPPLE] = sAnims_Flapple, + [SPECIES_APPLETUN] = sAnims_Appletun, + [SPECIES_SILICOBRA] = sAnims_Silicobra, + [SPECIES_SANDACONDA] = sAnims_Sandaconda, + [SPECIES_CRAMORANT] = sAnims_Cramorant, + [SPECIES_ARROKUDA] = sAnims_Arrokuda, + [SPECIES_BARRASKEWDA] = sAnims_Barraskewda, + [SPECIES_TOXEL] = sAnims_Toxel, + [SPECIES_TOXTRICITY_AMPED] = sAnims_Toxtricity, + [SPECIES_SIZZLIPEDE] = sAnims_Sizzlipede, + [SPECIES_CENTISKORCH] = sAnims_Centiskorch, + [SPECIES_CLOBBOPUS] = sAnims_Clobbopus, + [SPECIES_GRAPPLOCT] = sAnims_Grapploct, + [SPECIES_SINISTEA_PHONY] = sAnims_Sinistea, + [SPECIES_POLTEAGEIST_PHONY] = sAnims_Polteageist, + [SPECIES_HATENNA] = sAnims_Hatenna, + [SPECIES_HATTREM] = sAnims_Hattrem, + [SPECIES_HATTERENE] = sAnims_Hatterene, + [SPECIES_IMPIDIMP] = sAnims_Impidimp, + [SPECIES_MORGREM] = sAnims_Morgrem, + [SPECIES_GRIMMSNARL] = sAnims_Grimmsnarl, + [SPECIES_OBSTAGOON] = sAnims_Obstagoon, + [SPECIES_PERRSERKER] = sAnims_Perrserker, + [SPECIES_CURSOLA] = sAnims_Cursola, + [SPECIES_SIRFETCHD] = sAnims_Sirfetchd, + [SPECIES_MR_RIME] = sAnims_MrRime, + [SPECIES_RUNERIGUS] = sAnims_Runerigus, + [SPECIES_MILCERY] = sAnims_Milcery, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_FALINKS] = sAnims_Falinks, + [SPECIES_PINCURCHIN] = sAnims_Pincurchin, + [SPECIES_SNOM] = sAnims_Snom, + [SPECIES_FROSMOTH] = sAnims_Frosmoth, + [SPECIES_STONJOURNER] = sAnims_Stonjourner, + [SPECIES_EISCUE_ICE_FACE] = sAnims_Eiscue, + [SPECIES_INDEEDEE_MALE] = sAnims_Indeedee, + [SPECIES_MORPEKO_FULL_BELLY] = sAnims_Morpeko, + [SPECIES_CUFANT] = sAnims_Cufant, + [SPECIES_COPPERAJAH] = sAnims_Copperajah, + [SPECIES_DRACOZOLT] = sAnims_Dracozolt, + [SPECIES_ARCTOZOLT] = sAnims_Arctozolt, + [SPECIES_DRACOVISH] = sAnims_Dracovish, + [SPECIES_ARCTOVISH] = sAnims_Arctovish, + [SPECIES_DURALUDON] = sAnims_Duraludon, + [SPECIES_DREEPY] = sAnims_Dreepy, + [SPECIES_DRAKLOAK] = sAnims_Drakloak, + [SPECIES_DRAGAPULT] = sAnims_Dragapult, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = sAnims_Zacian, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = sAnims_Zamazenta, + [SPECIES_ETERNATUS] = sAnims_Eternatus, + [SPECIES_KUBFU] = sAnims_Kubfu, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = sAnims_Urshifu, + [SPECIES_ZARUDE] = sAnims_Zarude, + [SPECIES_REGIELEKI] = sAnims_Regieleki, + [SPECIES_REGIDRAGO] = sAnims_Regidrago, + [SPECIES_GLASTRIER] = sAnims_Glastrier, + [SPECIES_SPECTRIER] = sAnims_Spectrier, + [SPECIES_CALYREX] = sAnims_Calyrex, + [SPECIES_WYRDEER] = sAnims_Wyrdeer, + [SPECIES_KLEAVOR] = sAnims_Kleavor, + [SPECIES_URSALUNA] = sAnims_Ursaluna, + [SPECIES_BASCULEGION_MALE] = sAnims_Basculegion, + [SPECIES_SNEASLER] = sAnims_Sneasler, + [SPECIES_OVERQWIL] = sAnims_Overqwil, + [SPECIES_ENAMORUS_INCARNATE] = sAnims_EnamorusIncarnate, #endif - [SPECIES_VENUSAUR_MEGA] = sAnims_VenusaurMega, - [SPECIES_CHARIZARD_MEGA_X] = sAnims_CHARIZARD_MEGA_X, - [SPECIES_CHARIZARD_MEGA_Y] = sAnims_CHARIZARD_MEGA_Y, - [SPECIES_BLASTOISE_MEGA] = sAnims_BlastoiseMega, - [SPECIES_BEEDRILL_MEGA] = sAnims_BeedrillMega, - [SPECIES_PIDGEOT_MEGA] = sAnims_PidgeotMega, - [SPECIES_ALAKAZAM_MEGA] = sAnims_AlakazamMega, - [SPECIES_SLOWBRO_MEGA] = sAnims_SlowbroMega, - [SPECIES_GENGAR_MEGA] = sAnims_GengarMega, - [SPECIES_KANGASKHAN_MEGA] = sAnims_KangaskhanMega, - [SPECIES_PINSIR_MEGA] = sAnims_PinsirMega, - [SPECIES_GYARADOS_MEGA] = sAnims_GyaradosMega, - [SPECIES_AERODACTYL_MEGA] = sAnims_AerodactylMega, - [SPECIES_MEWTWO_MEGA_X] = sAnims_MEWTWO_MEGA_X, - [SPECIES_MEWTWO_MEGA_Y] = sAnims_MEWTWO_MEGA_Y, - [SPECIES_AMPHAROS_MEGA] = sAnims_AmpharosMega, - [SPECIES_STEELIX_MEGA] = sAnims_SteelixMega, - [SPECIES_SCIZOR_MEGA] = sAnims_ScizorMega, - [SPECIES_HERACROSS_MEGA] = sAnims_HeracrossMega, - [SPECIES_HOUNDOOM_MEGA] = sAnims_HoundoomMega, - [SPECIES_TYRANITAR_MEGA] = sAnims_TyranitarMega, - [SPECIES_SCEPTILE_MEGA] = sAnims_SceptileMega, - [SPECIES_BLAZIKEN_MEGA] = sAnims_BlazikenMega, - [SPECIES_SWAMPERT_MEGA] = sAnims_SwampertMega, - [SPECIES_GARDEVOIR_MEGA] = sAnims_GardevoirMega, - [SPECIES_SABLEYE_MEGA] = sAnims_SableyeMega, - [SPECIES_MAWILE_MEGA] = sAnims_MawileMega, - [SPECIES_AGGRON_MEGA] = sAnims_AggronMega, - [SPECIES_MEDICHAM_MEGA] = sAnims_MedichamMega, - [SPECIES_MANECTRIC_MEGA] = sAnims_ManectricMega, - [SPECIES_SHARPEDO_MEGA] = sAnims_SharpedoMega, - [SPECIES_CAMERUPT_MEGA] = sAnims_CameruptMega, - [SPECIES_ALTARIA_MEGA] = sAnims_AltariaMega, - [SPECIES_BANETTE_MEGA] = sAnims_BanetteMega, - [SPECIES_ABSOL_MEGA] = sAnims_AbsolMega, - [SPECIES_GLALIE_MEGA] = sAnims_GlalieMega, - [SPECIES_SALAMENCE_MEGA] = sAnims_SalamenceMega, - [SPECIES_METAGROSS_MEGA] = sAnims_MetagrossMega, - [SPECIES_LATIAS_MEGA] = sAnims_LatiasMega, - [SPECIES_LATIOS_MEGA] = sAnims_LatiosMega, +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = sAnims_Sprigatito, + [SPECIES_FLORAGATO] = sAnims_Floragato, + [SPECIES_MEOWSCARADA] = sAnims_Meowscarada, + [SPECIES_FUECOCO] = sAnims_Fuecoco, + [SPECIES_CROCALOR] = sAnims_Crocalor, + [SPECIES_SKELEDIRGE] = sAnims_Skeledirge, + [SPECIES_QUAXLY] = sAnims_Quaxly, + [SPECIES_QUAXWELL] = sAnims_Quaxwell, + [SPECIES_QUAQUAVAL] = sAnims_Quaquaval, + [SPECIES_LECHONK] = sAnims_Lechonk, + [SPECIES_OINKOLOGNE_MALE] = sAnims_Oinkologne, + [SPECIES_OINKOLOGNE_FEMALE] = sAnims_Oinkologne, + [SPECIES_TAROUNTULA] = sAnims_Tarountula, + [SPECIES_SPIDOPS] = sAnims_Spidops, + [SPECIES_NYMBLE] = sAnims_Nymble, + [SPECIES_LOKIX] = sAnims_Lokix, + [SPECIES_PAWMI] = sAnims_Pawmi, + [SPECIES_PAWMO] = sAnims_Pawmo, + [SPECIES_PAWMOT] = sAnims_Pawmot, + [SPECIES_TANDEMAUS] = sAnims_Tandemaus, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = sAnims_Maushold, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = sAnims_Maushold, + [SPECIES_FIDOUGH] = sAnims_Fidough, + [SPECIES_DACHSBUN] = sAnims_Dachsbun, + [SPECIES_SMOLIV] = sAnims_Smoliv, + [SPECIES_DOLLIV] = sAnims_Dolliv, + [SPECIES_ARBOLIVA] = sAnims_Arboliva, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = sAnims_Squawkabilly, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = sAnims_Squawkabilly, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = sAnims_Squawkabilly, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = sAnims_Squawkabilly, + [SPECIES_NACLI] = sAnims_Nacli, + [SPECIES_NACLSTACK] = sAnims_Naclstack, + [SPECIES_GARGANACL] = sAnims_Garganacl, + [SPECIES_CHARCADET] = sAnims_Charcadet, + [SPECIES_ARMAROUGE] = sAnims_Armarouge, + [SPECIES_CERULEDGE] = sAnims_Ceruledge, + [SPECIES_TADBULB] = sAnims_Tadbulb, + [SPECIES_BELLIBOLT] = sAnims_Bellibolt, + [SPECIES_WATTREL] = sAnims_Wattrel, + [SPECIES_KILOWATTREL] = sAnims_Kilowattrel, + [SPECIES_MASCHIFF] = sAnims_Maschiff, + [SPECIES_MABOSSTIFF] = sAnims_Mabosstiff, + [SPECIES_SHROODLE] = sAnims_Shroodle, + [SPECIES_GRAFAIAI] = sAnims_Grafaiai, + [SPECIES_BRAMBLIN] = sAnims_Bramblin, + [SPECIES_BRAMBLEGHAST] = sAnims_Brambleghast, + [SPECIES_TOEDSCOOL] = sAnims_Toedscool, + [SPECIES_TOEDSCRUEL] = sAnims_Toedscruel, + [SPECIES_KLAWF] = sAnims_Klawf, + [SPECIES_CAPSAKID] = sAnims_Capsakid, + [SPECIES_SCOVILLAIN] = sAnims_Scovillain, + [SPECIES_RELLOR] = sAnims_Rellor, + [SPECIES_RABSCA] = sAnims_Rabsca, + [SPECIES_FLITTLE] = sAnims_Flittle, + [SPECIES_ESPATHRA] = sAnims_Espathra, + [SPECIES_TINKATINK] = sAnims_Tinkatink, + [SPECIES_TINKATUFF] = sAnims_Tinkatuff, + [SPECIES_TINKATON] = sAnims_Tinkaton, + [SPECIES_WIGLETT] = sAnims_Wiglett, + [SPECIES_WUGTRIO] = sAnims_Wugtrio, + [SPECIES_BOMBIRDIER] = sAnims_Bombirdier, + [SPECIES_FINIZEN] = sAnims_Finizen, + [SPECIES_PALAFIN_ZERO] = sAnims_Palafin, + [SPECIES_PALAFIN_HERO] = sAnims_Palafin, + [SPECIES_VAROOM] = sAnims_Varoom, + [SPECIES_REVAVROOM] = sAnims_Revavroom, + [SPECIES_CYCLIZAR] = sAnims_Cyclizar, + [SPECIES_ORTHWORM] = sAnims_Orthworm, + [SPECIES_GLIMMET] = sAnims_Glimmet, + [SPECIES_GLIMMORA] = sAnims_Glimmora, + [SPECIES_GREAVARD] = sAnims_Greavard, + [SPECIES_HOUNDSTONE] = sAnims_Houndstone, + [SPECIES_FLAMIGO] = sAnims_Flamigo, + [SPECIES_CETODDLE] = sAnims_Cetoddle, + [SPECIES_CETITAN] = sAnims_Cetitan, + [SPECIES_VELUZA] = sAnims_Veluza, + [SPECIES_DONDOZO] = sAnims_Dondozo, + [SPECIES_TATSUGIRI_CURLY] = sAnims_Tatsugiri, + [SPECIES_TATSUGIRI_DROOPY] = sAnims_Tatsugiri, + [SPECIES_TATSUGIRI_STRETCHY] = sAnims_Tatsugiri, + [SPECIES_ANNIHILAPE] = sAnims_Annihilape, + [SPECIES_CLODSIRE] = sAnims_Clodsire, + [SPECIES_FARIGIRAF] = sAnims_Farigiraf, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = sAnims_Dudunsparce, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = sAnims_Dudunsparce, + [SPECIES_KINGAMBIT] = sAnims_Kingambit, + [SPECIES_GREAT_TUSK] = sAnims_GreatTusk, + [SPECIES_SCREAM_TAIL] = sAnims_ScreamTail, + [SPECIES_BRUTE_BONNET] = sAnims_BruteBonnet, + [SPECIES_FLUTTER_MANE] = sAnims_FlutterMane, + [SPECIES_SLITHER_WING] = sAnims_SlitherWing, + [SPECIES_SANDY_SHOCKS] = sAnims_SandyShocks, + [SPECIES_IRON_TREADS] = sAnims_IronTreads, + [SPECIES_IRON_BUNDLE] = sAnims_IronBundle, + [SPECIES_IRON_HANDS] = sAnims_IronHands, + [SPECIES_IRON_JUGULIS] = sAnims_IronJugulis, + [SPECIES_IRON_MOTH] = sAnims_IronMoth, + [SPECIES_IRON_THORNS] = sAnims_IronThorns, + [SPECIES_FRIGIBAX] = sAnims_Frigibax, + [SPECIES_ARCTIBAX] = sAnims_Arctibax, + [SPECIES_BAXCALIBUR] = sAnims_Baxcalibur, + [SPECIES_GIMMIGHOUL_CHEST] = sAnims_Gimmighoul, + [SPECIES_GIMMIGHOUL_ROAMING] = sAnims_Gimmighoul, + [SPECIES_GHOLDENGO] = sAnims_Gholdengo, + [SPECIES_WO_CHIEN] = sAnims_WoChien, + [SPECIES_CHIEN_PAO] = sAnims_ChienPao, + [SPECIES_TING_LU] = sAnims_TingLu, + [SPECIES_CHI_YU] = sAnims_ChiYu, + [SPECIES_ROARING_MOON] = sAnims_RoaringMoon, + [SPECIES_IRON_VALIANT] = sAnims_IronValiant, + [SPECIES_KORAIDON] = sAnims_Koraidon, + [SPECIES_MIRAIDON] = sAnims_Miraidon, + [SPECIES_WALKING_WAKE] = sAnims_WalkingWake, + [SPECIES_IRON_LEAVES] = sAnims_IronLeaves, + [SPECIES_DIPPLIN] = sAnims_Dipplin, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = sAnims_Poltchageist, + [SPECIES_POLTCHAGEIST_ARTISAN] = sAnims_Poltchageist, + [SPECIES_SINISTCHA_UNREMARKABLE] = sAnims_Sinistcha, + [SPECIES_SINISTCHA_MASTERPIECE] = sAnims_Sinistcha, + [SPECIES_OKIDOGI] = sAnims_Okidogi, + [SPECIES_MUNKIDORI] = sAnims_Munkidori, + [SPECIES_FEZANDIPITI] = sAnims_Fezandipiti, + [SPECIES_OGERPON_TEAL_MASK] = sAnims_Ogerpon, + [SPECIES_OGERPON_WELLSPRING_MASK] = sAnims_Ogerpon, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = sAnims_Ogerpon, + [SPECIES_OGERPON_CORNERSTONE_MASK] = sAnims_Ogerpon, + [SPECIES_OGERPON_TEAL_MASK_TERA] = sAnims_Ogerpon, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = sAnims_Ogerpon, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = sAnims_Ogerpon, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = sAnims_Ogerpon, +#endif + // Mega/Primal Forms + [SPECIES_VENUSAUR_MEGA] = sAnims_VenusaurMega, + [SPECIES_CHARIZARD_MEGA_X] = sAnims_CHARIZARD_MEGA_X, + [SPECIES_CHARIZARD_MEGA_Y] = sAnims_CHARIZARD_MEGA_Y, + [SPECIES_BLASTOISE_MEGA] = sAnims_BlastoiseMega, + [SPECIES_BEEDRILL_MEGA] = sAnims_BeedrillMega, + [SPECIES_PIDGEOT_MEGA] = sAnims_PidgeotMega, + [SPECIES_ALAKAZAM_MEGA] = sAnims_AlakazamMega, + [SPECIES_SLOWBRO_MEGA] = sAnims_SlowbroMega, + [SPECIES_GENGAR_MEGA] = sAnims_GengarMega, + [SPECIES_KANGASKHAN_MEGA] = sAnims_KangaskhanMega, + [SPECIES_PINSIR_MEGA] = sAnims_PinsirMega, + [SPECIES_GYARADOS_MEGA] = sAnims_GyaradosMega, + [SPECIES_AERODACTYL_MEGA] = sAnims_AerodactylMega, + [SPECIES_MEWTWO_MEGA_X] = sAnims_MEWTWO_MEGA_X, + [SPECIES_MEWTWO_MEGA_Y] = sAnims_MEWTWO_MEGA_Y, + [SPECIES_AMPHAROS_MEGA] = sAnims_AmpharosMega, + [SPECIES_STEELIX_MEGA] = sAnims_SteelixMega, + [SPECIES_SCIZOR_MEGA] = sAnims_ScizorMega, + [SPECIES_HERACROSS_MEGA] = sAnims_HeracrossMega, + [SPECIES_HOUNDOOM_MEGA] = sAnims_HoundoomMega, + [SPECIES_TYRANITAR_MEGA] = sAnims_TyranitarMega, + [SPECIES_SCEPTILE_MEGA] = sAnims_SceptileMega, + [SPECIES_BLAZIKEN_MEGA] = sAnims_BlazikenMega, + [SPECIES_SWAMPERT_MEGA] = sAnims_SwampertMega, + [SPECIES_GARDEVOIR_MEGA] = sAnims_GardevoirMega, + [SPECIES_SABLEYE_MEGA] = sAnims_SableyeMega, + [SPECIES_MAWILE_MEGA] = sAnims_MawileMega, + [SPECIES_AGGRON_MEGA] = sAnims_AggronMega, + [SPECIES_MEDICHAM_MEGA] = sAnims_MedichamMega, + [SPECIES_MANECTRIC_MEGA] = sAnims_ManectricMega, + [SPECIES_SHARPEDO_MEGA] = sAnims_SharpedoMega, + [SPECIES_CAMERUPT_MEGA] = sAnims_CameruptMega, + [SPECIES_ALTARIA_MEGA] = sAnims_AltariaMega, + [SPECIES_BANETTE_MEGA] = sAnims_BanetteMega, + [SPECIES_ABSOL_MEGA] = sAnims_AbsolMega, + [SPECIES_GLALIE_MEGA] = sAnims_GlalieMega, + [SPECIES_SALAMENCE_MEGA] = sAnims_SalamenceMega, + [SPECIES_METAGROSS_MEGA] = sAnims_MetagrossMega, + [SPECIES_LATIAS_MEGA] = sAnims_LatiasMega, + [SPECIES_LATIOS_MEGA] = sAnims_LatiosMega, #if P_GEN_4_POKEMON == TRUE - [SPECIES_LOPUNNY_MEGA] = sAnims_LopunnyMega, - [SPECIES_GARCHOMP_MEGA] = sAnims_GarchompMega, - [SPECIES_LUCARIO_MEGA] = sAnims_LucarioMega, - [SPECIES_ABOMASNOW_MEGA] = sAnims_AbomasnowMega, - [SPECIES_GALLADE_MEGA] = sAnims_GalladeMega, + [SPECIES_LOPUNNY_MEGA] = sAnims_LopunnyMega, + [SPECIES_GARCHOMP_MEGA] = sAnims_GarchompMega, + [SPECIES_LUCARIO_MEGA] = sAnims_LucarioMega, + [SPECIES_ABOMASNOW_MEGA] = sAnims_AbomasnowMega, + [SPECIES_GALLADE_MEGA] = sAnims_GalladeMega, #endif #if P_GEN_5_POKEMON == TRUE - [SPECIES_AUDINO_MEGA] = sAnims_AudinoMega, + [SPECIES_AUDINO_MEGA] = sAnims_AudinoMega, #endif #if P_GEN_6_POKEMON == TRUE - [SPECIES_DIANCIE_MEGA] = sAnims_DiancieMega, + [SPECIES_DIANCIE_MEGA] = sAnims_DiancieMega, #endif - [SPECIES_RAYQUAZA_MEGA] = sAnims_RayquazaMega, - [SPECIES_KYOGRE_PRIMAL] = sAnims_KyogrePrimal, - [SPECIES_GROUDON_PRIMAL] = sAnims_GroudonPrimal, - [SPECIES_RATTATA_ALOLAN] = sAnims_RattataAlolan, - [SPECIES_RATICATE_ALOLAN] = sAnims_RaticateAlolan, - [SPECIES_RAICHU_ALOLAN] = sAnims_RaichuAlolan, - [SPECIES_SANDSHREW_ALOLAN] = sAnims_SandshrewAlolan, - [SPECIES_SANDSLASH_ALOLAN] = sAnims_SandslashAlolan, - [SPECIES_VULPIX_ALOLAN] = sAnims_VulpixAlolan, - [SPECIES_NINETALES_ALOLAN] = sAnims_NinetalesAlolan, - [SPECIES_DIGLETT_ALOLAN] = sAnims_DiglettAlolan, - [SPECIES_DUGTRIO_ALOLAN] = sAnims_DugtrioAlolan, - [SPECIES_MEOWTH_ALOLAN] = sAnims_MeowthAlolan, - [SPECIES_PERSIAN_ALOLAN] = sAnims_PersianAlolan, - [SPECIES_GEODUDE_ALOLAN] = sAnims_GeodudeAlolan, - [SPECIES_GRAVELER_ALOLAN] = sAnims_GravelerAlolan, - [SPECIES_GOLEM_ALOLAN] = sAnims_GolemAlolan, - [SPECIES_GRIMER_ALOLAN] = sAnims_GrimerAlolan, - [SPECIES_MUK_ALOLAN] = sAnims_MukAlolan, - [SPECIES_EXEGGUTOR_ALOLAN] = sAnims_ExeggutorAlolan, - [SPECIES_MAROWAK_ALOLAN] = sAnims_MarowakAlolan, - [SPECIES_MEOWTH_GALARIAN] = sAnims_MeowthGalarian, - [SPECIES_PONYTA_GALARIAN] = sAnims_PonytaGalarian, - [SPECIES_RAPIDASH_GALARIAN] = sAnims_RapidashGalarian, - [SPECIES_SLOWPOKE_GALARIAN] = sAnims_SlowpokeGalarian, - [SPECIES_SLOWBRO_GALARIAN] = sAnims_SlowbroGalarian, - [SPECIES_FARFETCHD_GALARIAN] = sAnims_FarfetchdGalarian, - [SPECIES_WEEZING_GALARIAN] = sAnims_WeezingGalarian, - [SPECIES_MR_MIME_GALARIAN] = sAnims_MrMimeGalarian, - [SPECIES_ARTICUNO_GALARIAN] = sAnims_ArticunoGalarian, - [SPECIES_ZAPDOS_GALARIAN] = sAnims_ZapdosGalarian, - [SPECIES_MOLTRES_GALARIAN] = sAnims_MoltresGalarian, - [SPECIES_SLOWKING_GALARIAN] = sAnims_SlowkingGalarian, - [SPECIES_CORSOLA_GALARIAN] = sAnims_CorsolaGalarian, - [SPECIES_ZIGZAGOON_GALARIAN] = sAnims_ZigzagoonGalarian, - [SPECIES_LINOONE_GALARIAN] = sAnims_LinooneGalarian, + [SPECIES_RAYQUAZA_MEGA] = sAnims_RayquazaMega, + [SPECIES_KYOGRE_PRIMAL] = sAnims_KyogrePrimal, + [SPECIES_GROUDON_PRIMAL] = sAnims_GroudonPrimal, + // Alolan Forms + [SPECIES_RATTATA_ALOLAN] = sAnims_RattataAlolan, + [SPECIES_RATICATE_ALOLAN] = sAnims_RaticateAlolan, + [SPECIES_RAICHU_ALOLAN] = sAnims_RaichuAlolan, + [SPECIES_SANDSHREW_ALOLAN] = sAnims_SandshrewAlolan, + [SPECIES_SANDSLASH_ALOLAN] = sAnims_SandslashAlolan, + [SPECIES_VULPIX_ALOLAN] = sAnims_VulpixAlolan, + [SPECIES_NINETALES_ALOLAN] = sAnims_NinetalesAlolan, + [SPECIES_DIGLETT_ALOLAN] = sAnims_DiglettAlolan, + [SPECIES_DUGTRIO_ALOLAN] = sAnims_DugtrioAlolan, + [SPECIES_MEOWTH_ALOLAN] = sAnims_MeowthAlolan, + [SPECIES_PERSIAN_ALOLAN] = sAnims_PersianAlolan, + [SPECIES_GEODUDE_ALOLAN] = sAnims_GeodudeAlolan, + [SPECIES_GRAVELER_ALOLAN] = sAnims_GravelerAlolan, + [SPECIES_GOLEM_ALOLAN] = sAnims_GolemAlolan, + [SPECIES_GRIMER_ALOLAN] = sAnims_GrimerAlolan, + [SPECIES_MUK_ALOLAN] = sAnims_MukAlolan, + [SPECIES_EXEGGUTOR_ALOLAN] = sAnims_ExeggutorAlolan, + [SPECIES_MAROWAK_ALOLAN] = sAnims_MarowakAlolan, + // Galarian Forms + [SPECIES_MEOWTH_GALARIAN] = sAnims_MeowthGalarian, + [SPECIES_PONYTA_GALARIAN] = sAnims_PonytaGalarian, + [SPECIES_RAPIDASH_GALARIAN] = sAnims_RapidashGalarian, + [SPECIES_SLOWPOKE_GALARIAN] = sAnims_SlowpokeGalarian, + [SPECIES_SLOWBRO_GALARIAN] = sAnims_SlowbroGalarian, + [SPECIES_FARFETCHD_GALARIAN] = sAnims_FarfetchdGalarian, + [SPECIES_WEEZING_GALARIAN] = sAnims_WeezingGalarian, + [SPECIES_MR_MIME_GALARIAN] = sAnims_MrMimeGalarian, + [SPECIES_ARTICUNO_GALARIAN] = sAnims_ArticunoGalarian, + [SPECIES_ZAPDOS_GALARIAN] = sAnims_ZapdosGalarian, + [SPECIES_MOLTRES_GALARIAN] = sAnims_MoltresGalarian, + [SPECIES_SLOWKING_GALARIAN] = sAnims_SlowkingGalarian, + [SPECIES_CORSOLA_GALARIAN] = sAnims_CorsolaGalarian, + [SPECIES_ZIGZAGOON_GALARIAN] = sAnims_ZigzagoonGalarian, + [SPECIES_LINOONE_GALARIAN] = sAnims_LinooneGalarian, #if P_GEN_5_POKEMON == TRUE - [SPECIES_DARUMAKA_GALARIAN] = sAnims_DarumakaGalarian, - [SPECIES_DARMANITAN_GALARIAN] = sAnims_DarmanitanGalarian, - [SPECIES_YAMASK_GALARIAN] = sAnims_YamaskGalarian, - [SPECIES_STUNFISK_GALARIAN] = sAnims_StunfiskGalarian, + [SPECIES_DARUMAKA_GALARIAN] = sAnims_DarumakaGalarian, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = sAnims_DarmanitanGalarianStandardMode, + [SPECIES_YAMASK_GALARIAN] = sAnims_YamaskGalarian, + [SPECIES_STUNFISK_GALARIAN] = sAnims_StunfiskGalarian, #endif - [SPECIES_GROWLITHE_HISUIAN] = sAnims_GrowlitheHisuian, - [SPECIES_ARCANINE_HISUIAN] = sAnims_ArcanineHisuian, - [SPECIES_VOLTORB_HISUIAN] = sAnims_VoltorbHisuian, - [SPECIES_ELECTRODE_HISUIAN] = sAnims_ElectrodeHisuian, - [SPECIES_TYPHLOSION_HISUIAN] = sAnims_TyphlosionHisuian, - [SPECIES_QWILFISH_HISUIAN] = sAnims_QwilfishHisuian, - [SPECIES_SNEASEL_HISUIAN] = sAnims_SneaselHisuian, + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = sAnims_GrowlitheHisuian, + [SPECIES_ARCANINE_HISUIAN] = sAnims_ArcanineHisuian, + [SPECIES_VOLTORB_HISUIAN] = sAnims_VoltorbHisuian, + [SPECIES_ELECTRODE_HISUIAN] = sAnims_ElectrodeHisuian, + [SPECIES_TYPHLOSION_HISUIAN] = sAnims_TyphlosionHisuian, + [SPECIES_QWILFISH_HISUIAN] = sAnims_QwilfishHisuian, + [SPECIES_SNEASEL_HISUIAN] = sAnims_SneaselHisuian, #if P_GEN_5_POKEMON == TRUE - [SPECIES_SAMUROTT_HISUIAN] = sAnims_SamurottHisuian, - [SPECIES_LILLIGANT_HISUIAN] = sAnims_LilligantHisuian, - [SPECIES_ZORUA_HISUIAN] = sAnims_ZoruaHisuian, - [SPECIES_ZOROARK_HISUIAN] = sAnims_ZoroarkHisuian, - [SPECIES_BRAVIARY_HISUIAN] = sAnims_BraviaryHisuian, + [SPECIES_SAMUROTT_HISUIAN] = sAnims_SamurottHisuian, + [SPECIES_LILLIGANT_HISUIAN] = sAnims_LilligantHisuian, + [SPECIES_ZORUA_HISUIAN] = sAnims_ZoruaHisuian, + [SPECIES_ZOROARK_HISUIAN] = sAnims_ZoroarkHisuian, + [SPECIES_BRAVIARY_HISUIAN] = sAnims_BraviaryHisuian, #endif #if P_GEN_6_POKEMON == TRUE - [SPECIES_SLIGGOO_HISUIAN] = sAnims_SliggooHisuian, - [SPECIES_GOODRA_HISUIAN] = sAnims_GoodraHisuian, - [SPECIES_AVALUGG_HISUIAN] = sAnims_AvaluggHisuian, + [SPECIES_SLIGGOO_HISUIAN] = sAnims_SliggooHisuian, + [SPECIES_GOODRA_HISUIAN] = sAnims_GoodraHisuian, + [SPECIES_AVALUGG_HISUIAN] = sAnims_AvaluggHisuian, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_DECIDUEYE_HISUIAN] = sAnims_DecidueyeHisuian, + [SPECIES_DECIDUEYE_HISUIAN] = sAnims_DecidueyeHisuian, #endif - [SPECIES_PIKACHU_COSPLAY] = sAnims_PikachuCosplay, - [SPECIES_PIKACHU_ROCK_STAR] = sAnims_PikachuRockStar, - [SPECIES_PIKACHU_BELLE] = sAnims_PikachuBelle, - [SPECIES_PIKACHU_POP_STAR] = sAnims_PikachuPopStar, - [SPECIES_PIKACHU_PH_D] = sAnims_PIKACHU_PH_D, - [SPECIES_PIKACHU_LIBRE] = sAnims_PikachuLibre, - [SPECIES_PIKACHU_ORIGINAL_CAP] = sAnims_PikachuOriginalCap, - [SPECIES_PIKACHU_HOENN_CAP] = sAnims_PikachuHoennCap, - [SPECIES_PIKACHU_SINNOH_CAP] = sAnims_PikachuSinnohCap, - [SPECIES_PIKACHU_UNOVA_CAP] = sAnims_PikachuUnovaCap, - [SPECIES_PIKACHU_KALOS_CAP] = sAnims_PikachuKalosCap, - [SPECIES_PIKACHU_ALOLA_CAP] = sAnims_PikachuAlolaCap, - [SPECIES_PIKACHU_PARTNER_CAP] = sAnims_PikachuPartnerCap, - [SPECIES_PIKACHU_WORLD_CAP] = sAnims_PikachuWorldCap, - [SPECIES_PICHU_SPIKY_EARED] = sAnims_PichuSpikyEared, - [SPECIES_UNOWN_B] = sAnims_UnownB, - [SPECIES_UNOWN_C] = sAnims_UnownC, - [SPECIES_UNOWN_D] = sAnims_UnownD, - [SPECIES_UNOWN_E] = sAnims_UnownE, - [SPECIES_UNOWN_F] = sAnims_UnownF, - [SPECIES_UNOWN_G] = sAnims_UnownG, - [SPECIES_UNOWN_H] = sAnims_UnownH, - [SPECIES_UNOWN_I] = sAnims_UnownI, - [SPECIES_UNOWN_J] = sAnims_UnownJ, - [SPECIES_UNOWN_K] = sAnims_UnownK, - [SPECIES_UNOWN_L] = sAnims_UnownL, - [SPECIES_UNOWN_M] = sAnims_UnownM, - [SPECIES_UNOWN_N] = sAnims_UnownN, - [SPECIES_UNOWN_O] = sAnims_UnownO, - [SPECIES_UNOWN_P] = sAnims_UnownP, - [SPECIES_UNOWN_Q] = sAnims_UnownQ, - [SPECIES_UNOWN_R] = sAnims_UnownR, - [SPECIES_UNOWN_S] = sAnims_UnownS, - [SPECIES_UNOWN_T] = sAnims_UnownT, - [SPECIES_UNOWN_U] = sAnims_UnownU, - [SPECIES_UNOWN_V] = sAnims_UnownV, - [SPECIES_UNOWN_W] = sAnims_UnownW, - [SPECIES_UNOWN_X] = sAnims_UnownX, - [SPECIES_UNOWN_Y] = sAnims_UnownY, - [SPECIES_UNOWN_Z] = sAnims_UnownZ, - [SPECIES_UNOWN_EMARK] = sAnims_UnownEMark, - [SPECIES_UNOWN_QMARK] = sAnims_UnownQMark, - [SPECIES_CASTFORM_SUNNY] = sAnims_CastformSunny, - [SPECIES_CASTFORM_RAINY] = sAnims_CastformRainy, - [SPECIES_CASTFORM_SNOWY] = sAnims_CastformSnowy, - [SPECIES_DEOXYS_ATTACK] = sAnims_DeoxysAttack, - [SPECIES_DEOXYS_DEFENSE] = sAnims_DeoxysDefense, - [SPECIES_DEOXYS_SPEED] = sAnims_DeoxysSpeed, + // Ungrouped + [SPECIES_PIKACHU_COSPLAY] = sAnims_PikachuCosplay, + [SPECIES_PIKACHU_ROCK_STAR] = sAnims_PikachuRockStar, + [SPECIES_PIKACHU_BELLE] = sAnims_PikachuBelle, + [SPECIES_PIKACHU_POP_STAR] = sAnims_PikachuPopStar, + [SPECIES_PIKACHU_PH_D] = sAnims_PIKACHU_PH_D, + [SPECIES_PIKACHU_LIBRE] = sAnims_PikachuLibre, + [SPECIES_PIKACHU_ORIGINAL_CAP] = sAnims_PikachuOriginalCap, + [SPECIES_PIKACHU_HOENN_CAP] = sAnims_PikachuHoennCap, + [SPECIES_PIKACHU_SINNOH_CAP] = sAnims_PikachuSinnohCap, + [SPECIES_PIKACHU_UNOVA_CAP] = sAnims_PikachuUnovaCap, + [SPECIES_PIKACHU_KALOS_CAP] = sAnims_PikachuKalosCap, + [SPECIES_PIKACHU_ALOLA_CAP] = sAnims_PikachuAlolaCap, + [SPECIES_PIKACHU_PARTNER_CAP] = sAnims_PikachuPartnerCap, + [SPECIES_PIKACHU_WORLD_CAP] = sAnims_PikachuWorldCap, + [SPECIES_PICHU_SPIKY_EARED] = sAnims_PichuSpikyEared, + [SPECIES_UNOWN_B] = sAnims_UnownB, + [SPECIES_UNOWN_C] = sAnims_UnownC, + [SPECIES_UNOWN_D] = sAnims_UnownD, + [SPECIES_UNOWN_E] = sAnims_UnownE, + [SPECIES_UNOWN_F] = sAnims_UnownF, + [SPECIES_UNOWN_G] = sAnims_UnownG, + [SPECIES_UNOWN_H] = sAnims_UnownH, + [SPECIES_UNOWN_I] = sAnims_UnownI, + [SPECIES_UNOWN_J] = sAnims_UnownJ, + [SPECIES_UNOWN_K] = sAnims_UnownK, + [SPECIES_UNOWN_L] = sAnims_UnownL, + [SPECIES_UNOWN_M] = sAnims_UnownM, + [SPECIES_UNOWN_N] = sAnims_UnownN, + [SPECIES_UNOWN_O] = sAnims_UnownO, + [SPECIES_UNOWN_P] = sAnims_UnownP, + [SPECIES_UNOWN_Q] = sAnims_UnownQ, + [SPECIES_UNOWN_R] = sAnims_UnownR, + [SPECIES_UNOWN_S] = sAnims_UnownS, + [SPECIES_UNOWN_T] = sAnims_UnownT, + [SPECIES_UNOWN_U] = sAnims_UnownU, + [SPECIES_UNOWN_V] = sAnims_UnownV, + [SPECIES_UNOWN_W] = sAnims_UnownW, + [SPECIES_UNOWN_X] = sAnims_UnownX, + [SPECIES_UNOWN_Y] = sAnims_UnownY, + [SPECIES_UNOWN_Z] = sAnims_UnownZ, + [SPECIES_UNOWN_EMARK] = sAnims_UnownEMark, + [SPECIES_UNOWN_QMARK] = sAnims_UnownQMark, + [SPECIES_CASTFORM_SUNNY] = sAnims_CastformSunny, + [SPECIES_CASTFORM_RAINY] = sAnims_CastformRainy, + [SPECIES_CASTFORM_SNOWY] = sAnims_CastformSnowy, + [SPECIES_DEOXYS_ATTACK] = sAnims_DeoxysAttack, + [SPECIES_DEOXYS_DEFENSE] = sAnims_DeoxysDefense, + [SPECIES_DEOXYS_SPEED] = sAnims_DeoxysSpeed, #if P_GEN_4_POKEMON == TRUE - [SPECIES_BURMY_SANDY_CLOAK] = sAnims_Burmy, - [SPECIES_BURMY_TRASH_CLOAK] = sAnims_Burmy, - [SPECIES_WORMADAM_SANDY_CLOAK] = sAnims_Wormadam, - [SPECIES_WORMADAM_TRASH_CLOAK] = sAnims_Wormadam, - [SPECIES_CHERRIM_SUNSHINE] = sAnims_CherrimSunshine, - [SPECIES_SHELLOS_EAST_SEA] = sAnims_Shellos, - [SPECIES_GASTRODON_EAST_SEA] = sAnims_Gastrodon, - [SPECIES_ROTOM_HEAT] = sAnims_RotomHeat, - [SPECIES_ROTOM_WASH] = sAnims_RotomWash, - [SPECIES_ROTOM_FROST] = sAnims_RotomFrost, - [SPECIES_ROTOM_FAN] = sAnims_RotomFan, - [SPECIES_ROTOM_MOW] = sAnims_RotomMow, - [SPECIES_DIALGA_ORIGIN] = sAnims_DialgaOrigin, - [SPECIES_PALKIA_ORIGIN] = sAnims_PalkiaOrigin, - [SPECIES_GIRATINA_ORIGIN] = sAnims_GiratinaOrigin, - [SPECIES_SHAYMIN_SKY] = sAnims_ShayminSky, - [SPECIES_ARCEUS_FIGHTING] = sAnims_Arceus, - [SPECIES_ARCEUS_FLYING] = sAnims_Arceus, - [SPECIES_ARCEUS_POISON] = sAnims_Arceus, - [SPECIES_ARCEUS_GROUND] = sAnims_Arceus, - [SPECIES_ARCEUS_ROCK] = sAnims_Arceus, - [SPECIES_ARCEUS_BUG] = sAnims_Arceus, - [SPECIES_ARCEUS_GHOST] = sAnims_Arceus, - [SPECIES_ARCEUS_STEEL] = sAnims_Arceus, - [SPECIES_ARCEUS_FIRE] = sAnims_Arceus, - [SPECIES_ARCEUS_WATER] = sAnims_Arceus, - [SPECIES_ARCEUS_GRASS] = sAnims_Arceus, - [SPECIES_ARCEUS_ELECTRIC] = sAnims_Arceus, - [SPECIES_ARCEUS_PSYCHIC] = sAnims_Arceus, - [SPECIES_ARCEUS_ICE] = sAnims_Arceus, - [SPECIES_ARCEUS_DRAGON] = sAnims_Arceus, - [SPECIES_ARCEUS_DARK] = sAnims_Arceus, - [SPECIES_ARCEUS_FAIRY] = sAnims_Arceus, + [SPECIES_BURMY_SANDY_CLOAK] = sAnims_Burmy, + [SPECIES_BURMY_TRASH_CLOAK] = sAnims_Burmy, + [SPECIES_WORMADAM_SANDY_CLOAK] = sAnims_Wormadam, + [SPECIES_WORMADAM_TRASH_CLOAK] = sAnims_Wormadam, + [SPECIES_CHERRIM_SUNSHINE] = sAnims_CherrimSunshine, + [SPECIES_SHELLOS_EAST_SEA] = sAnims_Shellos, + [SPECIES_GASTRODON_EAST_SEA] = sAnims_Gastrodon, + [SPECIES_ROTOM_HEAT] = sAnims_RotomHeat, + [SPECIES_ROTOM_WASH] = sAnims_RotomWash, + [SPECIES_ROTOM_FROST] = sAnims_RotomFrost, + [SPECIES_ROTOM_FAN] = sAnims_RotomFan, + [SPECIES_ROTOM_MOW] = sAnims_RotomMow, + [SPECIES_DIALGA_ORIGIN] = sAnims_DialgaOrigin, + [SPECIES_PALKIA_ORIGIN] = sAnims_PalkiaOrigin, + [SPECIES_GIRATINA_ORIGIN] = sAnims_GiratinaOrigin, + [SPECIES_SHAYMIN_SKY] = sAnims_ShayminSky, + [SPECIES_ARCEUS_FIGHTING] = sAnims_Arceus, + [SPECIES_ARCEUS_FLYING] = sAnims_Arceus, + [SPECIES_ARCEUS_POISON] = sAnims_Arceus, + [SPECIES_ARCEUS_GROUND] = sAnims_Arceus, + [SPECIES_ARCEUS_ROCK] = sAnims_Arceus, + [SPECIES_ARCEUS_BUG] = sAnims_Arceus, + [SPECIES_ARCEUS_GHOST] = sAnims_Arceus, + [SPECIES_ARCEUS_STEEL] = sAnims_Arceus, + [SPECIES_ARCEUS_FIRE] = sAnims_Arceus, + [SPECIES_ARCEUS_WATER] = sAnims_Arceus, + [SPECIES_ARCEUS_GRASS] = sAnims_Arceus, + [SPECIES_ARCEUS_ELECTRIC] = sAnims_Arceus, + [SPECIES_ARCEUS_PSYCHIC] = sAnims_Arceus, + [SPECIES_ARCEUS_ICE] = sAnims_Arceus, + [SPECIES_ARCEUS_DRAGON] = sAnims_Arceus, + [SPECIES_ARCEUS_DARK] = sAnims_Arceus, + [SPECIES_ARCEUS_FAIRY] = sAnims_Arceus, #endif #if P_GEN_5_POKEMON == TRUE - [SPECIES_BASCULIN_BLUE_STRIPED] = sAnims_Basculin, - [SPECIES_BASCULIN_WHITE_STRIPED] = sAnims_Basculin, - [SPECIES_DARMANITAN_ZEN_MODE] = sAnims_DarmanitanZenMode, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sAnims_DarmanitanZenModeGalarian, - [SPECIES_DEERLING_SUMMER] = sAnims_Deerling, - [SPECIES_DEERLING_AUTUMN] = sAnims_Deerling, - [SPECIES_DEERLING_WINTER] = sAnims_Deerling, - [SPECIES_SAWSBUCK_SUMMER] = sAnims_Sawsbuck, - [SPECIES_SAWSBUCK_AUTUMN] = sAnims_Sawsbuck, - [SPECIES_SAWSBUCK_WINTER] = sAnims_Sawsbuck, - [SPECIES_TORNADUS_THERIAN] = sAnims_TornadusTherian, - [SPECIES_THUNDURUS_THERIAN] = sAnims_ThundurusTherian, - [SPECIES_LANDORUS_THERIAN] = sAnims_LandorusTherian, - [SPECIES_KYUREM_WHITE] = sAnims_KyuremWhite, - [SPECIES_KYUREM_BLACK] = sAnims_KyuremBlack, - [SPECIES_KELDEO_RESOLUTE] = sAnims_KeldeoResolute, - [SPECIES_MELOETTA_PIROUETTE] = sAnims_MeloettaPirouette, - [SPECIES_GENESECT_DOUSE_DRIVE] = sAnims_Genesect, - [SPECIES_GENESECT_SHOCK_DRIVE] = sAnims_Genesect, - [SPECIES_GENESECT_BURN_DRIVE] = sAnims_Genesect, - [SPECIES_GENESECT_CHILL_DRIVE] = sAnims_Genesect, + [SPECIES_BASCULIN_BLUE_STRIPED] = sAnims_Basculin, + [SPECIES_BASCULIN_WHITE_STRIPED] = sAnims_Basculin, + [SPECIES_DARMANITAN_ZEN_MODE] = sAnims_DarmanitanZenMode, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = sAnims_DarmanitanGalarianZenMode, + [SPECIES_DEERLING_SUMMER] = sAnims_Deerling, + [SPECIES_DEERLING_AUTUMN] = sAnims_Deerling, + [SPECIES_DEERLING_WINTER] = sAnims_Deerling, + [SPECIES_SAWSBUCK_SUMMER] = sAnims_Sawsbuck, + [SPECIES_SAWSBUCK_AUTUMN] = sAnims_Sawsbuck, + [SPECIES_SAWSBUCK_WINTER] = sAnims_Sawsbuck, + [SPECIES_TORNADUS_THERIAN] = sAnims_TornadusTherian, + [SPECIES_THUNDURUS_THERIAN] = sAnims_ThundurusTherian, + [SPECIES_LANDORUS_THERIAN] = sAnims_LandorusTherian, + [SPECIES_KYUREM_WHITE] = sAnims_KyuremWhite, + [SPECIES_KYUREM_BLACK] = sAnims_KyuremBlack, + [SPECIES_KELDEO_RESOLUTE] = sAnims_KeldeoResolute, + [SPECIES_MELOETTA_PIROUETTE] = sAnims_MeloettaPirouette, + [SPECIES_GENESECT_DOUSE_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_SHOCK_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_BURN_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_CHILL_DRIVE] = sAnims_Genesect, #endif #if P_GEN_6_POKEMON == TRUE - [SPECIES_GRENINJA_BATTLE_BOND] = sAnims_Greninja, - [SPECIES_GRENINJA_ASH] = sAnims_GreninjaAsh, - [SPECIES_VIVILLON_POLAR] = sAnims_Vivillon, - [SPECIES_VIVILLON_TUNDRA] = sAnims_Vivillon, - [SPECIES_VIVILLON_CONTINENTAL] = sAnims_Vivillon, - [SPECIES_VIVILLON_GARDEN] = sAnims_Vivillon, - [SPECIES_VIVILLON_ELEGANT] = sAnims_Vivillon, - [SPECIES_VIVILLON_MEADOW] = sAnims_Vivillon, - [SPECIES_VIVILLON_MODERN] = sAnims_Vivillon, - [SPECIES_VIVILLON_MARINE] = sAnims_Vivillon, - [SPECIES_VIVILLON_ARCHIPELAGO] = sAnims_Vivillon, - [SPECIES_VIVILLON_HIGH_PLAINS] = sAnims_Vivillon, - [SPECIES_VIVILLON_SANDSTORM] = sAnims_Vivillon, - [SPECIES_VIVILLON_RIVER] = sAnims_Vivillon, - [SPECIES_VIVILLON_MONSOON] = sAnims_Vivillon, - [SPECIES_VIVILLON_SAVANNA] = sAnims_Vivillon, - [SPECIES_VIVILLON_SUN] = sAnims_Vivillon, - [SPECIES_VIVILLON_OCEAN] = sAnims_Vivillon, - [SPECIES_VIVILLON_JUNGLE] = sAnims_Vivillon, - [SPECIES_VIVILLON_FANCY] = sAnims_Vivillon, - [SPECIES_VIVILLON_POKE_BALL] = sAnims_Vivillon, - [SPECIES_FLABEBE_YELLOW_FLOWER] = sAnims_Flabebe, - [SPECIES_FLABEBE_ORANGE_FLOWER] = sAnims_Flabebe, - [SPECIES_FLABEBE_BLUE_FLOWER] = sAnims_Flabebe, - [SPECIES_FLABEBE_WHITE_FLOWER] = sAnims_Flabebe, - [SPECIES_FLOETTE_YELLOW_FLOWER] = sAnims_Floette, - [SPECIES_FLOETTE_ORANGE_FLOWER] = sAnims_Floette, - [SPECIES_FLOETTE_BLUE_FLOWER] = sAnims_Floette, - [SPECIES_FLOETTE_WHITE_FLOWER] = sAnims_Floette, - [SPECIES_FLOETTE_ETERNAL_FLOWER] = sAnims_Floette, - [SPECIES_FLORGES_YELLOW_FLOWER] = sAnims_Florges, - [SPECIES_FLORGES_ORANGE_FLOWER] = sAnims_Florges, - [SPECIES_FLORGES_BLUE_FLOWER] = sAnims_Florges, - [SPECIES_FLORGES_WHITE_FLOWER] = sAnims_Florges, - [SPECIES_FURFROU_HEART_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_STAR_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_DIAMOND_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_DEBUTANTE_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_MATRON_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_DANDY_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_LA_REINE_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_KABUKI_TRIM] = sAnims_Furfrou, - [SPECIES_FURFROU_PHARAOH_TRIM] = sAnims_Furfrou, - [SPECIES_MEOWSTIC_FEMALE] = sAnims_Meowstic, - [SPECIES_AEGISLASH_BLADE] = sAnims_AegislashBlade, - [SPECIES_PUMPKABOO_SMALL] = sAnims_Pumpkaboo, - [SPECIES_PUMPKABOO_LARGE] = sAnims_Pumpkaboo, - [SPECIES_PUMPKABOO_SUPER] = sAnims_Pumpkaboo, - [SPECIES_GOURGEIST_SMALL] = sAnims_Gourgeist, - [SPECIES_GOURGEIST_LARGE] = sAnims_Gourgeist, - [SPECIES_GOURGEIST_SUPER] = sAnims_Gourgeist, - [SPECIES_XERNEAS_ACTIVE] = sAnims_Xerneas, - [SPECIES_ZYGARDE_10] = sAnims_Zygarde10, - [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sAnims_Zygarde10, - [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sAnims_Zygarde, - [SPECIES_ZYGARDE_COMPLETE] = sAnims_ZygardeComplete, - [SPECIES_HOOPA_UNBOUND] = sAnims_HoopaUnbound, + [SPECIES_GRENINJA_BATTLE_BOND] = sAnims_Greninja, + [SPECIES_GRENINJA_ASH] = sAnims_GreninjaAsh, + [SPECIES_VIVILLON_POLAR] = sAnims_Vivillon, + [SPECIES_VIVILLON_TUNDRA] = sAnims_Vivillon, + [SPECIES_VIVILLON_CONTINENTAL] = sAnims_Vivillon, + [SPECIES_VIVILLON_GARDEN] = sAnims_Vivillon, + [SPECIES_VIVILLON_ELEGANT] = sAnims_Vivillon, + [SPECIES_VIVILLON_MEADOW] = sAnims_Vivillon, + [SPECIES_VIVILLON_MODERN] = sAnims_Vivillon, + [SPECIES_VIVILLON_MARINE] = sAnims_Vivillon, + [SPECIES_VIVILLON_ARCHIPELAGO] = sAnims_Vivillon, + [SPECIES_VIVILLON_HIGH_PLAINS] = sAnims_Vivillon, + [SPECIES_VIVILLON_SANDSTORM] = sAnims_Vivillon, + [SPECIES_VIVILLON_RIVER] = sAnims_Vivillon, + [SPECIES_VIVILLON_MONSOON] = sAnims_Vivillon, + [SPECIES_VIVILLON_SAVANNA] = sAnims_Vivillon, + [SPECIES_VIVILLON_SUN] = sAnims_Vivillon, + [SPECIES_VIVILLON_OCEAN] = sAnims_Vivillon, + [SPECIES_VIVILLON_JUNGLE] = sAnims_Vivillon, + [SPECIES_VIVILLON_FANCY] = sAnims_Vivillon, + [SPECIES_VIVILLON_POKE_BALL] = sAnims_Vivillon, + [SPECIES_FLABEBE_YELLOW_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_ORANGE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_BLUE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_WHITE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLOETTE_YELLOW_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_ORANGE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_BLUE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_WHITE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_ETERNAL_FLOWER] = sAnims_Floette, + [SPECIES_FLORGES_YELLOW_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_ORANGE_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_BLUE_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_WHITE_FLOWER] = sAnims_Florges, + [SPECIES_FURFROU_HEART_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_STAR_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DIAMOND_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DEBUTANTE_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_MATRON_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DANDY_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_LA_REINE_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_KABUKI_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_PHARAOH_TRIM] = sAnims_Furfrou, + [SPECIES_MEOWSTIC_FEMALE] = sAnims_Meowstic, + [SPECIES_AEGISLASH_BLADE] = sAnims_AegislashBlade, + [SPECIES_PUMPKABOO_SMALL] = sAnims_Pumpkaboo, + [SPECIES_PUMPKABOO_LARGE] = sAnims_Pumpkaboo, + [SPECIES_PUMPKABOO_SUPER] = sAnims_Pumpkaboo, + [SPECIES_GOURGEIST_SMALL] = sAnims_Gourgeist, + [SPECIES_GOURGEIST_LARGE] = sAnims_Gourgeist, + [SPECIES_GOURGEIST_SUPER] = sAnims_Gourgeist, + [SPECIES_XERNEAS_ACTIVE] = sAnims_Xerneas, + [SPECIES_ZYGARDE_10_AURA_BREAK] = sAnims_Zygarde10, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sAnims_Zygarde10, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sAnims_Zygarde50, + [SPECIES_ZYGARDE_COMPLETE] = sAnims_ZygardeComplete, + [SPECIES_HOOPA_UNBOUND] = sAnims_HoopaUnbound, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_ORICORIO_POM_POM] = sAnims_Oricorio, - [SPECIES_ORICORIO_PAU] = sAnims_Oricorio, - [SPECIES_ORICORIO_SENSU] = sAnims_Oricorio, - [SPECIES_ROCKRUFF_OWN_TEMPO] = sAnims_Rockruff, - [SPECIES_LYCANROC_MIDNIGHT] = sAnims_LycanrocMidnight, - [SPECIES_LYCANROC_DUSK] = sAnims_LycanrocDusk, - [SPECIES_WISHIWASHI_SCHOOL] = sAnims_WishiwashiSchool, - [SPECIES_SILVALLY_FIGHTING] = sAnims_Silvally, - [SPECIES_SILVALLY_FLYING] = sAnims_Silvally, - [SPECIES_SILVALLY_POISON] = sAnims_Silvally, - [SPECIES_SILVALLY_GROUND] = sAnims_Silvally, - [SPECIES_SILVALLY_ROCK] = sAnims_Silvally, - [SPECIES_SILVALLY_BUG] = sAnims_Silvally, - [SPECIES_SILVALLY_GHOST] = sAnims_Silvally, - [SPECIES_SILVALLY_STEEL] = sAnims_Silvally, - [SPECIES_SILVALLY_FIRE] = sAnims_Silvally, - [SPECIES_SILVALLY_WATER] = sAnims_Silvally, - [SPECIES_SILVALLY_GRASS] = sAnims_Silvally, - [SPECIES_SILVALLY_ELECTRIC] = sAnims_Silvally, - [SPECIES_SILVALLY_PSYCHIC] = sAnims_Silvally, - [SPECIES_SILVALLY_ICE] = sAnims_Silvally, - [SPECIES_SILVALLY_DRAGON] = sAnims_Silvally, - [SPECIES_SILVALLY_DARK] = sAnims_Silvally, - [SPECIES_SILVALLY_FAIRY] = sAnims_Silvally, - [SPECIES_MINIOR_METEOR_ORANGE] = sAnims_Minior, - [SPECIES_MINIOR_METEOR_YELLOW] = sAnims_Minior, - [SPECIES_MINIOR_METEOR_GREEN] = sAnims_Minior, - [SPECIES_MINIOR_METEOR_BLUE] = sAnims_Minior, - [SPECIES_MINIOR_METEOR_INDIGO] = sAnims_Minior, - [SPECIES_MINIOR_METEOR_VIOLET] = sAnims_Minior, - [SPECIES_MINIOR_CORE_RED] = sAnims_Minior, - [SPECIES_MINIOR_CORE_ORANGE] = sAnims_Minior, - [SPECIES_MINIOR_CORE_YELLOW] = sAnims_Minior, - [SPECIES_MINIOR_CORE_GREEN] = sAnims_Minior, - [SPECIES_MINIOR_CORE_BLUE] = sAnims_Minior, - [SPECIES_MINIOR_CORE_INDIGO] = sAnims_Minior, - [SPECIES_MINIOR_CORE_VIOLET] = sAnims_Minior, - [SPECIES_MIMIKYU_BUSTED] = sAnims_MimikyuBusted, - [SPECIES_NECROZMA_DUSK_MANE] = sAnims_Necrozma, - [SPECIES_NECROZMA_DAWN_WINGS] = sAnims_Necrozma, - [SPECIES_NECROZMA_ULTRA] = sAnims_Necrozma, - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = sAnims_Magearna, + [SPECIES_ORICORIO_POM_POM] = sAnims_Oricorio, + [SPECIES_ORICORIO_PAU] = sAnims_Oricorio, + [SPECIES_ORICORIO_SENSU] = sAnims_Oricorio, + [SPECIES_ROCKRUFF_OWN_TEMPO] = sAnims_Rockruff, + [SPECIES_LYCANROC_MIDNIGHT] = sAnims_LycanrocMidnight, + [SPECIES_LYCANROC_DUSK] = sAnims_LycanrocDusk, + [SPECIES_WISHIWASHI_SCHOOL] = sAnims_WishiwashiSchool, + [SPECIES_SILVALLY_FIGHTING] = sAnims_Silvally, + [SPECIES_SILVALLY_FLYING] = sAnims_Silvally, + [SPECIES_SILVALLY_POISON] = sAnims_Silvally, + [SPECIES_SILVALLY_GROUND] = sAnims_Silvally, + [SPECIES_SILVALLY_ROCK] = sAnims_Silvally, + [SPECIES_SILVALLY_BUG] = sAnims_Silvally, + [SPECIES_SILVALLY_GHOST] = sAnims_Silvally, + [SPECIES_SILVALLY_STEEL] = sAnims_Silvally, + [SPECIES_SILVALLY_FIRE] = sAnims_Silvally, + [SPECIES_SILVALLY_WATER] = sAnims_Silvally, + [SPECIES_SILVALLY_GRASS] = sAnims_Silvally, + [SPECIES_SILVALLY_ELECTRIC] = sAnims_Silvally, + [SPECIES_SILVALLY_PSYCHIC] = sAnims_Silvally, + [SPECIES_SILVALLY_ICE] = sAnims_Silvally, + [SPECIES_SILVALLY_DRAGON] = sAnims_Silvally, + [SPECIES_SILVALLY_DARK] = sAnims_Silvally, + [SPECIES_SILVALLY_FAIRY] = sAnims_Silvally, + [SPECIES_MINIOR_METEOR_ORANGE] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_METEOR_YELLOW] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_METEOR_GREEN] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_METEOR_BLUE] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_METEOR_INDIGO] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_METEOR_VIOLET] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_RED] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_ORANGE] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_YELLOW] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_GREEN] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_BLUE] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_INDIGO] = sAnims_MiniorMeteor, + [SPECIES_MINIOR_CORE_VIOLET] = sAnims_MiniorMeteor, + [SPECIES_MIMIKYU_BUSTED] = sAnims_MimikyuBusted, + [SPECIES_NECROZMA_DUSK_MANE] = sAnims_Necrozma, + [SPECIES_NECROZMA_DAWN_WINGS] = sAnims_Necrozma, + [SPECIES_NECROZMA_ULTRA] = sAnims_Necrozma, + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = sAnims_Magearna, #endif #if P_GEN_8_POKEMON == TRUE - [SPECIES_CRAMORANT_GULPING] = sAnims_Cramorant, - [SPECIES_CRAMORANT_GORGING] = sAnims_Cramorant, - [SPECIES_TOXTRICITY_LOW_KEY] = sAnims_Toxtricity, - [SPECIES_SINISTEA_ANTIQUE] = sAnims_Sinistea, - [SPECIES_POLTEAGEIST_ANTIQUE] = sAnims_Polteageist, - [SPECIES_ALCREMIE_RUBY_CREAM] = sAnims_Alcremie, - [SPECIES_ALCREMIE_MATCHA_CREAM] = sAnims_Alcremie, - [SPECIES_ALCREMIE_MINT_CREAM] = sAnims_Alcremie, - [SPECIES_ALCREMIE_LEMON_CREAM] = sAnims_Alcremie, - [SPECIES_ALCREMIE_SALTED_CREAM] = sAnims_Alcremie, - [SPECIES_ALCREMIE_RUBY_SWIRL] = sAnims_Alcremie, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAnims_Alcremie, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAnims_Alcremie, - [SPECIES_EISCUE_NOICE_FACE] = sAnims_Eiscue, - [SPECIES_INDEEDEE_FEMALE] = sAnims_Indeedee, - [SPECIES_MORPEKO_HANGRY] = sAnims_Morpeko, - [SPECIES_ZACIAN_CROWNED_SWORD] = sAnims_Zacian, - [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sAnims_Zamazenta, - [SPECIES_ETERNATUS_ETERNAMAX] = sAnims_Eternatus, - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sAnims_Urshifu, - [SPECIES_ZARUDE_DADA] = sAnims_Zarude, - [SPECIES_CALYREX_ICE_RIDER] = sAnims_Calyrex, - [SPECIES_CALYREX_SHADOW_RIDER] = sAnims_Calyrex, - [SPECIES_ENAMORUS_THERIAN] = sAnims_EnamorusTherian, - [SPECIES_BASCULEGION_FEMALE] = sAnims_Basculegion, + [SPECIES_CRAMORANT_GULPING] = sAnims_Cramorant, + [SPECIES_CRAMORANT_GORGING] = sAnims_Cramorant, + [SPECIES_TOXTRICITY_LOW_KEY] = sAnims_Toxtricity, + [SPECIES_SINISTEA_ANTIQUE] = sAnims_Sinistea, + [SPECIES_POLTEAGEIST_ANTIQUE] = sAnims_Polteageist, + [SPECIES_EISCUE_NOICE_FACE] = sAnims_Eiscue, + [SPECIES_INDEEDEE_FEMALE] = sAnims_Indeedee, + [SPECIES_MORPEKO_HANGRY] = sAnims_Morpeko, + [SPECIES_ZACIAN_CROWNED_SWORD] = sAnims_Zacian, + [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sAnims_Zamazenta, + [SPECIES_ETERNATUS_ETERNAMAX] = sAnims_Eternatus, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sAnims_Urshifu, + [SPECIES_ZARUDE_DADA] = sAnims_Zarude, + [SPECIES_CALYREX_ICE_RIDER] = sAnims_Calyrex, + [SPECIES_CALYREX_SHADOW_RIDER] = sAnims_Calyrex, + [SPECIES_ENAMORUS_THERIAN] = sAnims_EnamorusTherian, + [SPECIES_BASCULEGION_FEMALE] = sAnims_Basculegion, + [SPECIES_URSALUNA_BLOODMOON] = sAnims_UrsalunaBloodmoon, #endif - [SPECIES_EGG] = sAnims_Egg, + [SPECIES_VENUSAUR_GIGANTAMAX] = sAnims_VenusaurGigantamax, + [SPECIES_CHARIZARD_GIGANTAMAX] = sAnims_CharizardGigantamax, + [SPECIES_BLASTOISE_GIGANTAMAX] = sAnims_BlastoiseGigantamax, + [SPECIES_BUTTERFREE_GIGANTAMAX] = sAnims_ButterfreeGigantamax, + [SPECIES_PIKACHU_GIGANTAMAX] = sAnims_PikachuGigantamax, + [SPECIES_MEOWTH_GIGANTAMAX] = sAnims_MeowthGigantamax, + [SPECIES_MACHAMP_GIGANTAMAX] = sAnims_MachampGigantamax, + [SPECIES_GENGAR_GIGANTAMAX] = sAnims_GengarGigantamax, + [SPECIES_KINGLER_GIGANTAMAX] = sAnims_KinglerGigantamax, + [SPECIES_LAPRAS_GIGANTAMAX] = sAnims_LaprasGigantamax, + [SPECIES_EEVEE_GIGANTAMAX] = sAnims_EeveeGigantamax, + [SPECIES_SNORLAX_GIGANTAMAX] = sAnims_SnorlaxGigantamax, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_GARBODOR_GIGANTAMAX] = sAnims_GarbodorGigantamax, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_MELMETAL_GIGANTAMAX] = sAnims_MelmetalGigantamax, +#endif +#if P_GEN_8_POKEMON == TRUE + [SPECIES_RILLABOOM_GIGANTAMAX] = sAnims_RillaboomGigantamax, + [SPECIES_CINDERACE_GIGANTAMAX] = sAnims_CinderaceGigantamax, + [SPECIES_INTELEON_GIGANTAMAX] = sAnims_InteleonGigantamax, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = sAnims_CorviknightGigantamax, + [SPECIES_ORBEETLE_GIGANTAMAX] = sAnims_OrbeetleGigantamax, + [SPECIES_DREDNAW_GIGANTAMAX] = sAnims_DrednawGigantamax, + [SPECIES_COALOSSAL_GIGANTAMAX] = sAnims_CoalossalGigantamax, + [SPECIES_FLAPPLE_GIGANTAMAX] = sAnims_FlappleGigantamax, + [SPECIES_APPLETUN_GIGANTAMAX] = sAnims_AppletunGigantamax, + [SPECIES_SANDACONDA_GIGANTAMAX] = sAnims_SandacondaGigantamax, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = sAnims_ToxtricityGigantamax, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = sAnims_ToxtricityGigantamax, + [SPECIES_CENTISKORCH_GIGANTAMAX] = sAnims_CentiskorchGigantamax, + [SPECIES_HATTERENE_GIGANTAMAX] = sAnims_HattereneGigantamax, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = sAnims_GrimmsnarlGigantamax, + [SPECIES_ALCREMIE_GIGANTAMAX] = sAnims_AlcremieGigantamax, + [SPECIES_COPPERAJAH_GIGANTAMAX] = sAnims_CopperajahGigantamax, + [SPECIES_DURALUDON_GIGANTAMAX] = sAnims_DuraludonGigantamax, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = sAnims_UrshifuSingleStrikeStyleGigantamax, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = sAnims_UrshifuRapidStrikeStyleGigantamax, +#endif + [SPECIES_EGG] = sAnims_Egg, }; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index 897ce63308..9daab74fe8 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -133,6 +133,9 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_MAGMAR] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_PINSIR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, [SPECIES_TAUROS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, [SPECIES_MAGIKARP] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, [SPECIES_GYARADOS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_LAPRAS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, @@ -199,6 +202,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_SUNFLORA] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 8 }, [SPECIES_YANMA] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 14 }, [SPECIES_WOOPER] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 16 }, + [SPECIES_WOOPER_PALDEAN] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 12 }, [SPECIES_QUAGSIRE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_ESPEON] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 9 }, [SPECIES_UMBREON] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, @@ -364,7 +368,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_ARON] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, [SPECIES_LAIRON] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_AGGRON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_CASTFORM] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 17 }, + [SPECIES_CASTFORM_NORMAL] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 17 }, [SPECIES_VOLBEAT] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 8 }, [SPECIES_ILLUMISE] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 10 }, [SPECIES_LILEEP] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, @@ -389,7 +393,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_LATIAS] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, [SPECIES_LATIOS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_JIRACHI] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 13 }, - [SPECIES_DEOXYS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DEOXYS_NORMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CHIMECHO] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, @@ -417,8 +421,8 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_RAMPARDOS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_SHIELDON] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_BASTIODON] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, - [SPECIES_BURMY] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 13 }, - [SPECIES_WORMADAM] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 10 }, + [SPECIES_BURMY_PLANT_CLOAK] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 13 }, + [SPECIES_WORMADAM_PLANT_CLOAK] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 10 }, [SPECIES_MOTHIM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, [SPECIES_COMBEE] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 16 }, [SPECIES_VESPIQUEN] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, @@ -426,9 +430,9 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_BUIZEL] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 10 }, [SPECIES_FLOATZEL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_CHERUBI] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 16 }, - [SPECIES_CHERRIM] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 8 }, - [SPECIES_SHELLOS] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, - [SPECIES_GASTRODON] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 8 }, + [SPECIES_CHERRIM_OVERCAST] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 8 }, + [SPECIES_SHELLOS_WEST_SEA] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, + [SPECIES_GASTRODON_WEST_SEA] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 8 }, [SPECIES_AMBIPOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_DRIFLOON] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 7 }, [SPECIES_DRIFBLIM] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, @@ -492,13 +496,13 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_PALKIA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_HEATRAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_REGIGIGAS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, - [SPECIES_GIRATINA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GIRATINA_ALTERED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CRESSELIA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_PHIONE] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 8 }, [SPECIES_MANAPHY] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 10 }, [SPECIES_DARKRAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_SHAYMIN] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 16 }, - [SPECIES_ARCEUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SHAYMIN_LAND] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 16 }, + [SPECIES_ARCEUS_NORMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 10 }, @@ -557,12 +561,12 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_WHIMSICOTT] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_PETILIL] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 12 }, [SPECIES_LILLIGANT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, - [SPECIES_BASCULIN] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 13 }, + [SPECIES_BASCULIN_RED_STRIPED] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 13 }, [SPECIES_SANDILE] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 18 }, [SPECIES_KROKOROK] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_KROOKODILE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_DARUMAKA] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, - [SPECIES_DARMANITAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, + [SPECIES_DARMANITAN_STANDARD_MODE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_MARACTUS] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_DWEBBLE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_CRUSTLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, @@ -592,8 +596,8 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_VANILLITE] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, [SPECIES_VANILLISH] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 5 }, [SPECIES_VANILLUXE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 4 }, - [SPECIES_DEERLING] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, - [SPECIES_SAWSBUCK] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_DEERLING_SPRING] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, + [SPECIES_SAWSBUCK_SPRING] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_EMOLGA] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 17 }, [SPECIES_KARRABLAST] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 13 }, [SPECIES_ESCAVALIER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -648,18 +652,18 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_COBALION] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, [SPECIES_TERRAKION] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_VIRIZION] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - [SPECIES_TORNADUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, - [SPECIES_THUNDURUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_TORNADUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_THUNDURUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_RESHIRAM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_ZEKROM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_LANDORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_LANDORUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_KYUREM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, - [SPECIES_KELDEO] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, - [SPECIES_MELOETTA] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, + [SPECIES_KELDEO_ORDINARY] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, + [SPECIES_MELOETTA_ARIA] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, [SPECIES_GENESECT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, #endif #if P_GEN_6_POKEMON == TRUE - [SPECIES_CHESPIN] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 10 }, + [SPECIES_CHESPIN] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 5 }, [SPECIES_QUILLADIN] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, [SPECIES_CHESNAUGHT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_FENNEKIN] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 10 }, @@ -675,22 +679,22 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_TALONFLAME] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_SCATTERBUG] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 13 }, [SPECIES_SPEWPA] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - [SPECIES_VIVILLON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_VIVILLON_ICY_SNOW] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_LITLEO] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 10 }, [SPECIES_PYROAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_FLABEBE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, - [SPECIES_FLOETTE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, - [SPECIES_FLORGES] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FLABEBE_RED_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, + [SPECIES_FLOETTE_RED_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, + [SPECIES_FLORGES_RED_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SKIDDO] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, [SPECIES_GOGOAT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_PANCHAM] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 12 }, [SPECIES_PANGORO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_FURFROU] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, + [SPECIES_FURFROU_NATURAL] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_ESPURR] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 10 }, - [SPECIES_MEOWSTIC] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, + [SPECIES_MEOWSTIC_MALE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_HONEDGE] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_DOUBLADE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, - [SPECIES_AEGISLASH] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_AEGISLASH_SHIELD] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_SPRITZEE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 12 }, [SPECIES_AROMATISSE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, [SPECIES_SWIRLIX] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, @@ -707,7 +711,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_HELIOLISK] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_TYRUNT] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, [SPECIES_TYRANTRUM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_AMAURA] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 8 }, + [SPECIES_AMAURA] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 0 }, [SPECIES_AURORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SYLVEON] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 4 }, [SPECIES_HAWLUCHA] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, @@ -719,32 +723,32 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_KLEFKI] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 4 }, [SPECIES_PHANTUMP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, [SPECIES_TREVENANT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, - [SPECIES_PUMPKABOO] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, - [SPECIES_GOURGEIST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_PUMPKABOO_AVERAGE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 13 }, + [SPECIES_GOURGEIST_AVERAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_BERGMITE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_AVALUGG] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, [SPECIES_NOIBAT] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, [SPECIES_NOIVERN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_XERNEAS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_XERNEAS_NEUTRAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_YVELTAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_ZYGARDE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ZYGARDE_50_AURA_BREAK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_DIANCIE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 1 }, - [SPECIES_HOOPA] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, + [SPECIES_HOOPA_CONFINED] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, [SPECIES_VOLCANION] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_7_POKEMON == TRUE - [SPECIES_ROWLET] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 12 }, - [SPECIES_DARTRIX] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 8 }, - [SPECIES_DECIDUEYE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, + [SPECIES_ROWLET] = { .size = MON_COORDS_SIZE(31, 37), .y_offset = 12 }, + [SPECIES_DARTRIX] = { .size = MON_COORDS_SIZE(34, 47), .y_offset = 8 }, + [SPECIES_DECIDUEYE] = { .size = MON_COORDS_SIZE(45, 64), .y_offset = 0 }, [SPECIES_LITTEN] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, [SPECIES_TORRACAT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_INCINEROAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_POPPLIO] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, [SPECIES_BRIONNE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_PRIMARINA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_PIKIPEK] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - [SPECIES_TRUMBEAK] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, - [SPECIES_TOUCANNON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_PIKIPEK] = { .size = MON_COORDS_SIZE(29, 40), .y_offset = 10 }, + [SPECIES_TRUMBEAK] = { .size = MON_COORDS_SIZE(44, 53), .y_offset = 4 }, + [SPECIES_TOUCANNON] = { .size = MON_COORDS_SIZE(59, 59), .y_offset = 2 }, [SPECIES_YUNGOOS] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 12 }, [SPECIES_GUMSHOOS] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, [SPECIES_GRUBBIN] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 17 }, @@ -752,12 +756,12 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_VIKAVOLT] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, [SPECIES_CRABRAWLER] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_CRABOMINABLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_ORICORIO] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, - [SPECIES_CUTIEFLY] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 16 }, - [SPECIES_RIBOMBEE] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, - [SPECIES_ROCKRUFF] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - [SPECIES_LYCANROC] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 6 }, - [SPECIES_WISHIWASHI] = { .size = MON_COORDS_SIZE(40, 24), .y_offset = 15 }, + [SPECIES_ORICORIO_BAILE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, + [SPECIES_CUTIEFLY] = { .size = MON_COORDS_SIZE(33, 35), .y_offset = 16 }, + [SPECIES_RIBOMBEE] = { .size = MON_COORDS_SIZE(32, 47), .y_offset = 5 }, + [SPECIES_ROCKRUFF] = { .size = MON_COORDS_SIZE(37, 39), .y_offset = 11 }, + [SPECIES_LYCANROC_MIDDAY] = { .size = MON_COORDS_SIZE(57, 53), .y_offset = 6 }, + [SPECIES_WISHIWASHI_SOLO] = { .size = MON_COORDS_SIZE(40, 24), .y_offset = 15 }, [SPECIES_MAREANIE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_TOXAPEX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_MUDBRAY] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 7 }, @@ -777,25 +781,25 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_TSAREENA] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, [SPECIES_COMFEY] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_ORANGURU] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, - [SPECIES_PASSIMIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_PASSIMIAN] = { .size = MON_COORDS_SIZE(57, 60), .y_offset = 2 }, [SPECIES_WIMPOD] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_GOLISOPOD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SANDYGAST] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, [SPECIES_PALOSSAND] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_PYUKUMUKU] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_TYPE_NULL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - [SPECIES_SILVALLY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_MINIOR] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, + [SPECIES_SILVALLY_NORMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MINIOR_METEOR_RED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_KOMALA] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, [SPECIES_TURTONATOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_TOGEDEMARU] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 12 }, - [SPECIES_MIMIKYU] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, + [SPECIES_TOGEDEMARU] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 5 }, + [SPECIES_MIMIKYU_DISGUISED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, [SPECIES_BRUXISH] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, [SPECIES_DRAMPA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_DHELMISE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 1 }, - [SPECIES_JANGMO_O] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 8 }, - [SPECIES_HAKAMO_O] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, - [SPECIES_KOMMO_O] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_JANGMO_O] = { .size = MON_COORDS_SIZE(36, 43), .y_offset = 5 }, + [SPECIES_HAKAMO_O] = { .size = MON_COORDS_SIZE(53, 61), .y_offset = 1 }, + [SPECIES_KOMMO_O] = { .size = MON_COORDS_SIZE(63, 63), .y_offset = 0 }, [SPECIES_TAPU_KOKO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_TAPU_LELE] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_TAPU_BULU] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, @@ -862,13 +866,13 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_ARROKUDA] = { .size = MON_COORDS_SIZE(56, 32), .y_offset = 13 }, [SPECIES_BARRASKEWDA] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_TOXEL] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - [SPECIES_TOXTRICITY] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 1 }, + [SPECIES_TOXTRICITY_AMPED] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 1 }, [SPECIES_SIZZLIPEDE] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 17 }, [SPECIES_CENTISKORCH] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_CLOBBOPUS] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 15 }, [SPECIES_GRAPPLOCT] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 5 }, - [SPECIES_SINISTEA] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 17 }, - [SPECIES_POLTEAGEIST] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, + [SPECIES_SINISTEA_PHONY] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 17 }, + [SPECIES_POLTEAGEIST_PHONY] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, [SPECIES_HATENNA] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 12 }, [SPECIES_HATTREM] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_HATTERENE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 0 }, @@ -882,15 +886,77 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_MR_RIME] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 4 }, [SPECIES_RUNERIGUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_MILCERY] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, - [SPECIES_ALCREMIE] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_FALINKS] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_PINCURCHIN] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_SNOM] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 20 }, [SPECIES_FROSMOTH] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_STONJOURNER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - [SPECIES_EISCUE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, - [SPECIES_INDEEDEE] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 9 }, - [SPECIES_MORPEKO] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, + [SPECIES_EISCUE_ICE_FACE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, + [SPECIES_INDEEDEE_MALE] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 9 }, + [SPECIES_MORPEKO_FULL_BELLY] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, [SPECIES_CUFANT] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, [SPECIES_COPPERAJAH] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_DRACOZOLT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, @@ -901,11 +967,11 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_DREEPY] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_DRAKLOAK] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_DRAGAPULT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - [SPECIES_ZACIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - [SPECIES_ZAMAZENTA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ETERNATUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, [SPECIES_KUBFU] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 8 }, - [SPECIES_URSHIFU] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_ZARUDE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_REGIELEKI] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 5 }, [SPECIES_REGIDRAGO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, @@ -915,10 +981,143 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_WYRDEER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KLEAVOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_URSALUNA] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 4 }, - [SPECIES_BASCULEGION] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_BASCULEGION_MALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SNEASLER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_OVERQWIL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ENAMORUS_INCARNATE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_FLORAGATO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MEOWSCARADA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FUECOCO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_CROCALOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_SKELEDIRGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_QUAXLY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_QUAXWELL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_QUAQUAVAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_LECHONK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_OINKOLOGNE_MALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_OINKOLOGNE_FEMALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_TAROUNTULA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_SPIDOPS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_NYMBLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_LOKIX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_PAWMI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_PAWMO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_PAWMOT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TANDEMAUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_FIDOUGH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_DACHSBUN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_SMOLIV] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_DOLLIV] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_ARBOLIVA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_NACLI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_NACLSTACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_GARGANACL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CHARCADET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_ARMAROUGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CERULEDGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TADBULB] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_BELLIBOLT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_WATTREL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 11 }, + [SPECIES_KILOWATTREL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_MASCHIFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_MABOSSTIFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SHROODLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 15 }, + [SPECIES_GRAFAIAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 9 }, + [SPECIES_BRAMBLIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_BRAMBLEGHAST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_TOEDSCOOL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TOEDSCRUEL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_KLAWF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_CAPSAKID] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_SCOVILLAIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_RELLOR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_RABSCA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FLITTLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_ESPATHRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TINKATINK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TINKATUFF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TINKATON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_WIGLETT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 17 }, + [SPECIES_WUGTRIO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_BOMBIRDIER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FINIZEN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_PALAFIN_ZERO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_PALAFIN_HERO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_VAROOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 13 }, + [SPECIES_REVAVROOM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_CYCLIZAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ORTHWORM] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GLIMMET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GLIMMORA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GREAVARD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_HOUNDSTONE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FLAMIGO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CETODDLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 14 }, + [SPECIES_CETITAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_VELUZA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DONDOZO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TATSUGIRI_CURLY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_TATSUGIRI_DROOPY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_TATSUGIRI_STRETCHY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 12 }, + [SPECIES_ANNIHILAPE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CLODSIRE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_FARIGIRAF] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_KINGAMBIT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GREAT_TUSK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_SCREAM_TAIL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_BRUTE_BONNET] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_FLUTTER_MANE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SLITHER_WING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SANDY_SHOCKS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_TREADS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_BUNDLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_IRON_HANDS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_IRON_JUGULIS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_MOTH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_THORNS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FRIGIBAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_ARCTIBAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_BAXCALIBUR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GIMMIGHOUL_CHEST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_GIMMIGHOUL_ROAMING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 7 }, + [SPECIES_GHOLDENGO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_WO_CHIEN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CHIEN_PAO] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TING_LU] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CHI_YU] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ROARING_MOON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_VALIANT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_KORAIDON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MIRAIDON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_WALKING_WAKE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_IRON_LEAVES] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DIPPLIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_POLTCHAGEIST_ARTISAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SINISTCHA_UNREMARKABLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_SINISTCHA_MASTERPIECE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OKIDOGI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MUNKIDORI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FEZANDIPITI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_TEAL_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_WELLSPRING_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_CORNERSTONE_MASK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_TEAL_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif // Megas [SPECIES_VENUSAUR_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, @@ -1015,7 +1214,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_LINOONE_GALARIAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 13 }, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, - [SPECIES_DARMANITAN_GALARIAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_YAMASK_GALARIAN] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 13 }, [SPECIES_STUNFISK_GALARIAN] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, #endif @@ -1147,7 +1346,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = [SPECIES_BASCULIN_WHITE_STRIPED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 10 }, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, // Deerling [SPECIES_DEERLING_SUMMER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, [SPECIES_DEERLING_AUTUMN] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, @@ -1238,7 +1437,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = // Xerneas [SPECIES_XERNEAS_ACTIVE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, // Zygarde - [SPECIES_ZYGARDE_10] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, + [SPECIES_ZYGARDE_10_AURA_BREAK] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ZYGARDE_COMPLETE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1253,8 +1452,8 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = // Rockruff [SPECIES_ROCKRUFF_OWN_TEMPO] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, // Lycanroc - [SPECIES_LYCANROC_MIDNIGHT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, - [SPECIES_LYCANROC_DUSK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_LYCANROC_MIDNIGHT] = { .size = MON_COORDS_SIZE(56, 61), .y_offset = 0 }, + [SPECIES_LYCANROC_DUSK] = { .size = MON_COORDS_SIZE(57, 58), .y_offset = 6 }, // Wishiwashi [SPECIES_WISHIWASHI_SCHOOL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, // Silvally @@ -1309,14 +1508,6 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_LEMON_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_SALTED_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, // Indeedee @@ -1336,9 +1527,45 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES + 1] = // Calyrex [SPECIES_CALYREX_ICE_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CALYREX_SHADOW_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + // Enamorus [SPECIES_ENAMORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, // Basculegion [SPECIES_BASCULEGION_FEMALE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_CHARIZARD_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_BLASTOISE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, + [SPECIES_BUTTERFREE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 10 }, + [SPECIES_PIKACHU_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, + [SPECIES_MEOWTH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_MACHAMP_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GENGAR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 8 }, + [SPECIES_KINGLER_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_LAPRAS_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_EEVEE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 6 }, + [SPECIES_SNORLAX_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GARBODOR_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_MELMETAL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_RILLABOOM_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CINDERACE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_INTELEON_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, + [SPECIES_ORBEETLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DREDNAW_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_COALOSSAL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_FLAPPLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_APPLETUN_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, + [SPECIES_SANDACONDA_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_CENTISKORCH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 5 }, + [SPECIES_HATTERENE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_ALCREMIE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_COPPERAJAH_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_DURALUDON_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif // Egg [SPECIES_EGG] = { .size = MON_COORDS_SIZE(24, 24), .y_offset = 20 }, diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 27fefa9507..e865738970 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -129,6 +129,9 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(MAGMAR, gMonFrontPic_Magmar), SPECIES_SPRITE(PINSIR, gMonFrontPic_Pinsir), SPECIES_SPRITE(TAUROS, gMonFrontPic_Tauros), + SPECIES_SPRITE(TAUROS_PALDEAN_COMBAT_BREED, gMonFrontPic_TaurosPaldeanCombatBreed), + SPECIES_SPRITE(TAUROS_PALDEAN_BLAZE_BREED, gMonFrontPic_TaurosPaldeanBlazeBreed), + SPECIES_SPRITE(TAUROS_PALDEAN_AQUA_BREED, gMonFrontPic_TaurosPaldeanAquaBreed), SPECIES_SPRITE(MAGIKARP, gMonFrontPic_Magikarp), SPECIES_SPRITE(GYARADOS, gMonFrontPic_Gyarados), SPECIES_SPRITE(LAPRAS, gMonFrontPic_Lapras), @@ -195,6 +198,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(SUNFLORA, gMonFrontPic_Sunflora), SPECIES_SPRITE(YANMA, gMonFrontPic_Yanma), SPECIES_SPRITE(WOOPER, gMonFrontPic_Wooper), + SPECIES_SPRITE(WOOPER_PALDEAN, gMonFrontPic_WooperPaldean), SPECIES_SPRITE(QUAGSIRE, gMonFrontPic_Quagsire), SPECIES_SPRITE(ESPEON, gMonFrontPic_Espeon), SPECIES_SPRITE(UMBREON, gMonFrontPic_Umbreon), @@ -360,7 +364,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ARON, gMonFrontPic_Aron), SPECIES_SPRITE(LAIRON, gMonFrontPic_Lairon), SPECIES_SPRITE(AGGRON, gMonFrontPic_Aggron), - SPECIES_SPRITE(CASTFORM, gMonFrontPic_Castform), + SPECIES_SPRITE(CASTFORM_NORMAL, gMonFrontPic_CastformNormal), SPECIES_SPRITE(VOLBEAT, gMonFrontPic_Volbeat), SPECIES_SPRITE(ILLUMISE, gMonFrontPic_Illumise), SPECIES_SPRITE(LILEEP, gMonFrontPic_Lileep), @@ -385,7 +389,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(LATIAS, gMonFrontPic_Latias), SPECIES_SPRITE(LATIOS, gMonFrontPic_Latios), SPECIES_SPRITE(JIRACHI, gMonFrontPic_Jirachi), - SPECIES_SPRITE(DEOXYS, gMonFrontPic_Deoxys), + SPECIES_SPRITE(DEOXYS_NORMAL, gMonFrontPic_DeoxysNormal), SPECIES_SPRITE(CHIMECHO, gMonFrontPic_Chimecho), #if P_GEN_4_POKEMON == TRUE SPECIES_SPRITE(TURTWIG, gMonFrontPic_Turtwig), @@ -413,8 +417,8 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(RAMPARDOS, gMonFrontPic_Rampardos), SPECIES_SPRITE(SHIELDON, gMonFrontPic_Shieldon), SPECIES_SPRITE(BASTIODON, gMonFrontPic_Bastiodon), - SPECIES_SPRITE(BURMY, gMonFrontPic_Burmy), - SPECIES_SPRITE(WORMADAM, gMonFrontPic_Wormadam), + SPECIES_SPRITE(BURMY_PLANT_CLOAK, gMonFrontPic_BurmyPlantCloak), + SPECIES_SPRITE(WORMADAM_PLANT_CLOAK, gMonFrontPic_WormadamPlantCloak), SPECIES_SPRITE(MOTHIM, gMonFrontPic_Mothim), SPECIES_SPRITE(COMBEE, gMonFrontPic_Combee), SPECIES_SPRITE(VESPIQUEN, gMonFrontPic_Vespiquen), @@ -422,9 +426,9 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(BUIZEL, gMonFrontPic_Buizel), SPECIES_SPRITE(FLOATZEL, gMonFrontPic_Floatzel), SPECIES_SPRITE(CHERUBI, gMonFrontPic_Cherubi), - SPECIES_SPRITE(CHERRIM, gMonFrontPic_Cherrim), - SPECIES_SPRITE(SHELLOS, gMonFrontPic_Shellos), - SPECIES_SPRITE(GASTRODON, gMonFrontPic_Gastrodon), + SPECIES_SPRITE(CHERRIM_OVERCAST, gMonFrontPic_CherrimOvercast), + SPECIES_SPRITE(SHELLOS_WEST_SEA, gMonFrontPic_ShellosWestSea), + SPECIES_SPRITE(GASTRODON_WEST_SEA, gMonFrontPic_GastrodonWestSea), SPECIES_SPRITE(AMBIPOM, gMonFrontPic_Ambipom), SPECIES_SPRITE(DRIFLOON, gMonFrontPic_Drifloon), SPECIES_SPRITE(DRIFBLIM, gMonFrontPic_Drifblim), @@ -488,12 +492,12 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(PALKIA, gMonFrontPic_Palkia), SPECIES_SPRITE(HEATRAN, gMonFrontPic_Heatran), SPECIES_SPRITE(REGIGIGAS, gMonFrontPic_Regigigas), - SPECIES_SPRITE(GIRATINA, gMonFrontPic_Giratina), + SPECIES_SPRITE(GIRATINA_ALTERED, gMonFrontPic_GiratinaAltered), SPECIES_SPRITE(CRESSELIA, gMonFrontPic_Cresselia), SPECIES_SPRITE(PHIONE, gMonFrontPic_Phione), SPECIES_SPRITE(MANAPHY, gMonFrontPic_Manaphy), SPECIES_SPRITE(DARKRAI, gMonFrontPic_Darkrai), - SPECIES_SPRITE(SHAYMIN, gMonFrontPic_Shaymin), + SPECIES_SPRITE(SHAYMIN_LAND, gMonFrontPic_ShayminLand), SPECIES_SPRITE(ARCEUS, gMonFrontPic_Arceus), #endif #if P_GEN_5_POKEMON == TRUE @@ -553,12 +557,12 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(WHIMSICOTT, gMonFrontPic_Whimsicott), SPECIES_SPRITE(PETILIL, gMonFrontPic_Petilil), SPECIES_SPRITE(LILLIGANT, gMonFrontPic_Lilligant), - SPECIES_SPRITE(BASCULIN, gMonFrontPic_Basculin), + SPECIES_SPRITE(BASCULIN, gMonFrontPic_BasculinRedStriped), SPECIES_SPRITE(SANDILE, gMonFrontPic_Sandile), SPECIES_SPRITE(KROKOROK, gMonFrontPic_Krokorok), SPECIES_SPRITE(KROOKODILE, gMonFrontPic_Krookodile), SPECIES_SPRITE(DARUMAKA, gMonFrontPic_Darumaka), - SPECIES_SPRITE(DARMANITAN, gMonFrontPic_Darmanitan), + SPECIES_SPRITE(DARMANITAN_STANDARD_MODE, gMonFrontPic_DarmanitanStandardMode), SPECIES_SPRITE(MARACTUS, gMonFrontPic_Maractus), SPECIES_SPRITE(DWEBBLE, gMonFrontPic_Dwebble), SPECIES_SPRITE(CRUSTLE, gMonFrontPic_Crustle), @@ -588,8 +592,8 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(VANILLITE, gMonFrontPic_Vanillite), SPECIES_SPRITE(VANILLISH, gMonFrontPic_Vanillish), SPECIES_SPRITE(VANILLUXE, gMonFrontPic_Vanilluxe), - SPECIES_SPRITE(DEERLING, gMonFrontPic_Deerling), - SPECIES_SPRITE(SAWSBUCK, gMonFrontPic_Sawsbuck), + SPECIES_SPRITE(DEERLING_SPRING, gMonFrontPic_Deerling), + SPECIES_SPRITE(SAWSBUCK_SPRING, gMonFrontPic_SawsbuckSpring), SPECIES_SPRITE(EMOLGA, gMonFrontPic_Emolga), SPECIES_SPRITE(KARRABLAST, gMonFrontPic_Karrablast), SPECIES_SPRITE(ESCAVALIER, gMonFrontPic_Escavalier), @@ -644,14 +648,14 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(COBALION, gMonFrontPic_Cobalion), SPECIES_SPRITE(TERRAKION, gMonFrontPic_Terrakion), SPECIES_SPRITE(VIRIZION, gMonFrontPic_Virizion), - SPECIES_SPRITE(TORNADUS, gMonFrontPic_Tornadus), - SPECIES_SPRITE(THUNDURUS, gMonFrontPic_Thundurus), + SPECIES_SPRITE(TORNADUS_INCARNATE, gMonFrontPic_TornadusIncarnate), + SPECIES_SPRITE(THUNDURUS_INCARNATE, gMonFrontPic_ThundurusIncarnate), SPECIES_SPRITE(RESHIRAM, gMonFrontPic_Reshiram), SPECIES_SPRITE(ZEKROM, gMonFrontPic_Zekrom), - SPECIES_SPRITE(LANDORUS, gMonFrontPic_Landorus), + SPECIES_SPRITE(LANDORUS_INCARNATE, gMonFrontPic_LandorusIncarnate), SPECIES_SPRITE(KYUREM, gMonFrontPic_Kyurem), - SPECIES_SPRITE(KELDEO, gMonFrontPic_Keldeo), - SPECIES_SPRITE(MELOETTA, gMonFrontPic_Meloetta), + SPECIES_SPRITE(KELDEO_ORDINARY, gMonFrontPic_KeldeoOrdinary), + SPECIES_SPRITE(MELOETTA, gMonFrontPic_MeloettaAria), SPECIES_SPRITE(GENESECT, gMonFrontPic_Genesect), #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(TALONFLAME, gMonFrontPic_Talonflame), SPECIES_SPRITE(SCATTERBUG, gMonFrontPic_Scatterbug), SPECIES_SPRITE(SPEWPA, gMonFrontPic_Spewpa), - SPECIES_SPRITE(VIVILLON, gMonFrontPic_Vivillon), + SPECIES_SPRITE(VIVILLON_ICY_SNOW, gMonFrontPic_VivillonIcySnow), SPECIES_SPRITE(LITLEO, gMonFrontPic_Litleo), SPECIES_SPRITE(PYROAR, gMonFrontPic_Pyroar), - SPECIES_SPRITE(FLABEBE, gMonFrontPic_Flabebe), - SPECIES_SPRITE(FLOETTE, gMonFrontPic_Floette), - SPECIES_SPRITE(FLORGES, gMonFrontPic_Florges), + SPECIES_SPRITE(FLABEBE_RED_FLOWER, gMonFrontPic_Flabebe), + SPECIES_SPRITE(FLOETTE_RED_FLOWER, gMonFrontPic_Floette), + SPECIES_SPRITE(FLORGES_RED_FLOWER, gMonFrontPic_Florges), SPECIES_SPRITE(SKIDDO, gMonFrontPic_Skiddo), SPECIES_SPRITE(GOGOAT, gMonFrontPic_Gogoat), SPECIES_SPRITE(PANCHAM, gMonFrontPic_Pancham), SPECIES_SPRITE(PANGORO, gMonFrontPic_Pangoro), - SPECIES_SPRITE(FURFROU, gMonFrontPic_Furfrou), + SPECIES_SPRITE(FURFROU_NATURAL, gMonFrontPic_FurfrouNatural), SPECIES_SPRITE(ESPURR, gMonFrontPic_Espurr), - SPECIES_SPRITE(MEOWSTIC, gMonFrontPic_Meowstic), + SPECIES_SPRITE(MEOWSTIC_MALE, gMonFrontPic_MeowsticMale), SPECIES_SPRITE(HONEDGE, gMonFrontPic_Honedge), SPECIES_SPRITE(DOUBLADE, gMonFrontPic_Doublade), - SPECIES_SPRITE(AEGISLASH, gMonFrontPic_Aegislash), + SPECIES_SPRITE(AEGISLASH_SHIELD, gMonFrontPic_AegislashShield), SPECIES_SPRITE(SPRITZEE, gMonFrontPic_Spritzee), SPECIES_SPRITE(AROMATISSE, gMonFrontPic_Aromatisse), SPECIES_SPRITE(SWIRLIX, gMonFrontPic_Swirlix), @@ -715,17 +719,17 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(KLEFKI, gMonFrontPic_Klefki), SPECIES_SPRITE(PHANTUMP, gMonFrontPic_Phantump), SPECIES_SPRITE(TREVENANT, gMonFrontPic_Trevenant), - SPECIES_SPRITE(PUMPKABOO, gMonFrontPic_Pumpkaboo), - SPECIES_SPRITE(GOURGEIST, gMonFrontPic_Gourgeist), + SPECIES_SPRITE(PUMPKABOO_AVERAGE, gMonFrontPic_PumpkabooAverage), + SPECIES_SPRITE(GOURGEIST_AVERAGE, gMonFrontPic_GourgeistAverage), SPECIES_SPRITE(BERGMITE, gMonFrontPic_Bergmite), SPECIES_SPRITE(AVALUGG, gMonFrontPic_Avalugg), SPECIES_SPRITE(NOIBAT, gMonFrontPic_Noibat), SPECIES_SPRITE(NOIVERN, gMonFrontPic_Noivern), - SPECIES_SPRITE(XERNEAS, gMonFrontPic_Xerneas), + SPECIES_SPRITE(XERNEAS_NEUTRAL, gMonFrontPic_XerneasNeutral), SPECIES_SPRITE(YVELTAL, gMonFrontPic_Yveltal), - SPECIES_SPRITE(ZYGARDE, gMonFrontPic_Zygarde), + SPECIES_SPRITE(ZYGARDE_50_AURA_BREAK, gMonFrontPic_Zygarde50), SPECIES_SPRITE(DIANCIE, gMonFrontPic_Diancie), - SPECIES_SPRITE(HOOPA, gMonFrontPic_Hoopa), + SPECIES_SPRITE(HOOPA_CONFINED, gMonFrontPic_HoopaConfined), SPECIES_SPRITE(VOLCANION, gMonFrontPic_Volcanion), #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(VIKAVOLT, gMonFrontPic_Vikavolt), SPECIES_SPRITE(CRABRAWLER, gMonFrontPic_Crabrawler), SPECIES_SPRITE(CRABOMINABLE, gMonFrontPic_Crabominable), - SPECIES_SPRITE(ORICORIO, gMonFrontPic_Oricorio), + SPECIES_SPRITE(ORICORIO_BAILE, gMonFrontPic_OricorioBaile), SPECIES_SPRITE(CUTIEFLY, gMonFrontPic_Cutiefly), SPECIES_SPRITE(RIBOMBEE, gMonFrontPic_Ribombee), SPECIES_SPRITE(ROCKRUFF, gMonFrontPic_Rockruff), - SPECIES_SPRITE(LYCANROC, gMonFrontPic_Lycanroc), - SPECIES_SPRITE(WISHIWASHI, gMonFrontPic_Wishiwashi), + SPECIES_SPRITE(LYCANROC_MIDDAY, gMonFrontPic_LycanrocMidday), + SPECIES_SPRITE(WISHIWASHI_SOLO, gMonFrontPic_WishiwashiSolo), SPECIES_SPRITE(MAREANIE, gMonFrontPic_Mareanie), SPECIES_SPRITE(TOXAPEX, gMonFrontPic_Toxapex), SPECIES_SPRITE(MUDBRAY, gMonFrontPic_Mudbray), @@ -781,11 +785,11 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(PYUKUMUKU, gMonFrontPic_Pyukumuku), SPECIES_SPRITE(TYPE_NULL, gMonFrontPic_TypeNull), SPECIES_SPRITE(SILVALLY, gMonFrontPic_Silvally), - SPECIES_SPRITE(MINIOR, gMonFrontPic_Minior), + SPECIES_SPRITE(MINIOR_METEOR_RED, gMonFrontPic_MiniorMeteor), SPECIES_SPRITE(KOMALA, gMonFrontPic_Komala), SPECIES_SPRITE(TURTONATOR, gMonFrontPic_Turtonator), SPECIES_SPRITE(TOGEDEMARU, gMonFrontPic_Togedemaru), - SPECIES_SPRITE(MIMIKYU, gMonFrontPic_Mimikyu), + SPECIES_SPRITE(MIMIKYU_DISGUISED, gMonFrontPic_MimikyuDisguised), SPECIES_SPRITE(BRUXISH, gMonFrontPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonFrontPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonFrontPic_Dhelmise), @@ -858,13 +862,13 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ARROKUDA, gMonFrontPic_Arrokuda), SPECIES_SPRITE(BARRASKEWDA, gMonFrontPic_Barraskewda), SPECIES_SPRITE(TOXEL, gMonFrontPic_Toxel), - SPECIES_SPRITE(TOXTRICITY, gMonFrontPic_Toxtricity), + SPECIES_SPRITE(TOXTRICITY_AMPED, gMonFrontPic_ToxtricityAmped), SPECIES_SPRITE(SIZZLIPEDE, gMonFrontPic_Sizzlipede), SPECIES_SPRITE(CENTISKORCH, gMonFrontPic_Centiskorch), SPECIES_SPRITE(CLOBBOPUS, gMonFrontPic_Clobbopus), SPECIES_SPRITE(GRAPPLOCT, gMonFrontPic_Grapploct), - SPECIES_SPRITE(SINISTEA, gMonFrontPic_Sinistea), - SPECIES_SPRITE(POLTEAGEIST, gMonFrontPic_Polteageist), + SPECIES_SPRITE(SINISTEA_PHONY, gMonFrontPic_Sinistea), + SPECIES_SPRITE(POLTEAGEIST_PHONY, gMonFrontPic_Polteageist), SPECIES_SPRITE(HATENNA, gMonFrontPic_Hatenna), SPECIES_SPRITE(HATTREM, gMonFrontPic_Hattrem), SPECIES_SPRITE(HATTERENE, gMonFrontPic_Hatterene), @@ -878,15 +882,77 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(MR_RIME, gMonFrontPic_MrRime), SPECIES_SPRITE(RUNERIGUS, gMonFrontPic_Runerigus), SPECIES_SPRITE(MILCERY, gMonFrontPic_Milcery), - SPECIES_SPRITE(ALCREMIE, gMonFrontPic_Alcremie), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_VANILLA_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RUBY_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_MATCHA_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_MINT_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_LEMON_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_SALTED_CREAM, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RUBY_SWIRL, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, gMonFrontPic_AlcremieStrawberry), + SPECIES_SPRITE(ALCREMIE_BERRY_VANILLA_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RUBY_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_MATCHA_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_MINT_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_LEMON_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_SALTED_CREAM, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RUBY_SWIRL, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_CARAMEL_SWIRL, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_BERRY_RAINBOW_SWIRL, gMonFrontPic_AlcremieBerry), + SPECIES_SPRITE(ALCREMIE_LOVE_VANILLA_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RUBY_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_MATCHA_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_MINT_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_LEMON_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_SALTED_CREAM, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RUBY_SWIRL, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_CARAMEL_SWIRL, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_LOVE_RAINBOW_SWIRL, gMonFrontPic_AlcremieLove), + SPECIES_SPRITE(ALCREMIE_STAR_VANILLA_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RUBY_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_MATCHA_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_MINT_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_LEMON_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_SALTED_CREAM, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RUBY_SWIRL, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_CARAMEL_SWIRL, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_STAR_RAINBOW_SWIRL, gMonFrontPic_AlcremieStar), + SPECIES_SPRITE(ALCREMIE_CLOVER_VANILLA_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RUBY_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_MATCHA_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_MINT_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_LEMON_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_SALTED_CREAM, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RUBY_SWIRL, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_CARAMEL_SWIRL, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_CLOVER_RAINBOW_SWIRL, gMonFrontPic_AlcremieClover), + SPECIES_SPRITE(ALCREMIE_FLOWER_VANILLA_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RUBY_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_MATCHA_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_MINT_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_LEMON_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_SALTED_CREAM, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RUBY_SWIRL, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_CARAMEL_SWIRL, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_FLOWER_RAINBOW_SWIRL, gMonFrontPic_AlcremieFlower), + SPECIES_SPRITE(ALCREMIE_RIBBON_VANILLA_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RUBY_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_MATCHA_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_MINT_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_LEMON_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_SALTED_CREAM, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RUBY_SWIRL, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_CARAMEL_SWIRL, gMonFrontPic_AlcremieRibbon), + SPECIES_SPRITE(ALCREMIE_RIBBON_RAINBOW_SWIRL, gMonFrontPic_AlcremieRibbon), SPECIES_SPRITE(FALINKS, gMonFrontPic_Falinks), SPECIES_SPRITE(PINCURCHIN, gMonFrontPic_Pincurchin), SPECIES_SPRITE(SNOM, gMonFrontPic_Snom), SPECIES_SPRITE(FROSMOTH, gMonFrontPic_Frosmoth), SPECIES_SPRITE(STONJOURNER, gMonFrontPic_Stonjourner), - SPECIES_SPRITE(EISCUE, gMonFrontPic_Eiscue), - SPECIES_SPRITE(INDEEDEE, gMonFrontPic_Indeedee), - SPECIES_SPRITE(MORPEKO, gMonFrontPic_Morpeko), + SPECIES_SPRITE(EISCUE_ICE_FACE, gMonFrontPic_EiscueFace), + SPECIES_SPRITE(INDEEDEE_MALE, gMonFrontPic_IndeedeeMale), + SPECIES_SPRITE(MORPEKO_FULL_BELLY, gMonFrontPic_MorpekoFullBelly), SPECIES_SPRITE(CUFANT, gMonFrontPic_Cufant), SPECIES_SPRITE(COPPERAJAH, gMonFrontPic_Copperajah), SPECIES_SPRITE(DRACOZOLT, gMonFrontPic_Dracozolt), @@ -897,11 +963,11 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(DREEPY, gMonFrontPic_Dreepy), SPECIES_SPRITE(DRAKLOAK, gMonFrontPic_Drakloak), SPECIES_SPRITE(DRAGAPULT, gMonFrontPic_Dragapult), - SPECIES_SPRITE(ZACIAN, gMonFrontPic_Zacian), - SPECIES_SPRITE(ZAMAZENTA, gMonFrontPic_Zamazenta), + SPECIES_SPRITE(ZACIAN_HERO_OF_MANY_BATTLES, gMonFrontPic_ZacianHeroOfManyBattles), + SPECIES_SPRITE(ZAMAZENTA_HERO_OF_MANY_BATTLES, gMonFrontPic_ZamazentaHeroOfManyBattles), SPECIES_SPRITE(ETERNATUS, gMonFrontPic_Eternatus), SPECIES_SPRITE(KUBFU, gMonFrontPic_Kubfu), - SPECIES_SPRITE(URSHIFU, gMonFrontPic_Urshifu), + SPECIES_SPRITE(URSHIFU_SINGLE_STRIKE_STYLE, gMonFrontPic_UrshifuSingleStrikeStyle), SPECIES_SPRITE(ZARUDE, gMonFrontPic_Zarude), SPECIES_SPRITE(REGIELEKI, gMonFrontPic_Regieleki), SPECIES_SPRITE(REGIDRAGO, gMonFrontPic_Regidrago), @@ -911,10 +977,11 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(WYRDEER, gMonFrontPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonFrontPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonFrontPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_Basculegion), + SPECIES_SPRITE(URSALUNA_BLOODMOON, gMonFrontPic_UrsalunaBloodmoon), + SPECIES_SPRITE(BASCULEGION_MALE, gMonFrontPic_BasculegionMale), SPECIES_SPRITE(SNEASLER, gMonFrontPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonFrontPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), + SPECIES_SPRITE(ENAMORUS_INCARNATE, gMonFrontPic_EnamorusIncarnate), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonFrontPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonFrontPic_CharizardMegaX), @@ -1010,7 +1077,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(LINOONE_GALARIAN, gMonFrontPic_LinooneGalarian), #if P_GEN_5_POKEMON == TRUE SPECIES_SPRITE(DARUMAKA_GALARIAN, gMonFrontPic_DarumakaGalarian), - SPECIES_SPRITE(DARMANITAN_GALARIAN, gMonFrontPic_DarmanitanGalarian), + SPECIES_SPRITE(DARMANITAN_GALARIAN_STANDARD_MODE, gMonFrontPic_DarmanitanGalarianStandardMode), SPECIES_SPRITE(YAMASK_GALARIAN, gMonFrontPic_YamaskGalarian), SPECIES_SPRITE(STUNFISK_GALARIAN, gMonFrontPic_StunfiskGalarian), #endif @@ -1140,7 +1207,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(BASCULIN_WHITE_STRIPED, gMonFrontPic_BasculinWhiteStriped), SPECIES_SPRITE(DARMANITAN_ZEN_MODE, gMonFrontPic_DarmanitanZenMode), - SPECIES_SPRITE(DARMANITAN_ZEN_MODE_GALARIAN, gMonFrontPic_DarmanitanZenModeGalarian), + SPECIES_SPRITE(DARMANITAN_GALARIAN_ZEN_MODE, gMonFrontPic_DarmanitanGalarianZenMode), SPECIES_SPRITE(DEERLING_SUMMER, gMonFrontPic_Deerling), SPECIES_SPRITE(DEERLING_AUTUMN, gMonFrontPic_Deerling), @@ -1233,7 +1300,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ZYGARDE_10, gMonFrontPic_Zygarde10), SPECIES_SPRITE(ZYGARDE_10_POWER_CONSTRUCT, gMonFrontPic_Zygarde10), - SPECIES_SPRITE(ZYGARDE_50_POWER_CONSTRUCT, gMonFrontPic_Zygarde), + SPECIES_SPRITE(ZYGARDE_50_POWER_CONSTRUCT, gMonFrontPic_Zygarde50), SPECIES_SPRITE(ZYGARDE_COMPLETE, gMonFrontPic_ZygardeComplete), SPECIES_SPRITE(HOOPA_UNBOUND, gMonFrontPic_HoopaUnbound), @@ -1269,12 +1336,12 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(SILVALLY_DARK, gMonFrontPic_Silvally), SPECIES_SPRITE(SILVALLY_FAIRY, gMonFrontPic_Silvally), - SPECIES_SPRITE(MINIOR_METEOR_ORANGE, gMonFrontPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_YELLOW, gMonFrontPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_GREEN, gMonFrontPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_BLUE, gMonFrontPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_INDIGO, gMonFrontPic_Minior), - SPECIES_SPRITE(MINIOR_METEOR_VIOLET, gMonFrontPic_Minior), + SPECIES_SPRITE(MINIOR_METEOR_ORANGE, gMonFrontPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_YELLOW, gMonFrontPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_GREEN, gMonFrontPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_BLUE, gMonFrontPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_INDIGO, gMonFrontPic_MiniorMeteor), + SPECIES_SPRITE(MINIOR_METEOR_VIOLET, gMonFrontPic_MiniorMeteor), SPECIES_SPRITE(MINIOR_CORE_RED, gMonFrontPic_MiniorCore), SPECIES_SPRITE(MINIOR_CORE_ORANGE, gMonFrontPic_MiniorCore), SPECIES_SPRITE(MINIOR_CORE_YELLOW, gMonFrontPic_MiniorCore), @@ -1302,15 +1369,6 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(POLTEAGEIST_ANTIQUE, gMonFrontPic_Polteageist), - SPECIES_SPRITE(ALCREMIE_RUBY_CREAM, gMonFrontPic_AlcremieRubyCream), - SPECIES_SPRITE(ALCREMIE_MATCHA_CREAM, gMonFrontPic_AlcremieMatchaCream), - SPECIES_SPRITE(ALCREMIE_MINT_CREAM, gMonFrontPic_AlcremieMintCream), - SPECIES_SPRITE(ALCREMIE_LEMON_CREAM, gMonFrontPic_AlcremieLemonCream), - SPECIES_SPRITE(ALCREMIE_SALTED_CREAM, gMonFrontPic_AlcremieSaltedCream), - SPECIES_SPRITE(ALCREMIE_RUBY_SWIRL, gMonFrontPic_AlcremieRubySwirl), - SPECIES_SPRITE(ALCREMIE_CARAMEL_SWIRL, gMonFrontPic_AlcremieCaramelSwirl), - SPECIES_SPRITE(ALCREMIE_RAINBOW_SWIRL, gMonFrontPic_AlcremieRainbowSwirl), - SPECIES_SPRITE(EISCUE_NOICE_FACE, gMonFrontPic_EiscueNoiceFace), SPECIES_SPRITE(INDEEDEE_FEMALE, gMonFrontPic_IndeedeeFemale), @@ -1333,6 +1391,175 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES + 1] = SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_EnamorusTherian), SPECIES_SPRITE(BASCULEGION_FEMALE, gMonFrontPic_BasculegionFemale), + + // Gigantamax Forms + SPECIES_SPRITE(VENUSAUR_GIGANTAMAX, gMonFrontPic_VenusaurGigantamax), + SPECIES_SPRITE(CHARIZARD_GIGANTAMAX, gMonFrontPic_CharizardGigantamax), + SPECIES_SPRITE(BLASTOISE_GIGANTAMAX, gMonFrontPic_BlastoiseGigantamax), + SPECIES_SPRITE(BUTTERFREE_GIGANTAMAX, gMonFrontPic_ButterfreeGigantamax), + SPECIES_SPRITE(PIKACHU_GIGANTAMAX, gMonFrontPic_PikachuGigantamax), + SPECIES_SPRITE(MEOWTH_GIGANTAMAX, gMonFrontPic_MeowthGigantamax), + SPECIES_SPRITE(MACHAMP_GIGANTAMAX, gMonFrontPic_MachampGigantamax), + SPECIES_SPRITE(GENGAR_GIGANTAMAX, gMonFrontPic_GengarGigantamax), + SPECIES_SPRITE(KINGLER_GIGANTAMAX, gMonFrontPic_KinglerGigantamax), + SPECIES_SPRITE(LAPRAS_GIGANTAMAX, gMonFrontPic_LaprasGigantamax), + SPECIES_SPRITE(EEVEE_GIGANTAMAX, gMonFrontPic_EeveeGigantamax), + SPECIES_SPRITE(SNORLAX_GIGANTAMAX, gMonFrontPic_SnorlaxGigantamax), + SPECIES_SPRITE(GARBODOR_GIGANTAMAX, gMonFrontPic_GarbodorGigantamax), + SPECIES_SPRITE(MELMETAL_GIGANTAMAX, gMonFrontPic_MelmetalGigantamax), + SPECIES_SPRITE(RILLABOOM_GIGANTAMAX, gMonFrontPic_RillaboomGigantamax), + SPECIES_SPRITE(CINDERACE_GIGANTAMAX, gMonFrontPic_CinderaceGigantamax), + SPECIES_SPRITE(INTELEON_GIGANTAMAX, gMonFrontPic_InteleonGigantamax), + SPECIES_SPRITE(CORVIKNIGHT_GIGANTAMAX, gMonFrontPic_CorviknightGigantamax), + SPECIES_SPRITE(ORBEETLE_GIGANTAMAX, gMonFrontPic_OrbeetleGigantamax), + SPECIES_SPRITE(DREDNAW_GIGANTAMAX, gMonFrontPic_DrednawGigantamax), + SPECIES_SPRITE(COALOSSAL_GIGANTAMAX, gMonFrontPic_CoalossalGigantamax), + SPECIES_SPRITE(FLAPPLE_GIGANTAMAX, gMonFrontPic_FlappleGigantamax), + SPECIES_SPRITE(APPLETUN_GIGANTAMAX, gMonFrontPic_AppletunGigantamax), + SPECIES_SPRITE(SANDACONDA_GIGANTAMAX, gMonFrontPic_SandacondaGigantamax), + SPECIES_SPRITE(TOXTRICITY_AMPED_GIGANTAMAX, gMonFrontPic_ToxtricityGigantamax), + SPECIES_SPRITE(TOXTRICITY_LOW_KEY_GIGANTAMAX, gMonFrontPic_ToxtricityGigantamax), + SPECIES_SPRITE(CENTISKORCH_GIGANTAMAX, gMonFrontPic_CentiskorchGigantamax), + SPECIES_SPRITE(HATTERENE_GIGANTAMAX, gMonFrontPic_HattereneGigantamax), + SPECIES_SPRITE(GRIMMSNARL_GIGANTAMAX, gMonFrontPic_GrimmsnarlGigantamax), + SPECIES_SPRITE(ALCREMIE_GIGANTAMAX, gMonFrontPic_AlcremieGigantamax), + SPECIES_SPRITE(COPPERAJAH_GIGANTAMAX, gMonFrontPic_CopperajahGigantamax), + SPECIES_SPRITE(DURALUDON_GIGANTAMAX, gMonFrontPic_DuraludonGigantamax), + SPECIES_SPRITE(URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, gMonFrontPic_UrshifuSingleStrikeGigantamax), + SPECIES_SPRITE(URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, gMonFrontPic_UrshifuRapidStrikeGigantamax), +#endif +#if P_GEN_9_POKEMON == TRUE + SPECIES_SPRITE(SPRIGATITO, gMonFrontPic_Sprigatito), + SPECIES_SPRITE(FLORAGATO, gMonFrontPic_Floragato), + SPECIES_SPRITE(MEOWSCARADA, gMonFrontPic_Meowscarada), + SPECIES_SPRITE(FUECOCO, gMonFrontPic_Fuecoco), + SPECIES_SPRITE(CROCALOR, gMonFrontPic_Crocalor), + SPECIES_SPRITE(SKELEDIRGE, gMonFrontPic_Skeledirge), + SPECIES_SPRITE(QUAXLY, gMonFrontPic_Quaxly), + SPECIES_SPRITE(QUAXWELL, gMonFrontPic_Quaxwell), + SPECIES_SPRITE(QUAQUAVAL, gMonFrontPic_Quaquaval), + SPECIES_SPRITE(LECHONK, gMonFrontPic_Lechonk), + SPECIES_SPRITE(OINKOLOGNE_MALE, gMonFrontPic_OinkologneMale), + SPECIES_SPRITE(OINKOLOGNE_FEMALE, gMonFrontPic_OinkologneFemale), + SPECIES_SPRITE(TAROUNTULA, gMonFrontPic_Tarountula), + SPECIES_SPRITE(SPIDOPS, gMonFrontPic_Spidops), + SPECIES_SPRITE(NYMBLE, gMonFrontPic_Nymble), + SPECIES_SPRITE(LOKIX, gMonFrontPic_Lokix), + SPECIES_SPRITE(PAWMI, gMonFrontPic_Pawmi), + SPECIES_SPRITE(PAWMO, gMonFrontPic_Pawmo), + SPECIES_SPRITE(PAWMOT, gMonFrontPic_Pawmot), + SPECIES_SPRITE(TANDEMAUS, gMonFrontPic_Tandemaus), + SPECIES_SPRITE(MAUSHOLD_FAMILY_OF_THREE, gMonFrontPic_MausholdFamilyOfThree), + SPECIES_SPRITE(MAUSHOLD_FAMILY_OF_FOUR, gMonFrontPic_MausholdFamilyOfFour), + SPECIES_SPRITE(FIDOUGH, gMonFrontPic_Fidough), + SPECIES_SPRITE(DACHSBUN, gMonFrontPic_Dachsbun), + SPECIES_SPRITE(SMOLIV, gMonFrontPic_Smoliv), + SPECIES_SPRITE(DOLLIV, gMonFrontPic_Dolliv), + SPECIES_SPRITE(ARBOLIVA, gMonFrontPic_Arboliva), + SPECIES_SPRITE(SQUAWKABILLY_GREEN_PLUMAGE, gMonFrontPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_BLUE_PLUMAGE, gMonFrontPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_YELLOW_PLUMAGE, gMonFrontPic_Squawkabilly), + SPECIES_SPRITE(SQUAWKABILLY_WHITE_PLUMAGE, gMonFrontPic_Squawkabilly), + SPECIES_SPRITE(NACLI, gMonFrontPic_Nacli), + SPECIES_SPRITE(NACLSTACK, gMonFrontPic_Naclstack), + SPECIES_SPRITE(GARGANACL, gMonFrontPic_Garganacl), + SPECIES_SPRITE(CHARCADET, gMonFrontPic_Charcadet), + SPECIES_SPRITE(ARMAROUGE, gMonFrontPic_Armarouge), + SPECIES_SPRITE(CERULEDGE, gMonFrontPic_Ceruledge), + SPECIES_SPRITE(TADBULB, gMonFrontPic_Tadbulb), + SPECIES_SPRITE(BELLIBOLT, gMonFrontPic_Bellibolt), + SPECIES_SPRITE(WATTREL, gMonFrontPic_Wattrel), + SPECIES_SPRITE(KILOWATTREL, gMonFrontPic_Kilowattrel), + SPECIES_SPRITE(MASCHIFF, gMonFrontPic_Maschiff), + SPECIES_SPRITE(MABOSSTIFF, gMonFrontPic_Mabosstiff), + SPECIES_SPRITE(SHROODLE, gMonFrontPic_Shroodle), + SPECIES_SPRITE(GRAFAIAI, gMonFrontPic_Grafaiai), + SPECIES_SPRITE(BRAMBLIN, gMonFrontPic_Bramblin), + SPECIES_SPRITE(BRAMBLEGHAST, gMonFrontPic_Brambleghast), + SPECIES_SPRITE(TOEDSCOOL, gMonFrontPic_Toedscool), + SPECIES_SPRITE(TOEDSCRUEL, gMonFrontPic_Toedscruel), + SPECIES_SPRITE(KLAWF, gMonFrontPic_Klawf), + SPECIES_SPRITE(CAPSAKID, gMonFrontPic_Capsakid), + SPECIES_SPRITE(SCOVILLAIN, gMonFrontPic_Scovillain), + SPECIES_SPRITE(RELLOR, gMonFrontPic_Rellor), + SPECIES_SPRITE(RABSCA, gMonFrontPic_Rabsca), + SPECIES_SPRITE(FLITTLE, gMonFrontPic_Flittle), + SPECIES_SPRITE(ESPATHRA, gMonFrontPic_Espathra), + SPECIES_SPRITE(TINKATINK, gMonFrontPic_Tinkatink), + SPECIES_SPRITE(TINKATUFF, gMonFrontPic_Tinkatuff), + SPECIES_SPRITE(TINKATON, gMonFrontPic_Tinkaton), + SPECIES_SPRITE(WIGLETT, gMonFrontPic_Wiglett), + SPECIES_SPRITE(WUGTRIO, gMonFrontPic_Wugtrio), + SPECIES_SPRITE(BOMBIRDIER, gMonFrontPic_Bombirdier), + SPECIES_SPRITE(FINIZEN, gMonFrontPic_Finizen), + SPECIES_SPRITE(PALAFIN_ZERO, gMonFrontPic_PalafinZero), + SPECIES_SPRITE(PALAFIN_HERO, gMonFrontPic_PalafinHero), + SPECIES_SPRITE(VAROOM, gMonFrontPic_Varoom), + SPECIES_SPRITE(REVAVROOM, gMonFrontPic_Revavroom), + SPECIES_SPRITE(CYCLIZAR, gMonFrontPic_Cyclizar), + SPECIES_SPRITE(ORTHWORM, gMonFrontPic_Orthworm), + SPECIES_SPRITE(GLIMMET, gMonFrontPic_Glimmet), + SPECIES_SPRITE(GLIMMORA, gMonFrontPic_Glimmora), + SPECIES_SPRITE(GREAVARD, gMonFrontPic_Greavard), + SPECIES_SPRITE(HOUNDSTONE, gMonFrontPic_Houndstone), + SPECIES_SPRITE(FLAMIGO, gMonFrontPic_Flamigo), + SPECIES_SPRITE(CETODDLE, gMonFrontPic_Cetoddle), + SPECIES_SPRITE(CETITAN, gMonFrontPic_Cetitan), + SPECIES_SPRITE(VELUZA, gMonFrontPic_Veluza), + SPECIES_SPRITE(DONDOZO, gMonFrontPic_Dondozo), + SPECIES_SPRITE(TATSUGIRI_CURLY, gMonFrontPic_TatsugiriCurly), + SPECIES_SPRITE(TATSUGIRI_DROOPY, gMonFrontPic_TatsugiriDroopy), + SPECIES_SPRITE(TATSUGIRI_STRETCHY, gMonFrontPic_TatsugiriStretchy), + SPECIES_SPRITE(ANNIHILAPE, gMonFrontPic_Annihilape), + SPECIES_SPRITE(CLODSIRE, gMonFrontPic_Clodsire), + SPECIES_SPRITE(FARIGIRAF, gMonFrontPic_Farigiraf), + SPECIES_SPRITE(DUDUNSPARCE_TWO_SEGMENT, gMonFrontPic_DudunsparceTwoSegment), + SPECIES_SPRITE(DUDUNSPARCE_THREE_SEGMENT, gMonFrontPic_DudunsparceThreeSegment), + SPECIES_SPRITE(KINGAMBIT, gMonFrontPic_Kingambit), + SPECIES_SPRITE(GREAT_TUSK, gMonFrontPic_GreatTusk), + SPECIES_SPRITE(SCREAM_TAIL, gMonFrontPic_ScreamTail), + SPECIES_SPRITE(BRUTE_BONNET, gMonFrontPic_BruteBonnet), + SPECIES_SPRITE(FLUTTER_MANE, gMonFrontPic_FlutterMane), + SPECIES_SPRITE(SLITHER_WING, gMonFrontPic_SlitherWing), + SPECIES_SPRITE(SANDY_SHOCKS, gMonFrontPic_SandyShocks), + SPECIES_SPRITE(IRON_TREADS, gMonFrontPic_IronTreads), + SPECIES_SPRITE(IRON_BUNDLE, gMonFrontPic_IronBundle), + SPECIES_SPRITE(IRON_HANDS, gMonFrontPic_IronHands), + SPECIES_SPRITE(IRON_JUGULIS, gMonFrontPic_IronJugulis), + SPECIES_SPRITE(IRON_MOTH, gMonFrontPic_IronMoth), + SPECIES_SPRITE(IRON_THORNS, gMonFrontPic_IronThorns), + SPECIES_SPRITE(FRIGIBAX, gMonFrontPic_Frigibax), + SPECIES_SPRITE(ARCTIBAX, gMonFrontPic_Arctibax), + SPECIES_SPRITE(BAXCALIBUR, gMonFrontPic_Baxcalibur), + SPECIES_SPRITE(GIMMIGHOUL_CHEST, gMonFrontPic_GimmighoulChest), + SPECIES_SPRITE(GIMMIGHOUL_ROAMING, gMonFrontPic_GimmighoulRoaming), + SPECIES_SPRITE(GHOLDENGO, gMonFrontPic_Gholdengo), + SPECIES_SPRITE(WO_CHIEN, gMonFrontPic_WoChien), + SPECIES_SPRITE(CHIEN_PAO, gMonFrontPic_ChienPao), + SPECIES_SPRITE(TING_LU, gMonFrontPic_TingLu), + SPECIES_SPRITE(CHI_YU, gMonFrontPic_ChiYu), + SPECIES_SPRITE(ROARING_MOON, gMonFrontPic_RoaringMoon), + SPECIES_SPRITE(IRON_VALIANT, gMonFrontPic_IronValiant), + SPECIES_SPRITE(KORAIDON, gMonFrontPic_Koraidon), + SPECIES_SPRITE(MIRAIDON, gMonFrontPic_Miraidon), + SPECIES_SPRITE(WALKING_WAKE, gMonFrontPic_WalkingWake), + SPECIES_SPRITE(IRON_LEAVES, gMonFrontPic_IronLeaves), + SPECIES_SPRITE(DIPPLIN, gMonFrontPic_Dipplin), + SPECIES_SPRITE(POLTCHAGEIST_COUNTERFEIT, gMonFrontPic_Poltchageist), + SPECIES_SPRITE(POLTCHAGEIST_ARTISAN, gMonFrontPic_Poltchageist), + SPECIES_SPRITE(SINISTCHA_UNREMARKABLE, gMonFrontPic_Sinistcha), + SPECIES_SPRITE(SINISTCHA_MASTERPIECE, gMonFrontPic_Sinistcha), + SPECIES_SPRITE(OKIDOGI, gMonFrontPic_Okidogi), + SPECIES_SPRITE(MUNKIDORI, gMonFrontPic_Munkidori), + SPECIES_SPRITE(FEZANDIPITI, gMonFrontPic_Fezandipiti), + SPECIES_SPRITE(OGERPON_TEAL_MASK, gMonFrontPic_OgerponTealMask), + SPECIES_SPRITE(OGERPON_WELLSPRING_MASK, gMonFrontPic_OgerponWellspringMask), + SPECIES_SPRITE(OGERPON_HEARTHFLAME_MASK, gMonFrontPic_OgerponHearthflameMask), + SPECIES_SPRITE(OGERPON_CORNERSTONE_MASK, gMonFrontPic_OgerponCornerstoneMask), + // SPECIES_SPRITE(OGERPON_TEAL_MASK_TERA, gMonFrontPic_OgerponTealMaskTera), + // SPECIES_SPRITE(OGERPON_WELLSPRING_MASK_TERA, gMonFrontPic_OgerponWellspringMaskTera), + // SPECIES_SPRITE(OGERPON_HEARTHFLAME_MASK_TERA, gMonFrontPic_OgerponHearthflameMaskTera), + // SPECIES_SPRITE(OGERPON_CORNERSTONE_MASK_TERA, gMonFrontPic_OgerponCornerstoneMaskTera), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 1fa65f3b33..9de97d1579 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -129,6 +129,9 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(MAGMAR, gMonPalette_Magmar), SPECIES_PAL(PINSIR, gMonPalette_Pinsir), SPECIES_PAL(TAUROS, gMonPalette_Tauros), + SPECIES_PAL(TAUROS_PALDEAN_COMBAT_BREED, gMonPalette_TaurosPaldeanCombatBreed), + SPECIES_PAL(TAUROS_PALDEAN_BLAZE_BREED, gMonPalette_TaurosPaldeanBlazeBreed), + SPECIES_PAL(TAUROS_PALDEAN_AQUA_BREED, gMonPalette_TaurosPaldeanAquaBreed), SPECIES_PAL(MAGIKARP, gMonPalette_Magikarp), SPECIES_PAL(GYARADOS, gMonPalette_Gyarados), SPECIES_PAL(LAPRAS, gMonPalette_Lapras), @@ -195,6 +198,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(SUNFLORA, gMonPalette_Sunflora), SPECIES_PAL(YANMA, gMonPalette_Yanma), SPECIES_PAL(WOOPER, gMonPalette_Wooper), + SPECIES_PAL(WOOPER_PALDEAN, gMonPalette_WooperPaldean), SPECIES_PAL(QUAGSIRE, gMonPalette_Quagsire), SPECIES_PAL(ESPEON, gMonPalette_Espeon), SPECIES_PAL(UMBREON, gMonPalette_Umbreon), @@ -360,7 +364,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(ARON, gMonPalette_Aron), SPECIES_PAL(LAIRON, gMonPalette_Lairon), SPECIES_PAL(AGGRON, gMonPalette_Aggron), - SPECIES_PAL(CASTFORM, gMonPalette_Castform), + SPECIES_PAL(CASTFORM_NORMAL, gMonPalette_CastformNormal), SPECIES_PAL(VOLBEAT, gMonPalette_Volbeat), SPECIES_PAL(ILLUMISE, gMonPalette_Illumise), SPECIES_PAL(LILEEP, gMonPalette_Lileep), @@ -385,7 +389,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(LATIAS, gMonPalette_Latias), SPECIES_PAL(LATIOS, gMonPalette_Latios), SPECIES_PAL(JIRACHI, gMonPalette_Jirachi), - SPECIES_PAL(DEOXYS, gMonPalette_Deoxys), + SPECIES_PAL(DEOXYS_NORMAL, gMonPalette_DeoxysNormal), SPECIES_PAL(CHIMECHO, gMonPalette_Chimecho), #if P_GEN_4_POKEMON == TRUE SPECIES_PAL(TURTWIG, gMonPalette_Turtwig), @@ -413,8 +417,8 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(RAMPARDOS, gMonPalette_Rampardos), SPECIES_PAL(SHIELDON, gMonPalette_Shieldon), SPECIES_PAL(BASTIODON, gMonPalette_Bastiodon), - SPECIES_PAL(BURMY, gMonPalette_Burmy), - SPECIES_PAL(WORMADAM, gMonPalette_Wormadam), + SPECIES_PAL(BURMY_PLANT_CLOAK, gMonPalette_BurmyPlantCloak), + SPECIES_PAL(WORMADAM_PLANT_CLOAK, gMonPalette_WormadamPlantCloak), SPECIES_PAL(MOTHIM, gMonPalette_Mothim), SPECIES_PAL(COMBEE, gMonPalette_Combee), SPECIES_PAL(VESPIQUEN, gMonPalette_Vespiquen), @@ -422,9 +426,9 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(BUIZEL, gMonPalette_Buizel), SPECIES_PAL(FLOATZEL, gMonPalette_Floatzel), SPECIES_PAL(CHERUBI, gMonPalette_Cherubi), - SPECIES_PAL(CHERRIM, gMonPalette_Cherrim), - SPECIES_PAL(SHELLOS, gMonPalette_Shellos), - SPECIES_PAL(GASTRODON, gMonPalette_Gastrodon), + SPECIES_PAL(CHERRIM_OVERCAST, gMonPalette_CherrimOvercast), + SPECIES_PAL(SHELLOS_WEST_SEA, gMonPalette_ShellosWestSea), + SPECIES_PAL(GASTRODON_WEST_SEA, gMonPalette_GastrodonWestSea), SPECIES_PAL(AMBIPOM, gMonPalette_Ambipom), SPECIES_PAL(DRIFLOON, gMonPalette_Drifloon), SPECIES_PAL(DRIFBLIM, gMonPalette_Drifblim), @@ -488,12 +492,12 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(PALKIA, gMonPalette_Palkia), SPECIES_PAL(HEATRAN, gMonPalette_Heatran), SPECIES_PAL(REGIGIGAS, gMonPalette_Regigigas), - SPECIES_PAL(GIRATINA, gMonPalette_Giratina), + SPECIES_PAL(GIRATINA_ALTERED, gMonPalette_GiratinaAltered), SPECIES_PAL(CRESSELIA, gMonPalette_Cresselia), SPECIES_PAL(PHIONE, gMonPalette_Phione), SPECIES_PAL(MANAPHY, gMonPalette_Manaphy), SPECIES_PAL(DARKRAI, gMonPalette_Darkrai), - SPECIES_PAL(SHAYMIN, gMonPalette_Shaymin), + SPECIES_PAL(SHAYMIN_LAND, gMonPalette_ShayminLand), SPECIES_PAL(ARCEUS, gMonPalette_Arceus), #endif #if P_GEN_5_POKEMON == TRUE @@ -553,12 +557,12 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(WHIMSICOTT, gMonPalette_Whimsicott), SPECIES_PAL(PETILIL, gMonPalette_Petilil), SPECIES_PAL(LILLIGANT, gMonPalette_Lilligant), - SPECIES_PAL(BASCULIN, gMonPalette_Basculin), + SPECIES_PAL(BASCULIN, gMonPalette_BasculinRedStriped), SPECIES_PAL(SANDILE, gMonPalette_Sandile), SPECIES_PAL(KROKOROK, gMonPalette_Krokorok), SPECIES_PAL(KROOKODILE, gMonPalette_Krookodile), SPECIES_PAL(DARUMAKA, gMonPalette_Darumaka), - SPECIES_PAL(DARMANITAN, gMonPalette_Darmanitan), + SPECIES_PAL(DARMANITAN_STANDARD_MODE, gMonPalette_DarmanitanStandardMode), SPECIES_PAL(MARACTUS, gMonPalette_Maractus), SPECIES_PAL(DWEBBLE, gMonPalette_Dwebble), SPECIES_PAL(CRUSTLE, gMonPalette_Crustle), @@ -588,8 +592,8 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(VANILLITE, gMonPalette_Vanillite), SPECIES_PAL(VANILLISH, gMonPalette_Vanillish), SPECIES_PAL(VANILLUXE, gMonPalette_Vanilluxe), - SPECIES_PAL(DEERLING, gMonPalette_Deerling), - SPECIES_PAL(SAWSBUCK, gMonPalette_Sawsbuck), + SPECIES_PAL(DEERLING_SPRING, gMonPalette_DeerlingSpring), + SPECIES_PAL(SAWSBUCK_SPRING, gMonPalette_SawsbuckSpring), SPECIES_PAL(EMOLGA, gMonPalette_Emolga), SPECIES_PAL(KARRABLAST, gMonPalette_Karrablast), SPECIES_PAL(ESCAVALIER, gMonPalette_Escavalier), @@ -644,14 +648,14 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(COBALION, gMonPalette_Cobalion), SPECIES_PAL(TERRAKION, gMonPalette_Terrakion), SPECIES_PAL(VIRIZION, gMonPalette_Virizion), - SPECIES_PAL(TORNADUS, gMonPalette_Tornadus), - SPECIES_PAL(THUNDURUS, gMonPalette_Thundurus), + SPECIES_PAL(TORNADUS_INCARNATE, gMonPalette_TornadusIncarnate), + SPECIES_PAL(THUNDURUS_INCARNATE, gMonPalette_ThundurusIncarnate), SPECIES_PAL(RESHIRAM, gMonPalette_Reshiram), SPECIES_PAL(ZEKROM, gMonPalette_Zekrom), - SPECIES_PAL(LANDORUS, gMonPalette_Landorus), + SPECIES_PAL(LANDORUS_INCARNATE, gMonPalette_LandorusIncarnate), SPECIES_PAL(KYUREM, gMonPalette_Kyurem), - SPECIES_PAL(KELDEO, gMonPalette_Keldeo), - SPECIES_PAL(MELOETTA, gMonPalette_Meloetta), + SPECIES_PAL(KELDEO_ORDINARY, gMonPalette_KeldeoOrdinary), + SPECIES_PAL(MELOETTA, gMonPalette_MeloettaAria), SPECIES_PAL(GENESECT, gMonPalette_Genesect), #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(TALONFLAME, gMonPalette_Talonflame), SPECIES_PAL(SCATTERBUG, gMonPalette_Scatterbug), SPECIES_PAL(SPEWPA, gMonPalette_Spewpa), - SPECIES_PAL(VIVILLON, gMonPalette_Vivillon), + SPECIES_PAL(VIVILLON_ICY_SNOW, gMonPalette_VivillonIcySnow), SPECIES_PAL(LITLEO, gMonPalette_Litleo), SPECIES_PAL(PYROAR, gMonPalette_Pyroar), - SPECIES_PAL(FLABEBE, gMonPalette_Flabebe), - SPECIES_PAL(FLOETTE, gMonPalette_Floette), - SPECIES_PAL(FLORGES, gMonPalette_Florges), + SPECIES_PAL(FLABEBE_RED_FLOWER, gMonPalette_FlabebeRedFlower), + SPECIES_PAL(FLOETTE_RED_FLOWER, gMonPalette_FloetteRedFlower), + SPECIES_PAL(FLORGES_RED_FLOWER, gMonPalette_FlorgesRedFlower), SPECIES_PAL(SKIDDO, gMonPalette_Skiddo), SPECIES_PAL(GOGOAT, gMonPalette_Gogoat), SPECIES_PAL(PANCHAM, gMonPalette_Pancham), SPECIES_PAL(PANGORO, gMonPalette_Pangoro), - SPECIES_PAL(FURFROU, gMonPalette_Furfrou), + SPECIES_PAL(FURFROU_NATURAL, gMonPalette_FurfrouNatural), SPECIES_PAL(ESPURR, gMonPalette_Espurr), - SPECIES_PAL(MEOWSTIC, gMonPalette_Meowstic), + SPECIES_PAL(MEOWSTIC_MALE, gMonPalette_MeowsticMale), SPECIES_PAL(HONEDGE, gMonPalette_Honedge), SPECIES_PAL(DOUBLADE, gMonPalette_Doublade), - SPECIES_PAL(AEGISLASH, gMonPalette_Aegislash), + SPECIES_PAL(AEGISLASH_SHIELD, gMonPalette_AegislashShield), SPECIES_PAL(SPRITZEE, gMonPalette_Spritzee), SPECIES_PAL(AROMATISSE, gMonPalette_Aromatisse), SPECIES_PAL(SWIRLIX, gMonPalette_Swirlix), @@ -715,17 +719,17 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(KLEFKI, gMonPalette_Klefki), SPECIES_PAL(PHANTUMP, gMonPalette_Phantump), SPECIES_PAL(TREVENANT, gMonPalette_Trevenant), - SPECIES_PAL(PUMPKABOO, gMonPalette_Pumpkaboo), - SPECIES_PAL(GOURGEIST, gMonPalette_Gourgeist), + SPECIES_PAL(PUMPKABOO_AVERAGE, gMonPalette_Pumpkaboo), + SPECIES_PAL(GOURGEIST_AVERAGE, gMonPalette_Gourgeist), SPECIES_PAL(BERGMITE, gMonPalette_Bergmite), SPECIES_PAL(AVALUGG, gMonPalette_Avalugg), SPECIES_PAL(NOIBAT, gMonPalette_Noibat), SPECIES_PAL(NOIVERN, gMonPalette_Noivern), - SPECIES_PAL(XERNEAS, gMonPalette_Xerneas), + SPECIES_PAL(XERNEAS_NEUTRAL, gMonPalette_XerneasNeutral), SPECIES_PAL(YVELTAL, gMonPalette_Yveltal), - SPECIES_PAL(ZYGARDE, gMonPalette_Zygarde), + SPECIES_PAL(ZYGARDE_50_AURA_BREAK, gMonPalette_Zygarde50), SPECIES_PAL(DIANCIE, gMonPalette_Diancie), - SPECIES_PAL(HOOPA, gMonPalette_Hoopa), + SPECIES_PAL(HOOPA_CONFINED, gMonPalette_HoopaConfined), SPECIES_PAL(VOLCANION, gMonPalette_Volcanion), #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(VIKAVOLT, gMonPalette_Vikavolt), SPECIES_PAL(CRABRAWLER, gMonPalette_Crabrawler), SPECIES_PAL(CRABOMINABLE, gMonPalette_Crabominable), - SPECIES_PAL(ORICORIO, gMonPalette_Oricorio), + SPECIES_PAL(ORICORIO_BAILE, gMonPalette_OricorioBaile), SPECIES_PAL(CUTIEFLY, gMonPalette_Cutiefly), SPECIES_PAL(RIBOMBEE, gMonPalette_Ribombee), SPECIES_PAL(ROCKRUFF, gMonPalette_Rockruff), - SPECIES_PAL(LYCANROC, gMonPalette_Lycanroc), - SPECIES_PAL(WISHIWASHI, gMonPalette_Wishiwashi), + SPECIES_PAL(LYCANROC_MIDDAY, gMonPalette_LycanrocMidday), + SPECIES_PAL(WISHIWASHI_SOLO, gMonPalette_WishiwashiSolo), SPECIES_PAL(MAREANIE, gMonPalette_Mareanie), SPECIES_PAL(TOXAPEX, gMonPalette_Toxapex), SPECIES_PAL(MUDBRAY, gMonPalette_Mudbray), @@ -780,12 +784,12 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(PALOSSAND, gMonPalette_Palossand), SPECIES_PAL(PYUKUMUKU, gMonPalette_Pyukumuku), SPECIES_PAL(TYPE_NULL, gMonPalette_TypeNull), - SPECIES_PAL(SILVALLY, gMonPalette_Silvally), - SPECIES_PAL(MINIOR, gMonPalette_Minior), + SPECIES_PAL(SILVALLY_NORMAL, gMonPalette_SilvallyNormal), + SPECIES_PAL(MINIOR_METEOR_RED, gMonPalette_MiniorMeteor), SPECIES_PAL(KOMALA, gMonPalette_Komala), SPECIES_PAL(TURTONATOR, gMonPalette_Turtonator), SPECIES_PAL(TOGEDEMARU, gMonPalette_Togedemaru), - SPECIES_PAL(MIMIKYU, gMonPalette_Mimikyu), + SPECIES_PAL(MIMIKYU_DISGUISED, gMonPalette_MimikyuDisguised), SPECIES_PAL(BRUXISH, gMonPalette_Bruxish), SPECIES_PAL(DRAMPA, gMonPalette_Drampa), SPECIES_PAL(DHELMISE, gMonPalette_Dhelmise), @@ -858,13 +862,13 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(ARROKUDA, gMonPalette_Arrokuda), SPECIES_PAL(BARRASKEWDA, gMonPalette_Barraskewda), SPECIES_PAL(TOXEL, gMonPalette_Toxel), - SPECIES_PAL(TOXTRICITY, gMonPalette_Toxtricity), + SPECIES_PAL(TOXTRICITY_AMPED, gMonPalette_ToxtricityAmped), SPECIES_PAL(SIZZLIPEDE, gMonPalette_Sizzlipede), SPECIES_PAL(CENTISKORCH, gMonPalette_Centiskorch), SPECIES_PAL(CLOBBOPUS, gMonPalette_Clobbopus), SPECIES_PAL(GRAPPLOCT, gMonPalette_Grapploct), - SPECIES_PAL(SINISTEA, gMonPalette_Sinistea), - SPECIES_PAL(POLTEAGEIST, gMonPalette_Polteageist), + SPECIES_PAL(SINISTEA_PHONY, gMonPalette_Sinistea), + SPECIES_PAL(POLTEAGEIST_PHONY, gMonPalette_Polteageist), SPECIES_PAL(HATENNA, gMonPalette_Hatenna), SPECIES_PAL(HATTREM, gMonPalette_Hattrem), SPECIES_PAL(HATTERENE, gMonPalette_Hatterene), @@ -878,15 +882,77 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(MR_RIME, gMonPalette_MrRime), SPECIES_PAL(RUNERIGUS, gMonPalette_Runerigus), SPECIES_PAL(MILCERY, gMonPalette_Milcery), - SPECIES_PAL(ALCREMIE, gMonPalette_Alcremie), + SPECIES_PAL(ALCREMIE_STRAWBERRY_VANILLA_CREAM, gMonPalette_AlcremieStrawberryVanillaCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RUBY_CREAM, gMonPalette_AlcremieStrawberryRubyCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_MATCHA_CREAM, gMonPalette_AlcremieStrawberryMatchaCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_MINT_CREAM, gMonPalette_AlcremieStrawberryMintCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_LEMON_CREAM, gMonPalette_AlcremieStrawberryLemonCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_SALTED_CREAM, gMonPalette_AlcremieStrawberrySaltedCream), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RUBY_SWIRL, gMonPalette_AlcremieStrawberryRubySwirl), + SPECIES_PAL(ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, gMonPalette_AlcremieStrawberryCaramelSwirl), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, gMonPalette_AlcremieStrawberryRainbowSwirl), + SPECIES_PAL(ALCREMIE_BERRY_VANILLA_CREAM, gMonPalette_AlcremieBerryVanillaCream), + SPECIES_PAL(ALCREMIE_BERRY_RUBY_CREAM, gMonPalette_AlcremieBerryRubyCream), + SPECIES_PAL(ALCREMIE_BERRY_MATCHA_CREAM, gMonPalette_AlcremieBerryMatchaCream), + SPECIES_PAL(ALCREMIE_BERRY_MINT_CREAM, gMonPalette_AlcremieBerryMintCream), + SPECIES_PAL(ALCREMIE_BERRY_LEMON_CREAM, gMonPalette_AlcremieBerryLemonCream), + SPECIES_PAL(ALCREMIE_BERRY_SALTED_CREAM, gMonPalette_AlcremieBerrySaltedCream), + SPECIES_PAL(ALCREMIE_BERRY_RUBY_SWIRL, gMonPalette_AlcremieBerryRubySwirl), + SPECIES_PAL(ALCREMIE_BERRY_CARAMEL_SWIRL, gMonPalette_AlcremieBerryCaramelSwirl), + SPECIES_PAL(ALCREMIE_BERRY_RAINBOW_SWIRL, gMonPalette_AlcremieBerryRainbowSwirl), + SPECIES_PAL(ALCREMIE_LOVE_VANILLA_CREAM, gMonPalette_AlcremieLoveVanillaCream), + SPECIES_PAL(ALCREMIE_LOVE_RUBY_CREAM, gMonPalette_AlcremieLoveRubyCream), + SPECIES_PAL(ALCREMIE_LOVE_MATCHA_CREAM, gMonPalette_AlcremieLoveMatchaCream), + SPECIES_PAL(ALCREMIE_LOVE_MINT_CREAM, gMonPalette_AlcremieLoveMintCream), + SPECIES_PAL(ALCREMIE_LOVE_LEMON_CREAM, gMonPalette_AlcremieLoveLemonCream), + SPECIES_PAL(ALCREMIE_LOVE_SALTED_CREAM, gMonPalette_AlcremieLoveSaltedCream), + SPECIES_PAL(ALCREMIE_LOVE_RUBY_SWIRL, gMonPalette_AlcremieLoveRubySwirl), + SPECIES_PAL(ALCREMIE_LOVE_CARAMEL_SWIRL, gMonPalette_AlcremieLoveCaramelSwirl), + SPECIES_PAL(ALCREMIE_LOVE_RAINBOW_SWIRL, gMonPalette_AlcremieLoveRainbowSwirl), + SPECIES_PAL(ALCREMIE_STAR_VANILLA_CREAM, gMonPalette_AlcremieStarVanillaCream), + SPECIES_PAL(ALCREMIE_STAR_RUBY_CREAM, gMonPalette_AlcremieStarRubyCream), + SPECIES_PAL(ALCREMIE_STAR_MATCHA_CREAM, gMonPalette_AlcremieStarMatchaCream), + SPECIES_PAL(ALCREMIE_STAR_MINT_CREAM, gMonPalette_AlcremieStarMintCream), + SPECIES_PAL(ALCREMIE_STAR_LEMON_CREAM, gMonPalette_AlcremieStarLemonCream), + SPECIES_PAL(ALCREMIE_STAR_SALTED_CREAM, gMonPalette_AlcremieStarSaltedCream), + SPECIES_PAL(ALCREMIE_STAR_RUBY_SWIRL, gMonPalette_AlcremieStarRubySwirl), + SPECIES_PAL(ALCREMIE_STAR_CARAMEL_SWIRL, gMonPalette_AlcremieStarCaramelSwirl), + SPECIES_PAL(ALCREMIE_STAR_RAINBOW_SWIRL, gMonPalette_AlcremieStarRainbowSwirl), + SPECIES_PAL(ALCREMIE_CLOVER_VANILLA_CREAM, gMonPalette_AlcremieCloverVanillaCream), + SPECIES_PAL(ALCREMIE_CLOVER_RUBY_CREAM, gMonPalette_AlcremieCloverRubyCream), + SPECIES_PAL(ALCREMIE_CLOVER_MATCHA_CREAM, gMonPalette_AlcremieCloverMatchaCream), + SPECIES_PAL(ALCREMIE_CLOVER_MINT_CREAM, gMonPalette_AlcremieCloverMintCream), + SPECIES_PAL(ALCREMIE_CLOVER_LEMON_CREAM, gMonPalette_AlcremieCloverLemonCream), + SPECIES_PAL(ALCREMIE_CLOVER_SALTED_CREAM, gMonPalette_AlcremieCloverSaltedCream), + SPECIES_PAL(ALCREMIE_CLOVER_RUBY_SWIRL, gMonPalette_AlcremieCloverRubySwirl), + SPECIES_PAL(ALCREMIE_CLOVER_CARAMEL_SWIRL, gMonPalette_AlcremieCloverCaramelSwirl), + SPECIES_PAL(ALCREMIE_CLOVER_RAINBOW_SWIRL, gMonPalette_AlcremieCloverRainbowSwirl), + SPECIES_PAL(ALCREMIE_FLOWER_VANILLA_CREAM, gMonPalette_AlcremieFlowerVanillaCream), + SPECIES_PAL(ALCREMIE_FLOWER_RUBY_CREAM, gMonPalette_AlcremieFlowerRubyCream), + SPECIES_PAL(ALCREMIE_FLOWER_MATCHA_CREAM, gMonPalette_AlcremieFlowerMatchaCream), + SPECIES_PAL(ALCREMIE_FLOWER_MINT_CREAM, gMonPalette_AlcremieFlowerMintCream), + SPECIES_PAL(ALCREMIE_FLOWER_LEMON_CREAM, gMonPalette_AlcremieFlowerLemonCream), + SPECIES_PAL(ALCREMIE_FLOWER_SALTED_CREAM, gMonPalette_AlcremieFlowerSaltedCream), + SPECIES_PAL(ALCREMIE_FLOWER_RUBY_SWIRL, gMonPalette_AlcremieFlowerRubySwirl), + SPECIES_PAL(ALCREMIE_FLOWER_CARAMEL_SWIRL, gMonPalette_AlcremieFlowerCaramelSwirl), + SPECIES_PAL(ALCREMIE_FLOWER_RAINBOW_SWIRL, gMonPalette_AlcremieFlowerRainbowSwirl), + SPECIES_PAL(ALCREMIE_RIBBON_VANILLA_CREAM, gMonPalette_AlcremieRibbonVanillaCream), + SPECIES_PAL(ALCREMIE_RIBBON_RUBY_CREAM, gMonPalette_AlcremieRibbonRubyCream), + SPECIES_PAL(ALCREMIE_RIBBON_MATCHA_CREAM, gMonPalette_AlcremieRibbonMatchaCream), + SPECIES_PAL(ALCREMIE_RIBBON_MINT_CREAM, gMonPalette_AlcremieRibbonMintCream), + SPECIES_PAL(ALCREMIE_RIBBON_LEMON_CREAM, gMonPalette_AlcremieRibbonLemonCream), + SPECIES_PAL(ALCREMIE_RIBBON_SALTED_CREAM, gMonPalette_AlcremieRibbonSaltedCream), + SPECIES_PAL(ALCREMIE_RIBBON_RUBY_SWIRL, gMonPalette_AlcremieRibbonRubySwirl), + SPECIES_PAL(ALCREMIE_RIBBON_CARAMEL_SWIRL, gMonPalette_AlcremieRibbonCaramelSwirl), + SPECIES_PAL(ALCREMIE_RIBBON_RAINBOW_SWIRL, gMonPalette_AlcremieRibbonRainbowSwirl), SPECIES_PAL(FALINKS, gMonPalette_Falinks), SPECIES_PAL(PINCURCHIN, gMonPalette_Pincurchin), SPECIES_PAL(SNOM, gMonPalette_Snom), SPECIES_PAL(FROSMOTH, gMonPalette_Frosmoth), SPECIES_PAL(STONJOURNER, gMonPalette_Stonjourner), - SPECIES_PAL(EISCUE, gMonPalette_Eiscue), - SPECIES_PAL(INDEEDEE, gMonPalette_Indeedee), - SPECIES_PAL(MORPEKO, gMonPalette_Morpeko), + SPECIES_PAL(EISCUE_ICE_FACE, gMonPalette_EiscueIceFace), + SPECIES_PAL(INDEEDEE_MALE, gMonPalette_IndeedeeMale), + SPECIES_PAL(MORPEKO_FULL_BELLY, gMonPalette_MorpekoFullBelly), SPECIES_PAL(CUFANT, gMonPalette_Cufant), SPECIES_PAL(COPPERAJAH, gMonPalette_Copperajah), SPECIES_PAL(DRACOZOLT, gMonPalette_Dracozolt), @@ -897,11 +963,11 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(DREEPY, gMonPalette_Dreepy), SPECIES_PAL(DRAKLOAK, gMonPalette_Drakloak), SPECIES_PAL(DRAGAPULT, gMonPalette_Dragapult), - SPECIES_PAL(ZACIAN, gMonPalette_Zacian), - SPECIES_PAL(ZAMAZENTA, gMonPalette_Zamazenta), + SPECIES_PAL(ZACIAN_HERO_OF_MANY_BATTLES, gMonPalette_ZacianHeroOfManyBattles), + SPECIES_PAL(ZAMAZENTA_HERO_OF_MANY_BATTLES, gMonPalette_ZamazentaHeroOfManyBattles), SPECIES_PAL(ETERNATUS, gMonPalette_Eternatus), SPECIES_PAL(KUBFU, gMonPalette_Kubfu), - SPECIES_PAL(URSHIFU, gMonPalette_Urshifu), + SPECIES_PAL(URSHIFU_SINGLE_STRIKE_STYLE, gMonPalette_UrshifuSingleStrikeStyle), SPECIES_PAL(ZARUDE, gMonPalette_Zarude), SPECIES_PAL(REGIELEKI, gMonPalette_Regieleki), SPECIES_PAL(REGIDRAGO, gMonPalette_Regidrago), @@ -911,10 +977,11 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(WYRDEER, gMonPalette_Wyrdeer), SPECIES_PAL(KLEAVOR, gMonPalette_Kleavor), SPECIES_PAL(URSALUNA, gMonPalette_Ursaluna), - SPECIES_PAL(BASCULEGION, gMonPalette_Basculegion), + SPECIES_PAL(URSALUNA_BLOODMOON, gMonPalette_UrsalunaBloodmoon), + SPECIES_PAL(BASCULEGION_MALE, gMonPalette_BasculegionMale), SPECIES_PAL(SNEASLER, gMonPalette_Sneasler), SPECIES_PAL(OVERQWIL, gMonPalette_Overqwil), - SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), + SPECIES_PAL(ENAMORUS_INCARNATE, gMonPalette_EnamorusIncarnate), #endif SPECIES_PAL(VENUSAUR_MEGA, gMonPalette_VenusaurMega), SPECIES_PAL(CHARIZARD_MEGA_X, gMonPalette_CharizardMegaX), @@ -1010,7 +1077,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(LINOONE_GALARIAN, gMonPalette_LinooneGalarian), #if P_GEN_5_POKEMON == TRUE SPECIES_PAL(DARUMAKA_GALARIAN, gMonPalette_DarumakaGalarian), - SPECIES_PAL(DARMANITAN_GALARIAN, gMonPalette_DarmanitanGalarian), + SPECIES_PAL(DARMANITAN_GALARIAN_STANDARD_MODE, gMonPalette_DarmanitanGalarianStandardMode), SPECIES_PAL(YAMASK_GALARIAN, gMonPalette_YamaskGalarian), SPECIES_PAL(STUNFISK_GALARIAN, gMonPalette_StunfiskGalarian), #endif @@ -1141,7 +1208,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(BASCULIN_WHITE_STRIPED, gMonPalette_BasculinWhiteStriped), SPECIES_PAL(DARMANITAN_ZEN_MODE, gMonPalette_DarmanitanZenMode), - SPECIES_PAL(DARMANITAN_ZEN_MODE_GALARIAN, gMonPalette_DarmanitanZenModeGalarian), + SPECIES_PAL(DARMANITAN_GALARIAN_ZEN_MODE, gMonPalette_DarmanitanGalarianZenMode), SPECIES_PAL(DEERLING_SUMMER, gMonPalette_DeerlingSummer), SPECIES_PAL(DEERLING_AUTUMN, gMonPalette_DeerlingAutumn), @@ -1234,7 +1301,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(ZYGARDE_10, gMonPalette_Zygarde10), SPECIES_PAL(ZYGARDE_10_POWER_CONSTRUCT, gMonPalette_Zygarde10), - SPECIES_PAL(ZYGARDE_50_POWER_CONSTRUCT, gMonPalette_Zygarde), + SPECIES_PAL(ZYGARDE_50_POWER_CONSTRUCT, gMonPalette_Zygarde50), SPECIES_PAL(ZYGARDE_COMPLETE, gMonPalette_ZygardeComplete), SPECIES_PAL(HOOPA_UNBOUND, gMonPalette_HoopaUnbound), @@ -1270,12 +1337,12 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(SILVALLY_DARK, gMonPalette_SilvallyDark), SPECIES_PAL(SILVALLY_FAIRY, gMonPalette_SilvallyFairy), - SPECIES_PAL(MINIOR_METEOR_ORANGE, gMonPalette_Minior), - SPECIES_PAL(MINIOR_METEOR_YELLOW, gMonPalette_Minior), - SPECIES_PAL(MINIOR_METEOR_GREEN, gMonPalette_Minior), - SPECIES_PAL(MINIOR_METEOR_BLUE, gMonPalette_Minior), - SPECIES_PAL(MINIOR_METEOR_INDIGO, gMonPalette_Minior), - SPECIES_PAL(MINIOR_METEOR_VIOLET, gMonPalette_Minior), + SPECIES_PAL(MINIOR_METEOR_ORANGE, gMonPalette_MiniorMeteor), + SPECIES_PAL(MINIOR_METEOR_YELLOW, gMonPalette_MiniorMeteor), + SPECIES_PAL(MINIOR_METEOR_GREEN, gMonPalette_MiniorMeteor), + SPECIES_PAL(MINIOR_METEOR_BLUE, gMonPalette_MiniorMeteor), + SPECIES_PAL(MINIOR_METEOR_INDIGO, gMonPalette_MiniorMeteor), + SPECIES_PAL(MINIOR_METEOR_VIOLET, gMonPalette_MiniorMeteor), SPECIES_PAL(MINIOR_CORE_RED, gMonPalette_MiniorCoreRed), SPECIES_PAL(MINIOR_CORE_ORANGE, gMonPalette_MiniorCoreOrange), SPECIES_PAL(MINIOR_CORE_YELLOW, gMonPalette_MiniorCoreYellow), @@ -1303,15 +1370,6 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(POLTEAGEIST_ANTIQUE, gMonPalette_Polteageist), - SPECIES_PAL(ALCREMIE_RUBY_CREAM, gMonPalette_AlcremieRubyCream), - SPECIES_PAL(ALCREMIE_MATCHA_CREAM, gMonPalette_AlcremieMatchaCream), - SPECIES_PAL(ALCREMIE_MINT_CREAM, gMonPalette_AlcremieMintCream), - SPECIES_PAL(ALCREMIE_LEMON_CREAM, gMonPalette_AlcremieLemonCream), - SPECIES_PAL(ALCREMIE_SALTED_CREAM, gMonPalette_AlcremieSaltedCream), - SPECIES_PAL(ALCREMIE_RUBY_SWIRL, gMonPalette_AlcremieRubySwirl), - SPECIES_PAL(ALCREMIE_CARAMEL_SWIRL, gMonPalette_AlcremieCaramelSwirl), - SPECIES_PAL(ALCREMIE_RAINBOW_SWIRL, gMonPalette_AlcremieRainbowSwirl), - SPECIES_PAL(EISCUE_NOICE_FACE, gMonPalette_EiscueNoiceFace), SPECIES_PAL(INDEEDEE_FEMALE, gMonPalette_IndeedeeFemale), @@ -1330,8 +1388,178 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES + 1] = SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider), SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider), + SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_EnamorusTherian), SPECIES_PAL(BASCULEGION_FEMALE, gMonPalette_BasculegionFemale), + + // Gigantamax Forms + SPECIES_PAL(VENUSAUR_GIGANTAMAX, gMonPalette_VenusaurGigantamax), + SPECIES_PAL(CHARIZARD_GIGANTAMAX, gMonPalette_CharizardGigantamax), + SPECIES_PAL(BLASTOISE_GIGANTAMAX, gMonPalette_BlastoiseGigantamax), + SPECIES_PAL(BUTTERFREE_GIGANTAMAX, gMonPalette_ButterfreeGigantamax), + SPECIES_PAL(PIKACHU_GIGANTAMAX, gMonPalette_PikachuGigantamax), + SPECIES_PAL(MEOWTH_GIGANTAMAX, gMonPalette_MeowthGigantamax), + SPECIES_PAL(MACHAMP_GIGANTAMAX, gMonPalette_MachampGigantamax), + SPECIES_PAL(GENGAR_GIGANTAMAX, gMonPalette_GengarGigantamax), + SPECIES_PAL(KINGLER_GIGANTAMAX, gMonPalette_KinglerGigantamax), + SPECIES_PAL(LAPRAS_GIGANTAMAX, gMonPalette_LaprasGigantamax), + SPECIES_PAL(EEVEE_GIGANTAMAX, gMonPalette_EeveeGigantamax), + SPECIES_PAL(SNORLAX_GIGANTAMAX, gMonPalette_SnorlaxGigantamax), + SPECIES_PAL(GARBODOR_GIGANTAMAX, gMonPalette_GarbodorGigantamax), + SPECIES_PAL(MELMETAL_GIGANTAMAX, gMonPalette_MelmetalGigantamax), + SPECIES_PAL(RILLABOOM_GIGANTAMAX, gMonPalette_RillaboomGigantamax), + SPECIES_PAL(CINDERACE_GIGANTAMAX, gMonPalette_CinderaceGigantamax), + SPECIES_PAL(INTELEON_GIGANTAMAX, gMonPalette_InteleonGigantamax), + SPECIES_PAL(CORVIKNIGHT_GIGANTAMAX, gMonPalette_CorviknightGigantamax), + SPECIES_PAL(ORBEETLE_GIGANTAMAX, gMonPalette_OrbeetleGigantamax), + SPECIES_PAL(DREDNAW_GIGANTAMAX, gMonPalette_DrednawGigantamax), + SPECIES_PAL(COALOSSAL_GIGANTAMAX, gMonPalette_CoalossalGigantamax), + SPECIES_PAL(FLAPPLE_GIGANTAMAX, gMonPalette_FlappleGigantamax), + SPECIES_PAL(APPLETUN_GIGANTAMAX, gMonPalette_AppletunGigantamax), + SPECIES_PAL(SANDACONDA_GIGANTAMAX, gMonPalette_SandacondaGigantamax), + SPECIES_PAL(TOXTRICITY_AMPED_GIGANTAMAX, gMonPalette_ToxtricityGigantamax), + SPECIES_PAL(TOXTRICITY_LOW_KEY_GIGANTAMAX, gMonPalette_ToxtricityGigantamax), + SPECIES_PAL(CENTISKORCH_GIGANTAMAX, gMonPalette_CentiskorchGigantamax), + SPECIES_PAL(HATTERENE_GIGANTAMAX, gMonPalette_HattereneGigantamax), + SPECIES_PAL(GRIMMSNARL_GIGANTAMAX, gMonPalette_GrimmsnarlGigantamax), + SPECIES_PAL(ALCREMIE_GIGANTAMAX, gMonPalette_AlcremieGigantamax), + SPECIES_PAL(COPPERAJAH_GIGANTAMAX, gMonPalette_CopperajahGigantamax), + SPECIES_PAL(DURALUDON_GIGANTAMAX, gMonPalette_DuraludonGigantamax), + SPECIES_PAL(URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, gMonPalette_UrshifuSingleStrikeGigantamax), + SPECIES_PAL(URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, gMonPalette_UrshifuRapidStrikeGigantamax), +#endif +#if P_GEN_9_POKEMON == TRUE + SPECIES_PAL(SPRIGATITO, gMonPalette_Sprigatito), + SPECIES_PAL(FLORAGATO, gMonPalette_Floragato), + SPECIES_PAL(MEOWSCARADA, gMonPalette_Meowscarada), + SPECIES_PAL(FUECOCO, gMonPalette_Fuecoco), + SPECIES_PAL(CROCALOR, gMonPalette_Crocalor), + SPECIES_PAL(SKELEDIRGE, gMonPalette_Skeledirge), + SPECIES_PAL(QUAXLY, gMonPalette_Quaxly), + SPECIES_PAL(QUAXWELL, gMonPalette_Quaxwell), + SPECIES_PAL(QUAQUAVAL, gMonPalette_Quaquaval), + SPECIES_PAL(LECHONK, gMonPalette_Lechonk), + SPECIES_PAL(OINKOLOGNE_MALE, gMonPalette_OinkologneMale), + SPECIES_PAL(OINKOLOGNE_FEMALE, gMonPalette_OinkologneFemale), + SPECIES_PAL(TAROUNTULA, gMonPalette_Tarountula), + SPECIES_PAL(SPIDOPS, gMonPalette_Spidops), + SPECIES_PAL(NYMBLE, gMonPalette_Nymble), + SPECIES_PAL(LOKIX, gMonPalette_Lokix), + SPECIES_PAL(PAWMI, gMonPalette_Pawmi), + SPECIES_PAL(PAWMO, gMonPalette_Pawmo), + SPECIES_PAL(PAWMOT, gMonPalette_Pawmot), + SPECIES_PAL(TANDEMAUS, gMonPalette_Tandemaus), + SPECIES_PAL(MAUSHOLD_FAMILY_OF_THREE, gMonPalette_Maushold), + SPECIES_PAL(MAUSHOLD_FAMILY_OF_FOUR, gMonPalette_Maushold), + SPECIES_PAL(FIDOUGH, gMonPalette_Fidough), + SPECIES_PAL(DACHSBUN, gMonPalette_Dachsbun), + SPECIES_PAL(SMOLIV, gMonPalette_Smoliv), + SPECIES_PAL(DOLLIV, gMonPalette_Dolliv), + SPECIES_PAL(ARBOLIVA, gMonPalette_Arboliva), + SPECIES_PAL(SQUAWKABILLY_GREEN_PLUMAGE, gMonPalette_SquawkabillyGreenPlumage), + SPECIES_PAL(SQUAWKABILLY_BLUE_PLUMAGE, gMonPalette_SquawkabillyBluePlumage), + SPECIES_PAL(SQUAWKABILLY_YELLOW_PLUMAGE, gMonPalette_SquawkabillyYellowPlumage), + SPECIES_PAL(SQUAWKABILLY_WHITE_PLUMAGE, gMonPalette_SquawkabillyWhitePlumage), + SPECIES_PAL(NACLI, gMonPalette_Nacli), + SPECIES_PAL(NACLSTACK, gMonPalette_Naclstack), + SPECIES_PAL(GARGANACL, gMonPalette_Garganacl), + SPECIES_PAL(CHARCADET, gMonPalette_Charcadet), + SPECIES_PAL(ARMAROUGE, gMonPalette_Armarouge), + SPECIES_PAL(CERULEDGE, gMonPalette_Ceruledge), + SPECIES_PAL(TADBULB, gMonPalette_Tadbulb), + SPECIES_PAL(BELLIBOLT, gMonPalette_Bellibolt), + SPECIES_PAL(WATTREL, gMonPalette_Wattrel), + SPECIES_PAL(KILOWATTREL, gMonPalette_Kilowattrel), + SPECIES_PAL(MASCHIFF, gMonPalette_Maschiff), + SPECIES_PAL(MABOSSTIFF, gMonPalette_Mabosstiff), + SPECIES_PAL(SHROODLE, gMonPalette_Shroodle), + SPECIES_PAL(GRAFAIAI, gMonPalette_Grafaiai), + SPECIES_PAL(BRAMBLIN, gMonPalette_Bramblin), + SPECIES_PAL(BRAMBLEGHAST, gMonPalette_Brambleghast), + SPECIES_PAL(TOEDSCOOL, gMonPalette_Toedscool), + SPECIES_PAL(TOEDSCRUEL, gMonPalette_Toedscruel), + SPECIES_PAL(KLAWF, gMonPalette_Klawf), + SPECIES_PAL(CAPSAKID, gMonPalette_Capsakid), + SPECIES_PAL(SCOVILLAIN, gMonPalette_Scovillain), + SPECIES_PAL(RELLOR, gMonPalette_Rellor), + SPECIES_PAL(RABSCA, gMonPalette_Rabsca), + SPECIES_PAL(FLITTLE, gMonPalette_Flittle), + SPECIES_PAL(ESPATHRA, gMonPalette_Espathra), + SPECIES_PAL(TINKATINK, gMonPalette_Tinkatink), + SPECIES_PAL(TINKATUFF, gMonPalette_Tinkatuff), + SPECIES_PAL(TINKATON, gMonPalette_Tinkaton), + SPECIES_PAL(WIGLETT, gMonPalette_Wiglett), + SPECIES_PAL(WUGTRIO, gMonPalette_Wugtrio), + SPECIES_PAL(BOMBIRDIER, gMonPalette_Bombirdier), + SPECIES_PAL(FINIZEN, gMonPalette_Finizen), + SPECIES_PAL(PALAFIN_ZERO, gMonPalette_PalafinZero), + SPECIES_PAL(PALAFIN_HERO, gMonPalette_PalafinHero), + SPECIES_PAL(VAROOM, gMonPalette_Varoom), + SPECIES_PAL(REVAVROOM, gMonPalette_Revavroom), + SPECIES_PAL(CYCLIZAR, gMonPalette_Cyclizar), + SPECIES_PAL(ORTHWORM, gMonPalette_Orthworm), + SPECIES_PAL(GLIMMET, gMonPalette_Glimmet), + SPECIES_PAL(GLIMMORA, gMonPalette_Glimmora), + SPECIES_PAL(GREAVARD, gMonPalette_Greavard), + SPECIES_PAL(HOUNDSTONE, gMonPalette_Houndstone), + SPECIES_PAL(FLAMIGO, gMonPalette_Flamigo), + SPECIES_PAL(CETODDLE, gMonPalette_Cetoddle), + SPECIES_PAL(CETITAN, gMonPalette_Cetitan), + SPECIES_PAL(VELUZA, gMonPalette_Veluza), + SPECIES_PAL(DONDOZO, gMonPalette_Dondozo), + SPECIES_PAL(TATSUGIRI_CURLY, gMonPalette_TatsugiriCurly), + SPECIES_PAL(TATSUGIRI_DROOPY, gMonPalette_TatsugiriDroopy), + SPECIES_PAL(TATSUGIRI_STRETCHY, gMonPalette_TatsugiriStretchy), + SPECIES_PAL(ANNIHILAPE, gMonPalette_Annihilape), + SPECIES_PAL(CLODSIRE, gMonPalette_Clodsire), + SPECIES_PAL(FARIGIRAF, gMonPalette_Farigiraf), + SPECIES_PAL(DUDUNSPARCE_TWO_SEGMENT, gMonPalette_Dudunsparce), + SPECIES_PAL(DUDUNSPARCE_THREE_SEGMENT, gMonPalette_Dudunsparce), + SPECIES_PAL(KINGAMBIT, gMonPalette_Kingambit), + SPECIES_PAL(GREAT_TUSK, gMonPalette_GreatTusk), + SPECIES_PAL(SCREAM_TAIL, gMonPalette_ScreamTail), + SPECIES_PAL(BRUTE_BONNET, gMonPalette_BruteBonnet), + SPECIES_PAL(FLUTTER_MANE, gMonPalette_FlutterMane), + SPECIES_PAL(SLITHER_WING, gMonPalette_SlitherWing), + SPECIES_PAL(SANDY_SHOCKS, gMonPalette_SandyShocks), + SPECIES_PAL(IRON_TREADS, gMonPalette_IronTreads), + SPECIES_PAL(IRON_BUNDLE, gMonPalette_IronBundle), + SPECIES_PAL(IRON_HANDS, gMonPalette_IronHands), + SPECIES_PAL(IRON_JUGULIS, gMonPalette_IronJugulis), + SPECIES_PAL(IRON_MOTH, gMonPalette_IronMoth), + SPECIES_PAL(IRON_THORNS, gMonPalette_IronThorns), + SPECIES_PAL(FRIGIBAX, gMonPalette_Frigibax), + SPECIES_PAL(ARCTIBAX, gMonPalette_Arctibax), + SPECIES_PAL(BAXCALIBUR, gMonPalette_Baxcalibur), + SPECIES_PAL(GIMMIGHOUL_CHEST, gMonPalette_GimmighoulChest), + SPECIES_PAL(GIMMIGHOUL_ROAMING, gMonPalette_GimmighoulRoaming), + SPECIES_PAL(GHOLDENGO, gMonPalette_Gholdengo), + SPECIES_PAL(WO_CHIEN, gMonPalette_WoChien), + SPECIES_PAL(CHIEN_PAO, gMonPalette_ChienPao), + SPECIES_PAL(TING_LU, gMonPalette_TingLu), + SPECIES_PAL(CHI_YU, gMonPalette_ChiYu), + SPECIES_PAL(ROARING_MOON, gMonPalette_RoaringMoon), + SPECIES_PAL(IRON_VALIANT, gMonPalette_IronValiant), + SPECIES_PAL(KORAIDON, gMonPalette_Koraidon), + SPECIES_PAL(MIRAIDON, gMonPalette_Miraidon), + SPECIES_PAL(WALKING_WAKE, gMonPalette_WalkingWake), + SPECIES_PAL(IRON_LEAVES, gMonPalette_IronLeaves), + SPECIES_PAL(DIPPLIN, gMonPalette_Dipplin), + SPECIES_PAL(POLTCHAGEIST_COUNTERFEIT, gMonPalette_Poltchageist), + SPECIES_PAL(POLTCHAGEIST_ARTISAN, gMonPalette_Poltchageist), + SPECIES_PAL(SINISTCHA_UNREMARKABLE, gMonPalette_Sinistcha), + SPECIES_PAL(SINISTCHA_MASTERPIECE, gMonPalette_Sinistcha), + SPECIES_PAL(OKIDOGI, gMonPalette_Okidogi), + SPECIES_PAL(MUNKIDORI, gMonPalette_Munkidori), + SPECIES_PAL(FEZANDIPITI, gMonPalette_Fezandipiti), + SPECIES_PAL(OGERPON_TEAL_MASK, gMonPalette_OgerponTealMask), + SPECIES_PAL(OGERPON_WELLSPRING_MASK, gMonPalette_OgerponWellspringMask), + SPECIES_PAL(OGERPON_HEARTHFLAME_MASK, gMonPalette_OgerponHearthflameMask), + SPECIES_PAL(OGERPON_CORNERSTONE_MASK, gMonPalette_OgerponCornerstoneMask), + // SPECIES_PAL(OGERPON_TEAL_MASK_TERA, gMonPalette_OgerponTealMaskTera), + // SPECIES_PAL(OGERPON_WELLSPRING_MASK_TERA, gMonPalette_OgerponWellspringMaskTera), + // SPECIES_PAL(OGERPON_HEARTHFLAME_MASK_TERA, gMonPalette_OgerponHearthflameMaskTera), + // SPECIES_PAL(OGERPON_CORNERSTONE_MASK_TERA, gMonPalette_OgerponCornerstoneMaskTera), #endif SPECIES_PAL(EGG, gMonPalette_Egg), }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index b674617b67..f7ec441094 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -129,6 +129,9 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(MAGMAR, gMonShinyPalette_Magmar), SPECIES_SHINY_PAL(PINSIR, gMonShinyPalette_Pinsir), SPECIES_SHINY_PAL(TAUROS, gMonShinyPalette_Tauros), + SPECIES_SHINY_PAL(TAUROS_PALDEAN_COMBAT_BREED, gMonShinyPalette_TaurosPaldeanCombatBreed), + SPECIES_SHINY_PAL(TAUROS_PALDEAN_BLAZE_BREED, gMonShinyPalette_TaurosPaldeanBlazeBreed), + SPECIES_SHINY_PAL(TAUROS_PALDEAN_AQUA_BREED, gMonShinyPalette_TaurosPaldeanAquaBreed), SPECIES_SHINY_PAL(MAGIKARP, gMonShinyPalette_Magikarp), SPECIES_SHINY_PAL(GYARADOS, gMonShinyPalette_Gyarados), SPECIES_SHINY_PAL(LAPRAS, gMonShinyPalette_Lapras), @@ -195,6 +198,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(SUNFLORA, gMonShinyPalette_Sunflora), SPECIES_SHINY_PAL(YANMA, gMonShinyPalette_Yanma), SPECIES_SHINY_PAL(WOOPER, gMonShinyPalette_Wooper), + SPECIES_SHINY_PAL(WOOPER_PALDEAN, gMonShinyPalette_WooperPaldean), SPECIES_SHINY_PAL(QUAGSIRE, gMonShinyPalette_Quagsire), SPECIES_SHINY_PAL(ESPEON, gMonShinyPalette_Espeon), SPECIES_SHINY_PAL(UMBREON, gMonShinyPalette_Umbreon), @@ -360,7 +364,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(ARON, gMonShinyPalette_Aron), SPECIES_SHINY_PAL(LAIRON, gMonShinyPalette_Lairon), SPECIES_SHINY_PAL(AGGRON, gMonShinyPalette_Aggron), - SPECIES_SHINY_PAL(CASTFORM, gMonShinyPalette_Castform), + SPECIES_SHINY_PAL(CASTFORM_NORMAL, gMonShinyPalette_CastformNormal), SPECIES_SHINY_PAL(VOLBEAT, gMonShinyPalette_Volbeat), SPECIES_SHINY_PAL(ILLUMISE, gMonShinyPalette_Illumise), SPECIES_SHINY_PAL(LILEEP, gMonShinyPalette_Lileep), @@ -385,7 +389,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(LATIAS, gMonShinyPalette_Latias), SPECIES_SHINY_PAL(LATIOS, gMonShinyPalette_Latios), SPECIES_SHINY_PAL(JIRACHI, gMonShinyPalette_Jirachi), - SPECIES_SHINY_PAL(DEOXYS, gMonShinyPalette_Deoxys), + SPECIES_SHINY_PAL(DEOXYS_NORMAL, gMonShinyPalette_DeoxysNormal), SPECIES_SHINY_PAL(CHIMECHO, gMonShinyPalette_Chimecho), #if P_GEN_4_POKEMON == TRUE SPECIES_SHINY_PAL(TURTWIG, gMonShinyPalette_Turtwig), @@ -413,8 +417,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(RAMPARDOS, gMonShinyPalette_Rampardos), SPECIES_SHINY_PAL(SHIELDON, gMonShinyPalette_Shieldon), SPECIES_SHINY_PAL(BASTIODON, gMonShinyPalette_Bastiodon), - SPECIES_SHINY_PAL(BURMY, gMonShinyPalette_Burmy), - SPECIES_SHINY_PAL(WORMADAM, gMonShinyPalette_Wormadam), + SPECIES_SHINY_PAL(BURMY_PLANT_CLOAK, gMonShinyPalette_BurmyPlantCloak), + SPECIES_SHINY_PAL(WORMADAM_PLANT_CLOAK, gMonShinyPalette_WormadamPlantCloak), SPECIES_SHINY_PAL(MOTHIM, gMonShinyPalette_Mothim), SPECIES_SHINY_PAL(COMBEE, gMonShinyPalette_Combee), SPECIES_SHINY_PAL(VESPIQUEN, gMonShinyPalette_Vespiquen), @@ -422,9 +426,9 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(BUIZEL, gMonShinyPalette_Buizel), SPECIES_SHINY_PAL(FLOATZEL, gMonShinyPalette_Floatzel), SPECIES_SHINY_PAL(CHERUBI, gMonShinyPalette_Cherubi), - SPECIES_SHINY_PAL(CHERRIM, gMonShinyPalette_Cherrim), - SPECIES_SHINY_PAL(SHELLOS, gMonShinyPalette_Shellos), - SPECIES_SHINY_PAL(GASTRODON, gMonShinyPalette_Gastrodon), + SPECIES_SHINY_PAL(CHERRIM_OVERCAST, gMonShinyPalette_CherrimOvercast), + SPECIES_SHINY_PAL(SHELLOS_WEST_SEA, gMonShinyPalette_ShellosWestSea), + SPECIES_SHINY_PAL(GASTRODON_WEST_SEA, gMonShinyPalette_GastrodonWestSea), SPECIES_SHINY_PAL(AMBIPOM, gMonShinyPalette_Ambipom), SPECIES_SHINY_PAL(DRIFLOON, gMonShinyPalette_Drifloon), SPECIES_SHINY_PAL(DRIFBLIM, gMonShinyPalette_Drifblim), @@ -488,12 +492,12 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(PALKIA, gMonShinyPalette_Palkia), SPECIES_SHINY_PAL(HEATRAN, gMonShinyPalette_Heatran), SPECIES_SHINY_PAL(REGIGIGAS, gMonShinyPalette_Regigigas), - SPECIES_SHINY_PAL(GIRATINA, gMonShinyPalette_Giratina), + SPECIES_SHINY_PAL(GIRATINA_ALTERED, gMonShinyPalette_GiratinaAltered), SPECIES_SHINY_PAL(CRESSELIA, gMonShinyPalette_Cresselia), SPECIES_SHINY_PAL(PHIONE, gMonShinyPalette_Phione), SPECIES_SHINY_PAL(MANAPHY, gMonShinyPalette_Manaphy), SPECIES_SHINY_PAL(DARKRAI, gMonShinyPalette_Darkrai), - SPECIES_SHINY_PAL(SHAYMIN, gMonShinyPalette_Shaymin), + SPECIES_SHINY_PAL(SHAYMIN_LAND, gMonShinyPalette_ShayminLand), SPECIES_SHINY_PAL(ARCEUS, gMonShinyPalette_Arceus), #endif #if P_GEN_5_POKEMON == TRUE @@ -553,12 +557,12 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(WHIMSICOTT, gMonShinyPalette_Whimsicott), SPECIES_SHINY_PAL(PETILIL, gMonShinyPalette_Petilil), SPECIES_SHINY_PAL(LILLIGANT, gMonShinyPalette_Lilligant), - SPECIES_SHINY_PAL(BASCULIN, gMonShinyPalette_Basculin), + SPECIES_SHINY_PAL(BASCULIN, gMonShinyPalette_BasculinRedStriped), SPECIES_SHINY_PAL(SANDILE, gMonShinyPalette_Sandile), SPECIES_SHINY_PAL(KROKOROK, gMonShinyPalette_Krokorok), SPECIES_SHINY_PAL(KROOKODILE, gMonShinyPalette_Krookodile), SPECIES_SHINY_PAL(DARUMAKA, gMonShinyPalette_Darumaka), - SPECIES_SHINY_PAL(DARMANITAN, gMonShinyPalette_Darmanitan), + SPECIES_SHINY_PAL(DARMANITAN_STANDARD_MODE, gMonShinyPalette_DarmanitanStandardMode), SPECIES_SHINY_PAL(MARACTUS, gMonShinyPalette_Maractus), SPECIES_SHINY_PAL(DWEBBLE, gMonShinyPalette_Dwebble), SPECIES_SHINY_PAL(CRUSTLE, gMonShinyPalette_Crustle), @@ -588,8 +592,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(VANILLITE, gMonShinyPalette_Vanillite), SPECIES_SHINY_PAL(VANILLISH, gMonShinyPalette_Vanillish), SPECIES_SHINY_PAL(VANILLUXE, gMonShinyPalette_Vanilluxe), - SPECIES_SHINY_PAL(DEERLING, gMonShinyPalette_Deerling), - SPECIES_SHINY_PAL(SAWSBUCK, gMonShinyPalette_Sawsbuck), + SPECIES_SHINY_PAL(DEERLING_SPRING, gMonShinyPalette_DeerlingSpring), + SPECIES_SHINY_PAL(SAWSBUCK_SPRING, gMonShinyPalette_SawsbuckSpring), SPECIES_SHINY_PAL(EMOLGA, gMonShinyPalette_Emolga), SPECIES_SHINY_PAL(KARRABLAST, gMonShinyPalette_Karrablast), SPECIES_SHINY_PAL(ESCAVALIER, gMonShinyPalette_Escavalier), @@ -644,14 +648,14 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(COBALION, gMonShinyPalette_Cobalion), SPECIES_SHINY_PAL(TERRAKION, gMonShinyPalette_Terrakion), SPECIES_SHINY_PAL(VIRIZION, gMonShinyPalette_Virizion), - SPECIES_SHINY_PAL(TORNADUS, gMonShinyPalette_Tornadus), - SPECIES_SHINY_PAL(THUNDURUS, gMonShinyPalette_Thundurus), + SPECIES_SHINY_PAL(TORNADUS_INCARNATE, gMonShinyPalette_TornadusIncarnate), + SPECIES_SHINY_PAL(THUNDURUS_INCARNATE, gMonShinyPalette_ThundurusIncarnate), SPECIES_SHINY_PAL(RESHIRAM, gMonShinyPalette_Reshiram), SPECIES_SHINY_PAL(ZEKROM, gMonShinyPalette_Zekrom), - SPECIES_SHINY_PAL(LANDORUS, gMonShinyPalette_Landorus), + SPECIES_SHINY_PAL(LANDORUS_INCARNATE, gMonShinyPalette_LandorusIncarnate), SPECIES_SHINY_PAL(KYUREM, gMonShinyPalette_Kyurem), - SPECIES_SHINY_PAL(KELDEO, gMonShinyPalette_Keldeo), - SPECIES_SHINY_PAL(MELOETTA, gMonShinyPalette_Meloetta), + SPECIES_SHINY_PAL(KELDEO_ORDINARY, gMonShinyPalette_KeldeoOrdinary), + SPECIES_SHINY_PAL(MELOETTA, gMonShinyPalette_MeloettaAria), SPECIES_SHINY_PAL(GENESECT, gMonShinyPalette_Genesect), #endif #if P_GEN_6_POKEMON == TRUE @@ -671,22 +675,22 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(TALONFLAME, gMonShinyPalette_Talonflame), SPECIES_SHINY_PAL(SCATTERBUG, gMonShinyPalette_Scatterbug), SPECIES_SHINY_PAL(SPEWPA, gMonShinyPalette_Spewpa), - SPECIES_SHINY_PAL(VIVILLON, gMonShinyPalette_Vivillon), + SPECIES_SHINY_PAL(VIVILLON_ICY_SNOW, gMonShinyPalette_VivillonIcySnow), SPECIES_SHINY_PAL(LITLEO, gMonShinyPalette_Litleo), SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_Pyroar), - SPECIES_SHINY_PAL(FLABEBE, gMonShinyPalette_Flabebe), - SPECIES_SHINY_PAL(FLOETTE, gMonShinyPalette_Floette), - SPECIES_SHINY_PAL(FLORGES, gMonShinyPalette_Florges), + SPECIES_SHINY_PAL(FLABEBE_RED_FLOWER, gMonShinyPalette_FlabebeRedFlower), + SPECIES_SHINY_PAL(FLOETTE_RED_FLOWER, gMonShinyPalette_FloetteRedFlower), + SPECIES_SHINY_PAL(FLORGES_RED_FLOWER, gMonShinyPalette_FlorgesRedFlower), SPECIES_SHINY_PAL(SKIDDO, gMonShinyPalette_Skiddo), SPECIES_SHINY_PAL(GOGOAT, gMonShinyPalette_Gogoat), SPECIES_SHINY_PAL(PANCHAM, gMonShinyPalette_Pancham), SPECIES_SHINY_PAL(PANGORO, gMonShinyPalette_Pangoro), - SPECIES_SHINY_PAL(FURFROU, gMonShinyPalette_Furfrou), + SPECIES_SHINY_PAL(FURFROU_NATURAL, gMonShinyPalette_FurfrouNatural), SPECIES_SHINY_PAL(ESPURR, gMonShinyPalette_Espurr), - SPECIES_SHINY_PAL(MEOWSTIC, gMonShinyPalette_Meowstic), + SPECIES_SHINY_PAL(MEOWSTIC_MALE, gMonShinyPalette_MeowsticMale), SPECIES_SHINY_PAL(HONEDGE, gMonShinyPalette_Honedge), SPECIES_SHINY_PAL(DOUBLADE, gMonShinyPalette_Doublade), - SPECIES_SHINY_PAL(AEGISLASH, gMonShinyPalette_Aegislash), + SPECIES_SHINY_PAL(AEGISLASH_SHIELD, gMonShinyPalette_AegislashShield), SPECIES_SHINY_PAL(SPRITZEE, gMonShinyPalette_Spritzee), SPECIES_SHINY_PAL(AROMATISSE, gMonShinyPalette_Aromatisse), SPECIES_SHINY_PAL(SWIRLIX, gMonShinyPalette_Swirlix), @@ -715,17 +719,17 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(KLEFKI, gMonShinyPalette_Klefki), SPECIES_SHINY_PAL(PHANTUMP, gMonShinyPalette_Phantump), SPECIES_SHINY_PAL(TREVENANT, gMonShinyPalette_Trevenant), - SPECIES_SHINY_PAL(PUMPKABOO, gMonShinyPalette_Pumpkaboo), - SPECIES_SHINY_PAL(GOURGEIST, gMonShinyPalette_Gourgeist), + SPECIES_SHINY_PAL(PUMPKABOO_AVERAGE, gMonShinyPalette_Pumpkaboo), + SPECIES_SHINY_PAL(GOURGEIST_AVERAGE, gMonShinyPalette_Gourgeist), SPECIES_SHINY_PAL(BERGMITE, gMonShinyPalette_Bergmite), SPECIES_SHINY_PAL(AVALUGG, gMonShinyPalette_Avalugg), SPECIES_SHINY_PAL(NOIBAT, gMonShinyPalette_Noibat), SPECIES_SHINY_PAL(NOIVERN, gMonShinyPalette_Noivern), - SPECIES_SHINY_PAL(XERNEAS, gMonShinyPalette_Xerneas), + SPECIES_SHINY_PAL(XERNEAS_NEUTRAL, gMonShinyPalette_XerneasNeutral), SPECIES_SHINY_PAL(YVELTAL, gMonShinyPalette_Yveltal), - SPECIES_SHINY_PAL(ZYGARDE, gMonShinyPalette_Zygarde), + SPECIES_SHINY_PAL(ZYGARDE_50_AURA_BREAK, gMonShinyPalette_Zygarde50), SPECIES_SHINY_PAL(DIANCIE, gMonShinyPalette_Diancie), - SPECIES_SHINY_PAL(HOOPA, gMonShinyPalette_Hoopa), + SPECIES_SHINY_PAL(HOOPA_CONFINED, gMonShinyPalette_HoopaConfined), SPECIES_SHINY_PAL(VOLCANION, gMonShinyPalette_Volcanion), #endif #if P_GEN_7_POKEMON == TRUE @@ -748,12 +752,12 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(VIKAVOLT, gMonShinyPalette_Vikavolt), SPECIES_SHINY_PAL(CRABRAWLER, gMonShinyPalette_Crabrawler), SPECIES_SHINY_PAL(CRABOMINABLE, gMonShinyPalette_Crabominable), - SPECIES_SHINY_PAL(ORICORIO, gMonShinyPalette_Oricorio), + SPECIES_SHINY_PAL(ORICORIO_BAILE, gMonShinyPalette_OricorioBaile), SPECIES_SHINY_PAL(CUTIEFLY, gMonShinyPalette_Cutiefly), SPECIES_SHINY_PAL(RIBOMBEE, gMonShinyPalette_Ribombee), SPECIES_SHINY_PAL(ROCKRUFF, gMonShinyPalette_Rockruff), - SPECIES_SHINY_PAL(LYCANROC, gMonShinyPalette_Lycanroc), - SPECIES_SHINY_PAL(WISHIWASHI, gMonShinyPalette_Wishiwashi), + SPECIES_SHINY_PAL(LYCANROC_MIDDAY, gMonShinyPalette_LycanrocMidday), + SPECIES_SHINY_PAL(WISHIWASHI_SOLO, gMonShinyPalette_WishiwashiSolo), SPECIES_SHINY_PAL(MAREANIE, gMonShinyPalette_Mareanie), SPECIES_SHINY_PAL(TOXAPEX, gMonShinyPalette_Toxapex), SPECIES_SHINY_PAL(MUDBRAY, gMonShinyPalette_Mudbray), @@ -780,12 +784,12 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(PALOSSAND, gMonShinyPalette_Palossand), SPECIES_SHINY_PAL(PYUKUMUKU, gMonShinyPalette_Pyukumuku), SPECIES_SHINY_PAL(TYPE_NULL, gMonShinyPalette_TypeNull), - SPECIES_SHINY_PAL(SILVALLY, gMonShinyPalette_Silvally), - SPECIES_SHINY_PAL(MINIOR, gMonShinyPalette_Minior), + SPECIES_SHINY_PAL(SILVALLY_NORMAL, gMonShinyPalette_SilvallyNormal), + SPECIES_SHINY_PAL(MINIOR_METEOR_RED, gMonShinyPalette_MiniorMeteor), SPECIES_SHINY_PAL(KOMALA, gMonShinyPalette_Komala), SPECIES_SHINY_PAL(TURTONATOR, gMonShinyPalette_Turtonator), SPECIES_SHINY_PAL(TOGEDEMARU, gMonShinyPalette_Togedemaru), - SPECIES_SHINY_PAL(MIMIKYU, gMonShinyPalette_Mimikyu), + SPECIES_SHINY_PAL(MIMIKYU_DISGUISED, gMonShinyPalette_MimikyuDisguised), SPECIES_SHINY_PAL(BRUXISH, gMonShinyPalette_Bruxish), SPECIES_SHINY_PAL(DRAMPA, gMonShinyPalette_Drampa), SPECIES_SHINY_PAL(DHELMISE, gMonShinyPalette_Dhelmise), @@ -858,13 +862,13 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(ARROKUDA, gMonShinyPalette_Arrokuda), SPECIES_SHINY_PAL(BARRASKEWDA, gMonShinyPalette_Barraskewda), SPECIES_SHINY_PAL(TOXEL, gMonShinyPalette_Toxel), - SPECIES_SHINY_PAL(TOXTRICITY, gMonShinyPalette_Toxtricity), + SPECIES_SHINY_PAL(TOXTRICITY_AMPED, gMonShinyPalette_ToxtricityAmped), SPECIES_SHINY_PAL(SIZZLIPEDE, gMonShinyPalette_Sizzlipede), SPECIES_SHINY_PAL(CENTISKORCH, gMonShinyPalette_Centiskorch), SPECIES_SHINY_PAL(CLOBBOPUS, gMonShinyPalette_Clobbopus), SPECIES_SHINY_PAL(GRAPPLOCT, gMonShinyPalette_Grapploct), - SPECIES_SHINY_PAL(SINISTEA, gMonShinyPalette_Sinistea), - SPECIES_SHINY_PAL(POLTEAGEIST, gMonShinyPalette_Polteageist), + SPECIES_SHINY_PAL(SINISTEA_PHONY, gMonShinyPalette_Sinistea), + SPECIES_SHINY_PAL(POLTEAGEIST_PHONY, gMonShinyPalette_Polteageist), SPECIES_SHINY_PAL(HATENNA, gMonShinyPalette_Hatenna), SPECIES_SHINY_PAL(HATTREM, gMonShinyPalette_Hattrem), SPECIES_SHINY_PAL(HATTERENE, gMonShinyPalette_Hatterene), @@ -878,15 +882,77 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(MR_RIME, gMonShinyPalette_MrRime), SPECIES_SHINY_PAL(RUNERIGUS, gMonShinyPalette_Runerigus), SPECIES_SHINY_PAL(MILCERY, gMonShinyPalette_Milcery), - SPECIES_SHINY_PAL(ALCREMIE, gMonShinyPalette_Alcremie), + SPECIES_PAL(ALCREMIE_STRAWBERRY_VANILLA_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RUBY_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_MATCHA_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_MINT_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_LEMON_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_SALTED_CREAM, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RUBY_SWIRL, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, gMonShinyPalette_AlcremieStrawberry), + SPECIES_PAL(ALCREMIE_BERRY_VANILLA_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_RUBY_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_MATCHA_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_MINT_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_LEMON_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_SALTED_CREAM, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_RUBY_SWIRL, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_CARAMEL_SWIRL, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_BERRY_RAINBOW_SWIRL, gMonShinyPalette_AlcremieBerry), + SPECIES_PAL(ALCREMIE_LOVE_VANILLA_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_RUBY_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_MATCHA_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_MINT_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_LEMON_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_SALTED_CREAM, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_RUBY_SWIRL, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_CARAMEL_SWIRL, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_LOVE_RAINBOW_SWIRL, gMonShinyPalette_AlcremieLove), + SPECIES_PAL(ALCREMIE_STAR_VANILLA_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_RUBY_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_MATCHA_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_MINT_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_LEMON_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_SALTED_CREAM, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_RUBY_SWIRL, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_CARAMEL_SWIRL, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_STAR_RAINBOW_SWIRL, gMonShinyPalette_AlcremieStar), + SPECIES_PAL(ALCREMIE_CLOVER_VANILLA_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_RUBY_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_MATCHA_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_MINT_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_LEMON_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_SALTED_CREAM, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_RUBY_SWIRL, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_CARAMEL_SWIRL, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_CLOVER_RAINBOW_SWIRL, gMonShinyPalette_AlcremieClover), + SPECIES_PAL(ALCREMIE_FLOWER_VANILLA_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_RUBY_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_MATCHA_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_MINT_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_LEMON_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_SALTED_CREAM, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_RUBY_SWIRL, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_CARAMEL_SWIRL, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_FLOWER_RAINBOW_SWIRL, gMonShinyPalette_AlcremieFlower), + SPECIES_PAL(ALCREMIE_RIBBON_VANILLA_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_RUBY_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_MATCHA_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_MINT_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_LEMON_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_SALTED_CREAM, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_RUBY_SWIRL, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_CARAMEL_SWIRL, gMonShinyPalette_AlcremieRibbon), + SPECIES_PAL(ALCREMIE_RIBBON_RAINBOW_SWIRL, gMonShinyPalette_AlcremieRibbon), SPECIES_SHINY_PAL(FALINKS, gMonShinyPalette_Falinks), SPECIES_SHINY_PAL(PINCURCHIN, gMonShinyPalette_Pincurchin), SPECIES_SHINY_PAL(SNOM, gMonShinyPalette_Snom), SPECIES_SHINY_PAL(FROSMOTH, gMonShinyPalette_Frosmoth), SPECIES_SHINY_PAL(STONJOURNER, gMonShinyPalette_Stonjourner), - SPECIES_SHINY_PAL(EISCUE, gMonShinyPalette_Eiscue), - SPECIES_SHINY_PAL(INDEEDEE, gMonShinyPalette_Indeedee), - SPECIES_SHINY_PAL(MORPEKO, gMonShinyPalette_Morpeko), + SPECIES_SHINY_PAL(EISCUE_ICE_FACE, gMonShinyPalette_EiscueIceFace), + SPECIES_SHINY_PAL(INDEEDEE_MALE, gMonShinyPalette_IndeedeeMale), + SPECIES_SHINY_PAL(MORPEKO_FULL_BELLY, gMonShinyPalette_MorpekoFullBelly), SPECIES_SHINY_PAL(CUFANT, gMonShinyPalette_Cufant), SPECIES_SHINY_PAL(COPPERAJAH, gMonShinyPalette_Copperajah), SPECIES_SHINY_PAL(DRACOZOLT, gMonShinyPalette_Dracozolt), @@ -897,11 +963,11 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(DREEPY, gMonShinyPalette_Dreepy), SPECIES_SHINY_PAL(DRAKLOAK, gMonShinyPalette_Drakloak), SPECIES_SHINY_PAL(DRAGAPULT, gMonShinyPalette_Dragapult), - SPECIES_SHINY_PAL(ZACIAN, gMonShinyPalette_Zacian), - SPECIES_SHINY_PAL(ZAMAZENTA, gMonShinyPalette_Zamazenta), + SPECIES_SHINY_PAL(ZACIAN_HERO_OF_MANY_BATTLES, gMonShinyPalette_ZacianHeroOfManyBattles), + SPECIES_SHINY_PAL(ZAMAZENTA_HERO_OF_MANY_BATTLES, gMonShinyPalette_ZamazentaHeroOfManyBattles), SPECIES_SHINY_PAL(ETERNATUS, gMonShinyPalette_Eternatus), SPECIES_SHINY_PAL(KUBFU, gMonShinyPalette_Kubfu), - SPECIES_SHINY_PAL(URSHIFU, gMonShinyPalette_Urshifu), + SPECIES_SHINY_PAL(URSHIFU_SINGLE_STRIKE_STYLE, gMonShinyPalette_UrshifuSingleStrikeStyle), SPECIES_SHINY_PAL(ZARUDE, gMonShinyPalette_Zarude), SPECIES_SHINY_PAL(REGIELEKI, gMonShinyPalette_Regieleki), SPECIES_SHINY_PAL(REGIDRAGO, gMonShinyPalette_Regidrago), @@ -911,10 +977,11 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_Wyrdeer), SPECIES_SHINY_PAL(KLEAVOR, gMonShinyPalette_Kleavor), SPECIES_SHINY_PAL(URSALUNA, gMonShinyPalette_Ursaluna), - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_Basculegion), + SPECIES_SHINY_PAL(URSALUNA_BLOODMOON, gMonShinyPalette_UrsalunaBloodmoon), + SPECIES_SHINY_PAL(BASCULEGION_MALE, gMonShinyPalette_BasculegionMale), SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_Sneasler), SPECIES_SHINY_PAL(OVERQWIL, gMonShinyPalette_Overqwil), - SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), + SPECIES_SHINY_PAL(ENAMORUS_INCARNATE, gMonShinyPalette_EnamorusIncarnate), #endif SPECIES_SHINY_PAL(VENUSAUR_MEGA, gMonShinyPalette_VenusaurMega), @@ -1011,7 +1078,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(LINOONE_GALARIAN, gMonShinyPalette_LinooneGalarian), #if P_GEN_5_POKEMON == TRUE SPECIES_SHINY_PAL(DARUMAKA_GALARIAN, gMonShinyPalette_DarumakaGalarian), - SPECIES_SHINY_PAL(DARMANITAN_GALARIAN, gMonShinyPalette_DarmanitanGalarian), + SPECIES_SHINY_PAL(DARMANITAN_GALARIAN_STANDARD_MODE, gMonShinyPalette_DarmanitanGalarianStandardMode), SPECIES_SHINY_PAL(YAMASK_GALARIAN, gMonShinyPalette_YamaskGalarian), SPECIES_SHINY_PAL(STUNFISK_GALARIAN, gMonShinyPalette_StunfiskGalarian), #endif @@ -1140,7 +1207,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(BASCULIN_WHITE_STRIPED, gMonShinyPalette_BasculinWhiteStriped), SPECIES_SHINY_PAL(DARMANITAN_ZEN_MODE, gMonShinyPalette_DarmanitanZenMode), - SPECIES_SHINY_PAL(DARMANITAN_ZEN_MODE_GALARIAN, gMonShinyPalette_DarmanitanZenModeGalarian), + SPECIES_SHINY_PAL(DARMANITAN_GALARIAN_ZEN_MODE, gMonShinyPalette_DarmanitanGalarianZenMode), SPECIES_SHINY_PAL(DEERLING_SUMMER, gMonShinyPalette_DeerlingSummer), SPECIES_SHINY_PAL(DEERLING_AUTUMN, gMonShinyPalette_DeerlingAutumn), @@ -1232,7 +1299,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(ZYGARDE_10, gMonShinyPalette_Zygarde10), SPECIES_SHINY_PAL(ZYGARDE_10_POWER_CONSTRUCT, gMonShinyPalette_Zygarde10), - SPECIES_SHINY_PAL(ZYGARDE_50_POWER_CONSTRUCT, gMonShinyPalette_Zygarde), + SPECIES_SHINY_PAL(ZYGARDE_50_POWER_CONSTRUCT, gMonShinyPalette_Zygarde50), SPECIES_SHINY_PAL(ZYGARDE_COMPLETE, gMonShinyPalette_ZygardeComplete), SPECIES_SHINY_PAL(HOOPA_UNBOUND, gMonShinyPalette_HoopaUnbound), @@ -1268,12 +1335,12 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(SILVALLY_DARK, gMonShinyPalette_SilvallyDark), SPECIES_SHINY_PAL(SILVALLY_FAIRY, gMonShinyPalette_SilvallyFairy), - SPECIES_SHINY_PAL(MINIOR_METEOR_ORANGE, gMonShinyPalette_Minior), - SPECIES_SHINY_PAL(MINIOR_METEOR_YELLOW, gMonShinyPalette_Minior), - SPECIES_SHINY_PAL(MINIOR_METEOR_GREEN, gMonShinyPalette_Minior), - SPECIES_SHINY_PAL(MINIOR_METEOR_BLUE, gMonShinyPalette_Minior), - SPECIES_SHINY_PAL(MINIOR_METEOR_INDIGO, gMonShinyPalette_Minior), - SPECIES_SHINY_PAL(MINIOR_METEOR_VIOLET, gMonShinyPalette_Minior), + SPECIES_SHINY_PAL(MINIOR_METEOR_ORANGE, gMonShinyPalette_MiniorMeteor), + SPECIES_SHINY_PAL(MINIOR_METEOR_YELLOW, gMonShinyPalette_MiniorMeteor), + SPECIES_SHINY_PAL(MINIOR_METEOR_GREEN, gMonShinyPalette_MiniorMeteor), + SPECIES_SHINY_PAL(MINIOR_METEOR_BLUE, gMonShinyPalette_MiniorMeteor), + SPECIES_SHINY_PAL(MINIOR_METEOR_INDIGO, gMonShinyPalette_MiniorMeteor), + SPECIES_SHINY_PAL(MINIOR_METEOR_VIOLET, gMonShinyPalette_MiniorMeteor), SPECIES_SHINY_PAL(MINIOR_CORE_RED, gMonShinyPalette_MiniorCore), SPECIES_SHINY_PAL(MINIOR_CORE_ORANGE, gMonShinyPalette_MiniorCore), SPECIES_SHINY_PAL(MINIOR_CORE_YELLOW, gMonShinyPalette_MiniorCore), @@ -1301,15 +1368,6 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(POLTEAGEIST_ANTIQUE, gMonShinyPalette_Polteageist), - SPECIES_SHINY_PAL(ALCREMIE_RUBY_CREAM, gMonShinyPalette_AlcremieRubyCream), - SPECIES_SHINY_PAL(ALCREMIE_MATCHA_CREAM, gMonShinyPalette_AlcremieMatchaCream), - SPECIES_SHINY_PAL(ALCREMIE_MINT_CREAM, gMonShinyPalette_AlcremieMintCream), - SPECIES_SHINY_PAL(ALCREMIE_LEMON_CREAM, gMonShinyPalette_AlcremieLemonCream), - SPECIES_SHINY_PAL(ALCREMIE_SALTED_CREAM, gMonShinyPalette_AlcremieSaltedCream), - SPECIES_SHINY_PAL(ALCREMIE_RUBY_SWIRL, gMonShinyPalette_AlcremieRubySwirl), - SPECIES_SHINY_PAL(ALCREMIE_CARAMEL_SWIRL, gMonShinyPalette_AlcremieCaramelSwirl), - SPECIES_SHINY_PAL(ALCREMIE_RAINBOW_SWIRL, gMonShinyPalette_AlcremieRainbowSwirl), - SPECIES_SHINY_PAL(EISCUE_NOICE_FACE, gMonShinyPalette_EiscueNoiceFace), SPECIES_SHINY_PAL(INDEEDEE_FEMALE, gMonShinyPalette_IndeedeeFemale), @@ -1329,8 +1387,178 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES + 1] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - SPECIES_SHINY_PAL(BASCULEGION_FEMALE, gMonShinyPalette_BasculegionFemale), SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_EnamorusTherian), + + SPECIES_SHINY_PAL(BASCULEGION_FEMALE, gMonShinyPalette_BasculegionFemale), + + // Gigantamax Forms + SPECIES_SHINY_PAL(VENUSAUR_GIGANTAMAX, gMonShinyPalette_VenusaurGigantamax), + SPECIES_SHINY_PAL(CHARIZARD_GIGANTAMAX, gMonShinyPalette_CharizardGigantamax), + SPECIES_SHINY_PAL(BLASTOISE_GIGANTAMAX, gMonShinyPalette_BlastoiseGigantamax), + SPECIES_SHINY_PAL(BUTTERFREE_GIGANTAMAX, gMonShinyPalette_ButterfreeGigantamax), + SPECIES_SHINY_PAL(PIKACHU_GIGANTAMAX, gMonShinyPalette_PikachuGigantamax), + SPECIES_SHINY_PAL(MEOWTH_GIGANTAMAX, gMonShinyPalette_MeowthGigantamax), + SPECIES_SHINY_PAL(MACHAMP_GIGANTAMAX, gMonShinyPalette_MachampGigantamax), + SPECIES_SHINY_PAL(GENGAR_GIGANTAMAX, gMonShinyPalette_GengarGigantamax), + SPECIES_SHINY_PAL(KINGLER_GIGANTAMAX, gMonShinyPalette_KinglerGigantamax), + SPECIES_SHINY_PAL(LAPRAS_GIGANTAMAX, gMonShinyPalette_LaprasGigantamax), + SPECIES_SHINY_PAL(EEVEE_GIGANTAMAX, gMonShinyPalette_EeveeGigantamax), + SPECIES_SHINY_PAL(SNORLAX_GIGANTAMAX, gMonShinyPalette_SnorlaxGigantamax), + SPECIES_SHINY_PAL(GARBODOR_GIGANTAMAX, gMonShinyPalette_GarbodorGigantamax), + SPECIES_SHINY_PAL(MELMETAL_GIGANTAMAX, gMonShinyPalette_MelmetalGigantamax), + SPECIES_SHINY_PAL(RILLABOOM_GIGANTAMAX, gMonShinyPalette_RillaboomGigantamax), + SPECIES_SHINY_PAL(CINDERACE_GIGANTAMAX, gMonShinyPalette_CinderaceGigantamax), + SPECIES_SHINY_PAL(INTELEON_GIGANTAMAX, gMonShinyPalette_InteleonGigantamax), + SPECIES_SHINY_PAL(CORVIKNIGHT_GIGANTAMAX, gMonShinyPalette_CorviknightGigantamax), + SPECIES_SHINY_PAL(ORBEETLE_GIGANTAMAX, gMonShinyPalette_OrbeetleGigantamax), + SPECIES_SHINY_PAL(DREDNAW_GIGANTAMAX, gMonShinyPalette_DrednawGigantamax), + SPECIES_SHINY_PAL(COALOSSAL_GIGANTAMAX, gMonShinyPalette_CoalossalGigantamax), + SPECIES_SHINY_PAL(FLAPPLE_GIGANTAMAX, gMonShinyPalette_FlappleGigantamax), + SPECIES_SHINY_PAL(APPLETUN_GIGANTAMAX, gMonShinyPalette_AppletunGigantamax), + SPECIES_SHINY_PAL(SANDACONDA_GIGANTAMAX, gMonShinyPalette_SandacondaGigantamax), + SPECIES_SHINY_PAL(TOXTRICITY_AMPED_GIGANTAMAX, gMonShinyPalette_ToxtricityGigantamax), + SPECIES_SHINY_PAL(TOXTRICITY_LOW_KEY_GIGANTAMAX, gMonShinyPalette_ToxtricityGigantamax), + SPECIES_SHINY_PAL(CENTISKORCH_GIGANTAMAX, gMonShinyPalette_CentiskorchGigantamax), + SPECIES_SHINY_PAL(HATTERENE_GIGANTAMAX, gMonShinyPalette_HattereneGigantamax), + SPECIES_SHINY_PAL(GRIMMSNARL_GIGANTAMAX, gMonShinyPalette_GrimmsnarlGigantamax), + SPECIES_SHINY_PAL(ALCREMIE_GIGANTAMAX, gMonShinyPalette_AlcremieGigantamax), + SPECIES_SHINY_PAL(COPPERAJAH_GIGANTAMAX, gMonShinyPalette_CopperajahGigantamax), + SPECIES_SHINY_PAL(DURALUDON_GIGANTAMAX, gMonShinyPalette_DuraludonGigantamax), + SPECIES_SHINY_PAL(URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, gMonShinyPalette_UrshifuSingleStrikeGigantamax), + SPECIES_SHINY_PAL(URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, gMonShinyPalette_UrshifuRapidStrikeGigantamax), +#endif +#if P_GEN_9_POKEMON == TRUE + SPECIES_SHINY_PAL(SPRIGATITO, gMonShinyPalette_Sprigatito), + SPECIES_SHINY_PAL(FLORAGATO, gMonShinyPalette_Floragato), + SPECIES_SHINY_PAL(MEOWSCARADA, gMonShinyPalette_Meowscarada), + SPECIES_SHINY_PAL(FUECOCO, gMonShinyPalette_Fuecoco), + SPECIES_SHINY_PAL(CROCALOR, gMonShinyPalette_Crocalor), + SPECIES_SHINY_PAL(SKELEDIRGE, gMonShinyPalette_Skeledirge), + SPECIES_SHINY_PAL(QUAXLY, gMonShinyPalette_Quaxly), + SPECIES_SHINY_PAL(QUAXWELL, gMonShinyPalette_Quaxwell), + SPECIES_SHINY_PAL(QUAQUAVAL, gMonShinyPalette_Quaquaval), + SPECIES_SHINY_PAL(LECHONK, gMonShinyPalette_Lechonk), + SPECIES_SHINY_PAL(OINKOLOGNE_MALE, gMonShinyPalette_OinkologneMale), + SPECIES_SHINY_PAL(OINKOLOGNE_FEMALE, gMonShinyPalette_OinkologneFemale), + SPECIES_SHINY_PAL(TAROUNTULA, gMonShinyPalette_Tarountula), + SPECIES_SHINY_PAL(SPIDOPS, gMonShinyPalette_Spidops), + SPECIES_SHINY_PAL(NYMBLE, gMonShinyPalette_Nymble), + SPECIES_SHINY_PAL(LOKIX, gMonShinyPalette_Lokix), + SPECIES_SHINY_PAL(PAWMI, gMonShinyPalette_Pawmi), + SPECIES_SHINY_PAL(PAWMO, gMonShinyPalette_Pawmo), + SPECIES_SHINY_PAL(PAWMOT, gMonShinyPalette_Pawmot), + SPECIES_SHINY_PAL(TANDEMAUS, gMonShinyPalette_Tandemaus), + SPECIES_SHINY_PAL(MAUSHOLD_FAMILY_OF_THREE, gMonShinyPalette_Maushold), + SPECIES_SHINY_PAL(MAUSHOLD_FAMILY_OF_FOUR, gMonShinyPalette_Maushold), + SPECIES_SHINY_PAL(FIDOUGH, gMonShinyPalette_Fidough), + SPECIES_SHINY_PAL(DACHSBUN, gMonShinyPalette_Dachsbun), + SPECIES_SHINY_PAL(SMOLIV, gMonShinyPalette_Smoliv), + SPECIES_SHINY_PAL(DOLLIV, gMonShinyPalette_Dolliv), + SPECIES_SHINY_PAL(ARBOLIVA, gMonShinyPalette_Arboliva), + SPECIES_SHINY_PAL(SQUAWKABILLY_GREEN_PLUMAGE, gMonShinyPalette_SquawkabillyGreenPlumage), + SPECIES_SHINY_PAL(SQUAWKABILLY_BLUE_PLUMAGE, gMonShinyPalette_SquawkabillyBluePlumage), + SPECIES_SHINY_PAL(SQUAWKABILLY_YELLOW_PLUMAGE, gMonShinyPalette_SquawkabillyYellowPlumage), + SPECIES_SHINY_PAL(SQUAWKABILLY_WHITE_PLUMAGE, gMonShinyPalette_SquawkabillyWhitePlumage), + SPECIES_SHINY_PAL(NACLI, gMonShinyPalette_Nacli), + SPECIES_SHINY_PAL(NACLSTACK, gMonShinyPalette_Naclstack), + SPECIES_SHINY_PAL(GARGANACL, gMonShinyPalette_Garganacl), + SPECIES_SHINY_PAL(CHARCADET, gMonShinyPalette_Charcadet), + SPECIES_SHINY_PAL(ARMAROUGE, gMonShinyPalette_Armarouge), + SPECIES_SHINY_PAL(CERULEDGE, gMonShinyPalette_Ceruledge), + SPECIES_SHINY_PAL(TADBULB, gMonShinyPalette_Tadbulb), + SPECIES_SHINY_PAL(BELLIBOLT, gMonShinyPalette_Bellibolt), + SPECIES_SHINY_PAL(WATTREL, gMonShinyPalette_Wattrel), + SPECIES_SHINY_PAL(KILOWATTREL, gMonShinyPalette_Kilowattrel), + SPECIES_SHINY_PAL(MASCHIFF, gMonShinyPalette_Maschiff), + SPECIES_SHINY_PAL(MABOSSTIFF, gMonShinyPalette_Mabosstiff), + SPECIES_SHINY_PAL(SHROODLE, gMonShinyPalette_Shroodle), + SPECIES_SHINY_PAL(GRAFAIAI, gMonShinyPalette_Grafaiai), + SPECIES_SHINY_PAL(BRAMBLIN, gMonShinyPalette_Bramblin), + SPECIES_SHINY_PAL(BRAMBLEGHAST, gMonShinyPalette_Brambleghast), + SPECIES_SHINY_PAL(TOEDSCOOL, gMonShinyPalette_Toedscool), + SPECIES_SHINY_PAL(TOEDSCRUEL, gMonShinyPalette_Toedscruel), + SPECIES_SHINY_PAL(KLAWF, gMonShinyPalette_Klawf), + SPECIES_SHINY_PAL(CAPSAKID, gMonShinyPalette_Capsakid), + SPECIES_SHINY_PAL(SCOVILLAIN, gMonShinyPalette_Scovillain), + SPECIES_SHINY_PAL(RELLOR, gMonShinyPalette_Rellor), + SPECIES_SHINY_PAL(RABSCA, gMonShinyPalette_Rabsca), + SPECIES_SHINY_PAL(FLITTLE, gMonShinyPalette_Flittle), + SPECIES_SHINY_PAL(ESPATHRA, gMonShinyPalette_Espathra), + SPECIES_SHINY_PAL(TINKATINK, gMonShinyPalette_Tinkatink), + SPECIES_SHINY_PAL(TINKATUFF, gMonShinyPalette_Tinkatuff), + SPECIES_SHINY_PAL(TINKATON, gMonShinyPalette_Tinkaton), + SPECIES_SHINY_PAL(WIGLETT, gMonShinyPalette_Wiglett), + SPECIES_SHINY_PAL(WUGTRIO, gMonShinyPalette_Wugtrio), + SPECIES_SHINY_PAL(BOMBIRDIER, gMonShinyPalette_Bombirdier), + SPECIES_SHINY_PAL(FINIZEN, gMonShinyPalette_Finizen), + SPECIES_SHINY_PAL(PALAFIN_ZERO, gMonShinyPalette_PalafinZero), + SPECIES_SHINY_PAL(PALAFIN_HERO, gMonShinyPalette_PalafinHero), + SPECIES_SHINY_PAL(VAROOM, gMonShinyPalette_Varoom), + SPECIES_SHINY_PAL(REVAVROOM, gMonShinyPalette_Revavroom), + SPECIES_SHINY_PAL(CYCLIZAR, gMonShinyPalette_Cyclizar), + SPECIES_SHINY_PAL(ORTHWORM, gMonShinyPalette_Orthworm), + SPECIES_SHINY_PAL(GLIMMET, gMonShinyPalette_Glimmet), + SPECIES_SHINY_PAL(GLIMMORA, gMonShinyPalette_Glimmora), + SPECIES_SHINY_PAL(GREAVARD, gMonShinyPalette_Greavard), + SPECIES_SHINY_PAL(HOUNDSTONE, gMonShinyPalette_Houndstone), + SPECIES_SHINY_PAL(FLAMIGO, gMonShinyPalette_Flamigo), + SPECIES_SHINY_PAL(CETODDLE, gMonShinyPalette_Cetoddle), + SPECIES_SHINY_PAL(CETITAN, gMonShinyPalette_Cetitan), + SPECIES_SHINY_PAL(VELUZA, gMonShinyPalette_Veluza), + SPECIES_SHINY_PAL(DONDOZO, gMonShinyPalette_Dondozo), + SPECIES_SHINY_PAL(TATSUGIRI_CURLY, gMonShinyPalette_TatsugiriCurly), + SPECIES_SHINY_PAL(TATSUGIRI_DROOPY, gMonShinyPalette_TatsugiriDroopy), + SPECIES_SHINY_PAL(TATSUGIRI_STRETCHY, gMonShinyPalette_TatsugiriStretchy), + SPECIES_SHINY_PAL(ANNIHILAPE, gMonShinyPalette_Annihilape), + SPECIES_SHINY_PAL(CLODSIRE, gMonShinyPalette_Clodsire), + SPECIES_SHINY_PAL(FARIGIRAF, gMonShinyPalette_Farigiraf), + SPECIES_SHINY_PAL(DUDUNSPARCE_TWO_SEGMENT, gMonShinyPalette_Dudunsparce), + SPECIES_SHINY_PAL(DUDUNSPARCE_THREE_SEGMENT, gMonShinyPalette_Dudunsparce), + SPECIES_SHINY_PAL(KINGAMBIT, gMonShinyPalette_Kingambit), + SPECIES_SHINY_PAL(GREAT_TUSK, gMonShinyPalette_GreatTusk), + SPECIES_SHINY_PAL(SCREAM_TAIL, gMonShinyPalette_ScreamTail), + SPECIES_SHINY_PAL(BRUTE_BONNET, gMonShinyPalette_BruteBonnet), + SPECIES_SHINY_PAL(FLUTTER_MANE, gMonShinyPalette_FlutterMane), + SPECIES_SHINY_PAL(SLITHER_WING, gMonShinyPalette_SlitherWing), + SPECIES_SHINY_PAL(SANDY_SHOCKS, gMonShinyPalette_SandyShocks), + SPECIES_SHINY_PAL(IRON_TREADS, gMonShinyPalette_IronTreads), + SPECIES_SHINY_PAL(IRON_BUNDLE, gMonShinyPalette_IronBundle), + SPECIES_SHINY_PAL(IRON_HANDS, gMonShinyPalette_IronHands), + SPECIES_SHINY_PAL(IRON_JUGULIS, gMonShinyPalette_IronJugulis), + SPECIES_SHINY_PAL(IRON_MOTH, gMonShinyPalette_IronMoth), + SPECIES_SHINY_PAL(IRON_THORNS, gMonShinyPalette_IronThorns), + SPECIES_SHINY_PAL(FRIGIBAX, gMonShinyPalette_Frigibax), + SPECIES_SHINY_PAL(ARCTIBAX, gMonShinyPalette_Arctibax), + SPECIES_SHINY_PAL(BAXCALIBUR, gMonShinyPalette_Baxcalibur), + SPECIES_SHINY_PAL(GIMMIGHOUL_CHEST, gMonShinyPalette_GimmighoulChest), + SPECIES_SHINY_PAL(GIMMIGHOUL_ROAMING, gMonShinyPalette_GimmighoulRoaming), + SPECIES_SHINY_PAL(GHOLDENGO, gMonShinyPalette_Gholdengo), + SPECIES_SHINY_PAL(WO_CHIEN, gMonShinyPalette_WoChien), + SPECIES_SHINY_PAL(CHIEN_PAO, gMonShinyPalette_ChienPao), + SPECIES_SHINY_PAL(TING_LU, gMonShinyPalette_TingLu), + SPECIES_SHINY_PAL(CHI_YU, gMonShinyPalette_ChiYu), + SPECIES_SHINY_PAL(ROARING_MOON, gMonShinyPalette_RoaringMoon), + SPECIES_SHINY_PAL(IRON_VALIANT, gMonShinyPalette_IronValiant), + SPECIES_SHINY_PAL(KORAIDON, gMonShinyPalette_Koraidon), + SPECIES_SHINY_PAL(MIRAIDON, gMonShinyPalette_Miraidon), + SPECIES_SHINY_PAL(WALKING_WAKE, gMonShinyPalette_WalkingWake), + SPECIES_SHINY_PAL(IRON_LEAVES, gMonShinyPalette_IronLeaves), + SPECIES_SHINY_PAL(DIPPLIN, gMonShinyPalette_Dipplin), + SPECIES_SHINY_PAL(POLTCHAGEIST_COUNTERFEIT, gMonShinyPalette_Poltchageist), + SPECIES_SHINY_PAL(POLTCHAGEIST_ARTISAN, gMonShinyPalette_Poltchageist), + SPECIES_SHINY_PAL(SINISTCHA_UNREMARKABLE, gMonShinyPalette_Sinistcha), + SPECIES_SHINY_PAL(SINISTCHA_MASTERPIECE, gMonShinyPalette_Sinistcha), + SPECIES_SHINY_PAL(OKIDOGI, gMonShinyPalette_Okidogi), + SPECIES_SHINY_PAL(MUNKIDORI, gMonShinyPalette_Munkidori), + SPECIES_SHINY_PAL(FEZANDIPITI, gMonShinyPalette_Fezandipiti), + // SPECIES_SHINY_PAL(OGERPON_TEAL_MASK, gMonShinyPalette_OgerponTealMask), + // SPECIES_SHINY_PAL(OGERPON_WELLSPRING_MASK, gMonShinyPalette_OgerponWellspringMask), + // SPECIES_SHINY_PAL(OGERPON_HEARTHFLAME_MASK, gMonShinyPalette_OgerponHearthflameMask), + // SPECIES_SHINY_PAL(OGERPON_CORNERSTONE_MASK, gMonShinyPalette_OgerponCornerstoneMask), + // SPECIES_SHINY_PAL(OGERPON_TEAL_MASK_TERA, gMonShinyPalette_OgerponTealMaskTera), + // SPECIES_SHINY_PAL(OGERPON_WELLSPRING_MASK_TERA, gMonShinyPalette_OgerponWellspringMaskTera), + // SPECIES_SHINY_PAL(OGERPON_HEARTHFLAME_MASK_TERA, gMonShinyPalette_OgerponHearthflameMaskTera), + // SPECIES_SHINY_PAL(OGERPON_CORNERSTONE_MASK_TERA, gMonShinyPalette_OgerponCornerstoneMaskTera), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), }; diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index a3bad09b1b..dce75dd912 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -289,6 +289,14 @@ static const u8 sToxicDebrisDescription[] = _("Throws poison spikes if hit."); static const u8 sArmorTailDescription[] = _("Protects from priority."); static const u8 sEarthEaterDescription[] = _("Eats ground to heal HP."); static const u8 sMyceliumMightDescription[] = _("Status moves never fail."); +static const u8 sHospitalityDescription[] = _("Restores ally's HP."); +static const u8 sMindsEyeDescription[] = _("Keen Eye and Scrappy."); +static const u8 sEmbodyAspectTealDescription[] = _("Raises Speed."); +static const u8 sEmbodyAspectHearthflameDescription[] = _("Raises Attack."); +static const u8 sEmbodyAspectWellspringDescription[] = _("Raises Sp. Def."); +static const u8 sEmbodyAspectCornerstoneDescription[] = _("Raises Defense."); +static const u8 sToxicChainDescription[] = _("Moves can poison."); +static const u8 sSupersweetSyrupDescription[] = _("Lowers the foe's Speed."); #if B_EXPANDED_ABILITY_NAMES == TRUE const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -592,6 +600,14 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_ARMOR_TAIL] = _("Armor Tail"), [ABILITY_EARTH_EATER] = _("Earth Eater"), [ABILITY_MYCELIUM_MIGHT] = _("Mycelium Might"), + [ABILITY_HOSPITALITY] = _("Hospitality"), + [ABILITY_MINDS_EYE] = _("Mind's Eye"), + [ABILITY_EMBODY_ASPECT_TEAL] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("Embody Aspect"), + [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), + [ABILITY_SUPERSWEET_SYRUP] = _("Supersweet Syrup"), }; #else // 12 characters const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -895,6 +911,14 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_ARMOR_TAIL] = _("Armor Tail"), [ABILITY_EARTH_EATER] = _("Earth Eater"), [ABILITY_MYCELIUM_MIGHT] = _("MceliumMight"), + [ABILITY_HOSPITALITY] = _("Hospitality"), + [ABILITY_MINDS_EYE] = _("Mind's Eye"), + [ABILITY_EMBODY_ASPECT_TEAL] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("EmbodyAspect"), + [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), + [ABILITY_SUPERSWEET_SYRUP] = _("SuprswtSyrup"), }; #endif @@ -1199,4 +1223,12 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = [ABILITY_ARMOR_TAIL] = sArmorTailDescription, [ABILITY_EARTH_EATER] = sEarthEaterDescription, [ABILITY_MYCELIUM_MIGHT] = sMyceliumMightDescription, + [ABILITY_HOSPITALITY] = sHospitalityDescription, + [ABILITY_MINDS_EYE] = sMindsEyeDescription, + [ABILITY_EMBODY_ASPECT_TEAL] = sEmbodyAspectTealDescription, + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = sEmbodyAspectHearthflameDescription, + [ABILITY_EMBODY_ASPECT_WELLSPRING] = sEmbodyAspectWellspringDescription, + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = sEmbodyAspectCornerstoneDescription, + [ABILITY_TOXIC_CHAIN] = sToxicChainDescription, + [ABILITY_SUPERSWEET_SYRUP] = sSupersweetSyrupDescription, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index 0948fbe187..422549a186 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3754,7 +3754,7 @@ static const u8 sContestPassDesc[] = _( "for entering\n" "Pokémon Contests."); -static const u8 sOaksParcelDesc[] = _( +static const u8 sParcelDesc[] = _( "A parcel for Prof.\n" "Oak from a Pokémon\n" "Mart's clerk."); @@ -3918,3 +3918,78 @@ static const u8 sBerserkGene[] = _( "Sharply boosts\n" "Attack, but causes\n" "lasting confusion."); + +static const u8 sFairyFeatherDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Fairy-type moves."); + +static const u8 sSyrupyAppleDesc[] = _( + "A very syrupy apple\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sUnremarkableTeacupDesc[] = _( + "A cracked teacup\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sMasterpieceTeacupDesc[] = _( + "A chipped teacup\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sCornerstoneMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Rock-\n" + "type in battle."); + +static const u8 sWellspringMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Water-\n" + "type in battle."); + +static const u8 sHearthflameMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Fire-\n" + "type in battle."); + +static const u8 sHealthMochiDesc[] = _( + "An item that raises\n" + "the base HP of\n" + "a Pokémon."); + +static const u8 sMuscleMochiDesc[] = _( + "An item that raises\n" + "the base Attack of\n" + "a Pokémon."); + +static const u8 sResistMochiDesc[] = _( + "An item that raises\n" + "the base Defense\n" + "of a Pokémon."); + +static const u8 sGeniusMochiDesc[] = _( + "An item that raises\n" + "the base Sp. Atk.\n" + "of a Pokémon."); + +static const u8 sCleverMochiDesc[] = _( + "An item that raises\n" + "the base Sp. Def.\n" + "of a Pokémon."); + +static const u8 sSwiftMochiDesc[] = _( + "An item that raises\n" + "the base Speed of\n" + "a Pokémon."); + +static const u8 sFreshStartMochiDesc[] = _( + "An item that resets\n" + "all base points of\n" + "a Pokémon."); + +static const u8 sGlimmeringCharmDesc[] = _( + "A charm that will\n" + "raise the shards\n" + "from Tera Raids."); diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index f950c2a1aa..c321a844b1 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -214,7 +214,11 @@ static const u8 sDisableDescription[] = _( static const u8 sAcidDescription[] = _( "Sprays a hide-melting acid.\n" +#if B_UPDATED_MOVE_DATA >= GEN_4 + "May lower Sp. Def."); +#else "May lower Defense."); +#endif static const u8 sEmberDescription[] = _( "A weak fire attack that may\n" @@ -986,7 +990,11 @@ static const u8 sSunnyDayDescription[] = _( static const u8 sCrunchDescription[] = _( "Crunches with sharp fangs.\n" +#if B_UPDATED_MOVE_DATA >= GEN_4 "May lower Defense."); +#else + "May lower Sp. Def."); +#endif static const u8 sMirrorCoatDescription[] = _( "Counters the foe's special\n" @@ -3260,6 +3268,22 @@ static const u8 sHydroSteamDescription[] = _( "This move's power increases\n" "under harsh sunlight."); +static const u8 sBloodMoonDescription[] = _( + "Unleashes the blood moon.\n" + "Can't be used twice in a row."); + +static const u8 sMatchaGotchaDescription[] = _( + "Absorbs half the damage\n" + "inflicted. May cause a burn."); + +static const u8 sSyrupBombDescription[] = _( + "Lowers the foe's speed\n" + "each turn for 3 turns."); + +static const u8 sIvyCudgelDescription[] = _( + "Type changes with held mask.\n" + "High critical-hit ratio."); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -4099,4 +4123,8 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, [MOVE_PSYBLADE - 1] = sPsybladeDescription, [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, + [MOVE_BLOOD_MOON - 1] = sBloodMoonDescription, + [MOVE_MATCHA_GOTCHA - 1] = sMatchaGotchaDescription, + [MOVE_SYRUP_BOMB - 1] = sSyrupBombDescription, + [MOVE_IVY_CUDGEL - 1] = sIvyCudgelDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 85d406dcab..01d613751e 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -1,6 +1,6 @@ #if B_EXPANDED_MOVE_NAMES == TRUE // 16 letters -const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = +const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1] = { [MOVE_NONE] = _("-"), [MOVE_POUND] = _("Pound"), @@ -831,10 +831,68 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), [MOVE_PSYBLADE] = _("Psyblade"), [MOVE_HYDRO_STEAM] = _("Hydro Steam"), + [MOVE_BLOOD_MOON] = _("Blood Moon"), + [MOVE_MATCHA_GOTCHA] = _("Matcha Gotcha"), + [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), + [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), + // Max Moves + [MOVE_MAX_GUARD] = _("Max Guard"), + [MOVE_MAX_STRIKE] = _("Max Strike"), + [MOVE_MAX_KNUCKLE] = _("Max Knuckle"), + [MOVE_MAX_AIRSTREAM] = _("Max Airstream"), + [MOVE_MAX_OOZE] = _("Max Ooze"), + [MOVE_MAX_QUAKE] = _("Max Quake"), + [MOVE_MAX_ROCKFALL] = _("Max Rockfall"), + [MOVE_MAX_FLUTTERBY] = _("Max Flutterby"), + [MOVE_MAX_PHANTASM] = _("Max Phantasm"), + [MOVE_MAX_STEELSPIKE] = _("Max Steelspike"), + [MOVE_MAX_FLARE] = _("Max Flare"), + [MOVE_MAX_GEYSER] = _("Max Geyser"), + [MOVE_MAX_OVERGROWTH] = _("Max Overgrowth"), + [MOVE_MAX_LIGHTNING] = _("Max Lightning"), + [MOVE_MAX_HAILSTORM] = _("Max Hailstorm"), + [MOVE_MAX_MINDSTORM] = _("Max Mindstorm"), + [MOVE_MAX_WYRMWIND] = _("Max Wyrmwind"), + [MOVE_MAX_DARKNESS] = _("Max Darkness"), + [MOVE_MAX_STARFALL] = _("Max Starfall"), + // Gigantamax Moves + [MOVE_G_MAX_VINE_LASH] = _("Gmax Vine Lash"), + [MOVE_G_MAX_WILDFIRE] = _("Gmax Wildfire"), + [MOVE_G_MAX_CANNONADE] = _("Gmax Cannonade"), + [MOVE_G_MAX_BEFUDDLE] = _("Gmax Befuddle"), + [MOVE_G_MAX_VOLT_CRASH] = _("Gmax Volt Crash"), + [MOVE_G_MAX_GOLD_RUSH] = _("Gmax Gold Rush"), + [MOVE_G_MAX_CHI_STRIKE] = _("Gmax Chi Strike"), + [MOVE_G_MAX_TERROR] = _("Gmax Terror"), + [MOVE_G_MAX_FOAM_BURST] = _("Gmax Foam Burst"), + [MOVE_G_MAX_RESONANCE] = _("Gmax Resonance"), + [MOVE_G_MAX_CUDDLE] = _("Gmax Cuddle"), + [MOVE_G_MAX_REPLENISH] = _("Gmax Replenish"), + [MOVE_G_MAX_MALODOR] = _("Gmax Malodor"), + [MOVE_G_MAX_MELTDOWN] = _("Gmax Meltdown"), + [MOVE_G_MAX_DRUM_SOLO] = _("Gmax Drum Solo"), + [MOVE_G_MAX_FIREBALL] = _("Gmax Fireball"), + [MOVE_G_MAX_HYDROSNIPE] = _("Gmax Hydrosnipe"), + [MOVE_G_MAX_WIND_RAGE] = _("Gmax Wind Rage"), + [MOVE_G_MAX_GRAVITAS] = _("Gmax Gravitas"), + [MOVE_G_MAX_STONESURGE] = _("Gmax Stonesurge"), + [MOVE_G_MAX_VOLCALITH] = _("Gmax Volcalith"), + [MOVE_G_MAX_TARTNESS] = _("Gmax Tartness"), + [MOVE_G_MAX_SWEETNESS] = _("Gmax Sweetness"), + [MOVE_G_MAX_SANDBLAST] = _("Gmax Sandblast"), + [MOVE_G_MAX_STUN_SHOCK] = _("Gmax Stun Shock"), + [MOVE_G_MAX_CENTIFERNO] = _("Gmax Centiferno"), + [MOVE_G_MAX_SMITE] = _("Gmax Smite"), + [MOVE_G_MAX_SNOOZE] = _("Gmax Snooze"), + [MOVE_G_MAX_FINALE] = _("Gmax Finale"), + [MOVE_G_MAX_STEELSURGE] = _("Gmax Steelsurge"), + [MOVE_G_MAX_DEPLETION] = _("Gmax Depletion"), + [MOVE_G_MAX_ONE_BLOW] = _("Gmax One Blow"), + [MOVE_G_MAX_RAPID_FLOW] = _("Gmax Rapid Flow"), }; #else // 12 letters -const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = +const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1] = { [MOVE_NONE] = _("-"), [MOVE_POUND] = _("Pound"), @@ -1665,6 +1723,64 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), [MOVE_PSYBLADE] = _("Psyblade"), [MOVE_HYDRO_STEAM] = _("Hydro Steam"), + [MOVE_BLOOD_MOON] = _("Blood Moon"), + [MOVE_MATCHA_GOTCHA] = _("MatchaGotcha"), + [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), + [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), + // Max Moves + [MOVE_MAX_GUARD] = _("M-Guard"), + [MOVE_MAX_STRIKE] = _("M-Strike"), + [MOVE_MAX_KNUCKLE] = _("M-Knuckle"), + [MOVE_MAX_AIRSTREAM] = _("M-Airstream"), + [MOVE_MAX_OOZE] = _("M-Ooze"), + [MOVE_MAX_QUAKE] = _("M-Quake"), + [MOVE_MAX_ROCKFALL] = _("M-Rockfall"), + [MOVE_MAX_FLUTTERBY] = _("M-Flutterby"), + [MOVE_MAX_PHANTASM] = _("M-Phantasm"), + [MOVE_MAX_STEELSPIKE] = _("M-Steelspike"), + [MOVE_MAX_FLARE] = _("M-Flare"), + [MOVE_MAX_GEYSER] = _("M-Geyser"), + [MOVE_MAX_OVERGROWTH] = _("M-Overgrowth"), + [MOVE_MAX_LIGHTNING] = _("M-Lightning"), + [MOVE_MAX_HAILSTORM] = _("M-Hailstorm"), + [MOVE_MAX_MINDSTORM] = _("M-Mindstorm"), + [MOVE_MAX_WYRMWIND] = _("M-Wyrmwind"), + [MOVE_MAX_DARKNESS] = _("M-Darkness"), + [MOVE_MAX_STARFALL] = _("M-Starfall"), +// Gigantamax Moves + [MOVE_G_MAX_VINE_LASH] = _("G-Vine Lash"), + [MOVE_G_MAX_WILDFIRE] = _("G-Wildfire"), + [MOVE_G_MAX_CANNONADE] = _("G-Cannonade"), + [MOVE_G_MAX_BEFUDDLE] = _("G-Befuddle"), + [MOVE_G_MAX_VOLT_CRASH] = _("G-VoltCrash"), + [MOVE_G_MAX_GOLD_RUSH] = _("G-Gold Rush"), + [MOVE_G_MAX_CHI_STRIKE] = _("G-ChiStrike"), + [MOVE_G_MAX_TERROR] = _("G-Terror"), + [MOVE_G_MAX_FOAM_BURST] = _("G-FoamBurst"), + [MOVE_G_MAX_RESONANCE] = _("G-Resonance"), + [MOVE_G_MAX_CUDDLE] = _("G-Cuddle"), + [MOVE_G_MAX_REPLENISH] = _("G-Replenish"), + [MOVE_G_MAX_MALODOR] = _("G-Malodor"), + [MOVE_G_MAX_MELTDOWN] = _("G-Meltdown"), + [MOVE_G_MAX_DRUM_SOLO] = _("G-Drum Solo"), + [MOVE_G_MAX_FIREBALL] = _("G-Fireball"), + [MOVE_G_MAX_HYDROSNIPE] = _("G-Hydrsnipe"), + [MOVE_G_MAX_WIND_RAGE] = _("G-Wind Rage"), + [MOVE_G_MAX_GRAVITAS] = _("G-Gravitas"), + [MOVE_G_MAX_STONESURGE] = _("G-Stonesrge"), + [MOVE_G_MAX_VOLCALITH] = _("G-Volcalith"), + [MOVE_G_MAX_TARTNESS] = _("G-Tartness"), + [MOVE_G_MAX_SWEETNESS] = _("G-Sweetness"), + [MOVE_G_MAX_SANDBLAST] = _("G-Sandblast"), + [MOVE_G_MAX_STUN_SHOCK] = _("G-StunShock"), + [MOVE_G_MAX_CENTIFERNO] = _("G-Centiferno"), + [MOVE_G_MAX_SMITE] = _("G-Smite"), + [MOVE_G_MAX_SNOOZE] = _("G-Snooze"), + [MOVE_G_MAX_FINALE] = _("G-Finale"), + [MOVE_G_MAX_STEELSURGE] = _("G-Steelsrge"), + [MOVE_G_MAX_DEPLETION] = _("G-Depletion"), + [MOVE_G_MAX_ONE_BLOW] = _("G-One Blow"), + [MOVE_G_MAX_RAPID_FLOW] = _("G-Rapid Flow"), }; #endif @@ -1742,3 +1858,113 @@ const u8 *const gZMoveNames[] = [MOVE_LIGHT_THAT_BURNS_THE_SKY - FIRST_Z_MOVE] = sText_Light_That_Burns_The_Sky, [MOVE_SOUL_STEALING_7_STAR_STRIKE - FIRST_Z_MOVE] = sText_Soul_Stealing_7_Star_Strike, }; + +// Max Moves +static const u8 sText_Max_Guard[] = _("Max Guard"); +static const u8 sText_Max_Strike[] = _("Max Strike"); +static const u8 sText_Max_Knuckle[] = _("Max Knuckle"); +static const u8 sText_Max_Airstream[] = _("Max Airstream"); +static const u8 sText_Max_Ooze[] = _("Max Ooze"); +static const u8 sText_Max_Quake[] = _("Max Quake"); +static const u8 sText_Max_Rockfall[] = _("Max Rockfall"); +static const u8 sText_Max_Flutterby[] = _("Max Flutterby"); +static const u8 sText_Max_Phantasm[] = _("Max Phantasm"); +static const u8 sText_Max_Steelspike[] = _("Max Steelspike"); +static const u8 sText_Max_Flare[] = _("Max Flare"); +static const u8 sText_Max_Geyser[] = _("Max Geyser"); +static const u8 sText_Max_Overgrowth[] = _("Max Overgrowth"); +static const u8 sText_Max_Lightning[] = _("Max Lightning"); +static const u8 sText_Max_Hailstorm[] = _("Max Hailstorm"); +static const u8 sText_Max_Mindstorm[] = _("Max Mindstorm"); +static const u8 sText_Max_Wyrmwind[] = _("Max Wyrmwind"); +static const u8 sText_Max_Darkness[] = _("Max Darkness"); +static const u8 sText_Max_Starfall[] = _("Max Starfall"); +static const u8 sText_G_Max_Vine_Lash[] = _("G-Max Vine Lash"); +static const u8 sText_G_Max_Wildfire[] = _("G-Max Wildfire"); +static const u8 sText_G_Max_Cannonade[] = _("G-Max Cannonade"); +static const u8 sText_G_Max_Befuddle[] = _("G-Max Befuddle"); +static const u8 sText_G_Max_Volt_Crash[] = _("G-Max Volt Crash"); +static const u8 sText_G_Max_Gold_Rush[] = _("G-Max Gold Rush"); +static const u8 sText_G_Max_Chi_Strike[] = _("G-Max Chi Strike"); +static const u8 sText_G_Max_Terror[] = _("G-Max Terror"); +static const u8 sText_G_Max_Foam_Burst[] = _("G-Max Foam Burst"); +static const u8 sText_G_Max_Resonance[] = _("G-Max Resonance"); +static const u8 sText_G_Max_Cuddle[] = _("G-Max Cuddle"); +static const u8 sText_G_Max_Replenish[] = _("G-Max Replenish"); +static const u8 sText_G_Max_Malodor[] = _("G-Max Malodor"); +static const u8 sText_G_Max_Meltdown[] = _("G-Max Meltdown"); +static const u8 sText_G_Max_Drum_Solo[] = _("G-Max Drum Solo"); +static const u8 sText_G_Max_Fireball[] = _("G-Max Fireball"); +static const u8 sText_G_Max_Hydrosnipe[] = _("G-Max Hydrosnipe"); +static const u8 sText_G_Max_Wind_Rage[] = _("G-Max Wind Rage"); +static const u8 sText_G_Max_Gravitas[] = _("G-Max Gravitas"); +static const u8 sText_G_Max_Stonesurge[] = _("G-Max Stonesurge"); +static const u8 sText_G_Max_Volcalith[] = _("G-Max Volcalith"); +static const u8 sText_G_Max_Tartness[] = _("G-Max Tartness"); +static const u8 sText_G_Max_Sweetness[] = _("G-Max Sweetness"); +static const u8 sText_G_Max_Sandblast[] = _("G-Max Sandblast"); +static const u8 sText_G_Max_Stun_Shock[] = _("G-Max Stun Shock"); +static const u8 sText_G_Max_Centiferno[] = _("G-Max Centiferno"); +static const u8 sText_G_Max_Smite[] = _("G-Max Smite"); +static const u8 sText_G_Max_Snooze[] = _("G-Max Snooze"); +static const u8 sText_G_Max_Finale[] = _("G-Max Finale"); +static const u8 sText_G_Max_Steelsurge[] = _("G-Max Steelsurge"); +static const u8 sText_G_Max_Depletion[] = _("G-Max Depletion"); +static const u8 sText_G_Max_One_Blow[] = _("G-Max One Blow"); +static const u8 sText_G_Max_Rapid_Flow[] = _("G-Max Rapid Flow"); + +const u8 *const gMaxMoveNames[] = +{ + [MOVE_MAX_GUARD - FIRST_MAX_MOVE] = sText_Max_Guard, + [MOVE_MAX_STRIKE - FIRST_MAX_MOVE] = sText_Max_Strike, + [MOVE_MAX_KNUCKLE - FIRST_MAX_MOVE] = sText_Max_Knuckle, + [MOVE_MAX_AIRSTREAM - FIRST_MAX_MOVE] = sText_Max_Airstream, + [MOVE_MAX_OOZE - FIRST_MAX_MOVE] = sText_Max_Ooze, + [MOVE_MAX_QUAKE - FIRST_MAX_MOVE] = sText_Max_Quake, + [MOVE_MAX_ROCKFALL - FIRST_MAX_MOVE] = sText_Max_Rockfall, + [MOVE_MAX_FLUTTERBY - FIRST_MAX_MOVE] = sText_Max_Flutterby, + [MOVE_MAX_PHANTASM - FIRST_MAX_MOVE] = sText_Max_Phantasm, + [MOVE_MAX_STEELSPIKE - FIRST_MAX_MOVE] = sText_Max_Steelspike, + [MOVE_MAX_FLARE - FIRST_MAX_MOVE] = sText_Max_Flare, + [MOVE_MAX_GEYSER - FIRST_MAX_MOVE] = sText_Max_Geyser, + [MOVE_MAX_OVERGROWTH - FIRST_MAX_MOVE] = sText_Max_Overgrowth, + [MOVE_MAX_LIGHTNING - FIRST_MAX_MOVE] = sText_Max_Lightning, + [MOVE_MAX_HAILSTORM - FIRST_MAX_MOVE] = sText_Max_Hailstorm, + [MOVE_MAX_MINDSTORM - FIRST_MAX_MOVE] = sText_Max_Mindstorm, + [MOVE_MAX_WYRMWIND - FIRST_MAX_MOVE] = sText_Max_Wyrmwind, + [MOVE_MAX_DARKNESS - FIRST_MAX_MOVE] = sText_Max_Darkness, + [MOVE_MAX_STARFALL - FIRST_MAX_MOVE] = sText_Max_Starfall, + [MOVE_G_MAX_VINE_LASH - FIRST_MAX_MOVE] = sText_G_Max_Vine_Lash, + [MOVE_G_MAX_WILDFIRE - FIRST_MAX_MOVE] = sText_G_Max_Wildfire, + [MOVE_G_MAX_CANNONADE - FIRST_MAX_MOVE] = sText_G_Max_Cannonade, + [MOVE_G_MAX_BEFUDDLE - FIRST_MAX_MOVE] = sText_G_Max_Befuddle, + [MOVE_G_MAX_VOLT_CRASH - FIRST_MAX_MOVE] = sText_G_Max_Volt_Crash, + [MOVE_G_MAX_GOLD_RUSH - FIRST_MAX_MOVE] = sText_G_Max_Gold_Rush, + [MOVE_G_MAX_CHI_STRIKE - FIRST_MAX_MOVE] = sText_G_Max_Chi_Strike, + [MOVE_G_MAX_TERROR - FIRST_MAX_MOVE] = sText_G_Max_Terror, + [MOVE_G_MAX_FOAM_BURST - FIRST_MAX_MOVE] = sText_G_Max_Foam_Burst, + [MOVE_G_MAX_RESONANCE - FIRST_MAX_MOVE] = sText_G_Max_Resonance, + [MOVE_G_MAX_CUDDLE - FIRST_MAX_MOVE] = sText_G_Max_Cuddle, + [MOVE_G_MAX_REPLENISH - FIRST_MAX_MOVE] = sText_G_Max_Replenish, + [MOVE_G_MAX_MALODOR - FIRST_MAX_MOVE] = sText_G_Max_Malodor, + [MOVE_G_MAX_MELTDOWN - FIRST_MAX_MOVE] = sText_G_Max_Meltdown, + [MOVE_G_MAX_DRUM_SOLO - FIRST_MAX_MOVE] = sText_G_Max_Drum_Solo, + [MOVE_G_MAX_FIREBALL - FIRST_MAX_MOVE] = sText_G_Max_Fireball, + [MOVE_G_MAX_HYDROSNIPE - FIRST_MAX_MOVE] = sText_G_Max_Hydrosnipe, + [MOVE_G_MAX_WIND_RAGE - FIRST_MAX_MOVE] = sText_G_Max_Wind_Rage, + [MOVE_G_MAX_GRAVITAS - FIRST_MAX_MOVE] = sText_G_Max_Gravitas, + [MOVE_G_MAX_STONESURGE - FIRST_MAX_MOVE] = sText_G_Max_Stonesurge, + [MOVE_G_MAX_VOLCALITH - FIRST_MAX_MOVE] = sText_G_Max_Volcalith, + [MOVE_G_MAX_TARTNESS - FIRST_MAX_MOVE] = sText_G_Max_Tartness, + [MOVE_G_MAX_SWEETNESS - FIRST_MAX_MOVE] = sText_G_Max_Sweetness, + [MOVE_G_MAX_SANDBLAST - FIRST_MAX_MOVE] = sText_G_Max_Sandblast, + [MOVE_G_MAX_STUN_SHOCK - FIRST_MAX_MOVE] = sText_G_Max_Stun_Shock, + [MOVE_G_MAX_CENTIFERNO - FIRST_MAX_MOVE] = sText_G_Max_Centiferno, + [MOVE_G_MAX_SMITE - FIRST_MAX_MOVE] = sText_G_Max_Smite, + [MOVE_G_MAX_SNOOZE - FIRST_MAX_MOVE] = sText_G_Max_Snooze, + [MOVE_G_MAX_FINALE - FIRST_MAX_MOVE] = sText_G_Max_Finale, + [MOVE_G_MAX_STEELSURGE - FIRST_MAX_MOVE] = sText_G_Max_Steelsurge, + [MOVE_G_MAX_DEPLETION - FIRST_MAX_MOVE] = sText_G_Max_Depletion, + [MOVE_G_MAX_ONE_BLOW - FIRST_MAX_MOVE] = sText_G_Max_One_Blow, + [MOVE_G_MAX_RAPID_FLOW - FIRST_MAX_MOVE] = sText_G_Max_Rapid_Flow, +}; diff --git a/src/data/text/species_names.h b/src/data/text/species_names.h index e9aee3a06c..dd840c1ce6 100644 --- a/src/data/text/species_names.h +++ b/src/data/text/species_names.h @@ -128,6 +128,9 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_MAGMAR] = _("Magmar"), [SPECIES_PINSIR] = _("Pinsir"), [SPECIES_TAUROS] = _("Tauros"), + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = _("Tauros"), + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = _("Tauros"), + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = _("Tauros"), [SPECIES_MAGIKARP] = _("Magikarp"), [SPECIES_GYARADOS] = _("Gyarados"), [SPECIES_LAPRAS] = _("Lapras"), @@ -194,6 +197,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_SUNFLORA] = _("Sunflora"), [SPECIES_YANMA] = _("Yanma"), [SPECIES_WOOPER] = _("Wooper"), + [SPECIES_WOOPER_PALDEAN] = _("Wooper"), [SPECIES_QUAGSIRE] = _("Quagsire"), [SPECIES_ESPEON] = _("Espeon"), [SPECIES_UMBREON] = _("Umbreon"), @@ -350,7 +354,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_ARMALDO] = _("Armaldo"), [SPECIES_FEEBAS] = _("Feebas"), [SPECIES_MILOTIC] = _("Milotic"), - [SPECIES_CASTFORM] = _("Castform"), + [SPECIES_CASTFORM_NORMAL] = _("Castform"), [SPECIES_KECLEON] = _("Kecleon"), [SPECIES_SHUPPET] = _("Shuppet"), [SPECIES_BANETTE] = _("Banette"), @@ -385,7 +389,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_GROUDON] = _("Groudon"), [SPECIES_RAYQUAZA] = _("Rayquaza"), [SPECIES_JIRACHI] = _("Jirachi"), - [SPECIES_DEOXYS] = _("Deoxys"), + [SPECIES_DEOXYS_NORMAL] = _("Deoxys"), #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = _("Turtwig"), [SPECIES_GROTLE] = _("Grotle"), @@ -412,8 +416,8 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_RAMPARDOS] = _("Rampardos"), [SPECIES_SHIELDON] = _("Shieldon"), [SPECIES_BASTIODON] = _("Bastiodon"), - [SPECIES_BURMY] = _("Burmy"), - [SPECIES_WORMADAM] = _("Wormadam"), + [SPECIES_BURMY_PLANT_CLOAK] = _("Burmy"), + [SPECIES_WORMADAM_PLANT_CLOAK] = _("Wormadam"), [SPECIES_MOTHIM] = _("Mothim"), [SPECIES_COMBEE] = _("Combee"), [SPECIES_VESPIQUEN] = _("Vespiquen"), @@ -421,9 +425,9 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_BUIZEL] = _("Buizel"), [SPECIES_FLOATZEL] = _("Floatzel"), [SPECIES_CHERUBI] = _("Cherubi"), - [SPECIES_CHERRIM] = _("Cherrim"), - [SPECIES_SHELLOS] = _("Shellos"), - [SPECIES_GASTRODON] = _("Gastrodon"), + [SPECIES_CHERRIM_OVERCAST] = _("Cherrim"), + [SPECIES_SHELLOS_WEST_SEA] = _("Shellos"), + [SPECIES_GASTRODON_WEST_SEA] = _("Gastrodon"), [SPECIES_AMBIPOM] = _("Ambipom"), [SPECIES_DRIFLOON] = _("Drifloon"), [SPECIES_DRIFBLIM] = _("Drifblim"), @@ -487,13 +491,13 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_PALKIA] = _("Palkia"), [SPECIES_HEATRAN] = _("Heatran"), [SPECIES_REGIGIGAS] = _("Regigigas"), - [SPECIES_GIRATINA] = _("Giratina"), + [SPECIES_GIRATINA_ALTERED] = _("Giratina"), [SPECIES_CRESSELIA] = _("Cresselia"), [SPECIES_PHIONE] = _("Phione"), [SPECIES_MANAPHY] = _("Manaphy"), [SPECIES_DARKRAI] = _("Darkrai"), - [SPECIES_SHAYMIN] = _("Shaymin"), - [SPECIES_ARCEUS] = _("Arceus"), + [SPECIES_SHAYMIN_LAND] = _("Shaymin"), + [SPECIES_ARCEUS_NORMAL] = _("Arceus"), #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = _("Victini"), @@ -552,12 +556,12 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_WHIMSICOTT] = _("Whimsicott"), [SPECIES_PETILIL] = _("Petilil"), [SPECIES_LILLIGANT] = _("Lilligant"), - [SPECIES_BASCULIN] = _("Basculin"), + [SPECIES_BASCULIN_RED_STRIPED] = _("Basculin"), [SPECIES_SANDILE] = _("Sandile"), [SPECIES_KROKOROK] = _("Krokorok"), [SPECIES_KROOKODILE] = _("Krookodile"), [SPECIES_DARUMAKA] = _("Darumaka"), - [SPECIES_DARMANITAN] = _("Darmanitan"), + [SPECIES_DARMANITAN_STANDARD_MODE] = _("Darmanitan"), [SPECIES_MARACTUS] = _("Maractus"), [SPECIES_DWEBBLE] = _("Dwebble"), [SPECIES_CRUSTLE] = _("Crustle"), @@ -587,8 +591,8 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_VANILLITE] = _("Vanillite"), [SPECIES_VANILLISH] = _("Vanillish"), [SPECIES_VANILLUXE] = _("Vanilluxe"), - [SPECIES_DEERLING] = _("Deerling"), - [SPECIES_SAWSBUCK] = _("Sawsbuck"), + [SPECIES_DEERLING_SPRING] = _("Deerling"), + [SPECIES_SAWSBUCK_SPRING] = _("Sawsbuck"), [SPECIES_EMOLGA] = _("Emolga"), [SPECIES_KARRABLAST] = _("Karrablast"), [SPECIES_ESCAVALIER] = _("Escavalier"), @@ -643,14 +647,14 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_COBALION] = _("Cobalion"), [SPECIES_TERRAKION] = _("Terrakion"), [SPECIES_VIRIZION] = _("Virizion"), - [SPECIES_TORNADUS] = _("Tornadus"), - [SPECIES_THUNDURUS] = _("Thundurus"), + [SPECIES_TORNADUS_INCARNATE] = _("Tornadus"), + [SPECIES_THUNDURUS_INCARNATE] = _("Thundurus"), [SPECIES_RESHIRAM] = _("Reshiram"), [SPECIES_ZEKROM] = _("Zekrom"), - [SPECIES_LANDORUS] = _("Landorus"), + [SPECIES_LANDORUS_INCARNATE] = _("Landorus"), [SPECIES_KYUREM] = _("Kyurem"), - [SPECIES_KELDEO] = _("Keldeo"), - [SPECIES_MELOETTA] = _("Meloetta"), + [SPECIES_KELDEO_ORDINARY] = _("Keldeo"), + [SPECIES_MELOETTA_ARIA] = _("Meloetta"), [SPECIES_GENESECT] = _("Genesect"), #endif #if P_GEN_6_POKEMON == TRUE @@ -670,22 +674,22 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_TALONFLAME] = _("Talonflame"), [SPECIES_SCATTERBUG] = _("Scatterbug"), [SPECIES_SPEWPA] = _("Spewpa"), - [SPECIES_VIVILLON] = _("Vivillon"), + [SPECIES_VIVILLON_ICY_SNOW] = _("Vivillon"), [SPECIES_LITLEO] = _("Litleo"), [SPECIES_PYROAR] = _("Pyroar"), - [SPECIES_FLABEBE] = _("Flabébé"), - [SPECIES_FLOETTE] = _("Floette"), - [SPECIES_FLORGES] = _("Florges"), + [SPECIES_FLABEBE_RED_FLOWER] = _("Flabébé"), + [SPECIES_FLOETTE_RED_FLOWER] = _("Floette"), + [SPECIES_FLORGES_RED_FLOWER] = _("Florges"), [SPECIES_SKIDDO] = _("Skiddo"), [SPECIES_GOGOAT] = _("Gogoat"), [SPECIES_PANCHAM] = _("Pancham"), [SPECIES_PANGORO] = _("Pangoro"), - [SPECIES_FURFROU] = _("Furfrou"), + [SPECIES_FURFROU_NATURAL] = _("Furfrou"), [SPECIES_ESPURR] = _("Espurr"), - [SPECIES_MEOWSTIC] = _("Meowstic"), + [SPECIES_MEOWSTIC_MALE] = _("Meowstic"), [SPECIES_HONEDGE] = _("Honedge"), [SPECIES_DOUBLADE] = _("Doublade"), - [SPECIES_AEGISLASH] = _("Aegislash"), + [SPECIES_AEGISLASH_SHIELD] = _("Aegislash"), [SPECIES_SPRITZEE] = _("Spritzee"), [SPECIES_AROMATISSE] = _("Aromatisse"), [SPECIES_SWIRLIX] = _("Swirlix"), @@ -714,17 +718,17 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_KLEFKI] = _("Klefki"), [SPECIES_PHANTUMP] = _("Phantump"), [SPECIES_TREVENANT] = _("Trevenant"), - [SPECIES_PUMPKABOO] = _("Pumpkaboo"), - [SPECIES_GOURGEIST] = _("Gourgeist"), + [SPECIES_PUMPKABOO_AVERAGE] = _("Pumpkaboo"), + [SPECIES_GOURGEIST_AVERAGE] = _("Gourgeist"), [SPECIES_BERGMITE] = _("Bergmite"), [SPECIES_AVALUGG] = _("Avalugg"), [SPECIES_NOIBAT] = _("Noibat"), [SPECIES_NOIVERN] = _("Noivern"), - [SPECIES_XERNEAS] = _("Xerneas"), + [SPECIES_XERNEAS_NEUTRAL] = _("Xerneas"), [SPECIES_YVELTAL] = _("Yveltal"), - [SPECIES_ZYGARDE] = _("Zygarde"), + [SPECIES_ZYGARDE_50_AURA_BREAK] = _("Zygarde"), [SPECIES_DIANCIE] = _("Diancie"), - [SPECIES_HOOPA] = _("Hoopa"), + [SPECIES_HOOPA_CONFINED] = _("Hoopa"), [SPECIES_VOLCANION] = _("Volcanion"), #endif #if P_GEN_7_POKEMON == TRUE @@ -747,12 +751,12 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_VIKAVOLT] = _("Vikavolt"), [SPECIES_CRABRAWLER] = _("Crabrawler"), [SPECIES_CRABOMINABLE] = _("Crabminabl"), - [SPECIES_ORICORIO] = _("Oricorio"), + [SPECIES_ORICORIO_BAILE] = _("Oricorio"), [SPECIES_CUTIEFLY] = _("Cutiefly"), [SPECIES_RIBOMBEE] = _("Ribombee"), [SPECIES_ROCKRUFF] = _("Rockruff"), - [SPECIES_LYCANROC] = _("Lycanroc"), - [SPECIES_WISHIWASHI] = _("Wishiwashi"), + [SPECIES_LYCANROC_MIDDAY] = _("Lycanroc"), + [SPECIES_WISHIWASHI_SOLO] = _("Wishiwashi"), [SPECIES_MAREANIE] = _("Mareanie"), [SPECIES_TOXAPEX] = _("Toxapex"), [SPECIES_MUDBRAY] = _("Mudbray"), @@ -779,12 +783,12 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_PALOSSAND] = _("Palossand"), [SPECIES_PYUKUMUKU] = _("Pyukumuku"), [SPECIES_TYPE_NULL] = _("Type: Null"), - [SPECIES_SILVALLY] = _("Silvally"), - [SPECIES_MINIOR] = _("Minior"), + [SPECIES_SILVALLY_NORMAL] = _("Silvally"), + [SPECIES_MINIOR_METEOR_RED] = _("Minior"), [SPECIES_KOMALA] = _("Komala"), [SPECIES_TURTONATOR] = _("Turtonator"), [SPECIES_TOGEDEMARU] = _("Togedemaru"), - [SPECIES_MIMIKYU] = _("Mimikyu"), + [SPECIES_MIMIKYU_DISGUISED] = _("Mimikyu"), [SPECIES_BRUXISH] = _("Bruxish"), [SPECIES_DRAMPA] = _("Drampa"), [SPECIES_DHELMISE] = _("Dhelmise"), @@ -857,13 +861,13 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_ARROKUDA] = _("Arrokuda"), [SPECIES_BARRASKEWDA] = _("Barraskewd"), [SPECIES_TOXEL] = _("Toxel"), - [SPECIES_TOXTRICITY] = _("Toxtricity"), + [SPECIES_TOXTRICITY_AMPED] = _("Toxtricity"), [SPECIES_SIZZLIPEDE] = _("Sizzlipede"), [SPECIES_CENTISKORCH] = _("Centiskorc"), [SPECIES_CLOBBOPUS] = _("Clobbopus"), [SPECIES_GRAPPLOCT] = _("Grapploct"), - [SPECIES_SINISTEA] = _("Sinistea"), - [SPECIES_POLTEAGEIST] = _("Polteageis"), + [SPECIES_SINISTEA_PHONY] = _("Sinistea"), + [SPECIES_POLTEAGEIST_PHONY] = _("Polteageis"), [SPECIES_HATENNA] = _("Hatenna"), [SPECIES_HATTREM] = _("Hattrem"), [SPECIES_HATTERENE] = _("Hatterene"), @@ -877,15 +881,77 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_MR_RIME] = _("Mr. Rime"), [SPECIES_RUNERIGUS] = _("Runerigus"), [SPECIES_MILCERY] = _("Milcery"), - [SPECIES_ALCREMIE] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = _("Alcremie"), + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = _("Alcremie"), [SPECIES_FALINKS] = _("Falinks"), [SPECIES_PINCURCHIN] = _("Pincurchin"), [SPECIES_SNOM] = _("Snom"), [SPECIES_FROSMOTH] = _("Frosmoth"), [SPECIES_STONJOURNER] = _("Stonjourne"), - [SPECIES_EISCUE] = _("Eiscue"), - [SPECIES_INDEEDEE] = _("Indeedee"), - [SPECIES_MORPEKO] = _("Morpeko"), + [SPECIES_EISCUE_ICE_FACE] = _("Eiscue"), + [SPECIES_INDEEDEE_MALE] = _("Indeedee"), + [SPECIES_MORPEKO_FULL_BELLY] = _("Morpeko"), [SPECIES_CUFANT] = _("Cufant"), [SPECIES_COPPERAJAH] = _("Copperajah"), [SPECIES_DRACOZOLT] = _("Dracozolt"), @@ -896,11 +962,11 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_DREEPY] = _("Dreepy"), [SPECIES_DRAKLOAK] = _("Drakloak"), [SPECIES_DRAGAPULT] = _("Dragapult"), - [SPECIES_ZACIAN] = _("Zacian"), - [SPECIES_ZAMAZENTA] = _("Zamazenta"), + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = _("Zacian"), + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = _("Zamazenta"), [SPECIES_ETERNATUS] = _("Eternatus"), [SPECIES_KUBFU] = _("Kubfu"), - [SPECIES_URSHIFU] = _("Urshifu"), + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = _("Urshifu"), [SPECIES_ZARUDE] = _("Zarude"), [SPECIES_REGIELEKI] = _("Regieleki"), [SPECIES_REGIDRAGO] = _("Regidrago"), @@ -910,10 +976,144 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_WYRDEER] = _("Wyrdeer"), [SPECIES_KLEAVOR] = _("Kleavor"), [SPECIES_URSALUNA] = _("Ursaluna"), - [SPECIES_BASCULEGION] = _("Bsculegion"), + [SPECIES_URSALUNA_BLOODMOON] = _("Ursaluna"), + [SPECIES_BASCULEGION_MALE] = _("Bsculegion"), [SPECIES_SNEASLER] = _("Sneasler"), [SPECIES_OVERQWIL] = _("Overqwil"), - [SPECIES_ENAMORUS] = _("Enamorus"), + [SPECIES_ENAMORUS_INCARNATE] = _("Enamorus"), +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = _("Sprigatito"), + [SPECIES_FLORAGATO] = _("Floragato"), + [SPECIES_MEOWSCARADA] = _("Meowscarad"), + [SPECIES_FUECOCO] = _("Fuecoco"), + [SPECIES_CROCALOR] = _("Crocalor"), + [SPECIES_SKELEDIRGE] = _("Skeledirge"), + [SPECIES_QUAXLY] = _("Quaxly"), + [SPECIES_QUAXWELL] = _("Quaxwell"), + [SPECIES_QUAQUAVAL] = _("Quaquaval"), + [SPECIES_LECHONK] = _("Lechonk"), + [SPECIES_OINKOLOGNE_MALE] = _("Oinkologne"), + [SPECIES_OINKOLOGNE_FEMALE] = _("Oinkologne"), + [SPECIES_TAROUNTULA] = _("Tarountula"), + [SPECIES_SPIDOPS] = _("Spidops"), + [SPECIES_NYMBLE] = _("Nymble"), + [SPECIES_LOKIX] = _("Lokix"), + [SPECIES_PAWMI] = _("Pawmi"), + [SPECIES_PAWMO] = _("Pawmo"), + [SPECIES_PAWMOT] = _("Pawmot"), + [SPECIES_TANDEMAUS] = _("Tandemaus"), + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = _("Maushold"), + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = _("Maushold"), + [SPECIES_FIDOUGH] = _("Fidough"), + [SPECIES_DACHSBUN] = _("Dachsbun"), + [SPECIES_SMOLIV] = _("Smoliv"), + [SPECIES_DOLLIV] = _("Dolliv"), + [SPECIES_ARBOLIVA] = _("Arboliva"), + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = _("Sqawkabily"), + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = _("Sqawkabily"), + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = _("Sqawkabily"), + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = _("Sqawkabily"), + [SPECIES_NACLI] = _("Nacli"), + [SPECIES_NACLSTACK] = _("Naclstack"), + [SPECIES_GARGANACL] = _("Garganacl"), + [SPECIES_CHARCADET] = _("Charcadet"), + [SPECIES_ARMAROUGE] = _("Armarouge"), + [SPECIES_CERULEDGE] = _("Ceruledge"), + [SPECIES_TADBULB] = _("Tadbulb"), + [SPECIES_BELLIBOLT] = _("Bellibolt"), + [SPECIES_WATTREL] = _("Wattrel"), + [SPECIES_KILOWATTREL] = _("Kilowatrel"), + [SPECIES_MASCHIFF] = _("Maschiff"), + [SPECIES_MABOSSTIFF] = _("Mabosstiff"), + [SPECIES_SHROODLE] = _("Shroodle"), + [SPECIES_GRAFAIAI] = _("Grafaiai"), + [SPECIES_BRAMBLIN] = _("Bramblin"), + [SPECIES_BRAMBLEGHAST] = _("Brmblghast"), + [SPECIES_TOEDSCOOL] = _("Toedscool"), + [SPECIES_TOEDSCRUEL] = _("Toedscruel"), + [SPECIES_KLAWF] = _("Klawf"), + [SPECIES_CAPSAKID] = _("Capsakid"), + [SPECIES_SCOVILLAIN] = _("Scovillain"), + [SPECIES_RELLOR] = _("Rellor"), + [SPECIES_RABSCA] = _("Rabsca"), + [SPECIES_FLITTLE] = _("Flittle"), + [SPECIES_ESPATHRA] = _("Espathra"), + [SPECIES_TINKATINK] = _("Tinkatink"), + [SPECIES_TINKATUFF] = _("Tinkatuff"), + [SPECIES_TINKATON] = _("Tinkaton"), + [SPECIES_WIGLETT] = _("Wiglett"), + [SPECIES_WUGTRIO] = _("Wugtrio"), + [SPECIES_BOMBIRDIER] = _("Bombirdier"), + [SPECIES_FINIZEN] = _("Finizen"), + [SPECIES_PALAFIN_ZERO] = _("Palafin"), + [SPECIES_PALAFIN_HERO] = _("Palafin"), + [SPECIES_VAROOM] = _("Varoom"), + [SPECIES_REVAVROOM] = _("Revavroom"), + [SPECIES_CYCLIZAR] = _("Cyclizar"), + [SPECIES_ORTHWORM] = _("Orthworm"), + [SPECIES_GLIMMET] = _("Glimmet"), + [SPECIES_GLIMMORA] = _("Glimmora"), + [SPECIES_GREAVARD] = _("Greavard"), + [SPECIES_HOUNDSTONE] = _("Houndstone"), + [SPECIES_FLAMIGO] = _("Flamigo"), + [SPECIES_CETODDLE] = _("Cetoddle"), + [SPECIES_CETITAN] = _("Cetitan"), + [SPECIES_VELUZA] = _("Veluza"), + [SPECIES_DONDOZO] = _("Dondozo"), + [SPECIES_TATSUGIRI_CURLY] = _("Tatsugiri"), + [SPECIES_TATSUGIRI_DROOPY] = _("Tatsugiri"), + [SPECIES_TATSUGIRI_STRETCHY] = _("Tatsugiri"), + [SPECIES_ANNIHILAPE] = _("Annihilape"), + [SPECIES_CLODSIRE] = _("Clodsire"), + [SPECIES_FARIGIRAF] = _("Farigiraf"), + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = _("Dudunsprce"), + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = _("Dudunsprce"), + [SPECIES_KINGAMBIT] = _("Kingambit"), + [SPECIES_GREAT_TUSK] = _("Great Tusk"), + [SPECIES_SCREAM_TAIL] = _("ScreamTail"), + [SPECIES_BRUTE_BONNET] = _("BruteBonet"), + [SPECIES_FLUTTER_MANE] = _("FluttrMane"), + [SPECIES_SLITHER_WING] = _("SlithrWing"), + [SPECIES_SANDY_SHOCKS] = _("SndyShocks"), + [SPECIES_IRON_TREADS] = _("IronTreads"), + [SPECIES_IRON_BUNDLE] = _("IronBundle"), + [SPECIES_IRON_HANDS] = _("Iron Hands"), + [SPECIES_IRON_JUGULIS] = _("IronJuguls"), + [SPECIES_IRON_MOTH] = _("Iron Moth"), + [SPECIES_IRON_THORNS] = _("IronThorns"), + [SPECIES_FRIGIBAX] = _("Frigibax"), + [SPECIES_ARCTIBAX] = _("Arctibax"), + [SPECIES_BAXCALIBUR] = _("Baxcalibur"), + [SPECIES_GIMMIGHOUL_CHEST] = _("Gimmighoul"), + [SPECIES_GIMMIGHOUL_ROAMING] = _("Gimmighoul"), + [SPECIES_GHOLDENGO] = _("Gholdengo"), + [SPECIES_WO_CHIEN] = _("Wo-Chien"), + [SPECIES_CHIEN_PAO] = _("Chien-Pao"), + [SPECIES_TING_LU] = _("Ting-Lu"), + [SPECIES_CHI_YU] = _("Chi-Yu"), + [SPECIES_ROARING_MOON] = _("RoarngMoon"), + [SPECIES_IRON_VALIANT] = _("IronVliant"), + [SPECIES_KORAIDON] = _("Koraidon"), + [SPECIES_MIRAIDON] = _("Miraidon"), + [SPECIES_WALKING_WAKE] = _("WalkngWake"), + [SPECIES_IRON_LEAVES] = _("IronLeaves"), + [SPECIES_DIPPLIN] = _("Dipplin"), + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = _("Ptchageist"), + [SPECIES_POLTCHAGEIST_ARTISAN] = _("Ptchageist"), + [SPECIES_SINISTCHA_UNREMARKABLE] = _("Sinistcha"), + [SPECIES_SINISTCHA_MASTERPIECE] = _("Sinistcha"), + [SPECIES_OKIDOGI] = _("Okidogi"), + [SPECIES_MUNKIDORI] = _("Munkidori"), + [SPECIES_FEZANDIPITI] = _("Fezndipiti"), + [SPECIES_OGERPON_TEAL_MASK] = _("Ogerpon"), + [SPECIES_OGERPON_WELLSPRING_MASK] = _("Ogerpon"), + [SPECIES_OGERPON_HEARTHFLAME_MASK] = _("Ogerpon"), + [SPECIES_OGERPON_CORNERSTONE_MASK] = _("Ogerpon"), + [SPECIES_OGERPON_TEAL_MASK_TERA] = _("Ogerpon"), + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = _("Ogerpon"), + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = _("Ogerpon"), + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = _("Ogerpon"), #endif // Megas @@ -1013,7 +1213,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_LINOONE_GALARIAN] = _("Linoone"), #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = _("Darumaka"), - [SPECIES_DARMANITAN_GALARIAN] = _("Darmanitan"), + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = _("Darmanitan"), [SPECIES_YAMASK_GALARIAN] = _("Yamask"), [SPECIES_STUNFISK_GALARIAN] = _("Stunfisk"), #endif @@ -1146,7 +1346,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_BASCULIN_WHITE_STRIPED] = _("Basculin"), // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = _("Darmanitan"), - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = _("Darmanitan"), + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = _("Darmanitan"), // Deerling [SPECIES_DEERLING_SUMMER] = _("Deerling"), [SPECIES_DEERLING_AUTUMN] = _("Deerling"), @@ -1238,7 +1438,7 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { // Xerneas [SPECIES_XERNEAS_ACTIVE] = _("Xerneas"), // Zygarde - [SPECIES_ZYGARDE_10] = _("Zygarde"), + [SPECIES_ZYGARDE_10_AURA_BREAK] = _("Zygarde"), [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = _("Zygarde"), [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = _("Zygarde"), [SPECIES_ZYGARDE_COMPLETE] = _("Zygarde"), @@ -1308,15 +1508,6 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { [SPECIES_SINISTEA_ANTIQUE] = _("Sinistea"), // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = _("Polteageis"), - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM] = _("Alcremie"), - [SPECIES_ALCREMIE_MATCHA_CREAM] = _("Alcremie"), - [SPECIES_ALCREMIE_MINT_CREAM] = _("Alcremie"), - [SPECIES_ALCREMIE_LEMON_CREAM] = _("Alcremie"), - [SPECIES_ALCREMIE_SALTED_CREAM] = _("Alcremie"), - [SPECIES_ALCREMIE_RUBY_SWIRL] = _("Alcremie"), - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = _("Alcremie"), - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = _("Alcremie"), // Eiscue [SPECIES_EISCUE_NOICE_FACE] = _("Eiscue"), // Indeedee @@ -1336,6 +1527,42 @@ const u8 gSpeciesNames[NUM_SPECIES][POKEMON_NAME_LENGTH + 1] = { // Calyrex [SPECIES_CALYREX_ICE_RIDER] = _("Calyrex"), [SPECIES_CALYREX_SHADOW_RIDER] = _("Calyrex"), + // Basculegion [SPECIES_BASCULEGION_FEMALE] = _("Bsculegion"), + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = _("Venusaur"), + [SPECIES_CHARIZARD_GIGANTAMAX] = _("Charizard"), + [SPECIES_BLASTOISE_GIGANTAMAX] = _("Blastoise"), + [SPECIES_BUTTERFREE_GIGANTAMAX] = _("Butterfree"), + [SPECIES_PIKACHU_GIGANTAMAX] = _("Pikachu"), + [SPECIES_MEOWTH_GIGANTAMAX] = _("Meowth"), + [SPECIES_MACHAMP_GIGANTAMAX] = _("Machamp"), + [SPECIES_GENGAR_GIGANTAMAX] = _("Gengar"), + [SPECIES_KINGLER_GIGANTAMAX] = _("Kingler"), + [SPECIES_LAPRAS_GIGANTAMAX] = _("Lapras"), + [SPECIES_EEVEE_GIGANTAMAX] = _("Eevee"), + [SPECIES_SNORLAX_GIGANTAMAX] = _("Snorlax"), + [SPECIES_GARBODOR_GIGANTAMAX] = _("Garbodor"), + [SPECIES_MELMETAL_GIGANTAMAX] = _("Melmetal"), + [SPECIES_RILLABOOM_GIGANTAMAX] = _("Rillaboom"), + [SPECIES_CINDERACE_GIGANTAMAX] = _("Cinderace"), + [SPECIES_INTELEON_GIGANTAMAX] = _("Inteleon"), + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = _("Corviknigh"), + [SPECIES_ORBEETLE_GIGANTAMAX] = _("Orbeetle"), + [SPECIES_DREDNAW_GIGANTAMAX] = _("Drednaw"), + [SPECIES_COALOSSAL_GIGANTAMAX] = _("Coalossal"), + [SPECIES_FLAPPLE_GIGANTAMAX] = _("Flapple"), + [SPECIES_APPLETUN_GIGANTAMAX] = _("Appletun"), + [SPECIES_SANDACONDA_GIGANTAMAX] = _("Sandaconda"), + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = _("Toxtricity"), + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = _("Toxtricity"), + [SPECIES_CENTISKORCH_GIGANTAMAX] = _("Centiskorc"), + [SPECIES_HATTERENE_GIGANTAMAX] = _("Hatterene"), + [SPECIES_GRIMMSNARL_GIGANTAMAX] = _("Grimmsnarl"), + [SPECIES_ALCREMIE_GIGANTAMAX] = _("Alcremie"), + [SPECIES_COPPERAJAH_GIGANTAMAX] = _("Copperajah"), + [SPECIES_DURALUDON_GIGANTAMAX] = _("Duraludon"), + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = _("Urshifu"), + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = _("Urshifu"), #endif }; diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index ed53a181dd..b3128781c4 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -5443,7 +5443,7 @@ static const struct TrainerMon sParty_Angelica[] = { { .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), .lvl = 30, - .species = SPECIES_CASTFORM, + .species = SPECIES_CASTFORM_NORMAL, .moves = {MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, MOVE_WATER_PULSE} } }; @@ -6224,7 +6224,7 @@ static const struct TrainerMon sParty_Jonas[] = { static const struct TrainerMon sParty_Kayley[] = { { .lvl = 31, - .species = SPECIES_CASTFORM, + .species = SPECIES_CASTFORM_NORMAL, .moves = {MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, MOVE_SOLAR_BEAM} } }; diff --git a/src/data/wallpapers.h b/src/data/wallpapers.h index 64c61fe2d5..d204d44130 100644 --- a/src/data/wallpapers.h +++ b/src/data/wallpapers.h @@ -317,6 +317,7 @@ static const u32 sWallpaperIcon_Brick[] = INCBIN_U32("graphics/pokemon_st static const u32 sWallpaperIcon_FourStar[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/four_star.4bpp.lz"); static const u32 sWallpaperIcon_Asterisk[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/asterisk.4bpp.lz"); static const u32 sWallpaperIcon_Dot[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/dot.4bpp.lz"); +static const u32 sWallpaperIcon_CrossJapan[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/cross_japan.4bpp.lz"); static const u32 sWallpaperIcon_LineCircle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/line_circle.4bpp.lz"); static const u32 sWallpaperIcon_PokeBall[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/pokeball.4bpp.lz"); static const u32 sWallpaperIcon_Maze[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/maze.4bpp.lz"); @@ -325,6 +326,7 @@ static const u32 sWallpaperIcon_BigAsterisk[] = INCBIN_U32("graphics/pokemon_st static const u32 sWallpaperIcon_Circle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/circle.4bpp.lz"); static const u32 sWallpaperIcon_Koffing[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/koffing.4bpp.lz"); static const u32 sWallpaperIcon_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/ribbon.4bpp.lz"); +static const u32 sWallpaperIcon_BoltJapan[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/bolt_japan.4bpp.lz"); static const u32 sWallpaperIcon_FourCircles[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/four_circles.4bpp.lz"); static const u32 sWallpaperIcon_Lotad[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/lotad.4bpp.lz"); static const u32 sWallpaperIcon_Crystal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/crystal.4bpp.lz"); @@ -334,6 +336,7 @@ static const u32 sWallpaperIcon_Luvdisc[] = INCBIN_U32("graphics/pokemon_st static const u32 sWallpaperIcon_StarInCircle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/star_in_circle.4bpp.lz"); static const u32 sWallpaperIcon_Spinda[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/spinda.4bpp.lz"); static const u32 sWallpaperIcon_Latis[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/latis.4bpp.lz"); +static const u32 sWallpaperIcon_PlusleJapan[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/plusle_japan.4bpp.lz"); static const u32 sWallpaperIcon_Minun[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/minun.4bpp.lz"); static const u32 sWallpaperIcon_Togepi[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/togepi.4bpp.lz"); static const u32 sWallpaperIcon_Magma[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/magma.4bpp.lz"); @@ -367,7 +370,11 @@ static const u32 *const sWaldaWallpaperIcons[] = sWallpaperIcon_FourStar, sWallpaperIcon_Asterisk, sWallpaperIcon_Dot, +#if OW_PC_JAPAN_WALDA_ICONS == TRUE + sWallpaperIcon_CrossJapan, +#else gWallpaperIcon_Cross, +#endif sWallpaperIcon_LineCircle, sWallpaperIcon_PokeBall, sWallpaperIcon_Maze, @@ -376,7 +383,11 @@ static const u32 *const sWaldaWallpaperIcons[] = sWallpaperIcon_Circle, sWallpaperIcon_Koffing, sWallpaperIcon_Ribbon, +#if OW_PC_JAPAN_WALDA_ICONS == TRUE + sWallpaperIcon_BoltJapan, +#else gWallpaperIcon_Bolt, +#endif sWallpaperIcon_FourCircles, sWallpaperIcon_Lotad, sWallpaperIcon_Crystal, @@ -386,7 +397,11 @@ static const u32 *const sWaldaWallpaperIcons[] = sWallpaperIcon_StarInCircle, sWallpaperIcon_Spinda, sWallpaperIcon_Latis, +#if OW_PC_JAPAN_WALDA_ICONS == TRUE + sWallpaperIcon_PlusleJapan, +#else gWallpaperIcon_Plusle, +#endif sWallpaperIcon_Minun, sWallpaperIcon_Togepi, sWallpaperIcon_Magma, diff --git a/src/daycare.c b/src/daycare.c index cc70840d14..1f90e7bc80 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -28,7 +28,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; -#define IS_DITTO(species) (gBaseStats[species].eggGroup1 == EGG_GROUP_DITTO || gBaseStats[species].eggGroup2 == EGG_GROUP_DITTO) +#define IS_DITTO(species) (gSpeciesInfo[species].eggGroups[0] == EGG_GROUP_DITTO || gSpeciesInfo[species].eggGroups[1] == EGG_GROUP_DITTO) static void ClearDaycareMonMail(struct DaycareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); @@ -952,11 +952,12 @@ void RejectEggFromDayCare(void) RemoveEggFromDayCare(&gSaveBlock1Ptr->daycare); } + static const struct { u16 currSpecies; u16 item; u16 babySpecies; -} IncenseBabyTable[][3] = +} sIncenseBabyTable[] = { // Regular offspring, Item, Incense Offspring { SPECIES_WOBBUFFET, ITEM_LAX_INCENSE, SPECIES_WYNAUT }, @@ -970,6 +971,7 @@ static const struct { { SPECIES_MANTINE, ITEM_WAVE_INCENSE, SPECIES_MANTYKE }, }; +#if P_INCENSE_BREEDING < GEN_9 static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare) { u32 i; @@ -977,21 +979,22 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - for (i = 0; i < ARRAY_COUNT(IncenseBabyTable); i++) + for (i = 0; i < ARRAY_COUNT(sIncenseBabyTable); i++) { - if (IncenseBabyTable[i]->babySpecies == *species && motherItem != IncenseBabyTable[i]->item && fatherItem != IncenseBabyTable[i]->item) + if (sIncenseBabyTable[i].babySpecies == *species && motherItem != sIncenseBabyTable[i].item && fatherItem != sIncenseBabyTable[i].item) { - *species = IncenseBabyTable[i]->currSpecies; + *species = sIncenseBabyTable[i].currSpecies; break; } } } +#endif static const struct { u16 offspring; u16 item; u16 move; -} BreedingSpecialMoveItemTable[][3] = +} sBreedingSpecialMoveItemTable[] = { // Offspring, Item, Move { SPECIES_PICHU, ITEM_LIGHT_BALL, MOVE_VOLT_TACKLE }, @@ -1003,14 +1006,14 @@ static void GiveMoveIfItem(struct Pokemon *mon, struct DayCare *daycare) u32 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); u32 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - for (i = 0; i < ARRAY_COUNT(BreedingSpecialMoveItemTable); i++) + for (i = 0; i < ARRAY_COUNT(sBreedingSpecialMoveItemTable); i++) { - if (BreedingSpecialMoveItemTable[i]->offspring == species - && (motherItem == BreedingSpecialMoveItemTable[i]->item || - fatherItem == BreedingSpecialMoveItemTable[i]->item)) + if (sBreedingSpecialMoveItemTable[i].offspring == species + && (motherItem == sBreedingSpecialMoveItemTable[i].item || + fatherItem == sBreedingSpecialMoveItemTable[i].item)) { - if (GiveMoveToMon(mon, BreedingSpecialMoveItemTable[i]->move) == MON_HAS_MAX_MOVES) - DeleteFirstMoveAndGiveMoveToMon(mon, BreedingSpecialMoveItemTable[i]->move); + if (GiveMoveToMon(mon, sBreedingSpecialMoveItemTable[i].move) == MON_HAS_MAX_MOVES) + DeleteFirstMoveAndGiveMoveToMon(mon, sBreedingSpecialMoveItemTable[i].move); } } } @@ -1050,7 +1053,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent else if (eggSpecies == SPECIES_MANAPHY) eggSpecies = SPECIES_PHIONE; else if (eggSpecies == SPECIES_SINISTEA_ANTIQUE) - eggSpecies = SPECIES_SINISTEA; + eggSpecies = SPECIES_SINISTEA_PHONY; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_VIVILLON) eggSpecies = SPECIES_SCATTERBUG; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_ROTOM) @@ -1073,7 +1076,7 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) { struct Pokemon egg; u16 species; - u8 parentSlots[DAYCARE_MON_COUNT]; + u8 parentSlots[DAYCARE_MON_COUNT] = {0}; bool8 isEgg; species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); diff --git a/src/debug.c b/src/debug.c index f915235d8b..9db4862120 100644 --- a/src/debug.c +++ b/src/debug.c @@ -9,6 +9,7 @@ #include "global.h" #include "battle.h" #include "battle_setup.h" +#include "clock.h" #include "coins.h" #include "credits.h" #include "data.h" @@ -42,6 +43,7 @@ #include "pokemon_storage_system.h" #include "random.h" #include "region_map.h" +#include "rtc.h" #include "script.h" #include "script_pokemon_util.h" #include "sound.h" @@ -53,6 +55,8 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_frontier.h" +#include "constants/coins.h" +#include "constants/expansion.h" #include "constants/flags.h" #include "constants/items.h" #include "constants/map_groups.h" @@ -64,8 +68,8 @@ #if DEBUG_OVERWORLD_MENU == TRUE // ******************************* -// Enums -enum { // Main +enum DebugMenu +{ DEBUG_MENU_ITEM_UTILITIES, DEBUG_MENU_ITEM_SCRIPTS, DEBUG_MENU_ITEM_FLAGVAR, @@ -74,26 +78,32 @@ enum { // Main DEBUG_MENU_ITEM_FILL, DEBUG_MENU_ITEM_SOUND, DEBUG_MENU_ITEM_ACCESS_PC, - DEBUG_MENU_ITEM_CANCEL + DEBUG_MENU_ITEM_CANCEL, }; -enum { // Util + +enum UtilMenu +{ DEBUG_UTIL_MENU_ITEM_HEAL_PARTY, DEBUG_UTIL_MENU_ITEM_FLY, DEBUG_UTIL_MENU_ITEM_WARP, DEBUG_UTIL_MENU_ITEM_POISON_MONS, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK, + DEBUG_UTIL_MENU_ITEM_ROM_SPACE, DEBUG_UTIL_MENU_ITEM_WEATHER, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS, - DEBUG_UTIL_MENU_ITEM_TRAINER_NAME, - DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER, - DEBUG_UTIL_MENU_ITEM_TRAINER_ID, + DEBUG_UTIL_MENU_ITEM_PLAYER_NAME, + DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER, + DEBUG_UTIL_MENU_ITEM_PLAYER_ID, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES, DEBUG_UTIL_MENU_ITEM_CHEAT, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG, + DEBUG_UTIL_MENU_ITEM_EXPANSION_VER, }; -enum { // Scripts + +enum ScriptMenu +{ DEBUG_UTIL_MENU_ITEM_SCRIPT_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_3, @@ -103,7 +113,9 @@ enum { // Scripts DEBUG_UTIL_MENU_ITEM_SCRIPT_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_8, }; -enum { // Flags and Vars + +enum FlagsVarsMenu +{ DEBUG_FLAGVAR_MENU_ITEM_FLAGS, DEBUG_FLAGVAR_MENU_ITEM_VARS, DEBUG_FLAGVAR_MENU_ITEM_DEXFLAGS_ALL, @@ -111,6 +123,7 @@ enum { // Flags and Vars DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV, + DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL, @@ -121,14 +134,18 @@ enum { // Flags and Vars DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING, }; -enum { // Battle 0 Type + +enum BattleType +{ DEBUG_BATTLE_0_MENU_ITEM_WILD, DEBUG_BATTLE_0_MENU_ITEM_WILD_DOUBLE, DEBUG_BATTLE_0_MENU_ITEM_SINGLE, DEBUG_BATTLE_0_MENU_ITEM_DOUBLE, DEBUG_BATTLE_0_MENU_ITEM_MULTI, }; -enum { // Battle 1 AI FLags + +enum BattleAIFlags +{ DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_01, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_02, @@ -149,7 +166,9 @@ enum { // Battle 1 AI FLags DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17, DEBUG_BATTLE_1_MENU_ITEM_CONTINUE, }; -enum { // Battle 2 Terrain + +enum BattleTerrain +{ DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_1, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_2, @@ -161,7 +180,9 @@ enum { // Battle 2 Terrain DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9, }; -enum { // Give + +enum GiveMenu +{ DEBUG_GIVE_MENU_ITEM_ITEM_X, DEBUG_GIVE_MENU_ITEM_ALLTMS, DEBUG_GIVE_MENU_ITEM_POKEMON_SIMPLE, @@ -171,7 +192,9 @@ enum { // Give DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS, DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG, }; -enum { // Give Fill + +enum GiveFillMenu +{ DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST, DEBUG_FILL_MENU_ITEM_PC_BOXES_SLOW, DEBUG_FILL_MENU_ITEM_PC_ITEMS, @@ -181,13 +204,17 @@ enum { // Give Fill DEBUG_FILL_MENU_ITEM_POCKET_BERRIES, DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS, }; -enum { //Sound + +enum SoundMenu +{ DEBUG_SOUND_MENU_ITEM_SE, DEBUG_SOUND_MENU_ITEM_MUS, }; // ******************************* // Constants +#define DEBUG_MENU_FONT FONT_NORMAL + #define DEBUG_MENU_WIDTH_MAIN 16 #define DEBUG_MENU_HEIGHT_MAIN 9 @@ -217,11 +244,11 @@ enum { //Sound // ******************************* struct DebugMonData { - u16 mon_speciesId; - u8 mon_level; - u8 isShiny; - u16 mon_natureId; - u16 mon_abilityNum; + u16 species; + u8 level; + bool8 isShiny:1; + u8 nature:5; + u8 abilityNum:2; u8 mon_iv_hp; u8 mon_iv_atk; u8 mon_iv_def; @@ -260,12 +287,10 @@ EWRAM_DATA u32 gDebugAIFlags = 0; // Define functions static void Debug_ReShowMainMenu(void); static void Debug_ShowMenu(void (*HandleInput)(u8), struct ListMenuTemplate LMtemplate); -static void Debug_ShowMenuDynamic(u8 taskId); static void Debug_DestroyMenu(u8 taskId); static void Debug_DestroyMenu_Full(u8 taskId); static void DebugAction_Cancel(u8 taskId); static void DebugAction_DestroyExtraWindow(u8 taskId); -static void DebugTask_HandleMenuInput(u8 taskId, void (*HandleInput)(u8)); static void Debug_InitDebugBattleData(void); static void Debug_RefreshListMenu(u8 taskId); static void Debug_RedrawListMenu(u8 taskId); @@ -282,11 +307,11 @@ static void DebugAction_Util_Script_8(u8 taskId); static void DebugAction_OpenUtilitiesMenu(u8 taskId); static void DebugAction_OpenScriptsMenu(u8 taskId); static void DebugAction_OpenFlagsVarsMenu(u8 taskId); -static void DebugAction_OpenBattleMenu(u8 taskId); static void DebugAction_OpenGiveMenu(u8 taskId); static void DebugAction_OpenFillMenu(u8 taskId); static void DebugAction_OpenSoundMenu(u8 taskId); static void DebugAction_AccessPC(u8 taskId); + static void DebugTask_HandleMenuInput_Main(u8 taskId); static void DebugTask_HandleMenuInput_Utilities(u8 taskId); static void DebugTask_HandleMenuInput_Scripts(u8 taskId); @@ -305,17 +330,19 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId); static void DebugAction_FlagsVars_RunningShoes(u8 taskId); static void DebugAction_Util_PoisonMons(u8 taskId); static void DebugAction_Util_CheckSaveBlock(u8 taskId); +static void DebugAction_Util_CheckROMSpace(u8 taskId); static void DebugAction_Util_Weather(u8 taskId); static void DebugAction_Util_Weather_SelectId(u8 taskId); static void DebugAction_Util_CheckWallClock(u8 taskId); static void DebugAction_Util_SetWallClock(u8 taskId); static void DebugAction_Util_WatchCredits(u8 taskId); -static void DebugAction_Util_Trainer_Name(u8 taskId); -static void DebugAction_Util_Trainer_Gender(u8 taskId); -static void DebugAction_Util_Trainer_Id(u8 taskId); +static void DebugAction_Util_Player_Name(u8 taskId); +static void DebugAction_Util_Player_Gender(u8 taskId); +static void DebugAction_Util_Player_Id(u8 taskId); static void DebugAction_Util_Clear_Boxes(u8 taskId); static void DebugAction_Util_CheatStart(u8 taskId); static void DebugAction_Util_HatchAnEgg(u8 taskId); +static void DebugAction_Util_ExpansionVersion(u8 taskId); static void DebugAction_FlagsVars_Flags(u8 taskId); static void DebugAction_FlagsVars_FlagsSelect(u8 taskId); @@ -327,6 +354,7 @@ static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId); static void DebugAction_FlagsVars_SwitchDex(u8 taskId); static void DebugAction_FlagsVars_SwitchNatDex(u8 taskId); static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId); +static void DebugAction_FlagsVars_SwitchMatchCall(u8 taskId); static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId); static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId); static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId); @@ -374,14 +402,14 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId); extern const u8 Debug_FlagsNotSetOverworldConfigMessage[]; extern const u8 Debug_FlagsNotSetBattleConfigMessage[]; -extern const u8 Debug_Script_1[]; -extern const u8 Debug_Script_2[]; -extern const u8 Debug_Script_3[]; -extern const u8 Debug_Script_4[]; -extern const u8 Debug_Script_5[]; -extern const u8 Debug_Script_6[]; -extern const u8 Debug_Script_7[]; -extern const u8 Debug_Script_8[]; +extern const u8 Debug_EventScript_Script_1[]; +extern const u8 Debug_EventScript_Script_2[]; +extern const u8 Debug_EventScript_Script_3[]; +extern const u8 Debug_EventScript_Script_4[]; +extern const u8 Debug_EventScript_Script_5[]; +extern const u8 Debug_EventScript_Script_6[]; +extern const u8 Debug_EventScript_Script_7[]; +extern const u8 Debug_EventScript_Script_8[]; extern const u8 DebugScript_DaycareMonsNotCompatible[]; extern const u8 DebugScript_OneDaycareMons[]; extern const u8 DebugScript_ZeroDaycareMons[]; @@ -392,7 +420,9 @@ extern const u8 Debug_HatchAnEgg[]; extern const u8 PlayersHouse_2F_EventScript_SetWallClock[]; extern const u8 PlayersHouse_2F_EventScript_CheckWallClock[]; extern const u8 Debug_CheckSaveBlock[]; +extern const u8 Debug_CheckROMSpace[]; extern const u8 Debug_BoxFilledMessage[]; +extern const u8 Debug_ShowExpansionVersion[]; #include "data/map_group_count.h" @@ -425,26 +455,28 @@ static const u8 sDebugText_Util_Script_6[] = _("Script 6"); static const u8 sDebugText_Util_Script_7[] = _("Script 7"); static const u8 sDebugText_Util_Script_8[] = _("Script 8"); // Util Menu -static const u8 sDebugText_Util_HealParty[] = _("Heal Party"); -static const u8 sDebugText_Util_Fly[] = _("Fly to map…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WarpToMap[] = _("Warp to map warp…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WarpToMap_SelectMapGroup[] =_("Group: {STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelectMap[] = _("Map: {STR_VAR_1}{CLEAR_TO 90}\nMapSec:{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelectWarp[] = _("Warp:{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); -static const u8 sDebugText_Util_PoisonMons[] = _("Poison all mons"); -static const u8 sDebugText_Util_SaveBlockSpace[] = _("SaveBlock Space…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Weather[] = _("Set weather…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Weather_ID[] = _("Weather Id: {STR_VAR_3}\n{STR_VAR_1}\n{STR_VAR_2}"); -static const u8 sDebugText_Util_CheckWallClock[] = _("Check Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_SetWallClock[] = _("Set Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Trainer_Name[] = _("Trainer name"); -static const u8 sDebugText_Util_Trainer_Gender[] = _("Toggle T. Gender"); -static const u8 sDebugText_Util_Trainer_Id[] = _("New Trainer Id"); -static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); -static const u8 sDebugText_Util_CheatStart[] = _("CHEAT Start"); -static const u8 sDebugText_Util_HatchAnEgg[] = _("Hatch an Egg"); +static const u8 sDebugText_Util_HealParty[] = _("Heal Party"); +static const u8 sDebugText_Util_FlyToMap[] = _("Fly to map…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WarpToMap[] = _("Warp to map warp…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WarpToMap_SelectMapGroup[] = _("Group: {STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelectMap[] = _("Map: {STR_VAR_1}{CLEAR_TO 90}\nMapSec:{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelectWarp[] = _("Warp:{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); +static const u8 sDebugText_Util_PoisonParty[] = _("Poison party"); +static const u8 sDebugText_Util_SaveBlockSpace[] = _("SaveBlock Space…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_ROMSpace[] = _("ROM Space…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Weather[] = _("Set weather…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Weather_ID[] = _("Weather Id: {STR_VAR_3}\n{STR_VAR_1}\n{STR_VAR_2}"); +static const u8 sDebugText_Util_CheckWallClock[] = _("Check Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_SetWallClock[] = _("Set Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Player_Name[] = _("Player name"); +static const u8 sDebugText_Util_Player_Gender[] = _("Toggle Gender"); +static const u8 sDebugText_Util_Player_Id[] = _("New Trainer Id"); +static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); +static const u8 sDebugText_Util_CheatStart[] = _("CHEAT Start"); +static const u8 sDebugText_Util_HatchAnEgg[] = _("Hatch an Egg"); +static const u8 sDebugText_Util_ExpansionVersion[] = _("Expansion Version"); // Flags/Vars Menu static const u8 sDebugText_FlagsVars_Flags[] = _("Set Flag XYZ…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_FlagsVars_Flag[] = _("Flag: {STR_VAR_1}{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}"); @@ -458,6 +490,7 @@ static const u8 sDebugText_FlagsVars_PokedexFlags_Reset[] = _("Pokédex Flag static const u8 sDebugText_FlagsVars_SwitchDex[] = _("Toggle {STR_VAR_1}Pokédex"); static const u8 sDebugText_FlagsVars_SwitchNationalDex[] = _("Toggle {STR_VAR_1}NatDex"); static const u8 sDebugText_FlagsVars_SwitchPokeNav[] = _("Toggle {STR_VAR_1}PokéNav"); +static const u8 sDebugText_FlagsVars_SwitchMatchCall[] = _("Toggle {STR_VAR_1}Match Call"); static const u8 sDebugText_FlagsVars_RunningShoes[] = _("Toggle {STR_VAR_1}Running Shoes"); static const u8 sDebugText_FlagsVars_ToggleFlyFlags[] = _("Toggle {STR_VAR_1}Fly Flags"); static const u8 sDebugText_FlagsVars_ToggleAllBadges[] = _("Toggle {STR_VAR_1}All badges"); @@ -514,12 +547,12 @@ static const u8 sDebugText_PokemonShiny[] = _("Shiny:{CLEAR_TO 90}\n static const u8 sDebugText_PokemonNature[] = _("NatureId: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonAbility[] = _("AbilityNum: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonIVs[] = _("All IVs:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_0[] = _("IV HP:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_1[] = _("IV Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_2[] = _("IV Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_3[] = _("IV Speed:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_4[] = _("IV Sp. Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_5[] = _("IV Sp. Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_HP[] = _("IV HP:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Attack[] = _("IV Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Defense[] = _("IV Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Speed[] = _("IV Speed:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_SpAttack[] = _("IV Sp. Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_SpDefense[] = _("IV Sp. Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_0[] = _("Move 0: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_1[] = _("Move 1: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_2[] = _("Move 2: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); @@ -529,39 +562,40 @@ static const u8 sDebugText_Give_MaxCoins[] = _("Max Coins"); static const u8 sDebugText_Give_BattlePoints[] = _("Max Battle Points"); static const u8 sDebugText_Give_DaycareEgg[] = _("Daycare Egg"); // Fill Menu -static const u8 sDebugText_Fill_Pc_Fast[] = _("Fill PCBoxes Fast"); -static const u8 sDebugText_Fill_Pc_Slow[] = _("Fill PCBoxes Slow (LAG!)"); -static const u8 sDebugText_Fill_Pc_Items[] = _("Fill PCItems"); -static const u8 sDebugText_Fill_PocketItems[] = _("Fill Pocket Items"); -static const u8 sDebugText_Fill_PocketPokeBalls[] =_("Fill Pocket PokeBalls"); -static const u8 sDebugText_Fill_PocketTMHM[] = _("Fill Pocket TMHM"); -static const u8 sDebugText_Fill_PocketBerries[] = _("Fill Pocket Berries"); -static const u8 sDebugText_Fill_PocketKeyItems[] = _("Fill Pocket KeyItems"); -// Sound Mneu -static const u8 sDebugText_Sound_SE[] = _("Effects…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Sound_SE_ID[] = _("Sound Id: {STR_VAR_3}\n{STR_VAR_1} \n{STR_VAR_2}"); -static const u8 sDebugText_Sound_MUS[] = _("Music…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Sound_MUS_ID[] = _("Music Id: {STR_VAR_3}\n{STR_VAR_1} \n{STR_VAR_2}"); +static const u8 sDebugText_Fill_Pc_Fast[] = _("Fill PCBoxes Fast"); +static const u8 sDebugText_Fill_Pc_Slow[] = _("Fill PCBoxes Slow (LAG!)"); +static const u8 sDebugText_Fill_Pc_Items[] = _("Fill PCItems"); +static const u8 sDebugText_Fill_PocketItems[] = _("Fill Pocket Items"); +static const u8 sDebugText_Fill_PocketPokeBalls[] = _("Fill Pocket PokeBalls"); +static const u8 sDebugText_Fill_PocketTMHM[] = _("Fill Pocket TMHM"); +static const u8 sDebugText_Fill_PocketBerries[] = _("Fill Pocket Berries"); +static const u8 sDebugText_Fill_PocketKeyItems[] = _("Fill Pocket KeyItems"); +// Sound Menu +static const u8 sDebugText_Sound_SFX[] = _("SFX…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Sound_SFX_ID[] = _("SFX Id: {STR_VAR_3} {START_BUTTON} Stop\n{STR_VAR_1} \n{STR_VAR_2}"); +static const u8 sDebugText_Sound_Music[] = _("Music…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Sound_Music_ID[] = _("Music Id: {STR_VAR_3} {START_BUTTON} Stop\n{STR_VAR_1} \n{STR_VAR_2}"); -static const u8 digitInidicator_1[] = _("{LEFT_ARROW}+1{RIGHT_ARROW} "); -static const u8 digitInidicator_10[] = _("{LEFT_ARROW}+10{RIGHT_ARROW} "); -static const u8 digitInidicator_100[] = _("{LEFT_ARROW}+100{RIGHT_ARROW} "); -static const u8 digitInidicator_1000[] = _("{LEFT_ARROW}+1000{RIGHT_ARROW} "); -static const u8 digitInidicator_10000[] = _("{LEFT_ARROW}+10000{RIGHT_ARROW} "); -static const u8 digitInidicator_100000[] = _("{LEFT_ARROW}+100000{RIGHT_ARROW} "); -static const u8 digitInidicator_1000000[] = _("{LEFT_ARROW}+1000000{RIGHT_ARROW} "); -static const u8 digitInidicator_10000000[] = _("{LEFT_ARROW}+10000000{RIGHT_ARROW} "); -const u8 * const gText_DigitIndicator[] = +static const u8 sDebugText_Digit_1[] = _("{LEFT_ARROW}+1{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10[] = _("{LEFT_ARROW}+10{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_100[] = _("{LEFT_ARROW}+100{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_1000[] = _("{LEFT_ARROW}+1000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10000[] = _("{LEFT_ARROW}+10000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_100000[] = _("{LEFT_ARROW}+100000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_1000000[] = _("{LEFT_ARROW}+1000000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10000000[] = _("{LEFT_ARROW}+10000000{RIGHT_ARROW} "); +const u8 *const gText_DigitIndicator[] = { - digitInidicator_1, - digitInidicator_10, - digitInidicator_100, - digitInidicator_1000, - digitInidicator_10000, - digitInidicator_100000, - digitInidicator_1000000, - digitInidicator_10000000 + sDebugText_Digit_1, + sDebugText_Digit_10, + sDebugText_Digit_100, + sDebugText_Digit_1000, + sDebugText_Digit_10000, + sDebugText_Digit_100000, + sDebugText_Digit_1000000, + sDebugText_Digit_10000000 }; + static const s32 sPowersOfTen[] = { 1, @@ -580,45 +614,50 @@ static const s32 sPowersOfTen[] = // List Menu Items static const struct ListMenuItem sDebugMenu_Items_Main[] = { - [DEBUG_MENU_ITEM_UTILITIES] = {sDebugText_Utilities, DEBUG_MENU_ITEM_UTILITIES}, - [DEBUG_MENU_ITEM_SCRIPTS] = {sDebugText_Scripts, DEBUG_MENU_ITEM_SCRIPTS}, - [DEBUG_MENU_ITEM_FLAGVAR] = {sDebugText_FlagsVars, DEBUG_MENU_ITEM_FLAGVAR}, - //[DEBUG_MENU_ITEM_BATTLE] = {sDebugText_Battle, DEBUG_MENU_ITEM_BATTLE}, - [DEBUG_MENU_ITEM_GIVE] = {sDebugText_Give, DEBUG_MENU_ITEM_GIVE}, - [DEBUG_MENU_ITEM_FILL] = {sDebugText_Fill, DEBUG_MENU_ITEM_FILL}, - [DEBUG_MENU_ITEM_SOUND] = {sDebugText_Sound, DEBUG_MENU_ITEM_SOUND}, - [DEBUG_MENU_ITEM_ACCESS_PC] = {sDebugText_AccessPC, DEBUG_MENU_ITEM_ACCESS_PC}, - [DEBUG_MENU_ITEM_CANCEL] = {sDebugText_Cancel, DEBUG_MENU_ITEM_CANCEL} + [DEBUG_MENU_ITEM_UTILITIES] = {sDebugText_Utilities, DEBUG_MENU_ITEM_UTILITIES}, + [DEBUG_MENU_ITEM_SCRIPTS] = {sDebugText_Scripts, DEBUG_MENU_ITEM_SCRIPTS}, + [DEBUG_MENU_ITEM_FLAGVAR] = {sDebugText_FlagsVars, DEBUG_MENU_ITEM_FLAGVAR}, + //[DEBUG_MENU_ITEM_BATTLE] = {sDebugText_Battle, DEBUG_MENU_ITEM_BATTLE}, + [DEBUG_MENU_ITEM_GIVE] = {sDebugText_Give, DEBUG_MENU_ITEM_GIVE}, + [DEBUG_MENU_ITEM_FILL] = {sDebugText_Fill, DEBUG_MENU_ITEM_FILL}, + [DEBUG_MENU_ITEM_SOUND] = {sDebugText_Sound, DEBUG_MENU_ITEM_SOUND}, + [DEBUG_MENU_ITEM_ACCESS_PC] = {sDebugText_AccessPC, DEBUG_MENU_ITEM_ACCESS_PC}, + [DEBUG_MENU_ITEM_CANCEL] = {sDebugText_Cancel, DEBUG_MENU_ITEM_CANCEL} }; + static const struct ListMenuItem sDebugMenu_Items_Utilities[] = { - [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = {sDebugText_Util_HealParty, DEBUG_UTIL_MENU_ITEM_HEAL_PARTY}, - [DEBUG_UTIL_MENU_ITEM_FLY] = {sDebugText_Util_Fly, DEBUG_UTIL_MENU_ITEM_FLY}, - [DEBUG_UTIL_MENU_ITEM_WARP] = {sDebugText_Util_WarpToMap, DEBUG_UTIL_MENU_ITEM_WARP}, - [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = {sDebugText_Util_PoisonMons, DEBUG_UTIL_MENU_ITEM_POISON_MONS}, - [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = {sDebugText_Util_SaveBlockSpace, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK}, - [DEBUG_UTIL_MENU_ITEM_WEATHER] = {sDebugText_Util_Weather, DEBUG_UTIL_MENU_ITEM_WEATHER}, - [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = {sDebugText_Util_CheckWallClock, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK}, - [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = {sDebugText_Util_SetWallClock, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK}, - [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = {sDebugText_Util_WatchCredits, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = {sDebugText_Util_Trainer_Name, DEBUG_UTIL_MENU_ITEM_TRAINER_NAME}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = {sDebugText_Util_Trainer_Gender, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = {sDebugText_Util_Trainer_Id, DEBUG_UTIL_MENU_ITEM_TRAINER_ID}, - [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, - [DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT}, - [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = {sDebugText_Util_HatchAnEgg, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG}, + [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = {sDebugText_Util_HealParty, DEBUG_UTIL_MENU_ITEM_HEAL_PARTY}, + [DEBUG_UTIL_MENU_ITEM_FLY] = {sDebugText_Util_FlyToMap, DEBUG_UTIL_MENU_ITEM_FLY}, + [DEBUG_UTIL_MENU_ITEM_WARP] = {sDebugText_Util_WarpToMap, DEBUG_UTIL_MENU_ITEM_WARP}, + [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = {sDebugText_Util_PoisonParty, DEBUG_UTIL_MENU_ITEM_POISON_MONS}, + [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = {sDebugText_Util_SaveBlockSpace, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK}, + [DEBUG_UTIL_MENU_ITEM_ROM_SPACE] = {sDebugText_Util_ROMSpace, DEBUG_UTIL_MENU_ITEM_ROM_SPACE}, + [DEBUG_UTIL_MENU_ITEM_WEATHER] = {sDebugText_Util_Weather, DEBUG_UTIL_MENU_ITEM_WEATHER}, + [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = {sDebugText_Util_CheckWallClock, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK}, + [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = {sDebugText_Util_SetWallClock, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK}, + [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = {sDebugText_Util_WatchCredits, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_NAME] = {sDebugText_Util_Player_Name, DEBUG_UTIL_MENU_ITEM_PLAYER_NAME}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER] = {sDebugText_Util_Player_Gender, DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_ID] = {sDebugText_Util_Player_Id, DEBUG_UTIL_MENU_ITEM_PLAYER_ID}, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, + [DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT}, + [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = {sDebugText_Util_HatchAnEgg, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG}, + [DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = {sDebugText_Util_ExpansionVersion,DEBUG_UTIL_MENU_ITEM_EXPANSION_VER}, }; + static const struct ListMenuItem sDebugMenu_Items_Scripts[] = { - [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = {sDebugText_Util_Script_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_1}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_2] = {sDebugText_Util_Script_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_2}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_3] = {sDebugText_Util_Script_3, DEBUG_UTIL_MENU_ITEM_SCRIPT_3}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_4] = {sDebugText_Util_Script_4, DEBUG_UTIL_MENU_ITEM_SCRIPT_4}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_5] = {sDebugText_Util_Script_5, DEBUG_UTIL_MENU_ITEM_SCRIPT_5}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_6] = {sDebugText_Util_Script_6, DEBUG_UTIL_MENU_ITEM_SCRIPT_6}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = {sDebugText_Util_Script_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_7}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = {sDebugText_Util_Script_8, DEBUG_UTIL_MENU_ITEM_SCRIPT_8}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = {sDebugText_Util_Script_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_1}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_2] = {sDebugText_Util_Script_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_2}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_3] = {sDebugText_Util_Script_3, DEBUG_UTIL_MENU_ITEM_SCRIPT_3}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_4] = {sDebugText_Util_Script_4, DEBUG_UTIL_MENU_ITEM_SCRIPT_4}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_5] = {sDebugText_Util_Script_5, DEBUG_UTIL_MENU_ITEM_SCRIPT_5}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_6] = {sDebugText_Util_Script_6, DEBUG_UTIL_MENU_ITEM_SCRIPT_6}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = {sDebugText_Util_Script_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_7}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = {sDebugText_Util_Script_8, DEBUG_UTIL_MENU_ITEM_SCRIPT_8}, }; + static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = { [DEBUG_FLAGVAR_MENU_ITEM_FLAGS] = {sDebugText_FlagsVars_Flags, DEBUG_FLAGVAR_MENU_ITEM_FLAGS}, @@ -628,6 +667,7 @@ static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX] = {sDebugText_FlagsVars_SwitchDex, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX] = {sDebugText_FlagsVars_SwitchNationalDex, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV] = {sDebugText_FlagsVars_SwitchPokeNav, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV}, + [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL] = {sDebugText_FlagsVars_SwitchMatchCall, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES] = {sDebugText_FlagsVars_RunningShoes, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS] = {sDebugText_FlagsVars_ToggleFlyFlags, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL] = {sDebugText_FlagsVars_ToggleAllBadges, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL}, @@ -638,6 +678,7 @@ static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE] = {sDebugText_FlagsVars_SwitchBagUse, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING] = {sDebugText_FlagsVars_SwitchCatching, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_0[] = { [DEBUG_BATTLE_0_MENU_ITEM_WILD] = {sDebugText_Battle_0_Wild, DEBUG_BATTLE_0_MENU_ITEM_WILD}, @@ -646,6 +687,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_0[] = [DEBUG_BATTLE_0_MENU_ITEM_DOUBLE] = {sDebugText_Battle_0_Double, DEBUG_BATTLE_0_MENU_ITEM_DOUBLE}, [DEBUG_BATTLE_0_MENU_ITEM_MULTI] = {sDebugText_Battle_0_Mulit, DEBUG_BATTLE_0_MENU_ITEM_MULTI}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_1[] = { [DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00] = {sDebugText_Battle_1_AIFlag_00, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00}, @@ -668,6 +710,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_1[] = [DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17] = {sDebugText_Battle_1_AIFlag_17, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17}, [DEBUG_BATTLE_1_MENU_ITEM_CONTINUE] = {sDebugText_Continue, DEBUG_BATTLE_1_MENU_ITEM_CONTINUE}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_2[] = { [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0] = {sDebugText_Battle_2_Terrain_0, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0}, @@ -681,6 +724,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_2[] = [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8] = {sDebugText_Battle_2_Terrain_8, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8}, [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9] = {sDebugText_Battle_2_Terrain_9, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9}, }; + static const struct ListMenuItem sDebugMenu_Items_Give[] = { [DEBUG_GIVE_MENU_ITEM_ITEM_X] = {sDebugText_Give_GiveItem, DEBUG_GIVE_MENU_ITEM_ITEM_X}, @@ -692,6 +736,7 @@ static const struct ListMenuItem sDebugMenu_Items_Give[] = [DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS] = {sDebugText_Give_BattlePoints, DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS}, [DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG] = {sDebugText_Give_DaycareEgg, DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG}, }; + static const struct ListMenuItem sDebugMenu_Items_Fill[] = { [DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST] = {sDebugText_Fill_Pc_Fast, DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST}, @@ -703,44 +748,48 @@ static const struct ListMenuItem sDebugMenu_Items_Fill[] = [DEBUG_FILL_MENU_ITEM_POCKET_BERRIES] = {sDebugText_Fill_PocketBerries, DEBUG_FILL_MENU_ITEM_POCKET_BERRIES}, [DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS] = {sDebugText_Fill_PocketKeyItems, DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS}, }; + static const struct ListMenuItem sDebugMenu_Items_Sound[] = { - [DEBUG_SOUND_MENU_ITEM_SE] = {sDebugText_Sound_SE, DEBUG_SOUND_MENU_ITEM_SE}, - [DEBUG_SOUND_MENU_ITEM_MUS] = {sDebugText_Sound_MUS, DEBUG_SOUND_MENU_ITEM_MUS}, + [DEBUG_SOUND_MENU_ITEM_SE] = {sDebugText_Sound_SFX, DEBUG_SOUND_MENU_ITEM_SE}, + [DEBUG_SOUND_MENU_ITEM_MUS] = {sDebugText_Sound_Music, DEBUG_SOUND_MENU_ITEM_MUS}, }; // ******************************* // Menu Actions static void (*const sDebugMenu_Actions_Main[])(u8) = { - [DEBUG_MENU_ITEM_UTILITIES] = DebugAction_OpenUtilitiesMenu, - [DEBUG_MENU_ITEM_SCRIPTS] = DebugAction_OpenScriptsMenu, - [DEBUG_MENU_ITEM_FLAGVAR] = DebugAction_OpenFlagsVarsMenu, - //[DEBUG_MENU_ITEM_BATTLE] = DebugAction_OpenBattleMenu, - [DEBUG_MENU_ITEM_GIVE] = DebugAction_OpenGiveMenu, - [DEBUG_MENU_ITEM_FILL] = DebugAction_OpenFillMenu, - [DEBUG_MENU_ITEM_SOUND] = DebugAction_OpenSoundMenu, - [DEBUG_MENU_ITEM_ACCESS_PC] = DebugAction_AccessPC, - [DEBUG_MENU_ITEM_CANCEL] = DebugAction_Cancel + [DEBUG_MENU_ITEM_UTILITIES] = DebugAction_OpenUtilitiesMenu, + [DEBUG_MENU_ITEM_SCRIPTS] = DebugAction_OpenScriptsMenu, + [DEBUG_MENU_ITEM_FLAGVAR] = DebugAction_OpenFlagsVarsMenu, + //[DEBUG_MENU_ITEM_BATTLE] = DebugAction_OpenBattleMenu, + [DEBUG_MENU_ITEM_GIVE] = DebugAction_OpenGiveMenu, + [DEBUG_MENU_ITEM_FILL] = DebugAction_OpenFillMenu, + [DEBUG_MENU_ITEM_SOUND] = DebugAction_OpenSoundMenu, + [DEBUG_MENU_ITEM_ACCESS_PC] = DebugAction_AccessPC, + [DEBUG_MENU_ITEM_CANCEL] = DebugAction_Cancel }; static void (*const sDebugMenu_Actions_Utilities[])(u8) = { - [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = DebugAction_Util_HealParty, - [DEBUG_UTIL_MENU_ITEM_FLY] = DebugAction_Util_Fly, - [DEBUG_UTIL_MENU_ITEM_WARP] = DebugAction_Util_Warp_Warp, - [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = DebugAction_Util_PoisonMons, - [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = DebugAction_Util_CheckSaveBlock, - [DEBUG_UTIL_MENU_ITEM_WEATHER] = DebugAction_Util_Weather, - [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = DebugAction_Util_CheckWallClock, - [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = DebugAction_Util_SetWallClock, - [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = DebugAction_Util_WatchCredits, - [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = DebugAction_Util_Trainer_Name, - [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = DebugAction_Util_Trainer_Gender, - [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = DebugAction_Util_Trainer_Id, - [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = DebugAction_Util_Clear_Boxes, - [DEBUG_UTIL_MENU_ITEM_CHEAT] = DebugAction_Util_CheatStart, - [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = DebugAction_Util_HatchAnEgg, + [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = DebugAction_Util_HealParty, + [DEBUG_UTIL_MENU_ITEM_FLY] = DebugAction_Util_Fly, + [DEBUG_UTIL_MENU_ITEM_WARP] = DebugAction_Util_Warp_Warp, + [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = DebugAction_Util_PoisonMons, + [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = DebugAction_Util_CheckSaveBlock, + [DEBUG_UTIL_MENU_ITEM_ROM_SPACE] = DebugAction_Util_CheckROMSpace, + [DEBUG_UTIL_MENU_ITEM_WEATHER] = DebugAction_Util_Weather, + [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = DebugAction_Util_CheckWallClock, + [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = DebugAction_Util_SetWallClock, + [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = DebugAction_Util_WatchCredits, + [DEBUG_UTIL_MENU_ITEM_PLAYER_NAME] = DebugAction_Util_Player_Name, + [DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER] = DebugAction_Util_Player_Gender, + [DEBUG_UTIL_MENU_ITEM_PLAYER_ID] = DebugAction_Util_Player_Id, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = DebugAction_Util_Clear_Boxes, + [DEBUG_UTIL_MENU_ITEM_CHEAT] = DebugAction_Util_CheatStart, + [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = DebugAction_Util_HatchAnEgg, + [DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = DebugAction_Util_ExpansionVersion, }; + static void (*const sDebugMenu_Actions_Scripts[])(u8) = { [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = DebugAction_Util_Script_1, @@ -752,6 +801,7 @@ static void (*const sDebugMenu_Actions_Scripts[])(u8) = [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = DebugAction_Util_Script_7, [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = DebugAction_Util_Script_8, }; + static void (*const sDebugMenu_Actions_Flags[])(u8) = { [DEBUG_FLAGVAR_MENU_ITEM_FLAGS] = DebugAction_FlagsVars_Flags, @@ -761,6 +811,7 @@ static void (*const sDebugMenu_Actions_Flags[])(u8) = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX] = DebugAction_FlagsVars_SwitchDex, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX] = DebugAction_FlagsVars_SwitchNatDex, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV] = DebugAction_FlagsVars_SwitchPokeNav, + [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL] = DebugAction_FlagsVars_SwitchMatchCall, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES] = DebugAction_FlagsVars_RunningShoes, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS] = DebugAction_FlagsVars_ToggleFlyFlags, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL] = DebugAction_FlagsVars_ToggleBadgeFlags, @@ -782,6 +833,7 @@ static void (*const sDebugMenu_Actions_Give[])(u8) = [DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS] = DebugAction_Give_MaxBattlePoints, [DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG] = DebugAction_Give_DayCareEgg, }; + static void (*const sDebugMenu_Actions_Fill[])(u8) = { [DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST] = DebugAction_Fill_PCBoxes_Fast, @@ -800,7 +852,6 @@ static void (*const sDebugMenu_Actions_Sound[])(u8) = [DEBUG_SOUND_MENU_ITEM_MUS] = DebugAction_Sound_MUS, }; - // ******************************* // Windows static const struct WindowTemplate sDebugMenuWindowTemplateMain = @@ -813,6 +864,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateMain = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateExtra = { .bg = 0, @@ -823,6 +875,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateExtra = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateWeather = { .bg = 0, @@ -833,6 +886,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateWeather = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateSound = { .bg = 0, @@ -843,6 +897,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateSound = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateFlagsVars = { .bg = 0, @@ -862,54 +917,63 @@ static const struct ListMenuTemplate sDebugMenu_ListTemplate_Main = .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Main), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Utilities = { .items = sDebugMenu_Items_Utilities, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Utilities), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Scripts = { .items = sDebugMenu_Items_Scripts, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Scripts), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_FlagsVars = { .items = sDebugMenu_Items_FlagsVars, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_FlagsVars), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_0 = { .items = sDebugMenu_Items_Battle_0, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_0), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_1 = { .items = sDebugMenu_Items_Battle_1, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_1), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_2 = { .items = sDebugMenu_Items_Battle_2, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_2), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Give = { .items = sDebugMenu_Items_Give, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Give), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Fill = { .items = sDebugMenu_Items_Fill, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Fill), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Sound = { .items = sDebugMenu_Items_Sound, @@ -928,10 +992,18 @@ void Debug_ShowMainMenu(void) Debug_ShowMenu(DebugTask_HandleMenuInput_Main, sDebugMenu_ListTemplate_Main); } + static void Debug_ReShowMainMenu(void) { Debug_ShowMenu(DebugTask_HandleMenuInput_Main, sDebugMenu_ListTemplate_Main); } + +#define tMenuTaskId data[0] +#define tWindowId data[1] +#define tSubWindowId data[2] +#define tInput data[3] +#define tDigit data[4] + static void Debug_ShowMenu(void (*HandleInput)(u8), struct ListMenuTemplate LMtemplate) { struct ListMenuTemplate menuTemplate; @@ -959,43 +1031,45 @@ static void Debug_ShowMenu(void (*HandleInput)(u8), struct ListMenuTemplate LMte menuTemplate.lettersSpacing = 1; menuTemplate.itemVerticalPadding = 0; menuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL; - menuTemplate.fontId = 1; + menuTemplate.fontId = DEBUG_MENU_FONT; menuTemplate.cursorKind = 0; menuTaskId = ListMenuInit(&menuTemplate, 0, 0); // create input handler task inputTaskId = CreateTask(HandleInput, 3); - gTasks[inputTaskId].data[0] = menuTaskId; - gTasks[inputTaskId].data[1] = windowId; - gTasks[inputTaskId].data[2] = 0; + gTasks[inputTaskId].tMenuTaskId = menuTaskId; + gTasks[inputTaskId].tWindowId = windowId; + gTasks[inputTaskId].tSubWindowId = 0; Debug_RefreshListMenu(inputTaskId); - //Debug_ShowMenuDynamic(inputTaskId); // draw everything - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } + static void Debug_DestroyMenu(u8 taskId) { - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); - RemoveWindow(gTasks[taskId].data[1]); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); + RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); } + static void Debug_DestroyMenu_Full(u8 taskId) { - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tSubWindowId != 0) { - ClearStdWindowAndFrame(gTasks[taskId].data[2], FALSE); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, FALSE); DebugAction_DestroyExtraWindow(taskId); } - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); UnfreezeObjectEvents(); Free(sDebugMenuListData); Free(sDebugBattleData); } + static void Debug_DestroyMenu_Full_Script(u8 taskId, const u8 *script) { Debug_DestroyMenu_Full(taskId); @@ -1003,20 +1077,22 @@ static void Debug_DestroyMenu_Full_Script(u8 taskId, const u8 *script) FreezeObjectEvents(); ScriptContext_SetupScript(script); } + static void DebugAction_Cancel(u8 taskId) { Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_DestroyExtraWindow(u8 taskId) { - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); - ClearStdWindowAndFrame(gTasks[taskId].data[2], TRUE); - RemoveWindow(gTasks[taskId].data[2]); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, TRUE); + RemoveWindow(gTasks[taskId].tSubWindowId); - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); DestroyTask(taskId); ScriptContext_Enable(); UnfreezeObjectEvents(); @@ -1037,6 +1113,9 @@ static u8 Debug_CheckToggleFlags(u8 id) case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV: result = FlagGet(FLAG_SYS_POKENAV_GET); break; + case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL: + result = FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV) && FlagGet(FLAG_HAS_MATCH_CALL); + break; case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES: result = FlagGet(FLAG_SYS_B_DASH); break; @@ -1122,10 +1201,8 @@ static void Debug_RefreshListMenu(u8 taskId) u16 i; const u8 sColor_Red[] = _("{COLOR RED}"); const u8 sColor_Green[] = _("{COLOR GREEN}"); - u8 listTaskId = gTasks[taskId].data[0]; - struct ListMenu *list = (void*) gTasks[listTaskId].data; - u8 totalItems, flagResult; - u8 const * name; + u8 totalItems = 0, flagResult = 0; + u8 const *name = NULL; if (sDebugMenuListData->listId == 0) { @@ -1179,7 +1256,7 @@ static void Debug_RefreshListMenu(u8 taskId) { flagResult = sDebugBattleData->aiFlags[i]; if (i == totalItems - 1) - flagResult == 0xFF; + flagResult = 0xFF; name = sDebugMenu_Items_Battle_1[i].name; } @@ -1209,7 +1286,7 @@ static void Debug_RefreshListMenu(u8 taskId) gMultiuseListMenuTemplate.items = sDebugMenuListData->listItems; gMultiuseListMenuTemplate.totalItems = totalItems; gMultiuseListMenuTemplate.maxShowed = DEBUG_MENU_HEIGHT_MAIN; - gMultiuseListMenuTemplate.windowId = gTasks[taskId].data[1]; + gMultiuseListMenuTemplate.windowId = gTasks[taskId].tWindowId; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 8; gMultiuseListMenuTemplate.cursor_X = 0; @@ -1223,15 +1300,16 @@ static void Debug_RefreshListMenu(u8 taskId) gMultiuseListMenuTemplate.fontId = 1; gMultiuseListMenuTemplate.cursorKind = 0; } + static void Debug_RedrawListMenu(u8 taskId) { - u8 listTaskId = gTasks[taskId].data[0]; + u8 listTaskId = gTasks[taskId].tMenuTaskId; u16 scrollOffset, selectedRow; ListMenuGetScrollAndRow(listTaskId, &scrollOffset, &selectedRow); - DestroyListMenuTask(gTasks[taskId].data[0], &scrollOffset, &selectedRow); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, &scrollOffset, &selectedRow); Debug_RefreshListMenu(taskId); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, scrollOffset, selectedRow); + gTasks[taskId].tMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, scrollOffset, selectedRow); } @@ -1240,7 +1318,7 @@ static void Debug_RedrawListMenu(u8 taskId) static void DebugTask_HandleMenuInput_Main(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1255,10 +1333,11 @@ static void DebugTask_HandleMenuInput_Main(u8 taskId) ScriptContext_Enable(); } } + static void DebugTask_HandleMenuInput_Utilities(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1273,10 +1352,11 @@ static void DebugTask_HandleMenuInput_Utilities(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Scripts(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1291,10 +1371,11 @@ static void DebugTask_HandleMenuInput_Scripts(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_FlagsVars(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1304,10 +1385,10 @@ static void DebugTask_HandleMenuInput_FlagsVars(u8 taskId) func(taskId); // Remove TRUE/FALSE window for functions that haven't been assigned flags - if (gTasks[taskId].data[3] == 0xFF) + if (gTasks[taskId].tInput == 0xFF) { - ClearStdWindowAndFrame(gTasks[taskId].data[2], TRUE); - RemoveWindow(gTasks[taskId].data[2]); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, TRUE); + RemoveWindow(gTasks[taskId].tSubWindowId); Free(sDebugMenuListData); } else @@ -1345,16 +1426,16 @@ static void DebugTask_HandleBattleMenuReDraw(u8 taskId) break; } } + static void DebugTask_HandleMenuInput_Battle(u8 taskId) { - void (*func)(u8); - u8 listTaskId = gTasks[taskId].data[0]; - u32 input = ListMenu_ProcessInput(listTaskId); u16 idx; + u8 listTaskId = gTasks[taskId].tMenuTaskId; + ListMenu_ProcessInput(listTaskId); ListMenuGetCurrentItemArrayId(listTaskId, &idx); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -1402,7 +1483,7 @@ static void DebugTask_HandleMenuInput_Battle(u8 taskId) break; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { switch (sDebugBattleData->submenu) { @@ -1478,7 +1559,7 @@ static void Debug_InitializeBattle(u8 taskId) static void DebugTask_HandleMenuInput_Give(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1493,28 +1574,30 @@ static void DebugTask_HandleMenuInput_Give(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Fill(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if ((func = sDebugMenu_Actions_Fill[input]) != NULL) func(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); Debug_DestroyMenu(taskId); Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Sound(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1537,11 +1620,13 @@ static void DebugAction_OpenUtilitiesMenu(u8 taskId) Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Utilities, sDebugMenu_ListTemplate_Utilities); } + static void DebugAction_OpenScriptsMenu(u8 taskId) { Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Scripts, sDebugMenu_ListTemplate_Scripts); } + static void DebugAction_OpenFlagsVarsMenu(u8 taskId) { Debug_DestroyMenu(taskId); @@ -1549,23 +1634,19 @@ static void DebugAction_OpenFlagsVarsMenu(u8 taskId) Debug_ShowMenu(DebugTask_HandleMenuInput_FlagsVars, gMultiuseListMenuTemplate); } -static void DebugAction_OpenBattleMenu(u8 taskId) -{ - Debug_DestroyMenu(taskId); - sDebugMenuListData->listId = 1; - Debug_ShowMenu(DebugTask_HandleMenuInput_Battle, sDebugMenu_ListTemplate_Battle_0); -} static void DebugAction_OpenGiveMenu(u8 taskId) { Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Give, sDebugMenu_ListTemplate_Give); } + static void DebugAction_OpenFillMenu(u8 taskId) { Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Fill, sDebugMenu_ListTemplate_Fill); } + static void DebugAction_OpenSoundMenu(u8 taskId) { Debug_DestroyMenu(taskId); @@ -1581,59 +1662,49 @@ static void DebugAction_Util_HealParty(u8 taskId) ScriptContext_Enable(); Debug_DestroyMenu_Full(taskId); } + static void DebugAction_Util_Fly(u8 taskId) { - FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); - FlagSet(FLAG_VISITED_OLDALE_TOWN); - FlagSet(FLAG_VISITED_DEWFORD_TOWN); - FlagSet(FLAG_VISITED_LAVARIDGE_TOWN); - FlagSet(FLAG_VISITED_FALLARBOR_TOWN); - FlagSet(FLAG_VISITED_VERDANTURF_TOWN); - FlagSet(FLAG_VISITED_PACIFIDLOG_TOWN); - FlagSet(FLAG_VISITED_PETALBURG_CITY); - FlagSet(FLAG_VISITED_SLATEPORT_CITY); - FlagSet(FLAG_VISITED_MAUVILLE_CITY); - FlagSet(FLAG_VISITED_RUSTBORO_CITY); - FlagSet(FLAG_VISITED_FORTREE_CITY); - FlagSet(FLAG_VISITED_LILYCOVE_CITY); - FlagSet(FLAG_VISITED_MOSSDEEP_CITY); - FlagSet(FLAG_VISITED_SOOTOPOLIS_CITY); - FlagSet(FLAG_VISITED_EVER_GRANDE_CITY); - FlagSet(FLAG_LANDMARK_POKEMON_LEAGUE); - FlagSet(FLAG_LANDMARK_BATTLE_FRONTIER); Debug_DestroyMenu_Full(taskId); SetMainCallback2(CB2_OpenFlyMap); } +#define tMapGroup data[5] +#define tMapNum data[6] +#define tWarp data[7] + +#define LAST_MAP_GROUP (MAP_GROUPS_COUNT - 1) + static void DebugAction_Util_Warp_Warp(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUPS_COUNT-1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar2, LAST_MAP_GROUP, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); StringCopy(gStringVar3, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMapGroup); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectMapGroup; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 0; //Current Flag - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Map Group - gTasks[taskId].data[6] = 0; //Map - gTasks[taskId].data[7] = 0; //warp + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tMapGroup = 0; + gTasks[taskId].tMapNum = 0; + gTasks[taskId].tWarp = 0; } + static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1641,48 +1712,48 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > MAP_GROUPS_COUNT - 1) - gTasks[taskId].data[3] = MAP_GROUPS_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > LAST_MAP_GROUP) + gTasks[taskId].tInput = LAST_MAP_GROUP; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUPS_COUNT - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar2, LAST_MAP_GROUP, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMapGroup); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tMapGroup = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1 >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].tMapGroup, gTasks[taskId].tInput)->regionMapSectionId, 0); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectMap; } @@ -1692,55 +1763,56 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Util_Warp_SelectMap(u8 taskId) { - u8 max_value = MAP_GROUP_COUNT[gTasks[taskId].data[5]]; //maps in the selected map group + u8 max_value = MAP_GROUP_COUNT[gTasks[taskId].tMapGroup]; //maps in the selected map group if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > max_value - 1) - gTasks[taskId].data[3] = max_value - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > max_value - 1) + gTasks[taskId].tInput = max_value - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].tMapGroup, gTasks[taskId].tInput)->regionMapSectionId, 0); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[6] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tMapNum = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectWarp; } else if (JOY_NEW(B_BUTTON)) @@ -1749,6 +1821,7 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Util_Warp_SelectWarp(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1756,29 +1829,28 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId) PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 10) - gTasks[taskId].data[3] = 10; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 10) + gTasks[taskId].tInput = 10; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[7] = gTasks[taskId].data[3]; - //WARP + gTasks[taskId].tWarp = gTasks[taskId].tInput; //If there's no warp with the number available, warp to the center of the map. - SetWarpDestinationToMapWarp(gTasks[taskId].data[5], gTasks[taskId].data[6], gTasks[taskId].data[7]); + SetWarpDestinationToMapWarp(gTasks[taskId].tMapGroup, gTasks[taskId].tMapNum, gTasks[taskId].tWarp); DoWarp(); ResetInitialPlayerAvatarState(); DebugAction_DestroyExtraWindow(taskId); @@ -1790,6 +1862,10 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId) } } +#undef tMapGroup +#undef tMapNum +#undef tWarp + static void DebugAction_Util_PoisonMons(u8 taskId) { int i; @@ -1812,6 +1888,7 @@ void CheckSaveBlock1Size(struct ScriptContext *ctx) u32 maxSb1Size = SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLOCK1_END - SECTOR_ID_SAVEBLOCK1_START + 1); ConvertIntToDecimalStringN(gStringVar1, currSb1Size, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar2, maxSb1Size, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, maxSb1Size - currSb1Size, STR_CONV_MODE_LEFT_ALIGN, 6); } void CheckSaveBlock2Size(struct ScriptContext *ctx) @@ -1820,6 +1897,7 @@ void CheckSaveBlock2Size(struct ScriptContext *ctx) u32 maxSb2Size = SECTOR_DATA_SIZE; ConvertIntToDecimalStringN(gStringVar1, currSb2Size, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar2, maxSb2Size, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, maxSb2Size - currSb2Size, STR_CONV_MODE_LEFT_ALIGN, 6); } void CheckPokemonStorageSize(struct ScriptContext *ctx) @@ -1828,13 +1906,67 @@ void CheckPokemonStorageSize(struct ScriptContext *ctx) u32 maxPkmnStorageSize = SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1); ConvertIntToDecimalStringN(gStringVar1, currPkmnStorageSize, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar2, maxPkmnStorageSize, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, maxPkmnStorageSize - currPkmnStorageSize, STR_CONV_MODE_LEFT_ALIGN, 6); } static void DebugAction_Util_CheckSaveBlock(u8 taskId) +{ + Debug_DestroyMenu_Full_Script(taskId, Debug_CheckSaveBlock); +} + +enum RoundMode +{ + ROUND_CEILING, + ROUND_NEAREST, + ROUND_FLOOR, +}; + +static u8 *ConvertQ22_10ToDecimalString(u8 *string, u32 q22_10, u32 decimalDigits, enum RoundMode roundMode) +{ + string = ConvertIntToDecimalStringN(string, q22_10 >> 10, STR_CONV_MODE_LEFT_ALIGN, 10); + + if (decimalDigits == 0) + return string; + + *string++ = CHAR_PERIOD; + + q22_10 &= (1 << 10) - 1; + while (decimalDigits-- > 1) + { + q22_10 *= 10; + *string++ = CHAR_0 + (q22_10 >> 10); + q22_10 &= (1 << 10) - 1; + } + + q22_10 *= 10; + switch (roundMode) + { + case ROUND_CEILING: q22_10 += (1 << 10) - 1; break; + case ROUND_NEAREST: q22_10 += 1 << (10 - 1); break; + case ROUND_FLOOR: break; + } + *string++ = CHAR_0 + (q22_10 >> 10); + + *string++ = EOS; + + return string; +} + +void CheckROMSize(struct ScriptContext *ctx) +{ + extern u8 __rom_end[]; + u32 currROMSizeB = __rom_end - (const u8 *)ROM_START; + u32 currROMSizeKB = (currROMSizeB + 1023) / 1024; + u32 currROMFreeKB = ((const u8 *)ROM_END - __rom_end) / 1024; + ConvertQ22_10ToDecimalString(gStringVar1, currROMSizeKB, 2, ROUND_CEILING); + ConvertQ22_10ToDecimalString(gStringVar2, currROMFreeKB, 2, ROUND_FLOOR); +} + +static void DebugAction_Util_CheckROMSpace(u8 taskId) { Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_CheckSaveBlock); + ScriptContext_SetupScript(Debug_CheckROMSpace); } static const u8 sWeatherNames[22][24] = { @@ -1857,33 +1989,34 @@ static const u8 sWeatherNames[22][24] = { [WEATHER_ROUTE119_CYCLE] = _("ROUTE119 CYCLE"), [WEATHER_ROUTE123_CYCLE] = _("ROUTE123 CYCLE"), }; -static const u8 sText_WeatherNotDefined[] = _("NOT DEFINED!!!"); +static const u8 sDebugText_WeatherNotDefined[] = _("NOT DEFINED!!!"); static void DebugAction_Util_Weather(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateWeather); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); //Display initial ID StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar1, sWeatherNames[0], CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Weather_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 0; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; } + static void DebugAction_Util_Weather_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1892,44 +2025,44 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > WEATHER_ROUTE123_CYCLE) - gTasks[taskId].data[3] = WEATHER_ROUTE123_CYCLE; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > WEATHER_ROUTE123_CYCLE) + gTasks[taskId].tInput = WEATHER_ROUTE123_CYCLE; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < WEATHER_NONE) - gTasks[taskId].data[3] = WEATHER_NONE; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < WEATHER_NONE) + gTasks[taskId].tInput = WEATHER_NONE; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); - if (gTasks[taskId].data[3] <= 15 || gTasks[taskId].data[3] >= 20) - StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].data[3]], CHAR_SPACE, 30); + if (gTasks[taskId].tInput <= 15 || gTasks[taskId].tInput >= 20) + StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].tInput], CHAR_SPACE, 30); else - StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); + StringCopyPadded(gStringVar1, sDebugText_WeatherNotDefined, CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - if (gTasks[taskId].data[3] <= 14 || gTasks[taskId].data[3] >= 20) + if (gTasks[taskId].tInput <= 14 || gTasks[taskId].tInput >= 20) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; + gTasks[taskId].data[5] = gTasks[taskId].tInput; SetWeather(gTasks[taskId].data[5]); } } @@ -1944,85 +2077,126 @@ static void DebugAction_Util_CheckWallClock(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, PlayersHouse_2F_EventScript_CheckWallClock); } + static void DebugAction_Util_SetWallClock(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, PlayersHouse_2F_EventScript_SetWallClock); } + static void DebugAction_Util_WatchCredits(u8 taskId) { - struct Task* task = &gTasks[taskId]; Debug_DestroyMenu_Full(taskId); SetMainCallback2(CB2_StartCreditsSequence); } -static void DebugAction_Util_Trainer_Name(u8 taskId) + +static void DebugAction_Util_Player_Name(u8 taskId) { - NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20); - DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldContinueScript); + DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldContinueScript); } -static void DebugAction_Util_Trainer_Gender(u8 taskId) + +static void DebugAction_Util_Player_Gender(u8 taskId) { - if (gSaveBlock2Ptr->playerGender == 0) // 0 Male, 1 Female - gSaveBlock2Ptr->playerGender = 1; + if (gSaveBlock2Ptr->playerGender == MALE) + gSaveBlock2Ptr->playerGender = FEMALE; else - gSaveBlock2Ptr->playerGender = 0; + gSaveBlock2Ptr->playerGender = MALE; Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } -static void DebugAction_Util_Trainer_Id(u8 taskId) + +static void DebugAction_Util_Player_Id(u8 taskId) { u32 trainerId = ((Random() << 16) | Random()); SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Util_Clear_Boxes(u8 taskId) { ResetPokemonStorageSystem(); Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Util_CheatStart(u8 taskId) { + if (!FlagGet(FLAG_SYS_CLOCK_SET)) + RtcInitLocalTimeOffset(0, 0); + + InitTimeBasedEvents(); Debug_DestroyMenu_Full_Script(taskId, Debug_CheatStart); } + static void DebugAction_Util_HatchAnEgg(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, Debug_HatchAnEgg); } +static void DebugAction_Util_ExpansionVersion(u8 taskId) +{ + Debug_DestroyMenu_Full(taskId); + LockPlayerFieldControls(); + ScriptContext_SetupScript(Debug_ShowExpansionVersion); +} + +void BufferExpansionVersion(struct ScriptContext *ctx) +{ + static const u8 sText_Released[] = _("\nRelease Build"); + static const u8 sText_Unreleased[] = _("\nDevelopment Build"); + u8 *string = gStringVar1; + *string++ = CHAR_v; + string = ConvertIntToDecimalStringN(string, EXPANSION_VERSION_MAJOR, STR_CONV_MODE_LEFT_ALIGN, 3); + *string++ = CHAR_PERIOD; + string = ConvertIntToDecimalStringN(string, EXPANSION_VERSION_MINOR, STR_CONV_MODE_LEFT_ALIGN, 3); + *string++ = CHAR_PERIOD; + string = ConvertIntToDecimalStringN(string, EXPANSION_VERSION_PATCH, STR_CONV_MODE_LEFT_ALIGN, 3); + if (EXPANSION_TAGGED_RELEASE) + string = StringCopy(string, sText_Released); + else + string = StringCopy(string, sText_Unreleased); +} + // ******************************* // Actions Scripts static void DebugAction_Util_Script_1(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_1); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_1); } + static void DebugAction_Util_Script_2(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_2); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_2); } + static void DebugAction_Util_Script_3(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_3); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_3); } + static void DebugAction_Util_Script_4(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_4); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_4); } + static void DebugAction_Util_Script_5(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_5); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_5); } + static void DebugAction_Util_Script_6(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_6); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_6); } + static void DebugAction_Util_Script_7(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_7); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_7); } + static void DebugAction_Util_Script_8(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_8); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_8); } // ******************************* @@ -2031,17 +2205,17 @@ static void DebugAction_FlagsVars_Flags(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial Flag + // Display initial flag ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); ConvertIntToHexStringN(gStringVar2, 1, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_FlagHex); @@ -2051,17 +2225,20 @@ static void DebugAction_FlagsVars_Flags(u8 taskId) StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringCopy(gStringVar3, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_FlagsSelect; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = FLAG_TEMP_1; //Current Flag - gTasks[taskId].data[4] = 0; //Digit Selected + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = FLAG_TEMP_1; + gTasks[taskId].tDigit = 0; } + static void DebugAction_FlagsVars_FlagsSelect(u8 taskId) { if (JOY_NEW(A_BUTTON)) - FlagToggle(gTasks[taskId].data[3]); + { + FlagToggle(gTasks[taskId].tInput); + } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); @@ -2072,68 +2249,64 @@ static void DebugAction_FlagsVars_FlagsSelect(u8 taskId) if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= FLAGS_COUNT){ - gTasks[taskId].data[3] = FLAGS_COUNT - 1; - } + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= FLAGS_COUNT) + gTasks[taskId].tInput = FLAGS_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1){ - gTasks[taskId].data[3] = 1; - } + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { PlaySE(SE_SELECT); - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - { - gTasks[taskId].data[4] = 0; - } + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { PlaySE(SE_SELECT); - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > DEBUG_NUMBER_DIGITS_FLAGS - 1) - { - gTasks[taskId].data[4] = DEBUG_NUMBER_DIGITS_FLAGS - 1; - } + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > DEBUG_NUMBER_DIGITS_FLAGS - 1) + gTasks[taskId].tDigit = DEBUG_NUMBER_DIGITS_FLAGS - 1; } if (JOY_NEW(DPAD_ANY) || JOY_NEW(A_BUTTON)) { - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_FlagHex); - if (FlagGet(gTasks[taskId].data[3]) == TRUE) + if (FlagGet(gTasks[taskId].tInput) == TRUE) StringCopyPadded(gStringVar2, sDebugText_True, CHAR_SPACE, 15); else StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } } +#define tVarValue data[5] + static void DebugAction_FlagsVars_Vars(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial Variable + // Display initial var ConvertIntToDecimalStringN(gStringVar1, VARS_START, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); ConvertIntToHexStringN(gStringVar2, VARS_START, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); @@ -2141,79 +2314,79 @@ static void DebugAction_FlagsVars_Vars(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar2, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_Select; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = VARS_START; //Current Variable - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Current Variable VALUE + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = VARS_START; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tVarValue = 0; } static void DebugAction_FlagsVars_Select(u8 taskId) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > VARS_END) - gTasks[taskId].data[3] = VARS_END; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > VARS_END) + gTasks[taskId].tInput = VARS_END; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < VARS_START) - gTasks[taskId].data[3] = VARS_START; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < VARS_START) + gTasks[taskId].tInput = VARS_START; } if (JOY_NEW(DPAD_LEFT)) { - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - gTasks[taskId].data[4] = 0; + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > DEBUG_NUMBER_DIGITS_VARIABLES - 1) - gTasks[taskId].data[4] = DEBUG_NUMBER_DIGITS_VARIABLES - 1; + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > DEBUG_NUMBER_DIGITS_VARIABLES - 1) + gTasks[taskId].tDigit = DEBUG_NUMBER_DIGITS_VARIABLES - 1; } if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); - if (VarGetIfExist(gTasks[taskId].data[3]) == 65535) //Current value, if 65535 the value hasnt been set - gTasks[taskId].data[5] = 0; + if (VarGetIfExist(gTasks[taskId].tInput) == 0xFFFF) + gTasks[taskId].tVarValue = 0; else - gTasks[taskId].data[5] = VarGet(gTasks[taskId].data[3]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[5], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + gTasks[taskId].tVarValue = VarGet(gTasks[taskId].tInput); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tVarValue, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); //Combine str's to full window string StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[4] = 0; + gTasks[taskId].tDigit = 0; PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); - if (VarGetIfExist(gTasks[taskId].data[3]) == 65535) //Current value if 65535 the value hasnt been set - gTasks[taskId].data[5] = 0; + if (VarGetIfExist(gTasks[taskId].tInput) == 0xFFFF) + gTasks[taskId].tVarValue = 0; else - gTasks[taskId].data[5] = VarGet(gTasks[taskId].data[3]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[5], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + gTasks[taskId].tVarValue = VarGet(gTasks[taskId].tInput); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tVarValue, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].data[6] = gTasks[taskId].data[5]; //New value selector gTasks[taskId].func = DebugAction_FlagsVars_SetValue; @@ -2225,12 +2398,13 @@ static void DebugAction_FlagsVars_Select(u8 taskId) return; } } + static void DebugAction_FlagsVars_SetValue(u8 taskId) { if (JOY_NEW(DPAD_UP)) { - if (gTasks[taskId].data[6] + sPowersOfTen[gTasks[taskId].data[4]] <= 32000) - gTasks[taskId].data[6] += sPowersOfTen[gTasks[taskId].data[4]]; + if (gTasks[taskId].data[6] + sPowersOfTen[gTasks[taskId].tDigit] <= 32000) + gTasks[taskId].data[6] += sPowersOfTen[gTasks[taskId].tDigit]; else gTasks[taskId].data[6] = 32000 - 1; @@ -2239,32 +2413,27 @@ static void DebugAction_FlagsVars_SetValue(u8 taskId) } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[6] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[6] < 0){ + gTasks[taskId].data[6] -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].data[6] < 0) gTasks[taskId].data[6] = 0; - } } if (JOY_NEW(DPAD_LEFT)) { - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - { - gTasks[taskId].data[4] = 0; - } + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > 4) - { - gTasks[taskId].data[4] = 4; - } + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > 4) + gTasks[taskId].tDigit = 4; } if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - VarSet(gTasks[taskId].data[3], gTasks[taskId].data[6]); + VarSet(gTasks[taskId].tInput, gTasks[taskId].data[6]); } else if (JOY_NEW(B_BUTTON)) { @@ -2277,18 +2446,20 @@ static void DebugAction_FlagsVars_SetValue(u8 taskId) { PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[6], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } } +#undef tVarValue + static void DebugAction_FlagsVars_PokedexFlags_All(u8 taskId) { u16 i; @@ -2300,6 +2471,7 @@ static void DebugAction_FlagsVars_PokedexFlags_All(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId) { int boxId, boxPosition, partyId; @@ -2336,6 +2508,7 @@ static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_FlagsVars_SwitchDex(u8 taskId) { if (FlagGet(FLAG_SYS_POKEDEX_GET)) @@ -2344,17 +2517,21 @@ static void DebugAction_FlagsVars_SwitchDex(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_POKEDEX_GET); } + static void DebugAction_FlagsVars_SwitchNatDex(u8 taskId) { if (IsNationalPokedexEnabled()) { DisableNationalPokedex(); PlaySE(SE_PC_OFF); - }else{ + } + else + { EnableNationalPokedex(); PlaySE(SE_PC_LOGIN); } } + static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId) { if (FlagGet(FLAG_SYS_POKENAV_GET)) @@ -2363,6 +2540,23 @@ static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_POKENAV_GET); } + +static void DebugAction_FlagsVars_SwitchMatchCall(u8 taskId) +{ + if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) + { + PlaySE(SE_PC_OFF); + FlagClear(FLAG_ADDED_MATCH_CALL_TO_POKENAV); + FlagClear(FLAG_HAS_MATCH_CALL); + } + else + { + PlaySE(SE_PC_LOGIN); + FlagSet(FLAG_ADDED_MATCH_CALL_TO_POKENAV); + FlagSet(FLAG_HAS_MATCH_CALL); + } +} + static void DebugAction_FlagsVars_RunningShoes(u8 taskId) { if (FlagGet(FLAG_SYS_B_DASH)) @@ -2371,13 +2565,12 @@ static void DebugAction_FlagsVars_RunningShoes(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_B_DASH); } + static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId) { - // Sound effect if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER)) { PlaySE(SE_PC_OFF); - FlagClear(FLAG_VISITED_LITTLEROOT_TOWN); FlagClear(FLAG_VISITED_OLDALE_TOWN); FlagClear(FLAG_VISITED_DEWFORD_TOWN); @@ -2400,7 +2593,6 @@ static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId) else { PlaySE(SE_PC_LOGIN); - FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); FlagSet(FLAG_VISITED_OLDALE_TOWN); FlagSet(FLAG_VISITED_DEWFORD_TOWN); @@ -2421,22 +2613,35 @@ static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId) FlagSet(FLAG_LANDMARK_BATTLE_FRONTIER); } } + static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId) { - // Sound effect if (FlagGet(FLAG_BADGE08_GET)) + { PlaySE(SE_PC_OFF); + FlagClear(FLAG_BADGE01_GET); + FlagClear(FLAG_BADGE02_GET); + FlagClear(FLAG_BADGE03_GET); + FlagClear(FLAG_BADGE04_GET); + FlagClear(FLAG_BADGE05_GET); + FlagClear(FLAG_BADGE06_GET); + FlagClear(FLAG_BADGE07_GET); + FlagClear(FLAG_BADGE08_GET); + } else + { PlaySE(SE_PC_LOGIN); - FlagToggle(FLAG_BADGE01_GET); - FlagToggle(FLAG_BADGE02_GET); - FlagToggle(FLAG_BADGE03_GET); - FlagToggle(FLAG_BADGE04_GET); - FlagToggle(FLAG_BADGE05_GET); - FlagToggle(FLAG_BADGE06_GET); - FlagToggle(FLAG_BADGE07_GET); - FlagToggle(FLAG_BADGE08_GET); + FlagSet(FLAG_BADGE01_GET); + FlagSet(FLAG_BADGE02_GET); + FlagSet(FLAG_BADGE03_GET); + FlagSet(FLAG_BADGE04_GET); + FlagSet(FLAG_BADGE05_GET); + FlagSet(FLAG_BADGE06_GET); + FlagSet(FLAG_BADGE07_GET); + FlagSet(FLAG_BADGE08_GET); + } } + static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId) { // Sound effect @@ -2446,6 +2651,7 @@ static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_FRONTIER_PASS); } + static void DebugAction_FlagsVars_CollisionOnOff(u8 taskId) { #if OW_FLAG_NO_COLLISION == 0 @@ -2458,6 +2664,7 @@ static void DebugAction_FlagsVars_CollisionOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_COLLISION); #endif } + static void DebugAction_FlagsVars_EncounterOnOff(u8 taskId) { #if OW_FLAG_NO_ENCOUNTER == 0 @@ -2470,6 +2677,7 @@ static void DebugAction_FlagsVars_EncounterOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_ENCOUNTER); #endif } + static void DebugAction_FlagsVars_TrainerSeeOnOff(u8 taskId) { #if OW_FLAG_NO_TRAINER_SEE == 0 @@ -2482,6 +2690,7 @@ static void DebugAction_FlagsVars_TrainerSeeOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_TRAINER_SEE); #endif } + static void DebugAction_FlagsVars_BagUseOnOff(u8 taskId) { #if B_FLAG_NO_BAG_USE == 0 @@ -2494,6 +2703,7 @@ static void DebugAction_FlagsVars_BagUseOnOff(u8 taskId) FlagToggle(B_FLAG_NO_BAG_USE); #endif } + static void DebugAction_FlagsVars_CatchingOnOff(u8 taskId) { #if B_FLAG_NO_CATCHING == 0 @@ -2510,37 +2720,41 @@ static void DebugAction_FlagsVars_CatchingOnOff(u8 taskId) // ******************************* // Actions Give #define ITEM_TAG 0xFDF3 +#define tItemId data[5] +#define tSpriteId data[6] + static void DebugAction_Give_Item(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial item StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); CopyItemName(1, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[6] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].data[3]); - gSprites[gTasks[taskId].data[6]].x2 = DEBUG_NUMBER_ICON_X+10; - gSprites[gTasks[taskId].data[6]].y2 = DEBUG_NUMBER_ICON_Y+10; - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].tInput); + gSprites[gTasks[taskId].tSpriteId].x2 = DEBUG_NUMBER_ICON_X+10; + gSprites[gTasks[taskId].tSpriteId].y2 = DEBUG_NUMBER_ICON_Y+10; + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } + static void DebugAction_Give_Item_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2549,72 +2763,73 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= ITEMS_COUNT) - gTasks[taskId].data[3] = ITEMS_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= ITEMS_COUNT) + gTasks[taskId].tInput = ITEMS_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - CopyItemName(gTasks[taskId].data[3], gStringVar1); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + CopyItemName(gTasks[taskId].tInput, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - gTasks[taskId].data[6] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].data[3]); - gSprites[gTasks[taskId].data[6]].x2 = DEBUG_NUMBER_ICON_X+10; - gSprites[gTasks[taskId].data[6]].y2 = DEBUG_NUMBER_ICON_Y+10; - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + gTasks[taskId].tSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].tInput); + gSprites[gTasks[taskId].tSpriteId].x2 = DEBUG_NUMBER_ICON_X+10; + gSprites[gTasks[taskId].tSpriteId].y2 = DEBUG_NUMBER_ICON_Y+10; + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tItemId = gTasks[taskId].tInput; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectQuantity; } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Item_SelectQuantity(u8 taskId) { - u32 itemId = gTasks[taskId].data[5]; + u32 itemId = gTasks[taskId].tItemId; if (JOY_NEW(DPAD_ANY)) { @@ -2623,57 +2838,60 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) if (JOY_NEW(DPAD_UP)) { u32 maxCapacity = (ItemId_GetPocket(itemId) - 1 == BERRIES_POCKET) ? MAX_BERRY_CAPACITY : MAX_BAG_ITEM_CAPACITY; - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > maxCapacity) - gTasks[taskId].data[3] = maxCapacity; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > maxCapacity) + gTasks[taskId].tInput = maxCapacity; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(MUS_OBTAIN_ITEM); - AddBagItem(itemId, gTasks[taskId].data[3]); + AddBagItem(itemId, gTasks[taskId].tInput); DebugAction_DestroyExtraWindow(taskId); } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); } } +#undef tItemId +#undef tSpriteId + //TMs static void DebugAction_Give_AllTMs(u8 taskId) { @@ -2684,6 +2902,7 @@ static void DebugAction_Give_AllTMs(u8 taskId) if (ItemIdToBattleMoveId(i) != MOVE_NONE && !CheckBagHasItem(i, 1)) AddBagItem(i, 1); } + Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } @@ -2691,11 +2910,11 @@ static void DebugAction_Give_AllTMs(u8 taskId) //Pokemon static void ResetMonDataStruct(struct DebugMonData *sDebugMonData) { - sDebugMonData->mon_speciesId = 1; - sDebugMonData->mon_level = 1; + sDebugMonData->species = 1; + sDebugMonData->level = MIN_LEVEL; sDebugMonData->isShiny = 0; - sDebugMonData->mon_natureId = 0; - sDebugMonData->mon_abilityNum = 0; + sDebugMonData->nature = 0; + sDebugMonData->abilityNum = 0; sDebugMonData->mon_iv_hp = 0; sDebugMonData->mon_iv_atk = 0; sDebugMonData->mon_iv_def = 0; @@ -2703,6 +2922,11 @@ static void ResetMonDataStruct(struct DebugMonData *sDebugMonData) sDebugMonData->mon_iv_satk = 0; sDebugMonData->mon_iv_sdef = 0; } + +#define tIsComplex data[5] +#define tSpriteId data[6] +#define tIterator data[7] + static void DebugAction_Give_PokemonSimple(u8 taskId) { u8 windowId; @@ -2712,35 +2936,37 @@ static void DebugAction_Give_PokemonSimple(u8 taskId) ResetMonDataStruct(sDebugMonData); //Window initialization - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 3); - StringCopy(gStringVar1, GetSpeciesName(1)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); //Set task data gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Complex? - FreeMonIconPalettes(); //Free space for new pallete - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; //Mon Icon ID + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = sDebugMonData->species; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIsComplex = FALSE; + + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } + static void DebugAction_Give_PokemonComplex(u8 taskId) { u8 windowId; @@ -2750,34 +2976,35 @@ static void DebugAction_Give_PokemonComplex(u8 taskId) ResetMonDataStruct(sDebugMonData); //Window initialization - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 4); - StringCopy(gStringVar1, GetSpeciesName(1)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 4); + StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 1; //Complex? - FreeMonIconPalettes(); //Free space for new palletes - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; //Mon Icon ID - gTasks[taskId].data[7] = 0; //iterator + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIsComplex = TRUE; + + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; + gTasks[taskId].tIterator = 0; } static void DebugAction_Give_Pokemon_SelectId(u8 taskId) @@ -2788,64 +3015,65 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= NUM_SPECIES) - gTasks[taskId].data[3] = NUM_SPECIES - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= NUM_SPECIES) + gTasks[taskId].tInput = NUM_SPECIES - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].data[3])); //CopyItemName(gTasks[taskId].data[3], gStringVar1); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].tInput)); //CopyItemName(gTasks[taskId].tInput, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 4); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 4); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); - FreeMonIconPalettes(); //Free space for new pallete - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->mon_speciesId = gTasks[taskId].data[3]; //Species ID - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; + sDebugMonData->species = gTasks[taskId].tInput; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectLevel; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2854,58 +3082,58 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 100) - gTasks[taskId].data[3] = 100; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 100) + gTasks[taskId].tInput = 100; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite - if (gTasks[taskId].data[5] == 0) + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); + if (gTasks[taskId].tIsComplex == FALSE) { PlaySE(MUS_LEVEL_UP); - ScriptGiveMon(sDebugMonData->mon_speciesId, gTasks[taskId].data[3], ITEM_NONE, 0,0,0); + ScriptGiveMon(sDebugMonData->species, gTasks[taskId].tInput, ITEM_NONE, 0, 0, 0); // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } else { - sDebugMonData->mon_level = gTasks[taskId].data[3]; //Level - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->level = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 0); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 0); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectShiny; } @@ -2913,13 +3141,13 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); DebugAction_DestroyExtraWindow(taskId); } } -//If complex + static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2928,49 +3156,50 @@ static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - if (gTasks[taskId].data[3] == 1) + if (gTasks[taskId].tInput == 1) StringCopyPadded(gStringVar2, sDebugText_True, CHAR_SPACE, 15); else StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 0); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 0); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->isShiny = gTasks[taskId].data[3]; //isShiny - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->isShiny = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gNatureNamePointers[0]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectNature; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2979,49 +3208,50 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > NUM_NATURES-1) - gTasks[taskId].data[3] = NUM_NATURES-1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > NUM_NATURES-1) + gTasks[taskId].tInput = NUM_NATURES-1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar1, gNatureNamePointers[gTasks[taskId].data[3]]); + StringCopy(gStringVar1, gNatureNamePointers[gTasks[taskId].tInput]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { u8 abilityId; - sDebugMonData->mon_natureId = gTasks[taskId].data[3]; //NatureId - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->nature = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - abilityId = GetAbilityBySpecies(sDebugMonData->mon_speciesId, 0); + abilityId = GetAbilityBySpecies(sDebugMonData->species, 0); StringCopy(gStringVar1, gAbilityNames[abilityId]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectAbility; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) { u16 abilityId; @@ -3034,51 +3264,52 @@ static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > abilityCount) - gTasks[taskId].data[3] = abilityCount; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > abilityCount) + gTasks[taskId].tInput = abilityCount; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - while (GetAbilityBySpecies(sDebugMonData->mon_speciesId, gTasks[taskId].data[3] - i) == ABILITY_NONE && gTasks[taskId].data[3] - i < NUM_ABILITY_SLOTS) + while (GetAbilityBySpecies(sDebugMonData->species, gTasks[taskId].tInput - i) == ABILITY_NONE && gTasks[taskId].tInput - i < NUM_ABILITY_SLOTS) { i++; } - abilityId = GetAbilityBySpecies(sDebugMonData->mon_speciesId, gTasks[taskId].data[3] - i); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + abilityId = GetAbilityBySpecies(sDebugMonData->species, gTasks[taskId].tInput - i); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gAbilityNames[abilityId]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->mon_abilityNum = gTasks[taskId].data[3] - i; //AbilityNum - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->abilityNum = gTasks[taskId].tInput - i; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -3087,126 +3318,126 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 31) - gTasks[taskId].data[3] = 31; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 31) + gTasks[taskId].tInput = 31; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); + case STAT_HP: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); break; - case 1: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_1); + case STAT_ATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Attack); break; - case 2: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_2); + case STAT_DEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Defense); break; - case 3: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_3); + case STAT_SPEED: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Speed); break; - case 4: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_4); + case STAT_SPATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpAttack); break; - case 5: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_5); + case STAT_SPDEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } //If A or B button if (JOY_NEW(A_BUTTON)) { - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - sDebugMonData->mon_iv_hp = gTasks[taskId].data[3]; + case STAT_HP: + sDebugMonData->mon_iv_hp = gTasks[taskId].tInput; break; - case 1: - sDebugMonData->mon_iv_atk = gTasks[taskId].data[3]; + case STAT_ATK: + sDebugMonData->mon_iv_atk = gTasks[taskId].tInput; break; - case 2: - sDebugMonData->mon_iv_def = gTasks[taskId].data[3]; + case STAT_DEF: + sDebugMonData->mon_iv_def = gTasks[taskId].tInput; break; - case 3: - sDebugMonData->mon_iv_speed = gTasks[taskId].data[3]; + case STAT_SPEED: + sDebugMonData->mon_iv_speed = gTasks[taskId].tInput; break; - case 4: - sDebugMonData->mon_iv_satk = gTasks[taskId].data[3]; + case STAT_SPATK: + sDebugMonData->mon_iv_satk = gTasks[taskId].tInput; break; - case 5: - sDebugMonData->mon_iv_sdef = gTasks[taskId].data[3]; + case STAT_SPDEF: + sDebugMonData->mon_iv_sdef = gTasks[taskId].tInput; break; } //Check if all IVs set - if (gTasks[taskId].data[7] != 5) + if (gTasks[taskId].tIterator != NUM_STATS - 1) { - gTasks[taskId].data[7] += 1; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tIterator++; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); + case STAT_HP: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); break; - case 1: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_1); + case STAT_ATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Attack); break; - case 2: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_2); + case STAT_DEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Defense); break; - case 3: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_3); + case STAT_SPEED: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Speed); break; - case 4: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_4); + case STAT_SPATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpAttack); break; - case 5: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_5); + case STAT_SPDEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } else { - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[7] = 0; //Reset iterator + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIterator = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } @@ -3214,10 +3445,11 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_Move(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -3226,32 +3458,32 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= MOVES_COUNT) - gTasks[taskId].data[3] = MOVES_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= MOVES_COUNT) + gTasks[taskId].tInput = MOVES_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 3) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 3) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); - switch (gTasks[taskId].data[7]) + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + switch (gTasks[taskId].tIterator) { case 0: StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); @@ -3266,44 +3498,44 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - //If MOVE_NONE selected, stop asking for additional moves - if (gTasks[taskId].data[3] == 0) - gTasks[taskId].data[7] = 4; + // If MOVE_NONE selected, stop asking for additional moves + if (gTasks[taskId].tInput == MOVE_NONE) + gTasks[taskId].tIterator = 4; //Set current value - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { case 0: - sDebugMonData->mon_move_0 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_0 = gTasks[taskId].tInput; break; case 1: - sDebugMonData->mon_move_1 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_1 = gTasks[taskId].tInput; break; case 2: - sDebugMonData->mon_move_2 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_2 = gTasks[taskId].tInput; break; case 3: - sDebugMonData->mon_move_3 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_3 = gTasks[taskId].tInput; break; } //If NOT last move or selected MOVE_NONE ask for next move, else make mon - if (gTasks[taskId].data[7] < 3) + if (gTasks[taskId].tIterator < MAX_MON_MOVES - 1) { - gTasks[taskId].data[7] += 1; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tIterator++; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); - switch (gTasks[taskId].data[7]) + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + switch (gTasks[taskId].tIterator) { case 0: StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); @@ -3318,14 +3550,14 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } else { - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; PlaySE(MUS_LEVEL_UP); gTasks[taskId].func = DebugAction_Give_Pokemon_ComplexCreateMon; @@ -3334,10 +3566,11 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://github.com/ghoulslash/pokeemerald/tree/custom-givemon { u16 nationalDexNum; @@ -3347,11 +3580,11 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu u16 moves[4]; u8 IVs[6]; u8 iv_val; - u16 species = sDebugMonData->mon_speciesId; - u8 level = sDebugMonData->mon_level; + u16 species = sDebugMonData->species; + u8 level = sDebugMonData->level; u8 isShiny = sDebugMonData->isShiny; //Shiny: no 0, yes 1 - u8 nature = sDebugMonData->mon_natureId; - u8 abilityNum = sDebugMonData->mon_abilityNum; + u8 nature = sDebugMonData->nature; + u8 abilityNum = sDebugMonData->abilityNum; moves[0] = sDebugMonData->mon_move_0; moves[1] = sDebugMonData->mon_move_1; moves[2] = sDebugMonData->mon_move_2; @@ -3449,10 +3682,14 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); //return sentToPc; } +#undef tIsComplex +#undef tSpriteId +#undef tIterator + static void DebugAction_Give_MaxMoney(u8 taskId) { SetMoney(&gSaveBlock1Ptr->money, MAX_MONEY); @@ -3460,7 +3697,7 @@ static void DebugAction_Give_MaxMoney(u8 taskId) static void DebugAction_Give_MaxCoins(u8 taskId) { - SetCoins(9999); + SetCoins(MAX_COINS); } static void DebugAction_Give_MaxBattlePoints(u8 taskId) @@ -3515,10 +3752,10 @@ static void DebugAction_Fill_PCBoxes_Fast(u8 taskId) //Credit: Sierraffinity Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Fill_PCBoxes_Slow(u8 taskId) { int boxId, boxPosition; - u32 personality; struct BoxPokemon boxMon; u32 species = SPECIES_BULBASAUR; bool8 spaceAvailable = FALSE; @@ -3546,6 +3783,7 @@ static void DebugAction_Fill_PCBoxes_Slow(u8 taskId) Debug_DestroyMenu_Full_Script(taskId, Debug_BoxFilledMessage); } + static void DebugAction_Fill_PCItemStorage(u8 taskId) { u16 itemId; @@ -3556,6 +3794,7 @@ static void DebugAction_Fill_PCItemStorage(u8 taskId) AddPCItem(itemId, MAX_PC_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketItems(u8 taskId) { u16 itemId; @@ -3566,6 +3805,7 @@ static void DebugAction_Fill_PocketItems(u8 taskId) AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketPokeBalls(u8 taskId) { u16 itemId; @@ -3576,6 +3816,7 @@ static void DebugAction_Fill_PocketPokeBalls(u8 taskId) AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketTMHM(u8 taskId) { u16 itemId; @@ -3586,6 +3827,7 @@ static void DebugAction_Fill_PocketTMHM(u8 taskId) AddBagItem(itemId, 1); } } + static void DebugAction_Fill_PocketBerries(u8 taskId) { u16 itemId; @@ -3596,6 +3838,7 @@ static void DebugAction_Fill_PocketBerries(u8 taskId) AddBagItem(itemId, MAX_BERRY_CAPACITY); } } + static void DebugAction_Fill_PocketKeyItems(u8 taskId) { u16 itemId; @@ -3611,160 +3854,181 @@ static void DebugAction_Fill_PocketKeyItems(u8 taskId) // Actions Sound static const u8 *const sBGMNames[]; static const u8 *const sSENames[]; + +#define tCurrentSong data[5] + static void DebugAction_Sound_SE(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateSound); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial sound effect StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sSENames[0], CHAR_SPACE, 35); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SE_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); StopMapMusic(); //Stop map music to better hear sounds gTasks[taskId].func = DebugAction_Sound_SE_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = gTasks[taskId].data[3]; //Last song played (for stopping) + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; } + static void DebugAction_Sound_SE_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > END_SE) - gTasks[taskId].data[3] = END_SE; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > END_SE) + gTasks[taskId].tInput = END_SE; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopyPadded(gStringVar1, sSENames[gTasks[taskId].data[3]-1], CHAR_SPACE, 35); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SE_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopyPadded(gStringVar1, sSENames[gTasks[taskId].tInput-1], CHAR_SPACE, 35); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - m4aSongNumStop(gTasks[taskId].data[5]); - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - m4aSongNumStart(gTasks[taskId].data[3]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; + m4aSongNumStart(gTasks[taskId].tInput); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - m4aSongNumStop(gTasks[taskId].data[5]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); DebugAction_DestroyExtraWindow(taskId); } + else if (JOY_NEW(START_BUTTON)) + { + m4aSongNumStop(gTasks[taskId].tCurrentSong); + } } static void DebugAction_Sound_MUS(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateSound); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial song StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, START_MUS, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sBGMNames[0], CHAR_SPACE, 35); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_MUS_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); StopMapMusic(); //Stop map music to better hear new music gTasks[taskId].func = DebugAction_Sound_MUS_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = START_MUS; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = gTasks[taskId].data[3]; //Last song played (for stopping) + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = START_MUS; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; } + static void DebugAction_Sound_MUS_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > END_MUS) - gTasks[taskId].data[3] = END_MUS; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > END_MUS) + gTasks[taskId].tInput = END_MUS; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < START_MUS) - gTasks[taskId].data[3] = START_MUS; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < START_MUS) + gTasks[taskId].tInput = START_MUS; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopyPadded(gStringVar1, sBGMNames[gTasks[taskId].data[3]-START_MUS], CHAR_SPACE, 35); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_MUS_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopyPadded(gStringVar1, sBGMNames[gTasks[taskId].tInput-START_MUS], CHAR_SPACE, 35); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - m4aSongNumStop(gTasks[taskId].data[5]); - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - m4aSongNumStart(gTasks[taskId].data[3]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; + m4aSongNumStart(gTasks[taskId].tInput); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - // m4aSongNumStop(gTasks[taskId].data[5]); //Uncomment if music should stop after leaving menu + // m4aSongNumStop(gTasks[taskId].tCurrentSong); //Uncomment if music should stop after leaving menu DebugAction_DestroyExtraWindow(taskId); } + else if (JOY_NEW(START_BUTTON)) + { + m4aSongNumStop(gTasks[taskId].tCurrentSong); + } } +#undef tCurrentSong + +#undef tMenuTaskId +#undef tWindowId +#undef tSubWindowId +#undef tInput +#undef tDigit + #define SOUND_LIST_BGM \ X(MUS_LITTLEROOT_TEST) \ X(MUS_GSC_ROUTE38) \ diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 7efc86fb19..cc96fd5105 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -360,7 +360,6 @@ static void AddHatchedMonToParty(u8 id) u8 isEgg = 0x46; // ? u16 species; u8 name[POKEMON_NAME_LENGTH + 1]; - u16 ball; u16 metLevel; u8 metLocation; struct Pokemon *mon = &gPlayerParty[id]; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ae643b661f..cdd72d668c 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1325,7 +1325,7 @@ u8 Unref_TryInitLocalObjectEvent(u8 localId) if (InBattlePyramid()) objectEventCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) - objectEventCount = 2; + objectEventCount = HILL_TRAINERS_PER_FLOOR; else objectEventCount = gMapHeader.events->objectEventCount; @@ -1641,7 +1641,7 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) if (InBattlePyramid()) objectCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) - objectCount = 2; + objectCount = HILL_TRAINERS_PER_FLOOR; else objectCount = gMapHeader.events->objectEventCount; @@ -8883,7 +8883,7 @@ static void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords((u16*) &task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8894,7 +8894,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords((u16*) &task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 3)) @@ -8911,7 +8911,7 @@ static void DestroyLevitateMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords((u16*) &task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 7af1912454..6a5422046e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -68,7 +68,9 @@ static bool8 TryStartWarpEventScript(struct MapPosition *, u16); static bool8 TryStartMiscWalkingScripts(u16); static bool8 TryStartStepCountScript(u16); static void UpdateFriendshipStepCounter(void); +#if OW_POISON_DAMAGE < GEN_5 static bool8 UpdatePoisonStepCounter(void); +#endif // OW_POISON_DAMAGE void FieldClearPlayerInput(struct FieldInput *input) { @@ -655,6 +657,7 @@ void ClearPoisonStepCounter(void) VarSet(VAR_POISON_STEP_COUNTER, 0); } +#if OW_POISON_DAMAGE < GEN_5 static bool8 UpdatePoisonStepCounter(void) { u16 *ptr; @@ -679,6 +682,7 @@ static bool8 UpdatePoisonStepCounter(void) } return FALSE; } +#endif // OW_POISON_DAMAGE void RestartWildEncounterImmunitySteps(void) { diff --git a/src/field_door.c b/src/field_door.c index 255233ec23..b922c939b7 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -412,7 +412,7 @@ static void Task_AnimateDoor(u8 taskId) struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(tFramesHi << 16 | tFramesLo); struct DoorGraphics *gfx = (struct DoorGraphics *)(tGfxHi << 16 | tGfxLo); - if (AnimateDoorFrame(gfx, frames, data) == FALSE) + if (AnimateDoorFrame(gfx, frames, gTasks[taskId].data) == FALSE) DestroyTask(taskId); } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 386c3c76b2..ac4dac3ecb 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -32,8 +32,12 @@ static void UpdateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sp static void SpriteCB_UnderwaterSurfBlob(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -// Used by several field effects to determine which of a group it is -#define sFldEff data[1] +// Data used by all the field effects that share UpdateJumpImpactEffect +#define sJumpElevation data[0] +#define sJumpFldEff data[1] + +// Data used by all the field effects that share WaitFieldEffectSpriteAnim +#define sWaitFldEff data[0] #define sReflectionObjEventId data[0] #define sReflectionObjEventLocalId data[1] @@ -44,7 +48,7 @@ void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, boo { struct Sprite *reflectionSprite; - reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 0x98)]; + reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 152)]; reflectionSprite->callback = UpdateObjectReflectionSprite; reflectionSprite->oam.priority = 3; reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum]; @@ -92,9 +96,7 @@ static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteIndex) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { if (graphicsInfo->paletteSlot == PALSLOT_PLAYER) @@ -111,9 +113,7 @@ static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, // This is so the sprite blends in with the dark water metatile underneath the bridge. static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum); @@ -123,11 +123,8 @@ static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEven static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { - struct ObjectEvent *objectEvent; - struct Sprite *mainSprite; - - objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId]; - mainSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId]; + struct Sprite *mainSprite = &gSprites[objectEvent->spriteId]; if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId) { reflectionSprite->inUse = FALSE; @@ -172,15 +169,15 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; +#define sPrevX data[0] +#define sPrevY data[1] + u8 CreateWarpArrowSprite(void) { - u8 spriteId; - struct Sprite *sprite; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 82); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->invisible = TRUE; @@ -195,24 +192,24 @@ void SetSpriteInvisible(u8 spriteId) void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) { - s16 x2; - s16 y2; - struct Sprite *sprite; - - sprite = &gSprites[spriteId]; - if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y) + struct Sprite *sprite = &gSprites[spriteId]; + if (sprite->invisible || sprite->sPrevX != x || sprite->sPrevY != y) { + s16 x2, y2; SetSpritePosToMapCoords(x, y, &x2, &y2); sprite = &gSprites[spriteId]; sprite->x = x2 + 8; sprite->y = y2 + 8; sprite->invisible = FALSE; - sprite->data[0] = x; - sprite->data[1] = y; + sprite->sPrevX = x; + sprite->sPrevY = y; StartSpriteAnim(sprite, direction - 1); } } +#undef sPrevX +#undef sPrevY + static const u8 sShadowEffectTemplateIds[] = { FLDEFFOBJ_SHADOW_S, FLDEFFOBJ_SHADOW_M, @@ -227,22 +224,24 @@ const u16 gShadowVerticalOffsets[] = { 16 }; +// Sprite data for FLDEFF_SHADOW +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sYOffset data[3] + u32 FldEff_Shadow(void) { - u8 objectEventId; - const struct ObjectEventGraphicsInfo *graphicsInfo; - u8 spriteId; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 148); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data[0] = gFieldEffectArguments[0]; - gSprites[spriteId].data[1] = gFieldEffectArguments[1]; - gSprites[spriteId].data[2] = gFieldEffectArguments[2]; - gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; + gSprites[spriteId].sLocalId = gFieldEffectArguments[0]; + gSprites[spriteId].sMapNum = gFieldEffectArguments[1]; + gSprites[spriteId].sMapGroup = gFieldEffectArguments[2]; + gSprites[spriteId].sYOffset = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; } return 0; } @@ -250,20 +249,18 @@ u32 FldEff_Shadow(void) void UpdateShadowFieldEffect(struct Sprite *sprite) { u8 objectEventId; - struct ObjectEvent *objectEvent; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId)) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } else { - objectEvent = &gObjectEvents[objectEventId]; - linkedSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->x = linkedSprite->x; - sprite->y = linkedSprite->y + sprite->data[3]; + sprite->y = linkedSprite->y + sprite->sYOffset; if (!objectEvent->active || !objectEvent->hasShadow || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->currentMetatileBehavior) @@ -276,6 +273,11 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sYOffset + // Sprite data for FLDEFF_TALL_GRASS and FLDEFF_LONG_GRASS #define sElevation data[0] #define sX data[1] @@ -288,18 +290,14 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) u32 FldEff_TallGrass(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->sElevation = gFieldEffectArguments[2]; @@ -317,15 +315,12 @@ u32 FldEff_TallGrass(void) void UpdateTallGrassFieldEffect(struct Sprite *sprite) { - u8 mapNum; - u8 mapGroup; u8 metatileBehavior; u8 localId; u8 objectEventId; - struct ObjectEvent *objectEvent; + u8 mapNum = sprite->sCurrentMap >> 8; + u8 mapGroup = sprite->sCurrentMap; - mapNum = sprite->sCurrentMap >> 8; - mapGroup = sprite->sCurrentMap; if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup)) { sprite->sX -= gCamera.x; @@ -346,11 +341,9 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) else { // Check if the object that triggered the effect has moved away - objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->sX - || objectEvent->currentCoords.y != sprite->sY) - && (objectEvent->previousCoords.x != sprite->sX - || objectEvent->previousCoords.y != sprite->sY)) + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + if ((objectEvent->currentCoords.x != sprite->sX || objectEvent->currentCoords.y != sprite->sY) + && (objectEvent->previousCoords.x != sprite->sX || objectEvent->previousCoords.y != sprite->sY)) sprite->sObjectMoved = TRUE; // Metatile behavior var re-used as subpriority @@ -366,31 +359,28 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) u32 FldEff_JumpTallGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_TALL_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->sElevation = gFieldEffectArguments[2]; - sprite->sFldEff = FLDEFF_JUMP_TALL_GRASS; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_TALL_GRASS; } return 0; } u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) { - struct Sprite *sprite; u8 i; - for (i = 0; i < MAX_SPRITES; i ++) { if (gSprites[i].inUse) { - sprite = &gSprites[i]; + struct Sprite *sprite = &gSprites[i]; if (sprite->callback == UpdateTallGrassFieldEffect && (x == sprite->sX && y == sprite->sY) && localId == (u8)(sprite->sLocalId) @@ -404,18 +394,14 @@ u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s u32 FldEff_LongGrass(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = ElevationToPriority(gFieldEffectArguments[2]); sprite->sElevation = gFieldEffectArguments[2]; @@ -433,15 +419,12 @@ u32 FldEff_LongGrass(void) void UpdateLongGrassFieldEffect(struct Sprite *sprite) { - u8 mapNum; - u8 mapGroup; u8 metatileBehavior; u8 localId; u8 objectEventId; - struct ObjectEvent *objectEvent; + u8 mapNum = sprite->sCurrentMap >> 8; + u8 mapGroup = sprite->sCurrentMap; - mapNum = sprite->sCurrentMap >> 8; - mapGroup = sprite->sCurrentMap; if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup)) { sprite->sX -= gCamera.x; @@ -451,7 +434,7 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) localId = sprite->sLocalId; mapNum = sprite->sMapNum; mapGroup = sprite->sMapGroup; - metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->sX, sprite->sY); if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->sObjectMoved && sprite->animEnded)) @@ -461,11 +444,9 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) else { // Check if the object that triggered the effect has moved away - objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->data[1] - || objectEvent->currentCoords.y != sprite->data[2]) - && (objectEvent->previousCoords.x != sprite->data[1] - || objectEvent->previousCoords.y != sprite->data[2])) + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + if ((objectEvent->currentCoords.x != sprite->sX || objectEvent->currentCoords.y != sprite->sY) + && (objectEvent->previousCoords.x != sprite->sX || objectEvent->previousCoords.y != sprite->sY)) sprite->sObjectMoved = TRUE; UpdateObjectEventSpriteInvisibility(sprite, FALSE); @@ -473,6 +454,7 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) } } +#undef sElevation #undef sX #undef sY #undef sMapNum @@ -486,41 +468,42 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) u32 FldEff_JumpLongGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->sElevation = gFieldEffectArguments[2]; - sprite->sFldEff = FLDEFF_JUMP_LONG_GRASS; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_LONG_GRASS; } return 0; } +// Sprite data for FLDEFF_SHORT_GRASS +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_ShortGrass(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &(gSprites[spriteId]); + struct Sprite *sprite = &(gSprites[spriteId]); sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; + sprite->sPrevY = gSprites[objectEvent->spriteId].y; } return 0; } @@ -528,32 +511,28 @@ u32 FldEff_ShortGrass(void) void UpdateShortGrassFieldEffect(struct Sprite *sprite) { u8 objectEventId; - s16 x; - s16 y; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShortGrass) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inShortGrass) { FieldEffectStop(sprite, FLDEFF_SHORT_GRASS); } else { - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; - y = linkedSprite->y; - x = linkedSprite->x; - if (x != sprite->data[3] || y != sprite->data[4]) + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + struct Sprite *linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; + s16 parentY = linkedSprite->y; + s16 parentX = linkedSprite->x; + if (parentX != sprite->sPrevX || parentY != sprite->sPrevY) { - sprite->data[3] = x; - sprite->data[4] = y; + // Parent sprite moved, try to restart the animation + sprite->sPrevX = parentX; + sprite->sPrevY = parentY; if (sprite->animEnded) - { StartSpriteAnim(sprite, 0); - } } - sprite->x = x; - sprite->y = y; + sprite->x = parentX; + sprite->y = parentY; + // Offset the grass sprite halfway down the parent sprite. sprite->y2 = (graphicsInfo->height >> 1) - 8; sprite->subpriority = linkedSprite->subpriority - 1; sprite->oam.priority = linkedSprite->oam.priority; @@ -561,19 +540,29 @@ void UpdateShortGrassFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + +// Sprite data for FLDEFF_SAND_FOOTPRINTS, FLDEFF_DEEP_SAND_FOOTPRINTS, and FLDEFF_BIKE_TIRE_TRACKS +#define sState data[0] +#define sTimer data[1] +#define sFldEff data[7] + u32 FldEff_SandFootprints(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_SAND_FOOTPRINTS; + sprite->sFldEff = FLDEFF_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return 0; @@ -582,16 +571,15 @@ u32 FldEff_SandFootprints(void) u32 FldEff_DeepSandFootprints(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_DEEP_SAND_FOOTPRINTS; + sprite->sFldEff = FLDEFF_DEEP_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -600,16 +588,15 @@ u32 FldEff_DeepSandFootprints(void) u32 FldEff_BikeTireTracks(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIKE_TIRE_TRACKS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_BIKE_TIRE_TRACKS; + sprite->sFldEff = FLDEFF_BIKE_TIRE_TRACKS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -622,14 +609,14 @@ void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = { void UpdateFootprintsTireTracksFieldEffect(struct Sprite *sprite) { - gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite); + gFadeFootprintsTireTracksFuncs[sprite->sState](sprite); } static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) { // Wait 40 frames before the flickering starts. - if (++sprite->data[1] > 40) - sprite->data[0] = 1; + if (++sprite->sTimer > 40) + sprite->sState = 1; UpdateObjectEventSpriteInvisibility(sprite, FALSE); } @@ -637,36 +624,37 @@ static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) { sprite->invisible ^= 1; - sprite->data[1]++; + sprite->sTimer++; UpdateObjectEventSpriteInvisibility(sprite, sprite->invisible); - if (sprite->data[1] > 56) - { - FieldEffectStop(sprite, sprite->data[7]); - } + if (sprite->sTimer > 56) + FieldEffectStop(sprite, sprite->sFldEff); } +#undef sState +#undef sTimer +#undef sFldEff + +// Sprite data for FLDEFF_SPLASH +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] + u32 FldEff_Splash(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + struct Sprite *linkedSprite; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; sprite->y2 = (graphicsInfo->height >> 1) - 4; PlaySE(SE_PUDDLE); } @@ -677,7 +665,7 @@ void UpdateSplashFieldEffect(struct Sprite *sprite) { u8 objectEventId; - if (sprite->animEnded || TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId)) + if (sprite->animEnded || TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId)) { FieldEffectStop(sprite, FLDEFF_SPLASH); } @@ -689,20 +677,23 @@ void UpdateSplashFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup + u32 FldEff_JumpSmallSplash(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_JUMP_SMALL_SPLASH; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_SMALL_SPLASH; } return 0; } @@ -710,44 +701,44 @@ u32 FldEff_JumpSmallSplash(void) u32 FldEff_JumpBigSplash(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_BIG_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_JUMP_BIG_SPLASH; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_BIG_SPLASH; } return 0; } +// Sprite data for FLDEFF_FEET_IN_FLOWING_WATER +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_FeetInFlowingWater(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->callback = UpdateFeetInFlowingWaterFieldEffect; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = -1; - sprite->data[4] = -1; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = -1; + sprite->sPrevY = -1; sprite->y2 = (graphicsInfo->height >> 1) - 4; StartSpriteAnim(sprite, 1); } @@ -757,69 +748,70 @@ u32 FldEff_FeetInFlowingWater(void) static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) { u8 objectEventId; - struct Sprite *linkedSprite; - struct ObjectEvent *objectEvent; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShallowFlowingWater) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inShallowFlowingWater) { FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); } else { - objectEvent = &gObjectEvents[objectEventId]; - linkedSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; sprite->x = linkedSprite->x; sprite->y = linkedSprite->y; sprite->subpriority = linkedSprite->subpriority; UpdateObjectEventSpriteInvisibility(sprite, FALSE); - if (objectEvent->currentCoords.x != sprite->data[3] || objectEvent->currentCoords.y != sprite->data[4]) + if (objectEvent->currentCoords.x != sprite->sPrevX || objectEvent->currentCoords.y != sprite->sPrevY) { - sprite->data[3] = objectEvent->currentCoords.x; - sprite->data[4] = objectEvent->currentCoords.y; + sprite->sPrevX = objectEvent->currentCoords.x; + sprite->sPrevY = objectEvent->currentCoords.y; if (!sprite->invisible) - { PlaySE(SE_PUDDLE); - } } } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_Ripple(void) { - u8 spriteId; - struct Sprite *sprite; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_RIPPLE; + sprite->sWaitFldEff = FLDEFF_RIPPLE; } return 0; } +// Sprite data for FLDEFF_HOT_SPRINGS_WATER +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_HotSpringsWater(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; // Unused + sprite->sPrevY = gSprites[objectEvent->spriteId].y; // Unused } return 0; } @@ -827,17 +819,15 @@ u32 FldEff_HotSpringsWater(void) void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) { u8 objectEventId; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inHotSprings) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inHotSprings) { FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER); } else { - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + struct Sprite *linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; sprite->x = linkedSprite->x; sprite->y = (graphicsInfo->height >> 1) + linkedSprite->y - 8; sprite->subpriority = linkedSprite->subpriority - 1; @@ -845,19 +835,24 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_UnusedGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_GRASS; + sprite->sWaitFldEff = FLDEFF_UNUSED_GRASS; } return 0; } @@ -865,16 +860,15 @@ u32 FldEff_UnusedGrass(void) u32 FldEff_UnusedGrass2(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_GRASS_2; + sprite->sWaitFldEff = FLDEFF_UNUSED_GRASS_2; } return 0; } @@ -882,16 +876,15 @@ u32 FldEff_UnusedGrass2(void) u32 FldEff_UnusedSand(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_SAND; + sprite->sWaitFldEff = FLDEFF_UNUSED_SAND; } return 0; } @@ -899,16 +892,15 @@ u32 FldEff_UnusedSand(void) u32 FldEff_WaterSurfacing(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_WATER_SURFACING; + sprite->sWaitFldEff = FLDEFF_WATER_SURFACING; } return 0; } @@ -933,18 +925,15 @@ void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 delay) u32 FldEff_Ash(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->sX = gFieldEffectArguments[0]; @@ -998,27 +987,30 @@ static void UpdateAshFieldEffect_End(struct Sprite *sprite) #undef sDelay // Sprite data for FLDEFF_SURF_BLOB -#define tBitfield data[0] -#define tPlayerOffset data[1] -#define tPlayerObjId data[2] - +#define sBitfield data[0] +#define sPlayerOffset data[1] +#define sPlayerObjId data[2] +#define sVelocity data[3] +#define sTimer data[4] +#define sIntervalIdx data[5] +#define sPrevX data[6] +#define sPrevY data[7] u32 FldEff_SurfBlob(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 150); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.paletteNum = 0; - sprite->tPlayerObjId = gFieldEffectArguments[2]; - sprite->data[3] = -1; - sprite->data[6] = -1; - sprite->data[7] = -1; + sprite->sPlayerObjId = gFieldEffectArguments[2]; + sprite->sVelocity = -1; + sprite->sPrevX = -1; + sprite->sPrevY = -1; } FieldEffectActiveListRemove(FLDEFF_SURF_BLOB); return spriteId; @@ -1027,43 +1019,40 @@ u32 FldEff_SurfBlob(void) void SetSurfBlob_BobState(u8 spriteId, u8 state) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (state & 0xF); + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF) | (state & 0xF); } void SetSurfBlob_DontSyncAnim(u8 spriteId, bool8 dontSync) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((dontSync & 0xF) << 4); + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF0) | ((dontSync & 0xF) << 4); } void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((hasOffset & 0xF) << 8); - gSprites[spriteId].tPlayerOffset = offset; + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF00) | ((hasOffset & 0xF) << 8); + gSprites[spriteId].sPlayerOffset = offset; } static u8 GetSurfBlob_BobState(struct Sprite *sprite) { - return sprite->data[0] & 0xF; + return sprite->sBitfield & 0xF; } // Never TRUE static u8 GetSurfBlob_DontSyncAnim(struct Sprite *sprite) { - return (sprite->data[0] & 0xF0) >> 4; + return (sprite->sBitfield & 0xF0) >> 4; } static u8 GetSurfBlob_HasPlayerOffset(struct Sprite *sprite) { - return (sprite->data[0] & 0xF00) >> 8; + return (sprite->sBitfield & 0xF00) >> 8; } void UpdateSurfBlobFieldEffect(struct Sprite *sprite) { - struct ObjectEvent *playerObj; - struct Sprite *playerSprite; - - playerObj = &gObjectEvents[sprite->tPlayerObjId]; - playerSprite = &gSprites[playerObj->spriteId]; + struct ObjectEvent *playerObj = &gObjectEvents[sprite->sPlayerObjId]; + struct Sprite *playerSprite = &gSprites[playerObj->spriteId]; SynchroniseSurfAnim(playerObj, sprite); SynchroniseSurfPosition(playerObj, sprite); UpdateBobbingEffect(playerObj, playerSprite, sprite); @@ -1096,17 +1085,19 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObj, struct Sprite *sprit s16 y = playerObj->currentCoords.y; s32 spriteY = sprite->y2; - if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7])) + if (spriteY == 0 && (x != sprite->sPrevX || y != sprite->sPrevY)) { - sprite->data[5] = spriteY; - sprite->data[6] = x; - sprite->data[7] = y; - for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7]) + // Player is moving while surfing, update position. + sprite->sIntervalIdx = 0; + sprite->sPrevX = x; + sprite->sPrevY = y; + for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->sPrevX, y = sprite->sPrevY) { MoveCoords(i, &x, &y); if (MapGridGetElevationAt(x, y) == 3) { - sprite->data[5]++; + // While dismounting the surf blob bobs at a slower rate + sprite->sIntervalIdx++; break; } } @@ -1115,46 +1106,54 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObj, struct Sprite *sprit static void UpdateBobbingEffect(struct ObjectEvent *playerObj, struct Sprite *playerSprite, struct Sprite *sprite) { - u16 intervals[] = {3, 7}; + // The frame interval at which to update the blob's y movement. + // Normally every 4th frame, but every 8th frame while dismounting. + u16 intervals[] = {0x3, 0x7}; + u8 bobState = GetSurfBlob_BobState(sprite); if (bobState != BOB_NONE) { - // Update bobbing position of surf blob - if (((u16)(++sprite->data[4]) & intervals[sprite->data[5]]) == 0) - { - sprite->y2 += sprite->data[3]; - } - if ((sprite->data[4] & 15) == 0) - { - sprite->data[3] = -sprite->data[3]; - } + // Update vertical position of surf blob + if (((u16)(++sprite->sTimer) & intervals[sprite->sIntervalIdx]) == 0) + sprite->y2 += sprite->sVelocity; + + // Reverse bob direction + if ((sprite->sTimer & 15) == 0) + sprite->sVelocity = -sprite->sVelocity; + if (bobState != BOB_JUST_MON) { - // Update bobbing position of player + // Update vertical position of player if (!GetSurfBlob_HasPlayerOffset(sprite)) playerSprite->y2 = sprite->y2; else - playerSprite->y2 = sprite->tPlayerOffset + sprite->y2; + playerSprite->y2 = sprite->sPlayerOffset + sprite->y2; sprite->x = playerSprite->x; sprite->y = playerSprite->y + 8; } } } +#undef sBitfield +#undef sPlayerOffset +#undef sPlayerObjId +#undef sVelocity +#undef sTimer +#undef sIntervalIdx +#undef sPrevX +#undef sPrevY + #define sSpriteId data[0] #define sBobY data[1] #define sTimer data[2] u8 StartUnderwaterSurfBlobBobbing(u8 blobSpriteId) { - u8 spriteId; - struct Sprite *sprite; - // Create a dummy sprite with its own callback // that tracks the actual surf blob sprite and // makes it bob up and down underwater - spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); - sprite = &gSprites[spriteId]; + u8 spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); + struct Sprite *sprite = &gSprites[spriteId]; sprite->callback = SpriteCB_UnderwaterSurfBlob; sprite->invisible = TRUE; sprite->sSpriteId = blobSpriteId; @@ -1164,17 +1163,14 @@ u8 StartUnderwaterSurfBlobBobbing(u8 blobSpriteId) static void SpriteCB_UnderwaterSurfBlob(struct Sprite *sprite) { - struct Sprite *blobSprite; + struct Sprite *blobSprite = &gSprites[sprite->sSpriteId]; - blobSprite = &gSprites[sprite->sSpriteId]; + // Update vertical position of surf blob if (((sprite->sTimer++) & 3) == 0) - { blobSprite->y2 += sprite->sBobY; - } + // Reverse direction if ((sprite->sTimer & 15) == 0) - { sprite->sBobY = -sprite->sBobY; - } } #undef sSpriteId @@ -1184,43 +1180,43 @@ static void SpriteCB_UnderwaterSurfBlob(struct Sprite *sprite) u32 FldEff_Dust(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_GROUND_IMPACT_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_DUST; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_DUST; } return 0; } +// Sprite data for FLDEFF_SAND_PILE +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_SandPile(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; + sprite->sPrevY = gSprites[objectEvent->spriteId].y; sprite->y2 = (graphicsInfo->height >> 1) - 2; SeekSpriteAnim(sprite, 2); } @@ -1230,81 +1226,85 @@ u32 FldEff_SandPile(void) void UpdateSandPileFieldEffect(struct Sprite *sprite) { u8 objectEventId; - s16 x; - s16 y; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inSandPile) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inSandPile) { FieldEffectStop(sprite, FLDEFF_SAND_PILE); } else { - y = gSprites[gObjectEvents[objectEventId].spriteId].y; - x = gSprites[gObjectEvents[objectEventId].spriteId].x; - if (x != sprite->data[3] || y != sprite->data[4]) + s16 parentY = gSprites[gObjectEvents[objectEventId].spriteId].y; + s16 parentX = gSprites[gObjectEvents[objectEventId].spriteId].x; + if (parentX != sprite->sPrevX || parentY != sprite->sPrevY) { - sprite->data[3] = x; - sprite->data[4] = y; + sprite->sPrevX = parentX; + sprite->sPrevY = parentY; if (sprite->animEnded) - { StartSpriteAnim(sprite, 0); - } } - sprite->x = x; - sprite->y = y; + sprite->x = parentX; + sprite->y = parentY; sprite->subpriority = gSprites[gObjectEvents[objectEventId].spriteId].subpriority; UpdateObjectEventSpriteInvisibility(sprite, FALSE); } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_Bubbles(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 82); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; } return 0; } +#define sY data[0] + void UpdateBubblesFieldEffect(struct Sprite *sprite) { - sprite->data[0] += 0x80; - sprite->data[0] &= 0x100; - sprite->y -= sprite->data[0] >> 8; + // Move up 1 every other frame. + sprite->sY += ((1 << 8) / 2); + sprite->sY &= (1 << 8); + sprite->y -= sprite->sY >> 8; UpdateObjectEventSpriteInvisibility(sprite, FALSE); if (sprite->invisible || sprite->animEnded) - { FieldEffectStop(sprite, FLDEFF_BUBBLES); - } } +#undef sY + u32 FldEff_BerryTreeGrowthSparkle(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->oam.paletteNum = 5; - sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; + sprite->sWaitFldEff = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; } return 0; } // Sprite data for FLDEFF_TREE_DISGUISE / FLDEFF_MOUNTAIN_DISGUISE / FLDEFF_SAND_DISGUISE #define sState data[0] +#define sFldEff data[1] #define sLocalId data[2] #define sMapNum data[3] #define sMapGroup data[4] @@ -1328,7 +1328,6 @@ u32 ShowSandDisguiseFieldEffect(void) static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) { u8 spriteId; - struct Sprite *sprite; if (TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId)) { @@ -1338,7 +1337,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[fldEffObj], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled ++; sprite->oam.paletteNum = paletteNum; sprite->sFldEff = fldEff; @@ -1405,6 +1404,7 @@ bool8 UpdateRevealDisguise(struct ObjectEvent *objectEvent) } #undef sState +#undef sFldEff #undef sLocalId #undef sMapNum #undef sMapGroup @@ -1421,7 +1421,7 @@ u32 FldEff_Sparkle(void) gFieldEffectArguments[0] += MAP_OFFSET; gFieldEffectArguments[1] += MAP_OFFSET; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 82); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = gFieldEffectArguments[2]; @@ -1449,7 +1449,9 @@ void UpdateSparkleFieldEffect(struct Sprite *sprite) #undef sEndTimer #define sTimer data[0] +#define sMoveTimer data[1] #define sState data[2] +#define sVelocity data[3] #define sStartY data[4] #define sCounter data[5] #define sAnimCounter data[6] @@ -1615,41 +1617,44 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) if (sprite->sState == 1) { - if ((sprite->data[1] & 7) == 0) - sprite->y2 += sprite->data[3]; - if ((sprite->data[1] & 15) == 0) - sprite->data[3] = -sprite->data[3]; - sprite->data[1]++; + // Update movement + if ((sprite->sMoveTimer & 7) == 0) + sprite->y2 += sprite->sVelocity; + // Reverse direction + if ((sprite->sMoveTimer & 15) == 0) + sprite->sVelocity = -sprite->sVelocity; + sprite->sMoveTimer++; } sprite->sTimer++; } #undef sTimer +#undef sMoveTimer #undef sState #undef sStartY +#undef sVelocity #undef sCounter #undef sAnimCounter #undef sAnimState -// Used by FLDEFF_JUMP_TALL_GRASS and FLDEFF_JUMP_LONG_GRASS void UpdateJumpImpactEffect(struct Sprite *sprite) { if (sprite->animEnded) { - FieldEffectStop(sprite, sprite->sFldEff); + FieldEffectStop(sprite, sprite->sJumpFldEff); } else { UpdateObjectEventSpriteInvisibility(sprite, FALSE); - SetObjectSubpriorityByElevation(sprite->sElevation, sprite, 0); + SetObjectSubpriorityByElevation(sprite->sJumpElevation, sprite, 0); } } void WaitFieldEffectSpriteAnim(struct Sprite *sprite) { if (sprite->animEnded) - FieldEffectStop(sprite, sprite->data[0]); + FieldEffectStop(sprite, sprite->sWaitFldEff); else UpdateObjectEventSpriteInvisibility(sprite, FALSE); } @@ -1658,8 +1663,6 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevatio { u8 i; s16 var, xhi, lyhi, yhi, ylo; - const struct ObjectEventGraphicsInfo UNUSED *graphicsInfo; - struct Sprite *linkedSprite; SetObjectSubpriorityByElevation(elevation, sprite, subpriority); for (i = 0; i < OBJECT_EVENTS_COUNT; i ++) @@ -1667,8 +1670,9 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevatio struct ObjectEvent *objectEvent = &gObjectEvents[i]; if (objectEvent->active) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - linkedSprite = &gSprites[objectEvent->spriteId]; + const struct ObjectEventGraphicsInfo UNUSED *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; + xhi = sprite->x + sprite->centerToCornerVecX; var = sprite->x - sprite->centerToCornerVecX; if (xhi < linkedSprite->x && var > linkedSprite->x) diff --git a/src/field_specials.c b/src/field_specials.c index c91f458ed1..13b8ae9daf 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -964,8 +964,8 @@ void FieldShowRegionMap(void) static bool8 IsPlayerInFrontOfPC(void) { - u16 x, y; - u16 tileInFront; + s16 x, y; + u32 tileInFront; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); tileInFront = MapGridGetMetatileIdAt(x, y); @@ -2201,6 +2201,8 @@ void ShowFrontierManiacMessage(void) else winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]; break; + default: + return; } for (i = 0; i < FRONTIER_MANIAC_MESSAGE_COUNT - 1 && sFrontierManiacStreakThresholds[facility][i] < winStreak; i++); diff --git a/src/field_weather.c b/src/field_weather.c index 80f32a14ca..0f0b137d9a 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -47,9 +47,9 @@ static bool8 LightenSpritePaletteInFog(u8); static void BuildColorMaps(void); static void UpdateWeatherColorMap(void); static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex); -static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex, u8 blendCoeff, u16 blendColor); -static void ApplyDroughtColorMapWithBlend(s8 colorMapIndex, u8 blendCoeff, u16 blendColor); -static void ApplyFogBlend(u8 blendCoeff, u16 blendColor); +static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex, u8 blendCoeff, u32 blendColor); +static void ApplyDroughtColorMapWithBlend(s8 colorMapIndex, u8 blendCoeff, u32 blendColor); +static void ApplyFogBlend(u8 blendCoeff, u32 blendColor); static bool8 FadeInScreen_RainShowShade(void); static bool8 FadeInScreen_Drought(void); static bool8 FadeInScreen_FogHorizontal(void); @@ -544,7 +544,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) } } -static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex, u8 blendCoeff, u16 blendColor) +static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex, u8 blendCoeff, u32 blendColor) { u16 palOffset; u16 curPalIndex; @@ -595,7 +595,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap } } -static void ApplyDroughtColorMapWithBlend(s8 colorMapIndex, u8 blendCoeff, u16 blendColor) +static void ApplyDroughtColorMapWithBlend(s8 colorMapIndex, u8 blendCoeff, u32 blendColor) { struct RGBColor color; u8 rBlend; @@ -650,7 +650,7 @@ static void ApplyDroughtColorMapWithBlend(s8 colorMapIndex, u8 blendCoeff, u16 b } } -static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) +static void ApplyFogBlend(u8 blendCoeff, u32 blendColor) { struct RGBColor color; u8 rBlend; diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 55a4450f12..325979f86a 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -938,7 +938,7 @@ static void InitSnowflakeSpriteMovement(struct Sprite *sprite) sprite->tFallCounter = 0; } -static void WaitSnowflakeSprite(struct Sprite *sprite) +static void UNUSED WaitSnowflakeSprite(struct Sprite *sprite) { if (++gWeatherPtr->snowflakeTimer > 18) { @@ -953,7 +953,6 @@ static void WaitSnowflakeSprite(struct Sprite *sprite) static void UpdateSnowflakeSprite(struct Sprite *sprite) { s16 x; - s16 y; sprite->tPosY += sprite->tDeltaY; sprite->y = sprite->tPosY >> 7; diff --git a/src/fieldmap.c b/src/fieldmap.c index 4f94b0ad22..5e8ffec4aa 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -25,7 +25,7 @@ struct ConnectionFlags u8 east:1; }; -EWRAM_DATA static u16 ALIGNED(4) sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; +EWRAM_DATA u16 ALIGNED(4) sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; EWRAM_DATA struct Camera gCamera = {0}; EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; @@ -48,16 +48,12 @@ static const struct MapConnection *GetIncomingConnection(u8 direction, int x, in static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); -#define GetBorderBlockAt(x, y)({ \ - u16 block; \ - int i; \ - const u16 *border = gMapHeader.mapLayout->border; /* Unused, they read it again below */ \ - \ - i = (x + 1) & 1; \ - i += ((y + 1) & 1) * 2; \ - \ - block = gMapHeader.mapLayout->border[i] | MAPGRID_COLLISION_MASK; \ -}) +static inline u16 GetBorderBlockAt(int x, int y) +{ + int i = (x + 1) & 1; + i += ((y + 1) & 1) * 2; + return gMapHeader.mapLayout->border[i] | MAPGRID_COLLISION_MASK; +} #define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height) @@ -681,7 +677,7 @@ bool8 CameraMove(int x, int y) { DebugPrintfLevel(MGBA_LOG_WARN, "GetIncomingConnection returned an invalid connection inside CameraMove!"); } - + } return gCamera.active; } diff --git a/src/frontier_util.c b/src/frontier_util.c index d138daba4c..df3afcd8a2 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -624,8 +624,28 @@ static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] = const u16 gFrontierBannedSpecies[] = { - SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI, - SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, 0xFFFF + SPECIES_MEW, SPECIES_MEWTWO, + SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI, + SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, +#if P_GEN_4_POKEMON == TRUE + SPECIES_DIALGA, SPECIES_PALKIA, SPECIES_GIRATINA, SPECIES_MANAPHY, SPECIES_PHIONE, SPECIES_DARKRAI, SPECIES_SHAYMIN, SPECIES_ARCEUS, +#endif +#if P_GEN_5_POKEMON == TRUE + SPECIES_VICTINI, SPECIES_RESHIRAM, SPECIES_ZEKROM, SPECIES_KYUREM, SPECIES_KELDEO, SPECIES_MELOETTA, SPECIES_GENESECT, +#endif +#if P_GEN_6_POKEMON == TRUE + SPECIES_XERNEAS, SPECIES_YVELTAL, SPECIES_ZYGARDE, SPECIES_DIANCIE, SPECIES_HOOPA, SPECIES_VOLCANION, +#endif +#if P_GEN_7_POKEMON == TRUE + SPECIES_COSMOG, SPECIES_COSMOEM, SPECIES_SOLGALEO, SPECIES_LUNALA, SPECIES_NECROZMA, SPECIES_MAGEARNA, SPECIES_MARSHADOW, SPECIES_ZERAORA, SPECIES_MELTAN, SPECIES_MELMETAL, +#endif +#if P_GEN_8_POKEMON == TRUE + SPECIES_ZACIAN, SPECIES_ZAMAZENTA, SPECIES_ETERNATUS, SPECIES_CALYREX, SPECIES_ZARUDE, +#endif +#if P_GEN_9_POKEMON == TRUE + SPECIES_KORAIDON, SPECIES_MIRAIDON, +#endif + 0xFFFF }; static const u8 *const sRecordsWindowChallengeTexts[][2] = @@ -1878,38 +1898,23 @@ static void CheckBattleTypeFlag(void) gSpecialVar_Result = FALSE; } +#define SPECIES_PER_LINE 3 + static u8 AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { count++; - switch (count) + if (numBannedMonsCaught == count) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else if (numBannedMonsCaught > count) + StringAppend(gStringVar1, gText_CommaSpace); + if ((count % SPECIES_PER_LINE) == 0) { - case 1: - case 3: - case 5: - case 7: - case 9: - case 11: - if (numBannedMonsCaught == count) - StringAppend(gStringVar1, gText_SpaceAndSpace); - else if (numBannedMonsCaught > count) - StringAppend(gStringVar1, gText_CommaSpace); - break; - case 2: - if (count == numBannedMonsCaught) - StringAppend(gStringVar1, gText_SpaceAndSpace); + if (count == SPECIES_PER_LINE) + StringAppend(gStringVar1, gText_NewLine); else - StringAppend(gStringVar1, gText_CommaSpace); - StringAppend(gStringVar1, gText_NewLine); - break; - default: - if (count == numBannedMonsCaught) - StringAppend(gStringVar1, gText_SpaceAndSpace); - else - StringAppend(gStringVar1, gText_CommaSpace); - StringAppend(gStringVar1, gText_LineBreak); - break; + StringAppend(gStringVar1, gText_LineBreak); } StringAppend(gStringVar1, GetSpeciesName(species)); } @@ -1924,7 +1929,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL if (species == SPECIES_EGG || species == SPECIES_NONE) return; - for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF && gFrontierBannedSpecies[i] != species; i++) + for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF && gFrontierBannedSpecies[i] != GET_BASE_SPECIES_ID(species); i++) ; if (gFrontierBannedSpecies[i] != 0xFFFF) @@ -2034,7 +2039,7 @@ static void CheckPartyIneligibility(void) } else { - if (count & 1) + if (count % SPECIES_PER_LINE == SPECIES_PER_LINE - 1) StringAppend(gStringVar1, gText_LineBreak); else StringAppend(gStringVar1, gText_Space2); @@ -2049,6 +2054,8 @@ static void CheckPartyIneligibility(void) #undef numEligibleMons } +#undef SPECIES_PER_LINE + static void ValidateVisitingTrainer(void) { ValidateEReaderTrainer(); diff --git a/src/graphics.c b/src/graphics.c index 00bcea0564..45c066ad26 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -448,6 +448,15 @@ const u32 gBattleAnimSpritePal_SpinningBall2[] = INCBIN_U32("graphics/battle_ani const u32 gBattleAnimSpriteGfx_WoodHammerHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer_hammer.4bpp.lz"); const u32 gBattleAnimSpritePal_WoodHammerHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer_hammer.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_Snowflakes[] = INCBIN_U32("graphics/battle_anims/sprites/snowflakes.4bpp.lz"); +const u32 gBattleAnimSpritePal_Snowflakes[] = INCBIN_U32("graphics/battle_anims/sprites/snowflakes.gbapal.lz"); + +const u32 gBattleAnimSpriteGfx_SyrupBlob[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_bomb_blob.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_SyrupShell[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_bomb_shell.4bpp.lz"); +const u32 gBattleAnimSpriteGfx_SyrupSplat[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_bomb_splat.4bpp.lz"); +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"); + // old battle interface data, unused const u32 gOldBattleInterfaceGfx[] = INCBIN_U32("graphics/unused/obi1.4bpp.lz"); @@ -1739,41 +1748,6 @@ const u16 gPokedexSearchMenu_Pal[] = INCBIN_U16("graphics/pokedex/search_menu.gb const u32 gPokedexSearchMenu_Gfx[] = INCBIN_U32("graphics/pokedex/search_menu.4bpp.lz"); const u32 gPokedexSearchMenuNational_Tilemap[] = INCBIN_U32("graphics/pokedex/search_menu_national.bin.lz"); const u32 gPokedexSearchMenuHoenn_Tilemap[] = INCBIN_U32("graphics/pokedex/search_menu_hoenn.bin.lz"); -// Pokedex HGSS -#if POKEDEX_PLUS_HGSS == TRUE -const u16 gPokedexPlusHGSS_Default_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_default.gbapal"); -const u16 gPokedexPlusHGSS_National_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_national.gbapal"); -const u16 gPokedexPlusHGSS_MenuSearch_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_menu.gbapal"); -const u16 gPokedexPlusHGSS_SearchResults_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_results.gbapal"); -const u16 gPokedexPlusHGSS_Default_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_default_dark.gbapal"); -const u16 gPokedexPlusHGSS_National_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_national_dark.gbapal"); -const u16 gPokedexPlusHGSS_MenuSearch_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_menu_dark.gbapal"); -const u16 gPokedexPlusHGSS_SearchResults_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_results_dark.gbapal"); -const u32 gPokedexPlusHGSS_MenuList_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_list.4bpp.lz"); -const u32 gPokedexPlusHGSS_MenuList_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_list_DECA.4bpp.lz"); -const u32 gPokedexPlusHGSS_Interface_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_interface.4bpp.lz"); -const u32 gPokedexPlusHGSS_Interface_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_interface_DECA.4bpp.lz"); -const u32 gPokedexPlusHGSS_Menu_1_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu1.4bpp.lz"); -const u32 gPokedexPlusHGSS_Menu_2_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu2.4bpp.lz"); -const u32 gPokedexPlusHGSS_Menu_3_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu3.4bpp.lz"); -const u32 gPokedexPlusHGSS_MenuSearch_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_search.4bpp.lz"); -const u32 gPokedexPlusHGSS_MenuSearch_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_search_DECA.4bpp.lz"); -const u32 gPokedexPlusHGSS_StartMenuMain_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_start_menu.bin.lz"); -const u32 gPokedexPlusHGSS_StartMenuSearchResults_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_start_menu_search_results.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/SelectBar.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/pokedex/hgss/SelectBar_clear.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenList_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_list_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenListUnderlay_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_list_screen_underlay.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenInfo_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_info_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenStats_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_stats_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenEvolution_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_evo_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenEvolution_Tilemap_PE[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_evo_screen_PE.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenForms_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_forms_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenCry_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_cry_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenSize_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_size_screen.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenSearchHoenn_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_search_screen_hoenn.bin.lz"); -const u32 gPokedexPlusHGSS_ScreenSearchNational_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_search_screen_national.bin.lz"); -#endif const u16 gSummaryScreen_MoveEffect_Battle_Tilemap[] = INCBIN_U16("graphics/summary_screen/effect_battle.bin"); const u16 gSummaryScreen_MoveEffect_Contest_Tilemap[] = INCBIN_U16("graphics/summary_screen/effect_contest.bin"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index bfb4e4c9d8..caa497e395 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1478,7 +1478,7 @@ static void UpdateDomeConfetti(struct ConfettiUtil *util) static void Task_DoDomeConfetti(u8 taskId) { u32 id = 0; - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (tState) { diff --git a/src/item_menu.c b/src/item_menu.c index 2248e2836f..8067742579 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2098,11 +2098,17 @@ static void Task_ItemContext_Sell(u8 taskId) } } +#if I_SELL_VALUE_FRACTION >= GEN_9 +#define ITEM_SELL_FACTOR 4 +#else +#define ITEM_SELL_FACTOR 2 +#endif + static void DisplaySellItemPriceAndConfirm(u8 taskId) { s16 *data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems); } @@ -2127,7 +2133,7 @@ static void InitSellHowManyInput(u8 taskId) s16 *data = gTasks[taskId].data; u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE); - PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); + PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount); DisplayCurrentMoneyWindow(); gTasks[taskId].func = Task_ChooseHowManyToSell; } @@ -2138,7 +2144,7 @@ static void Task_ChooseHowManyToSell(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { - PrintItemSoldAmount(gBagMenu->windowIds[ITEMWIN_QUANTITY_WIDE], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); + PrintItemSoldAmount(gBagMenu->windowIds[ITEMWIN_QUANTITY_WIDE], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount); } else if (JOY_NEW(A_BUTTON)) { @@ -2162,7 +2168,7 @@ static void ConfirmSell(u8 taskId) s16 *data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar2); - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem); } @@ -2175,7 +2181,7 @@ static void SellItem(u8 taskId) PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, tItemCount); - AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); + AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount); DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); UpdatePocketItemList(gBagPosition.pocket); UpdatePocketListPosition(gBagPosition.pocket); diff --git a/src/item_use.c b/src/item_use.c index eb3565fec6..602bda27af 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -795,6 +795,12 @@ void ItemUseOutOfBattle_AbilityPatch(u8 taskId) SetUpItemUseCallback(taskId); } +void ItemUseOutOfBattle_ResetEVs(u8 taskId) +{ + gItemUseCB = ItemUseCB_ResetEVs; + SetUpItemUseCallback(taskId); +} + void ItemUseOutOfBattle_ReduceEV(u8 taskId) { gItemUseCB = ItemUseCB_ReduceEV; @@ -1051,10 +1057,8 @@ static u32 GetBallThrowableState(void) return BALL_THROW_UNABLE_TWO_MONS; else if (IsPlayerPartyAndPokemonStorageFull() == TRUE) return BALL_THROW_UNABLE_NO_ROOM; -#if B_SEMI_INVULNERABLE_CATCH >= GEN_4 - else if (gStatuses3[GetCatchingBattler()] & STATUS3_SEMI_INVULNERABLE) + else if (B_SEMI_INVULNERABLE_CATCH >= GEN_4 && (gStatuses3[GetCatchingBattler()] & STATUS3_SEMI_INVULNERABLE)) return BALL_THROW_UNABLE_SEMI_INVULNERABLE; -#endif else if (FlagGet(B_FLAG_NO_CATCHING)) return BALL_THROW_UNABLE_DISABLED_FLAG; @@ -1093,14 +1097,12 @@ void ItemUseInBattle_PokeBall(u8 taskId) else DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); break; -#if B_SEMI_INVULNERABLE_CATCH >= GEN_4 case BALL_THROW_UNABLE_SEMI_INVULNERABLE: if (!InBattlePyramid()) DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_SemiInvulnerable, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_SemiInvulnerable, Task_CloseBattlePyramidBagMessage); break; -#endif case BALL_THROW_UNABLE_DISABLED_FLAG: if (!InBattlePyramid()) DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_Disabled, CloseItemMessage); @@ -1110,30 +1112,6 @@ void ItemUseInBattle_PokeBall(u8 taskId) } } -static void Task_CloseStatIncreaseMessage(u8 taskId) -{ - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - if (!InBattlePyramid()) - Task_FadeAndCloseBagMenu(taskId); - else - CloseBattlePyramidBag(taskId); - } -} - -static void Task_UseStatIncreaseItem(u8 taskId) -{ - if(++gTasks[taskId].data[8] > 7) - { - PlaySE(SE_USE_ITEM); - RemoveBagItem(gSpecialVar_ItemId, 1); - if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); - else - DisplayItemMessageInBattlePyramid(taskId, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); - } -} - static void ItemUseInBattle_ShowPartyMenu(u8 taskId) { if (!InBattlePyramid()) @@ -1210,12 +1188,10 @@ static bool32 CannotUseBagBattleItem(u16 itemId) failStr = gText_BoxFull; cannotUse++; break; - #if B_SEMI_INVULNERABLE_CATCH >= GEN_4 case BALL_THROW_UNABLE_SEMI_INVULNERABLE: failStr = sText_CantThrowPokeBall_SemiInvulnerable; cannotUse++; break; - #endif case BALL_THROW_UNABLE_DISABLED_FLAG: failStr = sText_CantThrowPokeBall_Disabled; cannotUse++; @@ -1310,16 +1286,62 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) void ItemUseOutOfBattle_FormChange(u8 taskId) { - gItemUseCB = ItemUseCB_FormChange; - gTasks[taskId].data[0] = FALSE; - SetUpItemUseCallback(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_FormChange; + gTasks[taskId].data[0] = FALSE; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8 taskId) { - gItemUseCB = ItemUseCB_FormChange_ConsumedOnUse; - gTasks[taskId].data[0] = TRUE; - SetUpItemUseCallback(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_FormChange_ConsumedOnUse; + gTasks[taskId].data[0] = TRUE; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } +} + +void ItemUseOutOfBattle_RotomCatalog(u8 taskId) +{ + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_RotomCatalog; + gTasks[taskId].data[0] = TRUE; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } +} + +void ItemUseOutOfBattle_ZygardeCube(u8 taskId) +{ + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_ZygardeCube; + gTasks[taskId].data[0] = TRUE; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } void Task_UseHoneyOnField(u8 taskId) diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 828d6450bc..152bb716e9 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -134,8 +134,6 @@ static const char str_checkMbootLL[] = "RFU-MBOOT"; u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { u16 i; - u16 *dst; - const u16 *src; u16 buffByteSizeMax; // is in EWRAM? @@ -182,11 +180,13 @@ u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p } // rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy #if LIBRFU_VERSION < 1026 - src = (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1); - dst = gRfuFixed->fastCopyBuffer; +{ + const u16 *src = (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1); + u16 *dst = gRfuFixed->fastCopyBuffer; buffByteSizeMax = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16); while (buffByteSizeMax-- != 0) *dst++ = *src++; +} #else COPY( (uintptr_t)&rfu_STC_fastCopy & ~1, @@ -591,19 +591,17 @@ static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult) static void rfu_STC_readChildList(void) { - u32 stwiParam; u8 numSlots = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; u8 *data_p; - u8 i; u8 bm_slot_id; -#if LIBRFU_VERSION < 1026 - u8 true_slots[RFU_CHILD_MAX]; -#endif #if LIBRFU_VERSION < 1026 + u8 true_slots[RFU_CHILD_MAX]; + if (numSlots != 0) { - stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + u8 i; + u32 stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_LinkStatusREQ(); if (STWI_poll_CommandEnd() == 0) @@ -1411,7 +1409,7 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, struct RfuSlotStatusUNI *slotStatus_UNI; struct RfuSlotStatusNI *slotStatus_NI; - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + if (gRfuLinkStatus->parentChild > MODE_PARENT) return ERR_MODE_NOT_CONNECTED; if (!(bmSendSlot & 0xF)) return ERR_SLOT_NO; diff --git a/src/m4a.c b/src/m4a.c index 7774d09cba..b80a357974 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1,5 +1,6 @@ #include #include "gba/m4a_internal.h" +#include "global.h" extern const u8 gCgb3Vol[]; diff --git a/src/main_menu.c b/src/main_menu.c index b0f68193a6..c7295bd863 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -2169,7 +2169,7 @@ static void MainMenu_FormatSavegamePokedex(void) dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex); AddTextPrinterParameterized3(2, FONT_NORMAL, 0, 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4); - ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 4); AddTextPrinterParameterized3(2, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, str, 100), 33, sTextColor_MenuInfo, TEXT_SKIP_DRAW, str); } } diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 9c9c85cf59..75e70dafc1 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -205,22 +205,45 @@ static bool8 UNUSED StartMenu_ShowMapNamePopup(void) return TRUE; } +// States and data defines for Task_MapNamePopUpWindow +enum { + STATE_SLIDE_IN, + STATE_WAIT, + STATE_SLIDE_OUT, + STATE_UNUSED, + STATE_ERASE, + STATE_END, + STATE_PRINT, // For some reason the first state is numerically last. +}; + +#define POPUP_OFFSCREEN_Y 40 +#define POPUP_SLIDE_SPEED 2 + +#define tState data[0] +#define tOnscreenTimer data[1] +#define tYOffset data[2] +#define tIncomingPopUp data[3] +#define tPrintTimer data[4] + void ShowMapNamePopup(void) { if (FlagGet(FLAG_HIDE_MAP_NAME_POPUP) != TRUE) { if (!FuncIsActiveTask(Task_MapNamePopUpWindow)) { + // New pop up window sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90); - SetGpuReg(REG_OFFSET_BG0VOFS, 40); - gTasks[sPopupTaskId].data[0] = 6; - gTasks[sPopupTaskId].data[2] = 40; + SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y); + gTasks[sPopupTaskId].tState = STATE_PRINT; + gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y; } else { - if (gTasks[sPopupTaskId].data[0] != 2) - gTasks[sPopupTaskId].data[0] = 2; - gTasks[sPopupTaskId].data[3] = 1; + // There's already a pop up window running. + // Hurry the old pop up offscreen so the new one can appear. + if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT) + gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT; + gTasks[sPopupTaskId].tIncomingPopUp = TRUE; } } } @@ -229,61 +252,65 @@ static void Task_MapNamePopUpWindow(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { - case 6: - task->data[4]++; - if (task->data[4] > 30) + case STATE_PRINT: + // Wait, then create and print the pop up window + if (++task->tPrintTimer > 30) { - task->data[0] = 0; - task->data[4] = 0; + task->tState = STATE_SLIDE_IN; + task->tPrintTimer = 0; ShowMapNamePopUpWindow(); } break; - case 0: - task->data[2] -= 2; - if (task->data[2] <= 0 ) + case STATE_SLIDE_IN: + // Slide the window onscreen. + task->tYOffset -= POPUP_SLIDE_SPEED; + if (task->tYOffset <= 0 ) { - task->data[2] = 0; - task->data[0] = 1; + task->tYOffset = 0; + task->tState = STATE_WAIT; gTasks[sPopupTaskId].data[1] = 0; } break; - case 1: - task->data[1]++; - if (task->data[1] > 120 ) + case STATE_WAIT: + // Wait while the window is fully onscreen. + if (++task->tOnscreenTimer > 120) { - task->data[1] = 0; - task->data[0] = 2; + task->tOnscreenTimer = 0; + task->tState = STATE_SLIDE_OUT; } break; - case 2: - task->data[2] += 2; - if (task->data[2] > 39) + case STATE_SLIDE_OUT: + // Slide the window offscreen. + task->tYOffset += POPUP_SLIDE_SPEED; + if (task->tYOffset >= POPUP_OFFSCREEN_Y) { - task->data[2] = 40; - if (task->data[3]) + task->tYOffset = POPUP_OFFSCREEN_Y; + if (task->tIncomingPopUp) { - task->data[0] = 6; - task->data[4] = 0; - task->data[3] = 0; + // A new pop up window is incoming, + // return to the first state to show it. + task->tState = STATE_PRINT; + task->tPrintTimer = 0; + task->tIncomingPopUp = FALSE; } else { - task->data[0] = 4; + task->tState = STATE_ERASE; return; } } break; - case 4: + case STATE_ERASE: ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); - task->data[0] = 5; + task->tState = STATE_END; break; - case 5: + case STATE_END: HideMapNamePopUpWindow(); return; } - SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); + SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset); } void HideMapNamePopUpWindow(void) diff --git a/src/match_call.c b/src/match_call.c index 4d45b9b436..0c1176486e 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -2074,8 +2074,8 @@ void BufferPokedexRatingForMatchCall(u8 *destStr) *(str++) = CHAR_PROMPT_CLEAR; numSeen = GetNationalPokedexCount(FLAG_GET_SEEN); numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); - ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(str, gBirchDexRatingText_OnANationwideBasis); } diff --git a/src/menu.c b/src/menu.c index 2d3a8a8b2f..a6bd9ae2bc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -67,7 +67,6 @@ static EWRAM_DATA u16 sTileNum = 0; static EWRAM_DATA u8 sPaletteNum = 0; static EWRAM_DATA u8 sYesNoWindowId = 0; static EWRAM_DATA u8 sHofPCTopBarWindowId = 0; -static EWRAM_DATA u16 sFiller = 0; // needed to align static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE}; static EWRAM_DATA u16 sTempTileDataBufferIdx = 0; static EWRAM_DATA void *sTempTileDataBuffer[0x20] = {NULL}; @@ -1589,7 +1588,7 @@ void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *menuActi u32 i; for (i = 0; i < itemCount; i++) - AddTextPrinterParameterized(windowId, 1, menuActions[i].text, 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, menuActions[i].text, 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(windowId, COPYWIN_GFX); } @@ -1653,7 +1652,7 @@ void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const for (i = 0; i < rows; i++) { for (j = 0; j < columns; j++) - AddTextPrinterParameterized(windowId, 1, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); } CopyWindowToVram(windowId, COPYWIN_GFX); } @@ -1987,7 +1986,7 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) StringExpandPlaceholders(gStringVar4, src); - AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); } static void UNUSED UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) @@ -2122,7 +2121,7 @@ void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) break; case SAVE_MENU_CAUGHT: if (IsNationalPokedexEnabled()) - string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3); + string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 4); else string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3); *string = EOS; diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 456845e868..df3685ecfd 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -588,7 +588,7 @@ static void ConditionGraph_CalcRightHalf(struct ConditionGraph *graph) // No need for conditional, positions on the Beauty line are always above the Cute line ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_CUTE], TRUE, NULL); - // Calculate Cute -> Tough line (includes left scanline because this crosses the halfway point) + // Calculate Cute -> Smart line (includes left scanline because this crosses the halfway point) i = (graph->curPositions[GRAPH_CUTE].y <= graph->curPositions[GRAPH_SMART].y); ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_CUTE], &graph->curPositions[GRAPH_SMART], i, graph->scanlineLeft[0]); diff --git a/src/mini_printf.c b/src/mini_printf.c index 9fb4ecfac9..2a8c6e5cb7 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -328,7 +328,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) break; case 'S' : // preproc encoded string handler ptr = va_arg(va, char*); - len = StringLength(ptr); + len = StringLength((u8*)ptr); if (pad_to > 0) { len = mini_pad(ptr, len, pad_char, pad_to, bf); diff --git a/src/overworld.c b/src/overworld.c index bae1246153..bf2bcf5ace 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -131,7 +131,7 @@ static void UpdateAllLinkPlayers(u16 *, s32); static u8 FlipVerticalAndClearForced(u8, u8); static u8 LinkPlayerGetCollision(u8, u8, s16, s16); static void CreateLinkPlayerSprite(u8, u8); -static void GetLinkPlayerCoords(u8, u16 *, u16 *); +static void GetLinkPlayerCoords(u8, s16 *, s16 *); static u8 GetLinkPlayerFacingDirection(u8); static u8 GetLinkPlayerElevation(u8); static u8 GetLinkPlayerIdAt(s16, s16); @@ -358,9 +358,8 @@ static void (*const sMovementStatusHandler[])(struct LinkPlayerObjectEvent *, st void DoWhiteOut(void) { RunScriptImmediately(EventScript_WhiteOut); - #if B_WHITEOUT_MONEY == GEN_3 - SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2); - #endif + if (B_WHITEOUT_MONEY == GEN_3) + SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2); HealPlayerParty(); Overworld_ResetStateAfterWhiteOut(); SetWarpDestinationToLastHealLocation(); @@ -425,9 +424,8 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); -#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE - Overworld_ResetBattleFlagsAndVars(); -#endif + if (B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE) + Overworld_ResetBattleFlagsAndVars(); // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) @@ -3016,7 +3014,7 @@ static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId) return objEvent->spriteId; } -static void GetLinkPlayerCoords(u8 linkPlayerId, u16 *x, u16 *y) +static void GetLinkPlayerCoords(u8 linkPlayerId, s16 *x, s16 *y) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; diff --git a/src/palette.c b/src/palette.c index f19ac07cf6..fccff062a8 100644 --- a/src/palette.c +++ b/src/palette.c @@ -62,7 +62,6 @@ ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; -static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; diff --git a/src/party_menu.c b/src/party_menu.c old mode 100755 new mode 100644 index 7f69fd5411..798f9541d2 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -94,6 +94,14 @@ enum { MENU_TRADE1, MENU_TRADE2, MENU_TOSS, + MENU_CATALOG_BULB, + MENU_CATALOG_OVEN, + MENU_CATALOG_WASHING, + MENU_CATALOG_FRIDGE, + MENU_CATALOG_FAN, + MENU_CATALOG_MOWER, + MENU_CHANGE_FORM, + MENU_CHANGE_ABILITY, MENU_FIELD_MOVES }; @@ -113,6 +121,8 @@ enum { ACTIONS_TRADE, ACTIONS_SPIN_TRADE, ACTIONS_TAKEITEM_TOSS, + ACTIONS_ROTOM_CATALOG, + ACTIONS_ZYGARDE_CUBE, }; // In CursorCb_FieldMove, field moves <= FIELD_MOVE_WATERFALL are assumed to line up with the badge flags. @@ -228,7 +238,6 @@ static EWRAM_DATA u16 *sSlot1TilemapBuffer = 0; // for switching party slots static EWRAM_DATA u16 *sSlot2TilemapBuffer = 0; // EWRAM_DATA u8 gSelectedOrderFromParty[MAX_FRONTIER_PARTY_SIZE] = {0}; static EWRAM_DATA u16 sPartyMenuItemId = 0; -static EWRAM_DATA u16 sUnused = 0; EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on static EWRAM_DATA u8 sInitialLevel = 0; static EWRAM_DATA u8 sFinalLevel = 0; @@ -476,6 +485,14 @@ static void CursorCb_Trade1(u8); static void CursorCb_Trade2(u8); static void CursorCb_Toss(u8); static void CursorCb_FieldMove(u8); +static void CursorCb_CatalogBulb(u8); +static void CursorCb_CatalogOven(u8); +static void CursorCb_CatalogWashing(u8); +static void CursorCb_CatalogFridge(u8); +static void CursorCb_CatalogFan(u8); +static void CursorCb_CatalogMower(u8); +static void CursorCb_ChangeForm(u8); +static void CursorCb_ChangeAbility(u8); static bool8 SetUpFieldMove_Surf(void); static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); @@ -2499,6 +2516,9 @@ void DisplayPartyMenuStdMessage(u32 stringId) case PARTY_MSG_ALREADY_HOLDING_ONE: *windowPtr = AddWindow(&sAlreadyHoldingOneMsgWindowTemplate); break; + case PARTY_MSG_WHICH_APPLIANCE: + *windowPtr = AddWindow(&sOrderWhichApplianceMsgWindowTemplate); + break; default: *windowPtr = AddWindow(&sDefaultPartyMsgWindowTemplate); break; @@ -2555,6 +2575,12 @@ static u8 DisplaySelectionWindow(u8 windowType) case SELECTWINDOW_MAIL: window = sMailReadTakeWindowTemplate; break; + case SELECTWINDOW_CATALOG: + window = sCatalogSelectWindowTemplate; + break; + case SELECTWINDOW_ZYGARDECUBE: + window = sZygardeCubeSelectWindowTemplate; + break; default: // SELECTWINDOW_MOVES window = sMoveSelectWindowTemplate; break; @@ -4520,7 +4546,11 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) PlaySE(SE_SELECT); DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = task; + return; } else { @@ -4552,7 +4582,10 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) GetMedicineItemEffectMessage(item, oldStatus); DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(item, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = task; } } } @@ -4754,7 +4787,10 @@ static void Task_DisplayHPRestoredMessage(u8 taskId) DisplayPartyMenuMessage(gStringVar4, FALSE); ScheduleBgCopyTilemapToVram(2); HandleBattleLowHpMusicChange(); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } static void Task_ClosePartyMenuAfterText(u8 taskId) @@ -4767,6 +4803,33 @@ static void Task_ClosePartyMenuAfterText(u8 taskId) } } +void ItemUseCB_ResetEVs(u8 taskId, TaskFunc task) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = gSpecialVar_ItemId; + bool8 cannotUseEffect = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); + + if (cannotUseEffect) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } + else + { + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_USE_ITEM); + RemoveBagItem(item, 1); + GetMonNickname(mon, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_BasePointsResetToZero); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } +} + void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; @@ -5159,7 +5222,10 @@ static void CB2_ReturnToPartyMenuWhileLearningMove(void) { if (sFinalLevel != 0) SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sFinalLevel); // to avoid displaying incorrect level - InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) == ItemUseOutOfBattle_RareCandy && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_USE_ITEM, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); + else + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); } static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId) @@ -5257,7 +5323,7 @@ static void Task_TryLearningNextMoveAfterText(u8 taskId) Task_TryLearningNextMove(taskId); } -static void DisplayExpPoints(u8 taskId, TaskFunc task, u8 holdEffectParam) +static void UNUSED DisplayExpPoints(u8 taskId, TaskFunc task, u8 holdEffectParam) { PlaySE(SE_USE_ITEM); ConvertIntToDecimalStringN(gStringVar2, sExpCandyExperienceTable[holdEffectParam], STR_CONV_MODE_LEFT_ALIGN, 3); @@ -5390,7 +5456,7 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16*) sPartyMenuInternal->data; arrayPtr[12] = CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); @@ -5400,7 +5466,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId) { - s16 *arrayPtr = sPartyMenuInternal->data; + u16 *arrayPtr = (u16*) sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); CopyWindowToVram(arrayPtr[12], COPYWIN_GFX); @@ -5469,6 +5535,12 @@ static void Task_TryLearningNextMove(u8 taskId) } } +static void CB2_ReturnToPartyMenuUsingRareCandy(void) +{ + gItemUseCB = ItemUseCB_RareCandy; + SetMainCallback2(CB2_ShowPartyMenuForItemUse); +} + static void PartyMenuTryEvolution(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; @@ -5481,13 +5553,19 @@ static void PartyMenuTryEvolution(u8 taskId) if (targetSpecies != SPECIES_NONE) { FreePartyPointers(); - gCB2_AfterEvolution = gPartyMenu.exitCallback; + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) == ItemUseOutOfBattle_RareCandy && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gCB2_AfterEvolution = CB2_ReturnToPartyMenuUsingRareCandy; + else + gCB2_AfterEvolution = gPartyMenu.exitCallback; BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId); DestroyTask(taskId); } else { - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } } @@ -5634,6 +5712,66 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) #define tAnimWait data[2] #define tNextFunc 3 +void FormChangeTeachMove(u8 taskId, u32 move, u32 slot) +{ + struct Pokemon *mon; + + gPartyMenu.data1 = move; + gPartyMenu.learnMoveState = 0; + + PlaySE(SE_SELECT); + mon = &gPlayerParty[slot]; + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move]); + + if (GiveMoveToMon(mon, move) != MON_HAS_MAX_MOVES) + { + gTasks[taskId].func = Task_LearnedMove; + } + else + { + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; + } +} + +void DeleteMove(struct Pokemon *mon, u32 move) +{ + struct BoxPokemon *boxMon = &mon->box; + u32 i, j; + + if (move != MOVE_NONE) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); + if (existingMove == move) + { + SetMonMoveSlot(mon, MOVE_NONE, i); + RemoveMonPPBonus(mon, i); + for (j = i; j < MAX_MON_MOVES - 1; j++) + ShiftMoveSlot(mon, j, j + 1); + break; + } + } + } +} + +bool32 DoesMonHaveAnyMoves(struct Pokemon *mon) +{ + struct BoxPokemon *boxMon = &mon->box; + u32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); + if (existingMove != MOVE_NONE) + return TRUE; + } + return FALSE; +} + + static void SpriteCB_FormChangeIconMosaic(struct Sprite *sprite) { u8 taskId = sprite->data[2]; @@ -5715,8 +5853,24 @@ static void Task_TryItemUseFormChange(u8 taskId) break; case 6: if (!IsPartyMenuTextPrinterActive()) - gTasks[taskId].tState++; + { + if (gSpecialVar_ItemId == ITEM_ROTOM_CATALOG) //only for rotom currently + { + u32 i; + for (i = 0; i < ARRAY_COUNT(sRotomFormChangeMoves); i++) + DeleteMove(mon, sRotomFormChangeMoves[i]); + if (gSpecialVar_0x8000 == MOVE_THUNDER_SHOCK) + { + if (!DoesMonHaveAnyMoves(mon)) + FormChangeTeachMove(taskId, gSpecialVar_0x8000, gPartyMenu.slotId); + } + else + FormChangeTeachMove(taskId, gSpecialVar_0x8000, gPartyMenu.slotId); + } + + gTasks[taskId].tState++; + } break; case 7: gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tNextFunc); @@ -5760,6 +5914,111 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task) if (TryItemUseFormChange(taskId, task)) RemoveBagItem(gSpecialVar_ItemId, 1); } + +void ItemUseCB_RotomCatalog(u8 taskId, TaskFunc task) +{ + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ROTOM_CATALOG); + DisplaySelectionWindow(SELECTWINDOW_CATALOG); + DisplayPartyMenuStdMessage(PARTY_MSG_WHICH_APPLIANCE); + gTasks[taskId].data[0] = 0xFF; + gTasks[taskId].func = Task_HandleSelectionMenuInput; +} + +bool32 TryMultichoiceFormChange(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u32 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_USE_MULTICHOICE, gSpecialVar_ItemId); + + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + + if (targetSpecies != SPECIES_NONE) + { + gPartyMenuUseExitCallback = TRUE; + SetWordTaskArg(taskId, tNextFunc, (u32)Task_ClosePartyMenuAfterText); + gTasks[taskId].func = Task_TryItemUseFormChange; + gTasks[taskId].tState = 0; + gTasks[taskId].tTargetSpecies = targetSpecies; + gTasks[taskId].tAnimWait = 0; + return TRUE; + } + else + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + return FALSE; + } +} + +static void CursorCb_CatalogBulb(u8 taskId) +{ + gSpecialVar_Result = 0; + gSpecialVar_0x8000 = MOVE_THUNDER_SHOCK; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_CatalogOven(u8 taskId) +{ + gSpecialVar_Result = 1; + gSpecialVar_0x8000 = MOVE_OVERHEAT; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_CatalogWashing(u8 taskId) +{ + gSpecialVar_Result = 2; + gSpecialVar_0x8000 = MOVE_HYDRO_PUMP; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_CatalogFridge(u8 taskId) +{ + gSpecialVar_Result = 3; + gSpecialVar_0x8000 = MOVE_BLIZZARD; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_CatalogFan(u8 taskId) +{ + gSpecialVar_Result = 4; + gSpecialVar_0x8000 = MOVE_AIR_SLASH; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_CatalogMower(u8 taskId) +{ + gSpecialVar_Result = 5; + gSpecialVar_0x8000 = MOVE_LEAF_STORM; + TryMultichoiceFormChange(taskId); +} + +void ItemUseCB_ZygardeCube(u8 taskId, TaskFunc task) +{ + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ZYGARDE_CUBE); + DisplaySelectionWindow(SELECTWINDOW_ZYGARDECUBE); + gTasks[taskId].data[0] = 0xFF; + gTasks[taskId].func = Task_HandleSelectionMenuInput; +} + +static void CursorCb_ChangeForm(u8 taskId) +{ + gSpecialVar_Result = 0; + TryMultichoiceFormChange(taskId); +} + +static void CursorCb_ChangeAbility(u8 taskId) +{ + gSpecialVar_Result = 1; + TryMultichoiceFormChange(taskId); +} + void TryItemHoldFormChange(struct Pokemon *mon) { u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_HOLD, 0); @@ -6144,7 +6403,7 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon) species = GetMonData(mon, MON_DATA_SPECIES); for (; gFrontierBannedSpecies[i] != 0xFFFF; i++) { - if (gFrontierBannedSpecies[i] == species) + if (gFrontierBannedSpecies[i] == GET_BASE_SPECIES_ID(species)) return FALSE; } return TRUE; diff --git a/src/player_pc.c b/src/player_pc.c index 7dc2616e71..a10cb2ac2b 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -222,7 +222,7 @@ static const struct MenuAction sItemStorage_MenuActions[] = [MENU_EXIT] = { gText_Cancel, {ItemStorage_Exit} } }; -static const struct ItemSlot sNewGamePCItems[] = +static const u16 sNewGamePCItems[][2] = { { ITEM_POTION, 1 }, { ITEM_NONE, 0 } @@ -355,16 +355,20 @@ static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT static const u8 sSwapArrowTextColors[] = {TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_DARK_GRAY}; -// Macro below is likely a fakematch, equivalent to sNewGamePCItems[i].quantity -#define GET_QUANTITY(i) ((u16)((u16 *)sNewGamePCItems + 1)[i * 2]) void NewGameInitPCItems(void) { u8 i = 0; ClearItemSlots(gSaveBlock1Ptr->pcItems, PC_ITEMS_COUNT); - for(; sNewGamePCItems[i].itemId != ITEM_NONE && GET_QUANTITY(i) && - AddPCItem(sNewGamePCItems[i].itemId, GET_QUANTITY(i)) == TRUE; i++); + + while (TRUE) + { + if (sNewGamePCItems[i][0] == ITEM_NONE || sNewGamePCItems[i][1] == 0) + break; + if (AddPCItem(sNewGamePCItems[i][0], sNewGamePCItems[i][1]) != TRUE) + break; + i++; + } } -#undef GET_QUANTITY void BedroomPC(void) { @@ -388,7 +392,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -408,7 +412,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - u16 *data; + s16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -503,7 +507,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - u16 *data; + s16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -621,7 +625,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_Enter(u8 taskId, bool8 toss) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; tInTossMenu = toss; ItemStorage_EraseMainMenu(taskId); @@ -654,7 +658,7 @@ static void SetPlayerPCListCount(u8 taskId) static void ItemStorage_EraseMainMenu(u8 taskId) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); ClearWindowTilemap(tWindowId); RemoveWindow(tWindowId); @@ -700,7 +704,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId) static void Mailbox_ProcessInput(u8 taskId) { - u16 *data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { @@ -1488,7 +1492,6 @@ static void ItemStorage_HandleRemoveItem(u8 taskId) static void ItemStorage_HandleErrorMessageInput(u8 taskId) { - s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON)) { ItemStorage_PrintMessage(ItemStorage_GetMessage(gSaveBlock1Ptr->pcItems[gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos].itemId)); diff --git a/src/pokedex.c b/src/pokedex.c index af1f965fe4..d191a2aa87 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -845,6 +845,7 @@ static const struct WindowTemplate sPokemonList_WindowTemplate[] = DUMMY_WIN_TEMPLATE }; +static const u8 sText_No0000[] = _("{NO}0000"); static const u8 sText_No000[] = _("{NO}000"); static const u8 sCaughtBall_Gfx[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp"); static const u8 sText_TenDashes[] = _("----------"); @@ -1591,10 +1592,11 @@ static void ResetPokedexView(struct PokedexView *pokedexView) void CB2_OpenPokedex(void) { -#if POKEDEX_PLUS_HGSS == TRUE - CB2_OpenPokedexPlusHGSS(); - return; -#endif + if (POKEDEX_PLUS_HGSS) + { + CB2_OpenPokedexPlusHGSS(); + return; + } switch (gMain.state) { @@ -2426,16 +2428,22 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) static void CreateMonDexNum(u16 entryNum, u8 left, u8 top, u16 unused) { - u8 text[6]; - u16 dexNum; + u8 text[7]; + u16 dexNum, offset = 2; - memcpy(text, sText_No000, ARRAY_COUNT(text)); dexNum = sPokedexView->pokedexList[entryNum].dexNum; if (sPokedexView->dexMode == DEX_MODE_HOENN) dexNum = NationalToHoennOrder(dexNum); - text[2] = CHAR_0 + dexNum / 100; - text[3] = CHAR_0 + (dexNum % 100) / 10; - text[4] = CHAR_0 + (dexNum % 100) % 10; + memcpy(text, sText_No0000, ARRAY_COUNT(sText_No0000)); + if (NATIONAL_DEX_COUNT > 999) + { + text[2] = CHAR_0 + dexNum / 1000; + offset++; + } + text[offset] = CHAR_0 + (dexNum % 1000) / 100; + text[offset + 1] = CHAR_0 + ((dexNum % 1000) % 100) / 10; + text[offset + 2] = CHAR_0 + ((dexNum % 1000) % 100) % 10; + text[offset + 3] = EOS; PrintMonDexNumAndName(0, FONT_NARROW, text, left, top); } @@ -2873,6 +2881,12 @@ static void CreateInterfaceSprites(u8 page) else { u16 seenOwnedCount; + // Changes sprite distance based on the seen count (owned count can't ever be bigger than it) + u8 counterXDist = 7; + u8 counterX1s = sPokedexView->seenCount > 999 ? 57 : 56; + u8 counterX10s = counterX1s - counterXDist; + u8 counterX100s = counterX10s - counterXDist; + u8 counterX1000s = counterX100s - counterXDist; // Seen text CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); @@ -2897,7 +2911,7 @@ static void CreateInterfaceSprites(u8 page) // Hoenn seen value - 100s seenOwnedCount = GetHoennPokedexCount(FLAG_GET_SEEN); drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 45, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2906,7 +2920,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 45, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2914,38 +2928,49 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 45, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // National seen value - 100s + // National seen value - 1000s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 55, 1); - digitNum = sPokedexView->seenCount / 100; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1000s, 55, 1); + digitNum = sPokedexView->seenCount / 1000; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) drawNextDigit = TRUE; else gSprites[spriteId].invisible = TRUE; + // National seen value - 100s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 55, 1); + digitNum = (sPokedexView->seenCount % 1000) / 100; + if (digitNum != 0 || drawNextDigit) + { + drawNextDigit = TRUE; + StartSpriteAnim(&gSprites[spriteId], digitNum); + } + else + gSprites[spriteId].invisible = TRUE; + // National seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 55, 1); - digitNum = (sPokedexView->seenCount % 100) / 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 55, 1); + digitNum = ((sPokedexView->seenCount % 1000) % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; // National seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 55, 1); - digitNum = (sPokedexView->seenCount % 100) % 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 55, 1); + digitNum = ((sPokedexView->seenCount % 1000) % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); seenOwnedCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 81, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2954,7 +2979,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 81, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2962,31 +2987,42 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 81, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // National owned value - 100s + // National owned value - 1000s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 91, 1); - digitNum = sPokedexView->ownCount / 100; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1000s, 91, 1); + digitNum = sPokedexView->ownCount / 1000; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) drawNextDigit = TRUE; else gSprites[spriteId].invisible = TRUE; + // National owned value - 100s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 91, 1); + digitNum = (sPokedexView->ownCount % 1000) / 100; + if (digitNum != 0 || drawNextDigit) + { + drawNextDigit = TRUE; + StartSpriteAnim(&gSprites[spriteId], digitNum); + } + else + gSprites[spriteId].invisible = TRUE; + // National owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 91, 1); - digitNum = (sPokedexView->ownCount % 100) / 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 91, 1); + digitNum = ((sPokedexView->ownCount % 1000) % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; // National owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 91, 1); - digitNum = (sPokedexView->ownCount % 100) % 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 91, 1); + digitNum = ((sPokedexView->ownCount % 1000) % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } spriteId = CreateSprite(&sDexListStartMenuCursorSpriteTemplate, 136, 96, 1); @@ -3943,11 +3979,11 @@ static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b) u8 DisplayCaughtMonDexPage(u16 dexNum, u32 otId, u32 personality) { -#if POKEDEX_PLUS_HGSS == TRUE - u8 taskId = CreateTask(Task_DisplayCaughtMonDexPageHGSS, 0); -#else - u8 taskId = CreateTask(Task_DisplayCaughtMonDexPage, 0); -#endif + u8 taskId = 0; + if (POKEDEX_PLUS_HGSS) + taskId = CreateTask(Task_DisplayCaughtMonDexPageHGSS, 0); + else + taskId = CreateTask(Task_DisplayCaughtMonDexPage, 0); gTasks[taskId].tState = 0; gTasks[taskId].tDexNum = dexNum; @@ -4111,6 +4147,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *name; const u8 *category; const u8 *description; + u8 digitCount = (NATIONAL_DEX_COUNT > 999 && IsNationalPokedexEnabled()) ? 4 : 3; if (newEntry) PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, DISPLAY_WIDTH), 0); @@ -4118,14 +4155,16 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) value = NationalToHoennOrder(num); else value = num; - ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); + + ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, digitCount); PrintInfoScreenText(str, 0x60, 0x19); natNum = NationalPokedexNumToSpecies(num); if (natNum) name = GetSpeciesName(natNum); else name = sText_TenDashes2; - PrintInfoScreenText(name, 0x84, 0x19); + PrintInfoScreenText(name, 114 + (6 * digitCount), 0x19); + if (owned) { CopyMonCategoryText(num, str2); @@ -5103,8 +5142,8 @@ static void Task_SearchCompleteWaitForInput(u8 taskId) static void Task_SelectSearchMenuItem(u8 taskId) { u8 menuItem; - u16 *cursorPos; - u16 *scrollOffset; + s16 *cursorPos; + s16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); menuItem = gTasks[taskId].tMenuItem; @@ -5124,8 +5163,8 @@ static void Task_HandleSearchParameterInput(u8 taskId) { u8 menuItem; const struct SearchOptionText *texts; - u16 *cursorPos; - u16 *scrollOffset; + s16 *cursorPos; + s16 *scrollOffset; u16 maxOption; bool8 moved; @@ -5442,8 +5481,8 @@ static void DrawOrEraseSearchParameterBox(bool8 erase) static void PrintSearchParameterText(u8 taskId) { const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; + const s16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; u16 i; u16 j; @@ -5457,8 +5496,8 @@ static void PrintSearchParameterText(u8 taskId) static u8 GetSearchModeSelection(u8 taskId, u8 option) { - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; + const s16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; u16 id = *cursorPos + *scrollOffset; switch (option) @@ -5529,7 +5568,7 @@ static void SetDefaultSearchModeAndOrder(u8 taskId) static bool8 SearchParamCantScrollUp(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) @@ -5541,7 +5580,7 @@ static bool8 SearchParamCantScrollUp(u8 taskId) static bool8 SearchParamCantScrollDown(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 8a73315b84..294d42b26e 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -47,7 +47,6 @@ #include "constants/rgb.h" #include "constants/songs.h" -#if POKEDEX_PLUS_HGSS == TRUE enum { @@ -117,7 +116,6 @@ enum NAME_YZ, }; - extern const u8 *const gMonFootprintTable[]; extern const u16 gPokedexOrder_Alphabetical[]; extern const u16 gPokedexOrder_Height[]; @@ -125,14 +123,174 @@ extern const u16 gPokedexOrder_Weight[]; extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const struct PokedexEntry gPokedexEntries[]; +// static .rodata strings -static const u8 sText_No000[] = _("{NO}000"); +static const u8 sText_No0000[] = _("0000"); static const u8 sCaughtBall_Gfx[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp"); static const u8 sText_TenDashes[] = _("----------"); ALIGNED(4) static const u8 sExpandedPlaceholder_PokedexDescription[] = _(""); static const u16 sSizeScreenSilhouette_Pal[] = INCBIN_U16("graphics/pokedex/size_silhouette.gbapal"); -static const u8 sText_TenDashes2[] = _("----------"); +static const u8 sText_Stats_Buttons[] = _("{A_BUTTON}TOGGLE {DPAD_UPDOWN}MOVES"); +static const u8 sText_Stats_Buttons_Decapped[] = _("{A_BUTTON}Toggle {DPAD_UPDOWN}Moves"); +static const u8 sText_Stats_HP[] = _("HP"); +static const u8 sText_Stats_Attack[] = _("ATK"); +static const u8 sText_Stats_Defense[] = _("DEF"); +static const u8 sText_Stats_Speed[] = _("SPE"); +static const u8 sText_Stats_SpAttack[] = _("SP.A"); +static const u8 sText_Stats_SpDefense[] = _("SP.D"); +static const u8 sText_Stats_EV_Plus1[] = _("{UP_ARROW_2}"); +static const u8 sText_Stats_EV_Plus2[] = _("{UP_ARROW_2}{UP_ARROW_2}"); +static const u8 sText_Stats_EV_Plus3[] = _("{UP_ARROW_2}{UP_ARROW_2}{UP_ARROW_2}"); +static const u8 sText_Stats_EvStr1Str2[] = _("{STR_VAR_1}{STR_VAR_2}"); +static const u8 sText_Stats_MoveSelectedMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); +static const u8 sText_Stats_MoveLevel[] = _("LVL"); +static const u8 sText_Stats_Gender_0[] = _("♂"); +static const u8 sText_Stats_Gender_12_5[] = _("♀ 1/7 ♂"); //_("♀ 12.5 / 87.5 ♂"); +static const u8 sText_Stats_Gender_25[] = _("♀ 1/3 ♂"); //_("♀ 25 / 75 ♂"); +static const u8 sText_Stats_Gender_50[] = _("♀ 1/1 ♂"); //_("♀ 50 / 50 ♂"); +static const u8 sText_Stats_Gender_75[] = _("♀ 3/1 ♂"); //_("♀ 75 / 25 ♂"); +static const u8 sText_Stats_Gender_87_5[] = _("♀ 7/1 ♂"); +static const u8 sText_Stats_Gender_100[] = _("♀"); +static const u8 sText_Stats_CatchRate[] = _("CATCH{0x5B}: "); +static const u8 sText_Stats_CatchRate_Legend[] = _("LEGENDARY"); +static const u8 sText_Stats_CatchRate_VeryHard[] = _("VERY HARD"); +static const u8 sText_Stats_CatchRate_Difficult[] = _("DIFFICULT"); +static const u8 sText_Stats_CatchRate_Medium[] = _("MEDIUM"); +static const u8 sText_Stats_CatchRate_Relaxed[] = _("RELAXED"); +static const u8 sText_Stats_CatchRate_Easy[] = _("EASY"); +static const u8 sText_Stats_ExpYield[] = _("EXP YIELD: "); +static const u8 sText_Stats_EggCycles[] = _("HATCH STEPS:"); +static const u8 sText_Stats_EggCycles_VeryFast[] = _("{EMOJI_BOLT}{EMOJI_DIZZYEGG}"); +static const u8 sText_Stats_EggCycles_Fast[] = _("{EMOJI_DIZZYEGG}"); +static const u8 sText_Stats_EggCycles_Normal[] = _("{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}"); +static const u8 sText_Stats_EggCycles_Slow[] = _("{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}"); +static const u8 sText_Stats_Growthrate[] = _("GROW: "); +static const u8 sText_Stats_Friendship[] = _("FRIENDSHIP:"); +static const u8 sText_Stats_Friendship_BigAnger[] = _("{EMOJI_BIGANGER}"); +static const u8 sText_Stats_Friendship_Neutral[] = _("{EMOJI_NEUTRAL}"); +static const u8 sText_Stats_Friendship_Happy[] = _("{EMOJI_HAPPY}"); +static const u8 sText_Stats_Friendship_BigSmile[] = _("{EMOJI_BIGSMILE}"); +static const u8 sText_Stats_MEDIUM_FAST[] = _("MED. FAST"); +static const u8 sText_Stats_ERRATIC[] = _("ERRATIC"); +static const u8 sText_Stats_FLUCTUATING[] = _("FLUCTUATING"); +static const u8 sText_Stats_MEDIUM_SLOW[] = _("MED. SLOW"); +static const u8 sText_Stats_FAST[] = _("FAST"); +static const u8 sText_Stats_SLOW[] = _("SLOW"); +static const u8 sText_Stats_ContestHeart[] = _("H"); +static const u8 sText_Stats_Minus[] = _("-"); +static const u8 sText_Stats_eggGroup[] = _("EGG G1:"); +static const u8 sText_Stats_eggGroup_Groups[] = _("{STR_VAR_1}/{STR_VAR_2}"); +static const u8 sText_Stats_eggGroup_MONSTER[] = _("MONSTER"); +static const u8 sText_Stats_eggGroup_WATER_1[] = _("WATER {CIRCLE_1}"); +static const u8 sText_Stats_eggGroup_BUG[] = _("BUG"); +static const u8 sText_Stats_eggGroup_FLYING[] = _("FLYING"); +static const u8 sText_Stats_eggGroup_FIELD[] = _("FIELD"); +static const u8 sText_Stats_eggGroup_FAIRY[] = _("FAIRY"); +static const u8 sText_Stats_eggGroup_GRASS[] = _("GRASS"); +static const u8 sText_Stats_eggGroup_HUMAN_LIKE[] = _("HUMANE"); +static const u8 sText_Stats_eggGroup_WATER_3[] = _("WATER {CIRCLE_3}"); +static const u8 sText_Stats_eggGroup_MINERAL[] = _("MINERAL"); +static const u8 sText_Stats_eggGroup_AMORPHOUS[] = _("AMORPHOUS"); +static const u8 sText_Stats_eggGroup_WATER_2[] = _("WATER {CIRCLE_2}"); +static const u8 sText_Stats_eggGroup_DITTO[] = _("DITTO"); +static const u8 sText_Stats_eggGroup_DRAGON[] = _("DRAGON"); +static const u8 sText_Stats_eggGroup_UNDISCOVERED[] = _("---"); +static const u8 sText_Dex_SEEN[] = _("SEEN"); +static const u8 sText_Dex_OWN[] = _("OWN"); + +static const u8 sText_EVO_Buttons[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK"); +static const u8 sText_EVO_Buttons_Decapped[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check"); +static const u8 sText_EVO_Buttons_PE[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK {START_BUTTON}FORMs"); +static const u8 sText_EVO_Buttons_Decapped_PE[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check {START_BUTTON}Froms"); +static const u8 sText_EVO_Name[] = _("{STR_VAR_3}:"); +static const u8 sText_EVO_PreEvo[] = _("{STR_VAR_1} evolves from {STR_VAR_2}"); +static const u8 sText_EVO_PreEvo_PE_Mega[] = _("{STR_VAR_1} Mega Evolves with {STR_VAR_2}"); +static const u8 sText_EVO_FRIENDSHIP[] = _("{LV}{UP_ARROW}, high friendship"); +static const u8 sText_EVO_FRIENDSHIP_DAY[] = _("{LV}{UP_ARROW}, high friendship, day"); +static const u8 sText_EVO_FRIENDSHIP_NIGHT[] = _("{LV}{UP_ARROW}, high friendship, night"); +static const u8 sText_EVO_FRIENDSHIP_MOVE_TYPE[] = _("{LV}{UP_ARROW}, high friendship, {STR_VAR_2} move"); +static const u8 sText_EVO_LEVEL[] = _("{LV}{UP_ARROW} to {STR_VAR_2}"); +static const u8 sText_EVO_TRADE[] = _("Trading"); +static const u8 sText_EVO_TRADE_ITEM[] = _("Trading, holding {STR_VAR_2}"); +static const u8 sText_EVO_ITEM[] = _("{STR_VAR_2} is used"); +static const u8 sText_EVO_LEVEL_ATK_GT_DEF[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Atk > Def"); +static const u8 sText_EVO_LEVEL_ATK_EQ_DEF[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Atk = Def"); +static const u8 sText_EVO_LEVEL_ATK_LT_DEF[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Atk < Def"); +static const u8 sText_EVO_LEVEL_SILCOON[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Silcoon persona"); +static const u8 sText_EVO_LEVEL_CASCOON[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Cascoon persona"); +static const u8 sText_EVO_LEVEL_NINJASK[] = _("{LV}{UP_ARROW} to {STR_VAR_2}"); +static const u8 sText_EVO_LEVEL_SHEDINJA[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, party<6, 1x POKéBALL"); +static const u8 sText_EVO_BEAUTY[] = _("{LV}{UP_ARROW}, high beauty"); +static const u8 sText_EVO_LEVEL_FEMALE[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, is female"); +static const u8 sText_EVO_LEVEL_MALE[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, is male"); +static const u8 sText_EVO_LEVEL_NIGHT[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, night"); +static const u8 sText_EVO_LEVEL_DAY[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, day"); +static const u8 sText_EVO_LEVEL_DUSK[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, dusk (5-6PM)"); +static const u8 sText_EVO_ITEM_HOLD_DAY[] = _("{LV}{UP_ARROW}, holds {STR_VAR_2}, day"); +static const u8 sText_EVO_ITEM_HOLD_NIGHT[] = _("{LV}{UP_ARROW}, holds {STR_VAR_2}, night"); +static const u8 sText_EVO_MOVE[] = _("{LV}{UP_ARROW}, knows {STR_VAR_2}"); +static const u8 sText_EVO_MAPSEC[] = _("{LV}{UP_ARROW} on {STR_VAR_2}"); +static const u8 sText_EVO_ITEM_MALE[] = _("{STR_VAR_2} used on male"); +static const u8 sText_EVO_ITEM_FEMALE[] = _("{STR_VAR_2} used on female"); +static const u8 sText_EVO_LEVEL_RAIN[] = _("{LV}{UP_ARROW} to {STR_VAR_2} while raining"); +static const u8 sText_EVO_SPECIFIC_MON_IN_PARTY[] = _("{LV}{UP_ARROW} with {STR_VAR_2} in party"); +static const u8 sText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[] = _("{LV}{UP_ARROW} with dark type in party"); +static const u8 sText_EVO_TRADE_SPECIFIC_MON[] = _("Traded for {STR_VAR_2}"); +static const u8 sText_EVO_SPECIFIC_MAP[] = _("{LV}{UP_ARROW} on {STR_VAR_2}"); +static const u8 sText_EVO_LEVEL_NATURE_AMPED[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Amped natures"); +static const u8 sText_EVO_LEVEL_NATURE_LOW_KEY[] = _("{LV}{UP_ARROW} to {STR_VAR_2}, Low Key natures"); +static const u8 sText_EVO_CRITICAL_HITS[] = _("Land {STR_VAR_2} critical hits in\nsingle battle"); +static const u8 sText_EVO_SCRIPT_TRIGGER_DMG[] = _("Takes at least {STR_VAR_2} HP in damage"); +static const u8 sText_EVO_DARK_SCROLL[] = _("ScrllOfDrknss is used"); +static const u8 sText_EVO_WATER_SCROLL[] = _("ScrollOfWatrs is used"); +static const u8 sText_EVO_ITEM_NIGHT[] = _("{STR_VAR_2} is used, night"); +static const u8 sText_EVO_ITEM_DAY[] = _("{STR_VAR_2} is used, day"); +static const u8 sText_EVO_ITEM_HOLD[] = _("{LV}{UP_ARROW}, holds {STR_VAR_2}"); +static const u8 sText_EVO_UNKNOWN[] = _("Method unknown"); +static const u8 sText_EVO_NONE[] = _("{STR_VAR_1} has no evolution."); + +static const u8 sText_FORMS_Buttons_PE[] = _("{A_BUTTON}FORM MODE {START_BUTTON}EVOs"); +static const u8 sText_FORMS_Buttons_Decapped_PE[] = _("{START_BUTTON}Evos"); +static const u8 sText_FORMS_Buttons_Submenu_PE[] = _("{DPAD_NONE}FORMs {A_BUTTON}CHECK {START_BUTTON}EVOs"); +static const u8 sText_FORMS_Buttons_Submenu_Decapped_PE[] = _("{START_BUTTON}Evos"); +static const u8 sText_FORMS_NONE[] = _("{STR_VAR_1} has no alternate forms."); +static const u8 sText_PlusSymbol[] = _("+"); + +// static .rodata graphics + +static const u16 sPokedexPlusHGSS_Default_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_default.gbapal"); +static const u16 sPokedexPlusHGSS_National_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_national.gbapal"); +static const u16 sPokedexPlusHGSS_MenuSearch_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_menu.gbapal"); +static const u16 sPokedexPlusHGSS_SearchResults_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_results.gbapal"); +static const u16 sPokedexPlusHGSS_Default_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_default_dark.gbapal"); +static const u16 sPokedexPlusHGSS_National_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_national_dark.gbapal"); +static const u16 sPokedexPlusHGSS_MenuSearch_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_menu_dark.gbapal"); +static const u16 sPokedexPlusHGSS_SearchResults_dark_Pal[] = INCBIN_U16("graphics/pokedex/hgss/palette_search_results_dark.gbapal"); +static const u32 sPokedexPlusHGSS_MenuList_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_list.4bpp.lz"); +static const u32 sPokedexPlusHGSS_MenuList_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_list_DECA.4bpp.lz"); +static const u32 sPokedexPlusHGSS_Interface_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_interface.4bpp.lz"); +static const u32 sPokedexPlusHGSS_Interface_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_interface_DECA.4bpp.lz"); +static const u32 sPokedexPlusHGSS_Menu_1_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu1.4bpp.lz"); +static const u32 sPokedexPlusHGSS_Menu_2_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu2.4bpp.lz"); +static const u32 sPokedexPlusHGSS_Menu_3_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu3.4bpp.lz"); +static const u32 sPokedexPlusHGSS_MenuSearch_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_search.4bpp.lz"); +static const u32 sPokedexPlusHGSS_MenuSearch_DECA_Gfx[] = INCBIN_U32("graphics/pokedex/hgss/tileset_menu_search_DECA.4bpp.lz"); +static const u32 sPokedexPlusHGSS_StartMenuMain_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_start_menu.bin.lz"); +static const u32 sPokedexPlusHGSS_StartMenuSearchResults_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_start_menu_search_results.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/SelectBar.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/pokedex/hgss/SelectBar_clear.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenList_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_list_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenListUnderlay_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_list_screen_underlay.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenInfo_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_info_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenStats_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_stats_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenEvolution_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_evo_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenEvolution_Tilemap_PE[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_evo_screen_PE.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenForms_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_forms_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenCry_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_cry_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenSize_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_size_screen.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenSearchHoenn_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_search_screen_hoenn.bin.lz"); +static const u32 sPokedexPlusHGSS_ScreenSearchNational_Tilemap[] = INCBIN_U32("graphics/pokedex/hgss/tilemap_search_screen_national.bin.lz"); #define SCROLLING_MON_X 146 #define HGSS_DECAPPED FALSE @@ -375,7 +533,6 @@ static void Task_SwitchScreensFromSizeScreen(u8); static void LoadScreenSelectBarMain(u16); static void LoadScreenSelectBarSubmenu(u16); static void HighlightScreenSelectBarItem(u8, u16); -static void HighlightSubmenuScreenSelectBarItem(u8, u16); static void Task_HandleCaughtMonPageInput(u8); static void Task_ExitCaughtMonPage(u8); static void SpriteCB_SlideCaughtMonToCenter(struct Sprite *sprite); @@ -463,6 +620,8 @@ static void Task_ExitFormsScreen(u8 taskId); static u8 ShowSplitIcon(u32 split); //Physical/Special Split from BE static void DestroySplitIcon(void); //Physical/Special Split from BE +static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum); + //Physical/Special Split from BE #define TAG_SPLIT_ICONS 30004 @@ -1076,14 +1235,14 @@ static const struct SpriteTemplate sDexListStartMenuCursorSpriteTemplate = static const struct CompressedSpriteSheet sInterfaceSpriteSheet[] = { - {gPokedexPlusHGSS_Interface_Gfx, 0x2000, TAG_DEX_INTERFACE}, - {gPokedexPlusHGSS_Interface_DECA_Gfx, 0x2000, TAG_DEX_INTERFACE}, + {sPokedexPlusHGSS_Interface_Gfx, 0x2000, TAG_DEX_INTERFACE}, + {sPokedexPlusHGSS_Interface_DECA_Gfx, 0x2000, TAG_DEX_INTERFACE}, {0} }; static const struct SpritePalette sInterfaceSpritePalette[] = { - {gPokedexPlusHGSS_Default_Pal, TAG_DEX_INTERFACE}, + {sPokedexPlusHGSS_Default_Pal, TAG_DEX_INTERFACE}, {0} }; @@ -1927,6 +2086,8 @@ static const struct WindowTemplate sSearchMenu_WindowTemplate[] = //************************************ void CB2_OpenPokedexPlusHGSS(void) { + if (!POKEDEX_PLUS_HGSS) return; // prevents the compiler from emitting static .rodata + // if the feature is disabled switch (gMain.state) { case 0: @@ -2048,7 +2209,7 @@ static void CB2_Pokedex(void) UpdatePaletteFade(); } -void Task_OpenPokedexMainPage(u8 taskId) +static void Task_OpenPokedexMainPage(u8 taskId) { sPokedexView->isSearchResults = FALSE; sPokedexView->sEvoScreenData.fromEvoPage = FALSE; @@ -2246,21 +2407,21 @@ static void LoadPokedexBgPalette(bool8 isSearchResults) if (!HGSS_DARK_MODE) { if (isSearchResults == TRUE) - LoadPalette(gPokedexPlusHGSS_SearchResults_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_SearchResults_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else if (!IsNationalPokedexEnabled()) - LoadPalette(gPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else - LoadPalette(gPokedexPlusHGSS_National_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_National_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); LoadPalette(GetOverworldTextboxPalettePtr(), 0xF0, 32); } else { if (isSearchResults == TRUE) - LoadPalette(gPokedexPlusHGSS_SearchResults_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_SearchResults_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else if (!IsNationalPokedexEnabled()) - LoadPalette(gPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else - LoadPalette(gPokedexPlusHGSS_National_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_National_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); LoadPalette(GetOverworldTextboxPalettePtr(), 0xF0, 32); } @@ -2293,15 +2454,15 @@ static bool8 LoadPokedexListPage(u8 page) SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_MenuList_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_MenuList_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_MenuList_DECA_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(1, gPokedexPlusHGSS_ScreenList_Tilemap, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenListUnderlay_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_MenuList_DECA_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(1, sPokedexPlusHGSS_ScreenList_Tilemap, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenListUnderlay_Tilemap, 0, 0); if (page == PAGE_MAIN) - CopyToBgTilemapBuffer(0, gPokedexPlusHGSS_StartMenuMain_Tilemap, 0, 0x280); + CopyToBgTilemapBuffer(0, sPokedexPlusHGSS_StartMenuMain_Tilemap, 0, 0x280); else - CopyToBgTilemapBuffer(0, gPokedexPlusHGSS_StartMenuSearchResults_Tilemap, 0, 0x280); + CopyToBgTilemapBuffer(0, sPokedexPlusHGSS_StartMenuSearchResults_Tilemap, 0, 0x280); ResetPaletteFade(); if (page == PAGE_MAIN) sPokedexView->isSearchResults = FALSE; @@ -2529,7 +2690,7 @@ static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8 *str, u8 left color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized4(windowId, fontId, left * 8 - 4, (top * 8) + 1, 0, 0, color, TEXT_SKIP_DRAW, str); } static void PrintMonDexNumAndName_2(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top) //offset for closer numer + text @@ -2539,7 +2700,7 @@ static void PrintMonDexNumAndName_2(u8 windowId, u8 fontId, const u8* str, u8 le color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_6; color[2] = TEXT_COLOR_LIGHT_GRAY; - AddTextPrinterParameterized4(windowId, fontId, left * 8 - 3, (top * 8) + 1, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, fontId, left * 8 - 13, (top * 8) + 1, 0, 0, color, -1, str); } // u16 ignored is passed but never used @@ -2568,13 +2729,13 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, i * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, i * 2); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X + 5, i * 2); } else { CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); CreateCaughtBall(FALSE, MON_LIST_X, i * 2, ignored); - CreateMonName(0, MON_LIST_X+5, i * 2); + CreateMonName(0, MON_LIST_X + 5, i * 2); } } entryNum++; @@ -2593,13 +2754,13 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, sPokedexView->listVOffset * 2); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X + 5, sPokedexView->listVOffset * 2); } else { CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); CreateCaughtBall(FALSE, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); - CreateMonName(0, MON_LIST_X+5, sPokedexView->listVOffset * 2); + CreateMonName(0, MON_LIST_X + 5, sPokedexView->listVOffset * 2); } } break; @@ -2617,13 +2778,13 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, vOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, vOffset * 2); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X + 5, vOffset * 2); } else { CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); CreateCaughtBall(FALSE, MON_LIST_X, vOffset * 2, ignored); - CreateMonName(0, MON_LIST_X+5, vOffset * 2); + CreateMonName(0, MON_LIST_X + 5, vOffset * 2); } } break; @@ -2633,25 +2794,31 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) static void CreateMonDexNum(u16 entryNum, u8 left, u8 top, u16 unused) { - u8 text[6]; - u16 dexNum; + u8 text[5]; + u16 dexNum, offset = 0; - memcpy(text, sText_No000, ARRAY_COUNT(text)); dexNum = sPokedexView->pokedexList[entryNum].dexNum; if (sPokedexView->dexMode == DEX_MODE_HOENN) dexNum = NationalToHoennOrder(dexNum); - text[2] = CHAR_0 + dexNum / 100; - text[3] = CHAR_0 + (dexNum % 100) / 10; - text[4] = CHAR_0 + (dexNum % 100) % 10; + memcpy(text, sText_No0000, ARRAY_COUNT(sText_No0000)); + if (NATIONAL_DEX_COUNT > 999 && sPokedexView->dexMode != DEX_MODE_HOENN) + { + text[0] = CHAR_0 + dexNum / 1000; + offset = 1; + } + text[offset] = CHAR_0 + (dexNum % 1000) / 100; + text[offset + 1] = CHAR_0 + ((dexNum % 1000) % 100) / 10; + text[offset + 2] = CHAR_0 + ((dexNum % 1000) % 100) % 10; + text[offset + 3] = EOS; PrintMonDexNumAndName(0, FONT_NARROW, text, left, top); } static void CreateCaughtBall(bool16 owned, u8 x, u8 y, u16 unused) { if (owned) - BlitBitmapToWindow(0, sCaughtBall_Gfx, x * 8, y * 8, 8, 16); + BlitBitmapToWindow(0, sCaughtBall_Gfx, x * 6, y * 8, 8, 16); else - FillWindowPixelRect(0, PIXEL_FILL(0), x * 8, y * 8, 8, 16); + FillWindowPixelRect(0, PIXEL_FILL(0), x * 6, y * 8, 8, 16); } static u8 CreateMonName(u16 num, u8 left, u8 top) @@ -2669,7 +2836,7 @@ static u8 CreateMonName(u16 num, u8 left, u8 top) static void ClearMonListEntry(u8 x, u8 y, u16 unused) { - FillWindowPixelRect(0, PIXEL_FILL(0), x * 8, y * 8, 0x60, 16); + FillWindowPixelRect(0, PIXEL_FILL(0), x * 6, y * 8, 0x60, 16); } // u16 ignored is passed but never used @@ -2988,13 +3155,12 @@ static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) #define sIsDownArrow data[1] #define LIST_RIGHT_SIDE_TEXT_X 204 -#define LIST_RIGHT_SIDE_TEXT_X_OFFSET 12 +#define LIST_RIGHT_SIDE_TEXT_X_OFFSET 13 #define LIST_RIGHT_SIDE_TEXT_Y_OFFSET 13 static void CreateInterfaceSprites(u8 page) { u8 spriteId; u16 digitNum; - u8 color[3]; bool32 drawNextDigit; // Scroll arrows @@ -3004,7 +3170,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].sIsDownArrow = TRUE; gSprites[spriteId].vFlip = TRUE; - CreateSprite(&sScrollBarSpriteTemplate, 8, 20, 0); + CreateSprite(&sScrollBarSpriteTemplate, 6, 20, 0); if (!IsNationalPokedexEnabled() && page == PAGE_MAIN) { @@ -3066,6 +3232,11 @@ static void CreateInterfaceSprites(u8 page) else if (page == PAGE_MAIN) { u16 seenOwnedCount; + u8 counterXDist = 6; + u8 counterX1s = LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16 - (sPokedexView->seenCount > 999 ? 0 : 1); + u8 counterX10s = counterX1s - counterXDist; + u8 counterX100s = counterX10s - counterXDist; + u8 counterX1000s = counterX100s - counterXDist; // Hoenn text CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 40 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); @@ -3087,7 +3258,7 @@ static void CreateInterfaceSprites(u8 page) // Hoenn seen value - 100s seenOwnedCount = GetHoennPokedexCount(FLAG_GET_SEEN); drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -3096,7 +3267,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -3104,14 +3275,14 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); seenOwnedCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -3120,7 +3291,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -3128,55 +3299,77 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); //**************************** - // National seen value - 100s + // National seen value - 1000s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = sPokedexView->seenCount / 100; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1000s, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = sPokedexView->seenCount / 1000; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) drawNextDigit = TRUE; else gSprites[spriteId].invisible = TRUE; + // National seen value - 100s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->seenCount % 1000) / 100; + if (digitNum != 0 || drawNextDigit) + { + drawNextDigit = TRUE; + StartSpriteAnim(&gSprites[spriteId], digitNum); + } + else + gSprites[spriteId].invisible = TRUE; + // National seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = (sPokedexView->seenCount % 100) / 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = ((sPokedexView->seenCount % 1000) % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; // National seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = (sPokedexView->seenCount % 100) % 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = ((sPokedexView->seenCount % 1000) % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // National owned value - 100s + // National owned value - 1000s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = sPokedexView->ownCount / 100; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1000s, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = sPokedexView->ownCount / 1000; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) drawNextDigit = TRUE; else gSprites[spriteId].invisible = TRUE; - // National owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = (sPokedexView->ownCount % 100) / 10; + // National owned value - 100s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX100s, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->ownCount % 1000) / 100; + if (digitNum != 0 || drawNextDigit) + { + drawNextDigit = TRUE; + StartSpriteAnim(&gSprites[spriteId], digitNum); + } + else + gSprites[spriteId].invisible = TRUE; + + // National owned value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX10s, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = ((sPokedexView->ownCount % 1000) % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; // National owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); - digitNum = (sPokedexView->ownCount % 100) % 10; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, counterX1s, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = ((sPokedexView->ownCount % 1000) % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } @@ -3203,7 +3396,7 @@ static void SpriteCB_SeenOwnInfo(struct Sprite *sprite) DestroySprite(sprite); } -void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) +static void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) { sprite->oam.priority = 0; sprite->oam.affineMode = ST_OAM_AFFINE_OFF; @@ -3649,8 +3842,6 @@ static void Task_LoadInfoScreen(u8 taskId) break; case 1: LoadTilesetTilemapHGSS(INFO_SCREEN); - // DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); - // CopyToBgTilemapBuffer(3, gPokedexInfoScreen_Tilemap, 0, 0); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); PutWindowTilemap(WIN_FOOTPRINT); @@ -3660,7 +3851,6 @@ static void Task_LoadInfoScreen(u8 taskId) break; case 2: LoadScreenSelectBarMain(0xD); - // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; @@ -3719,7 +3909,6 @@ static void Task_LoadInfoScreen(u8 taskId) } break; case 9: - // if (!IsCryPlayingOrClearCrySongs()) gMain.state++; break; case 10: @@ -3896,17 +4085,17 @@ static void Task_SwitchScreensFromAreaScreen(u8 taskId) //************************************ static void LoadScreenSelectBarMain(u16 unused) { - CopyToBgTilemapBuffer(1, gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap_Clear, 0, 0); + CopyToBgTilemapBuffer(1, sPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap_Clear, 0, 0); CopyBgTilemapBufferToVram(1); } static void LoadScreenSelectBarSubmenu(u16 unused) { - CopyToBgTilemapBuffer(1, gPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap, 0, 0); + CopyToBgTilemapBuffer(1, sPokedexPlusHGSS_ScreenSelectBarSubmenu_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); } -static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) +static void UNUSED HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) { u8 i; u8 j; @@ -3933,36 +4122,6 @@ static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) CopyBgTilemapBufferToVram(1); } -static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b) -{ - u8 i; - u8 j; - u16 *ptr = GetBgTilemapBuffer(1); - - for (i = 0; i < 4; i++) - { - u8 row = i * 7 + 1; - u32 newPalette; - - do - { - if (i == a || i == 3) - newPalette = 0x2000; - else - newPalette = 0x4000; - } while (0); - - for (j = 0; j < 7; j++) - { - ptr[row + j] = (ptr[row + j] % 0x1000) | newPalette; - ptr[row + j + 0x20] = (ptr[row + j + 0x20] % 0x1000) | newPalette; - } - } - CopyBgTilemapBufferToVram(1); -} - - - //************************************ //* * //* CAUGHT MON * @@ -3980,9 +4139,14 @@ static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b) void Task_DisplayCaughtMonDexPageHGSS(u8 taskId) { u8 spriteId; - u16 species = gTasks[taskId].tSpecies; - u16 dexNum = SpeciesToNationalPokedexNum(species); + u16 species; + u16 dexNum; + if (!POKEDEX_PLUS_HGSS) return; // prevents the compiler from emitting static .rodata + // if the feature is disabled + + species = gTasks[taskId].tSpecies; + dexNum = SpeciesToNationalPokedexNum(species); switch (gTasks[taskId].tState) { case 0: @@ -4075,16 +4239,16 @@ static void Task_HandleCaughtMonPageInput(u8 taskId) else if (++gTasks[taskId].tPalTimer & 16) { if (!HGSS_DARK_MODE) - LoadPalette(gPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); + LoadPalette(sPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); else - LoadPalette(gPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); + LoadPalette(sPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); } else { if (!HGSS_DARK_MODE) - LoadPalette(gPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); + LoadPalette(sPokedexPlusHGSS_Default_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); else - LoadPalette(gPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); + LoadPalette(sPokedexPlusHGSS_Default_dark_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); } } @@ -4178,7 +4342,7 @@ static void PrintInfoScreenTextSmall(const u8* str, u8 left, u8 top) AddTextPrinterParameterized4(0, 0, left, top, 0, 0, color, 0, str); } -static void PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top) +static void UNUSED PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top) { u8 color[3]; color[0] = TEXT_COLOR_TRANSPARENT; @@ -4256,14 +4420,11 @@ static void SetTypeIconPosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) } static void PrintCurrentSpeciesTypeInfo(u8 newEntry, u16 species) { - u32 i; - u16 dexNum = SpeciesToNationalPokedexNum(species); u8 type1, type2; if (!newEntry) { species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum); - dexNum = SpeciesToNationalPokedexNum(species); } //type icon(s) #ifdef TX_RANDOMIZER_AND_CHALLENGES @@ -4312,21 +4473,20 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *name; const u8 *category; const u8 *description; + u8 digitCount = (NATIONAL_DEX_COUNT > 999 && value != 0) ? 4 : 3; - // if (newEntry) - // PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); if (value == 0) value = NationalToHoennOrder(num); else value = num; - ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, digitCount); PrintInfoScreenTextWhite(str, 123, 17); species = NationalPokedexNumToSpeciesHGSS(num); if (species) name = gSpeciesNames[species]; else - name = sText_TenDashes2; - PrintInfoScreenTextWhite(name, 157, 17); + name = sText_TenDashes; + PrintInfoScreenTextWhite(name, 139 + (6 * digitCount), 17); if (owned) { CopyMonCategoryText(num, str2); @@ -4454,7 +4614,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) } // Unused in the English version, used to print height/weight in versions which use metric system. -static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) +static void UNUSED PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) { u8 str[6]; bool8 outputted = FALSE; @@ -4646,7 +4806,7 @@ static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max) // Unown and Spinda use the personality of the first seen individual of that species // All others use personality 0 -static u32 GetPokedexMonPersonality(u16 species) +static UNUSED u32 GetPokedexMonPersonality(u16 species) { if (species == SPECIES_UNOWN || species == SPECIES_SPINDA) { @@ -4668,17 +4828,15 @@ static u32 GetPokedexMonPersonality(u16 species) //* HGSS * //* * //************************************ -u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum) +static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum) { - u16 species; - if (!nationalNum) return 0; - if (sPokedexView->formSpecies != 0) - return sPokedexView->formSpecies; - else - return NationalPokedexNumToSpecies(nationalNum); + if (sPokedexView->formSpecies != 0) + return sPokedexView->formSpecies; + else + return NationalPokedexNumToSpecies(nationalNum); } static void LoadTilesetTilemapHGSS(u8 page) @@ -4687,45 +4845,45 @@ static void LoadTilesetTilemapHGSS(u8 page) { case INFO_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenInfo_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenInfo_Tilemap, 0, 0); break; case STATS_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenStats_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_1_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenStats_Tilemap, 0, 0); break; case EVO_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenEvolution_Tilemap_PE, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenEvolution_Tilemap_PE, 0, 0); break; case FORMS_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenForms_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_2_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenForms_Tilemap, 0, 0); break; case CRY_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenCry_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenCry_Tilemap, 0, 0); break; case SIZE_SCREEN: if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenSize_Tilemap, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_Menu_3_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenSize_Tilemap, 0, 0); break; } } @@ -4759,9 +4917,9 @@ static void StatsPage_PrintNavigationButtons(void) u8 x = 9; u8 y = 0; if (!HGSS_DECAPPED) - AddTextPrinterParameterized3(WIN_STATS_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_Stats_Buttons); + AddTextPrinterParameterized3(WIN_STATS_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_Stats_Buttons); else - AddTextPrinterParameterized3(WIN_STATS_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_Stats_Buttons_Decapped); + AddTextPrinterParameterized3(WIN_STATS_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_Stats_Buttons_Decapped); PutWindowTilemap(WIN_STATS_NAVIGATION_BUTTONS); CopyWindowToVram(WIN_STATS_NAVIGATION_BUTTONS, 3); @@ -4778,21 +4936,29 @@ static void ResetStatsWindows(void) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } static void SaveMonDataInStruct(void) { u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum); - u8 EVs[6] = {gSpeciesInfo[species].evYield_HP, gSpeciesInfo[species].evYield_Speed, gSpeciesInfo[species].evYield_Attack, gSpeciesInfo[species].evYield_SpAttack, gSpeciesInfo[species].evYield_Defense, gSpeciesInfo[species].evYield_SpDefense}; - u8 differentEVs; + u8 evs[NUM_STATS] = + { + [STAT_HP] = gSpeciesInfo[species].evYield_HP, + [STAT_ATK] = gSpeciesInfo[species].evYield_Speed, + [STAT_DEF] = gSpeciesInfo[species].evYield_Attack, + [STAT_SPEED] = gSpeciesInfo[species].evYield_SpAttack, + [STAT_SPATK] = gSpeciesInfo[species].evYield_Defense, + [STAT_SPDEF] = gSpeciesInfo[species].evYield_SpDefense + }; + u8 differentEVs = 0; u8 i; //Count how many different EVs - for (i = 0; i<6; i++) + for (i = 0; i < NUM_STATS; i++) { - if (EVs[i] > 0) //HP//Speed//Attack//Special Attack//Defense//Special Defense + if (evs[i] > 0) //HP//Speed//Attack//Special Attack//Defense//Special Defense differentEVs++; } @@ -4805,12 +4971,12 @@ static void SaveMonDataInStruct(void) sPokedexView->sPokemonStats.baseDefense = gSpeciesInfo[species].baseDefense; sPokedexView->sPokemonStats.baseSpDefense = gSpeciesInfo[species].baseSpDefense; sPokedexView->sPokemonStats.differentEVs = differentEVs; - sPokedexView->sPokemonStats.evYield_HP = EVs[0]; - sPokedexView->sPokemonStats.evYield_Speed = EVs[1]; - sPokedexView->sPokemonStats.evYield_Attack = EVs[2]; - sPokedexView->sPokemonStats.evYield_SpAttack = EVs[3]; - sPokedexView->sPokemonStats.evYield_Defense = EVs[4]; - sPokedexView->sPokemonStats.evYield_SpDefense = EVs[5]; + sPokedexView->sPokemonStats.evYield_HP = evs[STAT_HP]; + sPokedexView->sPokemonStats.evYield_Speed = evs[STAT_ATK]; + sPokedexView->sPokemonStats.evYield_Attack = evs[STAT_DEF]; + sPokedexView->sPokemonStats.evYield_SpAttack = evs[STAT_SPEED]; + sPokedexView->sPokemonStats.evYield_Defense = evs[STAT_SPATK]; + sPokedexView->sPokemonStats.evYield_SpDefense = evs[STAT_SPDEF]; sPokedexView->sPokemonStats.catchRate = gSpeciesInfo[species].catchRate; sPokedexView->sPokemonStats.growthRate = gSpeciesInfo[species].growthRate; sPokedexView->sPokemonStats.eggGroup1 = gSpeciesInfo[species].eggGroups[0]; @@ -4904,7 +5070,7 @@ static void Task_LoadStatsScreen(u8 taskId) PrintStatsScreen_Moves_Bottom(taskId); if (!sPokedexListItem->owned) LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); - StatsPage_PrintNavigationButtons(); //gText_Stats_Buttons + StatsPage_PrintNavigationButtons(); //sText_Stats_Buttons gMain.state++; break; case 7: @@ -4948,7 +5114,7 @@ static void Task_LoadStatsScreen(u8 taskId) } } -static void FreeStatsScreenWindowAndBgBuffers(void) +static void UNUSED FreeStatsScreenWindowAndBgBuffers(void) { void *tilemapBuffer; @@ -5070,7 +5236,6 @@ static bool8 CalculateMoves(void) u16 statsMovesEgg[EGG_MOVES_ARRAY_COUNT] = {0}; u16 statsMovesLevelUp[MAX_LEVEL_UP_MOVES] = {0}; - u16 statsMovesTMHM[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0}; u16 move; u8 numEggMoves = 0; @@ -5152,7 +5317,7 @@ static void PrintStatsScreen_Moves_Top(u8 taskId) //Moves selected from move max ConvertIntToDecimalStringN(gStringVar1, (selected+1), STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, movesTotal, STR_CONV_MODE_RIGHT_ALIGN, 3); - StringExpandPlaceholders(gStringVar1, gText_Stats_MoveSelectedMax); + StringExpandPlaceholders(gStringVar1, sText_Stats_MoveSelectedMax); PrintStatsScreenTextSmallWhite(WIN_STATS_MOVES_TOP, gStringVar1, moves_x-1, moves_y+1); //Move name @@ -5182,7 +5347,7 @@ static void PrintStatsScreen_Moves_Top(u8 taskId) { level = gLevelUpLearnsets[species][(selected-numEggMoves)].level; ConvertIntToDecimalStringN(gStringVar1, level, STR_CONV_MODE_LEFT_ALIGN, 3); //Move learn lvl - PrintStatsScreenTextSmall(WIN_STATS_MOVES_TOP, gText_Stats_MoveLevel, moves_x + 113, moves_y + 3); //Level text + PrintStatsScreenTextSmall(WIN_STATS_MOVES_TOP, sText_Stats_MoveLevel, moves_x + 113, moves_y + 3); //Level text PrintStatsScreenTextSmall(WIN_STATS_MOVES_TOP, gStringVar1, moves_x + 113, moves_y + 14); //Print level item = ITEM_RARE_CANDY; } @@ -5292,7 +5457,7 @@ static void PrintStatsScreen_Moves_Bottom(u8 taskId) if (contest_effectValue != 0xFF) contest_appeal = contest_effectValue / 10; ConvertIntToDecimalStringN(gStringVar1, contest_appeal, STR_CONV_MODE_RIGHT_ALIGN, 1); - StringCopy(gStringVar2, gText_PlusSymbol); + StringCopy(gStringVar2, sText_PlusSymbol); StringAppend(gStringVar2, gStringVar1); PrintStatsScreenTextSmall(WIN_STATS_MOVES_BOTTOM, gStringVar2, moves_x + 45, moves_y); @@ -5301,7 +5466,7 @@ static void PrintStatsScreen_Moves_Bottom(u8 taskId) if (contest_effectValue != 0xFF) contest_jam = contest_effectValue / 10; ConvertIntToDecimalStringN(gStringVar1, contest_jam, STR_CONV_MODE_RIGHT_ALIGN, 1); - StringCopy(gStringVar2, gText_Stats_Minus); + StringCopy(gStringVar2, sText_Stats_Minus); StringAppend(gStringVar2, gStringVar1); PrintStatsScreenTextSmall(WIN_STATS_MOVES_BOTTOM, gStringVar2, moves_x + 119, moves_y); } @@ -5310,14 +5475,7 @@ static void PrintStatsScreen_Moves_Bottom(u8 taskId) static void PrintStatsScreen_NameGender(u8 taskId, u32 num, u32 value) { u8 str[16]; - u8 str2[32]; - u8 strEV[25]; u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum); - u16 natNum; - u8 evVal; - const u8 *category; - const u8 *description; - const u8 *strEVtype; u8 base_x = 38; u8 base_y = 0; @@ -5340,25 +5498,25 @@ static void PrintStatsScreen_NameGender(u8 taskId, u32 num, u32 value) switch (sPokedexView->sPokemonStats.genderRatio) { case 0: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_0, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_0, gender_x, gender_y); break; case 31: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_12_5, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_12_5, gender_x, gender_y); break; case 63: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_25, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_25, gender_x, gender_y); break; case 127: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_50, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_50, gender_x, gender_y); break; case 191: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_75, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_75, gender_x, gender_y); break; case 223: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_87_5, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_87_5, gender_x, gender_y); break; case 254: - PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_Stats_Gender_100, gender_x, gender_y); + PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, sText_Stats_Gender_100, gender_x, gender_y); break; default: PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, gText_ThreeDashes, gender_x, gender_y); @@ -5387,13 +5545,13 @@ static u8* PrintMonStatsToggle_EV_Arrows(u8 *dest, u8 value) switch (value) { case 1: - StringCopy(dest, gText_Stats_EV_Plus1); + StringCopy(dest, sText_Stats_EV_Plus1); break; case 2: - StringCopy(dest, gText_Stats_EV_Plus2); + StringCopy(dest, sText_Stats_EV_Plus2); break; case 3: - StringCopy(dest, gText_Stats_EV_Plus3); + StringCopy(dest, sText_Stats_EV_Plus3); break; } return dest; @@ -5403,7 +5561,6 @@ static void PrintStatsScreen_Left(u8 taskId) { u8 base_x = 8; u8 x_offset_column = 43; - u8 x_offset_value = 26; u8 column = 0; u8 base_x_offset = 70; u8 base_x_first_row = 23; @@ -5417,34 +5574,33 @@ static void PrintStatsScreen_Left(u8 taskId) u8 strBase[14]; u8 EVs[6] = {sPokedexView->sPokemonStats.evYield_HP, sPokedexView->sPokemonStats.evYield_Speed, sPokedexView->sPokemonStats.evYield_Attack, sPokedexView->sPokemonStats.evYield_SpAttack, sPokedexView->sPokemonStats.evYield_Defense, sPokedexView->sPokemonStats.evYield_SpDefense}; u8 differentEVs = 0; - u8 i; //Base stats if (gTasks[taskId].data[5] == 0) { - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_HP, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_HP, base_x, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseHP, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_first_row, base_y + base_y_offset*base_i); - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_Speed, base_x+base_x_second_row, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_Speed, base_x+base_x_second_row, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseSpeed, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_offset, base_y + base_y_offset*base_i); base_i++; - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_Attack, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_Attack, base_x, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_first_row, base_y + base_y_offset*base_i); - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_SpAttack, base_x+base_x_second_row, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_SpAttack, base_x+base_x_second_row, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseSpAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_offset, base_y + base_y_offset*base_i); base_i++; - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_Defense, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_Defense, base_x, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_first_row, base_y + base_y_offset*base_i); - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_SpDefense, base_x+base_x_second_row, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_SpDefense, base_x+base_x_second_row, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(strBase, sPokedexView->sPokemonStats.baseSpDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, strBase, base_x+base_x_offset, base_y + base_y_offset*base_i); base_i++; @@ -5461,9 +5617,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_HP); + StringCopy(gStringVar1, sText_Stats_HP); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[0]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } //Speed @@ -5472,9 +5628,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_Speed); + StringCopy(gStringVar1, sText_Stats_Speed); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[1]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } //Attack @@ -5483,9 +5639,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_Attack); + StringCopy(gStringVar1, sText_Stats_Attack); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[2]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } //Special Attack @@ -5494,9 +5650,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_SpAttack); + StringCopy(gStringVar1, sText_Stats_SpAttack); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[3]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } //Defense @@ -5505,9 +5661,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_Defense); + StringCopy(gStringVar1, sText_Stats_Defense); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[4]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } //Special Defense @@ -5516,9 +5672,9 @@ static void PrintStatsScreen_Left(u8 taskId) differentEVs++; column = PrintMonStatsToggle_DifferentEVsColumn(differentEVs); base_i = PrintMonStatsToggle_DifferentEVsRow(differentEVs); - StringCopy(gStringVar1, gText_Stats_SpDefense); + StringCopy(gStringVar1, sText_Stats_SpDefense); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[5]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + x_offset_column*column, base_y + base_y_offset*base_i); } } @@ -5528,54 +5684,54 @@ static void PrintStatsScreen_Left(u8 taskId) //HP if (EVs[0] > 0) { - StringCopy(gStringVar1, gText_Stats_HP); + StringCopy(gStringVar1, sText_Stats_HP); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[0]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } //Speed if (EVs[1] > 0) { - StringCopy(gStringVar1, gText_Stats_Speed); + StringCopy(gStringVar1, sText_Stats_Speed); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[1]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } //Attack if (EVs[2] > 0) { - StringCopy(gStringVar1, gText_Stats_Attack); + StringCopy(gStringVar1, sText_Stats_Attack); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[2]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } //Special Attack if (EVs[3] > 0) { - StringCopy(gStringVar1, gText_Stats_SpAttack); + StringCopy(gStringVar1, sText_Stats_SpAttack); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[3]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } //Defense if (EVs[4] > 0) { - StringCopy(gStringVar1, gText_Stats_Defense); + StringCopy(gStringVar1, sText_Stats_Defense); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[4]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } //Special Defense if (EVs[5] > 0) { - StringCopy(gStringVar1, gText_Stats_SpDefense); + StringCopy(gStringVar1, sText_Stats_SpDefense); PrintMonStatsToggle_EV_Arrows(gStringVar2, EVs[5]); - StringExpandPlaceholders(gStringVar3, gText_Stats_EvStr1Str2); + StringExpandPlaceholders(gStringVar3, sText_Stats_EvStr1Str2); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x + 29*column, base_y + base_y_offset*base_i); column++; } @@ -5590,42 +5746,42 @@ static void PrintStatsScreen_Left(u8 taskId) u32 growthRate = sPokedexView->sPokemonStats.growthRate; //Catch rate - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate, base_x, base_y + base_y_offset*base_i); if (catchRate <= 10) - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_Legend, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_Legend, base_x + x_offset_column, base_y + base_y_offset*base_i); else if (catchRate <= 70) - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_VeryHard, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_VeryHard, base_x + x_offset_column, base_y + base_y_offset*base_i); else if (catchRate <= 100) - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_Difficult, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_Difficult, base_x + x_offset_column, base_y + base_y_offset*base_i); else if (catchRate <= 150) - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_Medium, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_Medium, base_x + x_offset_column, base_y + base_y_offset*base_i); else if (catchRate <= 200) - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_Relaxed, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_Relaxed, base_x + x_offset_column, base_y + base_y_offset*base_i); else - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_CatchRate_Easy, base_x + x_offset_column, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_CatchRate_Easy, base_x + x_offset_column, base_y + base_y_offset*base_i); base_i++; //Growth rate - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_Growthrate, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_Growthrate, base_x, base_y + base_y_offset*base_i); switch (growthRate) { case GROWTH_MEDIUM_FAST: - StringCopy(strEV, gText_Stats_MEDIUM_FAST); + StringCopy(strEV, sText_Stats_MEDIUM_FAST); break; case GROWTH_ERRATIC: - StringCopy(strEV, gText_Stats_ERRATIC); + StringCopy(strEV, sText_Stats_ERRATIC); break; case GROWTH_FLUCTUATING: - StringCopy(strEV, gText_Stats_FLUCTUATING); + StringCopy(strEV, sText_Stats_FLUCTUATING); break; case GROWTH_MEDIUM_SLOW: - StringCopy(strEV, gText_Stats_MEDIUM_SLOW); + StringCopy(strEV, sText_Stats_MEDIUM_SLOW); break; case GROWTH_FAST: - StringCopy(strEV, gText_Stats_FAST); + StringCopy(strEV, sText_Stats_FAST); break; case GROWTH_SLOW: - StringCopy(strEV, gText_Stats_SLOW); + StringCopy(strEV, sText_Stats_SLOW); break; default: break; @@ -5636,29 +5792,29 @@ static void PrintStatsScreen_Left(u8 taskId) else { //Exp Yield - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_ExpYield, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_ExpYield, base_x, base_y + base_y_offset*base_i); ConvertIntToDecimalStringN(gStringVar1, sPokedexView->sPokemonStats.expYield, STR_CONV_MODE_RIGHT_ALIGN, 3); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar1, base_x + base_x_offset, base_y + base_y_offset*base_i); base_i++; //Friendship - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_Friendship, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_Friendship, base_x, base_y + base_y_offset*base_i); switch (sPokedexView->sPokemonStats.friendship) { case 35: - StringCopy(strEV, gText_Stats_Friendship_BigAnger); + StringCopy(strEV, sText_Stats_Friendship_BigAnger); break; case 70: - StringCopy(strEV, gText_Stats_Friendship_Neutral); + StringCopy(strEV, sText_Stats_Friendship_Neutral); break; case 90: - StringCopy(strEV, gText_Stats_Friendship_Happy); + StringCopy(strEV, sText_Stats_Friendship_Happy); break; case 100: - StringCopy(strEV, gText_Stats_Friendship_Happy); + StringCopy(strEV, sText_Stats_Friendship_Happy); break; case 140: - StringCopy(strEV, gText_Stats_Friendship_BigSmile); + StringCopy(strEV, sText_Stats_Friendship_BigSmile); break; default: ConvertIntToDecimalStringN(strEV, sPokedexView->sPokemonStats.friendship, STR_CONV_MODE_RIGHT_ALIGN, 3); @@ -5671,30 +5827,30 @@ static void PrintStatsScreen_Left(u8 taskId) //Egg cycles if (sPokedexView->sPokemonStats.eggGroup1 == EGG_GROUP_UNDISCOVERED || sPokedexView->sPokemonStats.eggGroup2 == EGG_GROUP_UNDISCOVERED) //Species without eggs (legendaries etc) { - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_EggCycles, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_EggCycles, base_x, base_y + base_y_offset*base_i); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_ThreeDashes, 78, base_y + base_y_offset*base_i); } else { - PrintStatsScreenTextSmall(WIN_STATS_LEFT, gText_Stats_EggCycles, base_x, base_y + base_y_offset*base_i); + PrintStatsScreenTextSmall(WIN_STATS_LEFT, sText_Stats_EggCycles, base_x, base_y + base_y_offset*base_i); if (sPokedexView->sPokemonStats.eggCycles <= 10) { - StringCopy(strEV, gText_Stats_EggCycles_VeryFast); + StringCopy(strEV, sText_Stats_EggCycles_VeryFast); align_x = 76; } else if (sPokedexView->sPokemonStats.eggCycles <= 20) { - StringCopy(strEV, gText_Stats_EggCycles_Fast); + StringCopy(strEV, sText_Stats_EggCycles_Fast); align_x = 85; } else if (sPokedexView->sPokemonStats.eggCycles <= 30) { - StringCopy(strEV, gText_Stats_EggCycles_Normal); + StringCopy(strEV, sText_Stats_EggCycles_Normal); align_x = 76; } else { - StringCopy(strEV, gText_Stats_EggCycles_Slow); + StringCopy(strEV, sText_Stats_EggCycles_Slow); align_x = 67; } PrintStatsScreenTextSmall(WIN_STATS_LEFT, strEV, align_x, base_y + base_y_offset*base_i); @@ -5705,49 +5861,49 @@ static void PrintStatsScreen_Left(u8 taskId) switch (sPokedexView->sPokemonStats.eggGroup1) { case EGG_GROUP_MONSTER : - StringCopy(gStringVar1, gText_Stats_eggGroup_MONSTER); + StringCopy(gStringVar1, sText_Stats_eggGroup_MONSTER); break; case EGG_GROUP_WATER_1 : - StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_1); + StringCopy(gStringVar1, sText_Stats_eggGroup_WATER_1); break; case EGG_GROUP_BUG : - StringCopy(gStringVar1, gText_Stats_eggGroup_BUG); + StringCopy(gStringVar1, sText_Stats_eggGroup_BUG); break; case EGG_GROUP_FLYING : - StringCopy(gStringVar1, gText_Stats_eggGroup_FLYING); + StringCopy(gStringVar1, sText_Stats_eggGroup_FLYING); break; case EGG_GROUP_FIELD : - StringCopy(gStringVar1, gText_Stats_eggGroup_FIELD); + StringCopy(gStringVar1, sText_Stats_eggGroup_FIELD); break; case EGG_GROUP_FAIRY : - StringCopy(gStringVar1, gText_Stats_eggGroup_FAIRY); + StringCopy(gStringVar1, sText_Stats_eggGroup_FAIRY); break; case EGG_GROUP_GRASS : - StringCopy(gStringVar1, gText_Stats_eggGroup_GRASS); + StringCopy(gStringVar1, sText_Stats_eggGroup_GRASS); break; case EGG_GROUP_HUMAN_LIKE : - StringCopy(gStringVar1, gText_Stats_eggGroup_HUMAN_LIKE); + StringCopy(gStringVar1, sText_Stats_eggGroup_HUMAN_LIKE); break; case EGG_GROUP_WATER_3 : - StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_3); + StringCopy(gStringVar1, sText_Stats_eggGroup_WATER_3); break; case EGG_GROUP_MINERAL : - StringCopy(gStringVar1, gText_Stats_eggGroup_MINERAL); + StringCopy(gStringVar1, sText_Stats_eggGroup_MINERAL); break; case EGG_GROUP_AMORPHOUS : - StringCopy(gStringVar1, gText_Stats_eggGroup_AMORPHOUS); + StringCopy(gStringVar1, sText_Stats_eggGroup_AMORPHOUS); break; case EGG_GROUP_WATER_2 : - StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_2); + StringCopy(gStringVar1, sText_Stats_eggGroup_WATER_2); break; case EGG_GROUP_DITTO : - StringCopy(gStringVar1, gText_Stats_eggGroup_DITTO); + StringCopy(gStringVar1, sText_Stats_eggGroup_DITTO); break; case EGG_GROUP_DRAGON : - StringCopy(gStringVar1, gText_Stats_eggGroup_DRAGON); + StringCopy(gStringVar1, sText_Stats_eggGroup_DRAGON); break; case EGG_GROUP_UNDISCOVERED: - StringCopy(gStringVar1, gText_Stats_eggGroup_UNDISCOVERED); + StringCopy(gStringVar1, sText_Stats_eggGroup_UNDISCOVERED); break; } //Egg group 2 @@ -5756,52 +5912,52 @@ static void PrintStatsScreen_Left(u8 taskId) switch (sPokedexView->sPokemonStats.eggGroup2) { case EGG_GROUP_MONSTER : - StringCopy(gStringVar2, gText_Stats_eggGroup_MONSTER); + StringCopy(gStringVar2, sText_Stats_eggGroup_MONSTER); break; case EGG_GROUP_WATER_1 : - StringCopy(gStringVar2, gText_Stats_eggGroup_WATER_1); + StringCopy(gStringVar2, sText_Stats_eggGroup_WATER_1); break; case EGG_GROUP_BUG : - StringCopy(gStringVar2, gText_Stats_eggGroup_BUG); + StringCopy(gStringVar2, sText_Stats_eggGroup_BUG); break; case EGG_GROUP_FLYING : - StringCopy(gStringVar2, gText_Stats_eggGroup_FLYING); + StringCopy(gStringVar2, sText_Stats_eggGroup_FLYING); break; case EGG_GROUP_FIELD : - StringCopy(gStringVar2, gText_Stats_eggGroup_FIELD); + StringCopy(gStringVar2, sText_Stats_eggGroup_FIELD); break; case EGG_GROUP_FAIRY : - StringCopy(gStringVar2, gText_Stats_eggGroup_FAIRY); + StringCopy(gStringVar2, sText_Stats_eggGroup_FAIRY); break; case EGG_GROUP_GRASS : - StringCopy(gStringVar2, gText_Stats_eggGroup_GRASS); + StringCopy(gStringVar2, sText_Stats_eggGroup_GRASS); break; case EGG_GROUP_HUMAN_LIKE : - StringCopy(gStringVar2, gText_Stats_eggGroup_HUMAN_LIKE); + StringCopy(gStringVar2, sText_Stats_eggGroup_HUMAN_LIKE); break; case EGG_GROUP_WATER_3 : - StringCopy(gStringVar2, gText_Stats_eggGroup_WATER_3); + StringCopy(gStringVar2, sText_Stats_eggGroup_WATER_3); break; case EGG_GROUP_MINERAL : - StringCopy(gStringVar2, gText_Stats_eggGroup_MINERAL); + StringCopy(gStringVar2, sText_Stats_eggGroup_MINERAL); break; case EGG_GROUP_AMORPHOUS : - StringCopy(gStringVar2, gText_Stats_eggGroup_AMORPHOUS); + StringCopy(gStringVar2, sText_Stats_eggGroup_AMORPHOUS); break; case EGG_GROUP_WATER_2 : - StringCopy(gStringVar2, gText_Stats_eggGroup_WATER_2); + StringCopy(gStringVar2, sText_Stats_eggGroup_WATER_2); break; case EGG_GROUP_DITTO : - StringCopy(gStringVar2, gText_Stats_eggGroup_DITTO); + StringCopy(gStringVar2, sText_Stats_eggGroup_DITTO); break; case EGG_GROUP_DRAGON : - StringCopy(gStringVar2, gText_Stats_eggGroup_DRAGON); + StringCopy(gStringVar2, sText_Stats_eggGroup_DRAGON); break; case EGG_GROUP_UNDISCOVERED: - StringCopy(gStringVar2, gText_Stats_eggGroup_UNDISCOVERED); + StringCopy(gStringVar2, sText_Stats_eggGroup_UNDISCOVERED); break; } - StringExpandPlaceholders(gStringVar3, gText_Stats_eggGroup_Groups); + StringExpandPlaceholders(gStringVar3, sText_Stats_eggGroup_Groups); align_x = GetStringRightAlignXOffset(0, gStringVar3, total_x); PrintStatsScreenTextSmall(WIN_STATS_LEFT, gStringVar3, base_x, base_y + base_y_offset*base_i); } @@ -5816,7 +5972,6 @@ static void PrintStatsScreen_Left(u8 taskId) static void PrintStatsScreen_Abilities(u8 taskId) { - u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum); u8 abilities_x = 5; u8 abilities_y = 3; u16 ability0; @@ -5915,31 +6070,30 @@ static void EvoFormsPage_PrintNavigationButtons(void) if (sPokedexView->selectedScreen == EVO_SCREEN) { if (!HGSS_DECAPPED) - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x+9, y, sStatsPageNavigationTextColor, 0, gText_EVO_Buttons_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x+9, y, sStatsPageNavigationTextColor, 0, sText_EVO_Buttons_PE); else - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x+9, y, sStatsPageNavigationTextColor, 0, gText_EVO_Buttons_Decapped_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x+9, y, sStatsPageNavigationTextColor, 0, sText_EVO_Buttons_Decapped_PE); } else if (sPokedexView->selectedScreen == FORMS_SCREEN) { if (sPokedexView->sFormScreenData.inSubmenu) { if (!HGSS_DECAPPED) - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Submenu_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_FORMS_Buttons_Submenu_PE); else - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Submenu_Decapped_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_FORMS_Buttons_Submenu_Decapped_PE); } else { if (!HGSS_DECAPPED) - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_FORMS_Buttons_PE); else - AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Decapped_PE); + AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, sText_FORMS_Buttons_Decapped_PE); } } - // DrawKeypadIcon(WIN_NAVIGATION_BUTTONS, 10, 5, 0); //(u8 windowId, u8 keypadIconId, u16 x, u16 y) PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); } static void ResetEvoScreenDataStruct(void) @@ -5998,10 +6152,10 @@ static void Task_LoadEvolutionScreen(u8 taskId) LoadTilesetTilemapHGSS(EVO_SCREEN); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); FillWindowPixelBuffer(WIN_NAVIGATION_BUTTONS, PIXEL_FILL(0)); PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -6096,7 +6250,6 @@ static void Task_HandleEvolutionScreenInput(u8 taskId) if (sPokedexView->sEvoScreenData.numAllEvolutions != 0 && sPokedexView->sEvoScreenData.numSeen != 0) { - u8 i; u8 base_y = 58; u8 base_y_offset = 9; u8 pos = sPokedexView->sEvoScreenData.menuPos; @@ -6187,7 +6340,7 @@ static void HandleTargetSpeciesPrint(u8 taskId, u16 targetSpecies, u16 previousT StringCopy(gStringVar3, gSpeciesNames[targetSpecies]); //evolution mon name else StringCopy(gStringVar3, gText_ThreeQuestionMarks); //show questionmarks instead of name - StringExpandPlaceholders(gStringVar3, gText_EVO_Name); //evolution mon name + StringExpandPlaceholders(gStringVar3, sText_EVO_Name); //evolution mon name PrintInfoScreenTextSmall(gStringVar3, base_x, base_y + base_y_offset*base_i); //evolution mon name //Print mon icon in the top row @@ -6232,7 +6385,7 @@ static void HandlePreEvolutionSpeciesPrint(u8 taskId, u16 preSpecies, u16 specie StringCopy(gStringVar1, gSpeciesNames[species]); //evolution mon name if (sPokedexView->sEvoScreenData.isMega) - StringExpandPlaceholders(gStringVar3, gText_EVO_PreEvo_PE_Mega); + StringExpandPlaceholders(gStringVar3, sText_EVO_PreEvo_PE_Mega); else { @@ -6241,7 +6394,7 @@ static void HandlePreEvolutionSpeciesPrint(u8 taskId, u16 preSpecies, u16 specie else StringCopy(gStringVar2, gText_ThreeQuestionMarks); //show questionmarks instead of name - StringExpandPlaceholders(gStringVar3, gText_EVO_PreEvo); //evolution mon name + StringExpandPlaceholders(gStringVar3, sText_EVO_PreEvo); //evolution mon name } @@ -6263,8 +6416,6 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species) u8 base_x = 13+8; u8 base_y = 51; u8 base_y_offset = 9; - u8 base_i = 0; - u8 depth_x = 16; u16 preEvolutionOne = 0; u16 preEvolutionTwo = 0; @@ -6355,8 +6506,7 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species) static u8 PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 depth, u8 depth_i) { u16 i; - u16 j; - const struct MapHeader *mapHeader; + const struct MapHeader *mapHeader; u16 targetSpecies = 0; u16 previousTargetSpecies = 0; @@ -6392,7 +6542,7 @@ static u8 PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 depth, //If there are no evolutions print text if (times == 0 && depth == 0) { - StringExpandPlaceholders(gStringVar4, gText_EVO_NONE); + StringExpandPlaceholders(gStringVar4, sText_EVO_NONE); PrintInfoScreenTextSmall(gStringVar4, base_x-7-7, base_y + base_y_offset*depth_i); } @@ -6412,178 +6562,178 @@ static u8 PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 depth, { case EVO_FRIENDSHIP: ConvertIntToDecimalStringN(gStringVar2, 220, STR_CONV_MODE_LEADING_ZEROS, 3); //friendship value - StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP ); + StringExpandPlaceholders(gStringVar4, sText_EVO_FRIENDSHIP ); break; case EVO_FRIENDSHIP_DAY: - StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_DAY ); + StringExpandPlaceholders(gStringVar4, sText_EVO_FRIENDSHIP_DAY ); break; case EVO_FRIENDSHIP_NIGHT: - StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_NIGHT ); + StringExpandPlaceholders(gStringVar4, sText_EVO_FRIENDSHIP_NIGHT ); break; case EVO_LEVEL: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL ); break; case EVO_TRADE: - StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE ); + StringExpandPlaceholders(gStringVar4, sText_EVO_TRADE ); break; case EVO_TRADE_ITEM: item = gEvolutionTable[species][i].param; //item CopyItemName(item, gStringVar2); //item - StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_ITEM ); + StringExpandPlaceholders(gStringVar4, sText_EVO_TRADE_ITEM ); break; case EVO_ITEM: item = gEvolutionTable[species][i].param; CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM ); + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM ); break; case EVO_LEVEL_ATK_GT_DEF: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_GT_DEF ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_ATK_GT_DEF ); break; case EVO_LEVEL_ATK_EQ_DEF: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_EQ_DEF ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_ATK_EQ_DEF ); break; case EVO_LEVEL_ATK_LT_DEF: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_LT_DEF ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_ATK_LT_DEF ); break; case EVO_LEVEL_SILCOON: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_SILCOON ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_SILCOON ); break; case EVO_LEVEL_CASCOON: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_CASCOON ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_CASCOON ); break; case EVO_LEVEL_NINJASK: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NINJASK ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_NINJASK ); break; case EVO_LEVEL_SHEDINJA: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_SHEDINJA ); + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_SHEDINJA ); break; case EVO_BEAUTY: ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, 3); //beauty - StringExpandPlaceholders(gStringVar4, gText_EVO_BEAUTY ); + StringExpandPlaceholders(gStringVar4, sText_EVO_BEAUTY ); + break; + case EVO_LEVEL_FEMALE: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_FEMALE ); + break; + case EVO_LEVEL_MALE: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_MALE ); + break; + case EVO_LEVEL_NIGHT: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_NIGHT ); + break; + case EVO_LEVEL_DAY: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_DAY ); + break; + case EVO_LEVEL_DUSK: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_DUSK ); + break; + case EVO_ITEM_HOLD_DAY: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_HOLD_DAY ); + break; + case EVO_ITEM_HOLD_NIGHT: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_HOLD_NIGHT ); + break; + case EVO_MOVE: + StringCopy(gStringVar2, gMoveNames[gEvolutionTable[species][i].param]); + StringExpandPlaceholders(gStringVar4, sText_EVO_MOVE ); + break; + case EVO_FRIENDSHIP_MOVE_TYPE: + StringCopy(gStringVar2, gTypeNames[gEvolutionTable[species][i].param]); + StringExpandPlaceholders(gStringVar4, sText_EVO_FRIENDSHIP_MOVE_TYPE ); + break; + case EVO_MAPSEC: + StringCopy(gStringVar2, gRegionMapEntries[gEvolutionTable[species][i].param].name); + StringExpandPlaceholders(gStringVar4, sText_EVO_MAPSEC ); + break; + case EVO_ITEM_MALE: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_MALE ); + break; + case EVO_ITEM_FEMALE: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_FEMALE ); + break; + case EVO_LEVEL_RAIN: + //if (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR) + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_RAIN ); + break; + case EVO_SPECIFIC_MON_IN_PARTY: + StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name + StringExpandPlaceholders(gStringVar4, sText_EVO_SPECIFIC_MON_IN_PARTY ); + break; + case EVO_LEVEL_DARK_TYPE_MON_IN_PARTY: + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY ); + break; + case EVO_TRADE_SPECIFIC_MON: + StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name + StringExpandPlaceholders(gStringVar4, sText_EVO_TRADE_SPECIFIC_MON ); + break; + case EVO_SPECIFIC_MAP: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gEvolutionTable[species][i].param >> 8, gEvolutionTable[species][i].param & 0xFF); + GetMapName(gStringVar2, mapHeader->regionMapSectionId, 0); + StringExpandPlaceholders(gStringVar4, sText_EVO_SPECIFIC_MAP ); + break; + case EVO_LEVEL_NATURE_AMPED: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_NATURE_AMPED); + break; + case EVO_LEVEL_NATURE_LOW_KEY: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_NATURE_LOW_KEY); + break; + case EVO_CRITICAL_HITS: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_CRITS_DIGITS); //crits + StringExpandPlaceholders(gStringVar4, sText_EVO_CRITICAL_HITS); + break; + case EVO_SCRIPT_TRIGGER_DMG: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_DMG_DIGITS); //damage + StringExpandPlaceholders(gStringVar4, sText_EVO_SCRIPT_TRIGGER_DMG); + break; + case EVO_DARK_SCROLL: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, sText_EVO_DARK_SCROLL ); + break; + case EVO_WATER_SCROLL: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, sText_EVO_WATER_SCROLL ); + break; + case EVO_ITEM_NIGHT: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_NIGHT ); + break; + case EVO_ITEM_DAY: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_DAY ); + break; + case EVO_ITEM_HOLD: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_HOLD ); break; - case EVO_LEVEL_FEMALE: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_FEMALE ); - break; - case EVO_LEVEL_MALE: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_MALE ); - break; - case EVO_LEVEL_NIGHT: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NIGHT ); - break; - case EVO_LEVEL_DAY: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DAY ); - break; - case EVO_LEVEL_DUSK: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DUSK ); - break; - case EVO_ITEM_HOLD_DAY: - item = gEvolutionTable[species][i].param; //item - CopyItemName(item, gStringVar2); //item - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_DAY ); - break; - case EVO_ITEM_HOLD_NIGHT: - item = gEvolutionTable[species][i].param; //item - CopyItemName(item, gStringVar2); //item - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_NIGHT ); - break; - case EVO_MOVE: - StringCopy(gStringVar2, gMoveNames[gEvolutionTable[species][i].param]); - StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE ); - break; - case EVO_FRIENDSHIP_MOVE_TYPE: - StringCopy(gStringVar2, gTypeNames[gEvolutionTable[species][i].param]); - StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE_TYPE ); - break; - case EVO_MAPSEC: - StringCopy(gStringVar2, gRegionMapEntries[gEvolutionTable[species][i].param].name); - StringExpandPlaceholders(gStringVar4, gText_EVO_MAPSEC ); - break; - case EVO_ITEM_MALE: - item = gEvolutionTable[species][i].param; //item - CopyItemName(item, gStringVar2); //item - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_MALE ); - break; - case EVO_ITEM_FEMALE: - item = gEvolutionTable[species][i].param; //item - CopyItemName(item, gStringVar2); //item - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_FEMALE ); - break; - case EVO_LEVEL_RAIN: - //if (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR) - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_RAIN ); - break; - case EVO_SPECIFIC_MON_IN_PARTY: - StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name - StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MON_IN_PARTY ); - break; - case EVO_LEVEL_DARK_TYPE_MON_IN_PARTY: - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY ); - break; - case EVO_TRADE_SPECIFIC_MON: - StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name - StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_SPECIFIC_MON ); - break; - case EVO_SPECIFIC_MAP: - mapHeader = Overworld_GetMapHeaderByGroupAndId(gEvolutionTable[species][i].param >> 8, gEvolutionTable[species][i].param & 0xFF); - GetMapName(gStringVar2, mapHeader->regionMapSectionId, 0); - StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MAP ); - break; - case EVO_LEVEL_NATURE_AMPED: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NATURE_AMPED); - break; - case EVO_LEVEL_NATURE_LOW_KEY: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level - StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NATURE_LOW_KEY); - break; - case EVO_CRITICAL_HITS: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_CRITS_DIGITS); //crits - StringExpandPlaceholders(gStringVar4, gText_EVO_CRITICAL_HITS); - break; - case EVO_SCRIPT_TRIGGER_DMG: - ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_DMG_DIGITS); //damage - StringExpandPlaceholders(gStringVar4, gText_EVO_SCRIPT_TRIGGER_DMG); - break; - case EVO_DARK_SCROLL: - item = gEvolutionTable[species][i].param; - CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_DARK_SCROLL ); - break; - case EVO_WATER_SCROLL: - item = gEvolutionTable[species][i].param; - CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_WATER_SCROLL ); - break; - case EVO_ITEM_NIGHT: - item = gEvolutionTable[species][i].param; - CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_NIGHT ); - break; - case EVO_ITEM_DAY: - item = gEvolutionTable[species][i].param; - CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_DAY ); - break; - case EVO_ITEM_HOLD: - item = gEvolutionTable[species][i].param; - CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD ); - break; default: - StringExpandPlaceholders(gStringVar4, gText_EVO_UNKNOWN ); + StringExpandPlaceholders(gStringVar4, sText_EVO_UNKNOWN ); break; }//Switch end PrintInfoScreenTextSmall(gStringVar4, base_x + depth_x*depth+base_x_offset, base_y + base_y_offset*base_i); //Print actual instructions @@ -6676,10 +6826,10 @@ static void Task_LoadFormsScreen(u8 taskId) LoadTilesetTilemapHGSS(FORMS_SCREEN); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); FillWindowPixelBuffer(WIN_NAVIGATION_BUTTONS, PIXEL_FILL(0)); PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -6852,13 +7002,9 @@ static void PrintForms(u8 taskId, u16 species) u8 j = 1; u16 speciesForm; - - bool8 left = TRUE; u8 base_x = 5; - u8 base_x_offset = 54; u8 base_y = 52; u8 base_y_offset = 9; - u8 base_i = 0; u8 times = 0; u8 y_offset_icons = 0; //For unown only @@ -6886,10 +7032,6 @@ static void PrintForms(u8 taskId, u16 species) gTasks[taskId].data[4+times] = CreateMonIcon(speciesForm, SpriteCB_MonIcon, 52 + 34*(times-1), 31, 4, 0); //Create pokemon sprite else if (times < 14) gTasks[taskId].data[4+times] = CreateMonIcon(speciesForm, SpriteCB_MonIcon, 18 + 34*(times-7), 70 - y_offset_icons, 4, 0); //Create pokemon sprite - else if (times < 21) - gTasks[taskId].data[4+times] = CreateMonIcon(speciesForm, SpriteCB_MonIcon, 18 + 34*(times-14), 104 - y_offset_icons, 4, 0); //Create pokemon sprite - else - gTasks[taskId].data[4+times] = CreateMonIcon(speciesForm, SpriteCB_MonIcon, 18 + 34*(times-21), 138 - y_offset_icons, 4, 0); //Create pokemon sprite gSprites[gTasks[taskId].data[4+times]].oam.priority = 0; } } @@ -6899,7 +7041,7 @@ static void PrintForms(u8 taskId, u16 species) //If there are no forms print text if (times == 0) { - StringExpandPlaceholders(gStringVar4, gText_FORMS_NONE); + StringExpandPlaceholders(gStringVar4, sText_FORMS_NONE); PrintInfoScreenTextSmall(gStringVar4, base_x, base_y + base_y_offset*times); } } @@ -7550,7 +7692,7 @@ static void Task_ClosePokedexFromSearchResultsStartMenu(u8 taskId) static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { u16 species; - u16 i,j; + u16 i; u16 resultsCount; u8 types[2]; @@ -7721,24 +7863,24 @@ static void Task_LoadSearchMenu(u8 taskId) DeactivateAllTextPrinters(); PutWindowTilemap(0); if (!HGSS_DECAPPED) - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_MenuSearch_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_MenuSearch_Gfx, 0x2000, 0, 0); else - DecompressAndLoadBgGfxUsingHeap(3, gPokedexPlusHGSS_MenuSearch_DECA_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, sPokedexPlusHGSS_MenuSearch_DECA_Gfx, 0x2000, 0, 0); if (!IsNationalPokedexEnabled()) - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenSearchHoenn_Tilemap, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenSearchHoenn_Tilemap, 0, 0); else - CopyToBgTilemapBuffer(3, gPokedexPlusHGSS_ScreenSearchNational_Tilemap, 0, 0); + CopyToBgTilemapBuffer(3, sPokedexPlusHGSS_ScreenSearchNational_Tilemap, 0, 0); if (!HGSS_DARK_MODE) - LoadPalette(gPokedexPlusHGSS_MenuSearch_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(4 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_MenuSearch_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(4 * 16 - 1)); else - LoadPalette(gPokedexPlusHGSS_MenuSearch_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(4 * 16 - 1)); + LoadPalette(sPokedexPlusHGSS_MenuSearch_dark_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(4 * 16 - 1)); gMain.state = 1; } break; case 1: LoadCompressedSpriteSheet(&sInterfaceSpriteSheet[HGSS_DECAPPED]); LoadSpritePalettes(sInterfaceSpritePalette); - LoadSpritePalettes(sStatBarSpritePal); + LoadSpritePalettes(sStatBarSpritePal); CreateSearchParameterScrollArrows(taskId); for (i = 0; i < NUM_TASK_DATA; i++) gTasks[taskId].data[i] = 0; @@ -8014,8 +8156,8 @@ static void Task_SearchCompleteWaitForInput(u8 taskId) static void Task_SelectSearchMenuItem(u8 taskId) { u8 menuItem; - u16 *cursorPos; - u16 *scrollOffset; + s16 *cursorPos; + s16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); menuItem = gTasks[taskId].tMenuItem; @@ -8035,8 +8177,8 @@ static void Task_HandleSearchParameterInput(u8 taskId) { u8 menuItem; const struct SearchOptionText *texts; - u16 *cursorPos; - u16 *scrollOffset; + s16 *cursorPos; + s16 *scrollOffset; u16 maxOption; bool8 moved; @@ -8354,8 +8496,8 @@ static void DrawOrEraseSearchParameterBox(bool8 erase) static void PrintSearchParameterText(u8 taskId) { const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; + const s16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; u16 i; u16 j; @@ -8369,8 +8511,8 @@ static void PrintSearchParameterText(u8 taskId) static u8 GetSearchModeSelection(u8 taskId, u8 option) { - const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; + const s16 *cursorPos = &gTasks[taskId].data[sSearchOptions[option].taskDataCursorPos]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[option].taskDataScrollOffset]; u16 id = *cursorPos + *scrollOffset; switch (option) @@ -8441,7 +8583,7 @@ static void SetDefaultSearchModeAndOrder(u8 taskId) static bool8 SearchParamCantScrollUp(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) @@ -8453,7 +8595,7 @@ static bool8 SearchParamCantScrollUp(u8 taskId) static bool8 SearchParamCantScrollDown(u8 taskId) { u8 menuItem = gTasks[taskId].tMenuItem; - const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + const s16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; u16 lastOption = sSearchOptions[menuItem].numOptions - 1; if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) @@ -8538,5 +8680,3 @@ static void ClearSearchParameterBoxText(void) { ClearSearchMenuRect(144, 8, 96, 96); } - -#endif diff --git a/src/pokemon.c b/src/pokemon.c index 03c7c34712..97577efbb0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -53,16 +53,11 @@ #include "constants/union_room.h" #include "constants/weather.h" -#define DAY_EVO_HOUR_BEGIN 12 -#define DAY_EVO_HOUR_END HOURS_PER_DAY - -#define DUSK_EVO_HOUR_BEGIN 17 -#define DUSK_EVO_HOUR_END 18 - -#define NIGHT_EVO_HOUR_BEGIN 0 -#define NIGHT_EVO_HOUR_END 12 - +#if P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9 +#define FRIENDSHIP_EVO_THRESHOLD 160 +#else #define FRIENDSHIP_EVO_THRESHOLD 220 +#endif struct SpeciesItem { @@ -477,6 +472,9 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = SPECIES_TO_NATIONAL(MAGMAR), SPECIES_TO_NATIONAL(PINSIR), SPECIES_TO_NATIONAL(TAUROS), + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED - 1] = NATIONAL_DEX_TAUROS, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED - 1] = NATIONAL_DEX_TAUROS, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED - 1] = NATIONAL_DEX_TAUROS, SPECIES_TO_NATIONAL(MAGIKARP), SPECIES_TO_NATIONAL(GYARADOS), SPECIES_TO_NATIONAL(LAPRAS), @@ -543,6 +541,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = SPECIES_TO_NATIONAL(SUNFLORA), SPECIES_TO_NATIONAL(YANMA), SPECIES_TO_NATIONAL(WOOPER), + [SPECIES_WOOPER_PALDEAN - 1] = NATIONAL_DEX_WOOPER, SPECIES_TO_NATIONAL(QUAGSIRE), SPECIES_TO_NATIONAL(ESPEON), SPECIES_TO_NATIONAL(UMBREON), @@ -1227,6 +1226,68 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = SPECIES_TO_NATIONAL(RUNERIGUS), SPECIES_TO_NATIONAL(MILCERY), SPECIES_TO_NATIONAL(ALCREMIE), + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, SPECIES_TO_NATIONAL(FALINKS), SPECIES_TO_NATIONAL(PINCURCHIN), SPECIES_TO_NATIONAL(SNOM), @@ -1259,11 +1320,145 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = SPECIES_TO_NATIONAL(WYRDEER), SPECIES_TO_NATIONAL(KLEAVOR), SPECIES_TO_NATIONAL(URSALUNA), + [SPECIES_URSALUNA_BLOODMOON - 1] = NATIONAL_DEX_URSALUNA, SPECIES_TO_NATIONAL(BASCULEGION), SPECIES_TO_NATIONAL(SNEASLER), SPECIES_TO_NATIONAL(OVERQWIL), SPECIES_TO_NATIONAL(ENAMORUS), #endif +#if P_GEN_9_POKEMON == TRUE + SPECIES_TO_NATIONAL(SPRIGATITO), + SPECIES_TO_NATIONAL(FLORAGATO), + SPECIES_TO_NATIONAL(MEOWSCARADA), + SPECIES_TO_NATIONAL(FUECOCO), + SPECIES_TO_NATIONAL(CROCALOR), + SPECIES_TO_NATIONAL(SKELEDIRGE), + SPECIES_TO_NATIONAL(QUAXLY), + SPECIES_TO_NATIONAL(QUAXWELL), + SPECIES_TO_NATIONAL(QUAQUAVAL), + SPECIES_TO_NATIONAL(LECHONK), + SPECIES_TO_NATIONAL(OINKOLOGNE), + [SPECIES_OINKOLOGNE_FEMALE - 1] = NATIONAL_DEX_OINKOLOGNE, + SPECIES_TO_NATIONAL(TAROUNTULA), + SPECIES_TO_NATIONAL(SPIDOPS), + SPECIES_TO_NATIONAL(NYMBLE), + SPECIES_TO_NATIONAL(LOKIX), + SPECIES_TO_NATIONAL(PAWMI), + SPECIES_TO_NATIONAL(PAWMO), + SPECIES_TO_NATIONAL(PAWMOT), + SPECIES_TO_NATIONAL(TANDEMAUS), + SPECIES_TO_NATIONAL(MAUSHOLD), + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR - 1] = NATIONAL_DEX_MAUSHOLD, + SPECIES_TO_NATIONAL(FIDOUGH), + SPECIES_TO_NATIONAL(DACHSBUN), + SPECIES_TO_NATIONAL(SMOLIV), + SPECIES_TO_NATIONAL(DOLLIV), + SPECIES_TO_NATIONAL(ARBOLIVA), + SPECIES_TO_NATIONAL(SQUAWKABILLY), + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE - 1] = NATIONAL_DEX_SQUAWKABILLY, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE - 1] = NATIONAL_DEX_SQUAWKABILLY, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE - 1] = NATIONAL_DEX_SQUAWKABILLY, + SPECIES_TO_NATIONAL(NACLI), + SPECIES_TO_NATIONAL(NACLSTACK), + SPECIES_TO_NATIONAL(GARGANACL), + SPECIES_TO_NATIONAL(CHARCADET), + SPECIES_TO_NATIONAL(ARMAROUGE), + SPECIES_TO_NATIONAL(CERULEDGE), + SPECIES_TO_NATIONAL(TADBULB), + SPECIES_TO_NATIONAL(BELLIBOLT), + SPECIES_TO_NATIONAL(WATTREL), + SPECIES_TO_NATIONAL(KILOWATTREL), + SPECIES_TO_NATIONAL(MASCHIFF), + SPECIES_TO_NATIONAL(MABOSSTIFF), + SPECIES_TO_NATIONAL(SHROODLE), + SPECIES_TO_NATIONAL(GRAFAIAI), + SPECIES_TO_NATIONAL(BRAMBLIN), + SPECIES_TO_NATIONAL(BRAMBLEGHAST), + SPECIES_TO_NATIONAL(TOEDSCOOL), + SPECIES_TO_NATIONAL(TOEDSCRUEL), + SPECIES_TO_NATIONAL(KLAWF), + SPECIES_TO_NATIONAL(CAPSAKID), + SPECIES_TO_NATIONAL(SCOVILLAIN), + SPECIES_TO_NATIONAL(RELLOR), + SPECIES_TO_NATIONAL(RABSCA), + SPECIES_TO_NATIONAL(FLITTLE), + SPECIES_TO_NATIONAL(ESPATHRA), + SPECIES_TO_NATIONAL(TINKATINK), + SPECIES_TO_NATIONAL(TINKATUFF), + SPECIES_TO_NATIONAL(TINKATON), + SPECIES_TO_NATIONAL(WIGLETT), + SPECIES_TO_NATIONAL(WUGTRIO), + SPECIES_TO_NATIONAL(BOMBIRDIER), + SPECIES_TO_NATIONAL(FINIZEN), + SPECIES_TO_NATIONAL(PALAFIN), + [SPECIES_PALAFIN_HERO - 1] = NATIONAL_DEX_PALAFIN, + SPECIES_TO_NATIONAL(VAROOM), + SPECIES_TO_NATIONAL(REVAVROOM), + SPECIES_TO_NATIONAL(CYCLIZAR), + SPECIES_TO_NATIONAL(ORTHWORM), + SPECIES_TO_NATIONAL(GLIMMET), + SPECIES_TO_NATIONAL(GLIMMORA), + SPECIES_TO_NATIONAL(GREAVARD), + SPECIES_TO_NATIONAL(HOUNDSTONE), + SPECIES_TO_NATIONAL(FLAMIGO), + SPECIES_TO_NATIONAL(CETODDLE), + SPECIES_TO_NATIONAL(CETITAN), + SPECIES_TO_NATIONAL(VELUZA), + SPECIES_TO_NATIONAL(DONDOZO), + SPECIES_TO_NATIONAL(TATSUGIRI), + [SPECIES_TATSUGIRI_DROOPY - 1] = NATIONAL_DEX_TATSUGIRI, + [SPECIES_TATSUGIRI_STRETCHY - 1] = NATIONAL_DEX_TATSUGIRI, + SPECIES_TO_NATIONAL(ANNIHILAPE), + SPECIES_TO_NATIONAL(CLODSIRE), + SPECIES_TO_NATIONAL(FARIGIRAF), + SPECIES_TO_NATIONAL(DUDUNSPARCE), + [SPECIES_DUDUNSPARCE_THREE_SEGMENT - 1] = NATIONAL_DEX_DUDUNSPARCE, + SPECIES_TO_NATIONAL(KINGAMBIT), + SPECIES_TO_NATIONAL(GREAT_TUSK), + SPECIES_TO_NATIONAL(SCREAM_TAIL), + SPECIES_TO_NATIONAL(BRUTE_BONNET), + SPECIES_TO_NATIONAL(FLUTTER_MANE), + SPECIES_TO_NATIONAL(SLITHER_WING), + SPECIES_TO_NATIONAL(SANDY_SHOCKS), + SPECIES_TO_NATIONAL(IRON_TREADS), + SPECIES_TO_NATIONAL(IRON_BUNDLE), + SPECIES_TO_NATIONAL(IRON_HANDS), + SPECIES_TO_NATIONAL(IRON_JUGULIS), + SPECIES_TO_NATIONAL(IRON_MOTH), + SPECIES_TO_NATIONAL(IRON_THORNS), + SPECIES_TO_NATIONAL(FRIGIBAX), + SPECIES_TO_NATIONAL(ARCTIBAX), + SPECIES_TO_NATIONAL(BAXCALIBUR), + SPECIES_TO_NATIONAL(GIMMIGHOUL), + [SPECIES_GIMMIGHOUL_ROAMING - 1] = NATIONAL_DEX_GIMMIGHOUL, + SPECIES_TO_NATIONAL(GHOLDENGO), + SPECIES_TO_NATIONAL(WO_CHIEN), + SPECIES_TO_NATIONAL(CHIEN_PAO), + SPECIES_TO_NATIONAL(TING_LU), + SPECIES_TO_NATIONAL(CHI_YU), + SPECIES_TO_NATIONAL(ROARING_MOON), + SPECIES_TO_NATIONAL(IRON_VALIANT), + SPECIES_TO_NATIONAL(KORAIDON), + SPECIES_TO_NATIONAL(MIRAIDON), + SPECIES_TO_NATIONAL(WALKING_WAKE), + SPECIES_TO_NATIONAL(IRON_LEAVES), + SPECIES_TO_NATIONAL(DIPPLIN), + SPECIES_TO_NATIONAL(POLTCHAGEIST), + [SPECIES_POLTCHAGEIST_ARTISAN - 1] = NATIONAL_DEX_POLTCHAGEIST, + SPECIES_TO_NATIONAL(SINISTCHA), + [SPECIES_SINISTCHA_MASTERPIECE - 1] = NATIONAL_DEX_POLTCHAGEIST, + SPECIES_TO_NATIONAL(OKIDOGI), + SPECIES_TO_NATIONAL(MUNKIDORI), + SPECIES_TO_NATIONAL(FEZANDIPITI), + SPECIES_TO_NATIONAL(OGERPON), + [SPECIES_OGERPON_WELLSPRING_MASK - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_HEARTHFLAME_MASK - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_CORNERSTONE_MASK - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_TEAL_MASK_TERA - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - 1] = NATIONAL_DEX_OGERPON, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA - 1] = NATIONAL_DEX_OGERPON, +#endif // Megas [SPECIES_VENUSAUR_MEGA - 1] = NATIONAL_DEX_VENUSAUR, @@ -1360,7 +1555,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_LINOONE_GALARIAN - 1] = NATIONAL_DEX_LINOONE, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN - 1] = NATIONAL_DEX_DARUMAKA, - [SPECIES_DARMANITAN_GALARIAN - 1] = NATIONAL_DEX_DARMANITAN, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE - 1] = NATIONAL_DEX_DARMANITAN, [SPECIES_YAMASK_GALARIAN - 1] = NATIONAL_DEX_YAMASK, [SPECIES_STUNFISK_GALARIAN - 1] = NATIONAL_DEX_STUNFISK, #endif @@ -1491,7 +1686,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_BASCULIN_WHITE_STRIPED - 1] = NATIONAL_DEX_BASCULIN, // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE - 1] = NATIONAL_DEX_DARMANITAN, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN - 1] = NATIONAL_DEX_DARMANITAN, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE - 1] = NATIONAL_DEX_DARMANITAN, // Deerling [SPECIES_DEERLING_SUMMER - 1] = NATIONAL_DEX_DEERLING, [SPECIES_DEERLING_AUTUMN - 1] = NATIONAL_DEX_DEERLING, @@ -1582,7 +1777,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = // Xerneas [SPECIES_XERNEAS_ACTIVE - 1] = NATIONAL_DEX_XERNEAS, // Zygarde - [SPECIES_ZYGARDE_10 - 1] = NATIONAL_DEX_ZYGARDE, + [SPECIES_ZYGARDE_10_AURA_BREAK - 1] = NATIONAL_DEX_ZYGARDE, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT - 1] = NATIONAL_DEX_ZYGARDE, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT - 1] = NATIONAL_DEX_ZYGARDE, [SPECIES_ZYGARDE_COMPLETE - 1] = NATIONAL_DEX_ZYGARDE, @@ -1652,15 +1847,6 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_SINISTEA_ANTIQUE - 1] = NATIONAL_DEX_SINISTEA, // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE - 1] = NATIONAL_DEX_POLTEAGEIST, - // Alcremie - [SPECIES_ALCREMIE_RUBY_CREAM - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_MATCHA_CREAM - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_MINT_CREAM - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_LEMON_CREAM - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_SALTED_CREAM - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_RUBY_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_CARAMEL_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, - [SPECIES_ALCREMIE_RAINBOW_SWIRL - 1] = NATIONAL_DEX_ALCREMIE, // Eiscue [SPECIES_EISCUE_NOICE_FACE - 1] = NATIONAL_DEX_EISCUE, // Indeedee @@ -1681,7 +1867,43 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_CALYREX_ICE_RIDER - 1] = NATIONAL_DEX_CALYREX, [SPECIES_CALYREX_SHADOW_RIDER - 1] = NATIONAL_DEX_CALYREX, [SPECIES_ENAMORUS_THERIAN - 1] = NATIONAL_DEX_ENAMORUS, + // Basculegion [SPECIES_BASCULEGION_FEMALE - 1] = NATIONAL_DEX_BASCULEGION, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX - 1] = NATIONAL_DEX_VENUSAUR, + [SPECIES_CHARIZARD_GIGANTAMAX - 1] = NATIONAL_DEX_CHARIZARD, + [SPECIES_BLASTOISE_GIGANTAMAX - 1] = NATIONAL_DEX_BLASTOISE, + [SPECIES_BUTTERFREE_GIGANTAMAX - 1] = NATIONAL_DEX_BUTTERFREE, + [SPECIES_PIKACHU_GIGANTAMAX - 1] = NATIONAL_DEX_PIKACHU, + [SPECIES_MEOWTH_GIGANTAMAX - 1] = NATIONAL_DEX_MEOWTH, + [SPECIES_MACHAMP_GIGANTAMAX - 1] = NATIONAL_DEX_MACHAMP, + [SPECIES_GENGAR_GIGANTAMAX - 1] = NATIONAL_DEX_GENGAR, + [SPECIES_KINGLER_GIGANTAMAX - 1] = NATIONAL_DEX_KINGLER, + [SPECIES_LAPRAS_GIGANTAMAX - 1] = NATIONAL_DEX_LAPRAS, + [SPECIES_EEVEE_GIGANTAMAX - 1] = NATIONAL_DEX_EEVEE, + [SPECIES_SNORLAX_GIGANTAMAX - 1] = NATIONAL_DEX_SNORLAX, + [SPECIES_GARBODOR_GIGANTAMAX - 1] = NATIONAL_DEX_GARBODOR, + [SPECIES_MELMETAL_GIGANTAMAX - 1] = NATIONAL_DEX_MELMETAL, + [SPECIES_RILLABOOM_GIGANTAMAX - 1] = NATIONAL_DEX_RILLABOOM, + [SPECIES_CINDERACE_GIGANTAMAX - 1] = NATIONAL_DEX_CINDERACE, + [SPECIES_INTELEON_GIGANTAMAX - 1] = NATIONAL_DEX_INTELEON, + [SPECIES_CORVIKNIGHT_GIGANTAMAX - 1] = NATIONAL_DEX_CORVIKNIGHT, + [SPECIES_ORBEETLE_GIGANTAMAX - 1] = NATIONAL_DEX_ORBEETLE, + [SPECIES_DREDNAW_GIGANTAMAX - 1] = NATIONAL_DEX_DREDNAW, + [SPECIES_COALOSSAL_GIGANTAMAX - 1] = NATIONAL_DEX_COALOSSAL, + [SPECIES_FLAPPLE_GIGANTAMAX - 1] = NATIONAL_DEX_FLAPPLE, + [SPECIES_APPLETUN_GIGANTAMAX - 1] = NATIONAL_DEX_APPLETUN, + [SPECIES_SANDACONDA_GIGANTAMAX - 1] = NATIONAL_DEX_SANDACONDA, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX - 1] = NATIONAL_DEX_TOXTRICITY, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX - 1] = NATIONAL_DEX_TOXTRICITY, + [SPECIES_CENTISKORCH_GIGANTAMAX - 1] = NATIONAL_DEX_CENTISKORCH, + [SPECIES_HATTERENE_GIGANTAMAX - 1] = NATIONAL_DEX_HATTERENE, + [SPECIES_GRIMMSNARL_GIGANTAMAX - 1] = NATIONAL_DEX_GRIMMSNARL, + [SPECIES_ALCREMIE_GIGANTAMAX - 1] = NATIONAL_DEX_ALCREMIE, + [SPECIES_COPPERAJAH_GIGANTAMAX - 1] = NATIONAL_DEX_COPPERAJAH, + [SPECIES_DURALUDON_GIGANTAMAX - 1] = NATIONAL_DEX_DURALUDON, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX - 1] = NATIONAL_DEX_URSHIFU, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX - 1] = NATIONAL_DEX_URSHIFU, #endif }; @@ -1973,983 +2195,1190 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = // SPECIES_NONE are ignored in the following two tables, so decrement before accessing these arrays to get the right result const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = -{ - [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_IVYSAUR - 1] = ANIM_V_STRETCH, - [SPECIES_VENUSAUR - 1] = ANIM_ROTATE_UP_SLAM_DOWN, - [SPECIES_CHARMANDER - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_CHARMELEON - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_CHARIZARD - 1] = ANIM_V_SHAKE, - [SPECIES_SQUIRTLE - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_WARTORTLE - 1] = ANIM_SHRINK_GROW, - [SPECIES_BLASTOISE - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_CATERPIE - 1] = ANIM_SWING_CONCAVE, - [SPECIES_METAPOD - 1] = ANIM_SWING_CONCAVE, - [SPECIES_BUTTERFREE - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_WEEDLE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_KAKUNA - 1] = ANIM_GLOW_ORANGE, - [SPECIES_BEEDRILL - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_PIDGEY - 1] = ANIM_V_STRETCH, - [SPECIES_PIDGEOTTO - 1] = ANIM_V_STRETCH, - [SPECIES_PIDGEOT - 1] = ANIM_FRONT_FLIP, - [SPECIES_RATTATA - 1] = ANIM_H_JUMPS, - [SPECIES_RATICATE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_SPEAROW - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_FEAROW - 1] = ANIM_FIGURE_8, - [SPECIES_EKANS - 1] = ANIM_V_STRETCH, - [SPECIES_ARBOK - 1] = ANIM_V_STRETCH, - [SPECIES_PIKACHU - 1] = ANIM_FLASH_YELLOW, - [SPECIES_RAICHU - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SANDSHREW - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_SANDSLASH - 1] = ANIM_H_SHAKE, - [SPECIES_NIDORAN_F - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_NIDORINA - 1] = ANIM_V_STRETCH, - [SPECIES_NIDOQUEEN - 1] = ANIM_H_SHAKE, - [SPECIES_NIDORAN_M - 1] = ANIM_GROW_VIBRATE, - [SPECIES_NIDORINO - 1] = ANIM_V_STRETCH, - [SPECIES_NIDOKING - 1] = ANIM_H_SHAKE, - [SPECIES_CLEFAIRY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CLEFABLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_VULPIX - 1] = ANIM_V_STRETCH, - [SPECIES_NINETALES - 1] = ANIM_GROW_VIBRATE, - [SPECIES_JIGGLYPUFF - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_WIGGLYTUFF - 1] = ANIM_H_JUMPS, - [SPECIES_ZUBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GOLBAT - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_ODDISH - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_GLOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_VILEPLUME - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_PARAS - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_PARASECT - 1] = ANIM_H_SHAKE, - [SPECIES_VENONAT - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_VENOMOTH - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_DIGLETT - 1] = ANIM_V_SHAKE, - [SPECIES_DUGTRIO - 1] = ANIM_H_SHAKE_SLOW, - [SPECIES_MEOWTH - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_PERSIAN - 1] = ANIM_V_STRETCH, - [SPECIES_PSYDUCK - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_GOLDUCK - 1] = ANIM_H_SHAKE_SLOW, - [SPECIES_MANKEY - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_PRIMEAPE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_GROWLITHE - 1] = ANIM_V_STRETCH, - [SPECIES_ARCANINE - 1] = ANIM_V_SHAKE, - [SPECIES_POLIWAG - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_POLIWHIRL - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_POLIWRATH - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_ABRA - 1] = ANIM_H_VIBRATE, - [SPECIES_KADABRA - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ALAKAZAM - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MACHOP - 1] = ANIM_V_STRETCH, - [SPECIES_MACHOKE - 1] = ANIM_V_SHAKE, - [SPECIES_MACHAMP - 1] = ANIM_H_JUMPS, - [SPECIES_BELLSPROUT - 1] = ANIM_H_JUMPS, - [SPECIES_WEEPINBELL - 1] = ANIM_SWING_CONVEX, - [SPECIES_VICTREEBEL - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_TENTACOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TENTACRUEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GEODUDE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_GRAVELER - 1] = ANIM_V_SHAKE, - [SPECIES_GOLEM - 1] = ANIM_ROTATE_UP_SLAM_DOWN, - [SPECIES_PONYTA - 1] = ANIM_V_SHAKE, - [SPECIES_RAPIDASH - 1] = ANIM_H_SHAKE, - [SPECIES_SLOWPOKE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_SLOWBRO - 1] = ANIM_H_STRETCH, - [SPECIES_MAGNEMITE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MAGNETON - 1] = ANIM_FLASH_YELLOW, - [SPECIES_FARFETCHD - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_DODUO - 1] = ANIM_H_SHAKE_SLOW, - [SPECIES_DODRIO - 1] = ANIM_V_STRETCH, - [SPECIES_SEEL - 1] = ANIM_H_STRETCH, - [SPECIES_DEWGONG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GRIMER - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_MUK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SHELLDER - 1] = ANIM_TWIST, - [SPECIES_CLOYSTER - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_GASTLY - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_HAUNTER - 1] = ANIM_FLICKER_INCREASING, - [SPECIES_GENGAR - 1] = ANIM_GROW_IN_STAGES, - [SPECIES_ONIX - 1] = ANIM_H_SHAKE, - [SPECIES_DROWZEE - 1] = ANIM_V_STRETCH, - [SPECIES_HYPNO - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_KRABBY - 1] = ANIM_H_SLIDE, - [SPECIES_KINGLER - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_VOLTORB - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ELECTRODE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_EXEGGCUTE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_EXEGGUTOR - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_CUBONE - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_MAROWAK - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_HITMONLEE - 1] = ANIM_H_STRETCH, - [SPECIES_HITMONCHAN - 1] = ANIM_GROW_VIBRATE, - [SPECIES_LICKITUNG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_KOFFING - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_WEEZING - 1] = ANIM_V_SLIDE, - [SPECIES_RHYHORN - 1] = ANIM_V_SHAKE, - [SPECIES_RHYDON - 1] = ANIM_H_SHAKE, - [SPECIES_CHANSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TANGELA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_KANGASKHAN - 1] = ANIM_V_STRETCH, - [SPECIES_HORSEA - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_SEADRA - 1] = ANIM_V_SLIDE, - [SPECIES_GOLDEEN - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_SEAKING - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_STARYU - 1] = ANIM_TWIST_TWICE, - [SPECIES_STARMIE - 1] = ANIM_TWIST, - [SPECIES_MR_MIME - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_SCYTHER - 1] = ANIM_H_VIBRATE, - [SPECIES_JYNX - 1] = ANIM_V_STRETCH, - [SPECIES_ELECTABUZZ - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, - [SPECIES_MAGMAR - 1] = ANIM_H_SHAKE, - [SPECIES_PINSIR - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TAUROS - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_MAGIKARP - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_GYARADOS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_LAPRAS - 1] = ANIM_V_STRETCH, - [SPECIES_DITTO - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_EEVEE - 1] = ANIM_V_STRETCH, - [SPECIES_VAPOREON - 1] = ANIM_GLOW_BLUE, - [SPECIES_JOLTEON - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FLAREON - 1] = ANIM_V_SHAKE, - [SPECIES_PORYGON - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_OMANYTE - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_OMASTAR - 1] = ANIM_GROW_VIBRATE, - [SPECIES_KABUTO - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_KABUTOPS - 1] = ANIM_H_SHAKE, - [SPECIES_AERODACTYL - 1] = ANIM_V_SLIDE_SLOW, - [SPECIES_SNORLAX - 1] = ANIM_V_STRETCH, - [SPECIES_ARTICUNO - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ZAPDOS - 1] = ANIM_FLASH_YELLOW, - [SPECIES_MOLTRES - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_DRATINI - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRAGONAIR - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DRAGONITE - 1] = ANIM_V_SHAKE, - [SPECIES_MEWTWO - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MEW - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_CHIKORITA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BAYLEEF - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MEGANIUM - 1] = ANIM_GROW_VIBRATE, - [SPECIES_CYNDAQUIL - 1] = ANIM_V_STRETCH, - [SPECIES_QUILAVA - 1] = ANIM_H_STRETCH, - [SPECIES_TYPHLOSION - 1] = ANIM_V_SHAKE, - [SPECIES_TOTODILE - 1] = ANIM_H_JUMPS, - [SPECIES_CROCONAW - 1] = ANIM_H_SHAKE, - [SPECIES_FERALIGATR - 1] = ANIM_H_SHAKE, - [SPECIES_SENTRET - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_FURRET - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_HOOTHOOT - 1] = ANIM_V_SLIDE_SLOW, - [SPECIES_NOCTOWL - 1] = ANIM_V_STRETCH, - [SPECIES_LEDYBA - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_LEDIAN - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_SPINARAK - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_ARIADOS - 1] = ANIM_H_SHAKE, - [SPECIES_CROBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CHINCHOU - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_LANTURN - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_PICHU - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_CLEFFA - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_IGGLYBUFF - 1] = ANIM_SWING_CONCAVE_FAST, - [SPECIES_TOGEPI - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_TOGETIC - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_NATU - 1] = ANIM_H_JUMPS, - [SPECIES_XATU - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MAREEP - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_FLAAFFY - 1] = ANIM_V_STRETCH, - [SPECIES_AMPHAROS - 1] = ANIM_FLASH_YELLOW, - [SPECIES_BELLOSSOM - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_MARILL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_AZUMARILL - 1] = ANIM_SHRINK_GROW, - [SPECIES_SUDOWOODO - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_POLITOED - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_HOPPIP - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_SKIPLOOM - 1] = ANIM_RISING_WOBBLE, - [SPECIES_JUMPLUFF - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_AIPOM - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_SUNKERN - 1] = ANIM_H_JUMPS, - [SPECIES_SUNFLORA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_YANMA - 1] = ANIM_FIGURE_8, - [SPECIES_WOOPER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_QUAGSIRE - 1] = ANIM_H_STRETCH, - [SPECIES_ESPEON - 1] = ANIM_GROW_VIBRATE, - [SPECIES_UMBREON - 1] = ANIM_V_SHAKE, - [SPECIES_MURKROW - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SLOWKING - 1] = ANIM_SHRINK_GROW, - [SPECIES_MISDREAVUS - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_UNOWN - 1] = ANIM_ZIGZAG_FAST, - [SPECIES_WOBBUFFET - 1] = ANIM_GROW_VIBRATE, - [SPECIES_GIRAFARIG - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PINECO - 1] = ANIM_SWING_CONCAVE, - [SPECIES_FORRETRESS - 1] = ANIM_V_SHAKE, - [SPECIES_DUNSPARCE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GLIGAR - 1] = ANIM_SHRINK_GROW, - [SPECIES_STEELIX - 1] = ANIM_V_SHAKE, - [SPECIES_SNUBBULL - 1] = ANIM_V_STRETCH, - [SPECIES_GRANBULL - 1] = ANIM_V_SHAKE, - [SPECIES_QWILFISH - 1] = ANIM_GROW_IN_STAGES, - [SPECIES_SCIZOR - 1] = ANIM_H_VIBRATE, - [SPECIES_SHUCKLE - 1] = ANIM_SWING_CONCAVE, - [SPECIES_HERACROSS - 1] = ANIM_V_STRETCH, - [SPECIES_SNEASEL - 1] = ANIM_H_JUMPS, - [SPECIES_TEDDIURSA - 1] = ANIM_V_STRETCH, - [SPECIES_URSARING - 1] = ANIM_H_SHAKE, - [SPECIES_SLUGMA - 1] = ANIM_V_STRETCH, - [SPECIES_MAGCARGO - 1] = ANIM_V_STRETCH, - [SPECIES_SWINUB - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PILOSWINE - 1] = ANIM_H_SHAKE, - [SPECIES_CORSOLA - 1] = ANIM_H_SLIDE, - [SPECIES_REMORAID - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_OCTILLERY - 1] = ANIM_V_STRETCH, - [SPECIES_DELIBIRD - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MANTINE - 1] = ANIM_SWING_CONVEX, - [SPECIES_SKARMORY - 1] = ANIM_V_SHAKE, - [SPECIES_HOUNDOUR - 1] = ANIM_V_STRETCH, - [SPECIES_HOUNDOOM - 1] = ANIM_V_SHAKE, - [SPECIES_KINGDRA - 1] = ANIM_CIRCLE_INTO_BG, - [SPECIES_PHANPY - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_DONPHAN - 1] = ANIM_ROTATE_UP_SLAM_DOWN, - [SPECIES_PORYGON2 - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_STANTLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SMEARGLE - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_TYROGUE - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_HITMONTOP - 1] = ANIM_H_VIBRATE, - [SPECIES_SMOOCHUM - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ELEKID - 1] = ANIM_FLASH_YELLOW, - [SPECIES_MAGBY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MILTANK - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_BLISSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_RAIKOU - 1] = ANIM_V_STRETCH, - [SPECIES_ENTEI - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SUICUNE - 1] = ANIM_V_SHAKE, - [SPECIES_LARVITAR - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_PUPITAR - 1] = ANIM_H_SHAKE, - [SPECIES_TYRANITAR - 1] = ANIM_V_SHAKE, - [SPECIES_LUGIA - 1] = ANIM_GROW_IN_STAGES, - [SPECIES_HO_OH - 1] = ANIM_GROW_VIBRATE, - [SPECIES_CELEBI - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_TREECKO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GROVYLE - 1] = ANIM_V_STRETCH, - [SPECIES_SCEPTILE - 1] = ANIM_V_SHAKE, - [SPECIES_TORCHIC - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_COMBUSKEN - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_BLAZIKEN - 1] = ANIM_H_SHAKE, - [SPECIES_MUDKIP - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_MARSHTOMP - 1] = ANIM_V_STRETCH, - [SPECIES_SWAMPERT - 1] = ANIM_H_SHAKE, - [SPECIES_POOCHYENA - 1] = ANIM_V_SHAKE, - [SPECIES_MIGHTYENA - 1] = ANIM_V_SHAKE, - [SPECIES_ZIGZAGOON - 1] = ANIM_H_SLIDE, - [SPECIES_LINOONE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_WURMPLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SILCOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BEAUTIFLY - 1] = ANIM_V_SLIDE, - [SPECIES_CASCOON - 1] = ANIM_V_SLIDE, - [SPECIES_DUSTOX - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_LOTAD - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_LOMBRE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_LUDICOLO - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_SEEDOT - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_NUZLEAF - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SHIFTRY - 1] = ANIM_H_VIBRATE, - [SPECIES_TAILLOW - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_SWELLOW - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_WINGULL - 1] = ANIM_H_PIVOT, - [SPECIES_PELIPPER - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_RALTS - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_KIRLIA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GARDEVOIR - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_SURSKIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MASQUERAIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SHROOMISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BRELOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SLAKOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_VIGOROTH - 1] = ANIM_H_JUMPS, - [SPECIES_SLAKING - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_NINCADA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_NINJASK - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_SHEDINJA - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_WHISMUR - 1] = ANIM_H_SLIDE, - [SPECIES_LOUDRED - 1] = ANIM_SHRINK_GROW, - [SPECIES_EXPLOUD - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_MAKUHITA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HARIYAMA - 1] = ANIM_ROTATE_UP_TO_SIDES, - [SPECIES_AZURILL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_NOSEPASS - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_SKITTY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DELCATTY - 1] = ANIM_V_STRETCH, - [SPECIES_SABLEYE - 1] = ANIM_GLOW_BLACK, - [SPECIES_MAWILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ARON - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_LAIRON - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_AGGRON - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_MEDITITE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_MEDICHAM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_ELECTRIKE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MANECTRIC - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PLUSLE - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_MINUN - 1] = ANIM_V_JUMPS_H_JUMPS, - [SPECIES_VOLBEAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ILLUMISE - 1] = ANIM_RISING_WOBBLE, - [SPECIES_ROSELIA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GULPIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SWALOT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_CARVANHA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_SHARPEDO - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE, - [SPECIES_WAILMER - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_WAILORD - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_NUMEL - 1] = ANIM_V_SLIDE, - [SPECIES_CAMERUPT - 1] = ANIM_V_SHAKE, - [SPECIES_TORKOAL - 1] = ANIM_V_STRETCH, - [SPECIES_SPOINK - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE, - [SPECIES_GRUMPIG - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_SPINDA - 1] = ANIM_CIRCLE_INTO_BG, - [SPECIES_TRAPINCH - 1] = ANIM_V_SHAKE, - [SPECIES_VIBRAVA - 1] = ANIM_H_SHAKE, - [SPECIES_FLYGON - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_CACNEA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_CACTURNE - 1] = ANIM_V_SLIDE, - [SPECIES_SWABLU - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ALTARIA - 1] = ANIM_V_STRETCH, - [SPECIES_ZANGOOSE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SEVIPER - 1] = ANIM_V_STRETCH, - [SPECIES_LUNATONE - 1] = ANIM_SWING_CONVEX_FAST, - [SPECIES_SOLROCK - 1] = ANIM_ROTATE_TO_SIDES_TWICE, - [SPECIES_BARBOACH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_WHISCASH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_CORPHISH - 1] = ANIM_V_SHAKE, - [SPECIES_CRAWDAUNT - 1] = ANIM_GROW_VIBRATE, - [SPECIES_BALTOY - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_CLAYDOL - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_LILEEP - 1] = ANIM_V_STRETCH, - [SPECIES_CRADILY - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_ANORITH - 1] = ANIM_TWIST, - [SPECIES_ARMALDO - 1] = ANIM_V_SHAKE, - [SPECIES_FEEBAS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, - [SPECIES_MILOTIC - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_CASTFORM - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_KECLEON - 1] = ANIM_FLICKER_INCREASING, - [SPECIES_SHUPPET - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_BANETTE - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_DUSKULL - 1] = ANIM_ZIGZAG_FAST, - [SPECIES_DUSCLOPS - 1] = ANIM_H_VIBRATE, - [SPECIES_TROPIUS - 1] = ANIM_V_SHAKE, - [SPECIES_CHIMECHO - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_ABSOL - 1] = ANIM_CIRCULAR_VIBRATE, - [SPECIES_WYNAUT - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_SNORUNT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GLALIE - 1] = ANIM_ZIGZAG_FAST, - [SPECIES_SPHEAL - 1] = ANIM_SPIN_LONG, - [SPECIES_SEALEO - 1] = ANIM_V_STRETCH, - [SPECIES_WALREIN - 1] = ANIM_H_SHAKE, - [SPECIES_CLAMPERL - 1] = ANIM_TWIST, - [SPECIES_HUNTAIL - 1] = ANIM_GROW_VIBRATE, - [SPECIES_GOREBYSS - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_RELICANTH - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_LUVDISC - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_BAGON - 1] = ANIM_H_SHAKE, - [SPECIES_SHELGON - 1] = ANIM_V_SLIDE, - [SPECIES_SALAMENCE - 1] = ANIM_H_SHAKE, - [SPECIES_BELDUM - 1] = ANIM_H_SHAKE, - [SPECIES_METANG - 1] = ANIM_V_SLIDE, - [SPECIES_METAGROSS - 1] = ANIM_V_SHAKE, - [SPECIES_REGIROCK - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_REGICE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_REGISTEEL - 1] = ANIM_GROW_VIBRATE, - [SPECIES_LATIAS - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_LATIOS - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_KYOGRE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_GROUDON - 1] = ANIM_V_SHAKE, - [SPECIES_RAYQUAZA - 1] = ANIM_H_SHAKE, - [SPECIES_JIRACHI - 1] = ANIM_RISING_WOBBLE, - [SPECIES_DEOXYS - 1] = ANIM_GROW_VIBRATE, +{ // Gen 1 + [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_IVYSAUR - 1] = ANIM_V_STRETCH, + [SPECIES_VENUSAUR - 1] = ANIM_ROTATE_UP_SLAM_DOWN, + [SPECIES_CHARMANDER - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_CHARMELEON - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_CHARIZARD - 1] = ANIM_V_SHAKE, + [SPECIES_SQUIRTLE - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_WARTORTLE - 1] = ANIM_SHRINK_GROW, + [SPECIES_BLASTOISE - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_CATERPIE - 1] = ANIM_SWING_CONCAVE, + [SPECIES_METAPOD - 1] = ANIM_SWING_CONCAVE, + [SPECIES_BUTTERFREE - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_WEEDLE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_KAKUNA - 1] = ANIM_GLOW_ORANGE, + [SPECIES_BEEDRILL - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_PIDGEY - 1] = ANIM_V_STRETCH, + [SPECIES_PIDGEOTTO - 1] = ANIM_V_STRETCH, + [SPECIES_PIDGEOT - 1] = ANIM_FRONT_FLIP, + [SPECIES_RATTATA - 1] = ANIM_H_JUMPS, + [SPECIES_RATICATE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_SPEAROW - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_FEAROW - 1] = ANIM_FIGURE_8, + [SPECIES_EKANS - 1] = ANIM_V_STRETCH, + [SPECIES_ARBOK - 1] = ANIM_V_STRETCH, + [SPECIES_PIKACHU - 1] = ANIM_FLASH_YELLOW, + [SPECIES_RAICHU - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SANDSHREW - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, + [SPECIES_SANDSLASH - 1] = ANIM_H_SHAKE, + [SPECIES_NIDORAN_F - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NIDORINA - 1] = ANIM_V_STRETCH, + [SPECIES_NIDOQUEEN - 1] = ANIM_H_SHAKE, + [SPECIES_NIDORAN_M - 1] = ANIM_GROW_VIBRATE, + [SPECIES_NIDORINO - 1] = ANIM_V_STRETCH, + [SPECIES_NIDOKING - 1] = ANIM_H_SHAKE, + [SPECIES_CLEFAIRY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CLEFABLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VULPIX - 1] = ANIM_V_STRETCH, + [SPECIES_NINETALES - 1] = ANIM_GROW_VIBRATE, + [SPECIES_JIGGLYPUFF - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_WIGGLYTUFF - 1] = ANIM_H_JUMPS, + [SPECIES_ZUBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOLBAT - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_ODDISH - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_GLOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_VILEPLUME - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_PARAS - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_PARASECT - 1] = ANIM_H_SHAKE, + [SPECIES_VENONAT - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_VENOMOTH - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_DIGLETT - 1] = ANIM_V_SHAKE, + [SPECIES_DUGTRIO - 1] = ANIM_H_SHAKE_SLOW, + [SPECIES_MEOWTH - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_PERSIAN - 1] = ANIM_V_STRETCH, + [SPECIES_PSYDUCK - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_GOLDUCK - 1] = ANIM_H_SHAKE_SLOW, + [SPECIES_MANKEY - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_PRIMEAPE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_GROWLITHE - 1] = ANIM_V_STRETCH, + [SPECIES_ARCANINE - 1] = ANIM_V_SHAKE, + [SPECIES_POLIWAG - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_POLIWHIRL - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_POLIWRATH - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_ABRA - 1] = ANIM_H_VIBRATE, + [SPECIES_KADABRA - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ALAKAZAM - 1] = ANIM_GROW_VIBRATE, + [SPECIES_MACHOP - 1] = ANIM_V_STRETCH, + [SPECIES_MACHOKE - 1] = ANIM_V_SHAKE, + [SPECIES_MACHAMP - 1] = ANIM_H_JUMPS, + [SPECIES_BELLSPROUT - 1] = ANIM_H_JUMPS, + [SPECIES_WEEPINBELL - 1] = ANIM_SWING_CONVEX, + [SPECIES_VICTREEBEL - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_TENTACOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TENTACRUEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GEODUDE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_GRAVELER - 1] = ANIM_V_SHAKE, + [SPECIES_GOLEM - 1] = ANIM_ROTATE_UP_SLAM_DOWN, + [SPECIES_PONYTA - 1] = ANIM_V_SHAKE, + [SPECIES_RAPIDASH - 1] = ANIM_H_SHAKE, + [SPECIES_SLOWPOKE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_SLOWBRO - 1] = ANIM_H_STRETCH, + [SPECIES_MAGNEMITE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MAGNETON - 1] = ANIM_FLASH_YELLOW, + [SPECIES_FARFETCHD - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_DODUO - 1] = ANIM_H_SHAKE_SLOW, + [SPECIES_DODRIO - 1] = ANIM_V_STRETCH, + [SPECIES_SEEL - 1] = ANIM_H_STRETCH, + [SPECIES_DEWGONG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GRIMER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_MUK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SHELLDER - 1] = ANIM_TWIST, + [SPECIES_CLOYSTER - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_GASTLY - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_HAUNTER - 1] = ANIM_FLICKER_INCREASING, + [SPECIES_GENGAR - 1] = ANIM_GROW_IN_STAGES, + [SPECIES_ONIX - 1] = ANIM_H_SHAKE, + [SPECIES_DROWZEE - 1] = ANIM_V_STRETCH, + [SPECIES_HYPNO - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_KRABBY - 1] = ANIM_H_SLIDE, + [SPECIES_KINGLER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_VOLTORB - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ELECTRODE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EXEGGCUTE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_EXEGGUTOR - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_CUBONE - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_MAROWAK - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_HITMONLEE - 1] = ANIM_H_STRETCH, + [SPECIES_HITMONCHAN - 1] = ANIM_GROW_VIBRATE, + [SPECIES_LICKITUNG - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_KOFFING - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_WEEZING - 1] = ANIM_V_SLIDE, + [SPECIES_RHYHORN - 1] = ANIM_V_SHAKE, + [SPECIES_RHYDON - 1] = ANIM_H_SHAKE, + [SPECIES_CHANSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TANGELA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_KANGASKHAN - 1] = ANIM_V_STRETCH, + [SPECIES_HORSEA - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_SEADRA - 1] = ANIM_V_SLIDE, + [SPECIES_GOLDEEN - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_SEAKING - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_STARYU - 1] = ANIM_TWIST_TWICE, + [SPECIES_STARMIE - 1] = ANIM_TWIST, + [SPECIES_MR_MIME - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_SCYTHER - 1] = ANIM_H_VIBRATE, + [SPECIES_JYNX - 1] = ANIM_V_STRETCH, + [SPECIES_ELECTABUZZ - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, + [SPECIES_MAGMAR - 1] = ANIM_H_SHAKE, + [SPECIES_PINSIR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TAUROS - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_MAGIKARP - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_GYARADOS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_LAPRAS - 1] = ANIM_V_STRETCH, + [SPECIES_DITTO - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_EEVEE - 1] = ANIM_V_STRETCH, + [SPECIES_VAPOREON - 1] = ANIM_GLOW_BLUE, + [SPECIES_JOLTEON - 1] = ANIM_GROW_VIBRATE, + [SPECIES_FLAREON - 1] = ANIM_V_SHAKE, + [SPECIES_PORYGON - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_OMANYTE - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_OMASTAR - 1] = ANIM_GROW_VIBRATE, + [SPECIES_KABUTO - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_KABUTOPS - 1] = ANIM_H_SHAKE, + [SPECIES_AERODACTYL - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_SNORLAX - 1] = ANIM_V_STRETCH, + [SPECIES_ARTICUNO - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ZAPDOS - 1] = ANIM_FLASH_YELLOW, + [SPECIES_MOLTRES - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_DRATINI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRAGONAIR - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DRAGONITE - 1] = ANIM_V_SHAKE, + [SPECIES_MEWTWO - 1] = ANIM_GROW_VIBRATE, + [SPECIES_MEW - 1] = ANIM_ZIGZAG_SLOW, + + // Gen 2 + [SPECIES_CHIKORITA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BAYLEEF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEGANIUM - 1] = ANIM_GROW_VIBRATE, + [SPECIES_CYNDAQUIL - 1] = ANIM_V_STRETCH, + [SPECIES_QUILAVA - 1] = ANIM_H_STRETCH, + [SPECIES_TYPHLOSION - 1] = ANIM_V_SHAKE, + [SPECIES_TOTODILE - 1] = ANIM_H_JUMPS, + [SPECIES_CROCONAW - 1] = ANIM_H_SHAKE, + [SPECIES_FERALIGATR - 1] = ANIM_H_SHAKE, + [SPECIES_SENTRET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FURRET - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_HOOTHOOT - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_NOCTOWL - 1] = ANIM_V_STRETCH, + [SPECIES_LEDYBA - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_LEDIAN - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_SPINARAK - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_ARIADOS - 1] = ANIM_H_SHAKE, + [SPECIES_CROBAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHINCHOU - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_LANTURN - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_PICHU - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_CLEFFA - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_IGGLYBUFF - 1] = ANIM_SWING_CONCAVE_FAST, + [SPECIES_TOGEPI - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_TOGETIC - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NATU - 1] = ANIM_H_JUMPS, + [SPECIES_XATU - 1] = ANIM_GROW_VIBRATE, + [SPECIES_MAREEP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLAAFFY - 1] = ANIM_V_STRETCH, + [SPECIES_AMPHAROS - 1] = ANIM_FLASH_YELLOW, + [SPECIES_BELLOSSOM - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_MARILL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AZUMARILL - 1] = ANIM_SHRINK_GROW, + [SPECIES_SUDOWOODO - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_POLITOED - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_HOPPIP - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_SKIPLOOM - 1] = ANIM_RISING_WOBBLE, + [SPECIES_JUMPLUFF - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_AIPOM - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_SUNKERN - 1] = ANIM_H_JUMPS, + [SPECIES_SUNFLORA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_YANMA - 1] = ANIM_FIGURE_8, + [SPECIES_WOOPER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WOOPER_PALDEAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_QUAGSIRE - 1] = ANIM_H_STRETCH, + [SPECIES_ESPEON - 1] = ANIM_GROW_VIBRATE, + [SPECIES_UMBREON - 1] = ANIM_V_SHAKE, + [SPECIES_MURKROW - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLOWKING - 1] = ANIM_SHRINK_GROW, + [SPECIES_MISDREAVUS - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_UNOWN - 1] = ANIM_ZIGZAG_FAST, + [SPECIES_WOBBUFFET - 1] = ANIM_GROW_VIBRATE, + [SPECIES_GIRAFARIG - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PINECO - 1] = ANIM_SWING_CONCAVE, + [SPECIES_FORRETRESS - 1] = ANIM_V_SHAKE, + [SPECIES_DUNSPARCE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GLIGAR - 1] = ANIM_SHRINK_GROW, + [SPECIES_STEELIX - 1] = ANIM_V_SHAKE, + [SPECIES_SNUBBULL - 1] = ANIM_V_STRETCH, + [SPECIES_GRANBULL - 1] = ANIM_V_SHAKE, + [SPECIES_QWILFISH - 1] = ANIM_GROW_IN_STAGES, + [SPECIES_SCIZOR - 1] = ANIM_H_VIBRATE, + [SPECIES_SHUCKLE - 1] = ANIM_SWING_CONCAVE, + [SPECIES_HERACROSS - 1] = ANIM_V_STRETCH, + [SPECIES_SNEASEL - 1] = ANIM_H_JUMPS, + [SPECIES_TEDDIURSA - 1] = ANIM_V_STRETCH, + [SPECIES_URSARING - 1] = ANIM_H_SHAKE, + [SPECIES_SLUGMA - 1] = ANIM_V_STRETCH, + [SPECIES_MAGCARGO - 1] = ANIM_V_STRETCH, + [SPECIES_SWINUB - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PILOSWINE - 1] = ANIM_H_SHAKE, + [SPECIES_CORSOLA - 1] = ANIM_H_SLIDE, + [SPECIES_REMORAID - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_OCTILLERY - 1] = ANIM_V_STRETCH, + [SPECIES_DELIBIRD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MANTINE - 1] = ANIM_SWING_CONVEX, + [SPECIES_SKARMORY - 1] = ANIM_V_SHAKE, + [SPECIES_HOUNDOUR - 1] = ANIM_V_STRETCH, + [SPECIES_HOUNDOOM - 1] = ANIM_V_SHAKE, + [SPECIES_KINGDRA - 1] = ANIM_CIRCLE_INTO_BG, + [SPECIES_PHANPY - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_DONPHAN - 1] = ANIM_ROTATE_UP_SLAM_DOWN, + [SPECIES_PORYGON2 - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_STANTLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SMEARGLE - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_TYROGUE - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_HITMONTOP - 1] = ANIM_H_VIBRATE, + [SPECIES_SMOOCHUM - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ELEKID - 1] = ANIM_FLASH_YELLOW, + [SPECIES_MAGBY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MILTANK - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_BLISSEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RAIKOU - 1] = ANIM_V_STRETCH, + [SPECIES_ENTEI - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SUICUNE - 1] = ANIM_V_SHAKE, + [SPECIES_LARVITAR - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_PUPITAR - 1] = ANIM_H_SHAKE, + [SPECIES_TYRANITAR - 1] = ANIM_V_SHAKE, + [SPECIES_LUGIA - 1] = ANIM_GROW_IN_STAGES, + [SPECIES_HO_OH - 1] = ANIM_GROW_VIBRATE, + [SPECIES_CELEBI - 1] = ANIM_H_SLIDE_WOBBLE, + + // Gen 3 + [SPECIES_TREECKO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GROVYLE - 1] = ANIM_V_STRETCH, + [SPECIES_SCEPTILE - 1] = ANIM_V_SHAKE, + [SPECIES_TORCHIC - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_COMBUSKEN - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_BLAZIKEN - 1] = ANIM_H_SHAKE, + [SPECIES_MUDKIP - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_MARSHTOMP - 1] = ANIM_V_STRETCH, + [SPECIES_SWAMPERT - 1] = ANIM_H_SHAKE, + [SPECIES_POOCHYENA - 1] = ANIM_V_SHAKE, + [SPECIES_MIGHTYENA - 1] = ANIM_V_SHAKE, + [SPECIES_ZIGZAGOON - 1] = ANIM_H_SLIDE, + [SPECIES_LINOONE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_WURMPLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SILCOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BEAUTIFLY - 1] = ANIM_V_SLIDE, + [SPECIES_CASCOON - 1] = ANIM_V_SLIDE, + [SPECIES_DUSTOX - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_LOTAD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LOMBRE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LUDICOLO - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_SEEDOT - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_NUZLEAF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SHIFTRY - 1] = ANIM_H_VIBRATE, + [SPECIES_TAILLOW - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_SWELLOW - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_WINGULL - 1] = ANIM_H_PIVOT, + [SPECIES_PELIPPER - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_RALTS - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_KIRLIA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GARDEVOIR - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_SURSKIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MASQUERAIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SHROOMISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRELOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLAKOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_VIGOROTH - 1] = ANIM_H_JUMPS, + [SPECIES_SLAKING - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_NINCADA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NINJASK - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_SHEDINJA - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_WHISMUR - 1] = ANIM_H_SLIDE, + [SPECIES_LOUDRED - 1] = ANIM_SHRINK_GROW, + [SPECIES_EXPLOUD - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_MAKUHITA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HARIYAMA - 1] = ANIM_ROTATE_UP_TO_SIDES, + [SPECIES_AZURILL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NOSEPASS - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_SKITTY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DELCATTY - 1] = ANIM_V_STRETCH, + [SPECIES_SABLEYE - 1] = ANIM_GLOW_BLACK, + [SPECIES_MAWILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARON - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_LAIRON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AGGRON - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_MEDITITE - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_MEDICHAM - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_ELECTRIKE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MANECTRIC - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PLUSLE - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_MINUN - 1] = ANIM_V_JUMPS_H_JUMPS, + [SPECIES_VOLBEAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ILLUMISE - 1] = ANIM_RISING_WOBBLE, + [SPECIES_ROSELIA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GULPIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SWALOT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_CARVANHA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_SHARPEDO - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE, + [SPECIES_WAILMER - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_WAILORD - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_NUMEL - 1] = ANIM_V_SLIDE, + [SPECIES_CAMERUPT - 1] = ANIM_V_SHAKE, + [SPECIES_TORKOAL - 1] = ANIM_V_STRETCH, + [SPECIES_SPOINK - 1] = ANIM_H_JUMPS_V_STRETCH_TWICE, + [SPECIES_GRUMPIG - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_SPINDA - 1] = ANIM_CIRCLE_INTO_BG, + [SPECIES_TRAPINCH - 1] = ANIM_V_SHAKE, + [SPECIES_VIBRAVA - 1] = ANIM_H_SHAKE, + [SPECIES_FLYGON - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_CACNEA - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_CACTURNE - 1] = ANIM_V_SLIDE, + [SPECIES_SWABLU - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ALTARIA - 1] = ANIM_V_STRETCH, + [SPECIES_ZANGOOSE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SEVIPER - 1] = ANIM_V_STRETCH, + [SPECIES_LUNATONE - 1] = ANIM_SWING_CONVEX_FAST, + [SPECIES_SOLROCK - 1] = ANIM_ROTATE_TO_SIDES_TWICE, + [SPECIES_BARBOACH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_WHISCASH - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_CORPHISH - 1] = ANIM_V_SHAKE, + [SPECIES_CRAWDAUNT - 1] = ANIM_GROW_VIBRATE, + [SPECIES_BALTOY - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_CLAYDOL - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_LILEEP - 1] = ANIM_V_STRETCH, + [SPECIES_CRADILY - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_ANORITH - 1] = ANIM_TWIST, + [SPECIES_ARMALDO - 1] = ANIM_V_SHAKE, + [SPECIES_FEEBAS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + [SPECIES_MILOTIC - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_CASTFORM_NORMAL - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_KECLEON - 1] = ANIM_FLICKER_INCREASING, + [SPECIES_SHUPPET - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_BANETTE - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_DUSKULL - 1] = ANIM_ZIGZAG_FAST, + [SPECIES_DUSCLOPS - 1] = ANIM_H_VIBRATE, + [SPECIES_TROPIUS - 1] = ANIM_V_SHAKE, + [SPECIES_CHIMECHO - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_ABSOL - 1] = ANIM_CIRCULAR_VIBRATE, + [SPECIES_WYNAUT - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_SNORUNT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GLALIE - 1] = ANIM_ZIGZAG_FAST, + [SPECIES_SPHEAL - 1] = ANIM_SPIN_LONG, + [SPECIES_SEALEO - 1] = ANIM_V_STRETCH, + [SPECIES_WALREIN - 1] = ANIM_H_SHAKE, + [SPECIES_CLAMPERL - 1] = ANIM_TWIST, + [SPECIES_HUNTAIL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_GOREBYSS - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_RELICANTH - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_LUVDISC - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_BAGON - 1] = ANIM_H_SHAKE, + [SPECIES_SHELGON - 1] = ANIM_V_SLIDE, + [SPECIES_SALAMENCE - 1] = ANIM_H_SHAKE, + [SPECIES_BELDUM - 1] = ANIM_H_SHAKE, + [SPECIES_METANG - 1] = ANIM_V_SLIDE, + [SPECIES_METAGROSS - 1] = ANIM_V_SHAKE, + [SPECIES_REGIROCK - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_REGICE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_REGISTEEL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_LATIAS - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_LATIOS - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_KYOGRE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, + [SPECIES_GROUDON - 1] = ANIM_V_SHAKE, + [SPECIES_RAYQUAZA - 1] = ANIM_H_SHAKE, + [SPECIES_JIRACHI - 1] = ANIM_RISING_WOBBLE, + [SPECIES_DEOXYS_NORMAL - 1] = ANIM_GROW_VIBRATE, // Gen 4 - [SPECIES_TURTWIG - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GROTLE - 1] = ANIM_V_STRETCH, - [SPECIES_TORTERRA - 1] = ANIM_H_SHAKE, - [SPECIES_CHIMCHAR - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_MONFERNO - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_INFERNAPE - 1] = ANIM_V_STRETCH, - [SPECIES_PIPLUP - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PRINPLUP - 1] = ANIM_V_STRETCH, - [SPECIES_EMPOLEON - 1] = ANIM_V_STRETCH, - [SPECIES_STARLY - 1] = ANIM_V_STRETCH, - [SPECIES_STARAVIA - 1] = ANIM_V_STRETCH, - [SPECIES_STARAPTOR - 1] = ANIM_V_SHAKE, - [SPECIES_BIDOOF - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_BIBAREL - 1] = ANIM_GROW_VIBRATE, - [SPECIES_KRICKETOT - 1] = ANIM_H_JUMPS, - [SPECIES_KRICKETUNE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_SHINX - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_LUXIO - 1] = ANIM_H_STRETCH, - [SPECIES_LUXRAY - 1] = ANIM_GLOW_YELLOW, - [SPECIES_BUDEW - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_ROSERADE - 1] = ANIM_H_VIBRATE, - [SPECIES_CRANIDOS - 1] = ANIM_V_STRETCH, - [SPECIES_RAMPARDOS - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_SHIELDON - 1] = ANIM_V_SHAKE, - [SPECIES_BASTIODON - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_BURMY - 1] = ANIM_V_STRETCH, - [SPECIES_WORMADAM - 1] = ANIM_SWING_CONVEX_FAST_SHORT, - [SPECIES_MOTHIM - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_COMBEE - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_VESPIQUEN - 1] = ANIM_LUNGE_GROW, - [SPECIES_PACHIRISU - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BUIZEL - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FLOATZEL - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_CHERUBI - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CHERRIM - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, - [SPECIES_SHELLOS - 1] = ANIM_V_STRETCH, - [SPECIES_GASTRODON - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_AMBIPOM - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_DRIFLOON - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_DRIFBLIM - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_BUNEARY - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_LOPUNNY - 1] = ANIM_SHRINK_GROW, - [SPECIES_MISMAGIUS - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_HONCHKROW - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GLAMEOW - 1] = ANIM_GROW_VIBRATE, - [SPECIES_PURUGLY - 1] = ANIM_V_STRETCH, - [SPECIES_CHINGLING - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_STUNKY - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_SKUNTANK - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_BRONZOR - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_BRONZONG - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_BONSLY - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_MIME_JR - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_HAPPINY - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_CHATOT - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_SPIRITOMB - 1] = ANIM_GROW_IN_STAGES, - [SPECIES_GIBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GABITE - 1] = ANIM_V_STRETCH, - [SPECIES_GARCHOMP - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_MUNCHLAX - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_RIOLU - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_LUCARIO - 1] = ANIM_V_STRETCH, - [SPECIES_HIPPOPOTAS - 1] = ANIM_V_STRETCH, - [SPECIES_HIPPOWDON - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_SKORUPI - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_DRAPION - 1] = ANIM_V_JUMPS_BIG, - [SPECIES_CROAGUNK - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_TOXICROAK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CARNIVINE - 1] = ANIM_FIGURE_8, - [SPECIES_FINNEON - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_LUMINEON - 1] = ANIM_H_STRETCH, - [SPECIES_MANTYKE - 1] = ANIM_TWIST_TWICE, - [SPECIES_SNOVER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ABOMASNOW - 1] = ANIM_H_SHAKE, - [SPECIES_WEAVILE - 1] = ANIM_H_VIBRATE, - [SPECIES_MAGNEZONE - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_LICKILICKY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_RHYPERIOR - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_TANGROWTH - 1] = ANIM_H_STRETCH, - [SPECIES_ELECTIVIRE - 1] = ANIM_GLOW_YELLOW, - [SPECIES_MAGMORTAR - 1] = ANIM_V_STRETCH, - [SPECIES_TOGEKISS - 1] = ANIM_SWING_CONVEX, - [SPECIES_YANMEGA - 1] = ANIM_H_VIBRATE, - [SPECIES_LEAFEON - 1] = ANIM_SHRINK_GROW, - [SPECIES_GLACEON - 1] = ANIM_V_STRETCH, - [SPECIES_GLISCOR - 1] = ANIM_SWING_CONVEX, - [SPECIES_MAMOSWINE - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_PORYGON_Z - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_GALLADE - 1] = ANIM_H_VIBRATE, - [SPECIES_PROBOPASS - 1] = ANIM_V_SLIDE, - [SPECIES_DUSKNOIR - 1] = ANIM_H_SLIDE, - [SPECIES_FROSLASS - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_ROTOM - 1] = ANIM_GLOW_YELLOW, - [SPECIES_UXIE - 1] = ANIM_SWING_CONCAVE, - [SPECIES_MESPRIT - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_AZELF - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_DIALGA - 1] = ANIM_H_SHAKE, - [SPECIES_PALKIA - 1] = ANIM_V_SHAKE, - [SPECIES_HEATRAN - 1] = ANIM_GLOW_ORANGE, - [SPECIES_REGIGIGAS - 1] = ANIM_V_SHAKE, - [SPECIES_GIRATINA - 1] = ANIM_GROW_VIBRATE, - [SPECIES_CRESSELIA - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_PHIONE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MANAPHY - 1] = ANIM_SWING_CONVEX, - [SPECIES_DARKRAI - 1] = ANIM_GLOW_BLACK, - [SPECIES_SHAYMIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ARCEUS - 1] = ANIM_GROW_VIBRATE, + [SPECIES_TURTWIG - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GROTLE - 1] = ANIM_V_STRETCH, + [SPECIES_TORTERRA - 1] = ANIM_H_SHAKE, + [SPECIES_CHIMCHAR - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_MONFERNO - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_INFERNAPE - 1] = ANIM_V_STRETCH, + [SPECIES_PIPLUP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PRINPLUP - 1] = ANIM_V_STRETCH, + [SPECIES_EMPOLEON - 1] = ANIM_V_STRETCH, + [SPECIES_STARLY - 1] = ANIM_V_STRETCH, + [SPECIES_STARAVIA - 1] = ANIM_V_STRETCH, + [SPECIES_STARAPTOR - 1] = ANIM_V_SHAKE, + [SPECIES_BIDOOF - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_BIBAREL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_KRICKETOT - 1] = ANIM_H_JUMPS, + [SPECIES_KRICKETUNE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_SHINX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LUXIO - 1] = ANIM_H_STRETCH, + [SPECIES_LUXRAY - 1] = ANIM_GLOW_YELLOW, + [SPECIES_BUDEW - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_ROSERADE - 1] = ANIM_H_VIBRATE, + [SPECIES_CRANIDOS - 1] = ANIM_V_STRETCH, + [SPECIES_RAMPARDOS - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_SHIELDON - 1] = ANIM_V_SHAKE, + [SPECIES_BASTIODON - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_BURMY_PLANT_CLOAK - 1] = ANIM_V_STRETCH, + [SPECIES_WORMADAM_PLANT_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, + [SPECIES_MOTHIM - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_COMBEE - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_VESPIQUEN - 1] = ANIM_LUNGE_GROW, + [SPECIES_PACHIRISU - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BUIZEL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_FLOATZEL - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_CHERUBI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHERRIM_OVERCAST - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, + [SPECIES_SHELLOS_WEST_SEA - 1] = ANIM_V_STRETCH, + [SPECIES_GASTRODON_WEST_SEA - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_AMBIPOM - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_DRIFLOON - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_DRIFBLIM - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_BUNEARY - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_LOPUNNY - 1] = ANIM_SHRINK_GROW, + [SPECIES_MISMAGIUS - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_HONCHKROW - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GLAMEOW - 1] = ANIM_GROW_VIBRATE, + [SPECIES_PURUGLY - 1] = ANIM_V_STRETCH, + [SPECIES_CHINGLING - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_STUNKY - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_SKUNTANK - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_BRONZOR - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_BRONZONG - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_BONSLY - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_MIME_JR - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_HAPPINY - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_CHATOT - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_SPIRITOMB - 1] = ANIM_GROW_IN_STAGES, + [SPECIES_GIBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GABITE - 1] = ANIM_V_STRETCH, + [SPECIES_GARCHOMP - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_MUNCHLAX - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_RIOLU - 1] = ANIM_RAPID_H_HOPS, + [SPECIES_LUCARIO - 1] = ANIM_V_STRETCH, + [SPECIES_HIPPOPOTAS - 1] = ANIM_V_STRETCH, + [SPECIES_HIPPOWDON - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_SKORUPI - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_DRAPION - 1] = ANIM_V_JUMPS_BIG, + [SPECIES_CROAGUNK - 1] = ANIM_RAPID_H_HOPS, + [SPECIES_TOXICROAK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CARNIVINE - 1] = ANIM_FIGURE_8, + [SPECIES_FINNEON - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_LUMINEON - 1] = ANIM_H_STRETCH, + [SPECIES_MANTYKE - 1] = ANIM_TWIST_TWICE, + [SPECIES_SNOVER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ABOMASNOW - 1] = ANIM_H_SHAKE, + [SPECIES_WEAVILE - 1] = ANIM_H_VIBRATE, + [SPECIES_MAGNEZONE - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_LICKILICKY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RHYPERIOR - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_TANGROWTH - 1] = ANIM_H_STRETCH, + [SPECIES_ELECTIVIRE - 1] = ANIM_GLOW_YELLOW, + [SPECIES_MAGMORTAR - 1] = ANIM_V_STRETCH, + [SPECIES_TOGEKISS - 1] = ANIM_SWING_CONVEX, + [SPECIES_YANMEGA - 1] = ANIM_H_VIBRATE, + [SPECIES_LEAFEON - 1] = ANIM_SHRINK_GROW, + [SPECIES_GLACEON - 1] = ANIM_V_STRETCH, + [SPECIES_GLISCOR - 1] = ANIM_SWING_CONVEX, + [SPECIES_MAMOSWINE - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_PORYGON_Z - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_GALLADE - 1] = ANIM_H_VIBRATE, + [SPECIES_PROBOPASS - 1] = ANIM_V_SLIDE, + [SPECIES_DUSKNOIR - 1] = ANIM_H_SLIDE, + [SPECIES_FROSLASS - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_ROTOM - 1] = ANIM_GLOW_YELLOW, + [SPECIES_UXIE - 1] = ANIM_SWING_CONCAVE, + [SPECIES_MESPRIT - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_AZELF - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_DIALGA - 1] = ANIM_H_SHAKE, + [SPECIES_PALKIA - 1] = ANIM_V_SHAKE, + [SPECIES_HEATRAN - 1] = ANIM_GLOW_ORANGE, + [SPECIES_REGIGIGAS - 1] = ANIM_V_SHAKE, + [SPECIES_GIRATINA_ALTERED - 1] = ANIM_GROW_VIBRATE, + [SPECIES_CRESSELIA - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_PHIONE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MANAPHY - 1] = ANIM_SWING_CONVEX, + [SPECIES_DARKRAI - 1] = ANIM_GLOW_BLACK, + [SPECIES_SHAYMIN_LAND - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARCEUS_NORMAL - 1] = ANIM_GROW_VIBRATE, // Gen 5 - [SPECIES_VICTINI - 1] = ANIM_H_JUMPS, - [SPECIES_SNIVY - 1] = ANIM_V_STRETCH, - [SPECIES_SERVINE - 1] = ANIM_V_STRETCH, - [SPECIES_SERPERIOR - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_TEPIG - 1] = ANIM_H_SLIDE, - [SPECIES_PIGNITE - 1] = ANIM_V_STRETCH, - [SPECIES_EMBOAR - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, - [SPECIES_OSHAWOTT - 1] = ANIM_H_JUMPS, - [SPECIES_DEWOTT - 1] = ANIM_H_VIBRATE, - [SPECIES_SAMUROTT - 1] = ANIM_V_SHAKE, - [SPECIES_PATRAT - 1] = ANIM_V_STRETCH, - [SPECIES_WATCHOG - 1] = ANIM_V_STRETCH, - [SPECIES_LILLIPUP - 1] = ANIM_H_JUMPS, - [SPECIES_HERDIER - 1] = ANIM_H_STRETCH, - [SPECIES_STOUTLAND - 1] = ANIM_H_SLIDE, - [SPECIES_PURRLOIN - 1] = ANIM_GROW_VIBRATE, - [SPECIES_LIEPARD - 1] = ANIM_GROW_VIBRATE, - [SPECIES_PANSAGE - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_SIMISAGE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_PANSEAR - 1] = ANIM_V_STRETCH, - [SPECIES_SIMISEAR - 1] = ANIM_SWING_CONCAVE_FAST, - [SPECIES_PANPOUR - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SIMIPOUR - 1] = ANIM_H_STRETCH, - [SPECIES_MUNNA - 1] = ANIM_RISING_WOBBLE, - [SPECIES_MUSHARNA - 1] = ANIM_ROTATE_TO_SIDES_TWICE, - [SPECIES_PIDOVE - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_TRANQUILL - 1] = ANIM_V_STRETCH, - [SPECIES_UNFEZANT - 1] = ANIM_SHRINK_GROW, - [SPECIES_BLITZLE - 1] = ANIM_V_STRETCH, - [SPECIES_ZEBSTRIKA - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_ROGGENROLA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BOLDORE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_GIGALITH - 1] = ANIM_ROTATE_UP_SLAM_DOWN, - [SPECIES_WOOBAT - 1] = ANIM_FOUR_PETAL, - [SPECIES_SWOOBAT - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, - [SPECIES_DRILBUR - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_EXCADRILL - 1] = ANIM_H_SHAKE, - [SPECIES_AUDINO - 1] = ANIM_V_STRETCH, - [SPECIES_TIMBURR - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GURDURR - 1] = ANIM_GROW_VIBRATE, - [SPECIES_CONKELDURR - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_TYMPOLE - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_PALPITOAD - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_SEISMITOAD - 1] = ANIM_H_JUMPS, - [SPECIES_THROH - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_SAWK - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SEWADDLE - 1] = ANIM_CIRCLE_INTO_BG, - [SPECIES_SWADLOON - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_LEAVANNY - 1] = ANIM_GROW_VIBRATE, - [SPECIES_VENIPEDE - 1] = ANIM_H_SLIDE, - [SPECIES_WHIRLIPEDE - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_SCOLIPEDE - 1] = ANIM_H_SHAKE, - [SPECIES_COTTONEE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_WHIMSICOTT - 1] = ANIM_SHRINK_GROW, - [SPECIES_PETILIL - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_LILLIGANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BASCULIN - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_SANDILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_KROKOROK - 1] = ANIM_V_STRETCH, - [SPECIES_KROOKODILE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_DARUMAKA - 1] = ANIM_SWING_CONCAVE, - [SPECIES_DARMANITAN - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_MARACTUS - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_DWEBBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CRUSTLE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_SCRAGGY - 1] = ANIM_V_STRETCH, - [SPECIES_SCRAFTY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SIGILYPH - 1] = ANIM_FIGURE_8, - [SPECIES_YAMASK - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_COFAGRIGUS - 1] = ANIM_GLOW_BLACK, - [SPECIES_TIRTOUGA - 1] = ANIM_RISING_WOBBLE, - [SPECIES_CARRACOSTA - 1] = ANIM_H_SHAKE_SLOW, - [SPECIES_ARCHEN - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_ARCHEOPS - 1] = ANIM_RISING_WOBBLE, - [SPECIES_TRUBBISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GARBODOR - 1] = ANIM_V_STRETCH, - [SPECIES_ZORUA - 1] = ANIM_CIRCULAR_VIBRATE, - [SPECIES_ZOROARK - 1] = ANIM_FLICKER_INCREASING, - [SPECIES_MINCCINO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CINCCINO - 1] = ANIM_V_SLIDE, - [SPECIES_GOTHITA - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_GOTHORITA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GOTHITELLE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SOLOSIS - 1] = ANIM_TWIST, - [SPECIES_DUOSION - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_REUNICLUS - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_DUCKLETT - 1] = ANIM_V_STRETCH, - [SPECIES_SWANNA - 1] = ANIM_V_STRETCH, - [SPECIES_VANILLITE - 1] = ANIM_H_SLIDE, - [SPECIES_VANILLISH - 1] = ANIM_GROW_VIBRATE, - [SPECIES_VANILLUXE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DEERLING - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SAWSBUCK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_EMOLGA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_KARRABLAST - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ESCAVALIER - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_FOONGUS - 1] = ANIM_SWING_CONCAVE_FAST, - [SPECIES_AMOONGUSS - 1] = ANIM_H_SLIDE, - [SPECIES_FRILLISH - 1] = ANIM_RISING_WOBBLE, - [SPECIES_JELLICENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ALOMOMOLA - 1] = ANIM_SWING_CONCAVE, - [SPECIES_JOLTIK - 1] = ANIM_H_SLIDE, - [SPECIES_GALVANTULA - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_FERROSEED - 1] = ANIM_H_VIBRATE, - [SPECIES_FERROTHORN - 1] = ANIM_V_SHAKE, - [SPECIES_KLINK - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_KLANG - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_KLINKLANG - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_TYNAMO - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_EELEKTRIK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_EELEKTROSS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, - [SPECIES_ELGYEM - 1] = ANIM_RISING_WOBBLE, - [SPECIES_BEHEEYEM - 1] = ANIM_GROW_VIBRATE, - [SPECIES_LITWICK - 1] = ANIM_V_STRETCH, - [SPECIES_LAMPENT - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_CHANDELURE - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_AXEW - 1] = ANIM_H_SHAKE, - [SPECIES_FRAXURE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HAXORUS - 1] = ANIM_H_SHAKE, - [SPECIES_CUBCHOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BEARTIC - 1] = ANIM_H_SHAKE, - [SPECIES_CRYOGONAL - 1] = ANIM_SHRINK_GROW, - [SPECIES_SHELMET - 1] = ANIM_TWIST, - [SPECIES_ACCELGOR - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_STUNFISK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MIENFOO - 1] = ANIM_H_VIBRATE, - [SPECIES_MIENSHAO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRUDDIGON - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, - [SPECIES_GOLETT - 1] = ANIM_V_SHAKE, - [SPECIES_GOLURK - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_PAWNIARD - 1] = ANIM_H_VIBRATE, - [SPECIES_BISHARP - 1] = ANIM_H_STRETCH, - [SPECIES_BOUFFALANT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_RUFFLET - 1] = ANIM_V_STRETCH, - [SPECIES_BRAVIARY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_VULLABY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MANDIBUZZ - 1] = ANIM_V_STRETCH, - [SPECIES_HEATMOR - 1] = ANIM_H_SHAKE, - [SPECIES_DURANT - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_DEINO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ZWEILOUS - 1] = ANIM_H_STRETCH, - [SPECIES_HYDREIGON - 1] = ANIM_RISING_WOBBLE, - [SPECIES_LARVESTA - 1] = ANIM_GLOW_ORANGE, - [SPECIES_VOLCARONA - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_COBALION - 1] = ANIM_V_STRETCH, - [SPECIES_TERRAKION - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_VIRIZION - 1] = ANIM_GROW_VIBRATE, - [SPECIES_TORNADUS - 1] = ANIM_FIGURE_8, - [SPECIES_THUNDURUS - 1] = ANIM_FIGURE_8, - [SPECIES_RESHIRAM - 1] = ANIM_V_SHAKE, - [SPECIES_ZEKROM - 1] = ANIM_V_SHAKE, - [SPECIES_LANDORUS - 1] = ANIM_FIGURE_8, - [SPECIES_KYUREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_KELDEO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MELOETTA - 1] = ANIM_GROW_VIBRATE, - [SPECIES_GENESECT - 1] = ANIM_H_VIBRATE, + [SPECIES_VICTINI - 1] = ANIM_H_JUMPS, + [SPECIES_SNIVY - 1] = ANIM_V_STRETCH, + [SPECIES_SERVINE - 1] = ANIM_V_STRETCH, + [SPECIES_SERPERIOR - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_TEPIG - 1] = ANIM_H_SLIDE, + [SPECIES_PIGNITE - 1] = ANIM_V_STRETCH, + [SPECIES_EMBOAR - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, + [SPECIES_OSHAWOTT - 1] = ANIM_H_JUMPS, + [SPECIES_DEWOTT - 1] = ANIM_H_VIBRATE, + [SPECIES_SAMUROTT - 1] = ANIM_V_SHAKE, + [SPECIES_PATRAT - 1] = ANIM_V_STRETCH, + [SPECIES_WATCHOG - 1] = ANIM_V_STRETCH, + [SPECIES_LILLIPUP - 1] = ANIM_H_JUMPS, + [SPECIES_HERDIER - 1] = ANIM_H_STRETCH, + [SPECIES_STOUTLAND - 1] = ANIM_H_SLIDE, + [SPECIES_PURRLOIN - 1] = ANIM_GROW_VIBRATE, + [SPECIES_LIEPARD - 1] = ANIM_GROW_VIBRATE, + [SPECIES_PANSAGE - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_SIMISAGE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_PANSEAR - 1] = ANIM_V_STRETCH, + [SPECIES_SIMISEAR - 1] = ANIM_SWING_CONCAVE_FAST, + [SPECIES_PANPOUR - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SIMIPOUR - 1] = ANIM_H_STRETCH, + [SPECIES_MUNNA - 1] = ANIM_RISING_WOBBLE, + [SPECIES_MUSHARNA - 1] = ANIM_ROTATE_TO_SIDES_TWICE, + [SPECIES_PIDOVE - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_TRANQUILL - 1] = ANIM_V_STRETCH, + [SPECIES_UNFEZANT - 1] = ANIM_SHRINK_GROW, + [SPECIES_BLITZLE - 1] = ANIM_V_STRETCH, + [SPECIES_ZEBSTRIKA - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_ROGGENROLA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BOLDORE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_GIGALITH - 1] = ANIM_ROTATE_UP_SLAM_DOWN, + [SPECIES_WOOBAT - 1] = ANIM_FOUR_PETAL, + [SPECIES_SWOOBAT - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + [SPECIES_DRILBUR - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, + [SPECIES_EXCADRILL - 1] = ANIM_H_SHAKE, + [SPECIES_AUDINO - 1] = ANIM_V_STRETCH, + [SPECIES_TIMBURR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GURDURR - 1] = ANIM_GROW_VIBRATE, + [SPECIES_CONKELDURR - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_TYMPOLE - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_PALPITOAD - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_SEISMITOAD - 1] = ANIM_H_JUMPS, + [SPECIES_THROH - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_SAWK - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SEWADDLE - 1] = ANIM_CIRCLE_INTO_BG, + [SPECIES_SWADLOON - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_LEAVANNY - 1] = ANIM_GROW_VIBRATE, + [SPECIES_VENIPEDE - 1] = ANIM_H_SLIDE, + [SPECIES_WHIRLIPEDE - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_SCOLIPEDE - 1] = ANIM_H_SHAKE, + [SPECIES_COTTONEE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WHIMSICOTT - 1] = ANIM_SHRINK_GROW, + [SPECIES_PETILIL - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_LILLIGANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BASCULIN_RED_STRIPED - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_SANDILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KROKOROK - 1] = ANIM_V_STRETCH, + [SPECIES_KROOKODILE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, + [SPECIES_DARUMAKA - 1] = ANIM_SWING_CONCAVE, + [SPECIES_DARMANITAN_STANDARD_MODE - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_MARACTUS - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_DWEBBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CRUSTLE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_SCRAGGY - 1] = ANIM_V_STRETCH, + [SPECIES_SCRAFTY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SIGILYPH - 1] = ANIM_FIGURE_8, + [SPECIES_YAMASK - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_COFAGRIGUS - 1] = ANIM_GLOW_BLACK, + [SPECIES_TIRTOUGA - 1] = ANIM_RISING_WOBBLE, + [SPECIES_CARRACOSTA - 1] = ANIM_H_SHAKE_SLOW, + [SPECIES_ARCHEN - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_ARCHEOPS - 1] = ANIM_RISING_WOBBLE, + [SPECIES_TRUBBISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GARBODOR - 1] = ANIM_V_STRETCH, + [SPECIES_ZORUA - 1] = ANIM_CIRCULAR_VIBRATE, + [SPECIES_ZOROARK - 1] = ANIM_FLICKER_INCREASING, + [SPECIES_MINCCINO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CINCCINO - 1] = ANIM_V_SLIDE, + [SPECIES_GOTHITA - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_GOTHORITA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GOTHITELLE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SOLOSIS - 1] = ANIM_TWIST, + [SPECIES_DUOSION - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_REUNICLUS - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_DUCKLETT - 1] = ANIM_V_STRETCH, + [SPECIES_SWANNA - 1] = ANIM_V_STRETCH, + [SPECIES_VANILLITE - 1] = ANIM_H_SLIDE, + [SPECIES_VANILLISH - 1] = ANIM_GROW_VIBRATE, + [SPECIES_VANILLUXE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DEERLING_SPRING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SAWSBUCK_SPRING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EMOLGA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_KARRABLAST - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ESCAVALIER - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_FOONGUS - 1] = ANIM_SWING_CONCAVE_FAST, + [SPECIES_AMOONGUSS - 1] = ANIM_H_SLIDE, + [SPECIES_FRILLISH - 1] = ANIM_RISING_WOBBLE, + [SPECIES_JELLICENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALOMOMOLA - 1] = ANIM_SWING_CONCAVE, + [SPECIES_JOLTIK - 1] = ANIM_H_SLIDE, + [SPECIES_GALVANTULA - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_FERROSEED - 1] = ANIM_H_VIBRATE, + [SPECIES_FERROTHORN - 1] = ANIM_V_SHAKE, + [SPECIES_KLINK - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_KLANG - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_KLINKLANG - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_TYNAMO - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_EELEKTRIK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EELEKTROSS - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, + [SPECIES_ELGYEM - 1] = ANIM_RISING_WOBBLE, + [SPECIES_BEHEEYEM - 1] = ANIM_GROW_VIBRATE, + [SPECIES_LITWICK - 1] = ANIM_V_STRETCH, + [SPECIES_LAMPENT - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_CHANDELURE - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_AXEW - 1] = ANIM_H_SHAKE, + [SPECIES_FRAXURE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HAXORUS - 1] = ANIM_H_SHAKE, + [SPECIES_CUBCHOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BEARTIC - 1] = ANIM_H_SHAKE, + [SPECIES_CRYOGONAL - 1] = ANIM_SHRINK_GROW, + [SPECIES_SHELMET - 1] = ANIM_TWIST, + [SPECIES_ACCELGOR - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_STUNFISK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MIENFOO - 1] = ANIM_H_VIBRATE, + [SPECIES_MIENSHAO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRUDDIGON - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, + [SPECIES_GOLETT - 1] = ANIM_V_SHAKE, + [SPECIES_GOLURK - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_PAWNIARD - 1] = ANIM_H_VIBRATE, + [SPECIES_BISHARP - 1] = ANIM_H_STRETCH, + [SPECIES_BOUFFALANT - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_RUFFLET - 1] = ANIM_V_STRETCH, + [SPECIES_BRAVIARY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VULLABY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MANDIBUZZ - 1] = ANIM_V_STRETCH, + [SPECIES_HEATMOR - 1] = ANIM_H_SHAKE, + [SPECIES_DURANT - 1] = ANIM_RAPID_H_HOPS, + [SPECIES_DEINO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZWEILOUS - 1] = ANIM_H_STRETCH, + [SPECIES_HYDREIGON - 1] = ANIM_RISING_WOBBLE, + [SPECIES_LARVESTA - 1] = ANIM_GLOW_ORANGE, + [SPECIES_VOLCARONA - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_COBALION - 1] = ANIM_V_STRETCH, + [SPECIES_TERRAKION - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_VIRIZION - 1] = ANIM_GROW_VIBRATE, + [SPECIES_TORNADUS_INCARNATE - 1] = ANIM_FIGURE_8, + [SPECIES_THUNDURUS_INCARNATE - 1] = ANIM_FIGURE_8, + [SPECIES_RESHIRAM - 1] = ANIM_V_SHAKE, + [SPECIES_ZEKROM - 1] = ANIM_V_SHAKE, + [SPECIES_LANDORUS_INCARNATE - 1] = ANIM_FIGURE_8, + [SPECIES_KYUREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KELDEO_ORDINARY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MELOETTA_ARIA - 1] = ANIM_GROW_VIBRATE, + [SPECIES_GENESECT - 1] = ANIM_H_VIBRATE, + + // Gen 6 + [SPECIES_CHESPIN - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_QUILLADIN - 1] = ANIM_LUNGE_GROW, + [SPECIES_CHESNAUGHT - 1] = ANIM_GROW_IN_STAGES, + [SPECIES_FENNEKIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRAIXEN - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DELPHOX - 1] = ANIM_GROW_VIBRATE, + [SPECIES_FROAKIE - 1] = ANIM_H_JUMPS, + [SPECIES_FROGADIER - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_GRENINJA - 1] = ANIM_V_STRETCH, + [SPECIES_BUNNELBY - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_DIGGERSBY - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_FLETCHLING - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_FLETCHINDER - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_TALONFLAME - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_SCATTERBUG - 1] = ANIM_V_STRETCH, + [SPECIES_SPEWPA - 1] = ANIM_V_SHAKE, + [SPECIES_VIVILLON_ICY_SNOW - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_LITLEO - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_PYROAR - 1] = ANIM_V_SHAKE, + [SPECIES_FLABEBE_RED_FLOWER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_FLOETTE_RED_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_FLORGES_RED_FLOWER - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_SKIDDO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOGOAT - 1] = ANIM_V_STRETCH, + [SPECIES_PANCHAM - 1] = ANIM_H_STRETCH, + [SPECIES_PANGORO - 1] = ANIM_BACK_AND_LUNGE, + [SPECIES_FURFROU_NATURAL - 1] = ANIM_H_SLIDE, + [SPECIES_ESPURR - 1] = ANIM_V_STRETCH, + [SPECIES_MEOWSTIC_MALE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_HONEDGE - 1] = ANIM_SWING_CONVEX, + [SPECIES_DOUBLADE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_AEGISLASH_SHIELD - 1] = ANIM_H_VIBRATE, + [SPECIES_SPRITZEE - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_AROMATISSE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_SWIRLIX - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_SLURPUFF - 1] = ANIM_V_STRETCH, + [SPECIES_INKAY - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_MALAMAR - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_BINACLE - 1] = ANIM_H_SLIDE, + [SPECIES_BARBARACLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SKRELP - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_DRAGALGE - 1] = ANIM_FRONT_FLIP, + [SPECIES_CLAUNCHER - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_CLAWITZER - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, + [SPECIES_HELIOPTILE - 1] = ANIM_GLOW_YELLOW, + [SPECIES_HELIOLISK - 1] = ANIM_RAPID_H_HOPS, + [SPECIES_TYRUNT - 1] = ANIM_V_SHAKE, + [SPECIES_TYRANTRUM - 1] = ANIM_V_SHAKE, + [SPECIES_AMAURA - 1] = ANIM_CONCAVE_ARC_SMALL_TWICE, + [SPECIES_AURORUS - 1] = ANIM_GROW_VIBRATE, + [SPECIES_SYLVEON - 1] = ANIM_SHRINK_GROW, + [SPECIES_HAWLUCHA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_DEDENNE - 1] = ANIM_GLOW_YELLOW, + [SPECIES_CARBINK - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_GOOMY - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_SLIGGOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOODRA - 1] = ANIM_V_SHAKE, + [SPECIES_KLEFKI - 1] = ANIM_FOUR_PETAL, + [SPECIES_PHANTUMP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TREVENANT - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_PUMPKABOO_AVERAGE - 1] = ANIM_V_SLIDE_WOBBLE, + [SPECIES_GOURGEIST_AVERAGE - 1] = ANIM_SHRINK_GROW, + [SPECIES_BERGMITE - 1] = ANIM_LUNGE_GROW, + [SPECIES_AVALUGG - 1] = ANIM_V_SHAKE, + [SPECIES_NOIBAT - 1] = ANIM_RISING_WOBBLE, + [SPECIES_NOIVERN - 1] = ANIM_V_STRETCH, + [SPECIES_XERNEAS_NEUTRAL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_YVELTAL - 1] = ANIM_FRONT_FLIP, + [SPECIES_ZYGARDE_50_AURA_BREAK - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_DIANCIE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HOOPA_CONFINED - 1] = ANIM_ZIGZAG_SLOW, + [SPECIES_VOLCANION - 1] = ANIM_V_SHAKE_TWICE, - //Gen 6 - [SPECIES_CHESPIN - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_QUILLADIN - 1] = ANIM_LUNGE_GROW, - [SPECIES_CHESNAUGHT - 1] = ANIM_GROW_IN_STAGES, - [SPECIES_FENNEKIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BRAIXEN - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DELPHOX - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FROAKIE - 1] = ANIM_H_JUMPS, - [SPECIES_FROGADIER - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_GRENINJA - 1] = ANIM_V_STRETCH, - [SPECIES_BUNNELBY - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_DIGGERSBY - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_FLETCHLING - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_FLETCHINDER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TALONFLAME - 1] = ANIM_SWING_CONCAVE_FAST, - [SPECIES_SCATTERBUG - 1] = ANIM_V_STRETCH, - [SPECIES_SPEWPA - 1] = ANIM_V_SHAKE, - [SPECIES_VIVILLON - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_LITLEO - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_PYROAR - 1] = ANIM_V_SHAKE, - [SPECIES_FLABEBE - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_FLOETTE - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_FLORGES - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SKIDDO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GOGOAT - 1] = ANIM_V_STRETCH, - [SPECIES_PANCHAM - 1] = ANIM_H_STRETCH, - [SPECIES_PANGORO - 1] = ANIM_BACK_AND_LUNGE, - [SPECIES_FURFROU - 1] = ANIM_H_SLIDE, - [SPECIES_ESPURR - 1] = ANIM_V_STRETCH, - [SPECIES_MEOWSTIC - 1] = ANIM_GROW_VIBRATE, - [SPECIES_HONEDGE - 1] = ANIM_SWING_CONVEX, - [SPECIES_DOUBLADE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_AEGISLASH - 1] = ANIM_H_VIBRATE, - [SPECIES_SPRITZEE - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_AROMATISSE - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_SWIRLIX - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_SLURPUFF - 1] = ANIM_V_STRETCH, - [SPECIES_INKAY - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_MALAMAR - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_BINACLE - 1] = ANIM_H_SLIDE, - [SPECIES_BARBARACLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SKRELP - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_DRAGALGE - 1] = ANIM_FRONT_FLIP, - [SPECIES_CLAUNCHER - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_CLAWITZER - 1] = ANIM_CIRCLE_C_CLOCKWISE_SLOW, - [SPECIES_HELIOPTILE - 1] = ANIM_GLOW_YELLOW, - [SPECIES_HELIOLISK - 1] = ANIM_RAPID_H_HOPS, - [SPECIES_TYRUNT - 1] = ANIM_V_SHAKE, - [SPECIES_TYRANTRUM - 1] = ANIM_V_SHAKE, - [SPECIES_AMAURA - 1] = ANIM_H_STRETCH, - [SPECIES_AURORUS - 1] = ANIM_GROW_VIBRATE, - [SPECIES_SYLVEON - 1] = ANIM_SHRINK_GROW, - [SPECIES_HAWLUCHA - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_DEDENNE - 1] = ANIM_GLOW_YELLOW, - [SPECIES_CARBINK - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_GOOMY - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_SLIGGOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GOODRA - 1] = ANIM_V_SHAKE, - [SPECIES_KLEFKI - 1] = ANIM_FOUR_PETAL, - [SPECIES_PHANTUMP - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TREVENANT - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_PUMPKABOO - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_GOURGEIST - 1] = ANIM_SHRINK_GROW, - [SPECIES_BERGMITE - 1] = ANIM_LUNGE_GROW, - [SPECIES_AVALUGG - 1] = ANIM_V_SHAKE, - [SPECIES_NOIBAT - 1] = ANIM_RISING_WOBBLE, - [SPECIES_NOIVERN - 1] = ANIM_V_STRETCH, - [SPECIES_XERNEAS - 1] = ANIM_GROW_VIBRATE, - [SPECIES_YVELTAL - 1] = ANIM_FRONT_FLIP, - [SPECIES_ZYGARDE - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_DIANCIE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HOOPA - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_VOLCANION - 1] = ANIM_V_SHAKE_TWICE, // Gen 7 - [SPECIES_ROWLET - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DARTRIX - 1] = ANIM_H_STRETCH, - [SPECIES_DECIDUEYE - 1] = ANIM_H_VIBRATE, - [SPECIES_LITTEN - 1] = ANIM_H_STRETCH, - [SPECIES_TORRACAT - 1] = ANIM_V_STRETCH, - [SPECIES_INCINEROAR - 1] = ANIM_V_SHAKE, - [SPECIES_POPPLIO - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_BRIONNE - 1] = ANIM_SHRINK_GROW, - [SPECIES_PRIMARINA - 1] = ANIM_SHAKE_GLOW_BLUE_SLOW, - [SPECIES_PIKIPEK - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_TRUMBEAK - 1] = ANIM_H_STRETCH, - [SPECIES_TOUCANNON - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, - [SPECIES_YUNGOOS - 1] = ANIM_V_STRETCH, - [SPECIES_GUMSHOOS - 1] = ANIM_H_SHAKE, - [SPECIES_GRUBBIN - 1] = ANIM_H_SLIDE, - [SPECIES_CHARJABUG - 1] = ANIM_SHAKE_FLASH_YELLOW_SLOW, - [SPECIES_VIKAVOLT - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, - [SPECIES_CRABRAWLER - 1] = ANIM_V_SHAKE, - [SPECIES_CRABOMINABLE - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, - [SPECIES_ORICORIO - 1] = ANIM_CONCAVE_ARC_SMALL, - [SPECIES_CUTIEFLY - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_RIBOMBEE - 1] = ANIM_CONVEX_DOUBLE_ARC_TWICE, - [SPECIES_ROCKRUFF - 1] = ANIM_V_STRETCH, - [SPECIES_LYCANROC - 1] = ANIM_V_SHAKE, - [SPECIES_WISHIWASHI - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_MAREANIE - 1] = ANIM_GLOW_PURPLE, - [SPECIES_TOXAPEX - 1] = ANIM_SHAKE_GLOW_PURPLE_SLOW, - [SPECIES_MUDBRAY - 1] = ANIM_V_SHAKE, - [SPECIES_MUDSDALE - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_DEWPIDER - 1] = ANIM_SHRINK_GROW, - [SPECIES_ARAQUANID - 1] = ANIM_H_SHAKE, - [SPECIES_FOMANTIS - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, - [SPECIES_LURANTIS - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MORELULL - 1] = ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_SHIINOTIC - 1] = ANIM_SHAKE_GLOW_WHITE_SLOW, - [SPECIES_SALANDIT - 1] = ANIM_GLOW_RED, - [SPECIES_SALAZZLE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_STUFFUL - 1] = ANIM_V_SHAKE, - [SPECIES_BEWEAR - 1] = ANIM_H_STRETCH, - [SPECIES_BOUNSWEET - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_STEENEE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TSAREENA - 1] = ANIM_SHRINK_GROW, - [SPECIES_COMFEY - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_ORANGURU - 1] = ANIM_SHRINK_GROW, - [SPECIES_PASSIMIAN - 1] = ANIM_V_SHAKE, - [SPECIES_WIMPOD - 1] = ANIM_V_SHAKE_H_SLIDE_FAST, - [SPECIES_GOLISOPOD - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, - [SPECIES_SANDYGAST - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_PALOSSAND - 1] = ANIM_H_VIBRATE, - [SPECIES_PYUKUMUKU - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TYPE_NULL - 1] = ANIM_H_SHAKE, - [SPECIES_SILVALLY - 1] = ANIM_V_SHAKE, - [SPECIES_MINIOR - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_KOMALA - 1] = ANIM_H_DIP, - [SPECIES_TURTONATOR - 1] = ANIM_SHAKE_GLOW_RED, - [SPECIES_TOGEDEMARU - 1] = ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_MIMIKYU - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, - [SPECIES_BRUXISH - 1] = ANIM_RISING_WOBBLE, - [SPECIES_DRAMPA - 1] = ANIM_V_SHAKE, - [SPECIES_DHELMISE - 1] = ANIM_SWING_CONVEX, - [SPECIES_JANGMO_O - 1] = ANIM_H_STRETCH, - [SPECIES_HAKAMO_O - 1] = ANIM_H_STRETCH, - [SPECIES_KOMMO_O - 1] = ANIM_GROW_STUTTER_TWICE, - [SPECIES_TAPU_KOKO - 1] = ANIM_TRIANGLE_DOWN_TWICE, - [SPECIES_TAPU_LELE - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, - [SPECIES_TAPU_BULU - 1] = ANIM_V_SHAKE_TWICE, - [SPECIES_TAPU_FINI - 1] = ANIM_SHAKE_GLOW_BLUE_SLOW, - [SPECIES_COSMOG - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_COSMOEM - 1] = ANIM_RISING_WOBBLE, - [SPECIES_SOLGALEO - 1] = ANIM_GROW_VIBRATE, - [SPECIES_LUNALA - 1] = ANIM_CIRCULAR_VIBRATE, - [SPECIES_NIHILEGO - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_BUZZWOLE - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, - [SPECIES_PHEROMOSA - 1] = ANIM_SHRINK_GROW, - [SPECIES_XURKITREE - 1] = ANIM_SHAKE_FLASH_YELLOW_FAST, - [SPECIES_CELESTEELA - 1] = ANIM_GROW_STUTTER_SLOW, - [SPECIES_KARTANA - 1] = ANIM_H_VIBRATE, - [SPECIES_GUZZLORD - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, - [SPECIES_NECROZMA - 1] = ANIM_GROW_VIBRATE, - [SPECIES_MAGEARNA - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_MARSHADOW - 1] = ANIM_V_SHAKE, - [SPECIES_POIPOLE - 1] = ANIM_SHAKE_GLOW_PURPLE_SLOW, - [SPECIES_NAGANADEL - 1] = ANIM_TRIANGLE_DOWN_TWICE, - [SPECIES_STAKATAKA - 1] = ANIM_GROW_VIBRATE, - [SPECIES_BLACEPHALON - 1] = ANIM_SHAKE_GLOW_RED, - [SPECIES_ZERAORA - 1] = ANIM_V_STRETCH, - [SPECIES_MELTAN - 1] = ANIM_GROW_STUTTER_SLOW, - [SPECIES_MELMETAL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ROWLET - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_DARTRIX - 1] = ANIM_V_STRETCH, + [SPECIES_DECIDUEYE - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_LITTEN - 1] = ANIM_H_STRETCH, + [SPECIES_TORRACAT - 1] = ANIM_V_STRETCH, + [SPECIES_INCINEROAR - 1] = ANIM_V_SHAKE, + [SPECIES_POPPLIO - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_BRIONNE - 1] = ANIM_SHRINK_GROW, + [SPECIES_PRIMARINA - 1] = ANIM_SHAKE_GLOW_BLUE_SLOW, + [SPECIES_PIKIPEK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TRUMBEAK - 1] = ANIM_H_STRETCH, + [SPECIES_TOUCANNON - 1] = ANIM_SHAKE_GLOW_RED_SLOW, + [SPECIES_YUNGOOS - 1] = ANIM_V_STRETCH, + [SPECIES_GUMSHOOS - 1] = ANIM_H_SHAKE, + [SPECIES_GRUBBIN - 1] = ANIM_H_SLIDE, + [SPECIES_CHARJABUG - 1] = ANIM_SHAKE_FLASH_YELLOW_SLOW, + [SPECIES_VIKAVOLT - 1] = ANIM_BOUNCE_ROTATE_TO_SIDES, + [SPECIES_CRABRAWLER - 1] = ANIM_V_SHAKE, + [SPECIES_CRABOMINABLE - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_ORICORIO_BAILE - 1] = ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CUTIEFLY - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_RIBOMBEE - 1] = ANIM_CONVEX_DOUBLE_ARC_TWICE, + [SPECIES_ROCKRUFF - 1] = ANIM_V_STRETCH, + [SPECIES_LYCANROC_MIDDAY - 1] = ANIM_V_SHAKE, + [SPECIES_WISHIWASHI_SOLO - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_MAREANIE - 1] = ANIM_GLOW_PURPLE, + [SPECIES_TOXAPEX - 1] = ANIM_SHAKE_GLOW_PURPLE_SLOW, + [SPECIES_MUDBRAY - 1] = ANIM_V_SHAKE, + [SPECIES_MUDSDALE - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_DEWPIDER - 1] = ANIM_SHRINK_GROW, + [SPECIES_ARAQUANID - 1] = ANIM_H_SHAKE, + [SPECIES_FOMANTIS - 1] = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + [SPECIES_LURANTIS - 1] = ANIM_GROW_VIBRATE, + [SPECIES_MORELULL - 1] = ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_SHIINOTIC - 1] = ANIM_SHAKE_GLOW_WHITE_SLOW, + [SPECIES_SALANDIT - 1] = ANIM_GLOW_RED, + [SPECIES_SALAZZLE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_STUFFUL - 1] = ANIM_V_SHAKE, + [SPECIES_BEWEAR - 1] = ANIM_H_STRETCH, + [SPECIES_BOUNSWEET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_STEENEE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TSAREENA - 1] = ANIM_SHRINK_GROW, + [SPECIES_COMFEY - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_ORANGURU - 1] = ANIM_SHRINK_GROW_SLOW, + [SPECIES_PASSIMIAN - 1] = ANIM_H_SHAKE, + [SPECIES_WIMPOD - 1] = ANIM_V_SHAKE_H_SLIDE_FAST, + [SPECIES_GOLISOPOD - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_SANDYGAST - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_PALOSSAND - 1] = ANIM_H_VIBRATE, + [SPECIES_PYUKUMUKU - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TYPE_NULL - 1] = ANIM_H_SHAKE, + [SPECIES_SILVALLY_NORMAL - 1] = ANIM_V_SHAKE, + [SPECIES_MINIOR_METEOR_RED - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_KOMALA - 1] = ANIM_H_DIP, + [SPECIES_TURTONATOR - 1] = ANIM_SHAKE_GLOW_RED, + [SPECIES_TOGEDEMARU - 1] = ANIM_FLASH_YELLOW, + [SPECIES_MIMIKYU_DISGUISED - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, + [SPECIES_BRUXISH - 1] = ANIM_RISING_WOBBLE, + [SPECIES_DRAMPA - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_DHELMISE - 1] = ANIM_SWING_CONVEX, + [SPECIES_JANGMO_O - 1] = ANIM_H_STRETCH, + [SPECIES_HAKAMO_O - 1] = ANIM_H_STRETCH, + [SPECIES_KOMMO_O - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_TAPU_KOKO - 1] = ANIM_TRIANGLE_DOWN_TWICE, + [SPECIES_TAPU_LELE - 1] = ANIM_V_SLIDE_WOBBLE_SMALL, + [SPECIES_TAPU_BULU - 1] = ANIM_V_SHAKE_TWICE, + [SPECIES_TAPU_FINI - 1] = ANIM_SHAKE_GLOW_BLUE_SLOW, + [SPECIES_COSMOG - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_COSMOEM - 1] = ANIM_RISING_WOBBLE, + [SPECIES_SOLGALEO - 1] = ANIM_GROW_VIBRATE, + [SPECIES_LUNALA - 1] = ANIM_CIRCULAR_VIBRATE, + [SPECIES_NIHILEGO - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_BUZZWOLE - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_PHEROMOSA - 1] = ANIM_SHRINK_GROW, + [SPECIES_XURKITREE - 1] = ANIM_SHAKE_FLASH_YELLOW_FAST, + [SPECIES_CELESTEELA - 1] = ANIM_GROW_STUTTER_SLOW, + [SPECIES_KARTANA - 1] = ANIM_H_VIBRATE, + [SPECIES_GUZZLORD - 1] = ANIM_SHRINK_GROW_VIBRATE_FAST, + [SPECIES_NECROZMA - 1] = ANIM_GROW_VIBRATE, + [SPECIES_MAGEARNA - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_MARSHADOW - 1] = ANIM_V_SHAKE, + [SPECIES_POIPOLE - 1] = ANIM_SHAKE_GLOW_PURPLE_SLOW, + [SPECIES_NAGANADEL - 1] = ANIM_TRIANGLE_DOWN_TWICE, + [SPECIES_STAKATAKA - 1] = ANIM_GROW_VIBRATE, + [SPECIES_BLACEPHALON - 1] = ANIM_SHAKE_GLOW_RED, + [SPECIES_ZERAORA - 1] = ANIM_V_STRETCH, + [SPECIES_MELTAN - 1] = ANIM_GROW_STUTTER_SLOW, + [SPECIES_MELMETAL - 1] = ANIM_GROW_VIBRATE, // Gen 8 Todo: Assign proper ones. - [SPECIES_GROOKEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_THWACKEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_RILLABOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SCORBUNNY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_RABOOT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CINDERACE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SOBBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRIZZILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_INTELEON - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SKWOVET - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GREEDENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ROOKIDEE - 1] = ANIM_H_VIBRATE, - [SPECIES_CORVISQUIRE - 1] = ANIM_CIRCLE_INTO_BG, - [SPECIES_CORVIKNIGHT - 1] = ANIM_H_VIBRATE, - [SPECIES_BLIPBUG - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DOTTLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ORBEETLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_NICKIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_THIEVUL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GOSSIFLEUR - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ELDEGOSS - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_WOOLOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DUBWOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CHEWTLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DREDNAW - 1] = ANIM_GROW_VIBRATE, - [SPECIES_YAMPER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BOLTUND - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ROLYCOLY - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_CARKOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_COALOSSAL - 1] = ANIM_GLOW_RED, - [SPECIES_APPLIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_FLAPPLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_APPLETUN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SILICOBRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SANDACONDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CRAMORANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ARROKUDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BARRASKEWDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TOXEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TOXTRICITY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SIZZLIPEDE - 1] = ANIM_H_VIBRATE, - [SPECIES_CENTISKORCH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CLOBBOPUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GRAPPLOCT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SINISTEA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_POLTEAGEIST - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HATENNA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HATTREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_HATTERENE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_IMPIDIMP - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MORGREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GRIMMSNARL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_OBSTAGOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PERRSERKER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CURSOLA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SIRFETCHD - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MR_RIME - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_RUNERIGUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MILCERY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ALCREMIE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_FALINKS - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_PINCURCHIN - 1] = ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SNOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_FROSMOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_STONJOURNER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_EISCUE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_INDEEDEE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_MORPEKO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CUFANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_COPPERAJAH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRACOZOLT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ARCTOZOLT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRACOVISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ARCTOVISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DURALUDON - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DREEPY - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRAKLOAK - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DRAGAPULT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ZACIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ZAMAZENTA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ETERNATUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_KUBFU - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_URSHIFU - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ZARUDE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_REGIELEKI - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_REGIDRAGO - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_GLASTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SPECTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_CALYREX - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_WYRDEER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_KLEAVOR - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_URSALUNA - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_BASCULEGION - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SNEASLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_OVERQWIL - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ENAMORUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GROOKEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_THWACKEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RILLABOOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SCORBUNNY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RABOOT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CINDERACE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SOBBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRIZZILE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_INTELEON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SKWOVET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GREEDENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ROOKIDEE - 1] = ANIM_H_VIBRATE, + [SPECIES_CORVISQUIRE - 1] = ANIM_CIRCLE_INTO_BG, + [SPECIES_CORVIKNIGHT - 1] = ANIM_H_VIBRATE, + [SPECIES_BLIPBUG - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DOTTLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ORBEETLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NICKIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_THIEVUL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOSSIFLEUR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ELDEGOSS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WOOLOO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DUBWOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHEWTLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DREDNAW - 1] = ANIM_GROW_VIBRATE, + [SPECIES_YAMPER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BOLTUND - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ROLYCOLY - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_CARKOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_COALOSSAL - 1] = ANIM_GLOW_RED, + [SPECIES_APPLIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLAPPLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_APPLETUN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SILICOBRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SANDACONDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CRAMORANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARROKUDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BARRASKEWDA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TOXEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TOXTRICITY_AMPED - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SIZZLIPEDE - 1] = ANIM_H_VIBRATE, + [SPECIES_CENTISKORCH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CLOBBOPUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GRAPPLOCT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SINISTEA_PHONY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_POLTEAGEIST_PHONY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HATENNA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HATTREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HATTERENE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IMPIDIMP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MORGREM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GRIMMSNARL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OBSTAGOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PERRSERKER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CURSOLA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SIRFETCHD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MR_RIME - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RUNERIGUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MILCERY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FALINKS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PINCURCHIN - 1] = ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SNOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FROSMOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_STONJOURNER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EISCUE_ICE_FACE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_INDEEDEE_MALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MORPEKO_FULL_BELLY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CUFANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_COPPERAJAH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRACOZOLT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARCTOZOLT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRACOVISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARCTOVISH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DURALUDON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DREEPY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRAKLOAK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DRAGAPULT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ETERNATUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KUBFU - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZARUDE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_REGIELEKI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_REGIDRAGO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GLASTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SPECTRIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CALYREX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WYRDEER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KLEAVOR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_URSALUNA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_URSALUNA_BLOODMOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BASCULEGION_MALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SNEASLER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OVERQWIL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ENAMORUS_INCARNATE - 1] = ANIM_V_SQUISH_AND_BOUNCE, - //Gen 3 Forms - [SPECIES_CASTFORM_SUNNY - 1] = ANIM_GROW_VIBRATE, - [SPECIES_CASTFORM_RAINY - 1] = ANIM_SWING_CONVEX_FAST, - [SPECIES_CASTFORM_SNOWY - 1] = ANIM_V_STRETCH, - [SPECIES_DEOXYS_ATTACK - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DEOXYS_DEFENSE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DEOXYS_SPEED - 1] = ANIM_GROW_VIBRATE, - //Gen 4 Forms - [SPECIES_BURMY_SANDY_CLOAK - 1] = ANIM_V_STRETCH, - [SPECIES_BURMY_TRASH_CLOAK - 1] = ANIM_V_STRETCH, - [SPECIES_WORMADAM_SANDY_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, - [SPECIES_WORMADAM_TRASH_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, - [SPECIES_CHERRIM_SUNSHINE - 1] = ANIM_H_JUMPS_V_STRETCH, - [SPECIES_SHELLOS_EAST_SEA - 1] = ANIM_V_STRETCH, - [SPECIES_GASTRODON_EAST_SEA - 1] = ANIM_CIRCULAR_STRETCH_TWICE, - [SPECIES_ROTOM_HEAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_ROTOM_WASH - 1] = ANIM_V_JUMPS_SMALL, - [SPECIES_ROTOM_FROST - 1] = ANIM_H_STRETCH, - [SPECIES_ROTOM_FAN - 1] = ANIM_H_SLIDE_WOBBLE, - [SPECIES_ROTOM_MOW - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_GIRATINA_ORIGIN - 1] = ANIM_LUNGE_GROW, - [SPECIES_SHAYMIN_SKY - 1] = ANIM_V_STRETCH, - [SPECIES_ARCEUS_FIGHTING - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_FLYING - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_POISON - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_GROUND - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_ROCK - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_BUG - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_GHOST - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_STEEL - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_FIRE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_WATER - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_GRASS - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_ELECTRIC - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_PSYCHIC - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_ICE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_DRAGON - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_DARK - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ARCEUS_FAIRY - 1] = ANIM_GROW_VIBRATE, - //Gen 5 Forms - [SPECIES_BASCULIN_BLUE_STRIPED - 1] = ANIM_TIP_MOVE_FORWARD, - [SPECIES_DARMANITAN_ZEN_MODE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_DEERLING_SUMMER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DEERLING_AUTUMN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_DEERLING_WINTER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SAWSBUCK_SUMMER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SAWSBUCK_AUTUMN - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_SAWSBUCK_WINTER - 1] = ANIM_V_SQUISH_AND_BOUNCE, - [SPECIES_TORNADUS_THERIAN - 1] = ANIM_V_STRETCH, - [SPECIES_THUNDURUS_THERIAN - 1] = ANIM_RISING_WOBBLE, - [SPECIES_LANDORUS_THERIAN - 1] = ANIM_CIRCULAR_VIBRATE, - [SPECIES_KYUREM_WHITE - 1] = ANIM_H_SHAKE, - [SPECIES_KYUREM_BLACK - 1] = ANIM_V_SHAKE, - [SPECIES_KELDEO_RESOLUTE - 1] = ANIM_V_STRETCH, - [SPECIES_MELOETTA_PIROUETTE - 1] = ANIM_H_SLIDE_SLOW, - [SPECIES_GENESECT_DOUSE_DRIVE - 1] = ANIM_H_VIBRATE, - [SPECIES_GENESECT_SHOCK_DRIVE - 1] = ANIM_H_VIBRATE, - [SPECIES_GENESECT_BURN_DRIVE - 1] = ANIM_H_VIBRATE, - [SPECIES_GENESECT_CHILL_DRIVE - 1] = ANIM_H_VIBRATE, - //Gen 6 Forms + // Gen 9 Todo: Assign proper ones. + [SPECIES_SPRIGATITO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLORAGATO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEOWSCARADA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FUECOCO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CROCALOR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SKELEDIRGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_QUAXLY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_QUAXWELL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_QUAQUAVAL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LECHONK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OINKOLOGNE_MALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OINKOLOGNE_FEMALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TAROUNTULA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SPIDOPS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NYMBLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LOKIX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PAWMI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PAWMO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PAWMOT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TANDEMAUS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FIDOUGH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DACHSBUN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SMOLIV - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DOLLIV - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARBOLIVA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NACLI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NACLSTACK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GARGANACL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHARCADET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARMAROUGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CERULEDGE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TADBULB - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BELLIBOLT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WATTREL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KILOWATTREL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MASCHIFF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MABOSSTIFF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SHROODLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GRAFAIAI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRAMBLIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRAMBLEGHAST - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TOEDSCOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TOEDSCRUEL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KLAWF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CAPSAKID - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SCOVILLAIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RELLOR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RABSCA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLITTLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ESPATHRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TINKATINK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TINKATUFF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TINKATON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WIGLETT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WUGTRIO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BOMBIRDIER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FINIZEN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PALAFIN_ZERO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PALAFIN_HERO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VAROOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_REVAVROOM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CYCLIZAR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ORTHWORM - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GLIMMET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GLIMMORA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GREAVARD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HOUNDSTONE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLAMIGO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CETODDLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CETITAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VELUZA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DONDOZO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TATSUGIRI_CURLY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TATSUGIRI_DROOPY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TATSUGIRI_STRETCHY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ANNIHILAPE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CLODSIRE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FARIGIRAF - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KINGAMBIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GREAT_TUSK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SCREAM_TAIL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRUTE_BONNET - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FLUTTER_MANE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLITHER_WING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SANDY_SHOCKS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_TREADS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_BUNDLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_HANDS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_JUGULIS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_MOTH - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_THORNS - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FRIGIBAX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARCTIBAX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BAXCALIBUR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GIMMIGHOUL_CHEST - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GIMMIGHOUL_ROAMING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GHOLDENGO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WO_CHIEN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHIEN_PAO - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TING_LU - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHI_YU - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ROARING_MOON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_VALIANT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KORAIDON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MIRAIDON - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WALKING_WAKE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_IRON_LEAVES - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DIPPLIN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_POLTCHAGEIST_COUNTERFEIT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_POLTCHAGEIST_ARTISAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SINISTCHA_UNREMARKABLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SINISTCHA_MASTERPIECE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OKIDOGI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MUNKIDORI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FEZANDIPITI - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_TEAL_MASK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_WELLSPRING_MASK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_HEARTHFLAME_MASK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_CORNERSTONE_MASK - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_TEAL_MASK_TERA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Gen 3 Forms + [SPECIES_CASTFORM_SUNNY - 1] = ANIM_GROW_VIBRATE, + [SPECIES_CASTFORM_RAINY - 1] = ANIM_SWING_CONVEX_FAST, + [SPECIES_CASTFORM_SNOWY - 1] = ANIM_V_STRETCH, + [SPECIES_DEOXYS_ATTACK - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DEOXYS_DEFENSE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DEOXYS_SPEED - 1] = ANIM_GROW_VIBRATE, + + // Gen 4 Forms + [SPECIES_BURMY_SANDY_CLOAK - 1] = ANIM_V_STRETCH, + [SPECIES_BURMY_TRASH_CLOAK - 1] = ANIM_V_STRETCH, + [SPECIES_WORMADAM_SANDY_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, + [SPECIES_WORMADAM_TRASH_CLOAK - 1] = ANIM_SWING_CONVEX_FAST_SHORT, + [SPECIES_CHERRIM_SUNSHINE - 1] = ANIM_H_JUMPS_V_STRETCH, + [SPECIES_SHELLOS_EAST_SEA - 1] = ANIM_V_STRETCH, + [SPECIES_GASTRODON_EAST_SEA - 1] = ANIM_CIRCULAR_STRETCH_TWICE, + [SPECIES_ROTOM_HEAT - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ROTOM_WASH - 1] = ANIM_V_JUMPS_SMALL, + [SPECIES_ROTOM_FROST - 1] = ANIM_H_STRETCH, + [SPECIES_ROTOM_FAN - 1] = ANIM_H_SLIDE_WOBBLE, + [SPECIES_ROTOM_MOW - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_GIRATINA_ORIGIN - 1] = ANIM_LUNGE_GROW, + [SPECIES_SHAYMIN_SKY - 1] = ANIM_V_STRETCH, + [SPECIES_ARCEUS_FIGHTING - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_FLYING - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_POISON - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_GROUND - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_ROCK - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_BUG - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_GHOST - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_STEEL - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_FIRE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_WATER - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_GRASS - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_ELECTRIC - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_PSYCHIC - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_ICE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_DRAGON - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_DARK - 1] = ANIM_GROW_VIBRATE, + [SPECIES_ARCEUS_FAIRY - 1] = ANIM_GROW_VIBRATE, + + // Gen 5 Forms + [SPECIES_BASCULIN_BLUE_STRIPED - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_BASCULIN_WHITE_STRIPED - 1] = ANIM_TIP_MOVE_FORWARD, + [SPECIES_DARMANITAN_ZEN_MODE - 1] = ANIM_GROW_VIBRATE, + [SPECIES_DEERLING_SUMMER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DEERLING_AUTUMN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DEERLING_WINTER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SAWSBUCK_SUMMER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SAWSBUCK_AUTUMN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SAWSBUCK_WINTER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TORNADUS_THERIAN - 1] = ANIM_V_STRETCH, + [SPECIES_THUNDURUS_THERIAN - 1] = ANIM_RISING_WOBBLE, + [SPECIES_LANDORUS_THERIAN - 1] = ANIM_CIRCULAR_VIBRATE, + [SPECIES_KYUREM_WHITE - 1] = ANIM_H_SHAKE, + [SPECIES_KYUREM_BLACK - 1] = ANIM_V_SHAKE, + [SPECIES_KELDEO_RESOLUTE - 1] = ANIM_V_STRETCH, + [SPECIES_MELOETTA_PIROUETTE - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_GENESECT_DOUSE_DRIVE - 1] = ANIM_H_VIBRATE, + [SPECIES_GENESECT_SHOCK_DRIVE - 1] = ANIM_H_VIBRATE, + [SPECIES_GENESECT_BURN_DRIVE - 1] = ANIM_H_VIBRATE, + [SPECIES_GENESECT_CHILL_DRIVE - 1] = ANIM_H_VIBRATE, + + // Gen 6 Forms [SPECIES_GRENINJA_ASH - 1] = ANIM_FLICKER_INCREASING, + [SPECIES_GRENINJA_BATTLE_BOND - 1] = ANIM_FLICKER_INCREASING, [SPECIES_VIVILLON_POLAR - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_VIVILLON_TUNDRA - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_VIVILLON_CONTINENTAL - 1] = ANIM_ZIGZAG_SLOW, @@ -2969,19 +3398,19 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_VIVILLON_JUNGLE - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_VIVILLON_FANCY - 1] = ANIM_ZIGZAG_SLOW, [SPECIES_VIVILLON_POKE_BALL - 1] = ANIM_ZIGZAG_SLOW, - [SPECIES_FLABEBE_YELLOW_FLOWER - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_FLABEBE_ORANGE_FLOWER - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_FLABEBE_BLUE_FLOWER - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, - [SPECIES_FLABEBE_WHITE_FLOWER - 1] = ANIM_SWING_CONCAVE_FAST_SHORT, + [SPECIES_FLABEBE_YELLOW_FLOWER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_FLABEBE_ORANGE_FLOWER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_FLABEBE_BLUE_FLOWER - 1] = ANIM_H_SLIDE_SLOW, + [SPECIES_FLABEBE_WHITE_FLOWER - 1] = ANIM_H_SLIDE_SLOW, [SPECIES_FLOETTE_YELLOW_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, [SPECIES_FLOETTE_ORANGE_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, [SPECIES_FLOETTE_BLUE_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, [SPECIES_FLOETTE_WHITE_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, [SPECIES_FLOETTE_ETERNAL_FLOWER - 1] = ANIM_V_SLIDE_WOBBLE, - [SPECIES_FLORGES_YELLOW_FLOWER - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FLORGES_ORANGE_FLOWER - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FLORGES_BLUE_FLOWER - 1] = ANIM_GROW_VIBRATE, - [SPECIES_FLORGES_WHITE_FLOWER - 1] = ANIM_GROW_VIBRATE, + [SPECIES_FLORGES_YELLOW_FLOWER - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_FLORGES_ORANGE_FLOWER - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_FLORGES_BLUE_FLOWER - 1] = ANIM_V_SLIDE_SLOW, + [SPECIES_FLORGES_WHITE_FLOWER - 1] = ANIM_V_SLIDE_SLOW, [SPECIES_FURFROU_HEART_TRIM - 1] = ANIM_H_SLIDE, [SPECIES_FURFROU_STAR_TRIM - 1] = ANIM_H_SLIDE, [SPECIES_FURFROU_DIAMOND_TRIM - 1] = ANIM_H_SLIDE, @@ -3000,54 +3429,199 @@ const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] = [SPECIES_GOURGEIST_LARGE - 1] = ANIM_SHRINK_GROW, [SPECIES_GOURGEIST_SUPER - 1] = ANIM_SHRINK_GROW, [SPECIES_XERNEAS_ACTIVE - 1] = ANIM_GROW_VIBRATE, - [SPECIES_ZYGARDE_10 - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZYGARDE_10_AURA_BREAK - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT - 1] = ANIM_TIP_MOVE_FORWARD, [SPECIES_ZYGARDE_COMPLETE - 1] = ANIM_GROW_VIBRATE, [SPECIES_HOOPA_UNBOUND - 1] = ANIM_GROW_IN_STAGES, - //Gen 7 Forms - [SPECIES_ORICORIO_POM_POM - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_ORICORIO_PAU - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_ORICORIO_SENSU - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_ROCKRUFF_OWN_TEMPO - 1] = ANIM_V_STRETCH, - [SPECIES_LYCANROC_MIDNIGHT - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_LYCANROC_DUSK - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_WISHIWASHI_SCHOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_SILVALLY_FIGHTING - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_FLYING - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_POISON - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_GROUND - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_ROCK - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_BUG - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_GHOST - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_STEEL - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_FIRE - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_WATER - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_GRASS - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_ELECTRIC - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_PSYCHIC - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_ICE - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_DRAGON - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_DARK - 1] = ANIM_V_SHAKE, - [SPECIES_SILVALLY_FAIRY - 1] = ANIM_V_SHAKE, - [SPECIES_MINIOR_METEOR_ORANGE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_METEOR_YELLOW - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_METEOR_GREEN - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_METEOR_BLUE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_METEOR_INDIGO - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_METEOR_VIOLET - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_RED - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_ORANGE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_YELLOW - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_GREEN - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_BLUE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_INDIGO - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MINIOR_CORE_VIOLET - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, - [SPECIES_MIMIKYU_BUSTED - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, - [SPECIES_NECROZMA_DUSK_MANE - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_NECROZMA_DAWN_WINGS - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_NECROZMA_ULTRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo - [SPECIES_MAGEARNA_ORIGINAL_COLOR - 1] = ANIM_H_SLIDE_SLOW, + + // Gen 7 Forms + [SPECIES_ORICORIO_POM_POM - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_ORICORIO_PAU - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_ORICORIO_SENSU - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_ROCKRUFF_OWN_TEMPO - 1] = ANIM_V_STRETCH, + [SPECIES_LYCANROC_MIDNIGHT - 1] = ANIM_SHRINK_GROW_VIBRATE_SLOW, + [SPECIES_LYCANROC_DUSK - 1] = ANIM_V_SHAKE, + [SPECIES_WISHIWASHI_SCHOOL - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_SILVALLY_FIGHTING - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_FLYING - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_POISON - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_GROUND - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_ROCK - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_BUG - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_GHOST - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_STEEL - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_FIRE - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_WATER - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_GRASS - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_ELECTRIC - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_PSYCHIC - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_ICE - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_DRAGON - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_DARK - 1] = ANIM_V_SHAKE, + [SPECIES_SILVALLY_FAIRY - 1] = ANIM_V_SHAKE, + [SPECIES_MINIOR_METEOR_ORANGE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_METEOR_YELLOW - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_METEOR_GREEN - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_METEOR_BLUE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_METEOR_INDIGO - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_METEOR_VIOLET - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_RED - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_ORANGE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_YELLOW - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_GREEN - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_BLUE - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_INDIGO - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MINIOR_CORE_VIOLET - 1] = ANIM_TUMBLING_FRONT_FLIP_TWICE, + [SPECIES_MIMIKYU_BUSTED - 1] = ANIM_DEEP_V_SQUISH_AND_BOUNCE, + [SPECIES_NECROZMA_DUSK_MANE - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_NECROZMA_DAWN_WINGS - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_NECROZMA_ULTRA - 1] = ANIM_V_SQUISH_AND_BOUNCE, //Todo + [SPECIES_MAGEARNA_ORIGINAL_COLOR - 1] = ANIM_H_SLIDE_SLOW, + + // Gen 8 Forms + [SPECIES_CRAMORANT_GULPING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CRAMORANT_GORGING - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TOXTRICITY_LOW_KEY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SINISTEA_ANTIQUE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_POLTEAGEIST_ANTIQUE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EISCUE_NOICE_FACE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_INDEEDEE_FEMALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MORPEKO_HANGRY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZACIAN_CROWNED_SWORD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZAMAZENTA_CROWNED_SHIELD - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ETERNATUS_ETERNAMAX - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZARUDE_DADA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CALYREX_ICE_RIDER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CALYREX_SHADOW_RIDER - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BASCULEGION_FEMALE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Alolan Forms + [SPECIES_RATTATA_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RATICATE_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RAICHU_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SANDSHREW_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SANDSLASH_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VULPIX_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_NINETALES_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DIGLETT_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DUGTRIO_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEOWTH_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PERSIAN_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GEODUDE_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GRAVELER_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOLEM_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GRIMER_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MUK_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_EXEGGUTOR_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MAROWAK_ALOLAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Galarian Forms + [SPECIES_MEOWTH_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PONYTA_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RAPIDASH_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLOWPOKE_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLOWBRO_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_FARFETCHD_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_WEEZING_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MR_MIME_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARTICUNO_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZAPDOS_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MOLTRES_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLOWKING_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CORSOLA_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZIGZAGOON_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LINOONE_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DARUMAKA_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DARMANITAN_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_YAMASK_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_STUNFISK_GALARIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ARCANINE_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_VOLTORB_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ELECTRODE_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TYPHLOSION_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_QWILFISH_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SNEASEL_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SAMUROTT_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LILLIGANT_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZORUA_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ZOROARK_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BRAVIARY_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLIGGOO_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GOODRA_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AVALUGG_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_DECIDUEYE_HISUIAN - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Mega/Primal Forms + [SPECIES_VENUSAUR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHARIZARD_MEGA_X - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CHARIZARD_MEGA_Y - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BLASTOISE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BEEDRILL_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIDGEOT_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALAKAZAM_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SLOWBRO_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GENGAR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KANGASKHAN_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PINSIR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GYARADOS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AERODACTYL_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEWTWO_MEGA_X - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEWTWO_MEGA_Y - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AMPHAROS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_STEELIX_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SCIZOR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HERACROSS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_HOUNDOOM_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_TYRANITAR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SCEPTILE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BLAZIKEN_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SWAMPERT_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GARDEVOIR_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SABLEYE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MAWILE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_AGGRON_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MEDICHAM_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_MANECTRIC_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SHARPEDO_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_CAMERUPT_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ALTARIA_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_BANETTE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ABSOL_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GLALIE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_SALAMENCE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_METAGROSS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LATIAS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LATIOS_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LOPUNNY_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GARCHOMP_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_LUCARIO_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_ABOMASNOW_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GALLADE_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_RAYQUAZA_MEGA - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_KYOGRE_PRIMAL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_GROUDON_PRIMAL - 1] = ANIM_V_SQUISH_AND_BOUNCE, + + // Other Forms + [SPECIES_PIKACHU_COSPLAY - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_ROCK_STAR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_BELLE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_POP_STAR - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_PH_D - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_LIBRE - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_ORIGINAL_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_HOENN_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_SINNOH_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_UNOVA_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_KALOS_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_ALOLA_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_PARTNER_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PIKACHU_WORLD_CAP - 1] = ANIM_V_SQUISH_AND_BOUNCE, + [SPECIES_PICHU_SPIKY_EARED - 1] = ANIM_V_SQUISH_AND_BOUNCE, }; static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = @@ -4090,19 +4664,14 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) return checksum; } -#if B_FRIENDSHIP_BOOST == TRUE -#define CALC_FRIENDSHIP_BOOST() n = n + ((n * 10 * friendship) / (MAX_FRIENDSHIP * 100)); -#else -#define CALC_FRIENDSHIP_BOOST() -#endif - #define CALC_STAT(base, iv, ev, statIndex, field) \ { \ u8 baseStat = gSpeciesInfo[species].base; \ s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ u8 nature = GetNature(mon); \ n = ModifyStatByNature(nature, n, statIndex); \ - CALC_FRIENDSHIP_BOOST() \ + if (B_FRIENDSHIP_BOOST == TRUE) \ + n = n + ((n * 10 * friendship) / (MAX_FRIENDSHIP * 100));\ SetMonData(mon, field, &n); \ } @@ -4288,7 +4857,7 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) s32 level = GetLevelFromBoxMonExp(boxMon); s32 i; - for (i = 0; gLevelUpLearnsets[species][i].move != LEVEL_UP_END; i++) + for (i = 0; gLevelUpLearnsets[species][i].move != LEVEL_UP_MOVE_END; i++) { if (gLevelUpLearnsets[species][i].level > level) break; @@ -4308,12 +4877,12 @@ void GiveBoxMonInitialMoveset_Fast(struct BoxPokemon *boxMon) //Credit: Asparagu { u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); s32 level = GetLevelFromBoxMonExp(boxMon); - s32 i, j; + s32 i; u16 levelMoveCount = 0; u16 moves[MAX_MON_MOVES] = {0}; u8 addedMoves = 0; - for (i = 0; gLevelUpLearnsets[species][i].move != LEVEL_UP_END; i++) + for (i = 0; gLevelUpLearnsets[species][i].move != LEVEL_UP_MOVE_END; i++) levelMoveCount++; for (i = levelMoveCount; (i >= 0 && addedMoves < MAX_MON_MOVES); i--) @@ -4350,7 +4919,7 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) while (gLevelUpLearnsets[species][sLearningMoveTableID].level != level) { sLearningMoveTableID++; - if (gLevelUpLearnsets[species][sLearningMoveTableID].move == LEVEL_UP_END) + if (gLevelUpLearnsets[species][sLearningMoveTableID].move == LEVEL_UP_MOVE_END) return MOVE_NONE; } } @@ -4607,44 +5176,20 @@ static void DecryptBoxMon(struct BoxPokemon *boxMon) #define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \ case n: \ { \ - union PokemonSubstruct *substructs0 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs1 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs2 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs3 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs4 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs5 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs6 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs7 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs8 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs9 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs10 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs11 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs12 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs13 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs14 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs15 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs16 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs17 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs18 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs19 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs20 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs21 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs22 = boxMon->secure.substructs; \ - union PokemonSubstruct *substructs23 = boxMon->secure.substructs; \ \ switch (substructType) \ { \ case 0: \ - substruct = &substructs ## n [v1]; \ + substruct = &boxMon->secure.substructs[v1]; \ break; \ case 1: \ - substruct = &substructs ## n [v2]; \ + substruct = &boxMon->secure.substructs[v2]; \ break; \ case 2: \ - substruct = &substructs ## n [v3]; \ + substruct = &boxMon->secure.substructs[v3]; \ break; \ case 3: \ - substruct = &substructs ## n [v4]; \ + substruct = &boxMon->secure.substructs[v4]; \ break; \ } \ break; \ @@ -4748,7 +5293,10 @@ u32 GetMonData3(struct Pokemon *mon, s32 field, u8 *data) return ret; } -u32 GetMonData2(struct Pokemon *mon, s32 field) __attribute__((alias("GetMonData3"))); +u32 GetMonData2(struct Pokemon *mon, s32 field) +{ + return GetMonData3(mon, field, NULL); +} /* GameFreak called GetBoxMonData with either 2 or 3 arguments, for type * safety we have a GetBoxMonData macro (in include/pokemon.h) which @@ -5118,7 +5666,10 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) return retVal; } -u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field) __attribute__((alias("GetBoxMonData3"))); +u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field) +{ + return GetBoxMonData3(boxMon, field, NULL); +} #define SET8(lhs) (lhs) = *data #define SET16(lhs) (lhs) = data[0] + (data[1] << 8) @@ -5781,12 +6332,6 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, } \ } -#if B_X_ITEMS_BUFF >= GEN_7 - #define X_ITEM_STAGES 2 -#else - #define X_ITEM_STAGES 1 -#endif - // EXP candies store an index for this table in their holdEffectParam. const u32 sExpCandyExperienceTable[] = { [EXP_100 - 1] = 100, @@ -5953,7 +6498,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataSigned += temp2; } - else // Decreasing EV (HP or Atk) + else if (evChange < 0) // Decreasing EV (HP or Atk) { if (dataSigned == 0) { @@ -5970,6 +6515,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (dataSigned < 0) dataSigned = 0; } + else // Reset EV (HP or Atk) + { + if (dataSigned == 0) + break; + + dataSigned = 0; + } // Update EVs and stats SetMonData(mon, sGetMonDataEVConstants[temp1], &dataSigned); @@ -6133,7 +6685,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataSigned += temp2; } - else // Decreasing EV + else if (evChange < 0) // Decreasing EV { if (dataSigned == 0) { @@ -6150,6 +6702,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (dataSigned < 0) dataSigned = 0; } + else // Reset EV + { + if (dataSigned == 0) + break; + + dataSigned = 0; + } // Update EVs and stats SetMonData(mon, sGetMonDataEVConstants[temp1 + 2], &dataSigned); @@ -6345,18 +6904,20 @@ static void BufferStatRoseMessage(s32 statIdx) { gBattlerTarget = gBattlerInMenuId; StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[statIdx]]); -#if B_X_ITEMS_BUFF >= GEN_7 - StringCopy(gBattleTextBuff2, gText_StatSharply); - StringAppend(gBattleTextBuff2, gText_StatRose); -#else - StringCopy(gBattleTextBuff2, gText_StatRose); -#endif + if (B_X_ITEMS_BUFF >= GEN_7) + { + StringCopy(gBattleTextBuff2, gText_StatSharply); + StringAppend(gBattleTextBuff2, gText_StatRose); + } + else + { + StringCopy(gBattleTextBuff2, gText_StatRose); + } BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose); } u8 *UseStatIncreaseItem(u16 itemId) { - int i; const u8 *itemEffect; if (itemId == ITEM_ENIGMA_BERRY_E_READER) @@ -6483,28 +7044,23 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_FRIENDSHIP_DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && friendship >= FRIENDSHIP_EVO_THRESHOLD) + if (GetTimeOfDay() != TIME_NIGHT && friendship >= FRIENDSHIP_EVO_THRESHOLD) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_LEVEL_DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && gEvolutionTable[species][i].param <= level) + if (GetTimeOfDay() != TIME_NIGHT && gEvolutionTable[species][i].param <= level) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_FRIENDSHIP_NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && friendship >= FRIENDSHIP_EVO_THRESHOLD) + if (GetTimeOfDay() == TIME_NIGHT && friendship >= FRIENDSHIP_EVO_THRESHOLD) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_LEVEL_NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && gEvolutionTable[species][i].param <= level) + if (GetTimeOfDay() == TIME_NIGHT && gEvolutionTable[species][i].param <= level) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_ITEM_HOLD_NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && heldItem == gEvolutionTable[species][i].param) + if (GetTimeOfDay() == TIME_NIGHT && heldItem == gEvolutionTable[species][i].param) { heldItem = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); @@ -6512,8 +7068,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s } break; case EVO_ITEM_HOLD_DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && heldItem == gEvolutionTable[species][i].param) + if (GetTimeOfDay() != TIME_NIGHT && heldItem == gEvolutionTable[species][i].param) { heldItem = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); @@ -6521,8 +7076,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s } break; case EVO_LEVEL_DUSK: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DUSK_EVO_HOUR_BEGIN && gLocalTime.hours < DUSK_EVO_HOUR_END && gEvolutionTable[species][i].param <= level) + if (GetTimeOfDay() == TIME_DUSK && gEvolutionTable[species][i].param <= level) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_LEVEL: @@ -6564,6 +7118,14 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s if (gEvolutionTable[species][i].param <= level) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; + case EVO_LEVEL_FAMILY_OF_FOUR: + if (gEvolutionTable[species][i].param <= level && (personality % 100) != 0) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + case EVO_LEVEL_FAMILY_OF_THREE: + if (gEvolutionTable[species][i].param <= level && (personality % 100) == 0) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; case EVO_BEAUTY: if (gEvolutionTable[species][i].param <= beauty) targetSpecies = gEvolutionTable[species][i].targetSpecies; @@ -6572,6 +7134,14 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s if (MonKnowsMove(mon, gEvolutionTable[species][i].param)) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; + case EVO_MOVE_TWO_SEGMENT: + if (MonKnowsMove(mon, gEvolutionTable[species][i].param) && (personality % 100) != 0) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; + case EVO_MOVE_THREE_SEGMENT: + if (MonKnowsMove(mon, gEvolutionTable[species][i].param) && (personality % 100) == 0) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; case EVO_FRIENDSHIP_MOVE_TYPE: if (friendship >= FRIENDSHIP_EVO_THRESHOLD) { @@ -6731,13 +7301,11 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_ITEM_NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && gEvolutionTable[species][i].param == evolutionItem) + if (GetTimeOfDay() == TIME_NIGHT && gEvolutionTable[species][i].param == evolutionItem) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_ITEM_DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && gEvolutionTable[species][i].param == evolutionItem) + if (GetTimeOfDay() != TIME_NIGHT && gEvolutionTable[species][i].param == evolutionItem) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; } @@ -7491,7 +8059,7 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) { u16 moveLevel; - if (gLevelUpLearnsets[species][i].move == LEVEL_UP_END) + if (gLevelUpLearnsets[species][i].move == LEVEL_UP_MOVE_END) break; moveLevel = gLevelUpLearnsets[species][i].level; @@ -7520,7 +8088,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) u8 numMoves = 0; int i; - for (i = 0; i < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][i].move != LEVEL_UP_END; i++) + for (i = 0; i < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][i].move != LEVEL_UP_MOVE_END; i++) moves[numMoves++] = gLevelUpLearnsets[species][i].move; return numMoves; @@ -7545,7 +8113,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) { u16 moveLevel; - if (gLevelUpLearnsets[species][i].move == LEVEL_UP_END) + if (gLevelUpLearnsets[species][i].move == LEVEL_UP_MOVE_END) break; moveLevel = gLevelUpLearnsets[species][i].level; @@ -7594,10 +8162,26 @@ bool32 IsSpeciesInHoennDex(u16 species) u16 GetBattleBGM(void) { - if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) - return MUS_VS_KYOGRE_GROUDON; - else if (gBattleTypeFlags & BATTLE_TYPE_REGI) - return MUS_VS_REGI; + if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) + { + switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) + { + case SPECIES_RAYQUAZA: + return MUS_VS_RAYQUAZA; + case SPECIES_KYOGRE: + case SPECIES_GROUDON: + return MUS_VS_KYOGRE_GROUDON; + case SPECIES_REGIROCK: + case SPECIES_REGICE: + case SPECIES_REGISTEEL: + case SPECIES_REGIGIGAS: + case SPECIES_REGIELEKI: + case SPECIES_REGIDRAGO: + return MUS_VS_REGI; + default: + return MUS_RG_VS_LEGEND; + } + } else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) return MUS_VS_TRAINER; else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) @@ -7864,29 +8448,33 @@ static s32 GetWildMonTableIdInAlteringCave(u16 species) return 0; } +static inline bool32 CanFirstMonBoostHeldItemRarity(void) +{ + if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) + return FALSE; + else if ((OW_COMPOUND_EYES < GEN_9) && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES) + return TRUE; + else if ((OW_SUPER_LUCK == GEN_8) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SUPER_LUCK) + return TRUE; + return FALSE; +} + void SetWildMonHeldItem(void) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE))) { u16 rnd; u16 species; - u16 chanceNoItem = 45; - u16 chanceNotRare = 95; u16 count = (WILD_DOUBLE_BATTLE) ? 2 : 1; u16 i; - - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG, 0) - && (GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES - || GetMonAbility(&gPlayerParty[0]) == ABILITY_SUPER_LUCK)) - { - chanceNoItem = 20; - chanceNotRare = 80; - } + bool32 itemHeldBoost = CanFirstMonBoostHeldItemRarity(); + u16 chanceNoItem = itemHeldBoost ? 20 : 45; + u16 chanceNotRare = itemHeldBoost ? 80 : 95; for (i = 0; i < count; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE) - continue; // prevent ovewriting previously set item + continue; // prevent overwriting previously set item rnd = Random() % 100; species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, 0); @@ -8414,7 +9002,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) // Returns SPECIES_NONE if no form change is possible u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 arg) { - u32 i, j; + u32 i; u16 targetSpecies = SPECIES_NONE; u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[species]; @@ -8443,13 +9031,11 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 switch (formChanges[i].param2) { case DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END) + if (GetTimeOfDay() != TIME_NIGHT) targetSpecies = formChanges[i].targetSpecies; break; case NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END) + if (GetTimeOfDay() == TIME_NIGHT) targetSpecies = formChanges[i].targetSpecies; break; default: @@ -8458,6 +9044,13 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 } } break; + case FORM_CHANGE_ITEM_USE_MULTICHOICE: + if (arg == formChanges[i].param1) + { + if (formChanges[i].param2 == gSpecialVar_Result) + targetSpecies = formChanges[i].targetSpecies; + } + break; case FORM_CHANGE_MOVE: if (BoxMonKnowsMove(boxMon, formChanges[i].param1) != formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; @@ -8475,6 +9068,19 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 case FORM_CHANGE_FAINT: targetSpecies = formChanges[i].targetSpecies; break; + case FORM_CHANGE_TIME_OF_DAY: + switch (formChanges[i].param1) + { + case DAY: + if (GetTimeOfDay() != TIME_NIGHT) + targetSpecies = formChanges[i].targetSpecies; + break; + case NIGHT: + if (GetTimeOfDay() == TIME_NIGHT) + targetSpecies = formChanges[i].targetSpecies; + break; + } + break; } } } @@ -8485,7 +9091,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method) { - u32 i, j; + u32 i; const struct FormChange *formChanges = gFormChangeTablePointers[species]; if (formChanges != NULL) @@ -8513,7 +9119,7 @@ u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove) { sLearningMoveTableID = 0; } - while(gLevelUpLearnsets[species][sLearningMoveTableID].move != LEVEL_UP_END) + while(gLevelUpLearnsets[species][sLearningMoveTableID].move != LEVEL_UP_MOVE_END) { while (gLevelUpLearnsets[species][sLearningMoveTableID].level == 0 || gLevelUpLearnsets[species][sLearningMoveTableID].level == level) { @@ -8676,6 +9282,24 @@ u32 GetMonFriendshipScore(struct Pokemon *pokemon) return FRIENDSHIP_NONE; } +u32 GetMonAffectionHearts(struct Pokemon *pokemon) +{ + u32 friendship = GetMonData(pokemon, MON_DATA_FRIENDSHIP, NULL); + + if (friendship == MAX_FRIENDSHIP) + return AFFECTION_FIVE_HEARTS; + if (friendship >= 220) + return AFFECTION_FOUR_HEARTS; + if (friendship >= 180) + return AFFECTION_THREE_HEARTS; + if (friendship >= 130) + return AFFECTION_TWO_HEARTS; + if (friendship >= 80) + return AFFECTION_ONE_HEART; + + return AFFECTION_NO_HEARTS; +} + void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality) { struct PokemonSubstruct0 *old0, *new0; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index aff987f9fe..41632c52f9 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -343,6 +343,9 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_MAGMAR] = BACK_ANIM_SHAKE_GLOW_RED, [SPECIES_PINSIR] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_TAUROS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_MAGIKARP] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_GYARADOS] = BACK_ANIM_V_SHAKE, [SPECIES_LAPRAS] = BACK_ANIM_SHAKE_GLOW_BLUE, @@ -366,6 +369,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_DRAGONITE] = BACK_ANIM_V_SHAKE, [SPECIES_MEWTWO] = BACK_ANIM_GROW_STUTTER, [SPECIES_MEW] = BACK_ANIM_CONCAVE_ARC_SMALL, + + // Gen 2 [SPECIES_CHIKORITA] = BACK_ANIM_CONCAVE_ARC_SMALL, [SPECIES_BAYLEEF] = BACK_ANIM_H_SLIDE, [SPECIES_MEGANIUM] = BACK_ANIM_V_SHAKE, @@ -409,6 +414,7 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_SUNFLORA] = BACK_ANIM_H_SLIDE, [SPECIES_YANMA] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_WOOPER] = BACK_ANIM_V_STRETCH, + [SPECIES_WOOPER_PALDEAN] = BACK_ANIM_V_STRETCH, [SPECIES_QUAGSIRE] = BACK_ANIM_H_SLIDE, [SPECIES_ESPEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_UMBREON] = BACK_ANIM_SHRINK_GROW_VIBRATE, @@ -466,6 +472,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_LUGIA] = BACK_ANIM_SHAKE_GLOW_BLUE, [SPECIES_HO_OH] = BACK_ANIM_SHAKE_GLOW_RED, [SPECIES_CELEBI] = BACK_ANIM_SHAKE_GLOW_GREEN, + + // Gen 3 [SPECIES_TREECKO] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_GROVYLE] = BACK_ANIM_JOLT_RIGHT, [SPECIES_SCEPTILE] = BACK_ANIM_V_SHAKE, @@ -490,103 +498,101 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_SEEDOT] = BACK_ANIM_DIP_RIGHT_SIDE, [SPECIES_NUZLEAF] = BACK_ANIM_V_SHAKE, [SPECIES_SHIFTRY] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_NINCADA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_NINJASK] = BACK_ANIM_H_VIBRATE, - [SPECIES_SHEDINJA] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_TAILLOW] = BACK_ANIM_CONCAVE_ARC_SMALL, [SPECIES_SWELLOW] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SHROOMISH] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_BRELOOM] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SPINDA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, [SPECIES_WINGULL] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_PELIPPER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_RALTS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_KIRLIA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GARDEVOIR] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_SURSKIT] = BACK_ANIM_H_SPRING, [SPECIES_MASQUERAIN] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WAILMER] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_WAILORD] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_SKITTY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_DELCATTY] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_KECLEON] = BACK_ANIM_H_VIBRATE, - [SPECIES_BALTOY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_CLAYDOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_NOSEPASS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_TORKOAL] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SABLEYE] = BACK_ANIM_H_VIBRATE, - [SPECIES_BARBOACH] = BACK_ANIM_V_STRETCH, - [SPECIES_WHISCASH] = BACK_ANIM_V_SHAKE, - [SPECIES_LUVDISC] = BACK_ANIM_H_SPRING_REPEATED, - [SPECIES_CORPHISH] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_CRAWDAUNT] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_FEEBAS] = BACK_ANIM_H_SPRING, - [SPECIES_MILOTIC] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_CARVANHA] = BACK_ANIM_H_SPRING_REPEATED, - [SPECIES_SHARPEDO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_TRAPINCH] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_VIBRAVA] = BACK_ANIM_H_VIBRATE, - [SPECIES_FLYGON] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_MAKUHITA] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_HARIYAMA] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_ELECTRIKE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_MANECTRIC] = BACK_ANIM_V_SHAKE, - [SPECIES_NUMEL] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_CAMERUPT] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SPHEAL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SEALEO] = BACK_ANIM_V_SHAKE, - [SPECIES_WALREIN] = BACK_ANIM_V_SHAKE, - [SPECIES_CACNEA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_CACTURNE] = BACK_ANIM_H_SHAKE, - [SPECIES_SNORUNT] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_GLALIE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LUNATONE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SOLROCK] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_AZURILL] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_SPOINK] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_GRUMPIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_PLUSLE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_MINUN] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_MAWILE] = BACK_ANIM_V_SHAKE, - [SPECIES_MEDITITE] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_MEDICHAM] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SWABLU] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_ALTARIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WYNAUT] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_DUSKULL] = BACK_ANIM_H_VIBRATE, - [SPECIES_DUSCLOPS] = BACK_ANIM_H_VIBRATE, - [SPECIES_ROSELIA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_SHROOMISH] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_BRELOOM] = BACK_ANIM_JOLT_RIGHT, [SPECIES_SLAKOTH] = BACK_ANIM_H_SLIDE, [SPECIES_VIGOROTH] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_SLAKING] = BACK_ANIM_H_SHAKE, - [SPECIES_GULPIN] = BACK_ANIM_V_STRETCH, - [SPECIES_SWALOT] = BACK_ANIM_V_STRETCH, - [SPECIES_TROPIUS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_NINCADA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_NINJASK] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHEDINJA] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_WHISMUR] = BACK_ANIM_DIP_RIGHT_SIDE, [SPECIES_LOUDRED] = BACK_ANIM_V_SHAKE, [SPECIES_EXPLOUD] = BACK_ANIM_GROW_STUTTER, - [SPECIES_CLAMPERL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_HUNTAIL] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_GOREBYSS] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_ABSOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SHUPPET] = BACK_ANIM_H_VIBRATE, - [SPECIES_BANETTE] = BACK_ANIM_H_VIBRATE, - [SPECIES_SEVIPER] = BACK_ANIM_V_STRETCH, - [SPECIES_ZANGOOSE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_RELICANTH] = BACK_ANIM_H_SLIDE, + [SPECIES_MAKUHITA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_HARIYAMA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_AZURILL] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_NOSEPASS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SKITTY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DELCATTY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SABLEYE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAWILE] = BACK_ANIM_V_SHAKE, [SPECIES_ARON] = BACK_ANIM_JOLT_RIGHT, [SPECIES_LAIRON] = BACK_ANIM_V_SHAKE, [SPECIES_AGGRON] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_CASTFORM] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_CASTFORM_SUNNY] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_CASTFORM_RAINY] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_CASTFORM_SNOWY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_MEDITITE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MEDICHAM] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ELECTRIKE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MANECTRIC] = BACK_ANIM_V_SHAKE, + [SPECIES_PLUSLE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_MINUN] = BACK_ANIM_CONCAVE_ARC_SMALL, [SPECIES_VOLBEAT] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_ILLUMISE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ROSELIA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_GULPIN] = BACK_ANIM_V_STRETCH, + [SPECIES_SWALOT] = BACK_ANIM_V_STRETCH, + [SPECIES_CARVANHA] = BACK_ANIM_H_SPRING_REPEATED, + [SPECIES_SHARPEDO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_WAILMER] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_WAILORD] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_NUMEL] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CAMERUPT] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_TORKOAL] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SPOINK] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GRUMPIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SPINDA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_TRAPINCH] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_VIBRAVA] = BACK_ANIM_H_VIBRATE, + [SPECIES_FLYGON] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_CACNEA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_CACTURNE] = BACK_ANIM_H_SHAKE, + [SPECIES_SWABLU] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ALTARIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ZANGOOSE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SEVIPER] = BACK_ANIM_V_STRETCH, + [SPECIES_LUNATONE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SOLROCK] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_BARBOACH] = BACK_ANIM_V_STRETCH, + [SPECIES_WHISCASH] = BACK_ANIM_V_SHAKE, + [SPECIES_CORPHISH] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_CRAWDAUNT] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BALTOY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_CLAYDOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_LILEEP] = BACK_ANIM_H_STRETCH, [SPECIES_CRADILY] = BACK_ANIM_V_STRETCH, [SPECIES_ANORITH] = BACK_ANIM_TRIANGLE_DOWN, [SPECIES_ARMALDO] = BACK_ANIM_V_SHAKE, - [SPECIES_RALTS] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_KIRLIA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_GARDEVOIR] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FEEBAS] = BACK_ANIM_H_SPRING, + [SPECIES_MILOTIC] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_CASTFORM_NORMAL] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_KECLEON] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHUPPET] = BACK_ANIM_H_VIBRATE, + [SPECIES_BANETTE] = BACK_ANIM_H_VIBRATE, + [SPECIES_DUSKULL] = BACK_ANIM_H_VIBRATE, + [SPECIES_DUSCLOPS] = BACK_ANIM_H_VIBRATE, + [SPECIES_TROPIUS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ABSOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_WYNAUT] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SNORUNT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GLALIE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_SPHEAL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SEALEO] = BACK_ANIM_V_SHAKE, + [SPECIES_WALREIN] = BACK_ANIM_V_SHAKE, + [SPECIES_CLAMPERL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_HUNTAIL] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_GOREBYSS] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_RELICANTH] = BACK_ANIM_H_SLIDE, + [SPECIES_LUVDISC] = BACK_ANIM_H_SPRING_REPEATED, [SPECIES_BAGON] = BACK_ANIM_V_SHAKE, [SPECIES_SHELGON] = BACK_ANIM_V_SHAKE, [SPECIES_SALAMENCE] = BACK_ANIM_H_SHAKE, @@ -596,16 +602,15 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_REGIROCK] = BACK_ANIM_V_SHAKE, [SPECIES_REGICE] = BACK_ANIM_V_SHAKE, [SPECIES_REGISTEEL] = BACK_ANIM_V_SHAKE, + [SPECIES_LATIAS] = BACK_ANIM_H_VIBRATE, + [SPECIES_LATIOS] = BACK_ANIM_H_VIBRATE, [SPECIES_KYOGRE] = BACK_ANIM_SHAKE_GLOW_BLUE, [SPECIES_GROUDON] = BACK_ANIM_SHAKE_GLOW_RED, [SPECIES_RAYQUAZA] = BACK_ANIM_GROW_STUTTER, - [SPECIES_LATIAS] = BACK_ANIM_H_VIBRATE, - [SPECIES_LATIOS] = BACK_ANIM_H_VIBRATE, [SPECIES_JIRACHI] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_DEOXYS] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, - - // Gen 4 + [SPECIES_DEOXYS_NORMAL] = BACK_ANIM_SHRINK_GROW_VIBRATE, + + // Gen 4 [SPECIES_TURTWIG] = BACK_ANIM_H_SLIDE, [SPECIES_GROTLE] = BACK_ANIM_H_SLIDE, [SPECIES_TORTERRA] = BACK_ANIM_SHAKE_GLOW_GREEN, @@ -631,8 +636,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_RAMPARDOS] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_SHIELDON] = BACK_ANIM_V_SHAKE, [SPECIES_BASTIODON] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_BURMY] = BACK_ANIM_H_SHAKE, - [SPECIES_WORMADAM] = BACK_ANIM_V_SHAKE, + [SPECIES_BURMY_PLANT_CLOAK] = BACK_ANIM_H_SHAKE, + [SPECIES_WORMADAM_PLANT_CLOAK] = BACK_ANIM_V_SHAKE, [SPECIES_MOTHIM] = BACK_ANIM_H_SHAKE, [SPECIES_COMBEE] = BACK_ANIM_TRIANGLE_DOWN, [SPECIES_VESPIQUEN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, @@ -640,8 +645,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_BUIZEL] = BACK_ANIM_H_SLIDE, [SPECIES_FLOATZEL] = BACK_ANIM_V_STRETCH, [SPECIES_CHERUBI] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_CHERRIM] = BACK_ANIM_V_STRETCH, - [SPECIES_SHELLOS] = BACK_ANIM_H_SPRING, + [SPECIES_CHERRIM_OVERCAST] = BACK_ANIM_V_STRETCH, + [SPECIES_SHELLOS_WEST_SEA] = BACK_ANIM_H_SPRING, [SPECIES_GASTRODON] = BACK_ANIM_SHRINK_GROW_VIBRATE, [SPECIES_AMBIPOM] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_DRIFLOON] = BACK_ANIM_CONCAVE_ARC_SMALL, @@ -706,50 +711,14 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_PALKIA] = BACK_ANIM_H_SHAKE, [SPECIES_HEATRAN] = BACK_ANIM_SHAKE_GLOW_RED, [SPECIES_REGIGIGAS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_GIRATINA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GIRATINA_ALTERED] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_CRESSELIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_PHIONE] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_MANAPHY] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_DARKRAI] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SHAYMIN] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_ARCEUS] = BACK_ANIM_GROW, - - //Gen 4 Forms - [SPECIES_DEOXYS_ATTACK] = BACK_ANIM_GROW_STUTTER, - [SPECIES_DEOXYS_DEFENSE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_DEOXYS_SPEED] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_BURMY_SANDY_CLOAK] = BACK_ANIM_H_SHAKE, - [SPECIES_BURMY_TRASH_CLOAK] = BACK_ANIM_H_SHAKE, - [SPECIES_WORMADAM_SANDY_CLOAK] = BACK_ANIM_V_SHAKE, - [SPECIES_WORMADAM_TRASH_CLOAK] = BACK_ANIM_V_SHAKE, - [SPECIES_CHERRIM_SUNSHINE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_SHELLOS_EAST_SEA] = BACK_ANIM_H_SPRING, - [SPECIES_GASTRODON_EAST_SEA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_ROTOM_HEAT] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_ROTOM_WASH] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_ROTOM_FROST] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_ROTOM_FAN] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_ROTOM_MOW] = BACK_ANIM_H_SLIDE, - [SPECIES_GIRATINA_ORIGIN] = BACK_ANIM_GROW_STUTTER, - [SPECIES_SHAYMIN_SKY] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_ARCEUS_FIGHTING] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_FLYING] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_POISON] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_GROUND] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_ROCK] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_BUG] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_GHOST] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_STEEL] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_FIRE] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_WATER] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_GRASS] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_ELECTRIC] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_PSYCHIC] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_ICE] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_DRAGON] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_DARK] = BACK_ANIM_GROW_STUTTER, - [SPECIES_ARCEUS_FAIRY] = BACK_ANIM_GROW_STUTTER, - + [SPECIES_SHAYMIN_LAND] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_ARCEUS_NORMAL] = BACK_ANIM_GROW, + // Gen 5 [SPECIES_VICTINI] = BACK_ANIM_H_SHAKE, [SPECIES_SNIVY] = BACK_ANIM_H_SLIDE, @@ -807,12 +776,12 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_WHIMSICOTT] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_PETILIL] = BACK_ANIM_V_STRETCH, [SPECIES_LILLIGANT] = BACK_ANIM_SHRINK_GROW, - [SPECIES_BASCULIN] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BASCULIN_RED_STRIPED] = BACK_ANIM_JOLT_RIGHT, [SPECIES_SANDILE] = BACK_ANIM_H_SLIDE, [SPECIES_KROKOROK] = BACK_ANIM_V_STRETCH, [SPECIES_KROOKODILE] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_DARUMAKA] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_DARMANITAN] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_DARMANITAN_STANDARD_MODE] = BACK_ANIM_V_SHAKE_H_SLIDE, [SPECIES_MARACTUS] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_DWEBBLE] = BACK_ANIM_H_SLIDE, [SPECIES_CRUSTLE] = BACK_ANIM_V_SHAKE_LOW, @@ -842,8 +811,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_VANILLITE] = BACK_ANIM_H_SLIDE, [SPECIES_VANILLISH] = BACK_ANIM_H_SLIDE, [SPECIES_VANILLUXE] = BACK_ANIM_H_SHAKE, - [SPECIES_DEERLING] = BACK_ANIM_H_SLIDE, - [SPECIES_SAWSBUCK] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DEERLING_SPRING] = BACK_ANIM_H_SLIDE, + [SPECIES_SAWSBUCK_SPRING] = BACK_ANIM_DIP_RIGHT_SIDE, [SPECIES_EMOLGA] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_KARRABLAST] = BACK_ANIM_CONCAVE_ARC_LARGE, [SPECIES_ESCAVALIER] = BACK_ANIM_JOLT_RIGHT, @@ -898,18 +867,384 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_COBALION] = BACK_ANIM_V_STRETCH, [SPECIES_TERRAKION] = BACK_ANIM_V_SHAKE_LOW, [SPECIES_VIRIZION] = BACK_ANIM_H_SHAKE, - [SPECIES_TORNADUS] = BACK_ANIM_V_SHAKE, - [SPECIES_THUNDURUS] = BACK_ANIM_V_SHAKE, + [SPECIES_TORNADUS_INCARNATE] = BACK_ANIM_V_SHAKE, + [SPECIES_THUNDURUS_INCARNATE] = BACK_ANIM_V_SHAKE, [SPECIES_RESHIRAM] = BACK_ANIM_SHAKE_GLOW_RED, [SPECIES_ZEKROM] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_LANDORUS] = BACK_ANIM_V_SHAKE, + [SPECIES_LANDORUS_INCARNATE] = BACK_ANIM_V_SHAKE, [SPECIES_KYUREM] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_KELDEO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_MELOETTA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_KELDEO_ORDINARY] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MELOETTA_ARIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, [SPECIES_GENESECT] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - //Gen 5 Forms + // Gen 6 + [SPECIES_CHESPIN] = BACK_ANIM_H_SLIDE, + [SPECIES_QUILLADIN] = BACK_ANIM_GROW, + [SPECIES_CHESNAUGHT] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_FENNEKIN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_BRAIXEN] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_DELPHOX] = BACK_ANIM_GROW_STUTTER, + [SPECIES_FROAKIE] = BACK_ANIM_SHRINK_GROW, + [SPECIES_FROGADIER] = BACK_ANIM_GROW_STUTTER, + [SPECIES_GRENINJA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BUNNELBY] = BACK_ANIM_V_STRETCH, + [SPECIES_DIGGERSBY] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_FLETCHLING] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_FLETCHINDER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_TALONFLAME] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SCATTERBUG] = BACK_ANIM_H_SLIDE, + [SPECIES_SPEWPA] = BACK_ANIM_H_VIBRATE, + [SPECIES_VIVILLON_ICY_SNOW] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_LITLEO] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_PYROAR] = BACK_ANIM_H_STRETCH, + [SPECIES_FLABEBE_RED_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLOETTE_RED_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLORGES_RED_FLOWER] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SKIDDO] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_GOGOAT] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_PANCHAM] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_PANGORO] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_FURFROU_NATURAL] = BACK_ANIM_V_STRETCH, + [SPECIES_ESPURR] = BACK_ANIM_H_SLIDE, + [SPECIES_MEOWSTIC_MALE] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HONEDGE] = BACK_ANIM_V_SHAKE, + [SPECIES_DOUBLADE] = BACK_ANIM_H_SHAKE, + [SPECIES_AEGISLASH_SHIELD] = BACK_ANIM_H_VIBRATE, + [SPECIES_SPRITZEE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_AROMATISSE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SWIRLIX] = BACK_ANIM_H_SPRING, + [SPECIES_SLURPUFF] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_INKAY] = BACK_ANIM_SHRINK_GROW, + [SPECIES_MALAMAR] = BACK_ANIM_V_STRETCH, + [SPECIES_BINACLE] = BACK_ANIM_H_SLIDE, + [SPECIES_BARBARACLE] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_SKRELP] = BACK_ANIM_V_STRETCH, + [SPECIES_DRAGALGE] = BACK_ANIM_H_STRETCH, + [SPECIES_CLAUNCHER] = BACK_ANIM_H_SLIDE, + [SPECIES_CLAWITZER] = BACK_ANIM_V_SHAKE, + [SPECIES_HELIOPTILE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_HELIOLISK] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_TYRUNT] = BACK_ANIM_H_SHAKE, + [SPECIES_TYRANTRUM] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_AMAURA] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_AURORUS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SYLVEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_HAWLUCHA] = BACK_ANIM_GROW_STUTTER, + [SPECIES_DEDENNE] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_CARBINK] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOOMY] = BACK_ANIM_H_SPRING, + [SPECIES_SLIGGOO] = BACK_ANIM_SHRINK_GROW, + [SPECIES_GOODRA] = BACK_ANIM_SHRINK_GROW, + [SPECIES_KLEFKI] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PHANTUMP] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_TREVENANT] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PUMPKABOO_AVERAGE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GOURGEIST_AVERAGE] = BACK_ANIM_V_STRETCH, + [SPECIES_BERGMITE] = BACK_ANIM_H_SHAKE, + [SPECIES_AVALUGG] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_NOIBAT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_NOIVERN] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_XERNEAS_NEUTRAL] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_YVELTAL] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ZYGARDE_50_AURA_BREAK] = BACK_ANIM_V_STRETCH, + [SPECIES_DIANCIE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_HOOPA_CONFINED] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_VOLCANION] = BACK_ANIM_SHAKE_GLOW_RED, + + // Gen 7 todo: assign + [SPECIES_ROWLET] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DARTRIX] = BACK_ANIM_V_STRETCH, + [SPECIES_DECIDUEYE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_LITTEN] = BACK_ANIM_H_VIBRATE, + [SPECIES_TORRACAT] = BACK_ANIM_H_VIBRATE, + [SPECIES_INCINEROAR] = BACK_ANIM_H_VIBRATE, + [SPECIES_POPPLIO] = BACK_ANIM_H_VIBRATE, + [SPECIES_BRIONNE] = BACK_ANIM_H_VIBRATE, + [SPECIES_PRIMARINA] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKIPEK] = BACK_ANIM_SHRINK_GROW, + [SPECIES_TRUMBEAK] = BACK_ANIM_H_STRETCH, + [SPECIES_TOUCANNON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_YUNGOOS] = BACK_ANIM_H_VIBRATE, + [SPECIES_GUMSHOOS] = BACK_ANIM_H_VIBRATE, + [SPECIES_GRUBBIN] = BACK_ANIM_H_VIBRATE, + [SPECIES_CHARJABUG] = BACK_ANIM_H_VIBRATE, + [SPECIES_VIKAVOLT] = BACK_ANIM_H_VIBRATE, + [SPECIES_CRABRAWLER] = BACK_ANIM_H_VIBRATE, + [SPECIES_CRABOMINABLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_ORICORIO_BAILE] = BACK_ANIM_H_VIBRATE, + [SPECIES_CUTIEFLY] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_RIBOMBEE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ROCKRUFF] = BACK_ANIM_V_STRETCH, + [SPECIES_LYCANROC_MIDDAY] = BACK_ANIM_V_SHAKE, + [SPECIES_WISHIWASHI_SOLO] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAREANIE] = BACK_ANIM_H_VIBRATE, + [SPECIES_TOXAPEX] = BACK_ANIM_H_VIBRATE, + [SPECIES_MUDBRAY] = BACK_ANIM_H_VIBRATE, + [SPECIES_MUDSDALE] = BACK_ANIM_H_VIBRATE, + [SPECIES_DEWPIDER] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARAQUANID] = BACK_ANIM_H_VIBRATE, + [SPECIES_FOMANTIS] = BACK_ANIM_H_VIBRATE, + [SPECIES_LURANTIS] = BACK_ANIM_H_VIBRATE, + [SPECIES_MORELULL] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHIINOTIC] = BACK_ANIM_H_VIBRATE, + [SPECIES_SALANDIT] = BACK_ANIM_H_VIBRATE, + [SPECIES_SALAZZLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_STUFFUL] = BACK_ANIM_H_VIBRATE, + [SPECIES_BEWEAR] = BACK_ANIM_H_VIBRATE, + [SPECIES_BOUNSWEET] = BACK_ANIM_H_VIBRATE, + [SPECIES_STEENEE] = BACK_ANIM_H_VIBRATE, + [SPECIES_TSAREENA] = BACK_ANIM_H_VIBRATE, + [SPECIES_COMFEY] = BACK_ANIM_H_VIBRATE, + [SPECIES_ORANGURU] = BACK_ANIM_H_SLIDE, + [SPECIES_PASSIMIAN] = BACK_ANIM_H_SHAKE, + [SPECIES_WIMPOD] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOLISOPOD] = BACK_ANIM_H_VIBRATE, + [SPECIES_SANDYGAST] = BACK_ANIM_H_VIBRATE, + [SPECIES_PALOSSAND] = BACK_ANIM_H_VIBRATE, + [SPECIES_PYUKUMUKU] = BACK_ANIM_H_VIBRATE, + [SPECIES_TYPE_NULL] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_NORMAL] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_RED] = BACK_ANIM_H_VIBRATE, + [SPECIES_KOMALA] = BACK_ANIM_H_VIBRATE, + [SPECIES_TURTONATOR] = BACK_ANIM_H_VIBRATE, + [SPECIES_TOGEDEMARU] = BACK_ANIM_GROW_STUTTER, + [SPECIES_MIMIKYU_DISGUISED] = BACK_ANIM_H_VIBRATE, + [SPECIES_BRUXISH] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRAMPA] = BACK_ANIM_H_SLIDE, + [SPECIES_DHELMISE] = BACK_ANIM_H_VIBRATE, + [SPECIES_JANGMO_O] = BACK_ANIM_GROW_STUTTER, + [SPECIES_HAKAMO_O] = BACK_ANIM_H_STRETCH, + [SPECIES_KOMMO_O] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_TAPU_KOKO] = BACK_ANIM_H_VIBRATE, + [SPECIES_TAPU_LELE] = BACK_ANIM_H_VIBRATE, + [SPECIES_TAPU_BULU] = BACK_ANIM_H_VIBRATE, + [SPECIES_TAPU_FINI] = BACK_ANIM_H_VIBRATE, + [SPECIES_COSMOG] = BACK_ANIM_H_VIBRATE, + [SPECIES_COSMOEM] = BACK_ANIM_H_VIBRATE, + [SPECIES_SOLGALEO] = BACK_ANIM_H_VIBRATE, + [SPECIES_LUNALA] = BACK_ANIM_H_VIBRATE, + [SPECIES_NIHILEGO] = BACK_ANIM_H_VIBRATE, + [SPECIES_BUZZWOLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_PHEROMOSA] = BACK_ANIM_H_VIBRATE, + [SPECIES_XURKITREE] = BACK_ANIM_H_VIBRATE, + [SPECIES_CELESTEELA] = BACK_ANIM_H_VIBRATE, + [SPECIES_KARTANA] = BACK_ANIM_H_VIBRATE, + [SPECIES_GUZZLORD] = BACK_ANIM_H_VIBRATE, + [SPECIES_NECROZMA] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAGEARNA] = BACK_ANIM_H_VIBRATE, + [SPECIES_MARSHADOW] = BACK_ANIM_H_VIBRATE, + [SPECIES_POIPOLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_NAGANADEL] = BACK_ANIM_H_VIBRATE, + [SPECIES_STAKATAKA] = BACK_ANIM_H_VIBRATE, + [SPECIES_BLACEPHALON] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZERAORA] = BACK_ANIM_H_VIBRATE, + [SPECIES_MELTAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MELMETAL] = BACK_ANIM_H_VIBRATE, + + // Gen 8 todo: assign + [SPECIES_GROOKEY] = BACK_ANIM_H_VIBRATE, + [SPECIES_THWACKEY] = BACK_ANIM_H_VIBRATE, + [SPECIES_RILLABOOM] = BACK_ANIM_H_VIBRATE, + [SPECIES_SCORBUNNY] = BACK_ANIM_H_VIBRATE, + [SPECIES_RABOOT] = BACK_ANIM_H_VIBRATE, + [SPECIES_CINDERACE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SOBBLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRIZZILE] = BACK_ANIM_H_VIBRATE, + [SPECIES_INTELEON] = BACK_ANIM_H_VIBRATE, + [SPECIES_SKWOVET] = BACK_ANIM_H_VIBRATE, + [SPECIES_GREEDENT] = BACK_ANIM_H_VIBRATE, + [SPECIES_ROOKIDEE] = BACK_ANIM_H_VIBRATE, + [SPECIES_CORVISQUIRE] = BACK_ANIM_H_VIBRATE, + [SPECIES_CORVIKNIGHT] = BACK_ANIM_H_VIBRATE, + [SPECIES_BLIPBUG] = BACK_ANIM_H_VIBRATE, + [SPECIES_DOTTLER] = BACK_ANIM_H_VIBRATE, + [SPECIES_ORBEETLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_NICKIT] = BACK_ANIM_H_VIBRATE, + [SPECIES_THIEVUL] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOSSIFLEUR] = BACK_ANIM_H_VIBRATE, + [SPECIES_ELDEGOSS] = BACK_ANIM_H_VIBRATE, + [SPECIES_WOOLOO] = BACK_ANIM_H_VIBRATE, + [SPECIES_DUBWOOL] = BACK_ANIM_H_VIBRATE, + [SPECIES_CHEWTLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_DREDNAW] = BACK_ANIM_H_VIBRATE, + [SPECIES_YAMPER] = BACK_ANIM_H_VIBRATE, + [SPECIES_BOLTUND] = BACK_ANIM_H_VIBRATE, + [SPECIES_ROLYCOLY] = BACK_ANIM_H_VIBRATE, + [SPECIES_CARKOL] = BACK_ANIM_H_VIBRATE, + [SPECIES_COALOSSAL] = BACK_ANIM_H_VIBRATE, + [SPECIES_APPLIN] = BACK_ANIM_H_VIBRATE, + [SPECIES_FLAPPLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_APPLETUN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILICOBRA] = BACK_ANIM_H_VIBRATE, + [SPECIES_SANDACONDA] = BACK_ANIM_H_VIBRATE, + [SPECIES_CRAMORANT] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARROKUDA] = BACK_ANIM_H_VIBRATE, + [SPECIES_BARRASKEWDA] = BACK_ANIM_H_VIBRATE, + [SPECIES_TOXEL] = BACK_ANIM_H_VIBRATE, + [SPECIES_TOXTRICITY_AMPED] = BACK_ANIM_H_VIBRATE, + [SPECIES_SIZZLIPEDE] = BACK_ANIM_H_VIBRATE, + [SPECIES_CENTISKORCH] = BACK_ANIM_H_VIBRATE, + [SPECIES_CLOBBOPUS] = BACK_ANIM_H_VIBRATE, + [SPECIES_GRAPPLOCT] = BACK_ANIM_H_VIBRATE, + [SPECIES_SINISTEA_PHONY] = BACK_ANIM_H_VIBRATE, + [SPECIES_POLTEAGEIST_PHONY] = BACK_ANIM_H_VIBRATE, + [SPECIES_HATENNA] = BACK_ANIM_H_VIBRATE, + [SPECIES_HATTREM] = BACK_ANIM_H_VIBRATE, + [SPECIES_HATTERENE] = BACK_ANIM_H_VIBRATE, + [SPECIES_IMPIDIMP] = BACK_ANIM_H_VIBRATE, + [SPECIES_MORGREM] = BACK_ANIM_H_VIBRATE, + [SPECIES_GRIMMSNARL] = BACK_ANIM_H_VIBRATE, + [SPECIES_OBSTAGOON] = BACK_ANIM_H_VIBRATE, + [SPECIES_PERRSERKER] = BACK_ANIM_H_VIBRATE, + [SPECIES_CURSOLA] = BACK_ANIM_H_VIBRATE, + [SPECIES_SIRFETCHD] = BACK_ANIM_H_VIBRATE, + [SPECIES_MR_RIME] = BACK_ANIM_H_VIBRATE, + [SPECIES_RUNERIGUS] = BACK_ANIM_H_VIBRATE, + [SPECIES_MILCERY] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = BACK_ANIM_H_VIBRATE, + [SPECIES_FALINKS] = BACK_ANIM_H_VIBRATE, + [SPECIES_PINCURCHIN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SNOM] = BACK_ANIM_H_VIBRATE, + [SPECIES_FROSMOTH] = BACK_ANIM_H_VIBRATE, + [SPECIES_STONJOURNER] = BACK_ANIM_H_VIBRATE, + [SPECIES_EISCUE_ICE_FACE] = BACK_ANIM_H_VIBRATE, + [SPECIES_INDEEDEE_MALE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MORPEKO_FULL_BELLY] = BACK_ANIM_H_VIBRATE, + [SPECIES_CUFANT] = BACK_ANIM_H_VIBRATE, + [SPECIES_COPPERAJAH] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRACOZOLT] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARCTOZOLT] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRACOVISH] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARCTOVISH] = BACK_ANIM_H_VIBRATE, + [SPECIES_DURALUDON] = BACK_ANIM_H_VIBRATE, + [SPECIES_DREEPY] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRAKLOAK] = BACK_ANIM_H_VIBRATE, + [SPECIES_DRAGAPULT] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = BACK_ANIM_H_VIBRATE, + [SPECIES_ETERNATUS] = BACK_ANIM_H_VIBRATE, + [SPECIES_KUBFU] = BACK_ANIM_H_VIBRATE, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZARUDE] = BACK_ANIM_H_VIBRATE, + [SPECIES_REGIELEKI] = BACK_ANIM_H_VIBRATE, + [SPECIES_REGIDRAGO] = BACK_ANIM_H_VIBRATE, + [SPECIES_GLASTRIER] = BACK_ANIM_H_VIBRATE, + [SPECIES_SPECTRIER] = BACK_ANIM_H_VIBRATE, + [SPECIES_CALYREX] = BACK_ANIM_H_VIBRATE, + [SPECIES_WYRDEER] = BACK_ANIM_H_VIBRATE, + [SPECIES_KLEAVOR] = BACK_ANIM_H_VIBRATE, + [SPECIES_URSALUNA] = BACK_ANIM_H_VIBRATE, + [SPECIES_BASCULEGION_MALE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SNEASLER] = BACK_ANIM_H_VIBRATE, + [SPECIES_OVERQWIL] = BACK_ANIM_H_VIBRATE, + [SPECIES_ENAMORUS_INCARNATE] = BACK_ANIM_H_VIBRATE, + + // Gen 3 Forms + [SPECIES_CASTFORM_SUNNY] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_CASTFORM_RAINY] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_CASTFORM_SNOWY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_DEOXYS_ATTACK] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_DEOXYS_DEFENSE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_DEOXYS_SPEED] = BACK_ANIM_TRIANGLE_DOWN, + + // Gen 4 Forms + [SPECIES_BURMY_SANDY_CLOAK] = BACK_ANIM_H_SHAKE, + [SPECIES_BURMY_TRASH_CLOAK] = BACK_ANIM_H_SHAKE, + [SPECIES_WORMADAM_SANDY_CLOAK] = BACK_ANIM_V_SHAKE, + [SPECIES_WORMADAM_TRASH_CLOAK] = BACK_ANIM_V_SHAKE, + [SPECIES_CHERRIM_SUNSHINE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SHELLOS_EAST_SEA] = BACK_ANIM_H_SPRING, + [SPECIES_GASTRODON_EAST_SEA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ROTOM_HEAT] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ROTOM_WASH] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_ROTOM_FROST] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_ROTOM_FAN] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ROTOM_MOW] = BACK_ANIM_H_SLIDE, + [SPECIES_GIRATINA_ORIGIN] = BACK_ANIM_GROW_STUTTER, + [SPECIES_SHAYMIN_SKY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_ARCEUS_FIGHTING] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FLYING] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_POISON] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GROUND] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ROCK] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_BUG] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GHOST] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_STEEL] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FIRE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_WATER] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GRASS] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ELECTRIC] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_PSYCHIC] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ICE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_DRAGON] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_DARK] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FAIRY] = BACK_ANIM_GROW_STUTTER, + + //Gen 5 Forms [SPECIES_BASCULIN_BLUE_STRIPED] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BASCULIN_WHITE_STRIPED] = BACK_ANIM_JOLT_RIGHT, [SPECIES_DARMANITAN_ZEN_MODE] = BACK_ANIM_H_SHAKE, [SPECIES_DEERLING_SUMMER] = BACK_ANIM_H_SLIDE, [SPECIES_DEERLING_AUTUMN] = BACK_ANIM_H_SLIDE, @@ -928,82 +1263,8 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_GENESECT_SHOCK_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, [SPECIES_GENESECT_BURN_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, [SPECIES_GENESECT_CHILL_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - - //Gen 6 - [SPECIES_CHESPIN] = BACK_ANIM_H_SLIDE, - [SPECIES_QUILLADIN] = BACK_ANIM_GROW, - [SPECIES_CHESNAUGHT] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_FENNEKIN] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_BRAIXEN] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_DELPHOX] = BACK_ANIM_GROW_STUTTER, - [SPECIES_FROAKIE] = BACK_ANIM_SHRINK_GROW, - [SPECIES_FROGADIER] = BACK_ANIM_GROW_STUTTER, - [SPECIES_GRENINJA] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_BUNNELBY] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_DIGGERSBY] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_FLETCHLING] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_FLETCHINDER] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_TALONFLAME] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SCATTERBUG] = BACK_ANIM_H_SLIDE, - [SPECIES_SPEWPA] = BACK_ANIM_H_VIBRATE, - [SPECIES_VIVILLON] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_LITLEO] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_PYROAR] = BACK_ANIM_H_STRETCH, - [SPECIES_FLABEBE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_FLOETTE] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_FLORGES] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SKIDDO] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_GOGOAT] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_PANCHAM] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_PANGORO] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_FURFROU] = BACK_ANIM_V_STRETCH, - [SPECIES_ESPURR] = BACK_ANIM_H_SLIDE, - [SPECIES_MEOWSTIC] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_HONEDGE] = BACK_ANIM_V_SHAKE, - [SPECIES_DOUBLADE] = BACK_ANIM_H_SHAKE, - [SPECIES_AEGISLASH] = BACK_ANIM_H_VIBRATE, - [SPECIES_SPRITZEE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_AROMATISSE] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_SWIRLIX] = BACK_ANIM_H_SPRING, - [SPECIES_SLURPUFF] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_INKAY] = BACK_ANIM_SHRINK_GROW, - [SPECIES_MALAMAR] = BACK_ANIM_V_STRETCH, - [SPECIES_BINACLE] = BACK_ANIM_H_SLIDE, - [SPECIES_BARBARACLE] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_SKRELP] = BACK_ANIM_V_STRETCH, - [SPECIES_DRAGALGE] = BACK_ANIM_H_STRETCH, - [SPECIES_CLAUNCHER] = BACK_ANIM_H_SLIDE, - [SPECIES_CLAWITZER] = BACK_ANIM_V_SHAKE, - [SPECIES_HELIOPTILE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_HELIOLISK] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_TYRUNT] = BACK_ANIM_H_SHAKE, - [SPECIES_TYRANTRUM] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_AMAURA] = BACK_ANIM_H_SLIDE, - [SPECIES_AURORUS] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SYLVEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_HAWLUCHA] = BACK_ANIM_GROW_STUTTER, - [SPECIES_DEDENNE] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_CARBINK] = BACK_ANIM_H_VIBRATE, - [SPECIES_GOOMY] = BACK_ANIM_H_SPRING, - [SPECIES_SLIGGOO] = BACK_ANIM_SHRINK_GROW, - [SPECIES_GOODRA] = BACK_ANIM_SHRINK_GROW, - [SPECIES_KLEFKI] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_PHANTUMP] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_TREVENANT] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_PUMPKABOO] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_GOURGEIST] = BACK_ANIM_V_STRETCH, - [SPECIES_BERGMITE] = BACK_ANIM_H_SHAKE, - [SPECIES_AVALUGG] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_NOIBAT] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_NOIVERN] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_XERNEAS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_YVELTAL] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_ZYGARDE] = BACK_ANIM_V_STRETCH, - [SPECIES_DIANCIE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_HOOPA] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_VOLCANION] = BACK_ANIM_SHAKE_GLOW_RED, - - //Gen 6 Forms + + //Gen 6 Forms [SPECIES_GRENINJA_ASH] = BACK_ANIM_SHAKE_GLOW_BLUE, [SPECIES_GRENINJA_BATTLE_BOND] = BACK_ANIM_V_STRETCH, [SPECIES_VIVILLON_POLAR] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, @@ -1056,13 +1317,134 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_GOURGEIST_LARGE] = BACK_ANIM_V_STRETCH, [SPECIES_GOURGEIST_SUPER] = BACK_ANIM_V_STRETCH, [SPECIES_XERNEAS_ACTIVE] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_ZYGARDE_10] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_ZYGARDE_10_AURA_BREAK] = BACK_ANIM_JOLT_RIGHT, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = BACK_ANIM_SHAKE_GLOW_GREEN, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = BACK_ANIM_SHAKE_GLOW_GREEN, [SPECIES_ZYGARDE_COMPLETE] = BACK_ANIM_SHAKE_GLOW_GREEN, [SPECIES_HOOPA_UNBOUND] = BACK_ANIM_V_SHAKE_LOW, - - //Gen 6 Megas (Thanks Furret/CyanSMP64!) + + // Gen 7 Forms todo: assign + [SPECIES_ORICORIO_POM_POM] = BACK_ANIM_H_VIBRATE, + [SPECIES_ORICORIO_PAU] = BACK_ANIM_H_VIBRATE, + [SPECIES_ORICORIO_SENSU] = BACK_ANIM_H_VIBRATE, + [SPECIES_ROCKRUFF_OWN_TEMPO] = BACK_ANIM_H_VIBRATE, + [SPECIES_LYCANROC_MIDNIGHT] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_LYCANROC_DUSK] = BACK_ANIM_V_SHAKE, + [SPECIES_WISHIWASHI_SCHOOL] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_FIGHTING] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_FLYING] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_POISON] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_GROUND] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_ROCK] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_BUG] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_GHOST] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_STEEL] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_FIRE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_WATER] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_GRASS] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_ELECTRIC] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_PSYCHIC] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_ICE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_DRAGON] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_DARK] = BACK_ANIM_H_VIBRATE, + [SPECIES_SILVALLY_FAIRY] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_ORANGE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_YELLOW] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_GREEN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_BLUE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_INDIGO] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_METEOR_VIOLET] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_RED] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_ORANGE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_YELLOW] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_GREEN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_BLUE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_INDIGO] = BACK_ANIM_H_VIBRATE, + [SPECIES_MINIOR_CORE_VIOLET] = BACK_ANIM_H_VIBRATE, + [SPECIES_MIMIKYU_BUSTED] = BACK_ANIM_H_VIBRATE, + [SPECIES_NECROZMA_DUSK_MANE] = BACK_ANIM_H_VIBRATE, + [SPECIES_NECROZMA_DAWN_WINGS] = BACK_ANIM_H_VIBRATE, + [SPECIES_NECROZMA_ULTRA] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = BACK_ANIM_H_VIBRATE, + + // Gen 8 Forms todo: assign + [SPECIES_CRAMORANT_GULPING] = BACK_ANIM_H_VIBRATE, + [SPECIES_CRAMORANT_GORGING] = BACK_ANIM_H_VIBRATE, + [SPECIES_TOXTRICITY_LOW_KEY] = BACK_ANIM_H_VIBRATE, + [SPECIES_SINISTEA_ANTIQUE] = BACK_ANIM_H_VIBRATE, + [SPECIES_POLTEAGEIST_ANTIQUE] = BACK_ANIM_H_VIBRATE, + [SPECIES_EISCUE_NOICE_FACE] = BACK_ANIM_H_VIBRATE, + [SPECIES_INDEEDEE_FEMALE] = BACK_ANIM_H_VIBRATE, + [SPECIES_MORPEKO_HANGRY] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZACIAN_CROWNED_SWORD] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = BACK_ANIM_H_VIBRATE, + [SPECIES_ETERNATUS_ETERNAMAX] = BACK_ANIM_H_VIBRATE, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZARUDE_DADA] = BACK_ANIM_H_VIBRATE, + [SPECIES_CALYREX_ICE_RIDER] = BACK_ANIM_H_VIBRATE, + [SPECIES_CALYREX_SHADOW_RIDER] = BACK_ANIM_H_VIBRATE, + [SPECIES_BASCULEGION_FEMALE] = BACK_ANIM_H_VIBRATE, + + // Alolan Forms + [SPECIES_RATTATA_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_RATICATE_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_RAICHU_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SANDSHREW_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SANDSLASH_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_VULPIX_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_NINETALES_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_DIGLETT_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_DUGTRIO_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MEOWTH_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_PERSIAN_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_GEODUDE_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_GRAVELER_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOLEM_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_GRIMER_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MUK_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_EXEGGUTOR_ALOLAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAROWAK_ALOLAN] = BACK_ANIM_H_VIBRATE, + + // Galarian Forms + [SPECIES_MEOWTH_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_PONYTA_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_RAPIDASH_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SLOWPOKE_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SLOWBRO_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_FARFETCHD_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_WEEZING_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MR_MIME_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARTICUNO_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZAPDOS_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_MOLTRES_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SLOWKING_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_CORSOLA_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZIGZAGOON_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_LINOONE_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_DARUMAKA_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_DARMANITAN_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_YAMASK_GALARIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_STUNFISK_GALARIAN] = BACK_ANIM_H_VIBRATE, + + // Hisuian Forms + [SPECIES_GROWLITHE_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ARCANINE_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_VOLTORB_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ELECTRODE_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_TYPHLOSION_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_QWILFISH_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SNEASEL_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SAMUROTT_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_LILLIGANT_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZORUA_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_ZOROARK_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_BRAVIARY_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_SLIGGOO_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOODRA_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_AVALUGG_HISUIAN] = BACK_ANIM_H_VIBRATE, + [SPECIES_DECIDUEYE_HISUIAN] = BACK_ANIM_H_VIBRATE, + + // Mega/Primal Forms (Thanks Furret/CyanSMP64!) [SPECIES_VENUSAUR_MEGA] = BACK_ANIM_SHAKE_GLOW_GREEN, [SPECIES_CHARIZARD_MEGA_X] = BACK_ANIM_SHAKE_GLOW_BLUE, [SPECIES_CHARIZARD_MEGA_Y] = BACK_ANIM_SHAKE_GLOW_RED, @@ -1111,7 +1493,23 @@ static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = [SPECIES_RAYQUAZA_MEGA] = BACK_ANIM_SHAKE_GLOW_GREEN, [SPECIES_KYOGRE_PRIMAL] = BACK_ANIM_SHAKE_GLOW_BLUE, [SPECIES_GROUDON_PRIMAL] = BACK_ANIM_SHAKE_GLOW_RED, - + + // Other Forms + [SPECIES_PIKACHU_COSPLAY] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_ROCK_STAR] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_BELLE] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_POP_STAR] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_PH_D] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_LIBRE] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_ORIGINAL_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_HOENN_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_SINNOH_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_UNOVA_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_KALOS_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_ALOLA_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_PARTNER_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIKACHU_WORLD_CAP] = BACK_ANIM_H_VIBRATE, + [SPECIES_PICHU_SPIKY_EARED] = BACK_ANIM_H_VIBRATE, }; // Equivalent to struct YellowFlashData, but doesn't match as a struct diff --git a/src/pokemon_debug.c b/src/pokemon_debug.c index 3c9a562776..29a65da0fe 100644 --- a/src/pokemon_debug.c +++ b/src/pokemon_debug.c @@ -378,7 +378,7 @@ static void ReloadPokemonSprites(struct PokemonDebugMenu *data); static void Exit_Debug_Pokemon(u8); //Text handling functions -static void PadString(const u8 *src, u8 *dst) +static void UNUSED PadString(const u8 *src, u8 *dst) { u32 i; @@ -434,7 +434,7 @@ static void PrintInstructionsOnWindow(struct PokemonDebugMenu *data) else AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); } - CopyWindowToVram(WIN_INSTRUCTIONS, 3); + CopyWindowToVram(WIN_INSTRUCTIONS, COPYWIN_FULL); //Bottom left text FillWindowPixelBuffer(WIN_BOTTOM_LEFT, PIXEL_FILL(0)); @@ -496,7 +496,7 @@ static void PrintDigitChars(struct PokemonDebugMenu *data) StringCopy(&text[i], GetSpeciesName(species)); FillWindowPixelBuffer(WIN_NAME_NUMBERS, 0x11); - AddTextPrinterParameterized(WIN_NAME_NUMBERS, 1, text, 6, 0, 0, NULL); + AddTextPrinterParameterized(WIN_NAME_NUMBERS, FONT_NORMAL, text, 6, 0, 0, NULL); } static u32 CharDigitsToValue(u8 *charDigits, u8 maxDigits) @@ -542,7 +542,6 @@ static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits) static void SetArrowInvisibility(struct PokemonDebugMenu *data) { - bool8 invisible = data->currentSubmenu; switch (data->currentSubmenu) { case 0: @@ -672,7 +671,6 @@ static bool32 TryMoveDigit(struct PokemonDebugModifyArrows *modArrows, bool32 mo static void UpdateBattlerValue(struct PokemonDebugMenu *data) { - u32 i; switch (data->modifyArrows.typeOfVal) { case VAL_U16: @@ -706,13 +704,8 @@ static const struct CompressedSpritePalette *GetMonSpritePalStructCustom(u16 spe static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bool8 isShiny, u8 battlerId) { - u16 paletteOffset; const void *lzPaletteData; - const struct CompressedSpritePalette *palette; - - paletteOffset = 0x100 + battlerId * 16; - - palette = GetMonSpritePalStructCustom(species, isFemale, isShiny); + u16 paletteOffset = 0x100 + battlerId * 16;; if (isShiny) { @@ -1067,7 +1060,7 @@ static void ResetPokemonDebugWindows(void) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } @@ -1109,9 +1102,7 @@ void CB2_Debug_Pokemon(void) FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 15); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); - data->battleBgType = 0; - data->battleTerrain = 0; - LoadBattleBg(data->battleBgType , data->battleTerrain); + LoadBattleBg(0, BATTLE_TERRAIN_GRASS); gMain.state++; break; @@ -1262,7 +1253,7 @@ static void ApplyOffsetSpriteValues(struct PokemonDebugMenu *data) gSprites[data->backspriteId].y = DEBUG_MON_BACK_Y + gMonBackPicCoords[species].y_offset + data->offsetsSpriteValues.offset_back_picCoords; //Front gSprites[data->frontspriteId].y = GetBattlerSpriteFinal_YCustom(species, data->offsetsSpriteValues.offset_front_picCoords, data->offsetsSpriteValues.offset_front_elevation); - + if (data->currentSubmenu == 2) UpdateShadowSpriteInvisible(data); } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 28a9626245..8c6065aa40 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -155,6 +155,9 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_MAGMAR] = gMonIcon_Magmar, [SPECIES_PINSIR] = gMonIcon_Pinsir, [SPECIES_TAUROS] = gMonIcon_Tauros, + [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = gMonIcon_TaurosPaldeanCombatBreed, + [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = gMonIcon_TaurosPaldeanBlazeBreed, + [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = gMonIcon_TaurosPaldeanAquaBreed, [SPECIES_MAGIKARP] = gMonIcon_Magikarp, [SPECIES_GYARADOS] = gMonIcon_Gyarados, [SPECIES_LAPRAS] = gMonIcon_Lapras, @@ -221,6 +224,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_SUNFLORA] = gMonIcon_Sunflora, [SPECIES_YANMA] = gMonIcon_Yanma, [SPECIES_WOOPER] = gMonIcon_Wooper, + //[SPECIES_WOOPER_PALDEAN] = gMonIcon_WooperPaldean, [SPECIES_QUAGSIRE] = gMonIcon_Quagsire, [SPECIES_ESPEON] = gMonIcon_Espeon, [SPECIES_UMBREON] = gMonIcon_Umbreon, @@ -386,7 +390,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_ARON] = gMonIcon_Aron, [SPECIES_LAIRON] = gMonIcon_Lairon, [SPECIES_AGGRON] = gMonIcon_Aggron, - [SPECIES_CASTFORM] = gMonIcon_Castform, + [SPECIES_CASTFORM_NORMAL] = gMonIcon_CastformNormal, [SPECIES_VOLBEAT] = gMonIcon_Volbeat, [SPECIES_ILLUMISE] = gMonIcon_Illumise, [SPECIES_LILEEP] = gMonIcon_Lileep, @@ -411,7 +415,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_LATIAS] = gMonIcon_Latias, [SPECIES_LATIOS] = gMonIcon_Latios, [SPECIES_JIRACHI] = gMonIcon_Jirachi, - [SPECIES_DEOXYS] = gMonIcon_Deoxys, + [SPECIES_DEOXYS_NORMAL] = gMonIcon_DeoxysNormal, [SPECIES_CHIMECHO] = gMonIcon_Chimecho, #if P_GEN_4_POKEMON == TRUE [SPECIES_TURTWIG] = gMonIcon_Turtwig, @@ -439,8 +443,8 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_RAMPARDOS] = gMonIcon_Rampardos, [SPECIES_SHIELDON] = gMonIcon_Shieldon, [SPECIES_BASTIODON] = gMonIcon_Bastiodon, - [SPECIES_BURMY] = gMonIcon_Burmy, - [SPECIES_WORMADAM] = gMonIcon_Wormadam, + [SPECIES_BURMY_PLANT_CLOAK] = gMonIcon_BurmyPlantCloak, + [SPECIES_WORMADAM_PLANT_CLOAK] = gMonIcon_WormadamPlantCloak, [SPECIES_MOTHIM] = gMonIcon_Mothim, [SPECIES_COMBEE] = gMonIcon_Combee, [SPECIES_VESPIQUEN] = gMonIcon_Vespiquen, @@ -448,9 +452,9 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_BUIZEL] = gMonIcon_Buizel, [SPECIES_FLOATZEL] = gMonIcon_Floatzel, [SPECIES_CHERUBI] = gMonIcon_Cherubi, - [SPECIES_CHERRIM] = gMonIcon_Cherrim, - [SPECIES_SHELLOS] = gMonIcon_Shellos, - [SPECIES_GASTRODON] = gMonIcon_Gastrodon, + [SPECIES_CHERRIM_OVERCAST] = gMonIcon_CherrimOvercast, + [SPECIES_SHELLOS_WEST_SEA] = gMonIcon_ShellosWestSea, + [SPECIES_GASTRODON_WEST_SEA] = gMonIcon_GastrodonWestSea, [SPECIES_AMBIPOM] = gMonIcon_Ambipom, [SPECIES_DRIFLOON] = gMonIcon_Drifloon, [SPECIES_DRIFBLIM] = gMonIcon_Drifblim, @@ -514,13 +518,13 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_PALKIA] = gMonIcon_Palkia, [SPECIES_HEATRAN] = gMonIcon_Heatran, [SPECIES_REGIGIGAS] = gMonIcon_Regigigas, - [SPECIES_GIRATINA] = gMonIcon_Giratina, + [SPECIES_GIRATINA_ALTERED] = gMonIcon_GiratinaAltered, [SPECIES_CRESSELIA] = gMonIcon_Cresselia, [SPECIES_PHIONE] = gMonIcon_Phione, [SPECIES_MANAPHY] = gMonIcon_Manaphy, [SPECIES_DARKRAI] = gMonIcon_Darkrai, - [SPECIES_SHAYMIN] = gMonIcon_Shaymin, - [SPECIES_ARCEUS] = gMonIcon_Arceus, + [SPECIES_SHAYMIN_LAND] = gMonIcon_ShayminLand, + [SPECIES_ARCEUS_NORMAL] = gMonIcon_Arceus, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = gMonIcon_Victini, @@ -579,12 +583,12 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_WHIMSICOTT] = gMonIcon_Whimsicott, [SPECIES_PETILIL] = gMonIcon_Petilil, [SPECIES_LILLIGANT] = gMonIcon_Lilligant, - [SPECIES_BASCULIN] = gMonIcon_Basculin, + [SPECIES_BASCULIN_RED_STRIPED] = gMonIcon_BasculinRedStriped, [SPECIES_SANDILE] = gMonIcon_Sandile, [SPECIES_KROKOROK] = gMonIcon_Krokorok, [SPECIES_KROOKODILE] = gMonIcon_Krookodile, [SPECIES_DARUMAKA] = gMonIcon_Darumaka, - [SPECIES_DARMANITAN] = gMonIcon_Darmanitan, + [SPECIES_DARMANITAN_STANDARD_MODE] = gMonIcon_DarmanitanStandardMode, [SPECIES_MARACTUS] = gMonIcon_Maractus, [SPECIES_DWEBBLE] = gMonIcon_Dwebble, [SPECIES_CRUSTLE] = gMonIcon_Crustle, @@ -614,8 +618,8 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_VANILLITE] = gMonIcon_Vanillite, [SPECIES_VANILLISH] = gMonIcon_Vanillish, [SPECIES_VANILLUXE] = gMonIcon_Vanilluxe, - [SPECIES_DEERLING] = gMonIcon_Deerling, - [SPECIES_SAWSBUCK] = gMonIcon_Sawsbuck, + [SPECIES_DEERLING_SPRING] = gMonIcon_DeerlingSpring, + [SPECIES_SAWSBUCK_SPRING] = gMonIcon_SawsbuckSpring, [SPECIES_EMOLGA] = gMonIcon_Emolga, [SPECIES_KARRABLAST] = gMonIcon_Karrablast, [SPECIES_ESCAVALIER] = gMonIcon_Escavalier, @@ -670,14 +674,14 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_COBALION] = gMonIcon_Cobalion, [SPECIES_TERRAKION] = gMonIcon_Terrakion, [SPECIES_VIRIZION] = gMonIcon_Virizion, - [SPECIES_TORNADUS] = gMonIcon_Tornadus, - [SPECIES_THUNDURUS] = gMonIcon_Thundurus, + [SPECIES_TORNADUS_INCARNATE] = gMonIcon_TornadusIncarnate, + [SPECIES_THUNDURUS_INCARNATE] = gMonIcon_ThundurusIncarnate, [SPECIES_RESHIRAM] = gMonIcon_Reshiram, [SPECIES_ZEKROM] = gMonIcon_Zekrom, - [SPECIES_LANDORUS] = gMonIcon_Landorus, + [SPECIES_LANDORUS_INCARNATE] = gMonIcon_LandorusIncarnate, [SPECIES_KYUREM] = gMonIcon_Kyurem, - [SPECIES_KELDEO] = gMonIcon_Keldeo, - [SPECIES_MELOETTA] = gMonIcon_Meloetta, + [SPECIES_KELDEO_ORDINARY] = gMonIcon_KeldeoOrdinary, + [SPECIES_MELOETTA_ARIA] = gMonIcon_MeloettaAria, [SPECIES_GENESECT] = gMonIcon_Genesect, #endif #if P_GEN_6_POKEMON == TRUE @@ -697,22 +701,22 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_TALONFLAME] = gMonIcon_Talonflame, [SPECIES_SCATTERBUG] = gMonIcon_Scatterbug, [SPECIES_SPEWPA] = gMonIcon_Spewpa, - [SPECIES_VIVILLON] = gMonIcon_Vivillon, + [SPECIES_VIVILLON_ICY_SNOW] = gMonIcon_VivillonIcySnow, [SPECIES_LITLEO] = gMonIcon_Litleo, [SPECIES_PYROAR] = gMonIcon_Pyroar, - [SPECIES_FLABEBE] = gMonIcon_Flabebe, - [SPECIES_FLOETTE] = gMonIcon_Floette, - [SPECIES_FLORGES] = gMonIcon_Florges, + [SPECIES_FLABEBE_RED_FLOWER] = gMonIcon_FlabebeRedFlower, + [SPECIES_FLOETTE_RED_FLOWER] = gMonIcon_FloetteRedFlower, + [SPECIES_FLORGES_RED_FLOWER] = gMonIcon_FlorgesRedFlower, [SPECIES_SKIDDO] = gMonIcon_Skiddo, [SPECIES_GOGOAT] = gMonIcon_Gogoat, [SPECIES_PANCHAM] = gMonIcon_Pancham, [SPECIES_PANGORO] = gMonIcon_Pangoro, - [SPECIES_FURFROU] = gMonIcon_Furfrou, + [SPECIES_FURFROU_NATURAL] = gMonIcon_FurfrouNatural, [SPECIES_ESPURR] = gMonIcon_Espurr, - [SPECIES_MEOWSTIC] = gMonIcon_Meowstic, + [SPECIES_MEOWSTIC_MALE] = gMonIcon_MeowsticMale, [SPECIES_HONEDGE] = gMonIcon_Honedge, [SPECIES_DOUBLADE] = gMonIcon_Doublade, - [SPECIES_AEGISLASH] = gMonIcon_Aegislash, + [SPECIES_AEGISLASH_SHIELD] = gMonIcon_AegislashShield, [SPECIES_SPRITZEE] = gMonIcon_Spritzee, [SPECIES_AROMATISSE] = gMonIcon_Aromatisse, [SPECIES_SWIRLIX] = gMonIcon_Swirlix, @@ -741,17 +745,17 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_KLEFKI] = gMonIcon_Klefki, [SPECIES_PHANTUMP] = gMonIcon_Phantump, [SPECIES_TREVENANT] = gMonIcon_Trevenant, - [SPECIES_PUMPKABOO] = gMonIcon_Pumpkaboo, - [SPECIES_GOURGEIST] = gMonIcon_Gourgeist, + [SPECIES_PUMPKABOO_AVERAGE] = gMonIcon_Pumpkaboo, + [SPECIES_GOURGEIST_AVERAGE] = gMonIcon_Gourgeist, [SPECIES_BERGMITE] = gMonIcon_Bergmite, [SPECIES_AVALUGG] = gMonIcon_Avalugg, [SPECIES_NOIBAT] = gMonIcon_Noibat, [SPECIES_NOIVERN] = gMonIcon_Noivern, - [SPECIES_XERNEAS] = gMonIcon_Xerneas, + [SPECIES_XERNEAS_NEUTRAL] = gMonIcon_XerneasNeutral, [SPECIES_YVELTAL] = gMonIcon_Yveltal, - [SPECIES_ZYGARDE] = gMonIcon_Zygarde, + [SPECIES_ZYGARDE_50_AURA_BREAK] = gMonIcon_Zygarde50, [SPECIES_DIANCIE] = gMonIcon_Diancie, - [SPECIES_HOOPA] = gMonIcon_Hoopa, + [SPECIES_HOOPA_CONFINED] = gMonIcon_HoopaConfined, [SPECIES_VOLCANION] = gMonIcon_Volcanion, #endif #if P_GEN_7_POKEMON == TRUE @@ -774,12 +778,12 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_VIKAVOLT] = gMonIcon_Vikavolt, [SPECIES_CRABRAWLER] = gMonIcon_Crabrawler, [SPECIES_CRABOMINABLE] = gMonIcon_Crabominable, - [SPECIES_ORICORIO] = gMonIcon_Oricorio, + [SPECIES_ORICORIO_BAILE] = gMonIcon_OricorioBaile, [SPECIES_CUTIEFLY] = gMonIcon_Cutiefly, [SPECIES_RIBOMBEE] = gMonIcon_Ribombee, [SPECIES_ROCKRUFF] = gMonIcon_Rockruff, - [SPECIES_LYCANROC] = gMonIcon_Lycanroc, - [SPECIES_WISHIWASHI] = gMonIcon_Wishiwashi, + [SPECIES_LYCANROC_MIDDAY] = gMonIcon_LycanrocMidday, + [SPECIES_WISHIWASHI_SOLO] = gMonIcon_WishiwashiSolo, [SPECIES_MAREANIE] = gMonIcon_Mareanie, [SPECIES_TOXAPEX] = gMonIcon_Toxapex, [SPECIES_MUDBRAY] = gMonIcon_Mudbray, @@ -806,12 +810,12 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_PALOSSAND] = gMonIcon_Palossand, [SPECIES_PYUKUMUKU] = gMonIcon_Pyukumuku, [SPECIES_TYPE_NULL] = gMonIcon_TypeNull, - [SPECIES_SILVALLY] = gMonIcon_Silvally, - [SPECIES_MINIOR] = gMonIcon_Minior, + [SPECIES_SILVALLY_NORMAL] = gMonIcon_Silvally, + [SPECIES_MINIOR_METEOR_RED] = gMonIcon_MiniorMeteor, [SPECIES_KOMALA] = gMonIcon_Komala, [SPECIES_TURTONATOR] = gMonIcon_Turtonator, [SPECIES_TOGEDEMARU] = gMonIcon_Togedemaru, - [SPECIES_MIMIKYU] = gMonIcon_Mimikyu, + [SPECIES_MIMIKYU_DISGUISED] = gMonIcon_MimikyuDisguised, [SPECIES_BRUXISH] = gMonIcon_Bruxish, [SPECIES_DRAMPA] = gMonIcon_Drampa, [SPECIES_DHELMISE] = gMonIcon_Dhelmise, @@ -884,13 +888,13 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_ARROKUDA] = gMonIcon_Arrokuda, [SPECIES_BARRASKEWDA] = gMonIcon_Barraskewda, [SPECIES_TOXEL] = gMonIcon_Toxel, - [SPECIES_TOXTRICITY] = gMonIcon_Toxtricity, + [SPECIES_TOXTRICITY_AMPED] = gMonIcon_ToxtricityAmped, [SPECIES_SIZZLIPEDE] = gMonIcon_Sizzlipede, [SPECIES_CENTISKORCH] = gMonIcon_Centiskorch, [SPECIES_CLOBBOPUS] = gMonIcon_Clobbopus, [SPECIES_GRAPPLOCT] = gMonIcon_Grapploct, - [SPECIES_SINISTEA] = gMonIcon_Sinistea, - [SPECIES_POLTEAGEIST] = gMonIcon_Polteageist, + [SPECIES_SINISTEA_PHONY] = gMonIcon_Sinistea, + [SPECIES_POLTEAGEIST_PHONY] = gMonIcon_Polteageist, [SPECIES_HATENNA] = gMonIcon_Hatenna, [SPECIES_HATTREM] = gMonIcon_Hattrem, [SPECIES_HATTERENE] = gMonIcon_Hatterene, @@ -904,15 +908,77 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_MR_RIME] = gMonIcon_MrRime, [SPECIES_RUNERIGUS] = gMonIcon_Runerigus, [SPECIES_MILCERY] = gMonIcon_Milcery, - [SPECIES_ALCREMIE] = gMonIcon_Alcremie, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubyCream, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMatchaCream, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryMintCream, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryLemonCream, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberrySaltedCream, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRubySwirl, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryCaramelSwirl, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = gMonIcon_AlcremieStrawberryVanillaCream,//gMonIcon_AlcremieStrawberryRainbowSwirl, [SPECIES_FALINKS] = gMonIcon_Falinks, [SPECIES_PINCURCHIN] = gMonIcon_Pincurchin, [SPECIES_SNOM] = gMonIcon_Snom, [SPECIES_FROSMOTH] = gMonIcon_Frosmoth, [SPECIES_STONJOURNER] = gMonIcon_Stonjourner, - [SPECIES_EISCUE] = gMonIcon_Eiscue, - [SPECIES_INDEEDEE] = gMonIcon_Indeedee, - [SPECIES_MORPEKO] = gMonIcon_Morpeko, + [SPECIES_EISCUE_ICE_FACE] = gMonIcon_EiscueIceFace, + [SPECIES_INDEEDEE_MALE] = gMonIcon_IndeedeeMale, + [SPECIES_MORPEKO_FULL_BELLY] = gMonIcon_MorpekoFullBelly, [SPECIES_CUFANT] = gMonIcon_Cufant, [SPECIES_COPPERAJAH] = gMonIcon_Copperajah, [SPECIES_DRACOZOLT] = gMonIcon_Dracozolt, @@ -923,11 +989,11 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_DREEPY] = gMonIcon_Dreepy, [SPECIES_DRAKLOAK] = gMonIcon_Drakloak, [SPECIES_DRAGAPULT] = gMonIcon_Dragapult, - [SPECIES_ZACIAN] = gMonIcon_Zacian, - [SPECIES_ZAMAZENTA] = gMonIcon_Zamazenta, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = gMonIcon_ZacianHeroOfManyBattles, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = gMonIcon_ZamazentaHeroOfManyBattles, [SPECIES_ETERNATUS] = gMonIcon_Eternatus, [SPECIES_KUBFU] = gMonIcon_Kubfu, - [SPECIES_URSHIFU] = gMonIcon_Urshifu, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = gMonIcon_UrshifuSingleStrikeStyle, [SPECIES_ZARUDE] = gMonIcon_Zarude, [SPECIES_REGIELEKI] = gMonIcon_Regieleki, [SPECIES_REGIDRAGO] = gMonIcon_Regidrago, @@ -937,10 +1003,11 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_WYRDEER] = gMonIcon_Wyrdeer, [SPECIES_KLEAVOR] = gMonIcon_Kleavor, [SPECIES_URSALUNA] = gMonIcon_Ursaluna, - [SPECIES_BASCULEGION] = gMonIcon_Basculegion, + //[SPECIES_URSALUNA_BLOODMOON] = gMonIcon_UrsalunaBloodmoon, TODO + [SPECIES_BASCULEGION_MALE] = gMonIcon_BasculegionMale, [SPECIES_SNEASLER] = gMonIcon_Sneasler, [SPECIES_OVERQWIL] = gMonIcon_Overqwil, - [SPECIES_ENAMORUS] = gMonIcon_Enamorus, + [SPECIES_ENAMORUS_INCARNATE] = gMonIcon_EnamorusIncarnate, #endif [SPECIES_VENUSAUR_MEGA] = gMonIcon_VenusaurMega, [SPECIES_CHARIZARD_MEGA_X] = gMonIcon_CharizardMegaX, @@ -1033,7 +1100,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_LINOONE_GALARIAN] = gMonIcon_LinooneGalarian, #if P_GEN_5_POKEMON == TRUE [SPECIES_DARUMAKA_GALARIAN] = gMonIcon_DarumakaGalarian, - [SPECIES_DARMANITAN_GALARIAN] = gMonIcon_DarmanitanGalarian, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = gMonIcon_DarmanitanGalarianStandardMode, [SPECIES_YAMASK_GALARIAN] = gMonIcon_YamaskGalarian, [SPECIES_STUNFISK_GALARIAN] = gMonIcon_StunfiskGalarian, #endif @@ -1072,7 +1139,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_PIKACHU_KALOS_CAP] = gMonIcon_PikachuKalosCap, [SPECIES_PIKACHU_ALOLA_CAP] = gMonIcon_PikachuAlolaCap, [SPECIES_PIKACHU_PARTNER_CAP] = gMonIcon_PikachuPartnerCap, - [SPECIES_PIKACHU_WORLD_CAP] = gMonIcon_QuestionMark, + [SPECIES_PIKACHU_WORLD_CAP] = gMonIcon_PikachuWorldCap, [SPECIES_PICHU_SPIKY_EARED] = gMonIcon_PichuSpikyEared, [SPECIES_UNOWN_B] = gMonIcon_UnownB, [SPECIES_UNOWN_C] = gMonIcon_UnownC, @@ -1146,7 +1213,7 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_BASCULIN_BLUE_STRIPED] = gMonIcon_BasculinBlueStriped, [SPECIES_BASCULIN_WHITE_STRIPED] = gMonIcon_BasculinWhiteStriped, [SPECIES_DARMANITAN_ZEN_MODE] = gMonIcon_DarmanitanZenMode, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = gMonIcon_DarmanitanZenModeGalarian, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = gMonIcon_DarmanitanGalarianZenMode, [SPECIES_DEERLING_SUMMER] = gMonIcon_DeerlingSummer, [SPECIES_DEERLING_AUTUMN] = gMonIcon_DeerlingAutumn, [SPECIES_DEERLING_WINTER] = gMonIcon_DeerlingWinter, @@ -1218,9 +1285,9 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_GOURGEIST_LARGE] = gMonIcon_Gourgeist, [SPECIES_GOURGEIST_SUPER] = gMonIcon_Gourgeist, [SPECIES_XERNEAS_ACTIVE] = gMonIcon_XerneasActive, - [SPECIES_ZYGARDE_10] = gMonIcon_Zygarde10, + [SPECIES_ZYGARDE_10_AURA_BREAK] = gMonIcon_Zygarde10, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = gMonIcon_Zygarde10, - [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = gMonIcon_Zygarde, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = gMonIcon_Zygarde50, [SPECIES_ZYGARDE_COMPLETE] = gMonIcon_ZygardeComplete, [SPECIES_HOOPA_UNBOUND] = gMonIcon_HoopaUnbound, #endif @@ -1249,12 +1316,12 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_SILVALLY_DRAGON] = gMonIcon_Silvally, [SPECIES_SILVALLY_DARK] = gMonIcon_Silvally, [SPECIES_SILVALLY_FAIRY] = gMonIcon_Silvally, - [SPECIES_MINIOR_METEOR_ORANGE] = gMonIcon_Minior, - [SPECIES_MINIOR_METEOR_YELLOW] = gMonIcon_Minior, - [SPECIES_MINIOR_METEOR_GREEN] = gMonIcon_Minior, - [SPECIES_MINIOR_METEOR_BLUE] = gMonIcon_Minior, - [SPECIES_MINIOR_METEOR_INDIGO] = gMonIcon_Minior, - [SPECIES_MINIOR_METEOR_VIOLET] = gMonIcon_Minior, + [SPECIES_MINIOR_METEOR_ORANGE] = gMonIcon_MiniorMeteor, + [SPECIES_MINIOR_METEOR_YELLOW] = gMonIcon_MiniorMeteor, + [SPECIES_MINIOR_METEOR_GREEN] = gMonIcon_MiniorMeteor, + [SPECIES_MINIOR_METEOR_BLUE] = gMonIcon_MiniorMeteor, + [SPECIES_MINIOR_METEOR_INDIGO] = gMonIcon_MiniorMeteor, + [SPECIES_MINIOR_METEOR_VIOLET] = gMonIcon_MiniorMeteor, [SPECIES_MINIOR_CORE_RED] = gMonIcon_MiniorCoreRed, [SPECIES_MINIOR_CORE_ORANGE] = gMonIcon_MiniorCoreOrange, [SPECIES_MINIOR_CORE_YELLOW] = gMonIcon_MiniorCoreYellow, @@ -1274,26 +1341,186 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = [SPECIES_TOXTRICITY_LOW_KEY] = gMonIcon_ToxtricityLowKey, [SPECIES_SINISTEA_ANTIQUE] = gMonIcon_Sinistea, [SPECIES_POLTEAGEIST_ANTIQUE] = gMonIcon_Polteageist, - [SPECIES_ALCREMIE_RUBY_CREAM] = gMonIcon_QuestionMark,//gMonIcon_AlcremieRubyCream, - [SPECIES_ALCREMIE_MATCHA_CREAM] = gMonIcon_QuestionMark,//gMonIcon_AlcremieMatchaCream, - [SPECIES_ALCREMIE_MINT_CREAM] = gMonIcon_QuestionMark,//gMonIcon_AlcremieMintCream, - [SPECIES_ALCREMIE_LEMON_CREAM] = gMonIcon_QuestionMark,//gMonIcon_AlcremieLemonCream, - [SPECIES_ALCREMIE_SALTED_CREAM] = gMonIcon_QuestionMark,//gMonIcon_AlcremieSaltedCream, - [SPECIES_ALCREMIE_RUBY_SWIRL] = gMonIcon_QuestionMark,//gMonIcon_AlcremieRubySwirl, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = gMonIcon_QuestionMark,//gMonIcon_AlcremieCaramelSwirl, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = gMonIcon_QuestionMark,//gMonIcon_AlcremieRainbowSwirl, [SPECIES_EISCUE_NOICE_FACE] = gMonIcon_EiscueNoiceFace, [SPECIES_INDEEDEE_FEMALE] = gMonIcon_IndeedeeFemale, [SPECIES_MORPEKO_HANGRY] = gMonIcon_MorpekoHangry, [SPECIES_ZACIAN_CROWNED_SWORD] = gMonIcon_ZacianCrownedSword, [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = gMonIcon_ZamazentaCrownedShield, [SPECIES_ETERNATUS_ETERNAMAX] = gMonIcon_EternatusEternamax, - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = gMonIcon_Urshifu, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = gMonIcon_UrshifuSingleStrikeStyle, [SPECIES_ZARUDE_DADA] = gMonIcon_ZarudeDada, [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider, [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider, [SPECIES_ENAMORUS_THERIAN] = gMonIcon_EnamorusTherian, [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionFemale, + // Gigantamax Forms + [SPECIES_VENUSAUR_GIGANTAMAX] = gMonIcon_VenusaurGigantamax, + [SPECIES_CHARIZARD_GIGANTAMAX] = gMonIcon_CharizardGigantamax, + [SPECIES_BLASTOISE_GIGANTAMAX] = gMonIcon_BlastoiseGigantamax, + [SPECIES_BUTTERFREE_GIGANTAMAX] = gMonIcon_ButterfreeGigantamax, + [SPECIES_PIKACHU_GIGANTAMAX] = gMonIcon_PikachuGigantamax, + [SPECIES_MEOWTH_GIGANTAMAX] = gMonIcon_MeowthGigantamax, + [SPECIES_MACHAMP_GIGANTAMAX] = gMonIcon_MachampGigantamax, + [SPECIES_GENGAR_GIGANTAMAX] = gMonIcon_GengarGigantamax, + [SPECIES_KINGLER_GIGANTAMAX] = gMonIcon_KinglerGigantamax, + [SPECIES_LAPRAS_GIGANTAMAX] = gMonIcon_LaprasGigantamax, + [SPECIES_EEVEE_GIGANTAMAX] = gMonIcon_EeveeGigantamax, + [SPECIES_SNORLAX_GIGANTAMAX] = gMonIcon_SnorlaxGigantamax, + [SPECIES_GARBODOR_GIGANTAMAX] = gMonIcon_GarbodorGigantamax, + [SPECIES_MELMETAL_GIGANTAMAX] = gMonIcon_MelmetalGigantamax, + [SPECIES_RILLABOOM_GIGANTAMAX] = gMonIcon_RillaboomGigantamax, + [SPECIES_CINDERACE_GIGANTAMAX] = gMonIcon_CinderaceGigantamax, + [SPECIES_INTELEON_GIGANTAMAX] = gMonIcon_InteleonGigantamax, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = gMonIcon_CorviknightGigantamax, + [SPECIES_ORBEETLE_GIGANTAMAX] = gMonIcon_OrbeetleGigantamax, + [SPECIES_DREDNAW_GIGANTAMAX] = gMonIcon_DrednawGigantamax, + [SPECIES_COALOSSAL_GIGANTAMAX] = gMonIcon_CoalossalGigantamax, + [SPECIES_FLAPPLE_GIGANTAMAX] = gMonIcon_FlappleGigantamax, + [SPECIES_APPLETUN_GIGANTAMAX] = gMonIcon_AppletunGigantamax, + [SPECIES_SANDACONDA_GIGANTAMAX] = gMonIcon_SandacondaGigantamax, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = gMonIcon_ToxtricityGigantamax, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = gMonIcon_ToxtricityGigantamax, + [SPECIES_CENTISKORCH_GIGANTAMAX] = gMonIcon_CentiskorchGigantamax, + [SPECIES_HATTERENE_GIGANTAMAX] = gMonIcon_HattereneGigantamax, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = gMonIcon_GrimmsnarlGigantamax, + [SPECIES_ALCREMIE_GIGANTAMAX] = gMonIcon_AlcremieGigantamax, + [SPECIES_COPPERAJAH_GIGANTAMAX] = gMonIcon_CopperajahGigantamax, + [SPECIES_DURALUDON_GIGANTAMAX] = gMonIcon_DuraludonGigantamax, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = gMonIcon_UrshifuSingleStrikeGigantamax, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = gMonIcon_UrshifuRapidStrikeGigantamax, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = gMonIcon_Sprigatito, + [SPECIES_FLORAGATO] = gMonIcon_Floragato, + [SPECIES_MEOWSCARADA] = gMonIcon_Meowscarada, + [SPECIES_FUECOCO] = gMonIcon_Fuecoco, + [SPECIES_CROCALOR] = gMonIcon_Crocalor, + [SPECIES_SKELEDIRGE] = gMonIcon_Skeledirge, + [SPECIES_QUAXLY] = gMonIcon_Quaxly, + [SPECIES_QUAXWELL] = gMonIcon_Quaxwell, + [SPECIES_QUAQUAVAL] = gMonIcon_Quaquaval, + [SPECIES_LECHONK] = gMonIcon_Lechonk, + [SPECIES_OINKOLOGNE_MALE] = gMonIcon_OinkologneMale, + [SPECIES_OINKOLOGNE_FEMALE] = gMonIcon_OinkologneFemale, + [SPECIES_TAROUNTULA] = gMonIcon_Tarountula, + [SPECIES_SPIDOPS] = gMonIcon_Spidops, + [SPECIES_NYMBLE] = gMonIcon_Nymble, + [SPECIES_LOKIX] = gMonIcon_Lokix, + [SPECIES_PAWMI] = gMonIcon_Pawmi, + [SPECIES_PAWMO] = gMonIcon_Pawmo, + [SPECIES_PAWMOT] = gMonIcon_Pawmot, + [SPECIES_TANDEMAUS] = gMonIcon_Tandemaus, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = gMonIcon_MausholdFamilyOfThree, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = gMonIcon_MausholdFamilyOfFour, + [SPECIES_FIDOUGH] = gMonIcon_Fidough, + [SPECIES_DACHSBUN] = gMonIcon_Dachsbun, + [SPECIES_SMOLIV] = gMonIcon_Smoliv, + [SPECIES_DOLLIV] = gMonIcon_Dolliv, + [SPECIES_ARBOLIVA] = gMonIcon_Arboliva, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = gMonIcon_SquawkabillyGreenPlumage, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = gMonIcon_SquawkabillyBluePlumage, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = gMonIcon_SquawkabillyYellowPlumage, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = gMonIcon_SquawkabillyWhitePlumage, + [SPECIES_NACLI] = gMonIcon_Nacli, + [SPECIES_NACLSTACK] = gMonIcon_Naclstack, + [SPECIES_GARGANACL] = gMonIcon_Garganacl, + [SPECIES_CHARCADET] = gMonIcon_Charcadet, + [SPECIES_ARMAROUGE] = gMonIcon_Armarouge, + [SPECIES_CERULEDGE] = gMonIcon_Ceruledge, + [SPECIES_TADBULB] = gMonIcon_Tadbulb, + [SPECIES_BELLIBOLT] = gMonIcon_Bellibolt, + [SPECIES_WATTREL] = gMonIcon_Wattrel, + [SPECIES_KILOWATTREL] = gMonIcon_Kilowattrel, + [SPECIES_MASCHIFF] = gMonIcon_Maschiff, + [SPECIES_MABOSSTIFF] = gMonIcon_Mabosstiff, + [SPECIES_SHROODLE] = gMonIcon_Shroodle, + [SPECIES_GRAFAIAI] = gMonIcon_Grafaiai, + [SPECIES_BRAMBLIN] = gMonIcon_Bramblin, + [SPECIES_BRAMBLEGHAST] = gMonIcon_Brambleghast, + [SPECIES_TOEDSCOOL] = gMonIcon_Toedscool, + [SPECIES_TOEDSCRUEL] = gMonIcon_Toedscruel, + [SPECIES_KLAWF] = gMonIcon_Klawf, + [SPECIES_CAPSAKID] = gMonIcon_Capsakid, + [SPECIES_SCOVILLAIN] = gMonIcon_Scovillain, + [SPECIES_RELLOR] = gMonIcon_Rellor, + [SPECIES_RABSCA] = gMonIcon_Rabsca, + [SPECIES_FLITTLE] = gMonIcon_Flittle, + [SPECIES_ESPATHRA] = gMonIcon_Espathra, + [SPECIES_TINKATINK] = gMonIcon_Tinkatink, + [SPECIES_TINKATUFF] = gMonIcon_Tinkatuff, + [SPECIES_TINKATON] = gMonIcon_Tinkaton, + [SPECIES_WIGLETT] = gMonIcon_Wiglett, + [SPECIES_WUGTRIO] = gMonIcon_Wugtrio, + [SPECIES_BOMBIRDIER] = gMonIcon_Bombirdier, + [SPECIES_FINIZEN] = gMonIcon_Finizen, + [SPECIES_PALAFIN_ZERO] = gMonIcon_PalafinZero, + [SPECIES_PALAFIN_HERO] = gMonIcon_PalafinHero, + [SPECIES_VAROOM] = gMonIcon_Varoom, + [SPECIES_REVAVROOM] = gMonIcon_Revavroom, + [SPECIES_CYCLIZAR] = gMonIcon_Cyclizar, + [SPECIES_ORTHWORM] = gMonIcon_Orthworm, + [SPECIES_GLIMMET] = gMonIcon_Glimmet, + [SPECIES_GLIMMORA] = gMonIcon_Glimmora, + [SPECIES_GREAVARD] = gMonIcon_Greavard, + [SPECIES_HOUNDSTONE] = gMonIcon_Houndstone, + [SPECIES_FLAMIGO] = gMonIcon_Flamigo, + [SPECIES_CETODDLE] = gMonIcon_Cetoddle, + [SPECIES_CETITAN] = gMonIcon_Cetitan, + [SPECIES_VELUZA] = gMonIcon_Veluza, + [SPECIES_DONDOZO] = gMonIcon_Dondozo, + [SPECIES_TATSUGIRI_CURLY] = gMonIcon_TatsugiriCurly, + [SPECIES_TATSUGIRI_DROOPY] = gMonIcon_TatsugiriDroopy, + [SPECIES_TATSUGIRI_STRETCHY] = gMonIcon_TatsugiriStretchy, + [SPECIES_ANNIHILAPE] = gMonIcon_Annihilape, + [SPECIES_CLODSIRE] = gMonIcon_Clodsire, + [SPECIES_FARIGIRAF] = gMonIcon_Farigiraf, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = gMonIcon_Dudunsparce, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = gMonIcon_Dudunsparce, + [SPECIES_KINGAMBIT] = gMonIcon_Kingambit, + [SPECIES_GREAT_TUSK] = gMonIcon_GreatTusk, + [SPECIES_SCREAM_TAIL] = gMonIcon_ScreamTail, + [SPECIES_BRUTE_BONNET] = gMonIcon_BruteBonnet, + [SPECIES_FLUTTER_MANE] = gMonIcon_FlutterMane, + [SPECIES_SLITHER_WING] = gMonIcon_SlitherWing, + [SPECIES_SANDY_SHOCKS] = gMonIcon_SandyShocks, + [SPECIES_IRON_TREADS] = gMonIcon_IronTreads, + [SPECIES_IRON_BUNDLE] = gMonIcon_IronBundle, + [SPECIES_IRON_HANDS] = gMonIcon_IronHands, + [SPECIES_IRON_JUGULIS] = gMonIcon_IronJugulis, + [SPECIES_IRON_MOTH] = gMonIcon_IronMoth, + [SPECIES_IRON_THORNS] = gMonIcon_IronThorns, + [SPECIES_FRIGIBAX] = gMonIcon_Frigibax, + [SPECIES_ARCTIBAX] = gMonIcon_Arctibax, + [SPECIES_BAXCALIBUR] = gMonIcon_Baxcalibur, + [SPECIES_GIMMIGHOUL_CHEST] = gMonIcon_GimmighoulChest, + [SPECIES_GIMMIGHOUL_ROAMING] = gMonIcon_GimmighoulRoaming, + [SPECIES_GHOLDENGO] = gMonIcon_Gholdengo, + [SPECIES_WO_CHIEN] = gMonIcon_WoChien, + [SPECIES_CHIEN_PAO] = gMonIcon_ChienPao, + [SPECIES_TING_LU] = gMonIcon_TingLu, + [SPECIES_CHI_YU] = gMonIcon_ChiYu, + [SPECIES_ROARING_MOON] = gMonIcon_RoaringMoon, + [SPECIES_IRON_VALIANT] = gMonIcon_IronValiant, + [SPECIES_KORAIDON] = gMonIcon_Koraidon, + [SPECIES_MIRAIDON] = gMonIcon_Miraidon, + [SPECIES_WALKING_WAKE] = gMonIcon_WalkingWake, + [SPECIES_IRON_LEAVES] = gMonIcon_IronLeaves, + [SPECIES_DIPPLIN] = gMonIcon_Dipplin, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = gMonIcon_Poltchageist, + [SPECIES_POLTCHAGEIST_ARTISAN] = gMonIcon_Poltchageist, + [SPECIES_SINISTCHA_UNREMARKABLE] = gMonIcon_Sinistcha, + [SPECIES_SINISTCHA_MASTERPIECE] = gMonIcon_Sinistcha, + [SPECIES_OKIDOGI] = gMonIcon_Okidogi, + [SPECIES_MUNKIDORI] = gMonIcon_Munkidori, + [SPECIES_FEZANDIPITI] = gMonIcon_Fezandipiti, + [SPECIES_OGERPON_TEAL_MASK] = gMonIcon_OgerponTealMask, + //[SPECIES_OGERPON_WELLSPRING_MASK] = gMonIcon_OgerponWellspringMask, TODO + //[SPECIES_OGERPON_HEARTHFLAME_MASK] = gMonIcon_OgerponHearthflameMask, TODO + //[SPECIES_OGERPON_CORNERSTONE_MASK] = gMonIcon_OgerponCornerstoneMask, TODO + [SPECIES_OGERPON_TEAL_MASK_TERA] = gMonIcon_OgerponTealMask, + //[SPECIES_OGERPON_WELLSPRING_MASK_TERA] = gMonIcon_OgerponWellspringMask, TODO + //[SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = gMonIcon_OgerponHearthflameMask, TODO + //[SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = gMonIcon_OgerponCornerstoneMask, TODO #endif [SPECIES_EGG] = gMonIcon_Egg, }; @@ -1301,7 +1528,11 @@ const u8 *const gMonIconTable[NUM_SPECIES + 1] = // Female icon palette indexes still need to be defined in gMonIconPaletteIndicesFemale, even if they are the same as males. const u8 *const gMonIconTableFemale[NUM_SPECIES + 1] = { -#if P_GEN_4_POKEMON == TRUE && P_HIPPO_GENDER_DIFF_ICONS == TRUE +#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE + [SPECIES_PIKACHU] = gMonIcon_PikachuF, + [SPECIES_WOBBUFFET] = gMonIcon_WobbuffetF, +#endif +#if P_GEN_4_POKEMON == TRUE && P_CUSTOM_GENDER_DIFF_ICONS == TRUE [SPECIES_HIPPOPOTAS] = gMonIcon_HippopotasF, [SPECIES_HIPPOWDON] = gMonIcon_HippowdonF, #endif @@ -1511,6 +1742,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_SUNFLORA] = 1, [SPECIES_YANMA] = 1, [SPECIES_WOOPER] = 0, + [SPECIES_WOOPER_PALDEAN] = 0, [SPECIES_QUAGSIRE] = 0, [SPECIES_ESPEON] = 2, [SPECIES_UMBREON] = 0, @@ -1676,7 +1908,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ARON] = 2, [SPECIES_LAIRON] = 2, [SPECIES_AGGRON] = 2, - [SPECIES_CASTFORM] = 0, + [SPECIES_CASTFORM_NORMAL] = 0, [SPECIES_VOLBEAT] = 0, [SPECIES_ILLUMISE] = 2, [SPECIES_LILEEP] = 2, @@ -1701,7 +1933,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_LATIAS] = 0, [SPECIES_LATIOS] = 0, [SPECIES_JIRACHI] = 0, - [SPECIES_DEOXYS] = 0, + [SPECIES_DEOXYS_NORMAL] = 0, [SPECIES_CHIMECHO] = 0, [SPECIES_TURTWIG] = 1, [SPECIES_GROTLE] = 1, @@ -1728,8 +1960,8 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_RAMPARDOS] = 0, [SPECIES_SHIELDON] = 1, [SPECIES_BASTIODON] = 1, - [SPECIES_BURMY] = 1, - [SPECIES_WORMADAM] = 1, + [SPECIES_BURMY_PLANT_CLOAK] = 1, + [SPECIES_WORMADAM_PLANT_CLOAK] = 1, [SPECIES_MOTHIM] = 0, [SPECIES_COMBEE] = 0, [SPECIES_VESPIQUEN] = 0, @@ -1737,9 +1969,9 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_BUIZEL] = 0, [SPECIES_FLOATZEL] = 0, [SPECIES_CHERUBI] = 1, - [SPECIES_CHERRIM] = 0, - [SPECIES_SHELLOS] = 0, - [SPECIES_GASTRODON] = 0, + [SPECIES_CHERRIM_OVERCAST] = 0, + [SPECIES_SHELLOS_WEST_SEA] = 0, + [SPECIES_GASTRODON_WEST_SEA] = 0, [SPECIES_AMBIPOM] = 2, [SPECIES_DRIFLOON] = 2, [SPECIES_DRIFBLIM] = 2, @@ -1803,13 +2035,13 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_PALKIA] = 2, [SPECIES_HEATRAN] = 0, [SPECIES_REGIGIGAS] = 0, - [SPECIES_GIRATINA] = 0, + [SPECIES_GIRATINA_ALTERED] = 0, [SPECIES_CRESSELIA] = 0, [SPECIES_PHIONE] = 0, [SPECIES_MANAPHY] = 0, [SPECIES_DARKRAI] = 0, - [SPECIES_SHAYMIN] = 1, - [SPECIES_ARCEUS] = 1, + [SPECIES_SHAYMIN_LAND] = 1, + [SPECIES_ARCEUS_NORMAL] = 1, [SPECIES_VICTINI] = 0, [SPECIES_SNIVY] = 1, [SPECIES_SERVINE] = 1, @@ -1866,12 +2098,12 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_WHIMSICOTT] = 1, [SPECIES_PETILIL] = 1, [SPECIES_LILLIGANT] = 1, - [SPECIES_BASCULIN] = 1, + [SPECIES_BASCULIN_RED_STRIPED] = 1, [SPECIES_SANDILE] = 1, [SPECIES_KROKOROK] = 1, [SPECIES_KROOKODILE] = 0, [SPECIES_DARUMAKA] = 0, - [SPECIES_DARMANITAN] = 0, + [SPECIES_DARMANITAN_STANDARD_MODE] = 0, [SPECIES_MARACTUS] = 1, [SPECIES_DWEBBLE] = 0, [SPECIES_CRUSTLE] = 2, @@ -1901,8 +2133,8 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_VANILLITE] = 0, [SPECIES_VANILLISH] = 2, [SPECIES_VANILLUXE] = 2, - [SPECIES_DEERLING] = 1, - [SPECIES_SAWSBUCK] = 1, + [SPECIES_DEERLING_SPRING] = 1, + [SPECIES_SAWSBUCK_SPRING] = 1, [SPECIES_EMOLGA] = 2, [SPECIES_KARRABLAST] = 0, [SPECIES_ESCAVALIER] = 0, @@ -1957,14 +2189,14 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_COBALION] = 0, [SPECIES_TERRAKION] = 2, [SPECIES_VIRIZION] = 1, - [SPECIES_TORNADUS] = 1, - [SPECIES_THUNDURUS] = 0, + [SPECIES_TORNADUS_INCARNATE] = 1, + [SPECIES_THUNDURUS_INCARNATE] = 0, [SPECIES_RESHIRAM] = 0, [SPECIES_ZEKROM] = 2, - [SPECIES_LANDORUS] = 0, + [SPECIES_LANDORUS_INCARNATE] = 0, [SPECIES_KYUREM] = 0, - [SPECIES_KELDEO] = 0, - [SPECIES_MELOETTA] = 4, + [SPECIES_KELDEO_ORDINARY] = 0, + [SPECIES_MELOETTA_ARIA] = 4, [SPECIES_GENESECT] = 2, [SPECIES_CHESPIN] = 1, [SPECIES_QUILLADIN] = 1, @@ -1982,22 +2214,22 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_TALONFLAME] = 2, [SPECIES_SCATTERBUG] = 1, [SPECIES_SPEWPA] = 1, - [SPECIES_VIVILLON] = 0, + [SPECIES_VIVILLON_ICY_SNOW] = 0, [SPECIES_LITLEO] = 2, [SPECIES_PYROAR] = 2, - [SPECIES_FLABEBE] = 1, - [SPECIES_FLOETTE] = 1, - [SPECIES_FLORGES] = 0, + [SPECIES_FLABEBE_RED_FLOWER] = 1, + [SPECIES_FLOETTE_RED_FLOWER] = 1, + [SPECIES_FLORGES_RED_FLOWER] = 0, [SPECIES_SKIDDO] = 1, [SPECIES_GOGOAT] = 1, [SPECIES_PANCHAM] = 1, [SPECIES_PANGORO] = 1, - [SPECIES_FURFROU] = 0, + [SPECIES_FURFROU_NATURAL] = 0, [SPECIES_ESPURR] = 2, - [SPECIES_MEOWSTIC] = 0, + [SPECIES_MEOWSTIC_MALE] = 0, [SPECIES_HONEDGE] = 2, [SPECIES_DOUBLADE] = 2, - [SPECIES_AEGISLASH] = 2, + [SPECIES_AEGISLASH_SHIELD] = 2, [SPECIES_SPRITZEE] = 0, [SPECIES_AROMATISSE] = 0, [SPECIES_SWIRLIX] = 1, @@ -2026,17 +2258,17 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_KLEFKI] = 0, [SPECIES_PHANTUMP] = 1, [SPECIES_TREVENANT] = 1, - [SPECIES_PUMPKABOO] = 2, - [SPECIES_GOURGEIST] = 2, + [SPECIES_PUMPKABOO_AVERAGE] = 2, + [SPECIES_GOURGEIST_AVERAGE] = 2, [SPECIES_BERGMITE] = 0, [SPECIES_AVALUGG] = 0, [SPECIES_NOIBAT] = 2, [SPECIES_NOIVERN] = 2, - [SPECIES_XERNEAS] = 0, + [SPECIES_XERNEAS_NEUTRAL] = 0, [SPECIES_YVELTAL] = 0, - [SPECIES_ZYGARDE] = 1, + [SPECIES_ZYGARDE_50_AURA_BREAK] = 1, [SPECIES_DIANCIE] = 1, - [SPECIES_HOOPA] = 0, + [SPECIES_HOOPA_CONFINED] = 0, [SPECIES_VOLCANION] = 0, [SPECIES_ROWLET] = 0, [SPECIES_DARTRIX] = 1, @@ -2057,12 +2289,12 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_VIKAVOLT] = 0, [SPECIES_CRABRAWLER] = 2, [SPECIES_CRABOMINABLE] = 2, - [SPECIES_ORICORIO] = 0, + [SPECIES_ORICORIO_BAILE] = 0, [SPECIES_CUTIEFLY] = 2, [SPECIES_RIBOMBEE] = 2, [SPECIES_ROCKRUFF] = 2, - [SPECIES_LYCANROC] = 2, - [SPECIES_WISHIWASHI] = 2, + [SPECIES_LYCANROC_MIDDAY] = 2, + [SPECIES_WISHIWASHI_SOLO] = 2, [SPECIES_MAREANIE] = 2, [SPECIES_TOXAPEX] = 0, [SPECIES_MUDBRAY] = 2, @@ -2089,12 +2321,12 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_PALOSSAND] = 2, [SPECIES_PYUKUMUKU] = 0, [SPECIES_TYPE_NULL] = 0, - [SPECIES_SILVALLY] = 0, - [SPECIES_MINIOR] = 2, + [SPECIES_SILVALLY_NORMAL] = 0, + [SPECIES_MINIOR_METEOR_RED] = 2, [SPECIES_KOMALA] = 2, [SPECIES_TURTONATOR] = 0, [SPECIES_TOGEDEMARU] = 2, - [SPECIES_MIMIKYU] = 1, + [SPECIES_MIMIKYU_DISGUISED] = 1, [SPECIES_BRUXISH] = 0, [SPECIES_DRAMPA] = 0, [SPECIES_DHELMISE] = 1, @@ -2165,13 +2397,13 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ARROKUDA] = 2, [SPECIES_BARRASKEWDA] = 2, [SPECIES_TOXEL] = 2, - [SPECIES_TOXTRICITY] = 2, + [SPECIES_TOXTRICITY_AMPED] = 2, [SPECIES_SIZZLIPEDE] = 0, [SPECIES_CENTISKORCH] = 0, [SPECIES_CLOBBOPUS] = 0, [SPECIES_GRAPPLOCT] = 2, - [SPECIES_SINISTEA] = 2, - [SPECIES_POLTEAGEIST] = 2, + [SPECIES_SINISTEA_PHONY] = 2, + [SPECIES_POLTEAGEIST_PHONY] = 2, [SPECIES_HATENNA] = 0, [SPECIES_HATTREM] = 0, [SPECIES_HATTERENE] = 0, @@ -2185,15 +2417,77 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_MR_RIME] = 0, [SPECIES_RUNERIGUS] = 2, [SPECIES_MILCERY] = 1, - [SPECIES_ALCREMIE] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_BERRY_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_BERRY_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_LOVE_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_LOVE_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_STAR_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_STAR_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL] = 1, + [SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_RUBY_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_MINT_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_LEMON_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_SALTED_CREAM] = 1, + [SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL] = 1, + [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = 1, + [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = 1, [SPECIES_FALINKS] = 0, [SPECIES_PINCURCHIN] = 0, [SPECIES_SNOM] = 0, [SPECIES_FROSMOTH] = 0, [SPECIES_STONJOURNER] = 2, - [SPECIES_EISCUE] = 0, - [SPECIES_INDEEDEE] = 2, - [SPECIES_MORPEKO] = 2, + [SPECIES_EISCUE_ICE_FACE] = 0, + [SPECIES_INDEEDEE_MALE] = 2, + [SPECIES_MORPEKO_FULL_BELLY] = 2, [SPECIES_CUFANT] = 0, [SPECIES_COPPERAJAH] = 0, [SPECIES_DRACOZOLT] = 1, @@ -2204,11 +2498,11 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_DREEPY] = 0, [SPECIES_DRAKLOAK] = 0, [SPECIES_DRAGAPULT] = 0, - [SPECIES_ZACIAN] = 2, - [SPECIES_ZAMAZENTA] = 2, + [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = 2, + [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = 2, [SPECIES_ETERNATUS] = 0, [SPECIES_KUBFU] = 1, - [SPECIES_URSHIFU] = 2, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = 2, [SPECIES_ZARUDE] = 1, [SPECIES_REGIELEKI] = 0, [SPECIES_REGIDRAGO] = 0, @@ -2218,10 +2512,11 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_WYRDEER] = 2, [SPECIES_KLEAVOR] = 2, [SPECIES_URSALUNA] = 2, - [SPECIES_BASCULEGION] = 1, + [SPECIES_URSALUNA_BLOODMOON] = 0, + [SPECIES_BASCULEGION_MALE] = 1, [SPECIES_SNEASLER] = 2, [SPECIES_OVERQWIL] = 2, - [SPECIES_ENAMORUS] = 1, + [SPECIES_ENAMORUS_INCARNATE] = 1, [SPECIES_VENUSAUR_MEGA] = 4, [SPECIES_CHARIZARD_MEGA_X] = 0, [SPECIES_CHARIZARD_MEGA_Y] = 0, @@ -2306,7 +2601,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_ZIGZAGOON_GALARIAN] = 0, [SPECIES_LINOONE_GALARIAN] = 0, [SPECIES_DARUMAKA_GALARIAN] = 0, - [SPECIES_DARMANITAN_GALARIAN] = 0, + [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = 0, [SPECIES_YAMASK_GALARIAN] = 2, [SPECIES_STUNFISK_GALARIAN] = 1, [SPECIES_GROWLITHE_HISUIAN] = 0, @@ -2386,7 +2681,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_BASCULIN_BLUE_STRIPED] = 0, [SPECIES_BASCULIN_WHITE_STRIPED] = 0, [SPECIES_DARMANITAN_ZEN_MODE] = 0, - [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = 0, + [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = 0, [SPECIES_DEERLING_SUMMER] = 1, [SPECIES_DEERLING_AUTUMN] = 0, [SPECIES_DEERLING_WINTER] = 2, @@ -2458,7 +2753,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_GOURGEIST_LARGE] = 2, [SPECIES_GOURGEIST_SUPER] = 2, [SPECIES_XERNEAS_ACTIVE] = 0, - [SPECIES_ZYGARDE_10] = 1, + [SPECIES_ZYGARDE_10_AURA_BREAK] = 1, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = 1, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = 1, [SPECIES_ZYGARDE_COMPLETE] = 1, @@ -2508,14 +2803,6 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_TOXTRICITY_LOW_KEY] = 2, [SPECIES_SINISTEA_ANTIQUE] = 2, [SPECIES_POLTEAGEIST_ANTIQUE] = 2, - [SPECIES_ALCREMIE_RUBY_CREAM] = 0, - [SPECIES_ALCREMIE_MATCHA_CREAM] = 0, - [SPECIES_ALCREMIE_MINT_CREAM] = 0, - [SPECIES_ALCREMIE_LEMON_CREAM] = 0, - [SPECIES_ALCREMIE_SALTED_CREAM] = 0, - [SPECIES_ALCREMIE_RUBY_SWIRL] = 0, - [SPECIES_ALCREMIE_CARAMEL_SWIRL] = 0, - [SPECIES_ALCREMIE_RAINBOW_SWIRL] = 0, [SPECIES_EISCUE_NOICE_FACE] = 0, [SPECIES_INDEEDEE_FEMALE] = 2, [SPECIES_MORPEKO_HANGRY] = 2, @@ -2528,12 +2815,181 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_CALYREX_SHADOW_RIDER] = 0, [SPECIES_ENAMORUS_THERIAN] = 1, [SPECIES_BASCULEGION_FEMALE] = 0, + [SPECIES_VENUSAUR_GIGANTAMAX] = 0, + [SPECIES_CHARIZARD_GIGANTAMAX] = 0, + [SPECIES_BLASTOISE_GIGANTAMAX] = 0, + [SPECIES_BUTTERFREE_GIGANTAMAX] = 0, + [SPECIES_PIKACHU_GIGANTAMAX] = 2, + [SPECIES_MEOWTH_GIGANTAMAX] = 1, + [SPECIES_MACHAMP_GIGANTAMAX] = 0, + [SPECIES_GENGAR_GIGANTAMAX] = 2, + [SPECIES_KINGLER_GIGANTAMAX] = 0, + [SPECIES_LAPRAS_GIGANTAMAX] = 2, + [SPECIES_EEVEE_GIGANTAMAX] = 2, + [SPECIES_SNORLAX_GIGANTAMAX] = 3, + [SPECIES_GARBODOR_GIGANTAMAX] = 0, + [SPECIES_MELMETAL_GIGANTAMAX] = 0, + [SPECIES_RILLABOOM_GIGANTAMAX] = 1, + [SPECIES_CINDERACE_GIGANTAMAX] = 0, + [SPECIES_INTELEON_GIGANTAMAX] = 0, + [SPECIES_CORVIKNIGHT_GIGANTAMAX] = 0, + [SPECIES_ORBEETLE_GIGANTAMAX] = 0, + [SPECIES_DREDNAW_GIGANTAMAX] = 0, + [SPECIES_COALOSSAL_GIGANTAMAX] = 0, + [SPECIES_FLAPPLE_GIGANTAMAX] = 1, + [SPECIES_APPLETUN_GIGANTAMAX] = 1, + [SPECIES_SANDACONDA_GIGANTAMAX] = 1, + [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = 0, + [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = 0, + [SPECIES_CENTISKORCH_GIGANTAMAX] = 0, + [SPECIES_HATTERENE_GIGANTAMAX] = 0, + [SPECIES_GRIMMSNARL_GIGANTAMAX] = 0, + [SPECIES_ALCREMIE_GIGANTAMAX] = 1, + [SPECIES_COPPERAJAH_GIGANTAMAX] = 0, + [SPECIES_DURALUDON_GIGANTAMAX] = 0, + [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = 0, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = 0, +#endif +#if P_GEN_9_POKEMON == TRUE + [SPECIES_SPRIGATITO] = 4, + [SPECIES_FLORAGATO] = 1, + [SPECIES_MEOWSCARADA] = 1, + [SPECIES_FUECOCO] = 0, + [SPECIES_CROCALOR] = 0, + [SPECIES_SKELEDIRGE] = 0, + [SPECIES_QUAXLY] = 2, + [SPECIES_QUAXWELL] = 0, + [SPECIES_QUAQUAVAL] = 0, + [SPECIES_LECHONK] = 1, + [SPECIES_OINKOLOGNE_MALE] = 1, + [SPECIES_OINKOLOGNE_FEMALE] = 2, + [SPECIES_TAROUNTULA] = 1, + [SPECIES_SPIDOPS] = 1, + [SPECIES_NYMBLE] = 0, + [SPECIES_LOKIX] = 0, + [SPECIES_PAWMI] = 3, + [SPECIES_PAWMO] = 3, + [SPECIES_PAWMOT] = 3, + [SPECIES_TANDEMAUS] = 0, + [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = 0, + [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = 0, + [SPECIES_FIDOUGH] = 1, + [SPECIES_DACHSBUN] = 0, // TODO + [SPECIES_SMOLIV] = 1, + [SPECIES_DOLLIV] = 1, + [SPECIES_ARBOLIVA] = 5, + [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = 1, + [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = 2, + [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = 1, + [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = 1, + [SPECIES_NACLI] = 2, + [SPECIES_NACLSTACK] = 2, // TODO: recolor + [SPECIES_GARGANACL] = 2, + [SPECIES_CHARCADET] = 1, + [SPECIES_ARMAROUGE] = 0, + [SPECIES_CERULEDGE] = 2, + [SPECIES_TADBULB] = 5, // TODO: Redo to 0 + [SPECIES_BELLIBOLT] = 0, + [SPECIES_WATTREL] = 3, + [SPECIES_KILOWATTREL] = 3, + [SPECIES_MASCHIFF] = 3, + [SPECIES_MABOSSTIFF] = 5, + [SPECIES_SHROODLE] = 0, + [SPECIES_GRAFAIAI] = 0, + [SPECIES_BRAMBLIN] = 3, + [SPECIES_BRAMBLEGHAST] = 5, + [SPECIES_TOEDSCOOL] = 0, + [SPECIES_TOEDSCRUEL] = 0, + [SPECIES_KLAWF] = 0, + [SPECIES_CAPSAKID] = 1, + [SPECIES_SCOVILLAIN] = 1, + [SPECIES_RELLOR] = 5, + [SPECIES_RABSCA] = 0, + [SPECIES_FLITTLE] = 3, + [SPECIES_ESPATHRA] = 5, + [SPECIES_TINKATINK] = 1, + [SPECIES_TINKATUFF] = 4, + [SPECIES_TINKATON] = 4, + [SPECIES_WIGLETT] = 0, + [SPECIES_WUGTRIO] = 0, + [SPECIES_BOMBIRDIER] = 0, + [SPECIES_FINIZEN] = 0, + [SPECIES_PALAFIN_ZERO] = 0, + [SPECIES_PALAFIN_HERO] = 0, + [SPECIES_VAROOM] = 5, + [SPECIES_REVAVROOM] = 5, + [SPECIES_CYCLIZAR] = 1, + [SPECIES_ORTHWORM] = 4, + [SPECIES_GLIMMET] = 0, + [SPECIES_GLIMMORA] = 0, + [SPECIES_GREAVARD] = 2, + [SPECIES_HOUNDSTONE] = 5, + [SPECIES_FLAMIGO] = 4, + [SPECIES_CETODDLE] = 0, + [SPECIES_CETITAN] = 0, + [SPECIES_VELUZA] = 4, + [SPECIES_DONDOZO] = 0, + [SPECIES_TATSUGIRI_CURLY] = 0, + [SPECIES_TATSUGIRI_DROOPY] = 0, + [SPECIES_TATSUGIRI_STRETCHY] = 0, + [SPECIES_ANNIHILAPE] = 0, + [SPECIES_CLODSIRE] = 2, + [SPECIES_FARIGIRAF] = 0, + [SPECIES_DUDUNSPARCE_TWO_SEGMENT] = 0, + [SPECIES_DUDUNSPARCE_THREE_SEGMENT] = 0, + [SPECIES_KINGAMBIT] = 3, + [SPECIES_GREAT_TUSK] = 0, + [SPECIES_SCREAM_TAIL] = 0, + [SPECIES_BRUTE_BONNET] = 1, + [SPECIES_FLUTTER_MANE] = 4, + [SPECIES_SLITHER_WING] = 3, + [SPECIES_SANDY_SHOCKS] = 0, + [SPECIES_IRON_TREADS] = 0, + [SPECIES_IRON_BUNDLE] = 0, + [SPECIES_IRON_HANDS] = 0, + [SPECIES_IRON_JUGULIS] = 2, + [SPECIES_IRON_MOTH] = 3, + [SPECIES_IRON_THORNS] = 1, + [SPECIES_FRIGIBAX] = 3, + [SPECIES_ARCTIBAX] = 0, + [SPECIES_BAXCALIBUR] = 0, + [SPECIES_GIMMIGHOUL_CHEST] = 0, + [SPECIES_GIMMIGHOUL_ROAMING] = 0, + [SPECIES_GHOLDENGO] = 0, + [SPECIES_WO_CHIEN] = 5, + [SPECIES_CHIEN_PAO] = 0, + [SPECIES_TING_LU] = 0, + [SPECIES_CHI_YU] = 0, + [SPECIES_ROARING_MOON] = 3, + [SPECIES_IRON_VALIANT] = 4, + [SPECIES_KORAIDON] = 0, + [SPECIES_MIRAIDON] = 2, + [SPECIES_WALKING_WAKE] = 2, + [SPECIES_IRON_LEAVES] = 1, + [SPECIES_DIPPLIN] = 1, + [SPECIES_POLTCHAGEIST_COUNTERFEIT] = 4, + [SPECIES_POLTCHAGEIST_ARTISAN] = 4, + [SPECIES_SINISTCHA_UNREMARKABLE] = 1, + [SPECIES_SINISTCHA_MASTERPIECE] = 1, + [SPECIES_OKIDOGI] = 1, + [SPECIES_MUNKIDORI] = 0, + [SPECIES_FEZANDIPITI] = 0, + [SPECIES_OGERPON_TEAL_MASK] = 1, + [SPECIES_OGERPON_WELLSPRING_MASK] = 0, + [SPECIES_OGERPON_HEARTHFLAME_MASK] = 0, + [SPECIES_OGERPON_CORNERSTONE_MASK] = 0, + [SPECIES_OGERPON_TEAL_MASK_TERA] = 1, + [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = 0, + [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = 0, + [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = 0, #endif [SPECIES_EGG] = 1, }; const u8 gMonIconPaletteIndicesFemale[] = { + [SPECIES_PIKACHU] = 2, + [SPECIES_WOBBUFFET] = 0, #if P_GEN_4_POKEMON == TRUE [SPECIES_HIPPOPOTAS] = 1, [SPECIES_HIPPOWDON] = 1, diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 9478084d9b..c85d01453f 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -426,288 +426,343 @@ EWRAM_DATA static struct PokemonJumpGfx *sPokemonJumpGfx = NULL; */ static const struct PokemonJumpMons sPokeJumpMons[] = { - { .species = SPECIES_BULBASAUR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHARMANDER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SQUIRTLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CATERPIE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_METAPOD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATTATA_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATICATE_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PH_D, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ORIGINAL_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_HOENN_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_SINNOH_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_UNOVA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_KALOS_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ALOLA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PARTNER_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_WORLD_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SANDSHREW_ALOLAN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VULPIX_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_POLIWAG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BELLSPROUT, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHELLDER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KRABBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_EXEGGCUTE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CUBONE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DITTO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_EEVEE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_OMANYTE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KABUTO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHIKORITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CYNDAQUIL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TOTODILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPINARAK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PICHU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PICHU_SPIKY_EARED, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLEFFA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_IGGLYBUFF, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOGEPI, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MAREEP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BELLOSSOM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MARILL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SUNKERN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOPER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PINECO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SNUBBULL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SHUCKLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TEDDIURSA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SLUGMA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SWINUB, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HOUNDOUR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PHANPY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PORYGON2, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TYROGUE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SMOOCHUM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELEKID, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MAGBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LARVITAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TREECKO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TORCHIC, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MUDKIP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ZIGZAGOON_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LINOONE_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_LOTAD, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SEEDOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RALTS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KIRLIA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SURSKIT, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHROOMISH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NINCADA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WHISMUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_AZURILL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SKITTY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SABLEYE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SABLEYE_MEGA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MAWILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ARON, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MEDITITE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELECTRIKE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PLUSLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MINUN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_VOLBEAT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ILLUMISE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROSELIA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GULPIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NUMEL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TORKOAL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SPOINK, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TRAPINCH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CACNEA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ANORITH, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WYNAUT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SNORUNT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLAMPERL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BAGON, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TURTWIG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHIMCHAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PIPLUP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BIDOOF, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KRICKETOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHINX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BUDEW, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHIELDON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PACHIRISU, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BUIZEL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHERRIM, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHELLOS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHELLOS_EAST_SEA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BONSLY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MIME_JR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_HAPPINY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GIBLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MUNCHLAX, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_RIOLU, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CROAGUNK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHAYMIN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SNIVY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TEPIG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_OSHAWOTT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PATRAT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LILLIPUP, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PURRLOIN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PANSAGE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PANSEAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PANPOUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROGGENROLA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DRILBUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_EXCADRILL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TIMBURR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SEWADDLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SWADLOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VENIPEDE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DARUMAKA_GALARIAN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TRUBBISH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ZORUA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MINCCINO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CINCCINO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_GOTHITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GOTHORITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DEERLING, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_SUMMER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_AUTUMN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_WINTER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KARRABLAST, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FOONGUS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_AMOONGUSS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_JOLTIK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LITWICK, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_AXEW, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_STUNFISK_GALARIAN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_QUILLADIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_FENNEKIN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FROAKIE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_FROGADIER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BUNNELBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SPEWPA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC_FEMALE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DEDENNE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GOOMY, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ROWLET, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DARTRIX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LITTEN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TORRACAT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_POPPLIO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BRIONNE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_YUNGOOS, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GUMSHOOS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_GRUBBIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHARJABUG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CRABRAWLER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ROCKRUFF, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROCKRUFF_OWN_TEMPO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MAREANIE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DEWPIDER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FOMANTIS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MORELULL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SALANDIT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_STUFFUL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BOUNSWEET, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_STEENEE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_WIMPOD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PYUKUMUKU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KOMALA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOGEDEMARU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MIMIKYU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MIMIKYU_BUSTED, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_JANGMO_O, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MARSHADOW, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MELTAN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GROOKEY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_THWACKEY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SCORBUNNY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RABOOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SOBBLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DRIZZILE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BLIPBUG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DOTTLER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NICKIT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GOSSIFLEUR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELDEGOSS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOLOO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CHEWTLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_YAMPER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROLYCOLY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_APPLIN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_APPLETUN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOXEL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SIZZLIPEDE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CLOBBOPUS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HATENNA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HATTREM, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_IMPIDIMP, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ALCREMIE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PINCURCHIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SNOM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MORPEKO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MORPEKO_HANGRY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KUBFU, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BULBASAUR, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CHARMANDER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SQUIRTLE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CATERPIE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_METAPOD, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATTATA_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATICATE_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_PH_D, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ORIGINAL_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_HOENN_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_SINNOH_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_UNOVA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_KALOS_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ALOLA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_PARTNER_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_WORLD_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SANDSHREW_ALOLAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VULPIX_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_POLIWAG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BELLSPROUT, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHELLDER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KRABBY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_EXEGGCUTE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CUBONE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DITTO, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_EEVEE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_OMANYTE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KABUTO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHIKORITA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CYNDAQUIL, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TOTODILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SPINARAK, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PICHU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PICHU_SPIKY_EARED, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CLEFFA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_IGGLYBUFF, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TOGEPI, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MAREEP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BELLOSSOM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MARILL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SUNKERN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_WOOPER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_WOOPER_PALDEAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PINECO, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SNUBBULL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SHUCKLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TEDDIURSA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SLUGMA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SWINUB, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_HOUNDOUR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PHANPY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PORYGON2, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TYROGUE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SMOOCHUM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ELEKID, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MAGBY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_LARVITAR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TREECKO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TORCHIC, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MUDKIP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ZIGZAGOON_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LINOONE_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_LOTAD, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SEEDOT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RALTS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_KIRLIA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SURSKIT, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHROOMISH, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_NINCADA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_WHISMUR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_AZURILL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SKITTY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SABLEYE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SABLEYE_MEGA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MAWILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ARON, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MEDITITE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ELECTRIKE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PLUSLE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MINUN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_VOLBEAT, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ILLUMISE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROSELIA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_GULPIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_NUMEL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TORKOAL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SPOINK, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TRAPINCH, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CACNEA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ANORITH, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_WYNAUT, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SNORUNT, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CLAMPERL, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BAGON, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TURTWIG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CHIMCHAR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PIPLUP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BIDOOF, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KRICKETOT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHINX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BUDEW, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHIELDON, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PACHIRISU, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BUIZEL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHERRIM_OVERCAST, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHELLOS_WEST_SEA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHELLOS_EAST_SEA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BONSLY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MIME_JR, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_HAPPINY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GIBLE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MUNCHLAX, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_RIOLU, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CROAGUNK, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHAYMIN_LAND, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SNIVY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TEPIG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_OSHAWOTT, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PATRAT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_LILLIPUP, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PURRLOIN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PANSAGE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PANSEAR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PANPOUR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROGGENROLA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DRILBUR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_EXCADRILL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TIMBURR, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SEWADDLE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SWADLOON, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VENIPEDE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DARUMAKA_GALARIAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_TRUBBISH, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ZORUA, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MINCCINO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CINCCINO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_GOTHITA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_GOTHORITA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DEERLING_SPRING, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_SUMMER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_AUTUMN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DEERLING_WINTER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_KARRABLAST, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FOONGUS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_AMOONGUSS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_JOLTIK, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_LITWICK, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_AXEW, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_STUNFISK_GALARIAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_QUILLADIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_FENNEKIN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FROAKIE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_FROGADIER, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_BUNNELBY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SCATTERBUG, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SPEWPA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC_MALE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC_FEMALE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DEDENNE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GOOMY, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ROWLET, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_DARTRIX, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LITTEN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_TORRACAT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_POPPLIO, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BRIONNE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_YUNGOOS, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GUMSHOOS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_GRUBBIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CHARJABUG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_CRABRAWLER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ROCKRUFF, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROCKRUFF_OWN_TEMPO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MAREANIE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DEWPIDER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_FOMANTIS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MORELULL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SALANDIT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_STUFFUL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_BOUNSWEET, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_STEENEE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_WIMPOD, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_PYUKUMUKU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_KOMALA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TOGEDEMARU, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MIMIKYU_DISGUISED, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MIMIKYU_BUSTED, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_JANGMO_O, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_MARSHADOW, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MELTAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_GROOKEY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_THWACKEY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SCORBUNNY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RABOOT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SOBBLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DRIZZILE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_BLIPBUG, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_DOTTLER, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_NICKIT, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_GOSSIFLEUR, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ELDEGOSS, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_WOOLOO, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_CHEWTLE, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_YAMPER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ROLYCOLY, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_APPLIN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_APPLETUN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_TOXEL, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SIZZLIPEDE, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_CLOBBOPUS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_HATENNA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_HATTREM, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_IMPIDIMP, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_PINCURCHIN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SNOM, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_MORPEKO_FULL_BELLY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MORPEKO_HANGRY, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_KUBFU, .jumpType = JUMP_TYPE_FAST, }, }; void StartPokemonJump(u16 partyId, MainCallback exitCallback) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 982ce489e2..b6efb82473 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -547,7 +547,7 @@ static const struct WindowTemplate sSummaryTemplate[] = .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, - .width = 4, + .width = 5, .height = 2, .paletteNum = 7, .baseBlock = 387, @@ -559,7 +559,7 @@ static const struct WindowTemplate sSummaryTemplate[] = .width = 9, .height = 2, .paletteNum = 6, - .baseBlock = 395, + .baseBlock = 397, }, [PSS_LABEL_WINDOW_PORTRAIT_SPECIES] = { .bg = 0, @@ -568,7 +568,7 @@ static const struct WindowTemplate sSummaryTemplate[] = .width = 9, .height = 4, .paletteNum = 6, - .baseBlock = 413, + .baseBlock = 415, }, [PSS_LABEL_WINDOW_END] = DUMMY_WIN_TEMPLATE }; @@ -581,7 +581,7 @@ static const struct WindowTemplate sPageInfoTemplate[] = .width = 11, .height = 2, .paletteNum = 6, - .baseBlock = 449, + .baseBlock = 451, }, [PSS_DATA_WINDOW_INFO_ID] = { .bg = 0, @@ -590,7 +590,7 @@ static const struct WindowTemplate sPageInfoTemplate[] = .width = 7, .height = 2, .paletteNum = 6, - .baseBlock = 471, + .baseBlock = 473, }, [PSS_DATA_WINDOW_INFO_ABILITY] = { .bg = 0, @@ -599,7 +599,7 @@ static const struct WindowTemplate sPageInfoTemplate[] = .width = 18, .height = 4, .paletteNum = 6, - .baseBlock = 485, + .baseBlock = 487, }, [PSS_DATA_WINDOW_INFO_MEMO] = { .bg = 0, @@ -608,7 +608,7 @@ static const struct WindowTemplate sPageInfoTemplate[] = .width = 18, .height = 6, .paletteNum = 6, - .baseBlock = 557, + .baseBlock = 559, }, }; static const struct WindowTemplate sPageSkillsTemplate[] = @@ -620,7 +620,7 @@ static const struct WindowTemplate sPageSkillsTemplate[] = .width = 10, .height = 2, .paletteNum = 6, - .baseBlock = 449, + .baseBlock = 451, }, [PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT] = { .bg = 0, @@ -629,7 +629,7 @@ static const struct WindowTemplate sPageSkillsTemplate[] = .width = 10, .height = 2, .paletteNum = 6, - .baseBlock = 469, + .baseBlock = 471, }, [PSS_DATA_WINDOW_SKILLS_STATS_LEFT] = { .bg = 0, @@ -638,7 +638,7 @@ static const struct WindowTemplate sPageSkillsTemplate[] = .width = 6, .height = 6, .paletteNum = 6, - .baseBlock = 489, + .baseBlock = 491, }, [PSS_DATA_WINDOW_SKILLS_STATS_RIGHT] = { .bg = 0, @@ -647,7 +647,7 @@ static const struct WindowTemplate sPageSkillsTemplate[] = .width = 3, .height = 6, .paletteNum = 6, - .baseBlock = 525, + .baseBlock = 527, }, [PSS_DATA_WINDOW_EXP] = { .bg = 0, @@ -656,7 +656,7 @@ static const struct WindowTemplate sPageSkillsTemplate[] = .width = 6, .height = 4, .paletteNum = 6, - .baseBlock = 543, + .baseBlock = 545, }, }; static const struct WindowTemplate sPageMovesTemplate[] = // This is used for both battle and contest moves @@ -668,7 +668,7 @@ static const struct WindowTemplate sPageMovesTemplate[] = // This is used for bo .width = 9, .height = 10, .paletteNum = 6, - .baseBlock = 449, + .baseBlock = 451, }, [PSS_DATA_WINDOW_MOVE_PP] = { .bg = 0, @@ -677,7 +677,7 @@ static const struct WindowTemplate sPageMovesTemplate[] = // This is used for bo .width = 6, .height = 10, .paletteNum = 8, - .baseBlock = 539, + .baseBlock = 541, }, [PSS_DATA_WINDOW_MOVE_DESCRIPTION] = { .bg = 0, @@ -686,7 +686,7 @@ static const struct WindowTemplate sPageMovesTemplate[] = // This is used for bo .width = 20, .height = 4, .paletteNum = 6, - .baseBlock = 599, + .baseBlock = 601, }, }; static const u8 sTextColors[][3] = @@ -2835,8 +2835,9 @@ static void PrintNotEggInfo(void) if (dexNum != 0xFFFF) { + u8 digitCount = (NATIONAL_DEX_COUNT > 999 && IsNationalPokedexEnabled()) ? 4 : 3; StringCopy(gStringVar1, &gText_NumberClear01[0]); - ConvertIntToDecimalStringN(gStringVar2, dexNum, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar2, dexNum, STR_CONV_MODE_LEADING_ZEROS, digitCount); StringAppend(gStringVar1, gStringVar2); if (!IsMonShiny(mon)) { @@ -3470,23 +3471,37 @@ static void PrintRibbonCount(void) PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, x, 1, 0, 0); } +static void BufferStat(u8 *dst, s8 natureMod, u32 stat, u32 strId, u32 n) +{ + static const u8 sTextNatureDown[] = _("{COLOR}{08}"); + static const u8 sTextNatureUp[] = _("{COLOR}{05}"); + static const u8 sTextNatureNeutral[] = _("{COLOR}{01}"); + u8 *txtPtr; + + if (natureMod == 0 || !SUMMARY_SCREEN_NATURE_COLORS) + txtPtr = StringCopy(dst, sTextNatureNeutral); + else if (natureMod > 0) + txtPtr = StringCopy(dst, sTextNatureUp); + else + txtPtr = StringCopy(dst, sTextNatureDown); + + ConvertIntToDecimalStringN(txtPtr, stat, STR_CONV_MODE_RIGHT_ALIGN, n); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(strId, dst); +} + static void BufferLeftColumnStats(void) { - u8 *currentHPString = Alloc(8); - u8 *maxHPString = Alloc(8); - u8 *attackString = Alloc(8); - u8 *defenseString = Alloc(8); - - ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, STR_CONV_MODE_RIGHT_ALIGN, 7); - ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, STR_CONV_MODE_RIGHT_ALIGN, 7); + u8 *currentHPString = Alloc(20); + u8 *maxHPString = Alloc(20); + u8 *attackString = Alloc(20); + u8 *defenseString = Alloc(20); + const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.nature]; DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, maxHPString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, attackString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, defenseString); + BufferStat(currentHPString, 0, sMonSummaryScreen->summary.currentHP, 0, 3); + BufferStat(maxHPString, 0, sMonSummaryScreen->summary.maxHP, 1, 3); + BufferStat(attackString, natureMod[STAT_ATK - 1], sMonSummaryScreen->summary.atk, 2, 7); + BufferStat(defenseString, natureMod[STAT_DEF - 1], sMonSummaryScreen->summary.def, 3, 7); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsLeftColumnLayout); Free(currentHPString); @@ -3502,14 +3517,12 @@ static void PrintLeftColumnStats(void) static void BufferRightColumnStats(void) { - ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, STR_CONV_MODE_RIGHT_ALIGN, 3); + const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.nature]; DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar3); + BufferStat(gStringVar1, natureMod[STAT_SPATK - 1], sMonSummaryScreen->summary.spatk, 0, 3); + BufferStat(gStringVar2, natureMod[STAT_SPDEF - 1], sMonSummaryScreen->summary.spdef, 1, 3); + BufferStat(gStringVar3, natureMod[STAT_SPEED - 1], sMonSummaryScreen->summary.speed, 2, 3); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsRightColumnLayout); } @@ -3750,9 +3763,8 @@ static void PrintMoveDetails(u16 move) if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) { moveEffect = gBattleMoves[move].effect; - #if B_SHOW_SPLIT_ICON == TRUE - ShowSplitIcon(GetBattleMoveSplit(move)); - #endif + if (B_SHOW_SPLIT_ICON == TRUE) + ShowSplitIcon(GetBattleMoveSplit(move)); PrintMovePowerAndAccuracy(move); if (moveEffect != EFFECT_PLACEHOLDER) diff --git a/src/record_mixing.c b/src/record_mixing.c index c5d915a9db..7554316f7d 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -460,20 +460,20 @@ static void Task_MixingRecordsRecv(u8 taskId) task->func = Task_SendPacket; if (Link_AnyPartnersPlayingRubyOrSapphire()) { - StorePtrInTaskData(sSentRecord, &task->tSentRecord); + StorePtrInTaskData(sSentRecord, (u16*) &task->tSentRecord); subTaskId = CreateTask(Task_CopyReceiveBuffer, 80); task->tCopyTaskId = subTaskId; gTasks[subTaskId].tParentTaskId = taskId; - StorePtrInTaskData(sReceivedRecords, &gTasks[subTaskId].tRecvRecords); + StorePtrInTaskData(sReceivedRecords, (u16*) &gTasks[subTaskId].tRecvRecords); sRecordStructSize = sizeof(struct PlayerRecordRS); } else { - StorePtrInTaskData(sSentRecord, &task->tSentRecord); + StorePtrInTaskData(sSentRecord, (u16*) &task->tSentRecord); subTaskId = CreateTask(Task_CopyReceiveBuffer, 80); task->tCopyTaskId = subTaskId; gTasks[subTaskId].tParentTaskId = taskId; - StorePtrInTaskData(sReceivedRecords, &gTasks[subTaskId].tRecvRecords); + StorePtrInTaskData(sReceivedRecords,(u16*) &gTasks[subTaskId].tRecvRecords); sRecordStructSize = sizeof(struct PlayerRecordEmerald); } } @@ -495,7 +495,7 @@ static void Task_SendPacket(u8 taskId) { case 0: // Copy record data chunk to send buffer { - void *recordData = LoadPtrFromTaskData(&task->tSentRecord) + task->tNumChunksSent * BUFFER_CHUNK_SIZE; + void *recordData = LoadPtrFromTaskData((u16*)&task->tSentRecord) + task->tNumChunksSent * BUFFER_CHUNK_SIZE; memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); task->tState++; @@ -537,7 +537,7 @@ static void Task_CopyReceiveBuffer(u8 taskId) { if ((status >> i) & 1) { - void *dest = LoadPtrFromTaskData(&task->tRecvRecords) + task->tNumChunksRecv(i) * BUFFER_CHUNK_SIZE + sRecordStructSize * i; + void *dest = LoadPtrFromTaskData((u16*) &task->tRecvRecords) + task->tNumChunksRecv(i) * BUFFER_CHUNK_SIZE + sRecordStructSize * i; void *src = GetPlayerRecvBuffer(i); if ((task->tNumChunksRecv(i) + 1) * BUFFER_CHUNK_SIZE > sRecordStructSize) memcpy(dest, src, sRecordStructSize - task->tNumChunksRecv(i) * BUFFER_CHUNK_SIZE); @@ -765,9 +765,6 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size struct RecordMixingDaycareMail *mixMail; u8 playerSlot1, playerSlot2; void *ptr; - u8 unusedArr1[MAX_LINK_PLAYERS]; - u8 unusedArr2[MAX_LINK_PLAYERS]; - struct RecordMixingDaycareMail *unusedMixMail[MAX_LINK_PLAYERS]; bool8 canHoldItem[MAX_LINK_PLAYERS][DAYCARE_MON_COUNT]; u8 idxs[MAX_LINK_PLAYERS][2]; u8 numDaycareCanHold; @@ -782,8 +779,6 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size linkPlayerCount = GetLinkPlayerCount(); for (i = 0; i < MAX_LINK_PLAYERS; i++) { - unusedArr1[i] = 0xFF; - unusedArr2[i] = 0; canHoldItem[i][0] = FALSE; canHoldItem[i][1] = FALSE; } @@ -924,7 +919,6 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size for (i = 0; i < MAX_LINK_PLAYERS; i++) { mixMail = &records[multiplayerId * recordSize]; - unusedMixMail[i] = mixMail; } // Choose a random table id to determine who will diff --git a/src/region_map.c b/src/region_map.c index 21c6314d30..8936e668ac 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1124,8 +1124,8 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) { u16 y; u16 x; - u8 mapGroup; - u8 mapNum; + s8 mapGroup; + s8 mapNum; u16 dimensionScale; s16 xOnMap; s16 yOnMap; diff --git a/src/rom_header_rhh.c b/src/rom_header_rhh.c new file mode 100644 index 0000000000..2e141670a7 --- /dev/null +++ b/src/rom_header_rhh.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "constants/expansion.h" + +// Similar to the GF ROM header, this struct allows external programs to +// detect details about Expansion. +// For this structure to be useful we have to maintain backwards binary +// compatibility. This means that we should only ever append data to the +// end. If there are any structs as members then those structs should +// not be modified after being introduced. +struct RHHRomHeader +{ + /*0x00*/ char rhh_magic[6]; // 'RHHEXP'. Useful to locate the header if it shifts. + /*0x06*/ u8 expansionVersionMajor; + /*0x07*/ u8 expansionVersionMinor; + /*0x08*/ u8 expansionVersionPatch; + /*0x09*/ u8 expansionVersionFlags; +}; + +static const struct RHHRomHeader sRHHRomHeader = +{ + .rhh_magic = { 'R', 'H', 'H', 'E', 'X', 'P' }, + .expansionVersionMajor = EXPANSION_VERSION_MAJOR, + .expansionVersionMinor = EXPANSION_VERSION_MINOR, + .expansionVersionPatch = EXPANSION_VERSION_PATCH, + .expansionVersionFlags = (EXPANSION_TAGGED_RELEASE << 0), +}; diff --git a/src/rtc.c b/src/rtc.c index b79f62a3c4..d6f5377d98 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -293,6 +293,26 @@ void RtcCalcLocalTime(void) RtcCalcTimeDifference(&sRtc, &gLocalTime, &gSaveBlock2Ptr->localTimeOffset); } +bool8 IsBetweenHours(s32 hours, s32 begin, s32 end) +{ + if (end < begin) + return hours > begin || hours < end; + else + return hours >= begin && hours < end; +} + +u8 GetTimeOfDay(void) +{ + RtcCalcLocalTime(); + if (IsBetweenHours(gLocalTime.hours, MORNING_EVO_HOUR_BEGIN, MORNING_EVO_HOUR_END)) + return TIME_MORNING; + else if (IsBetweenHours(gLocalTime.hours, DUSK_EVO_HOUR_BEGIN, DUSK_EVO_HOUR_END)) + return TIME_DUSK; + else if (IsBetweenHours(gLocalTime.hours, NIGHT_EVO_HOUR_BEGIN, NIGHT_EVO_HOUR_END)) + return TIME_NIGHT; + return TIME_DAY; +} + void RtcInitLocalTimeOffset(s32 hour, s32 minute) { RtcCalcLocalTimeOffset(0, hour, minute, 0); diff --git a/src/save.c b/src/save.c index 765fb045c3..3f8b25a3a3 100644 --- a/src/save.c +++ b/src/save.c @@ -94,7 +94,6 @@ u16 gSaveUnusedVar2; u16 gSaveAttemptStatus; EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; // Buffer used for reading/writing sectors -EWRAM_DATA static u8 sUnusedVar = 0; void ClearSaveData(void) { diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index f7f0162ff4..e9257debf2 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -41,9 +41,7 @@ enum static EWRAM_DATA u16 sSaveFailedType = {0}; static EWRAM_DATA u16 sClockInfo[2] = {0}; -static EWRAM_DATA u8 sUnused1[12] = {0}; static EWRAM_DATA u8 sWindowIds[2] = {0}; -static EWRAM_DATA u8 sUnused2[4] = {0}; static const struct OamData sClockOamData = { diff --git a/src/scrcmd.c b/src/scrcmd.c index 4b3835422e..288f70d994 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -783,8 +783,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - u16 x; - u16 y; + s16 x; + s16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == MAP_GROUP(UNDEFINED) && mapNum == MAP_NUM(UNDEFINED)) @@ -1420,10 +1420,10 @@ bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx) bool8 ScrCmd_erasebox(struct ScriptContext *ctx) { - u8 left = ScriptReadByte(ctx); - u8 top = ScriptReadByte(ctx); - u8 right = ScriptReadByte(ctx); - u8 bottom = ScriptReadByte(ctx); + u8 UNUSED left = ScriptReadByte(ctx); + u8 UNUSED top = ScriptReadByte(ctx); + u8 UNUSED right = ScriptReadByte(ctx); + u8 UNUSED bottom = ScriptReadByte(ctx); // Menu_EraseWindowRect(left, top, right, bottom); return FALSE; @@ -1431,10 +1431,10 @@ bool8 ScrCmd_erasebox(struct ScriptContext *ctx) bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx) { - u8 left = ScriptReadByte(ctx); - u8 top = ScriptReadByte(ctx); - u8 multichoiceId = ScriptReadByte(ctx); - bool8 ignoreBPress = ScriptReadByte(ctx); + u8 UNUSED left = ScriptReadByte(ctx); + u8 UNUSED top = ScriptReadByte(ctx); + u8 UNUSED multichoiceId = ScriptReadByte(ctx); + bool8 UNUSED ignoreBPress = ScriptReadByte(ctx); /*if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { @@ -1783,8 +1783,8 @@ bool8 ScrCmd_hidemoneybox(struct ScriptContext *ctx) bool8 ScrCmd_updatemoneybox(struct ScriptContext *ctx) { - u8 x = ScriptReadByte(ctx); - u8 y = ScriptReadByte(ctx); + u8 UNUSED x = ScriptReadByte(ctx); + u8 UNUSED y = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); if (!ignore) @@ -1803,8 +1803,8 @@ bool8 ScrCmd_showcoinsbox(struct ScriptContext *ctx) bool8 ScrCmd_hidecoinsbox(struct ScriptContext *ctx) { - u8 x = ScriptReadByte(ctx); - u8 y = ScriptReadByte(ctx); + u8 UNUSED x = ScriptReadByte(ctx); + u8 UNUSED y = ScriptReadByte(ctx); HideCoinsWindow(); return FALSE; @@ -1812,8 +1812,8 @@ bool8 ScrCmd_hidecoinsbox(struct ScriptContext *ctx) bool8 ScrCmd_updatecoinsbox(struct ScriptContext *ctx) { - u8 x = ScriptReadByte(ctx); - u8 y = ScriptReadByte(ctx); + u8 UNUSED x = ScriptReadByte(ctx); + u8 UNUSED y = ScriptReadByte(ctx); PrintCoinsString(GetCoins()); return FALSE; @@ -2128,10 +2128,10 @@ bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) // Below two are functions for elevators in RS, do nothing in Emerald bool8 ScrCmd_addelevmenuitem(struct ScriptContext *ctx) { - u8 v3 = ScriptReadByte(ctx); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - u16 v7 = VarGet(ScriptReadHalfword(ctx)); - u16 v9 = VarGet(ScriptReadHalfword(ctx)); + u8 UNUSED v3 = ScriptReadByte(ctx); + u16 UNUSED v5 = VarGet(ScriptReadHalfword(ctx)); + u16 UNUSED v7 = VarGet(ScriptReadHalfword(ctx)); + u16 UNUSED v9 = VarGet(ScriptReadHalfword(ctx)); //ScriptAddElevatorMenuItem(v3, v5, v7, v9); return FALSE; diff --git a/src/script_menu.c b/src/script_menu.c index d47d459e5e..01b7f6a588 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -273,8 +273,6 @@ static void Task_HandleMultichoiceInput(u8 taskId) bool8 ScriptMenu_YesNo(u8 left, u8 top) { - u8 taskId; - if (FuncIsActiveTask(Task_HandleYesNoInput) == TRUE) { return FALSE; @@ -283,7 +281,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top) { gSpecialVar_Result = 0xFF; DisplayYesNoMenuDefaultYes(); - taskId = CreateTask(Task_HandleYesNoInput, 0x50); + CreateTask(Task_HandleYesNoInput, 0x50); return TRUE; } } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index bfe2e7581a..19b187bddf 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -21,6 +21,7 @@ #include "sprite.h" #include "string_util.h" #include "tv.h" +#include "wild_encounter.h" #include "constants/items.h" #include "constants/battle_frontier.h" @@ -66,12 +67,16 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u struct Pokemon mon; u16 targetSpecies; - CreateMon(&mon, species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + if (OW_SYNCHRONIZE_NATURE >= GEN_6 && (gSpeciesInfo[species].eggGroups[0] == EGG_GROUP_UNDISCOVERED || OW_SYNCHRONIZE_NATURE == GEN_7)) + CreateMonWithNature(&mon, species, level, USE_RANDOM_IVS, PickWildMonNature()); + else + CreateMon(&mon, species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); - // In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted. + // In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS_NORMAL with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted. targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_CHANGE_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { @@ -149,7 +154,10 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) u8 heldItem[2]; ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); + if (OW_SYNCHRONIZE_NATURE > GEN_3) + CreateMonWithNature(&gEnemyParty[0], species, level, USE_RANDOM_IVS, PickWildMonNature()); + else + CreateMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); if (item) { heldItem[0] = item; @@ -164,7 +172,10 @@ void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species1, level1, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (OW_SYNCHRONIZE_NATURE > GEN_3) + CreateMonWithNature(&gEnemyParty[0], species1, level1, 32, PickWildMonNature()); + else + CreateMon(&gEnemyParty[0], species1, level1, 32, 0, 0, OT_ID_PLAYER_ID, 0); if (item1) { heldItem1[0] = item1; @@ -172,7 +183,10 @@ void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem1); } - CreateMon(&gEnemyParty[1], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (OW_SYNCHRONIZE_NATURE > GEN_3) + CreateMonWithNature(&gEnemyParty[1], species2, level2, 32, PickWildMonNature()); + else + CreateMon(&gEnemyParty[1], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0); if (item2) { heldItem2[0] = item2; diff --git a/src/secret_base.c b/src/secret_base.c index 9509cd0fc5..a662acb36e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -519,7 +519,7 @@ bool8 CurMapIsSecretBase(void) void InitSecretBaseAppearance(bool8 hidePC) { u16 secretBaseIdx; - u16 x, y; + s16 x, y; u8 *decorations; u8 *decorPos; @@ -915,7 +915,7 @@ void ShowSecretBaseRegistryMenu(void) static void Task_ShowSecretBaseRegistryMenu(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; LockPlayerFieldControls(); tNumBases = GetNumRegisteredSecretBases(); if (tNumBases != 0) @@ -977,7 +977,7 @@ static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *m static void FinalizeRegistryMenu(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; SetStandardWindowBorderStyle(tMainWindowId, FALSE); tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, tScrollOffset, tSelectedRow); AddRegistryMenuScrollArrows(taskId); @@ -986,13 +986,13 @@ static void FinalizeRegistryMenu(u8 taskId) static void AddRegistryMenuScrollArrows(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, &tScrollOffset); } static void HandleRegistryMenuInput(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; s32 input = ListMenu_ProcessInput(tListTaskId); ListMenuGetScrollAndRow(tListTaskId, &tScrollOffset, &tSelectedRow); @@ -1022,7 +1022,7 @@ static void HandleRegistryMenuInput(u8 taskId) static void ShowRegistryMenuActions(u8 taskId) { struct WindowTemplate template; - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; RemoveScrollIndicatorArrowPair(tArrowTaskId); template = sRegistryWindowTemplates[1]; template.width = GetMaxWidthInMenuTable(sRegistryMenuActions, 2); @@ -1054,7 +1054,7 @@ static void HandleRegistryMenuActionsInput(u8 taskId) static void ShowRegistryMenuDeleteConfirmation(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; ClearStdWindowAndFrame(tMainWindowId, FALSE); ClearStdWindowAndFrame(tActionWindowId, FALSE); ClearWindowTilemap(tMainWindowId); @@ -1074,7 +1074,7 @@ static void ShowRegistryMenuDeleteYesNo(u8 taskId) void DeleteRegistry_Yes_Callback(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; ClearDialogWindowAndFrame(0, FALSE); DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED; @@ -1091,7 +1091,7 @@ static void DeleteRegistry_Yes(u8 taskId) static void DeleteRegistry_No(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; ClearDialogWindowAndFrame(0, FALSE); DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); FinalizeRegistryMenu(taskId); @@ -1100,7 +1100,7 @@ static void DeleteRegistry_No(u8 taskId) static void ReturnToMainRegistryMenu(u8 taskId) { - s16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; AddRegistryMenuScrollArrows(taskId); ClearStdWindowAndFrame(tActionWindowId, FALSE); ClearWindowTilemap(tActionWindowId); @@ -1733,6 +1733,9 @@ void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx) struct SecretBaseRecordMixer mixers[3]; u16 i; + if (linkIdx > 3) + return; + if (FlagGet(FLAG_RECEIVED_SECRET_POWER)) { switch (GetLinkPlayerCount()) diff --git a/src/siirtc.c b/src/siirtc.c index 0e598f7172..1536aecb42 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -66,7 +66,6 @@ extern vu16 GPIOPortDirection; -static u16 sDummy; // unused variable static bool8 sLocked; static int WriteCommand(u8 value); diff --git a/src/slot_machine.c b/src/slot_machine.c index 5ae0f9f1d5..d61a5bcb92 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1116,7 +1116,7 @@ static void PlaySlotMachine_Internal(u8 machineId, MainCallback exitCallback) { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->tMachineId = machineId; - StoreWordInTwoHalfwords(&task->tExitCallback, (intptr_t)exitCallback); + StoreWordInTwoHalfwords((u16*) &task->tExitCallback, (intptr_t)exitCallback); } // Extracts and assigns machineId and exit callback from task. diff --git a/src/sound.c b/src/sound.c index e84bedfec1..d1083eda20 100644 --- a/src/sound.c +++ b/src/sound.c @@ -375,7 +375,7 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) // Set default values // May be overridden depending on mode. - length = 140; + length = 210; reverse = FALSE; release = 0; pitch = 15360; diff --git a/src/start_menu.c b/src/start_menu.c index 7924520fa6..f90fe46d9c 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -311,11 +311,10 @@ static void BuildStartMenuActions(void) } else { - #if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == TRUE - BuildDebugStartMenu(); - #else - BuildNormalStartMenu(); - #endif + if (DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == TRUE) + BuildDebugStartMenu(); + else + BuildNormalStartMenu(); } } diff --git a/src/strings.c b/src/strings.c index 292a5e4ee1..72d6ff3e0a 100644 --- a/src/strings.c +++ b/src/strings.c @@ -207,7 +207,6 @@ const u8 gText_MaleSymbol[] = _("♂"); const u8 gText_FemaleSymbol[] = _("♀"); const u8 gText_LevelSymbol[] = _("{LV}"); const u8 gText_NumberClear01[] = _("{NO}{CLEAR 0x01}"); -const u8 gText_PlusSymbol[] = _("+"); // Unused const u8 gText_RightArrow[] = _("{RIGHT_ARROW}"); // Unused const u8 gText_IDNumber2[] = _("{ID}{NO}"); const u8 gText_Space[] = _(" "); @@ -459,6 +458,7 @@ const u8 gText_ChoosePokemonConfirm[] = _("Choose POKéMON and confirm."); const u8 gText_EnjoyCycling[] = _("Let's enjoy cycling!"); const u8 gText_InUseAlready_PM[] = _("This is in use already."); const u8 gText_AlreadyHoldingOne[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}."); +const u8 gText_WhichAppliance[] = _("Order which\nappliance?"); const u8 gText_NoUse[] = _("No use."); const u8 gText_Able[] = _("ABLE"); const u8 gText_First_PM[] = _("FIRST"); @@ -1754,6 +1754,14 @@ const u8 gText_TrainerHill1F[] = _("1F"); const u8 gText_TrainerHill2F[] = _("2F"); const u8 gText_TrainerHill3F[] = _("3F"); const u8 gText_TrainerHill4F[] = _("4F"); +const u8 gText_LightBulb[] = _("Light bulb"); +const u8 gText_MicrowaveOven[] = _("Microwave oven"); +const u8 gText_WashingMachine[] = _("Washing machine"); +const u8 gText_Refrigerator[] = _("Refrigerator"); +const u8 gText_ElectricFan[] = _("Electric fan"); +const u8 gText_LawnMower[] = _("Lawn mower"); +const u8 gText_ChangeForm[] = _("Change form"); +const u8 gText_ChangeAbility[] = _("Change Ability"); const u8 gText_TeachWhichMoveToPkmn[] = _("Teach which move to {STR_VAR_1}?"); const u8 gText_MoveRelearnerTeachMoveConfirm[] = _("Teach {STR_VAR_2}?"); const u8 gText_MoveRelearnerPkmnLearnedMove[] = _("{STR_VAR_1} learned\n{STR_VAR_2}!"); @@ -1833,131 +1841,4 @@ const u8 gText_Berry[] = _("BERRY"); const u8 gText_Berries[] = _("BERRIES"); const u8 gText_ExpShareOn[] = _("The Exp. Share has been turned on.{PAUSE_UNTIL_PRESS}"); const u8 gText_ExpShareOff[] = _("The Exp. Share has been turned off.{PAUSE_UNTIL_PRESS}"); - -//HGSS_Ui PokedexPlus -#if POKEDEX_PLUS_HGSS == TRUE -const u8 gText_Stats_Buttons[] = _("{A_BUTTON}TOGGLE {DPAD_UPDOWN}MOVES"); -const u8 gText_Stats_Buttons_Decapped[] = _("{A_BUTTON}Toggle {DPAD_UPDOWN}Moves"); -const u8 gText_Stats_HP[] = _("HP"); -const u8 gText_Stats_Attack[] = _("ATK"); -const u8 gText_Stats_Defense[] = _("DEF"); -const u8 gText_Stats_Speed[] = _("SPE"); -const u8 gText_Stats_SpAttack[] = _("SP.A"); -const u8 gText_Stats_SpDefense[] = _("SP.D"); -const u8 gText_Stats_EV_Plus1[] = _("{UP_ARROW_2}"); -const u8 gText_Stats_EV_Plus2[] = _("{UP_ARROW_2}{UP_ARROW_2}"); -const u8 gText_Stats_EV_Plus3[] = _("{UP_ARROW_2}{UP_ARROW_2}{UP_ARROW_2}"); -const u8 gText_Stats_EvStr1Str2[] = _("{STR_VAR_1}{STR_VAR_2}"); -const u8 gText_Stats_MoveSelectedMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); -const u8 gText_Stats_MoveLevel[] = _("LVL"); -const u8 gText_Stats_Gender_0[] = _("♂"); -const u8 gText_Stats_Gender_12_5[] = _("♀ 1/7 ♂"); //_("♀ 12.5 / 87.5 ♂"); -const u8 gText_Stats_Gender_25[] = _("♀ 1/3 ♂"); //_("♀ 25 / 75 ♂"); -const u8 gText_Stats_Gender_50[] = _("♀ 1/1 ♂"); //_("♀ 50 / 50 ♂"); -const u8 gText_Stats_Gender_75[] = _("♀ 3/1 ♂"); //_("♀ 75 / 25 ♂"); -const u8 gText_Stats_Gender_87_5[] = _("♀ 7/1 ♂"); -const u8 gText_Stats_Gender_100[] = _("♀"); -const u8 gText_Stats_CatchRate[] = _("CATCH{0x5B}: "); -const u8 gText_Stats_CatchRate_Legend[] = _("LEGENDARY"); -const u8 gText_Stats_CatchRate_VeryHard[] = _("VERY HARD"); -const u8 gText_Stats_CatchRate_Difficult[] = _("DIFFICULT"); -const u8 gText_Stats_CatchRate_Medium[] = _("MEDIUM"); -const u8 gText_Stats_CatchRate_Relaxed[] = _("RELAXED"); -const u8 gText_Stats_CatchRate_Easy[] = _("EASY"); -const u8 gText_Stats_ExpYield[] = _("EXP YIELD: "); -const u8 gText_Stats_EggCycles[] = _("HATCH STEPS:"); -const u8 gText_Stats_EggCycles_VeryFast[] = _("{EMOJI_BOLT}{EMOJI_DIZZYEGG}"); -const u8 gText_Stats_EggCycles_Fast[] = _("{EMOJI_DIZZYEGG}"); -const u8 gText_Stats_EggCycles_Normal[] = _("{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}"); -const u8 gText_Stats_EggCycles_Slow[] = _("{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}{EMOJI_DIZZYEGG}"); -const u8 gText_Stats_Growthrate[] = _("GROW: "); -const u8 gText_Stats_Friendship[] = _("FRIENDSHIP:"); -const u8 gText_Stats_Friendship_BigAnger[] = _("{EMOJI_BIGANGER}"); -const u8 gText_Stats_Friendship_Neutral[] = _("{EMOJI_NEUTRAL}"); -const u8 gText_Stats_Friendship_Happy[] = _("{EMOJI_HAPPY}"); -const u8 gText_Stats_Friendship_BigSmile[] = _("{EMOJI_BIGSMILE}"); -const u8 gText_Stats_MEDIUM_FAST[] = _("MED. FAST"); -const u8 gText_Stats_ERRATIC[] = _("ERRATIC"); -const u8 gText_Stats_FLUCTUATING[] = _("FLUCTUATING"); -const u8 gText_Stats_MEDIUM_SLOW[] = _("MED. SLOW"); -const u8 gText_Stats_FAST[] = _("FAST"); -const u8 gText_Stats_SLOW[] = _("SLOW"); -const u8 gText_Stats_ContestHeart[] = _("H"); -const u8 gText_Stats_Minus[] = _("-"); -const u8 gText_Stats_eggGroup[] = _("EGG G1:"); -const u8 gText_Stats_eggGroup_Groups[] = _("{STR_VAR_1}/{STR_VAR_2}"); -const u8 gText_Stats_eggGroup_MONSTER[] = _("MONSTER"); -const u8 gText_Stats_eggGroup_WATER_1[] = _("WATER {CIRCLE_1}"); -const u8 gText_Stats_eggGroup_BUG[] = _("BUG"); -const u8 gText_Stats_eggGroup_FLYING[] = _("FLYING"); -const u8 gText_Stats_eggGroup_FIELD[] = _("FIELD"); -const u8 gText_Stats_eggGroup_FAIRY[] = _("FAIRY"); -const u8 gText_Stats_eggGroup_GRASS[] = _("GRASS"); -const u8 gText_Stats_eggGroup_HUMAN_LIKE[] = _("HUMANE"); -const u8 gText_Stats_eggGroup_WATER_3[] = _("WATER {CIRCLE_3}"); -const u8 gText_Stats_eggGroup_MINERAL[] = _("MINERAL"); -const u8 gText_Stats_eggGroup_AMORPHOUS[] = _("AMORPHOUS"); -const u8 gText_Stats_eggGroup_WATER_2[] = _("WATER {CIRCLE_2}"); -const u8 gText_Stats_eggGroup_DITTO[] = _("DITTO"); -const u8 gText_Stats_eggGroup_DRAGON[] = _("DRAGON"); -const u8 gText_Stats_eggGroup_UNDISCOVERED[] = _("---"); -const u8 gText_Dex_SEEN[] = _("SEEN"); -const u8 gText_Dex_OWN[] = _("OWN"); - -const u8 gText_EVO_Buttons[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK"); -const u8 gText_EVO_Buttons_Decapped[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check"); -const u8 gText_EVO_Buttons_PE[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK {START_BUTTON}FORMs"); -const u8 gText_EVO_Buttons_Decapped_PE[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check {START_BUTTON}Froms"); -const u8 gText_EVO_Name[] = _("{STR_VAR_3}:"); -const u8 gText_EVO_PreEvo[] = _("{STR_VAR_1} evolves from {STR_VAR_2}"); -const u8 gText_EVO_PreEvo_PE_Mega[] = _("{STR_VAR_1} mega evolves with {STR_VAR_2}"); -const u8 gText_EVO_FRIENDSHIP[] = _("LvlUp, high friendship"); -const u8 gText_EVO_FRIENDSHIP_DAY[] = _("LvlUp, high friendship, day"); -const u8 gText_EVO_FRIENDSHIP_NIGHT[] = _("Lvlup, high friendship, night"); -const u8 gText_EVO_LEVEL[] = _("LvlUp to {STR_VAR_2}"); -const u8 gText_EVO_TRADE[] = _("Trading"); -const u8 gText_EVO_TRADE_ITEM[] = _("Trading, holding {STR_VAR_2}"); -const u8 gText_EVO_ITEM[] = _("{STR_VAR_2} is used"); -const u8 gText_EVO_LEVEL_ATK_GT_DEF[] = _("LvlUp to {STR_VAR_2}, Atk > Def"); -const u8 gText_EVO_LEVEL_ATK_EQ_DEF[] = _("LvlUp to {STR_VAR_2}, Atk = Def"); -const u8 gText_EVO_LEVEL_ATK_LT_DEF[] = _("LvlUp to {STR_VAR_2}, Atk < Def"); -const u8 gText_EVO_LEVEL_SILCOON[] = _("LvlUp to {STR_VAR_2}, Silcoon persona"); -const u8 gText_EVO_LEVEL_CASCOON[] = _("LvlUp to {STR_VAR_2}, Cascoon persona"); -const u8 gText_EVO_LEVEL_NINJASK[] = _("LvlUp to {STR_VAR_2}"); -const u8 gText_EVO_LEVEL_SHEDINJA[] = _("LvlUp to {STR_VAR_2}, party<6, 1x POKéBALL"); -const u8 gText_EVO_BEAUTY[] = _("LvlUp, high beauty"); -const u8 gText_EVO_LEVEL_FEMALE[] = _("LvlUp to {STR_VAR_2}, is female"); -const u8 gText_EVO_LEVEL_MALE[] = _("LvlUp to {STR_VAR_2}, is male"); -const u8 gText_EVO_LEVEL_NIGHT[] = _("LvlUp to {STR_VAR_2}, night"); -const u8 gText_EVO_LEVEL_DAY[] = _("LvlUp to {STR_VAR_2}, day"); -const u8 gText_EVO_LEVEL_DUSK[] = _("LvlUp to {STR_VAR_2}, dusk (5-6PM)"); -const u8 gText_EVO_ITEM_HOLD_DAY[] = _("LvlUp, holds {STR_VAR_2}, day"); -const u8 gText_EVO_ITEM_HOLD_NIGHT[] = _("LvlUp, holds {STR_VAR_2}, night"); -const u8 gText_EVO_MOVE[] = _("LvlUp, knows {STR_VAR_2}"); -const u8 gText_EVO_MOVE_TYPE[] = _("LvlUp, knows {STR_VAR_2} move"); -const u8 gText_EVO_MAPSEC[] = _("LvlUp on {STR_VAR_2}"); -const u8 gText_EVO_ITEM_MALE[] = _("{STR_VAR_2} used on male"); -const u8 gText_EVO_ITEM_FEMALE[] = _("{STR_VAR_2} used on female"); -const u8 gText_EVO_LEVEL_RAIN[] = _("LvlUp to {STR_VAR_2} while raining"); -const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[] = _("LvlUp with {STR_VAR_2} in party"); -const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[] = _("LvlUp with dark type in party"); -const u8 gText_EVO_TRADE_SPECIFIC_MON[] = _("Traded for {STR_VAR_2}"); -const u8 gText_EVO_SPECIFIC_MAP[] = _("LvlUp on {STR_VAR_2}"); -const u8 gText_EVO_LEVEL_NATURE_AMPED[] = _("LvlUp to {STR_VAR_2}, Amped natures"); -const u8 gText_EVO_LEVEL_NATURE_LOW_KEY[] = _("LvlUp to {STR_VAR_2}, Low Key natures"); -const u8 gText_EVO_CRITICAL_HITS[] = _("Land {STR_VAR_2} critical hits in\nsingle battle"); -const u8 gText_EVO_SCRIPT_TRIGGER_DMG[] = _("Takes at least {STR_VAR_2} HP in damage"); -const u8 gText_EVO_DARK_SCROLL[] = _("ScrllOfDrknss is used"); -const u8 gText_EVO_WATER_SCROLL[] = _("ScrollOfWatrs is used"); -const u8 gText_EVO_ITEM_NIGHT[] = _("{STR_VAR_2} is used, night"); -const u8 gText_EVO_ITEM_DAY[] = _("{STR_VAR_2} is used, day"); -const u8 gText_EVO_ITEM_HOLD[] = _("LvlUp, holds {STR_VAR_2}"); -const u8 gText_EVO_UNKNOWN[] = _("Method unknown"); -const u8 gText_EVO_NONE[] = _("{STR_VAR_1} has no evolution."); - -const u8 gText_FORMS_Buttons_PE[] = _("{A_BUTTON}FORM MODE {START_BUTTON}EVOs"); -const u8 gText_FORMS_Buttons_Decapped_PE[] = _("{START_BUTTON}Evos"); -const u8 gText_FORMS_Buttons_Submenu_PE[] = _("{DPAD_NONE}FORMs {A_BUTTON}CHECK {START_BUTTON}EVOs"); -const u8 gText_FORMS_Buttons_Submenu_Decapped_PE[] = _("{START_BUTTON}Evos"); -const u8 gText_FORMS_NONE[] = _("{STR_VAR_1} has no alternate forms."); -#endif +const u8 gText_BasePointsResetToZero[] = _("{STR_VAR_1}'s base points\nwere all reset to zero!{PAUSE_UNTIL_PRESS}"); diff --git a/src/title_screen.c b/src/title_screen.c index 87bf0d970e..12015b8bd8 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -23,6 +23,12 @@ #include "constants/rgb.h" #include "constants/songs.h" +enum { + TAG_VERSION = 1000, + TAG_PRESS_START_COPYRIGHT, + TAG_LOGO_SHINE, +}; + #define VERSION_BANNER_RIGHT_TILEOFFSET 64 #define VERSION_BANNER_LEFT_X 98 #define VERSION_BANNER_RIGHT_X 162 @@ -158,8 +164,8 @@ static const union AnimCmd *const sVersionBannerRightAnimTable[] = static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = { - .tileTag = 1000, - .paletteTag = 1000, + .tileTag = TAG_VERSION, + .paletteTag = TAG_VERSION, .oam = &sVersionBannerLeftOamData, .anims = sVersionBannerLeftAnimTable, .images = NULL, @@ -169,8 +175,8 @@ static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = static const struct SpriteTemplate sVersionBannerRightSpriteTemplate = { - .tileTag = 1000, - .paletteTag = 1000, + .tileTag = TAG_VERSION, + .paletteTag = TAG_VERSION, .oam = &sVersionBannerRightOamData, .anims = sVersionBannerRightAnimTable, .images = NULL, @@ -183,7 +189,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_EmeraldVersion[] = { .data = gTitleScreenEmeraldVersionGfx, .size = 0x1000, - .tag = 1000 + .tag = TAG_VERSION }, {}, }; @@ -205,75 +211,80 @@ static const struct OamData sOamData_CopyrightBanner = .affineParam = 0, }; -static const union AnimCmd sCopyrightBannerAnim0[] = +static const union AnimCmd sAnim_PressStart_0[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim1[] = +static const union AnimCmd sAnim_PressStart_1[] = { ANIMCMD_FRAME(5, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim2[] = +static const union AnimCmd sAnim_PressStart_2[] = { ANIMCMD_FRAME(9, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim3[] = +static const union AnimCmd sAnim_PressStart_3[] = { ANIMCMD_FRAME(13, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim4[] = +static const union AnimCmd sAnim_PressStart_4[] = { ANIMCMD_FRAME(17, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim5[] = +static const union AnimCmd sAnim_Copyright_0[] = { ANIMCMD_FRAME(21, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim6[] = +static const union AnimCmd sAnim_Copyright_1[] = { ANIMCMD_FRAME(25, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim7[] = +static const union AnimCmd sAnim_Copyright_2[] = { ANIMCMD_FRAME(29, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim8[] = +static const union AnimCmd sAnim_Copyright_3[] = { ANIMCMD_FRAME(33, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim9[] = +static const union AnimCmd sAnim_Copyright_4[] = { ANIMCMD_FRAME(37, 4), ANIMCMD_END, }; -static const union AnimCmd *const sStartCopyrightBannerAnimTable[] = +// The "Press Start" and copyright graphics are each 5 32x8 segments long +#define NUM_PRESS_START_FRAMES 5 +#define NUM_COPYRIGHT_FRAMES 5 + +static const union AnimCmd *const sStartCopyrightBannerAnimTable[NUM_PRESS_START_FRAMES + NUM_COPYRIGHT_FRAMES] = { - sCopyrightBannerAnim0, - sCopyrightBannerAnim1, - sCopyrightBannerAnim2, - sCopyrightBannerAnim3, - sCopyrightBannerAnim4, - sCopyrightBannerAnim5, - sCopyrightBannerAnim6, - sCopyrightBannerAnim7, - sCopyrightBannerAnim8, - sCopyrightBannerAnim9, + sAnim_PressStart_0, + sAnim_PressStart_1, + sAnim_PressStart_2, + sAnim_PressStart_3, + sAnim_PressStart_4, + [NUM_PRESS_START_FRAMES] = + sAnim_Copyright_0, + sAnim_Copyright_1, + sAnim_Copyright_2, + sAnim_Copyright_3, + sAnim_Copyright_4, }; static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate = { - .tileTag = 1001, - .paletteTag = 1001, + .tileTag = TAG_PRESS_START_COPYRIGHT, + .paletteTag = TAG_PRESS_START_COPYRIGHT, .oam = &sOamData_CopyrightBanner, .anims = sStartCopyrightBannerAnimTable, .images = NULL, @@ -286,7 +297,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_PressStart[] = { .data = gTitleScreenPressStartGfx, .size = 0x520, - .tag = 1001 + .tag = TAG_PRESS_START_COPYRIGHT }, {}, }; @@ -295,7 +306,7 @@ static const struct SpritePalette sSpritePalette_PressStart[] = { { .data = gTitleScreenPressStartPal, - .tag = 1001 + .tag = TAG_PRESS_START_COPYRIGHT }, {}, }; @@ -330,8 +341,8 @@ static const union AnimCmd *const sPokemonLogoShineAnimTable[] = static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate = { - .tileTag = 1002, - .paletteTag = 1001, + .tileTag = TAG_LOGO_SHINE, + .paletteTag = TAG_PRESS_START_COPYRIGHT, .oam = &sPokemonLogoShineOamData, .anims = sPokemonLogoShineAnimTable, .images = NULL, @@ -344,15 +355,25 @@ static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] = { .data = sTitleScreenLogoShineGfx, .size = 0x800, - .tag = 1002 + .tag = TAG_LOGO_SHINE }, {}, }; -// code +// Task data for the main title screen tasks (Task_TitleScreenPhase#) +#define tCounter data[0] +#define tSkipToNext data[1] +#define tPointless data[2] // Incremented but never used to do anything. +#define tBg2Y data[3] +#define tBg1Y data[4] + +// Sprite data for sVersionBannerLeftSpriteTemplate / sVersionBannerRightSpriteTemplate +#define sAlphaBlendIdx data[0] +#define sParentTaskId data[1] + static void SpriteCB_VersionBannerLeft(struct Sprite *sprite) { - if (gTasks[sprite->data[1]].data[1] != 0) + if (gTasks[sprite->sParentTaskId].tSkipToNext) { sprite->oam.objMode = ST_OAM_OBJ_NORMAL; sprite->y = VERSION_BANNER_Y_GOAL; @@ -361,15 +382,15 @@ static void SpriteCB_VersionBannerLeft(struct Sprite *sprite) { if (sprite->y != VERSION_BANNER_Y_GOAL) sprite->y++; - if (sprite->data[0] != 0) - sprite->data[0]--; - SetGpuReg(REG_OFFSET_BLDALPHA, gTitleScreenAlphaBlend[sprite->data[0]]); + if (sprite->sAlphaBlendIdx != 0) + sprite->sAlphaBlendIdx--; + SetGpuReg(REG_OFFSET_BLDALPHA, gTitleScreenAlphaBlend[sprite->sAlphaBlendIdx]); } } static void SpriteCB_VersionBannerRight(struct Sprite *sprite) { - if (gTasks[sprite->data[1]].data[1] != 0) + if (gTasks[sprite->sParentTaskId].tSkipToNext) { sprite->oam.objMode = ST_OAM_OBJ_NORMAL; sprite->y = VERSION_BANNER_Y_GOAL; @@ -381,13 +402,16 @@ static void SpriteCB_VersionBannerRight(struct Sprite *sprite) } } +// Sprite data for SpriteCB_PressStartCopyrightBanner +#define sAnimate data[0] +#define sTimer data[1] + static void SpriteCB_PressStartCopyrightBanner(struct Sprite *sprite) { - if (sprite->data[0] == 1) + if (sprite->sAnimate == TRUE) { - sprite->data[1]++; // Alternate between hidden and shown every 16th frame - if (sprite->data[1] & 16) + if (++sprite->sTimer & 16) sprite->invisible = FALSE; else sprite->invisible = TRUE; @@ -404,11 +428,11 @@ static void CreatePressStartBanner(s16 x, s16 y) u8 spriteId; x -= 64; - for (i = 0; i < 5; i++, x += 32) + for (i = 0; i < NUM_PRESS_START_FRAMES; i++, x += 32) { spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); StartSpriteAnim(&gSprites[spriteId], i); - gSprites[spriteId].data[0] = 1; + gSprites[spriteId].sAnimate = TRUE; } } @@ -418,93 +442,122 @@ static void CreateCopyrightBanner(s16 x, s16 y) u8 spriteId; x -= 64; - for (i = 0; i < 5; i++, x += 32) + for (i = 0; i < NUM_COPYRIGHT_FRAMES; i++, x += 32) { spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); - StartSpriteAnim(&gSprites[spriteId], i + 5); + StartSpriteAnim(&gSprites[spriteId], i + NUM_PRESS_START_FRAMES); } } +#undef sAnimate +#undef sTimer + +// Defines for SpriteCB_PokemonLogoShine +enum { + SHINE_MODE_SINGLE_NO_BG_COLOR, + SHINE_MODE_DOUBLE, + SHINE_MODE_SINGLE, +}; + +#define SHINE_SPEED 4 + +#define sMode data[0] +#define sBgColor data[1] + static void SpriteCB_PokemonLogoShine(struct Sprite *sprite) { if (sprite->x < DISPLAY_WIDTH + 32) { - if (sprite->data[0]) // Flash background + // In any mode except SHINE_MODE_SINGLE_NO_BG_COLOR the background + // color will change, in addition to the shine sprite moving. + if (sprite->sMode != SHINE_MODE_SINGLE_NO_BG_COLOR) { u16 backgroundColor; if (sprite->x < DISPLAY_WIDTH / 2) { // Brighten background color - if (sprite->data[1] < 31) - sprite->data[1]++; - if (sprite->data[1] < 31) - sprite->data[1]++; + if (sprite->sBgColor < 31) + sprite->sBgColor++; + if (sprite->sBgColor < 31) + sprite->sBgColor++; } else { // Darken background color - if (sprite->data[1] != 0) - sprite->data[1]--; - if (sprite->data[1] != 0) - sprite->data[1]--; + if (sprite->sBgColor != 0) + sprite->sBgColor--; + if (sprite->sBgColor != 0) + sprite->sBgColor--; } - backgroundColor = _RGB(sprite->data[1], sprite->data[1], sprite->data[1]); - if (sprite->x == DISPLAY_WIDTH / 2 + 12 - || sprite->x == DISPLAY_WIDTH / 2 + 16 - || sprite->x == DISPLAY_WIDTH / 2 + 20 - || sprite->x == DISPLAY_WIDTH / 2 + 24) + backgroundColor = _RGB(sprite->sBgColor, sprite->sBgColor, sprite->sBgColor); + + // Flash the background green for 4 frames of movement. + // Otherwise use the updating color. + if (sprite->x == DISPLAY_WIDTH / 2 + (3 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (4 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (5 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (6 * SHINE_SPEED)) gPlttBufferFaded[0] = RGB(24, 31, 12); else gPlttBufferFaded[0] = backgroundColor; } - sprite->x += 4; + + sprite->x += SHINE_SPEED; } else { + // Sprite has moved fully offscreen gPlttBufferFaded[0] = RGB_BLACK; DestroySprite(sprite); } } -static void SpriteCB_PokemonLogoShine2(struct Sprite *sprite) +static void SpriteCB_PokemonLogoShine_Fast(struct Sprite *sprite) { if (sprite->x < DISPLAY_WIDTH + 32) - sprite->x += 8; + sprite->x += SHINE_SPEED * 2; else DestroySprite(sprite); } -static void StartPokemonLogoShine(u8 flashBg) +static void StartPokemonLogoShine(u8 mode) { u8 spriteId; - switch (flashBg) + switch (mode) { - case 0: - case 2: + case SHINE_MODE_SINGLE_NO_BG_COLOR: + case SHINE_MODE_SINGLE: + // Create one regular shine sprite. + // If mode is SHINE_MODE_SINGLE it will also change the background color. spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId].data[0] = flashBg; + gSprites[spriteId].sMode = mode; break; - case 1: + case SHINE_MODE_DOUBLE: + // Create an invisible sprite with mode set to update the background color spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId].data[0] = flashBg; + gSprites[spriteId].sMode = mode; gSprites[spriteId].invisible = TRUE; + // Create two faster shine sprites spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); - gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2; + gSprites[spriteId].callback = SpriteCB_PokemonLogoShine_Fast; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, -80, 68, 0); - gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2; + gSprites[spriteId].callback = SpriteCB_PokemonLogoShine_Fast; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; break; } } +#undef sMode +#undef sBgColor + static void VBlankCB(void) { ScanlineEffect_InitHBlankDmaTransfer(); @@ -514,9 +567,6 @@ static void VBlankCB(void) SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); } -#define tCounter data[0] -#define tSkipToNext data[1] - void CB2_InitTitleScreen(void) { switch (gMain.state) @@ -573,13 +623,13 @@ void CB2_InitTitleScreen(void) gTasks[taskId].tCounter = 256; gTasks[taskId].tSkipToNext = FALSE; - gTasks[taskId].data[2] = -16; - gTasks[taskId].data[3] = -32; + gTasks[taskId].tPointless = -16; + gTasks[taskId].tBg2Y = -32; gMain.state = 3; break; } case 3: - BeginNormalPaletteFade(PALETTES_ALL, 1, 0x10, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 1, 16, 0, RGB_WHITEALPHA); SetVBlankCallback(VBlankCB); gMain.state = 4; break; @@ -614,7 +664,7 @@ void CB2_InitTitleScreen(void) case 5: if (!UpdatePaletteFade()) { - StartPokemonLogoShine(0); + StartPokemonLogoShine(SHINE_MODE_SINGLE_NO_BG_COLOR); ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE); SetMainCallback2(MainCB2); } @@ -634,7 +684,7 @@ static void MainCB2(void) static void Task_TitleScreenPhase1(u8 taskId) { // Skip to next phase when A, B, Start, or Select is pressed - if (JOY_NEW(A_B_START_SELECT) || gTasks[taskId].data[1] != 0) + if (JOY_NEW(A_B_START_SELECT) || gTasks[taskId].tSkipToNext) { gTasks[taskId].tSkipToNext = TRUE; gTasks[taskId].tCounter = 0; @@ -644,9 +694,9 @@ static void Task_TitleScreenPhase1(u8 taskId) { u16 frameNum = gTasks[taskId].tCounter; if (frameNum == 176) - StartPokemonLogoShine(1); + StartPokemonLogoShine(SHINE_MODE_DOUBLE); else if (frameNum == 64) - StartPokemonLogoShine(2); + StartPokemonLogoShine(SHINE_MODE_SINGLE); gTasks[taskId].tCounter--; } @@ -663,18 +713,21 @@ static void Task_TitleScreenPhase1(u8 taskId) // Create left side of version banner spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].data[0] = 64; - gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].sAlphaBlendIdx = ARRAY_COUNT(gTitleScreenAlphaBlend); + gSprites[spriteId].sParentTaskId = taskId; // Create right side of version banner spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].sParentTaskId = taskId; gTasks[taskId].tCounter = 144; gTasks[taskId].func = Task_TitleScreenPhase2; } } +#undef sParentTaskId +#undef sAlphaBlendIdx + // Create "Press Start" and copyright banners, and slide Pokemon logo up static void Task_TitleScreenPhase2(u8 taskId) { @@ -705,31 +758,31 @@ static void Task_TitleScreenPhase2(u8 taskId) | DISPCNT_OBJ_ON); CreatePressStartBanner(START_BANNER_X, 108); CreateCopyrightBanner(START_BANNER_X, 148); - gTasks[taskId].data[4] = 0; + gTasks[taskId].tBg1Y = 0; gTasks[taskId].func = Task_TitleScreenPhase3; } - if (!(gTasks[taskId].tCounter & 3) && gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2]++; - if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]++; + if (!(gTasks[taskId].tCounter & 3) && gTasks[taskId].tPointless != 0) + gTasks[taskId].tPointless++; + if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].tBg2Y != 0) + gTasks[taskId].tBg2Y++; // Slide Pokemon logo up - yPos = gTasks[taskId].data[3] * 256; + yPos = gTasks[taskId].tBg2Y * 256; SetGpuReg(REG_OFFSET_BG2Y_L, yPos); SetGpuReg(REG_OFFSET_BG2Y_H, yPos / 0x10000); - gTasks[taskId].data[5] = 15; - gTasks[taskId].data[6] = 6; + gTasks[taskId].data[5] = 15; // Unused + gTasks[taskId].data[6] = 6; // Unused } // Show Rayquaza silhouette and process main title screen input static void Task_TitleScreenPhase3(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(START_BUTTON))) + if (JOY_NEW(A_BUTTON) || JOY_NEW(START_BUTTON)) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToMainMenu); } else if (JOY_HELD(CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) @@ -740,30 +793,29 @@ static void Task_TitleScreenPhase3(u8 taskId) && CanResetRTC() == TRUE) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_GoToResetRtcScreen); } else if (JOY_HELD(BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_GoToBerryFixScreen); } else { SetGpuReg(REG_OFFSET_BG2Y_L, 0); SetGpuReg(REG_OFFSET_BG2Y_H, 0); - gTasks[taskId].tCounter++; - if (gTasks[taskId].tCounter & 1) + if (++gTasks[taskId].tCounter & 1) { - gTasks[taskId].data[4]++; - gBattle_BG1_Y = gTasks[taskId].data[4] / 2; + gTasks[taskId].tBg1Y++; + gBattle_BG1_Y = gTasks[taskId].tBg1Y / 2; gBattle_BG1_X = 0; } UpdateLegendaryMarkingColor(gTasks[taskId].tCounter); if ((gMPlayInfo_BGM.status & 0xFFFF) == 0) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToCopyrightScreen); } } diff --git a/src/trade.c b/src/trade.c index 95538ab40b..4976e00912 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1570,13 +1570,6 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player partnerMonIdx %= PARTY_SIZE; partnerSpecies = GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_SPECIES); - // Partner cant trade illegitimate Deoxys or Mew - if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) - { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) - return PARTNER_MON_INVALID; - } - // Can't trade specific species if (gSpeciesInfo[partnerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return PARTNER_MON_INVALID; @@ -2424,12 +2417,6 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int } } - if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) - { - if (!GetMonData(&playerParty[monIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) - return CANT_TRADE_INVALID_MON; - } - // Can't trade specific species if (gSpeciesInfo[species[monIdx]].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return CANT_TRADE_INVALID_MON; @@ -2495,16 +2482,6 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isModernFatefulEncounter) -{ - if (species == SPECIES_DEOXYS || species == SPECIES_MEW) - { - if (!isModernFatefulEncounter) - return TRUE; - } - return FALSE; -} - int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; @@ -2523,10 +2500,6 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; } - // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isModernFatefulEncounter)) - return UR_TRADE_MSG_MON_CANT_BE_TRADED; - // Can't trade specific species if (gSpeciesInfo[playerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return UR_TRADE_MSG_MON_CANT_BE_TRADED; @@ -2575,9 +2548,6 @@ int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 sp { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isModernFatefulEncounter)) - return CANT_REGISTER_MON_NOW; - // Can't trade specific species if (gSpeciesInfo[species].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return CANT_REGISTER_MON; diff --git a/src/trainer_card.c b/src/trainer_card.c index 1535c3d997..225e8241ac 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1078,7 +1078,7 @@ static void PrintPokedexOnCard(void) AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); else AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); - StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6); + StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 4), gText_EmptyString6); if (!sData->isHoenn) { xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 144); diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 78604f2f49..98f5578e30 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -650,7 +650,7 @@ void LoadTrainerHillObjectEventTemplates(void) eventTemplates[i].localId = i + 1; eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); eventTemplates[i].x = sHillData->floors[floorId].map.trainerCoords[i] & 0xF; - eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + 5; + eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + HILL_FLOOR_HEIGHT_MARGIN; bits = i << 2; eventTemplates[i].movementType = ((sHillData->floors[floorId].map.trainerDirections >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].map.trainerRanges >> bits) & 0xF; diff --git a/src/tv.c b/src/tv.c index a3e56e165d..306d0fc9e3 100644 --- a/src/tv.c +++ b/src/tv.c @@ -107,28 +107,27 @@ static bool8 IsAddingPokeNewsDisallowed(u8); static void ClearPokeNewsBySlot(u8); static void TranslateRubyShows(TVShow *); static void TranslateJapaneseEmeraldShows(TVShow *); -static void SetMixedTVShows(TVShow *, TVShow *, TVShow *, TVShow *); +static void SetMixedTVShows(TVShow[TV_SHOWS_COUNT], TVShow[TV_SHOWS_COUNT], TVShow[TV_SHOWS_COUNT], TVShow[TV_SHOWS_COUNT]); static void DeleteExcessMixedShows(void); static void DeactivateShowsWithUnseenSpecies(void); static void DeactivateGameCompleteShowsIfNotUnlocked(void); static s8 FindInactiveShowInArray(TVShow *); -static bool8 TryMixTVShow(TVShow *[], TVShow *[], u8); +static bool8 TryMixTVShow(TVShow *[TV_SHOWS_COUNT], TVShow *[TV_SHOWS_COUNT], u8); static bool8 TryMixNormalTVShow(TVShow *, TVShow *, u8); static bool8 TryMixRecordMixTVShow(TVShow *, TVShow *, u8); static bool8 TryMixOutbreakTVShow(TVShow *, TVShow *, u8); static void DeactivateShow(u8 showIdx); static void DeactivateShowIfNotSeenSpecies(u16, u8); -static void SetMixedPokeNews(PokeNews *, PokeNews *, PokeNews *, PokeNews *); +static void SetMixedPokeNews(PokeNews[POKE_NEWS_COUNT], PokeNews[POKE_NEWS_COUNT], PokeNews[POKE_NEWS_COUNT], PokeNews[POKE_NEWS_COUNT]); static void ClearInvalidPokeNews(void); static void ClearPokeNewsIfGameNotComplete(void); static s8 GetPokeNewsSlotIfActive(PokeNews *, u8); -static void InitTryMixPokeNewsShow(PokeNews *[], PokeNews *[]); +static void InitTryMixPokeNewsShow(PokeNews *[POKE_NEWS_COUNT], PokeNews *[POKE_NEWS_COUNT]); static bool8 TryMixPokeNewsShow(PokeNews *, PokeNews *, s8); static void TVShowDone(void); static void InterviewAfter_FanClubLetter(void); static void InterviewAfter_RecentHappenings(void); static void InterviewAfter_PkmnFanClubOpinions(void); -static void InterviewAfter_Dummy(void); static void InterviewAfter_BravoTrainerPokemonProfile(void); static void InterviewAfter_BravoTrainerBattleTowerProfile(void); static void InterviewAfter_ContestLiveUpdates(void); @@ -1078,7 +1077,6 @@ void InterviewAfter(void) InterviewAfter_PkmnFanClubOpinions(); break; case TVSHOW_DUMMY: - InterviewAfter_Dummy(); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: InterviewAfter_BravoTrainerPokemonProfile(); @@ -1620,11 +1618,6 @@ static void InterviewAfter_PkmnFanClubOpinions(void) show->fanclubOpinions.pokemonNameLanguage = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_LANGUAGE); } -static void InterviewAfter_Dummy(void) -{ - TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; -} - static void TryStartRandomMassOutbreak(void) { u8 i; diff --git a/src/union_room.c b/src/union_room.c index a9a671a9ef..51f96c8adc 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -203,7 +203,6 @@ static EWRAM_DATA union struct WirelessLink_Group *group; struct WirelessLink_URoom *uRoom; } sWirelessLinkMain = {}; -static EWRAM_DATA u32 sUnused = 0; EWRAM_DATA struct RfuGameCompatibilityData gRfuPartnerCompatibilityData = {}; EWRAM_DATA u16 gUnionRoomOfferedSpecies = 0; EWRAM_DATA u8 gUnionRoomRequestedMonType = 0; @@ -4066,7 +4065,7 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *list, boo CopyAndTranslatePlayerName(gStringVar1, player); if (overrideGender) { - playerGender = (player->rfu.data.compatibility.playerTrainerId[overrideGender + 1] >> 3) & 1; + playerGender = (player->rfu.data.compatibility.playerTrainerId[overrideGender - 1] >> 3) & 1; } switch (player->rfu.data.activity & 0x3F) { diff --git a/src/union_room_chat.c b/src/union_room_chat.c index a109624508..c54d49db94 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1953,7 +1953,7 @@ static u8 *GetLimitedMessageStartPtr(void) for (i = 0; i < numChars; i++) { if (*str == CHAR_EXTRA_SYMBOL) - *str++; + str++; str++; } @@ -3115,9 +3115,6 @@ static void DrawKeyboardWindow(void) static void LoadTextEntryWindow(void) { int i; - u8 unused[2]; - unused[0] = 0; - unused[1] = 0xFF; // Pointless, cleared below. The tiles are nonsense anyway, see LoadChatWindowGfx. for (i = 0; i < MAX_MESSAGE_LENGTH; i++) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 1defb73ea9..2aefdedf38 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1115,7 +1115,7 @@ static u8 UNUSED GetPartyIdFromSelectionId_(u8 selectionId) static void LoadAndCreateUpDownSprites(void) { - u16 i, spriteId; + u16 i; LoadSpriteSheet(&sSpriteSheet_UpDown); LoadSpritePalette(&sSpritePalette_UpDown); @@ -1125,7 +1125,7 @@ static void LoadAndCreateUpDownSprites(void) { if (sInfo->enhancements[i] != 0) { - spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0); + u16 spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0); if (spriteId != MAX_SPRITES) { if (sInfo->enhancements[i] != 0) // Always true here @@ -1136,20 +1136,24 @@ static void LoadAndCreateUpDownSprites(void) } } +#define tTimer data[0] + static void SpriteCB_UpDown(struct Sprite *sprite) { - if (sprite->data[0] < 6) + if (sprite->tTimer < 6) sprite->y2 -= 2; - else if (sprite->data[0] < 12) + else if (sprite->tTimer < 12) sprite->y2 += 2; - if (++sprite->data[0] > 60) + if (++sprite->tTimer > 60) { DestroySprite(sprite); sInfo->numEnhancements--; } } +#undef tTimer + static void LoadPartyInfo(void) { u16 i; @@ -1611,12 +1615,15 @@ static void LoadConditionGfx(void) LoadSpritePalette(&spritePalette); } +#define sSpeed data[0] +#define sTargetX data[1] + static void CreateConditionSprite(void) { u16 i; s16 xDiff, xStart; int yStart = 17; - int var = 8; + int speed = 8; struct Sprite **sprites = sMenu->condition; const struct SpriteTemplate *template = &sSpriteTemplate_Condition; @@ -1625,9 +1632,9 @@ static void CreateConditionSprite(void) u8 spriteId = CreateSprite(template, i * xDiff + xStart, yStart, 0); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = var; - gSprites[spriteId].data[1] = (i * xDiff) | 0x20; - gSprites[spriteId].data[2] = i; + gSprites[spriteId].sSpeed = speed; + gSprites[spriteId].sTargetX = (i * xDiff) | 0x20; + gSprites[spriteId].data[2] = i; // Unused StartSpriteAnim(&gSprites[spriteId], i); sprites[i] = &gSprites[spriteId]; } @@ -1656,11 +1663,15 @@ static void SpriteCB_Condition(struct Sprite *sprite) { s16 prevX = sprite->x; - sprite->x += sprite->data[0]; - if ((prevX <= sprite->data[1] && sprite->x >= sprite->data[1]) - || (prevX >= sprite->data[1] && sprite->x <= sprite->data[1])) + // Slide onscreen + sprite->x += sprite->sSpeed; + + // Check if target position has been reached/surpassed + if ((prevX <= sprite->sTargetX && sprite->x >= sprite->sTargetX) + || (prevX >= sprite->sTargetX && sprite->x <= sprite->sTargetX)) { - sprite->x = sprite->data[1]; + // End slide onscreen, become static sprite. + sprite->x = sprite->sTargetX; sprite->callback = SpriteCallbackDummy; } } diff --git a/src/util.c b/src/util.c index 09381fcaf3..77d9cde2f1 100644 --- a/src/util.c +++ b/src/util.c @@ -261,7 +261,7 @@ u32 CalcByteArraySum(const u8 *data, u32 length) return sum; } -void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor) +void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u32 blendColor) { u16 i; for (i = 0; i < numEntries; i++) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 6016e08e69..e3a284c850 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -383,7 +383,7 @@ static u16 GetCurrentMapWildMonHeaderId(void) return HEADER_NONE; } -static u8 PickWildMonNature(void) +u8 PickWildMonNature(void) { u8 i; u8 j; @@ -416,12 +416,10 @@ static u8 PickWildMonNature(void) } } // check synchronize for a pokemon with the same ability - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) + if (OW_SYNCHRONIZE_NATURE < GEN_9 + && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE - #if B_SYNCHRONIZE_NATURE <= GEN_7 - && (Random() % 2 == 0) - #endif - ) + && (OW_SYNCHRONIZE_NATURE == GEN_8 || Random() % 2 == 0)) { return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES; } @@ -435,7 +433,7 @@ static void CreateWildMon(u16 species, u8 level) bool32 checkCuteCharm; ZeroEnemyPartyMons(); - checkCuteCharm = TRUE; + checkCuteCharm = OW_CUTE_CHARM < GEN_9; switch (gSpeciesInfo[species].genderRatio) { @@ -481,33 +479,33 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar switch (area) { case WILD_AREA_LAND: - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_MAGNET_PULL < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_STATIC < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_LIGHTNING_ROD == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_FLASH_FIRE == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_HARVEST == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, LAND_WILD_COUNT)) + if (OW_STORM_DRAIN == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, LAND_WILD_COUNT)) break; wildMonIndex = ChooseWildMonIndex_Land(); break; case WILD_AREA_WATER: - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_MAGNET_PULL < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, WATER_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_STATIC < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, WATER_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_LIGHTNING_ROD == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, WATER_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_FLASH_FIRE == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, WATER_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_HARVEST == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, WATER_WILD_COUNT)) break; - if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, WATER_WILD_COUNT)) + if (OW_STORM_DRAIN == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, WATER_WILD_COUNT)) break; wildMonIndex = ChooseWildMonIndex_WaterRock(); @@ -588,7 +586,7 @@ static bool8 WildEncounterCheck(u32 encounterRate, bool8 ignoreAbility) encounterRate = encounterRate * 3 / 4; else if (ability == ABILITY_STENCH) encounterRate /= 2; - else if (ability == ABILITY_ILLUMINATE) + else if (ability == ABILITY_ILLUMINATE && OW_ILLUMINATE < GEN_9) encounterRate *= 2; else if (ability == ABILITY_WHITE_SMOKE) encounterRate /= 2; @@ -600,10 +598,10 @@ static bool8 WildEncounterCheck(u32 encounterRate, bool8 ignoreAbility) encounterRate /= 2; else if (ability == ABILITY_QUICK_FEET) encounterRate /= 2; - else if (ability == ABILITY_INFILTRATOR) + else if (ability == ABILITY_INFILTRATOR && OW_INFILTRATOR == GEN_8) encounterRate /= 2; else if (ability == ABILITY_NO_GUARD) - encounterRate = encounterRate * 3 / 2; + encounterRate *= 2; } if (encounterRate > MAX_ENCOUNTER_RATE) encounterRate = MAX_ENCOUNTER_RATE; @@ -1114,20 +1112,13 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate) bool8 TryDoDoubleWildBattle(void) { -#if B_DOUBLE_WILD_REQUIRE_2_MONS == TRUE - if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS) -#else - if (GetSafariZoneFlag()) -#endif + if (GetSafariZoneFlag() + || (B_DOUBLE_WILD_REQUIRE_2_MONS == TRUE && GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS)) return FALSE; -#if B_FLAG_FORCE_DOUBLE_WILD != 0 - else if (FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) + else if (B_FLAG_FORCE_DOUBLE_WILD != 0 && FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) return TRUE; -#endif -#if B_DOUBLE_WILD_CHANCE != 0 - else if ((Random() % 100) + 1 <= B_DOUBLE_WILD_CHANCE) + else if (B_DOUBLE_WILD_CHANCE != 0 && ((Random() % 100) + 1 <= B_DOUBLE_WILD_CHANCE)) return TRUE; -#endif return FALSE; } diff --git a/test/battle/ability/anger_shell.c b/test/battle/ability/anger_shell.c new file mode 100644 index 0000000000..6b916e088f --- /dev/null +++ b/test/battle/ability/anger_shell.c @@ -0,0 +1,95 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% of its hp") +{ + bool32 activates = FALSE; + u16 maxHp = 500, hp = 0; + + PARAMETRIZE { hp = 249; activates = FALSE; } + PARAMETRIZE { hp = 100; activates = FALSE; } + PARAMETRIZE { hp = 50; activates = FALSE; } + PARAMETRIZE { hp = 251; activates = TRUE; } + PARAMETRIZE { hp = 255; activates = TRUE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + if (activates) { + ABILITY_POPUP(player, ABILITY_ANGER_SHELL); + } else { + NOT ABILITY_POPUP(player, ABILITY_ANGER_SHELL); + } + } THEN { + if (activates) { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } + } +} + +SINGLE_BATTLE_TEST("Anger Shell lowers Def/Sp.Def by 1 and raises Atk/Sp.Atk/Spd by 1") +{ + u16 maxHp = 500; + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ABILITY_POPUP(player, ABILITY_ANGER_SHELL); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Defense fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Sp. Def fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Attack rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Sp. Atk rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Speed rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Anger Shell activates after all hits from a multi-hit move") +{ + u32 j; + u16 maxHp = 500; + GIVEN { + ASSUME(gBattleMoves[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } + OPPONENT(SPECIES_SHELLDER) { Ability(ABILITY_SKILL_LINK); } // Always hits 5 times. + } WHEN { + TURN { MOVE(opponent, MOVE_DOUBLE_SLAP); } + } SCENE { + for (j = 0; j < 4; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SLAP, opponent); + NOT ABILITY_POPUP(player, ABILITY_ANGER_SHELL); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SLAP, opponent); + ABILITY_POPUP(player, ABILITY_ANGER_SHELL); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index 1c6f740e8b..b406a9ecf3 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin reduces Sp. Def", s16 damage) } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.25), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.33), results[1].damage); } } diff --git a/test/battle/ability/beast_boost.c b/test/battle/ability/beast_boost.c new file mode 100644 index 0000000000..da63bf9c4d --- /dev/null +++ b/test/battle/ability/beast_boost.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_7_POKEMON == TRUE); // Because only Ultra Beasts have this ability +} + +SINGLE_BATTLE_TEST("Beast Boost boosts the most proficient stat when knocking out a target") +{ + u8 stats[] = {1, 1, 1, 1, 1}; + PARAMETRIZE { stats[0] = 255; } + PARAMETRIZE { stats[1] = 255; } + PARAMETRIZE { stats[2] = 255; } + PARAMETRIZE { stats[3] = 255; } + PARAMETRIZE { stats[4] = 255; } + GIVEN { + PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_BEAST_BOOST); + switch(i) { + case 0: + MESSAGE("Nihilego's Beast Boost raised its Attack!"); + break; + case 1: + MESSAGE("Nihilego's Beast Boost raised its Defense!"); + break; + case 2: + MESSAGE("Nihilego's Beast Boost raised its Sp. Atk!"); + break; + case 3: + MESSAGE("Nihilego's Beast Boost raised its Sp. Def!"); + break; + case 4: + MESSAGE("Nihilego's Beast Boost raised its Speed!"); + break; + } + } +} diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 9bef66b19a..54ca0c2907 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -21,10 +21,12 @@ SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); MESSAGE("Wobbuffet is in love with Foe Clefairy!"); } else { - NOT ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - NOT MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); - NOT MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); + MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + } } } } diff --git a/test/battle/ability/defeatist.c b/test/battle/ability/defeatist.c new file mode 100644 index 0000000000..820c7da355 --- /dev/null +++ b/test/battle/ability/defeatist.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_ECHOED_VOICE].split == SPLIT_SPECIAL); +} + +SINGLE_BATTLE_TEST("Defeatist halves Attack when HP <= 50%", s16 damage) +{ + u32 hp; + PARAMETRIZE { hp = 400; } + PARAMETRIZE { hp = 200; } + GIVEN { + PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Defeatist halves Special Attack when HP <= 50%", s16 damage) +{ + u32 hp; + PARAMETRIZE { hp = 400; } + PARAMETRIZE { hp = 200; } + GIVEN { + PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ECHOED_VOICE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ECHOED_VOICE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c new file mode 100644 index 0000000000..e8443ecc5f --- /dev/null +++ b/test/battle/ability/defiant.c @@ -0,0 +1,140 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_DEFIANT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_DEFIANT; } + + GIVEN { + PLAYER(SPECIES_MANKEY) { Ability(abilityLeft); } + PLAYER(SPECIES_PRIMEAPE) { Ability(abilityRight); } + OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target:opponentLeft); MOVE(playerRight, MOVE_TACKLE, target:opponentRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Gyarados's Intimidate cuts Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Gyarados's Intimidate cuts Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(playerRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Primeape's Attack sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Arbok's Intimidate cuts Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Arbok's Intimidate cuts Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(playerRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Primeape's Attack sharply rose!"); + } + } FINALLY { + // -2 from Intimidates and +4 from Defiants gets +2 total + EXPECT_EQ(playerLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + EXPECT_EQ(playerRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + } +} + +// Same as above, but for opponent. +DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_DEFIANT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_DEFIANT; } + + GIVEN { + OPPONENT(SPECIES_MANKEY) { Ability(abilityLeft); } + OPPONENT(SPECIES_PRIMEAPE) { Ability(abilityRight); } + PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(opponentRight, MOVE_TACKLE, target:playerRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Gyarados's Intimidate cuts Foe Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Gyarados's Intimidate cuts Foe Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Primeape's Attack sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Arbok's Intimidate cuts Foe Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Arbok's Intimidate cuts Foe Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Primeape's Attack sharply rose!"); + } + } FINALLY { + // -2 from Intimidates and +4 from Defiants gets +2 total + EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + EXPECT_EQ(opponentRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + } +} + +SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STICKY_WEB); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); + // Switch-in - Sticky Web activates + MESSAGE("Go! Mankey!"); + MESSAGE("Mankey was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Speed fell!"); + // Defiant activates + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } +} diff --git a/test/battle/ability/dragons_maw.c b/test/battle/ability/dragons_maw.c new file mode 100644 index 0000000000..af633d81d0 --- /dev/null +++ b/test/battle/ability/dragons_maw.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dragon's Maw increases Dragon-type move damage", s16 damage) +{ + u32 move; + u16 ability; + + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_DRAGONS_MAW; } + PARAMETRIZE { move = MOVE_DRAGON_CLAW; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_DRAGON_CLAW; ability = ABILITY_DRAGONS_MAW; } + PARAMETRIZE { move = MOVE_DRAGON_BREATH; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_DRAGON_BREATH; ability = ABILITY_DRAGONS_MAW; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].type != TYPE_DRAGON); + ASSUME(gBattleMoves[MOVE_DRAGON_CLAW].type == TYPE_DRAGON); + ASSUME(gBattleMoves[MOVE_DRAGON_BREATH].type == TYPE_DRAGON); + ASSUME(gBattleMoves[MOVE_DRAGON_CLAW].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_DRAGON_BREATH].split == SPLIT_SPECIAL); + PLAYER(SPECIES_REGIDRAGO) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Tackle should be unaffected + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Dragon Claw should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Dragon Breath should be affected + } +} diff --git a/test/battle/ability/earth_eater.c b/test/battle/ability/earth_eater.c new file mode 100644 index 0000000000..a0ba2b54dd --- /dev/null +++ b/test/battle/ability/earth_eater.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Earth Eater heals 25% when hit by ground type moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MUD_SLAP].type == TYPE_GROUND); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_EARTH_EATER); HP(1); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_MUD_SLAP); } + } SCENE { + ABILITY_POPUP(player, ABILITY_EARTH_EATER); + HP_BAR(player, damage: -25); + MESSAGE("Wobbuffet restored HP using its Earth Eater!"); + } +} + +SINGLE_BATTLE_TEST("Earth Eater does not activate if protected") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MUD_SLAP].type == TYPE_GROUND); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_EARTH_EATER); HP(1); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PROTECT); MOVE(opponent, MOVE_MUD_SLAP); } + } SCENE { + NONE_OF { ABILITY_POPUP(player, ABILITY_EARTH_EATER); HP_BAR(player); MESSAGE("Wobbuffet restored HP using its Earth Eater!"); } + } +} + +SINGLE_BATTLE_TEST("Earth Eater activates on status moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SAND_ATTACK].type == TYPE_GROUND); + ASSUME(gBattleMoves[MOVE_SAND_ATTACK].split == SPLIT_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_EARTH_EATER); HP(1); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SAND_ATTACK); } + } SCENE { + ABILITY_POPUP(player, ABILITY_EARTH_EATER); + HP_BAR(player, damage: -25); + MESSAGE("Wobbuffet restored HP using its Earth Eater!"); + } +} diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index 959b583f80..b275c20e1c 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -20,10 +20,12 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } else { - NOT ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - NOT MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); - NOT STATUS_ICON(player, burn: TRUE); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); + MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + STATUS_ICON(player, burn: TRUE); + } } } } diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c index e02f90dc6c..2541d8e36c 100644 --- a/test/battle/ability/flower_gift.c +++ b/test/battle/ability/flower_gift.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") { GIVEN { - PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SUNNY_DAY); } @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather changes") { GIVEN { - PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SUNNY_DAY); } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather c ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Cherrim transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CHERRIM); + EXPECT_EQ(player->species, SPECIES_CHERRIM_OVERCAST); } } @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili { GIVEN { ASSUME(B_WEATHER_FORMS >= GEN_5); - PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SUNNY_DAY); } @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Cherrim transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CHERRIM); + EXPECT_EQ(player->species, SPECIES_CHERRIM_OVERCAST); } } @@ -67,14 +67,14 @@ DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim and its allies b PARAMETRIZE { sunny = FALSE; } PARAMETRIZE { sunny = TRUE; } GIVEN { - PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { if (sunny) TURN { MOVE(playerLeft, MOVE_SUNNY_DAY); } - TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } } SCENE { // sun activates @@ -101,7 +101,7 @@ DOUBLE_BATTLE_TEST("Flower Gift increases the Sp. Def of Cherrim and its allies PARAMETRIZE { sunny = FALSE; } PARAMETRIZE { sunny = TRUE; } GIVEN { - PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -126,4 +126,46 @@ DOUBLE_BATTLE_TEST("Flower Gift increases the Sp. Def of Cherrim and its allies } } +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back when it switches out") +{ + GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { SWITCH(player, 1); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + MESSAGE("Cherrim, that's enough! Come back!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CHERRIM); + } +} + +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back when it uses a move that forces it to switch out") +{ + GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CHERRIM); + } +} + TO_DO_BATTLE_TEST("Flower Gift does not transform Cherrim back to normal when suppressed if Cherrim is Dynamaxed"); diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index 66793ebfb2..df7ecd00a4 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an opponent's m PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, move); } @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from its own move") PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, move); } @@ -75,7 +75,7 @@ DOUBLE_BATTLE_TEST("Forecast transforms Castform in weather from a partner's mov PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -110,10 +110,10 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } - OPPONENT(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } - OPPONENT(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } + OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } + OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } } WHEN { TURN { MOVE(playerRight, move); } } SCENE { @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an ability") PARAMETRIZE { species = SPECIES_GROUDON; ability = ABILITY_DROUGHT; } PARAMETRIZE { species = SPECIES_ABOMASNOW; ability = ABILITY_SNOW_WARNING; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } } WHEN { @@ -193,7 +193,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in primal weather") PARAMETRIZE { species = SPECIES_KYOGRE; ability = ABILITY_PRIMORDIAL_SEA; item = ITEM_BLUE_ORB; } PARAMETRIZE { species = SPECIES_GROUDON; ability = ABILITY_DESOLATE_LAND; item = ITEM_RED_ORB; } GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(species) { Item(item); } } WHEN { @@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in primal weather") SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when weather expires") { GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } @@ -238,14 +238,14 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when weather exp ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CASTFORM); + EXPECT_EQ(player->species, SPECIES_CASTFORM_NORMAL); } } SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm is active") { GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } @@ -260,7 +260,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm i ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CASTFORM); + EXPECT_EQ(player->species, SPECIES_CASTFORM_NORMAL); } } @@ -268,7 +268,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") { KNOWN_FAILING; GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_RAYQUAZA); } WHEN { @@ -285,7 +285,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CASTFORM); + EXPECT_EQ(player->species, SPECIES_CASTFORM_NORMAL); } } @@ -293,7 +293,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform on switch-in") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } @@ -313,7 +313,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform on switch-in") SINGLE_BATTLE_TEST("Forecast transforms Castform when weather changes") { GIVEN { - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } @@ -336,7 +336,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when its ability { GIVEN { ASSUME(B_WEATHER_FORMS >= GEN_5); - PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SUNNY_DAY); } @@ -350,6 +350,48 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when its ability ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); } THEN { - EXPECT_EQ(player->species, SPECIES_CASTFORM); + EXPECT_EQ(player->species, SPECIES_CASTFORM_NORMAL); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform back when it switches out") +{ + GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { SWITCH(player, 1); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + MESSAGE("Castform, that's enough! Come back!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform back when it uses a move that forces it to switch out") +{ + GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM); } } diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c new file mode 100644 index 0000000000..d44bfb4d4e --- /dev/null +++ b/test/battle/ability/gale_wings.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP") +{ + u16 hp; + PARAMETRIZE { hp = 100; } + PARAMETRIZE { hp = 99; } + GIVEN { + ASSUME(B_GALE_WINGS >= GEN_7); + ASSUME(gBattleMoves[MOVE_AERIAL_ACE].type == TYPE_FLYING); + PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(100);}; + } WHEN { + TURN { MOVE(player, MOVE_AERIAL_ACE); } + } SCENE { + if (hp == 100) { + MESSAGE("Talonflame used Aerial Ace!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } + else { + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Talonflame used Aerial Ace!"); + } + } +} + +SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves") +{ + u32 move; + PARAMETRIZE { move = MOVE_AERIAL_ACE; } + PARAMETRIZE { move = MOVE_FLARE_BLITZ; } + GIVEN { + ASSUME(B_GALE_WINGS >= GEN_7); + ASSUME(gBattleMoves[MOVE_AERIAL_ACE].type == TYPE_FLYING); + ASSUME(gBattleMoves[MOVE_FLARE_BLITZ].type == TYPE_FIRE); + PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(100);}; + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (move == MOVE_AERIAL_ACE) { + MESSAGE("Talonflame used Aerial Ace!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } + else { + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Talonflame used Flare Blitz!"); + } + } +} + +TO_DO_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Hidden Power, Natural Gift, Judgment or Tera Blast"); diff --git a/test/battle/ability/harvest.c b/test/battle/ability/harvest.c new file mode 100644 index 0000000000..9fb969b036 --- /dev/null +++ b/test/battle/ability/harvest.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Harvest has a 50% chance to restore a Berry at the end of the turn"); +TO_DO_BATTLE_TEST("Harvest always restores a Berry in Sunlight"); +TO_DO_BATTLE_TEST("Harvest restores a Berry even after being switched out and back in"); +TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Fling"); +TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Natural Gift"); +TO_DO_BATTLE_TEST("Harvest only works once per turn"); // Check for berries that are consumed immediately, like Pecha Berry +TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when destroyed by Incinerate"); +TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when knocked off by Knock Off"); +TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when eaten by Bug Bite/Pluck"); +TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry that's collected via Pickup"); +TO_DO_BATTLE_TEST("Harvest order is affected by speed"); +TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when transfered to another Pokémon"); +TO_DO_BATTLE_TEST("Harvest can restore a Berry that was transferred from another Pokémon"); +TO_DO_BATTLE_TEST("Harvest can only restore the newest berry consumed that was transferred from another Pokémon instead of its original Berry"); diff --git a/test/battle/ability/hunger_switch.c b/test/battle/ability/hunger_switch.c index c0802d6643..2b39bde589 100644 --- a/test/battle/ability/hunger_switch.c +++ b/test/battle/ability/hunger_switch.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the turn") { u16 species; - PARAMETRIZE { species = SPECIES_MORPEKO; } + PARAMETRIZE { species = SPECIES_MORPEKO_FULL_BELLY; } PARAMETRIZE { species = SPECIES_MORPEKO_HANGRY; } GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); @@ -17,9 +17,9 @@ SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the tur MESSAGE("Foe Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } THEN { - if (species == SPECIES_MORPEKO) + if (species == SPECIES_MORPEKO_FULL_BELLY) EXPECT_EQ(player->species, SPECIES_MORPEKO_HANGRY); else - EXPECT_EQ(player->species, SPECIES_MORPEKO); + EXPECT_EQ(player->species, SPECIES_MORPEKO_FULL_BELLY); } } diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index ac942039bb..8e5c0a40ba 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -7,9 +7,9 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents intimidate") s16 turnTwoHit; GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TACKLE); } @@ -19,17 +19,137 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Attack was not lowered!"); + MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); } } -TO_DO_BATTLE_TEST("Hyper Cutter prevents Attack stage reduction from moves"); // Growl -TO_DO_BATTLE_TEST("Hyper Cutter doesn't prevent Attack stage reduction from moves used by the user"); // e.g. Superpower -TO_DO_BATTLE_TEST("Hyper Cutter doesn't prevent Attack reduction from burn"); -TO_DO_BATTLE_TEST("Hyper Cutter doesn't prevent receiving negative Attack stage changes from Baton Pass"); -TO_DO_BATTLE_TEST("Hyper Cutter doesn't prevent Topsy-Turvy"); -TO_DO_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting positive Attack stage changes"); -TO_DO_BATTLE_TEST("Hyper Cutter is ignored by Mold Breaker"); +SINGLE_BATTLE_TEST("Hyper Cutter prevents Attack stage reduction from moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); + MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack reduction from burn") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(player, MOVE_WILL_O_WISP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WILL_O_WISP, player); + MESSAGE("Foe Krabby was burned!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter is ignored by Mold Breaker") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); } + } SCENE { + ABILITY_POPUP(player, ABILITY_MOLD_BREAKER); + MESSAGE("Pinsir breaks the mold!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); + MESSAGE("Foe Krabby's Attack fell!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); + MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + } + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack stage reduction from moves used by the user") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SUPERPOWER].effect == EFFECT_SUPERPOWER); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUPERPOWER); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); + MESSAGE("Foe Krabby's Attack fell!"); + MESSAGE("Foe Krabby's Defense fell!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Topsy-Turvy") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + ASSUME(gBattleMoves[MOVE_TOPSY_TURVY].effect == EFFECT_TOPSY_TURVY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_TOPSY_TURVY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); + MESSAGE("Foe Krabby's Attack sharply rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); + MESSAGE("Foe Krabby's stat changes were all reversed!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting positive Attack stage changes") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + ASSUME(gBattleMoves[MOVE_SPECTRAL_THIEF].effect == EFFECT_SPECTRAL_THIEF); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_SPECTRAL_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); + MESSAGE("Foe Krabby's Attack sharply rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); + MESSAGE("Wobbuffet stole the target's boosted stats!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent receiving negative Attack stage changes from Baton Pass") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + ASSUME(gBattleMoves[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); + MOVE(opponent, MOVE_BATON_PASS); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + MESSAGE("2 sent out Krabby!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + } +} diff --git a/test/battle/ability/ice_scales.c b/test/battle/ability/ice_scales.c new file mode 100644 index 0000000000..2bbe7dab05 --- /dev/null +++ b/test/battle/ability/ice_scales.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_8_POKEMON == TRUE); // Because only Frosmoth can have this ability. +} + +SINGLE_BATTLE_TEST("Ice Scales halves the damage from special moves", s16 damage) +{ + u32 move; + u16 ability; + PARAMETRIZE { ability = ABILITY_SHIELD_DUST; move = MOVE_PSYCHIC; } + PARAMETRIZE { ability = ABILITY_ICE_SCALES; move = MOVE_PSYCHIC; } + PARAMETRIZE { ability = ABILITY_SHIELD_DUST; move = MOVE_PSYSHOCK; } + PARAMETRIZE { ability = ABILITY_ICE_SCALES; move = MOVE_PSYSHOCK; } + PARAMETRIZE { ability = ABILITY_SHIELD_DUST; move = MOVE_TACKLE; } + PARAMETRIZE { ability = ABILITY_ICE_SCALES; move = MOVE_TACKLE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_PSYCHIC].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_PSYSHOCK].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_PSYSHOCK].effect == EFFECT_PSYSHOCK); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_FROSMOTH) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(0.5), results[1].damage); // Ice Scales halves the damage of Psychic + EXPECT_MUL_EQ(results[2].damage, UQ_4_12(0.5), results[3].damage); // Ice Scales halves the damage of Psyshock, even if it targets Defense + EXPECT_EQ(results[4].damage, results[5].damage); // Ice Scales doesn't affect the damage of physical moves + } +} diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 574c860a74..ecd71272cb 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_INNER_FOCUS); - MESSAGE("Foe Zubat's Attack was not lowered!"); + MESSAGE("Foe Zubat's Inner Focus prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 2c052b5a67..595a9451c3 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -4,11 +4,12 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") { u32 move; - PARAMETRIZE { move = MOVE_WILL_O_WISP; } - PARAMETRIZE { move = MOVE_HYPNOSIS; } - PARAMETRIZE { move = MOVE_THUNDER_WAVE; } - PARAMETRIZE { move = MOVE_TOXIC; } - PARAMETRIZE { move = MOVE_POWDER_SNOW; } + u16 status; + PARAMETRIZE { move = MOVE_WILL_O_WISP; status = STATUS1_BURN; } + PARAMETRIZE { move = MOVE_HYPNOSIS; status = STATUS1_SLEEP; } + PARAMETRIZE { move = MOVE_THUNDER_WAVE; status = STATUS1_PARALYSIS; } + PARAMETRIZE { move = MOVE_TOXIC; status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } GIVEN { ASSUME(gBattleMoves[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); @@ -20,39 +21,17 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") } WHEN { TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, move); } } SCENE { - switch (move) - { - case MOVE_WILL_O_WISP: - MESSAGE("Foe Wobbuffet used Will-o-Wisp!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WILL_O_WISP, opponent); + if (move != MOVE_POWDER_SNOW) { + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + NOT STATUS_ICON(player, status); + } else { + NONE_OF { ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - MESSAGE("It doesn't affect Leafeon…"); - break; - case MOVE_HYPNOSIS: - MESSAGE("Foe Wobbuffet used Hypnosis!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, opponent); - ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - MESSAGE("It doesn't affect Leafeon…"); - break; - case MOVE_THUNDER_WAVE: - MESSAGE("Foe Wobbuffet used Thunder Wave!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, opponent); - ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - MESSAGE("It doesn't affect Leafeon…"); - break; - case MOVE_TOXIC: - MESSAGE("Foe Wobbuffet used Toxic!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); - ABILITY_POPUP(player, ABILITY_LEAF_GUARD); - MESSAGE("It doesn't affect Leafeon…"); - break; - case MOVE_POWDER_SNOW: - MESSAGE("Foe Wobbuffet used Powder Snow!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, opponent); - MESSAGE("It's super effective!"); - break; + STATUS_ICON(player, status); + } } - NONE_OF { STATUS_ICON(player, status1: TRUE); } } } @@ -89,7 +68,9 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_REST); } } SCENE { MESSAGE("But it failed!"); - NOT STATUS_ICON(player, sleep: TRUE); - NONE_OF { HP_BAR(player); } + NONE_OF { + STATUS_ICON(player, sleep: TRUE); + HP_BAR(player); + } } } diff --git a/test/battle/ability/limber.c b/test/battle/ability/limber.c index 87d4177ffd..9ba2760c87 100644 --- a/test/battle/ability/limber.c +++ b/test/battle/ability/limber.c @@ -10,7 +10,9 @@ SINGLE_BATTLE_TEST("Limber prevents paralysis") TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); } } SCENE { HP_BAR(player); - NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); } - NONE_OF { STATUS_ICON(player, paralysis: TRUE); } + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); + STATUS_ICON(player, paralysis: TRUE); + } } } diff --git a/test/battle/ability/neuroforce.c b/test/battle/ability/neuroforce.c new file mode 100644 index 0000000000..df15bd4511 --- /dev/null +++ b/test/battle/ability/neuroforce.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_7_POKEMON == TRUE); // Because only Necrozma can have this ability. +} + +SINGLE_BATTLE_TEST("Neuroforce increases the strength of super-effective moves by 25%", s16 damage) +{ + u32 move; + u16 ability; + PARAMETRIZE { ability = ABILITY_NEUROFORCE; move = MOVE_SHADOW_BALL; } + PARAMETRIZE { ability = ABILITY_KLUTZ; move = MOVE_SHADOW_BALL; } + PARAMETRIZE { ability = ABILITY_NEUROFORCE; move = MOVE_TACKLE; } + PARAMETRIZE { ability = ABILITY_KLUTZ; move = MOVE_TACKLE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SHADOW_BALL].type == TYPE_GHOST); + ASSUME(gBattleMoves[MOVE_TACKLE].type == TYPE_NORMAL); + PLAYER(SPECIES_NECROZMA_ULTRA) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, UQ_4_12(1.25), results[0].damage); // Neuroforce boosts the power of super-effective moves + EXPECT_EQ(results[2].damage, results[3].damage); // Neuroforce doesn't boost the power of other moves + } +} diff --git a/test/battle/ability/oblivious.c b/test/battle/ability/oblivious.c index 51d27bb169..b851256acc 100644 --- a/test/battle/ability/oblivious.c +++ b/test/battle/ability/oblivious.c @@ -63,6 +63,6 @@ SINGLE_BATTLE_TEST("Oblivious prevents Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_OBLIVIOUS); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - MESSAGE("Slowpoke's Attack was not lowered!"); + MESSAGE("Slowpoke's Oblivious prevents stat loss!"); } } diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c new file mode 100644 index 0000000000..2f0c5c8c84 --- /dev/null +++ b/test/battle/ability/opportunist.c @@ -0,0 +1,106 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Opportunist only copies foe's positive stat changes in a turn", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_NONE; } + PARAMETRIZE { ability = ABILITY_OPPORTUNIST; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SHELL_SMASH); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_NONE) { + 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_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); + // stat boosts should be the same + EXPECT_EQ(player->statStages[STAT_ATK], opponent->statStages[STAT_ATK]); + EXPECT_EQ(player->statStages[STAT_SPATK], opponent->statStages[STAT_SPATK]); + EXPECT_EQ(player->statStages[STAT_SPEED], opponent->statStages[STAT_SPEED]); + // opportunist should not copy stat drops from shell smash + EXPECT_LT(player->statStages[STAT_DEF], opponent->statStages[STAT_DEF]); + EXPECT_LT(player->statStages[STAT_SPDEF], opponent->statStages[STAT_SPDEF]); + } +} + + +DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimidate against Contrary foe in a double battle", s16 damageLeft, s16 damageRight) +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_CONTRARY; abilityRight = ABILITY_CONTRARY; } + PARAMETRIZE { abilityLeft = ABILITY_TANGLED_FEET; abilityRight = ABILITY_TANGLED_FEET; } + PARAMETRIZE { abilityLeft = ABILITY_CONTRARY; abilityRight = ABILITY_TANGLED_FEET; } + PARAMETRIZE { abilityLeft = ABILITY_TANGLED_FEET; abilityRight = ABILITY_CONTRARY; } + + GIVEN { + PLAYER(SPECIES_MIGHTYENA) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_OPPORTUNIST); } + OPPONENT(SPECIES_SPINDA) { Ability(abilityLeft); } + OPPONENT(SPECIES_SPINDA) { Ability(abilityRight); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); MOVE(opponentRight, MOVE_TACKLE, target: playerRight); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + if (abilityLeft == ABILITY_CONTRARY) { + ABILITY_POPUP(opponentLeft, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Spinda's Attack rose!"); + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + } + if (abilityRight == ABILITY_CONTRARY) { + ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Spinda's Attack rose!"); + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + } + + if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) + || (abilityLeft != ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY)) { + ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); + MESSAGE("Wobbuffet copied its opponent's stat changes!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wobbuffet's Attack rose!"); + } else if (abilityLeft == ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY) { + ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST); + MESSAGE("Wobbuffet copied its opponent's stat changes!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wobbuffet's Attack sharply rose!"); + } + + HP_BAR(playerLeft, captureDamage: &results[i].damageLeft); + HP_BAR(playerRight, captureDamage: &results[i].damageRight); + } THEN { + EXPECT_EQ(opponentLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + (abilityLeft == ABILITY_CONTRARY ? 1 : - 1)); + EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + (abilityRight == ABILITY_CONTRARY ? 1 : - 1)); + if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) + || (abilityLeft != ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY)) { + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } else if (abilityLeft == ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY) { + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } + } + FINALLY { + EXPECT_MUL_EQ(results[1].damageLeft, Q_4_12(2.25), results[0].damageLeft); + EXPECT_MUL_EQ(results[1].damageRight, Q_4_12(2.25), results[0].damageRight); + } +} + +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"); diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index 4c6a3167f6..9babd52589 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Attack was not lowered!"); + MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c new file mode 100644 index 0000000000..9d0598304d --- /dev/null +++ b/test/battle/ability/parental_bond.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Parental Bond converts Tackle into a two-strike move") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split != SPLIT_STATUS); + ASSUME(gBattleMoves[MOVE_TACKLE].strikeCount < 2); + ASSUME(gBattleMoves[MOVE_TACKLE].effect == EFFECT_HIT); + PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, megaEvolve: TRUE); 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); + MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } THEN { + EXPECT_EQ(player->species, SPECIES_KANGASKHAN_MEGA); + } +} + +TO_DO_BATTLE_TEST("Parental Bond tests"); + +// Temporary TODO: Convert Bulbapedia description into tests. +/* +In battle +Parental Bond causes most damaging moves used by the Pokémon to become two-strike moves. It does not affect multi-strike moves. + +If a move could hit multiple targets (including allies), such as Earthquake and Rock Slide, it will not strike twice; however, if it can only hit a single Pokémon, such as in a Single Battle or if using a move that can hit multiple targets when only one target is in range, it will strike twice. If a move could hit multiple Pokémon but only hits one due to missing the other Pokémon, it will only strike once. + +Since Parental Bond turns moves into two-hit multi-strike moves, each strike has a separate chance to be a critical hit, items and Abilities that trigger upon strike or contact such as Cursed Body and Rocky Helmet occur for each strike, and Spiky Shield and King's Shield only damage and decrease Attack (respectively) once if they protect a Pokémon from a contact move used by a Pokémon with Parental Bond. Additionally, there is only one accuracy check, so either both strikes hit or both strikes miss. + +Any attack which has a secondary effect (except Secret Power) has the same secondary effect on both strikes (such as Power-Up Punch); if a secondary effect has a certain chance of occurring, each strike has an independent chance of activating that effect. Even if the Pokémon's Ability is changed to Mummy after the first strike, it will continue to make a second strike regardless. Pay Day scatters coins after the first strike only. Incinerate destroys applicable held items after each strike. + +Unlike other secondary effects, Secret Power's secondary effect can only occur after the final strike. If a move has recoil damage, the recoil will be based on the damage dealt by both strikes, but will be taken after the final strike; Struggle will inflict recoil damage equal to half the user's maximum HP (after the final strike). Moves that switch the target out and moves that switch the user out strike twice, then force a Pokémon to switch out after both strikes are conducted. Thief, Covet, Bug Bite, and Pluck do not steal or eat the target's held item until after the final strike, so if the target could use its item after the first strike (e.g. due to low HP), it will use it before the attacker can steal or eat it. Smelling Salts, Wake-Up Slap, and Knock Off do not cure the target's status condition or remove its held item (respectively) until after the final strike, so both strikes get the increased power. Fire-type moves, Scald, and Steam Eruption thaw a frozen target after the final strike (so a frozen target cannot be thawed and then burned by the same move). Smack Down and Thousand Arrows only cause the target to fall to the ground after the final strike. If Meloetta has Parental Bond and uses Relic Song, it will change Forme only once, after the final strike. Burn Up does not remove the user's Fire type until after the second strike (so both strikes receive same-type attack bonus). + +If a Pokémon with Parental Bond uses an Electric-type move on a Pokémon with Lightning Rod, or a Water-type move on a Pokémon with Storm Drain, the effect of raising the target's Special Attack will only happen once. + +If Present heals the target it will only strike once, but if it damages the target it will strike twice (the second strike will always damage the target). Fixed-damage moves (such as Seismic Toss and Dragon Rage) deal the full amount of damage for both strikes. The damage dealt by Psywave is generated separately for each strike, and the second strike's damage is not halved. Each strike of Super Fang halves the target's HP (effectively quartering it if HP is not changed between strikes). Counter, Mirror Coat, Metal Burst, and Bide deal the full amount of damage for both strikes. The first strike of Assurance counts as previously taking damage for the second strike, giving it increased power. Fury Cutter and Echoed Voice only consider uses of the move rather than hits, so the second strike's power is not boosted by the first strike. Grass Pledge, Fire Pledge, and Water Pledge strike twice, even when used as a combination move. Natural Gift and Spit Up strike twice. Moves that require recharging after use strike twice, but the user only needs to recharge for one turn. + +One-hit knockout moves, Fling, Self-Destruct, Explosion, Final Gambit, Uproar, Rollout, and Ice Ball only strike once. (Other consecutively executed moves, such as Outrage, can strike twice.) Moves with a charging turn (such as Fly and Solar Beam) only strike once, even if the Pokémon becomes fully charged in one turn (such as with a Power Herb). Endeavor also only strikes once, even if the user or target's HP is changed after it strikes (such as by Iron Barbs or the Sitrus Berry). Confusion damage only occurs once. + +Spirit Shackle and Anchor Shot only trap the target after the final strike. + +Generation VI +The second strike has its damage halved (unless it is a set-damage move) + +Generation VII onward +The second strike now deals 25% of its usual damage (unless it is a set-damage move). + +Parental Bond does not affect Z-Moves or Max Moves. +*/ +// TONS OF TESTS NEEDED. FOR NOW, THIS SINGLE TEST IS MADE TO MAKE SURE AN ISSUE WAS FIXED. diff --git a/test/battle/ability/poison_heal.c b/test/battle/ability/poison_heal.c new file mode 100644 index 0000000000..2ee7620c62 --- /dev/null +++ b/test/battle/ability/poison_heal.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Poison Heal heals from (Toxic) Poison damage") +{ + u8 status; + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + + GIVEN { + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Status1(status); HP(1), MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_POISON_HEAL); + MESSAGE("The poisoning healed Shroomish a little bit!"); + HP_BAR(player, damage: -50); + } +} + +SINGLE_BATTLE_TEST("Poison Heal heals from Toxic Poison damage are constant") +{ + s16 turnOneHit; + s16 turnTwoHit; + + GIVEN { + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Status1(STATUS1_TOXIC_POISON); HP(1), MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_POISON_HEAL); + MESSAGE("The poisoning healed Shroomish a little bit!"); + HP_BAR(player, captureDamage: &turnOneHit); + + ABILITY_POPUP(player, ABILITY_POISON_HEAL); + MESSAGE("The poisoning healed Shroomish a little bit!"); + HP_BAR(player, captureDamage: &turnTwoHit); + } THEN { + EXPECT_EQ(turnOneHit, turnTwoHit); + } +} + +SINGLE_BATTLE_TEST("Poison Heal does not heal or cause damage when under Heal Block") +{ + GIVEN { + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Status1(STATUS1_POISON); HP(1), MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); } + } SCENE { + NONE_OF { + ABILITY_POPUP(player, ABILITY_POISON_HEAL); + MESSAGE("The poisoning healed Shroomish a little bit!"); + HP_BAR(player, damage: -50); + } + } +} + +SINGLE_BATTLE_TEST("Poison Heal activates before Toxic Orb") +{ + GIVEN { + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Item(ITEM_TOXIC_ORB); HP(1), MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + NONE_OF { + ABILITY_POPUP(player, ABILITY_POISON_HEAL); + MESSAGE("The poisoning healed Shroomish a little bit!"); + HP_BAR(player, damage: -50); + HP_BAR(player, damage: 50); + } + } +} diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c index 7d2fcd518b..0df1255081 100644 --- a/test/battle/ability/poison_point.c +++ b/test/battle/ability/poison_point.c @@ -21,10 +21,12 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } else { - NOT ABILITY_POPUP(opponent, ABILITY_POISON_POINT); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - NOT MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); - NOT STATUS_ICON(player, poison: TRUE); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_POISON_POINT); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); + MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + STATUS_ICON(player, poison: TRUE); + } } } } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c new file mode 100644 index 0000000000..3f402e0fc6 --- /dev/null +++ b/test/battle/ability/prankster.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_UMBREON].types[0] == TYPE_DARK); + PLAYER(SPECIES_UMBREON); + OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); } + } WHEN { + TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); + MESSAGE("It doesn't affect Umbreon…"); + } +} +TO_DO_BATTLE_TEST("Prankster-affected moves affect Ally Dark-type Pokémon") +TO_DO_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves called via Nature Power don't affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves called via Instruct affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves called via After you affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Bounce/Coat can affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Coat from a Pokémon with Prankster can't affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected moves that target all Pokémon are successful regardless of the presence of Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster-affected move effects don't affect Dark-type Pokémon"); +TO_DO_BATTLE_TEST("Prankster increases the priority of moves by 1"); +TO_DO_BATTLE_TEST("Prankster increases the priority of status Z-Moves by 1"); +TO_DO_BATTLE_TEST("Prankster increases the priority of Extreme Evoboost by 1"); +TO_DO_BATTLE_TEST("Prankster is blocked by Quick Guard in Gen5+"); diff --git a/test/battle/ability/pressure.c b/test/battle/ability/pressure.c new file mode 100644 index 0000000000..db92d198b7 --- /dev/null +++ b/test/battle/ability/pressure.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Pressure causes opponent's moves to use up 1 additional PP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_POUND, 35}); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { MOVE(player, MOVE_POUND); } + } THEN { + EXPECT_EQ(player->pp[0], 33); + } +} + +DOUBLE_BATTLE_TEST("Pressure's effect stacks with multiple Pokémon") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_SWIFT, 20}); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); } + OPPONENT(SPECIES_WYNAUT) { Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SWIFT); } + } THEN { + EXPECT_EQ(playerLeft->pp[0], 17); + } +} + +SINGLE_BATTLE_TEST("Pressure's effect applies to Imprison and Snatch") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_IMPRISON, 10}, {MOVE_SNATCH, 10}); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { MOVE(player, MOVE_IMPRISON); } + TURN { MOVE(player, MOVE_SNATCH); } + } THEN { + EXPECT_EQ(player->pp[0], 8); + EXPECT_EQ(player->pp[1], 8); + } +} + +SINGLE_BATTLE_TEST("Pressure's effect applies to Spikes, Stealth Rock and Toxic Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_SPIKES, 20}, {MOVE_STEALTH_ROCK, 20}, {MOVE_TOXIC_SPIKES, 20}); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + } THEN { + EXPECT_EQ(player->pp[0], 18); + EXPECT_EQ(player->pp[1], 18); + EXPECT_EQ(player->pp[2], 18); + } +} + +SINGLE_BATTLE_TEST("Pressure's effect doesn't apply to Sticky Web") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_STICKY_WEB, 20}); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); } + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + } THEN { + EXPECT_EQ(player->pp[0], 19); + } +} diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index 0ed74d4f65..0d53141c34 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Protosynthesis boosts either Attack or Special Attack, not b { u16 species; u32 move; - u16 damage[2]; + s16 damage[2]; PARAMETRIZE { species = SPECIES_BELLSPROUT; move = MOVE_TACKLE; } PARAMETRIZE { species = SPECIES_BELLSPROUT; move = MOVE_ROUND; } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Protosynthesis either boosts Defense or Special Defense, not { u16 species; u32 move; - u16 damage[2]; + s16 damage[2]; PARAMETRIZE { species = SPECIES_ONIX; move = MOVE_TACKLE; } PARAMETRIZE { species = SPECIES_ONIX; move = MOVE_ROUND; } diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c new file mode 100644 index 0000000000..ea89124681 --- /dev/null +++ b/test/battle/ability/purifying_salt.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Purifying Salt halves damage from Ghost-type moves", s16 damage) +{ + u16 ability; + PARAMETRIZE { ability = ABILITY_STURDY; } + PARAMETRIZE { ability = ABILITY_PURIFYING_SALT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SHADOW_BALL].type == TYPE_GHOST); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SHADOW_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Purifying Salt makes Rest fail") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PURIFYING_SALT); HP(1); MaxHP(100);} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REST); } + } SCENE { + NONE_OF { + MESSAGE("Wobbuffet went to sleep!"); + } + } +} + +SINGLE_BATTLE_TEST("Purifying Salt grants immunity to status effects") +{ + u32 move; + u16 status; + PARAMETRIZE { move = MOVE_WILL_O_WISP; status = STATUS1_BURN; } + PARAMETRIZE { move = MOVE_HYPNOSIS; status = STATUS1_SLEEP; } + PARAMETRIZE { move = MOVE_THUNDER_WAVE; status = STATUS1_PARALYSIS; } + PARAMETRIZE { move = MOVE_TOXIC; status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { move = MOVE_POWDER_SNOW; status = STATUS1_FREEZE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); + ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); + ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].effect == EFFECT_PARALYZE); + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PURIFYING_SALT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + if (move != MOVE_POWDER_SNOW) { + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ABILITY_POPUP(player, ABILITY_PURIFYING_SALT); + MESSAGE("It doesn't affect Wobbuffet…"); + NOT STATUS_ICON(player, status); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_PURIFYING_SALT); + STATUS_ICON(player, status); + } + } + } +} diff --git a/test/battle/ability/quark_drive.c b/test/battle/ability/quark_drive.c index bce6795cae..d9c7cf7307 100644 --- a/test/battle/ability/quark_drive.c +++ b/test/battle/ability/quark_drive.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Quark Drive boosts either Attack or Special Attack, not both { u16 species; u32 move; - u16 damage[2]; + s16 damage[2]; PARAMETRIZE { species = SPECIES_BELLSPROUT; move = MOVE_TACKLE; } PARAMETRIZE { species = SPECIES_BELLSPROUT; move = MOVE_ROUND; } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Quark Drive either boosts Defense or Special Defense, not bo { u16 species; u32 move; - u16 damage[2]; + s16 damage[2]; PARAMETRIZE { species = SPECIES_ONIX; move = MOVE_TACKLE; } PARAMETRIZE { species = SPECIES_ONIX; move = MOVE_ROUND; } diff --git a/test/battle/ability/quick_draw.c b/test/battle/ability/quick_draw.c new file mode 100644 index 0000000000..7dd918e5d3 --- /dev/null +++ b/test/battle/ability/quick_draw.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Quick Draw has a 30% chance of going first") +{ + PASSES_RANDOMLY(3, 10, RNG_QUICK_DRAW); + GIVEN { + PLAYER(SPECIES_SLOWBRO_GALARIAN) { Ability(ABILITY_QUICK_DRAW); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_QUICK_DRAW); + MESSAGE("Slowbro used Tackle!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } +} diff --git a/test/battle/ability/rivalry.c b/test/battle/ability/rivalry.c new file mode 100644 index 0000000000..a7f4216ce0 --- /dev/null +++ b/test/battle/ability/rivalry.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gSpeciesInfo[SPECIES_NIDOKING].genderRatio == MON_MALE); + ASSUME(gSpeciesInfo[SPECIES_NIDOQUEEN].genderRatio == MON_FEMALE); + ASSUME(gSpeciesInfo[SPECIES_PORYGON].genderRatio == MON_GENDERLESS); +} + +SINGLE_BATTLE_TEST("Rivalry increases power by x1.25 towards Pokémon of the same gender", s16 damage) +{ + u16 species, ability; + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_RIVALRY; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; } + + GIVEN { + PLAYER(species) { Ability(ability); } + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.25), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.25), results[3].damage); + } +} + +SINGLE_BATTLE_TEST("Rivalry decreases power by x0.75 towards Pokémon of different gender", s16 damage) +{ + u16 species1, species2, ability; + PARAMETRIZE { species1 = SPECIES_NIDOKING; species2 = SPECIES_NIDOQUEEN; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species1 = SPECIES_NIDOKING; species2 = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; } + PARAMETRIZE { species1 = SPECIES_NIDOQUEEN; species2 = SPECIES_NIDOKING; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species1 = SPECIES_NIDOQUEEN; species2 = SPECIES_NIDOKING; ability = ABILITY_RIVALRY; } + + GIVEN { + PLAYER(species1) { Ability(ability); } + OPPONENT(species2); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.75), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.75), results[3].damage); + } +} + +SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the attacker is genderless", s16 damage) +{ + u16 species, ability; + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_RIVALRY; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_PORYGON].abilities[0] == ABILITY_TRACE); + PLAYER(SPECIES_PORYGON) { Ability(ABILITY_TRACE); } // No genderless mon naturally gets Rivalry + OPPONENT(species) { Ability(ability); }; + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT(results[0].damage == results[1].damage); + EXPECT(results[2].damage == results[3].damage); + } +} + + +SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the target is genderless", s16 damage) +{ + u16 species, ability; + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOKING; ability = ABILITY_RIVALRY; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_POISON_POINT; } + PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; } + + GIVEN { + PLAYER(species) { Ability(ability); }; + OPPONENT(SPECIES_PORYGON); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT(results[0].damage == results[1].damage); + EXPECT(results[2].damage == results[3].damage); + } +} diff --git a/test/battle/ability/rocky_payload.c b/test/battle/ability/rocky_payload.c new file mode 100644 index 0000000000..498b09c9d9 --- /dev/null +++ b/test/battle/ability/rocky_payload.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Rocky Payload increases Rock-type move damage", s16 damage) +{ + u32 move; + u16 ability; + + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_BIG_PECKS; } + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_ROCKY_PAYLOAD; } + PARAMETRIZE { move = MOVE_ROCK_THROW; ability = ABILITY_BIG_PECKS; } + PARAMETRIZE { move = MOVE_ROCK_THROW; ability = ABILITY_ROCKY_PAYLOAD; } + PARAMETRIZE { move = MOVE_POWER_GEM; ability = ABILITY_BIG_PECKS; } + PARAMETRIZE { move = MOVE_POWER_GEM; ability = ABILITY_ROCKY_PAYLOAD; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].type != TYPE_ROCK); + ASSUME(gBattleMoves[MOVE_ROCK_THROW].type == TYPE_ROCK); + ASSUME(gBattleMoves[MOVE_POWER_GEM].type == TYPE_ROCK); + ASSUME(gBattleMoves[MOVE_ROCK_THROW].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_POWER_GEM].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Tackle should be unaffected + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Rock Throw should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Power Gem should be affected + } +} diff --git a/test/battle/ability/sap_sipper.c b/test/battle/ability/sap_sipper.c new file mode 100644 index 0000000000..903427fcc5 --- /dev/null +++ b/test/battle/ability/sap_sipper.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Sap Sipper negates damage from Grass-type moves") +{ + GIVEN { + PLAYER(SPECIES_MARILL) { Ability(ABILITY_SAP_SIPPER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_VINE_WHIP); } + } SCENE { + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("Sap Sipper negates effects from Grass-type moves") +{ + GIVEN { + PLAYER(SPECIES_MARILL) { Ability(ABILITY_SAP_SIPPER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SPORE); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + STATUS_ICON(player, sleep: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Sap Sipper increases Attack by one stage when hit by a Grass-type move") +{ + GIVEN { + PLAYER(SPECIES_MARILL) { Ability(ABILITY_SAP_SIPPER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_VINE_WHIP); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SAP_SIPPER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Marill's Attack rose!"); + } +} + +SINGLE_BATTLE_TEST("Sap Sipper does not increase Attack if already maxed") +{ + GIVEN { + PLAYER(SPECIES_MARILL) { Ability(ABILITY_SAP_SIPPER); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_BELLY_DRUM); MOVE(opponent, MOVE_VINE_WHIP); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SAP_SIPPER); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Marill's Attack rose!"); + } + } +} + +SINGLE_BATTLE_TEST("Sap Sipper blocks multi-hit grass type moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BULLET_SEED].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_MARILL) { Ability(ABILITY_SAP_SIPPER); } + OPPONENT(SPECIES_SHELLDER) { Ability(ABILITY_SKILL_LINK); } + } WHEN { + TURN { MOVE(opponent, MOVE_BULLET_SEED); } + } SCENE { + MESSAGE("Foe Shellder used Bullet Seed!"); + ABILITY_POPUP(player, ABILITY_SAP_SIPPER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Marill's Attack rose!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); + HP_BAR(player); + MESSAGE("Hit 5 time(s)!"); + } + } +} diff --git a/test/battle/ability/schooling.c b/test/battle/ability/schooling.c index 448e37261d..49a70266de 100644 --- a/test/battle/ability/schooling.c +++ b/test/battle/ability/schooling.c @@ -9,8 +9,8 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25 GIVEN { ASSUME(P_GEN_7_POKEMON == TRUE); - ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); - PLAYER(SPECIES_WISHIWASHI) + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI_SOLO].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI_SOLO) { Level(level); HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 2); @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25 ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } } THEN { - EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SOLO); } } @@ -49,8 +49,8 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is ov GIVEN { ASSUME(P_GEN_7_POKEMON == TRUE); - ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); - PLAYER(SPECIES_WISHIWASHI) + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI_SOLO].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI_SOLO) { Level(level); HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / (overQuarterHP ? 2 : 4)); @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is ov if (level >= 20 && overQuarterHP) EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); else - EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SOLO); } } @@ -83,8 +83,8 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is he GIVEN { ASSUME(P_GEN_7_POKEMON == TRUE); - ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); - PLAYER(SPECIES_WISHIWASHI) + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI_SOLO].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI_SOLO) { Level(level); HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 4); @@ -106,6 +106,6 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is he if (level >= 20) EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); else - EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SOLO); } } diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c index df4ededa4e..22b6660b69 100644 --- a/test/battle/ability/scrappy.c +++ b/test/battle/ability/scrappy.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Scrappy prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_SCRAPPY); - MESSAGE("Foe Kangaskhan's Attack was not lowered!"); + MESSAGE("Foe Kangaskhan's Scrappy prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/seed_sower.c b/test/battle/ability/seed_sower.c index 706e43ede5..609077cca2 100644 --- a/test/battle/ability/seed_sower.c +++ b/test/battle/ability/seed_sower.c @@ -29,10 +29,10 @@ SINGLE_BATTLE_TEST("Seed Sower sets up Grassy Terrain when hit by an attack") DOUBLE_BATTLE_TEST("Multi-target moves hit correct battlers after Seed Sower is triggered") // #2796 { u32 j, k, l; - u16 usedMove; + u16 usedMove = MOVE_NONE; static const u16 moves[] = {MOVE_HYPER_VOICE, MOVE_SURF}; - u16 abilities[MAX_BATTLERS_COUNT]; - u8 attacker; + u16 abilities[MAX_BATTLERS_COUNT] = {0}; + u8 attacker = 0; for (j = 0; j < ARRAY_COUNT(moves); j++) { diff --git a/test/battle/ability/sharpness.c b/test/battle/ability/sharpness.c new file mode 100644 index 0000000000..6360c4f8b3 --- /dev/null +++ b/test/battle/ability/sharpness.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_4_POKEMON == TRUE); // Because no parametersCount; j+=2) + { + EXPECT_GT(results[j+1].damage, results[j].damage); + } + } +} diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index e0d91aa0d5..51224da944 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -20,10 +20,12 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } else { - NOT ABILITY_POPUP(opponent, ABILITY_STATIC); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - NOT MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); - NOT STATUS_ICON(player, paralysis: TRUE); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_STATIC); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); + MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + STATUS_ICON(player, paralysis: TRUE); + } } } } diff --git a/test/battle/ability/steelworker.c b/test/battle/ability/steelworker.c new file mode 100644 index 0000000000..bf7d0ca9c6 --- /dev/null +++ b/test/battle/ability/steelworker.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Steelworker increases Steel-type move damage", s16 damage) +{ + u32 move; + u16 ability; + + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_STEELWORKER; } + PARAMETRIZE { move = MOVE_ANCHOR_SHOT; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_ANCHOR_SHOT; ability = ABILITY_STEELWORKER; } + PARAMETRIZE { move = MOVE_FLASH_CANNON; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_FLASH_CANNON; ability = ABILITY_STEELWORKER; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].type != TYPE_STEEL); + ASSUME(gBattleMoves[MOVE_ANCHOR_SHOT].type == TYPE_STEEL); + ASSUME(gBattleMoves[MOVE_FLASH_CANNON].type == TYPE_STEEL); + ASSUME(gBattleMoves[MOVE_ANCHOR_SHOT].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_FLASH_CANNON].split == SPLIT_SPECIAL); + PLAYER(SPECIES_DHELMISE) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Tackle should be unaffected + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Anchor Shot should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Flash Cannon should be affected + } +} diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index 2abc0c04f7..35ba4f6e0d 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin reduces Defense", s16 damage) } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.25), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.33), results[1].damage); } } diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c index f3e23e5abb..fadde2ceb5 100644 --- a/test/battle/ability/toxic_debris.c +++ b/test/battle/ability/toxic_debris.c @@ -17,10 +17,11 @@ SINGLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side if hit b if (move == MOVE_TACKLE) { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); - } - else { - NOT ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - NOT MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + } } } } @@ -42,8 +43,10 @@ SINGLE_BATTLE_TEST("Toxic Debris does not activate if two layers of Toxic Spikes ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - NOT ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - NOT MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + } } } @@ -58,8 +61,10 @@ SINGLE_BATTLE_TEST("If a Substitute is hit, Toxic Debris does not set Toxic Spik } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - NOT ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - NOT MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + } } } diff --git a/test/battle/ability/transistor.c b/test/battle/ability/transistor.c new file mode 100644 index 0000000000..ab2509309a --- /dev/null +++ b/test/battle/ability/transistor.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Transistor increases Electric-type move damage", s16 damage) +{ + u32 move; + u16 ability; + + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_TACKLE; ability = ABILITY_TRANSISTOR; } + PARAMETRIZE { move = MOVE_WILD_CHARGE; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_WILD_CHARGE; ability = ABILITY_TRANSISTOR; } + PARAMETRIZE { move = MOVE_THUNDER_SHOCK; ability = ABILITY_KLUTZ; } + PARAMETRIZE { move = MOVE_THUNDER_SHOCK; ability = ABILITY_TRANSISTOR; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].type != TYPE_ELECTRIC); + ASSUME(gBattleMoves[MOVE_WILD_CHARGE].type == TYPE_ELECTRIC); + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + ASSUME(gBattleMoves[MOVE_WILD_CHARGE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].split == SPLIT_SPECIAL); + PLAYER(SPECIES_REGIELEKI) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); // Tackle should be unaffected + #if B_TRANSISTOR_BOOST >= GEN_9 + EXPECT_MUL_EQ(results[2].damage, Q_4_12(5325 / 4096), results[3].damage); // Wild Charge should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(5325 / 4096), results[5].damage); // Thunder Shock should be affected + #else + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Wild Charge should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Thunder Shock should be affected + #endif + } +} diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c new file mode 100644 index 0000000000..84cad5c222 --- /dev/null +++ b/test/battle/ability/weak_armor.c @@ -0,0 +1,198 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].power != 0); + ASSUME(gBattleMoves[MOVE_GUST].power != 0); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(B_WEAK_ARMOR_SPEED >= GEN_7); +} + +SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hit by a physical attack") +{ + u16 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_GUST; } + + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + HP_BAR(player); + if (move == MOVE_TACKLE) { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + } + } THEN { + if (move == MOVE_TACKLE) { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } + } +} + +// Oddly specific, but it was a bug at one point. +SINGLE_BATTLE_TEST("Weak Armor does not trigger when brought in by Dragon Tail and taking Stealth Rock damage") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); } + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); + HP_BAR(player); + MESSAGE("Slugma was dragged out!"); + HP_BAR(player); + MESSAGE("Pointed stones dug into Slugma!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Weak Armor still lowers boosts Speed if Defense can't go any lower") +{ + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + } + MESSAGE("Slugma's Defense won't go lower!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Weak Armor still lowers Defense if Speed can't go any higher") +{ + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + MESSAGE("Slugma's Speed won't go higher!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can't go any lower") +{ + u32 j; + GIVEN { + PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } + OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } + } WHEN { + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_FURY_SWIPES); } + } SCENE { + for (j = 0; j < 2; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + for (j = 0; j < 2; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + // Ability doesn't activate if neither stat can be changed. + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Speed won't go higher!"); + } + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't go any higher") +{ + u32 j; + GIVEN { + PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } + OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } + } WHEN { + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(opponent, MOVE_FURY_SWIPES); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + for (j = 0; j < 4; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Speed won't go higher!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 5); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); + } +} diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c index 4616a69fb7..b68bff3b50 100644 --- a/test/battle/ability/wind_power.c +++ b/test/battle/ability/wind_power.c @@ -107,7 +107,7 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ability when hit by a 2/3 target move") { - u16 move, abilityLeft, abilityRight; + u16 abilityLeft, abilityRight; PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER;} PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; } @@ -133,8 +133,10 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab ABILITY_POPUP(playerRight, ABILITY_WIND_POWER); MESSAGE("Being hit by Air Cutter charged Wobbuffet with power!"); } - NOT HP_BAR(opponentLeft); - NOT HP_BAR(opponentRight); + NONE_OF { + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + } } THEN { EXPECT_NE(playerLeft->hp, playerLeft->maxHP); diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c index 37bb4160f9..3d1e25ffa7 100644 --- a/test/battle/ability/zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -4,8 +4,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less at the end of the turn") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } GIVEN { ASSUME(P_GEN_5_POKEMON == TRUE); @@ -34,8 +34,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less before the first turn") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } GIVEN { ASSUME(P_GEN_5_POKEMON == TRUE); @@ -63,8 +63,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is healed above half") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } GIVEN { ASSUME(P_GEN_5_POKEMON == TRUE); diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c new file mode 100644 index 0000000000..685929a5b7 --- /dev/null +++ b/test/battle/ability/zero_to_hero.c @@ -0,0 +1,180 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(P_GEN_9_POKEMON == TRUE); +} + +SINGLE_BATTLE_TEST("Zero to Hero transforms Palafin when it switches out") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Palafin, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Palafin!"); + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } +} + +SINGLE_BATTLE_TEST("Zero to Hero can't be surpressed by Neutralizing Gas") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); } + } WHEN { + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } +} + +SINGLE_BATTLE_TEST("Zero to Hero transforms both player and opponent") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); SWITCH(opponent, 1); } + TURN { SWITCH(player, 0); SWITCH(opponent, 0); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); + MESSAGE("Foe Palafin underwent a heroic transformation!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); + EXPECT_EQ(opponent->species, SPECIES_PALAFIN_HERO); + } +} + +SINGLE_BATTLE_TEST("Zero to Hero will activate if a switch move is used") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FLIP_TURN].effect == EFFECT_HIT_ESCAPE); + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLIP_TURN); SEND_OUT(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLIP_TURN, player); + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } +} + +SINGLE_BATTLE_TEST("Gastro Acid, Worry Seed, and Simple Beam fail if the target has the Ability Zero to Hero") +{ + u16 move; + + PARAMETRIZE { move = MOVE_GASTRO_ACID; } + PARAMETRIZE { move = MOVE_WORRY_SEED; } + PARAMETRIZE { move = MOVE_SIMPLE_BEAM; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_GASTRO_ACID].effect == EFFECT_GASTRO_ACID); + ASSUME(gBattleMoves[MOVE_WORRY_SEED].effect == EFFECT_WORRY_SEED); + ASSUME(gBattleMoves[MOVE_SIMPLE_BEAM].effect == EFFECT_SIMPLE_BEAM); + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Role Play, Skill Swap, and Entrainment fail if either Pokémon has Zero to Hero") +{ + u16 move; + + PARAMETRIZE { move = MOVE_ROLE_PLAY; } + PARAMETRIZE { move = MOVE_SKILL_SWAP; } + PARAMETRIZE { move = MOVE_ENTRAINMENT; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_ROLE_PLAY].effect == EFFECT_ROLE_PLAY); + ASSUME(gBattleMoves[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); + ASSUME(gBattleMoves[MOVE_ENTRAINMENT].effect == EFFECT_ENTRAINMENT); + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Transform doesn't apply the heroic transformation message when copying Palafin") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); MOVE(opponent, MOVE_TRANSFORM); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); + MESSAGE("Foe Wobbuffet transformed into Palafin!"); + NOT ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); + } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } +} + +SINGLE_BATTLE_TEST("Imposter doesn't apply the heroic transformation message when copying Palafin") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); SWITCH(opponent, 1); } + TURN { SWITCH(player, 0); SWITCH(opponent, 0); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + ABILITY_POPUP(opponent, ABILITY_IMPOSTER); + MESSAGE("Foe Ditto transformed into Palafin using Imposter!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); + MESSAGE("Foe Ditto underwent a heroic transformation!"); + } + } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } +} + +// Write Trace test and move this one to that file (including every other ability that can't be copied) +SINGLE_BATTLE_TEST("Zero to Hero cannot be copied by Trace") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + OPPONENT(SPECIES_RALTS) { Ability(ABILITY_TRACE); } + } WHEN { + TURN {} + } SCENE { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_TRACE); + MESSAGE("Foe Ralts Traced Palafin's Zero to Hero!"); + } + } +} diff --git a/test/battle/ai.c b/test/battle/ai.c new file mode 100644 index 0000000000..b3f336d15e --- /dev/null +++ b/test/battle/ai.c @@ -0,0 +1,611 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed. +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_STUNFISK); + PLAYER(SPECIES_PELIPPER); + OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); } + OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); } + } WHEN { + + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers Bubble over Water Gun if it's slower") +{ + u32 speedPlayer, speedAi; + + PARAMETRIZE { speedPlayer = 200; speedAi = 10; } + PARAMETRIZE { speedPlayer = 10; speedAi = 200; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_SCIZOR) { Speed(speedPlayer); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_WATER_GUN, MOVE_BUBBLE); Speed(speedAi); } + } WHEN { + if (speedPlayer > speedAi) + { + TURN { SCORE_GT(opponent, MOVE_BUBBLE, MOVE_WATER_GUN); } + TURN { SCORE_GT(opponent, MOVE_BUBBLE, MOVE_WATER_GUN); } + } + else + { + TURN { SCORE_EQ(opponent, MOVE_BUBBLE, MOVE_WATER_GUN); } + TURN { SCORE_EQ(opponent, MOVE_BUBBLE, MOVE_WATER_GUN); } + } + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers Water Gun over Bubble if it knows that foe has Contrary") +{ + u32 abilityAI; + + PARAMETRIZE { abilityAI = ABILITY_MOXIE; } + PARAMETRIZE { abilityAI = ABILITY_MOLD_BREAKER; } // Mold Breaker ignores Contrary. + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_SHUCKLE) { Ability(ABILITY_CONTRARY); } + OPPONENT(SPECIES_PINSIR) { Moves(MOVE_WATER_GUN, MOVE_BUBBLE); Ability(abilityAI); } + } WHEN { + TURN { MOVE(player, MOVE_DEFENSE_CURL); } + TURN { MOVE(player, MOVE_DEFENSE_CURL); + if (abilityAI == ABILITY_MOLD_BREAKER) { SCORE_EQ(opponent, MOVE_WATER_GUN, MOVE_BUBBLE); } + else { SCORE_GT(opponent, MOVE_WATER_GUN, MOVE_BUBBLE); }} + } SCENE { + MESSAGE("Shuckle's Defense fell!"); // Contrary activates + } THEN { + EXPECT(gBattleResources->aiData->abilities[B_POSITION_PLAYER_LEFT] == ABILITY_CONTRARY); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers moves with better accuracy, but only if they both require the same number of hits to ko") +{ + u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; + u16 hp, expectedMove, turns, abilityAtk, expectedMove2; + + abilityAtk = ABILITY_NONE; + expectedMove2 = MOVE_NONE; + + // Here it's a simple test, both Slam and Strength deal the same damage, but Strength always hits, whereas Slam often misses. + PARAMETRIZE { move1 = MOVE_SLAM; move2 = MOVE_STRENGTH; move3 = MOVE_TACKLE; hp = 490; expectedMove = MOVE_STRENGTH; turns = 4; } + PARAMETRIZE { move1 = MOVE_SLAM; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 365; expectedMove = MOVE_STRENGTH; turns = 3; } + PARAMETRIZE { move1 = MOVE_SLAM; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 245; expectedMove = MOVE_STRENGTH; turns = 2; } + PARAMETRIZE { move1 = MOVE_SLAM; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 125; expectedMove = MOVE_STRENGTH; turns = 1; } + // Mega Kick deals more damage, but can miss more often. Here, AI should choose Mega Kick if it can faint target in less number of turns than Strength. Otherwise, it should use Strength. + PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 170; expectedMove = MOVE_MEGA_KICK; turns = 1; } + PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 245; expectedMove = MOVE_STRENGTH; turns = 2; } + // Swift always hits and Guts has accuracy of 100%. Hustle lowers accuracy of all physical moves. + PARAMETRIZE { abilityAtk = ABILITY_HUSTLE; move1 = MOVE_MEGA_KICK; move2 = MOVE_STRENGTH; move3 = MOVE_SWIFT; move4 = MOVE_TACKLE; hp = 5; expectedMove = MOVE_SWIFT; turns = 1; } + PARAMETRIZE { abilityAtk = ABILITY_HUSTLE; move1 = MOVE_MEGA_KICK; move2 = MOVE_STRENGTH; move3 = MOVE_GUST; move4 = MOVE_TACKLE; hp = 5; expectedMove = MOVE_GUST; turns = 1; } + // Mega Kick and Slam both have lower accuracy. Gust and Tackle both have 100, so AI can choose either of them. + PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_SLAM; move3 = MOVE_TACKLE; move4 = MOVE_GUST; hp = 5; expectedMove = MOVE_GUST; expectedMove2 = MOVE_TACKLE; turns = 1; } + // All moves hit with No guard ability + PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_GUST; hp = 5; expectedMove = MOVE_MEGA_KICK; expectedMove2 = MOVE_GUST; turns = 1; } + // Tests to compare move that always hits and a beneficial effect. A move with higher acc should be chosen in this case. + PARAMETRIZE { move1 = MOVE_SHOCK_WAVE; move2 = MOVE_ICY_WIND; hp = 5; expectedMove = MOVE_SHOCK_WAVE; turns = 1; } + PARAMETRIZE { move1 = MOVE_SHOCK_WAVE; move2 = MOVE_ICY_WIND; move3 = MOVE_THUNDERBOLT; hp = 5; expectedMove = MOVE_SHOCK_WAVE; expectedMove2 = MOVE_THUNDERBOLT; turns = 1; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(hp); } + PLAYER(SPECIES_WOBBUFFET); + ASSUME(gBattleMoves[MOVE_SWIFT].accuracy == 0); + ASSUME(gBattleMoves[MOVE_SLAM].power == gBattleMoves[MOVE_STRENGTH].power); + ASSUME(gBattleMoves[MOVE_MEGA_KICK].power > gBattleMoves[MOVE_STRENGTH].power); + ASSUME(gBattleMoves[MOVE_SLAM].accuracy < gBattleMoves[MOVE_STRENGTH].accuracy); + ASSUME(gBattleMoves[MOVE_MEGA_KICK].accuracy < gBattleMoves[MOVE_STRENGTH].accuracy); + ASSUME(gBattleMoves[MOVE_TACKLE].accuracy == 100); + ASSUME(gBattleMoves[MOVE_GUST].accuracy == 100); + ASSUME(gBattleMoves[MOVE_SHOCK_WAVE].accuracy == 0); + ASSUME(gBattleMoves[MOVE_THUNDERBOLT].accuracy == 100); + ASSUME(gBattleMoves[MOVE_ICY_WIND].accuracy != 100); + OPPONENT(SPECIES_EXPLOUD) { Moves(move1, move2, move3, move4); Ability(abilityAtk); SpAttack(50); } // Low Sp.Atk, so Swift deals less damage than Strength. + } WHEN { + switch (turns) + { + case 1: + if (expectedMove2 != MOVE_NONE) { + TURN { EXPECT_MOVES(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1); } + } + else { + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + } + break; + case 2: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + case 3: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + case 4: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers moves which deal more damage instead of moves which are super-effective but deal less damage") +{ + u8 turns = 0; + u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; + u16 expectedMove, abilityAtk, abilityDef; + + abilityAtk = ABILITY_NONE; + + // Scald and Poison Jab take 3 hits, Waterfall takes 2. + PARAMETRIZE { move1 = MOVE_WATERFALL; move2 = MOVE_SCALD; move3 = MOVE_POISON_JAB; move4 = MOVE_WATER_GUN; expectedMove = MOVE_WATERFALL; turns = 2; } + // Poison Jab takes 3 hits, Water gun 5. Immunity so there's no poison chip damage. + PARAMETRIZE { move1 = MOVE_POISON_JAB; move2 = MOVE_WATER_GUN; expectedMove = MOVE_POISON_JAB; abilityDef = ABILITY_IMMUNITY; turns = 3; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_TYPHLOSION) { Ability(abilityDef); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDOQUEEN) { Moves(move1, move2, move3, move4); Ability(abilityAtk); } + } WHEN { + switch (turns) + { + case 2: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + case 3: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + } + } SCENE { + MESSAGE("Typhlosion fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers Earthquake over Drill Run if both require the same number of hits to ko") +{ + // Drill Run has less accuracy than E-quake, but can score a higher crit. However the chance is too small, so AI should ignore it. + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_TYPHLOSION); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GEODUDE) { Moves(MOVE_EARTHQUAKE, MOVE_DRILL_RUN); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); SEND_OUT(player, 1); } + } + SCENE { + MESSAGE("Typhlosion fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers a weaker move over a one with a downside effect if both require the same number of hits to ko") +{ + u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; + u16 hp, expectedMove, turns; + + // Both moves require the same number of turns but Flamethrower will be chosen over Overheat (powerful effect) + PARAMETRIZE { move1 = MOVE_OVERHEAT; move2 = MOVE_FLAMETHROWER; hp = 300; expectedMove = MOVE_FLAMETHROWER; turns = 2; } + // Overheat kill in least amount of turns + PARAMETRIZE { move1 = MOVE_OVERHEAT; move2 = MOVE_FLAMETHROWER; hp = 250; expectedMove = MOVE_OVERHEAT; turns = 1; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(hp); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TYPHLOSION) { Moves(move1, move2, move3, move4); } + } WHEN { + switch (turns) + { + case 1: + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + case 2: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers moves with the best possible score, chosen randomly if tied") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(5); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_TAKE_DOWN); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB); SEND_OUT(player, 1); } + } + SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI can choose a status move that boosts the attack by two") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(278); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KANGASKHAN) { Moves(MOVE_STRENGTH, MOVE_HORN_ATTACK, MOVE_SWORDS_DANCE); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_STRENGTH, MOVE_SWORDS_DANCE); } + TURN { EXPECT_MOVE(opponent, MOVE_STRENGTH); SEND_OUT(player, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking into account accuracy and move effect") +{ + u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; + u16 expectedMove, expectedMove2 = MOVE_NONE; + u16 abilityAtk = ABILITY_NONE, holdItemAtk = ITEM_NONE; + + // Psychic is not very effective, but always hits. Solarbeam requires a charging turn, Double Edge has recoil and Focus Blast can miss; + PARAMETRIZE { abilityAtk = ABILITY_STURDY; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; expectedMove = MOVE_PSYCHIC; } + // Same as above, but ai mon has rock head ability, so it can use Double Edge without taking recoil damage. Psychic can also lower Special Defense, + // but because it faints the target it doesn't matter. + PARAMETRIZE { abilityAtk = ABILITY_ROCK_HEAD; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; + expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_DOUBLE_EDGE; } + // This time it's Solarbeam + Psychic, because the weather is sunny. + PARAMETRIZE { abilityAtk = ABILITY_DROUGHT; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; + expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SOLAR_BEAM; } + // Psychic and Solar Beam are chosen because user is holding Power Herb + PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; + expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SOLAR_BEAM; } + // Psychic and Skull Bash are chosen because user is holding Power Herb + PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SKULL_BASH; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; + expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SKULL_BASH; } + // Skull Bash is chosen because it's the most accurate and is holding Power Herb + PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SKULL_BASH; move3 = MOVE_SLAM; move4 = MOVE_DOUBLE_EDGE; + expectedMove = MOVE_SKULL_BASH; } + // Crabhammer is chosen even if Skull Bash is more accurate, the user has no Power Herb + PARAMETRIZE { abilityAtk = ABILITY_STURDY; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SKULL_BASH; move3 = MOVE_SLAM; move4 = MOVE_CRABHAMMER; + expectedMove = MOVE_CRABHAMMER; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(5); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GEODUDE) { Moves(move1, move2, move3, move4); Ability(abilityAtk); Item(holdItemAtk); } + } WHEN { + TURN { if (expectedMove2 == MOVE_NONE) { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + else {EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1);} + } + } + SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI won't use Solar Beam if there is no Sun up or the user is not holding Power Herb") +{ + u16 abilityAtk = ABILITY_NONE; + u16 holdItemAtk = ITEM_NONE; + + PARAMETRIZE { abilityAtk = ABILITY_DROUGHT; } + PARAMETRIZE { holdItemAtk = ITEM_POWER_HERB; } + PARAMETRIZE { } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(211); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TYPHLOSION) { Moves(MOVE_SOLAR_BEAM, MOVE_GRASS_PLEDGE); Ability(abilityAtk); Item(holdItemAtk); } + } WHEN { + if (abilityAtk == ABILITY_DROUGHT) { + TURN { EXPECT_MOVES(opponent, MOVE_SOLAR_BEAM, MOVE_GRASS_PLEDGE); } + TURN { EXPECT_MOVES(opponent, MOVE_SOLAR_BEAM, MOVE_GRASS_PLEDGE); SEND_OUT(player, 1); } + } else if (holdItemAtk == ITEM_POWER_HERB) { + TURN { EXPECT_MOVES(opponent, MOVE_SOLAR_BEAM, MOVE_GRASS_PLEDGE); MOVE(player, MOVE_KNOCK_OFF); } + TURN { EXPECT_MOVE(opponent, MOVE_GRASS_PLEDGE); SEND_OUT(player, 1); } + } else { + TURN { EXPECT_MOVE(opponent, MOVE_GRASS_PLEDGE); } + TURN { EXPECT_MOVE(opponent, MOVE_GRASS_PLEDGE); SEND_OUT(player, 1); } + } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI won't use ground type attacks against flying type Pokemon unless Gravity is in effect") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_CROBAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDOQUEEN) { Moves(MOVE_EARTHQUAKE, MOVE_TACKLE, MOVE_POISON_STING, MOVE_GUST); } + } WHEN { + TURN { NOT_EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { MOVE(player, MOVE_GRAVITY); NOT_EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Gravity intensified!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") +{ + bool32 alakazamFaster; + u32 speedAlakazm; + + KNOWN_FAILING; + + PARAMETRIZE{ speedAlakazm = 200; alakazamFaster = FALSE; } + PARAMETRIZE{ speedAlakazm = 400; alakazamFaster = TRUE; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. + OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } + OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. + OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. + } WHEN { + TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFaster ? 1 : 2); } + } SCENE { + MESSAGE("Foe Kadabra fainted!"); + if (alakazamFaster) { + MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); + } else { + MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); + } + } +} + +AI_DOUBLE_BATTLE_TEST("AI won't use a Weather changing move if partner already chose such move") +{ + u32 j, k; + static const u16 weatherMoves[] = {MOVE_SUNNY_DAY, MOVE_HAIL, MOVE_RAIN_DANCE, MOVE_SANDSTORM, MOVE_SNOWSCAPE}; + u16 weatherMoveLeft = MOVE_NONE, weatherMoveRight = MOVE_NONE; + + for (j = 0; j < ARRAY_COUNT(weatherMoves); j++) + { + for (k = 0; k < ARRAY_COUNT(weatherMoves); k++) + { + PARAMETRIZE { weatherMoveLeft = weatherMoves[j]; weatherMoveRight = weatherMoves[k]; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(weatherMoveLeft); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, weatherMoveRight); } + } WHEN { + TURN { NOT_EXPECT_MOVE(opponentRight, weatherMoveRight); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:opponentLeft); + } + } +} + +AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any damage moves") +{ + 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; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_TACKLE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(move1, move2, move3, move4); } + } WHEN { + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); + } + } SCENE { + NOT MESSAGE("Foe Wobbuffet used Helping Hand!"); + } +} + +AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose Helping Hand") +{ + s32 j; + u32 statusMove = MOVE_NONE; + + for (j = MOVE_NONE + 1; j < MOVES_COUNT; j++) + { + if (gBattleMoves[j].split == SPLIT_STATUS) { + PARAMETRIZE{ statusMove = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, statusMove); } + } WHEN { + TURN { NOT_EXPECT_MOVE(opponentRight, statusMove); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); + } + } SCENE { + MESSAGE("Foe Wobbuffet used Helping Hand!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI without any flags chooses moves at random - singles") +{ + GIVEN { + AI_FLAGS(0); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDOQUEEN) { Moves(MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); + SCORE_EQ_VAL(opponent, MOVE_SPLASH, AI_SCORE_DEFAULT); + SCORE_EQ_VAL(opponent, MOVE_EXPLOSION, AI_SCORE_DEFAULT); + SCORE_EQ_VAL(opponent, MOVE_RAGE, AI_SCORE_DEFAULT); + SCORE_EQ_VAL(opponent, MOVE_HELPING_HAND, AI_SCORE_DEFAULT); + } + } +} + +AI_DOUBLE_BATTLE_TEST("AI without any flags chooses moves at random - doubles") +{ + GIVEN { + AI_FLAGS(0); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDOQUEEN) { Moves(MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); } + OPPONENT(SPECIES_NIDOQUEEN) { Moves(MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); } + } WHEN { + TURN { EXPECT_MOVES(opponentLeft, MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); + EXPECT_MOVES(opponentRight, MOVE_SPLASH, MOVE_EXPLOSION, MOVE_RAGE, MOVE_HELPING_HAND); + SCORE_EQ_VAL(opponentLeft, MOVE_SPLASH, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentLeft, MOVE_EXPLOSION, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentLeft, MOVE_RAGE, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_SPLASH, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_EXPLOSION, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_RAGE, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft); + } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") +{ + bool32 alakazamFirst; + 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 + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. + OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } + OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. + OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. + } WHEN { + TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped + } SCENE { + MESSAGE("Foe Kadabra fainted!"); + if (alakazamFirst) { + MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); + } else { + MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); + } + } +} + +AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_PERISH_SONG); } + TURN { ; } + TURN { ; } + TURN { EXPECT_SWITCH(opponent, 1); } + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in") +{ + 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 + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks + OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} + TURN { MOVE(player, MOVE_SURF) ; EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup") +{ + u32 aiSmartSwitchFlags = 0; + u32 move1; + 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; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout + OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); } + OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); } + OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL) ; EXPECT_SWITCH(opponent, expectedIndex); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK) ; EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK) ; EXPECT_SEND_OUT(opponent, 2); } + } +} diff --git a/test/battle/ai_check_viability.c b/test/battle/ai_check_viability.c new file mode 100644 index 0000000000..fa46e2a9f0 --- /dev/null +++ b/test/battle/ai_check_viability.c @@ -0,0 +1,167 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BODY_SLAM].effect == EFFECT_PARALYZE_HIT); +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Facade") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_BURN; expectedMove = MOVE_FACADE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_FACADE].effect == EFFECT_FACADE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(60); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_FACADE); Status1(status1); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_FACADE) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Smelling Salt") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_PARALYSIS; expectedMove = MOVE_SMELLING_SALTS; } + + GIVEN { + ASSUME(B_UPDATED_MOVE_DATA >= GEN_6); + ASSUME(gBattleMoves[MOVE_SMELLING_SALTS].effect == EFFECT_SMELLING_SALTS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(60); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_SMELLING_SALTS); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_SMELLING_SALTS) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Wake Up Slap") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_WAKE_UP_SLAP; } + + GIVEN { + ASSUME(B_UPDATED_MOVE_DATA >= GEN_6); + ASSUME(gBattleMoves[MOVE_WAKE_UP_SLAP].effect == EFFECT_WAKE_UP_SLAP); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MEGANIUM) { HP(35); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_WAKE_UP_SLAP); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_WAKE_UP_SLAP) + MESSAGE("Meganium fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Grav Apple") +{ + u32 movePlayer; + u16 expectedMove; + + PARAMETRIZE { movePlayer = MOVE_CELEBRATE; expectedMove = MOVE_TROP_KICK; } + PARAMETRIZE { movePlayer = MOVE_GRAVITY; expectedMove = MOVE_GRAV_APPLE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_GRAV_APPLE].effect == EFFECT_GRAV_APPLE); + ASSUME(gBattleMoves[MOVE_TROP_KICK].effect == EFFECT_ATTACK_DOWN_HIT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(81); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_TROP_KICK, MOVE_GRAV_APPLE); } + } WHEN { + TURN { MOVE(player, movePlayer); EXPECT_MOVE(opponent, MOVE_TROP_KICK); } + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_GRAV_APPLE) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Flail") +{ + u16 hp, expectedMove; + + PARAMETRIZE { hp = 490; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { hp = 5; expectedMove = MOVE_FLAIL; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_FLAIL].effect == EFFECT_FLAIL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { HP(hp); MaxHP(490); Speed(20); Moves(MOVE_BODY_SLAM, MOVE_FLAIL); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } +} + +AI_SINGLE_BATTLE_TEST("AI will only use Dream Eater if target is asleep") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_DREAM_EATER; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MEGANIUM) { HP(38); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_DREAM_EATER); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_DREAM_EATER) + MESSAGE("Meganium fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Spit Up") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STOCKPILE].effect == EFFECT_STOCKPILE); + ASSUME(gBattleMoves[MOVE_SPIT_UP].effect == EFFECT_SPIT_UP); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(43); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_STOCKPILE, MOVE_SPIT_UP, MOVE_TACKLE); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_STOCKPILE); } + TURN { EXPECT_MOVE(opponent, MOVE_SPIT_UP); } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI can choose Counter or Mirror Coat if the predicted move split is correct and user doesn't faint") +{ + u16 playerMove = MOVE_NONE, opponentMove = MOVE_NONE; + + PARAMETRIZE { playerMove = MOVE_STRENGTH; opponentMove = MOVE_COUNTER; } + PARAMETRIZE { playerMove = MOVE_POWER_GEM; opponentMove = MOVE_MIRROR_COAT; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_COUNTER].effect == EFFECT_COUNTER); + ASSUME(gBattleMoves[MOVE_MIRROR_COAT].effect == EFFECT_MIRROR_COAT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(102); Speed(100); Moves(opponentMove, MOVE_STRENGTH); } + } WHEN { + TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, MOVE_STRENGTH); } + TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, opponentMove); } + TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, MOVE_STRENGTH); } + } SCENE { + MESSAGE("Foe Wobbuffet fainted!"); + } +} diff --git a/test/battle/ai_trytofaint.c b/test/battle/ai_trytofaint.c new file mode 100644 index 0000000000..bbfbee19d1 --- /dev/null +++ b/test/battle/ai_trytofaint.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +AI_SINGLE_BATTLE_TEST("AI prefers priority moves if it's slower and can kill target") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_QUICK_ATTACK].priority == 1); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(100); } + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_QUICK_ATTACK, MOVE_STRENGTH); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI will choose a random move if it's faster and can kill target") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_QUICK_ATTACK].priority == 1); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(MOVE_QUICK_ATTACK, MOVE_STRENGTH); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_QUICK_ATTACK, MOVE_STRENGTH); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI will choose a priority move if it is slower then the target and will be killed") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_QUICK_ATTACK].priority == 1); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { HP(60); Speed(1); Moves(MOVE_QUICK_ATTACK, MOVE_STRENGTH); } + } WHEN { + TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_STRENGTH); } + TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK); } + } SCENE { + MESSAGE("Foe Wobbuffet fainted!"); + } +} diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c new file mode 100644 index 0000000000..678153a6c6 --- /dev/null +++ b/test/battle/crit_chance.c @@ -0,0 +1,252 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(B_CRIT_CHANCE >= GEN_7); +} + +SINGLE_BATTLE_TEST("Side effected by Lucky Chant blocks critical hits") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LUCKY_CHANT].effect == EFFECT_LUCKY_CHANT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LUCKY_CHANT); MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NOT MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Battle Armor and Shell Armor block critical hits") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } + PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NOT MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Flag ignoresTargetAbility ignores Battle Armor and Shell Armor") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_KINGLER; ability = ABILITY_SHELL_ARMOR; } + PARAMETRIZE { species = SPECIES_ARMALDO; ability = ABILITY_BATTLE_ARMOR; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_SUNSTEEL_STRIKE].ignoresTargetAbility == TRUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SUNSTEEL_STRIKE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNSTEEL_STRIKE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Mold Breaker, Teravolt and Turboblaze ignore Battle Armor and Shell Armor") +{ + u32 j; + static const u32 pokemonPlayer[][2] = + { + {SPECIES_PINSIR, ABILITY_MOLD_BREAKER}, + {SPECIES_ZEKROM, ABILITY_TERAVOLT}, + {SPECIES_KYUREM_WHITE, ABILITY_TURBOBLAZE}, + }; + + u32 speciesPlayer; + u32 abilityPlayer; + u32 speciesOpponent; + u32 abilityOpponent; + + for (j = 0; j < ARRAY_COUNT(pokemonPlayer); j++) + { + PARAMETRIZE { + speciesPlayer = pokemonPlayer[j][0]; + abilityPlayer = pokemonPlayer[j][1]; + speciesOpponent = SPECIES_KINGLER; + abilityOpponent = ABILITY_SHELL_ARMOR; + } + + PARAMETRIZE { + speciesPlayer = pokemonPlayer[j][0]; + abilityPlayer = pokemonPlayer[j][1]; + speciesOpponent = SPECIES_ARMALDO; + abilityOpponent = ABILITY_BATTLE_ARMOR; + } + } + + GIVEN { + PLAYER(speciesPlayer) { Ability(abilityPlayer); } + OPPONENT(speciesOpponent) { Ability(abilityOpponent); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, criticalHit: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("User effected by Laser Focus causes moves to result in a critical hit") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LASER_FOCUS].effect == EFFECT_LASER_FOCUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LASER_FOCUS); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LASER_FOCUS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("If the target is poisoned the ability Merciless causes a move to result in a critical hit") +{ + GIVEN { + PLAYER(SPECIES_MAREANIE) { Ability(ABILITY_MERCILESS); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by two stage") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gBattleMoves[MOVE_FOCUS_ENERGY].effect == EFFECT_FOCUS_ENERGY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FOCUS_ENERGY); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Flag highCritRatio increases the critical hit ratio by one stage") +{ + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gBattleMoves[MOVE_SLASH].highCritRatio == TRUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLASH, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by one stage") +{ + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by one stage") +{ + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gItems[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Flag highCritRatio, Super Luck and Scope Lens cause the move to result in a critical hit") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SLASH].highCritRatio == TRUE); + ASSUME(gItems[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLASH, player); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Signature items Leek and Lucky Punch increase the critical hit ratio by 2 stages") +{ + u32 species; + u32 item; + + ASSUME(B_CRIT_CHANCE >= GEN_7); + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + + PARAMETRIZE { species = SPECIES_FARFETCHD; item = ITEM_LEEK; } + PARAMETRIZE { species = SPECIES_FARFETCHD_GALARIAN; item = ITEM_LEEK; } + PARAMETRIZE { species = SPECIES_SIRFETCHD; item = ITEM_LEEK; } + PARAMETRIZE { species = SPECIES_CHANSEY; item = ITEM_LUCKY_PUNCH; } + + GIVEN { + ASSUME(gItems[ITEM_LEEK].holdEffect == HOLD_EFFECT_LEEK); + ASSUME(gItems[ITEM_LUCKY_PUNCH].holdEffect == HOLD_EFFECT_LUCKY_PUNCH); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Item(item); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gItems[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); + MESSAGE("Wobbuffet used Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c index 98aa197ca1..a4b0a03f58 100644 --- a/test/battle/damage_formula.c +++ b/test/battle/damage_formula.c @@ -76,3 +76,40 @@ SINGLE_BATTLE_TEST("Damage calculation matches Gen5+ (Muscle Band, crit)") EXPECT_EQ(expectedDamage, dmg); } } + +SINGLE_BATTLE_TEST("Damage calculation matches Gen5+ (Marshadow vs Mawile)") +{ + s16 dmg; + s16 expectedDamage; + PARAMETRIZE { expectedDamage = 145; } + PARAMETRIZE { expectedDamage = 144; } + PARAMETRIZE { expectedDamage = 142; } + PARAMETRIZE { expectedDamage = 141; } + PARAMETRIZE { expectedDamage = 139; } + PARAMETRIZE { expectedDamage = 138; } + PARAMETRIZE { expectedDamage = 136; } + PARAMETRIZE { expectedDamage = 135; } + PARAMETRIZE { expectedDamage = 133; } + PARAMETRIZE { expectedDamage = 132; } + PARAMETRIZE { expectedDamage = 130; } + PARAMETRIZE { expectedDamage = 129; } + PARAMETRIZE { expectedDamage = 127; } + PARAMETRIZE { expectedDamage = 126; } + PARAMETRIZE { expectedDamage = 124; } + PARAMETRIZE { expectedDamage = 123; } + GIVEN { + PLAYER(SPECIES_MARSHADOW) { Level(100); Attack(286); } + OPPONENT(SPECIES_MAWILE) { Level(100); Defense(226); HP(241); } + } WHEN { + TURN { + MOVE(player, MOVE_SPECTRAL_THIEF, WITH_RNG(RNG_DAMAGE_MODIFIER, i), criticalHit: FALSE); + } + } + SCENE{ + MESSAGE("Marshadow used SpectrlThief!"); + HP_BAR(opponent, captureDamage: &dmg); + } + THEN{ + EXPECT_EQ(expectedDamage, dmg); + } +} diff --git a/test/battle/exp.c b/test/battle/exp.c index e01055a9be..a7879b692c 100644 --- a/test/battle/exp.c +++ b/test/battle/exp.c @@ -26,7 +26,7 @@ WILD_BATTLE_TEST("Pokemon gain exp after catching a Pokemon") #endif // B_EXP_CATCH -WILD_BATTLE_TEST("Higher leveled Pokemon give more exp", u32 exp) +WILD_BATTLE_TEST("Higher leveled Pokemon give more exp", s32 exp) { u8 level = 0; @@ -47,7 +47,7 @@ WILD_BATTLE_TEST("Higher leveled Pokemon give more exp", u32 exp) } } -WILD_BATTLE_TEST("Lucky Egg boosts gained exp points by 50%", u32 exp) +WILD_BATTLE_TEST("Lucky Egg boosts gained exp points by 50%", s32 exp) { u32 item = 0; @@ -70,7 +70,7 @@ WILD_BATTLE_TEST("Lucky Egg boosts gained exp points by 50%", u32 exp) #if (B_SCALED_EXP == GEN_5 || B_SCALED_EXP >= GEN_7) -WILD_BATTLE_TEST("Exp is scaled to player and opponent's levels", u32 exp) +WILD_BATTLE_TEST("Exp is scaled to player and opponent's levels", s32 exp) { u8 level = 0; @@ -93,7 +93,7 @@ WILD_BATTLE_TEST("Exp is scaled to player and opponent's levels", u32 exp) #endif -WILD_BATTLE_TEST("Large exp gains are supported", u32 exp) // #1455 +WILD_BATTLE_TEST("Large exp gains are supported", s32 exp) // #1455 { u8 level = 0; diff --git a/test/battle/form_change/battle_switch.c b/test/battle/form_change/battle_switch.c index bd18e0ccfc..dd6c68466e 100644 --- a/test/battle/form_change/battle_switch.c +++ b/test/battle/form_change/battle_switch.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") { GIVEN { ASSUME(P_GEN_6_POKEMON == TRUE); - PLAYER(SPECIES_AEGISLASH); + PLAYER(SPECIES_AEGISLASH_SHIELD); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -18,6 +18,6 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") MESSAGE("Aegislash used Tackle!"); MESSAGE("Foe Wobbuffet used Celebrate!"); } THEN { - EXPECT_EQ(player->species, SPECIES_AEGISLASH); + EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); } } diff --git a/test/battle/form_change/begin_battle.c b/test/battle/form_change/begin_battle.c index 328db756df..b61ff069d4 100644 --- a/test/battle/form_change/begin_battle.c +++ b/test/battle/form_change/begin_battle.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Xerneas changes into Active Form upon battle start") { GIVEN { ASSUME(P_GEN_6_POKEMON == TRUE); - PLAYER(SPECIES_XERNEAS); + PLAYER(SPECIES_XERNEAS_NEUTRAL); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } @@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("Zacian changes into its Crowned Form when holding the Rusted PARAMETRIZE { item = ITEM_RUSTED_SWORD; } GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); - PLAYER(SPECIES_ZACIAN) { Item(item); } + PLAYER(SPECIES_ZACIAN_HERO_OF_MANY_BATTLES) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { if (item == ITEM_NONE) - EXPECT_EQ(player->species, SPECIES_ZACIAN); + EXPECT_EQ(player->species, SPECIES_ZACIAN_HERO_OF_MANY_BATTLES); else EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED_SWORD); } @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Zacian's Iron Head becomes Behemoth Blade upon form change") { GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); - PLAYER(SPECIES_ZACIAN) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + PLAYER(SPECIES_ZACIAN_HERO_OF_MANY_BATTLES) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } @@ -54,13 +54,13 @@ SINGLE_BATTLE_TEST("Zamazenta changes into its Crowned Form when holding the Rus PARAMETRIZE { item = ITEM_RUSTED_SHIELD; } GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); - PLAYER(SPECIES_ZAMAZENTA) { Item(item); } + PLAYER(SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { if (item == ITEM_NONE) - EXPECT_EQ(player->species, SPECIES_ZAMAZENTA); + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES); else EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED_SHIELD); } @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change { GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); - PLAYER(SPECIES_ZAMAZENTA) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + PLAYER(SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c index f4baa2894e..82f361917e 100644 --- a/test/battle/form_change/faint.c +++ b/test/battle/form_change/faint.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") { GIVEN { ASSUME(P_GEN_6_POKEMON == TRUE); - PLAYER(SPECIES_AEGISLASH) { HP(1); } + PLAYER(SPECIES_AEGISLASH_SHIELD) { HP(1); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -14,6 +14,6 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") MESSAGE("Foe Wobbuffet used Gust!"); MESSAGE("Aegislash fainted!"); } THEN { - EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH); + EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); } } diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index 3b47c7c86b..51037e77c7 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent") SINGLE_BATTLE_TEST("Mega Evolution affects turn order") { GIVEN { - ASSUME(B_MEGA_EVO_TURN_ORDER); + ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7); PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn order") { GIVEN { - ASSUME(B_MEGA_EVO_TURN_ORDER); + ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7); ASSUME(gSpeciesInfo[SPECIES_SABLEYE_MEGA].abilities[0] != ABILITY_STALL && gSpeciesInfo[SPECIES_SABLEYE_MEGA].abilities[1] != ABILITY_STALL); PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); } diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index e58d42c3da..0b4b07d891 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") { GIVEN { ASSUME(P_GEN_7_POKEMON == TRUE); - ASSUME(B_MEGA_EVO_TURN_ORDER); + ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7); PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { diff --git a/test/battle/hold_effect/attack_up.c b/test/battle/hold_effect/attack_up.c new file mode 100644 index 0000000000..0602d651d7 --- /dev/null +++ b/test/battle/hold_effect/attack_up.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Liechi Berry raises the holder's Attack by one stage when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LIECHI_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); + } + } THEN { + if (move == MOVE_DRAGON_RAGE) + EXPECT_EQ(player->statStages[STAT_ATK], 7); + } +} + +SINGLE_BATTLE_TEST("Liechi Berry raises Attack by one stage when HP drops to 1/2 or below if holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_LIECHI_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Liechi Berry, the Attack of Bellsprout rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Liechi Berry raises Attack by one stage when HP drops to 1/4 or below if holder has Ripen") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_APPLIN) { MaxHP(160); HP(80); Ability(ABILITY_RIPEN); Item(ITEM_LIECHI_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Liechi Berry, the Attack of Applin sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index 39e6c22a69..0073f70609 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -21,8 +21,8 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate") } SCENE { HP_BAR(player, captureDamage: &turnOneHit); ABILITY_POPUP(player, ABILITY_INTIMIDATE); - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - MESSAGE("Foe Wobbuffet's Attack was not lowered!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -55,31 +55,8 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") } WHEN { TURN { MOVE(player, move); } } SCENE { - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } - switch (move) - { - case MOVE_GROWL: - MESSAGE("Foe Wobbuffet's Attack was not lowered!"); - break; - case MOVE_LEER: - MESSAGE("Foe Wobbuffet's Defense was not lowered!"); - break; - case MOVE_CONFIDE: - MESSAGE("Foe Wobbuffet's Sp. Atk was not lowered!"); - break; - case MOVE_FAKE_TEARS: - MESSAGE("Foe Wobbuffet's Sp. Def was not lowered!"); - break; - case MOVE_SCARY_FACE: - MESSAGE("Foe Wobbuffet's Speed was not lowered!"); - break; - case MOVE_SWEET_SCENT: - MESSAGE("Foe Wobbuffet's evasiveness was not lowered!"); - break; - case MOVE_SAND_ATTACK: - MESSAGE("Foe Wobbuffet's accuracy was not lowered!"); - break; - } + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); } } @@ -104,8 +81,11 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }; } WHEN { - TURN { MOVE(player, MOVE_ROCK_SMASH); } + TURN { MOVE(player, move); } } SCENE { - NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + } } } diff --git a/test/battle/hold_effect/critical_hit_up.c b/test/battle/hold_effect/critical_hit_up.c new file mode 100644 index 0000000000..c0cc2e864f --- /dev/null +++ b/test/battle/hold_effect/critical_hit_up.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_LANSAT_BERRY].holdEffect == HOLD_EFFECT_CRITICAL_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LANSAT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + } + } +} + +SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/2 or below") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_LANSAT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Bellsprout used Lansat Berry to get pumped!"); + } +} + +SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].highCritRatio == FALSE); + ASSUME(B_CRIT_CHANCE >= GEN_6); + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LANSAT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("A critical hit!"); + } +} diff --git a/test/battle/hold_effect/custap_berry.c b/test/battle/hold_effect/custap_berry.c new file mode 100644 index 0000000000..8b6c7832d4 --- /dev/null +++ b/test/battle/hold_effect/custap_berry.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_CUSTAP_BERRY].holdEffect == HOLD_EFFECT_CUSTAP_BERRY); +} + +SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority bracket when HP is below 1/4") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(1); MaxHP(160); HP(40); Item(ITEM_CUSTAP_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet can act faster, thanks to Custap Berry!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority bracket when HP is below 1/2. If the holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { Speed(1); MaxHP(160); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_CUSTAP_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Bellsprout can act faster, thanks to Custap Berry!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} diff --git a/test/battle/hold_effect/defense_up.c b/test/battle/hold_effect/defense_up.c new file mode 100644 index 0000000000..774cd3b981 --- /dev/null +++ b/test/battle/hold_effect/defense_up.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_GANLON_BERRY].holdEffect == HOLD_EFFECT_DEFENSE_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Ganlon Berry raises the holder's Defense by one stage when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_GANLON_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Ganlon Berry, the Defense of Wobbuffet rose!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Ganlon Berry, the Defense of Wobbuffet rose!"); + } + } THEN { + if (move == MOVE_DRAGON_RAGE) + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Ganlon Berry raises Defense by one stage when HP drops to 1/2 or below if holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_GANLON_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Ganlon Berry, the Defense of Bellsprout rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Ganlon Berry raises Defense by one stage when HP drops to 1/4 or below if holder has Ripen") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_APPLIN) { MaxHP(160); HP(80); Ability(ABILITY_RIPEN); Item(ITEM_GANLON_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Ganlon Berry, the Defense of Applin sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index 4409f5d5b6..45dfc539b8 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") OPPONENT(SPECIES_RAICHU) { Item(ITEM_EJECT_BUTTON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TACKLE); } diff --git a/test/battle/hold_effect/enigma_berry.c b/test/battle/hold_effect/enigma_berry.c index 6758ac4026..79db0678dc 100644 --- a/test/battle/hold_effect/enigma_berry.c +++ b/test/battle/hold_effect/enigma_berry.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - gItems[ITEM_ENIGMA_BERRY].holdEffect == HOLD_EFFECT_ENIGMA_BERRY; + ASSUME(gItems[ITEM_ENIGMA_BERRY].holdEffect == HOLD_EFFECT_ENIGMA_BERRY); } SINGLE_BATTLE_TEST("Enigma Berry recovers 25% of HP if hit by super effective move") diff --git a/test/battle/hold_effect/jaboca_berry.c b/test/battle/hold_effect/jaboca_berry.c new file mode 100644 index 0000000000..d009ae03a6 --- /dev/null +++ b/test/battle/hold_effect/jaboca_berry.c @@ -0,0 +1,60 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_JABOCA_BERRY].holdEffect == HOLD_EFFECT_JABOCA_BERRY); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Jaboca Berry causes the attacker to lose 1/8 of its max HP if a physical move was used") +{ + s16 damage; + u16 move; + + PARAMETRIZE { move = MOVE_SWIFT; } + PARAMETRIZE { move = MOVE_TACKLE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_JABOCA_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_TACKLE) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + HP_BAR(player, captureDamage: &damage); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + } + } + } THEN { + if (move == MOVE_TACKLE) + EXPECT_EQ(player->maxHP / 8, damage); + } +} + +SINGLE_BATTLE_TEST("Jaboca Berry tirggers before Bug Bite can steal it") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(gBattleMoves[MOVE_BUG_BITE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_JABOCA_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + HP_BAR(player); + MESSAGE("Wyanut was hurt by Foe Wobbuffet's Jaboca Berry!"); + NOT MESSAGE("Wynaut stole and ate Foe Wobbuffet's Jaboca Berry!"); + } +} diff --git a/test/battle/hold_effect/kee_berry.c b/test/battle/hold_effect/kee_berry.c new file mode 100644 index 0000000000..6e5319416f --- /dev/null +++ b/test/battle/hold_effect/kee_berry.c @@ -0,0 +1,75 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_KEE_BERRY].holdEffect == HOLD_EFFECT_KEE_BERRY); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by one stage when hit by a physical move") +{ + u16 move; + + PARAMETRIZE { move = MOVE_SWIFT; } + PARAMETRIZE { move = MOVE_TACKLE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_KEE_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_TACKLE) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + } + } + } THEN { + if (move == MOVE_TACKLE) + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by two stages with Ripen when hit by a physical move") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_APPLIN) { Item(ITEM_KEE_BERRY); Ability(ABILITY_RIPEN); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Kee Berry, the Defense of Foe Applin sharply rose!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Kee Berry is not triggered by a special move") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_KEE_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_SWIFT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, player); + HP_BAR(opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + } + } +} diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 7e51a3bd75..341f9c3779 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - gItems[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS; + ASSUME(gItems[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); } SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") diff --git a/test/battle/hold_effect/maranga_berry.c b/test/battle/hold_effect/maranga_berry.c new file mode 100644 index 0000000000..0a3edffbf5 --- /dev/null +++ b/test/battle/hold_effect/maranga_berry.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_MARANGA_BERRY].holdEffect == HOLD_EFFECT_MARANGA_BERRY); +} + +SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by one stage when hit by a special move") +{ + u16 move = MOVE_NONE; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MARANGA_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_SWIFT) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + } + } + } THEN { + if (move == MOVE_SWIFT) + EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by two stages with Ripen when hit by a special move") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_APPLIN) { Item(ITEM_MARANGA_BERRY); Ability(ABILITY_RIPEN); } + } WHEN { + TURN { MOVE(player, MOVE_SWIFT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Using Maranga Berry, the Sp. Def of Foe Applin sharply rose!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index 76cd27c6f1..63a0bb3eae 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - gItems[ITEM_METRONOME].holdEffect == HOLD_EFFECT_METRONOME; + ASSUME(gItems[ITEM_METRONOME].holdEffect == HOLD_EFFECT_METRONOME); } const uq4_12_t MetronomeMultipliers[] = { diff --git a/test/battle/hold_effect/micle_berry.c b/test/battle/hold_effect/micle_berry.c new file mode 100644 index 0000000000..79c40f68cc --- /dev/null +++ b/test/battle/hold_effect/micle_berry.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_MICLE_BERRY].holdEffect == HOLD_EFFECT_MICLE_BERRY); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_MICLE_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet boosted the accuracy of its next move using Micle Berry!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet boosted the accuracy of its next move using Micle Berry!"); + } + } +} + +SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/2 or below") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_MICLE_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Bellsprout boosted the accuracy of its next move using Micle Berry!"); + } +} + +SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2") +{ + PASSES_RANDOMLY(24, 25, RNG_ACCURACY); + GIVEN { + ASSUME(gBattleMoves[MOVE_SUBMISSION].accuracy == 80); + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_MICLE_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); MOVE(player, MOVE_SUBMISSION); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet boosted the accuracy of its next move using Micle Berry!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBMISSION, player); + } +} diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c index 1e9058b08e..9191f3fee1 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); } -SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 damage) +SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's positive stat changes in a turn", s16 damage) { u32 item; PARAMETRIZE { item = ITEM_NONE; } @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 } } -SINGLE_BATTLE_TEST("Mirror Herb copies all of of Stuff Cheeks") +SINGLE_BATTLE_TEST("Mirror Herb copies all of Stuff Cheeks' stat boosts") { GIVEN { ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); diff --git a/test/battle/hold_effect/random_stat_up.c b/test/battle/hold_effect/random_stat_up.c new file mode 100644 index 0000000000..9033c6b0af --- /dev/null +++ b/test/battle/hold_effect/random_stat_up.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_STARF_BERRY].holdEffect == HOLD_EFFECT_RANDOM_STAT_UP); +} + +TO_DO_BATTLE_TEST("Starf Berry randomly raises the holder's Attack, Defense, Sp. Atk, Sp. Def, or Speed by two stages when the holder's HP drop to 1/4 or below") +TO_DO_BATTLE_TEST("Starf Berry randomly raises the holder's Attack, Defense, Sp. Atk, Sp. Def, or Speed by two stages when the holder's HP drop to 1/2 or below if it has Gluttony") +TO_DO_BATTLE_TEST("Starf Berry randomly raises the holder's Attack, Defense, Sp. Atk, Sp. Def, or Speed by four stages when the holder's HP drop to 1/4 or below if it has Riped") diff --git a/test/battle/hold_effect/rowap_berry.c b/test/battle/hold_effect/rowap_berry.c new file mode 100644 index 0000000000..d019a0f77b --- /dev/null +++ b/test/battle/hold_effect/rowap_berry.c @@ -0,0 +1,59 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_ROWAP_BERRY].holdEffect == HOLD_EFFECT_ROWAP_BERRY); +} + +SINGLE_BATTLE_TEST("Rowap Berry causes the attacker to lose 1/8 of its max HP if a special move was used") +{ + s16 damage; + u16 move; + + PARAMETRIZE { move = MOVE_SWIFT; } + PARAMETRIZE { move = MOVE_TACKLE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_SWIFT].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ROWAP_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_SWIFT) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + HP_BAR(player, captureDamage: &damage); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + } + } + } THEN { + if (move == MOVE_SWIFT) + EXPECT_EQ(player->maxHP / 8, damage); + } +} + +SINGLE_BATTLE_TEST("Rowap Berry is not triggered by a physical move") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ROWAP_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + } + } +} diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index 3deeeb810f..1b8c47de70 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -3,14 +3,13 @@ ASSUMPTIONS { - gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES; + ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); }; SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") { GIVEN { ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); - ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { @@ -21,6 +20,28 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") } } -TO_DO_BATTLE_TEST("Safety Goggles blocks damage from hail"); -TO_DO_BATTLE_TEST("Safety Goggles blocks damage from sandstorm"); +SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(player, MOVE_HAIL); } + } SCENE { + NOT MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + } +} + +SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(player, MOVE_SANDSTORM); } + } SCENE { + NOT MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + } +} + TO_DO_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect"); diff --git a/test/battle/hold_effect/special_attack_up.c b/test/battle/hold_effect/special_attack_up.c new file mode 100644 index 0000000000..9815ab1212 --- /dev/null +++ b/test/battle/hold_effect/special_attack_up.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_PETAYA_BERRY].holdEffect == HOLD_EFFECT_SP_ATTACK_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Petaya Berry raises the holder's Sp. Atk by one stage when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_PETAYA_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Petaya Berry, the Sp. Atk of Wobbuffet rose!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Petaya Berry, the Sp. Atk of Wobbuffet rose!"); + } + } THEN { + if (move == MOVE_DRAGON_RAGE) + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Petaya Berry raises Sp. Atk by one stage when HP drops to 1/2 or below if holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_PETAYA_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Petaya Berry, the Sp. Atk of Bellsprout rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Petaya Berry raises Sp. Atk by one stage when HP drops to 1/4 or below if holder has Ripen") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_APPLIN) { MaxHP(160); HP(80); Ability(ABILITY_RIPEN); Item(ITEM_PETAYA_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Petaya Berry, the Sp. Atk of Applin sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/special_defense_up.c b/test/battle/hold_effect/special_defense_up.c new file mode 100644 index 0000000000..2ba3c02a57 --- /dev/null +++ b/test/battle/hold_effect/special_defense_up.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Apicot Berry raises the holder's Sp. Def by one stage when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_APICOT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Apicot Berry, the Sp. Def of Wobbuffet rose!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Apicot Berry, the Sp. Def of Wobbuffet rose!"); + } + } THEN { + if (move == MOVE_DRAGON_RAGE) + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Apicot Berry raises Sp. Def by one stage when HP drops to 1/2 or below if holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_APICOT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Apicot Berry, the Sp. Def of Bellsprout rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Apicot Berry raises Sp. Def by one stage when HP drops to 1/4 or below if holder has Ripen") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_APPLIN) { MaxHP(160); HP(80); Ability(ABILITY_RIPEN); Item(ITEM_APICOT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Apicot Berry, the Sp. Def of Applin sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/speed_up.c b/test/battle/hold_effect/speed_up.c new file mode 100644 index 0000000000..558d4262e8 --- /dev/null +++ b/test/battle/hold_effect/speed_up.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_SALAC_BERRY].holdEffect == HOLD_EFFECT_SPEED_UP); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); +} + +SINGLE_BATTLE_TEST("Salac Berry raises the holder's Speed by one stage when HP drops to 1/4 or below") +{ + u32 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_DRAGON_RAGE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_SALAC_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_TACKLE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Salac Berry, the Speed of Wobbuffet rose!"); + } + } else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Salac Berry, the Speed of Wobbuffet rose!"); + } + } THEN { + if (move == MOVE_DRAGON_RAGE) + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Salac Berry raises Speed by one stage when HP drops to 1/2 or below if holder has Gluttony") +{ + GIVEN { + PLAYER(SPECIES_BELLSPROUT) { MaxHP(80); HP(80); Ability(ABILITY_GLUTTONY); Item(ITEM_SALAC_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Salac Berry, the Speed of Bellsprout rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Salac Berry raises Speed by one stage when HP drops to 1/4 or below if holder has Ripen") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_APPLIN) { MaxHP(160); HP(80); Ability(ABILITY_RIPEN); Item(ITEM_SALAC_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_RAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Using Salac Berry, the Speed of Applin sharply rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c new file mode 100644 index 0000000000..a34bb6a347 --- /dev/null +++ b/test/battle/hold_effect/white_herb.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS); +} + +SINGLE_BATTLE_TEST("White Herb restores stats when they're lowered") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's White Herb restored its status!"); + } THEN { + EXPECT(player->item == ITEM_NONE); + EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimidate in singles") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { ; } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's White Herb restored its status!"); + } THEN { + EXPECT(player->item == ITEM_NONE); + EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimidate in doubles") +{ + GIVEN { + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WYNAUT) { Item(ITEM_WHITE_HERB); } + PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { ; } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("Foe Wobbuffet's White Herb restored its status!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); + MESSAGE("Foe Wynaut's White Herb restored its status!"); + } THEN { + EXPECT(opponentLeft->item == ITEM_NONE); + EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + EXPECT(opponentRight->item == ITEM_NONE); + EXPECT(opponentRight->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/item_effect/set_focus_energy.c b/test/battle/item_effect/set_focus_energy.c deleted file mode 100644 index da326bbe36..0000000000 --- a/test/battle/item_effect/set_focus_energy.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") -{ - ASSUME(B_CRIT_CHANCE >= GEN_7); - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(gItems[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } - TURN { MOVE(player, MOVE_SCRATCH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet used Dire Hit to get pumped!"); - MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("A critical hit!"); - } -} diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index d46dbd9c5c..5d164de40d 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -34,8 +34,10 @@ SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_ABSORB); } } SCENE { MESSAGE("Wobbuffet was prevented from healing!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); - NOT HP_BAR(opponent); - NOT HP_BAR(player); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(opponent); + HP_BAR(player); + } } } diff --git a/test/battle/move_effect/aurora_veil.c b/test/battle/move_effect/aurora_veil.c new file mode 100644 index 0000000000..ff255d9ae4 --- /dev/null +++ b/test/battle/move_effect/aurora_veil.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); +} + +SINGLE_BATTLE_TEST("Aurora Veil can only be used in Hail and Snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_AURORA_VEIL); } + } SCENE { + if (move == MOVE_CELEBRATE) + MESSAGE("But it failed!"); + else + NOT MESSAGE("But it failed!"); + } +} + +TO_DO_BATTLE_TEST("Aurora Veil reduces damage done to the user by half in singles") +TO_DO_BATTLE_TEST("Aurora Veil reduces damage done to the user by roughly a third in doubles") +TO_DO_BATTLE_TEST("Aurora Veil's damage reduction is ignored by Critical Hits") +TO_DO_BATTLE_TEST("Aurora Veil's damage reduction doesn't stack with Reflect or Light Screen") +TO_DO_BATTLE_TEST("Aurora Veil doesn't reduce confusion damage") +TO_DO_BATTLE_TEST("Aurora Veil doesn't reduce damage done by moves that do direct damage") // Bide, Counter, Endeavor, Final Gambit, Metal Burst, Mirror Coat, Psywave, Seismic Toss, Sonic Boom, Super Fang diff --git a/test/battle/move_effect/brick_break.c b/test/battle/move_effect/brick_break.c new file mode 100644 index 0000000000..8bc05c0eea --- /dev/null +++ b/test/battle/move_effect/brick_break.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BRICK_BREAK].effect == EFFECT_BRICK_BREAK); + ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gBattleMoves[MOVE_LIGHT_SCREEN].effect == EFFECT_LIGHT_SCREEN); + ASSUME(gBattleMoves[MOVE_REFLECT].effect == EFFECT_REFLECT); + ASSUME(gBattleMoves[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); +} + +SINGLE_BATTLE_TEST("Brick Break removes Light Screen, Reflect and Aurora Veil from the target's side of the field") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_BRICK_BREAK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BRICK_BREAK, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Brick Break doesn't remove Light Screen, Reflect and Aurora Veil if the target is immune") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_BRICK_BREAK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BRICK_BREAK, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Brick Break doesn't remove Light Screen, Reflect and Aurora Veil if the target Protected") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_BRICK_BREAK); MOVE(opponent, MOVE_PROTECT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BRICK_BREAK, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Brick Break doesn't remove Light Screen, Reflect and Aurora Veil if it misses") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); } + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_BRICK_BREAK, hit: FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BRICK_BREAK, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Brick Break can remove Light Screen, Reflect and Aurora Veil on users side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_SNOWSCAPE); + MOVE(playerLeft, move); + MOVE(playerRight, MOVE_BRICK_BREAK, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BRICK_BREAK, playerRight); + MESSAGE("The wall shattered!"); + HP_BAR(playerLeft); + } +} + +SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros Form") +{ + u16 speciesPlayer; + u16 speciesOpponent; + + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } + + GIVEN { + PLAYER(speciesPlayer); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} diff --git a/test/battle/move_effect/bug_bite.c b/test/battle/move_effect/bug_bite.c index 385b8a400f..8f59e6f003 100644 --- a/test/battle/move_effect/bug_bite.c +++ b/test/battle/move_effect/bug_bite.c @@ -114,18 +114,15 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e } } -// To verify in the actual games. -// Bulbapedia - The effect of a Jaboca Berry will activate before the Berry can be stolen. -// Showdown - Jaboca Berry is stolen and eaten and nothing happens. This is how it currently works on expansion. -TO_DO_BATTLE_TEST("Bug Bite interaction with Jaboca Berry."); - SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") { GIVEN { + ASSUME(gItems[ITEM_TANGA_BERRY].holdEffect == HOLD_EFFECT_RESIST_BERRY); + ASSUME(gItems[ITEM_TANGA_BERRY].holdEffectParam == TYPE_BUG); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_TANGA_BERRY); } } WHEN { - TURN { MOVE(player, MOVE_BUG_BITE); } + TURN { MOVE(player, MOVE_BUG_BITE); } } SCENE { MESSAGE("Wobbuffet used Bug Bite!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); diff --git a/test/battle/move_effect/burn_hit.c b/test/battle/move_effect/burn_hit.c index 3f257dfcb3..627a051a53 100644 --- a/test/battle/move_effect/burn_hit.c +++ b/test/battle/move_effect/burn_hit.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Ember inflicts burn") } } -SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type") +SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type Pokémon") { GIVEN { ASSUME(gSpeciesInfo[SPECIES_CHARMANDER].types[0] == TYPE_FIRE); @@ -32,7 +32,9 @@ SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - NOT STATUS_ICON(opponent, burn: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + STATUS_ICON(opponent, burn: TRUE); + } } } diff --git a/test/battle/move_effect/dire_claw.c b/test/battle/move_effect/dire_claw.c index 421ba201d0..9149f4a3cc 100644 --- a/test/battle/move_effect/dire_claw.c +++ b/test/battle/move_effect/dire_claw.c @@ -25,11 +25,9 @@ SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_SLP) { + } else if (statusAnim == B_ANIM_STATUS_SLP) { STATUS_ICON(opponent, sleep: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PSN) { + } else if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponent, poison: TRUE); } } @@ -53,12 +51,13 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PSN) { - NOT STATUS_ICON(opponent, poison: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } } } } @@ -86,15 +85,15 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_SLP) { - NOT STATUS_ICON(opponent, sleep: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PSN) { - NOT STATUS_ICON(opponent, poison: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } else if (statusAnim == B_ANIM_STATUS_SLP) { + STATUS_ICON(opponent, sleep: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } } } } @@ -115,15 +114,15 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_SLP) { - NOT STATUS_ICON(opponent, sleep: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PSN) { - NOT STATUS_ICON(opponent, poison: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } else if (statusAnim == B_ANIM_STATUS_SLP) { + STATUS_ICON(opponent, sleep: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } } } } diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 047fe78982..62fd918a1b 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -47,8 +47,10 @@ SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies") TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_DREAM_EATER); } } SCENE { MESSAGE("Wobbuffet was prevented from healing!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player); - NOT HP_BAR(opponent); - NOT HP_BAR(player); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player); + HP_BAR(opponent); + HP_BAR(player); + } } } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c new file mode 100644 index 0000000000..131ef03813 --- /dev/null +++ b/test/battle/move_effect/embargo.c @@ -0,0 +1,395 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_EMBARGO].effect == EFFECT_EMBARGO); +} + +SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held item") +{ + GIVEN { + ASSUME(gItems[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FOCUS_SASH); }; + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { MOVE(player, MOVE_FISSURE); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Wobbuffet used Fissure!"); + HP_BAR(opponent, hp: 0); + } +} + +SINGLE_BATTLE_TEST("Embargo blocks an affected Pokémon's trainer from using items") +{ + // As of writing, the battle tests system doesn't perform all the operations involved + // in the action of an NPC using an item in battle. + KNOWN_FAILING; + GIVEN { + ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { USE_ITEM(opponent, ITEM_POTION, partyIndex: 0); } + } SCENE { + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + } THEN { + EXPECT_EQ(opponent->hp, 1); + } +} + +WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect experience gain", s32 exp) +{ + u32 item; + + PARAMETRIZE { item = ITEM_LUCKY_EGG; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Level(20); Item(item); } + OPPONENT(SPECIES_CATERPIE) { Level(10); HP(1); } + ASSUME(gItems[ITEM_LUCKY_EGG].holdEffect == HOLD_EFFECT_LUCKY_EGG); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } + } SCENE { + MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("Wobbuffet can't use items anymore!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wild Caterpie fainted!"); + EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); + } FINALLY { + EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); + } +} + +WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort values") +{ + u32 finalHPEVAmount; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POWER_WEIGHT); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + ASSUME(gItems[ITEM_POWER_WEIGHT].holdEffect == HOLD_EFFECT_POWER_ITEM); + ASSUME(gItems[ITEM_POWER_WEIGHT].holdEffectParam == 8); + ASSUME(gItems[ITEM_POWER_WEIGHT].secondaryId == STAT_HP); + ASSUME(gSpeciesInfo[SPECIES_CATERPIE].evYield_HP == 1); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } + } SCENE { + // Turn 1 + MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wild Caterpie fainted!"); + } THEN { + finalHPEVAmount = (GetMonData(&PLAYER_PARTY[0], MON_DATA_HP_EV) + gItems[ITEM_POWER_WEIGHT].holdEffectParam + gSpeciesInfo[SPECIES_CATERPIE].evYield_HP); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HP_EV), finalHPEVAmount); + } +} + +SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(19); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MACHO_BRACE); Speed(20); } + ASSUME(gItems[ITEM_MACHO_BRACE].holdEffect == HOLD_EFFECT_MACHO_BRACE); + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Foe Wobbuffet used Scratch!"); + MESSAGE("Wobbuffet used Scratch!"); + } +} + +WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect friendship") +{ + u32 initialFriendship; + u32 finalFriendship; + + KNOWN_FAILING; // Pokémon are currently not obtaining Friendship for using items in battle. + GIVEN { + ASSUME(gItems[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_X_ACCURACY); } + TURN { MOVE(player, MOVE_SING); } + } SCENE { + MESSAGE("Wobbuffet used Sing!"); + MESSAGE("Wild Wobbuffet fell asleep!"); + } THEN { + initialFriendship = GetMonData(&PLAYER_PARTY[0], MON_DATA_FRIENDSHIP); + finalFriendship = GetMonData(&gPlayerParty[0], MON_DATA_FRIENDSHIP); + EXPECT_EQ(finalFriendship, initialFriendship + 2); + } +} + +SINGLE_BATTLE_TEST("Embargo doesn't block a held item's form-changing effect, but it does block its other effects", s16 damage) +{ + u32 heldItem; + + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_MEADOW_PLATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARCEUS_GRASS) { Item(heldItem); }; + ASSUME(gItems[ITEM_MEADOW_PLATE].holdEffect == HOLD_EFFECT_PLATE); + ASSUME(gItems[ITEM_MEADOW_PLATE].holdEffectParam == 20); + ASSUME(gItems[ITEM_MEADOW_PLATE].secondaryId == TYPE_GRASS); + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); MOVE(opponent, MOVE_RAZOR_LEAF); } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") +{ + u32 heldItem, moveId; + + PARAMETRIZE { heldItem = ITEM_LIGHT_BALL; moveId = MOVE_FLING; } + PARAMETRIZE { heldItem = ITEM_CHERI_BERRY; moveId = MOVE_NATURAL_GIFT; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(heldItem); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); } + TURN { MOVE(player, moveId); } + } SCENE { + // Turn 1 + MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("Wobbuffet can't use items anymore!"); + // Turn 2 + if (moveId == MOVE_FLING) + MESSAGE("Wobbuffet used Fling!"); + else + MESSAGE("Wobbuffet used Natural Gift!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target from activating") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { MOVE(player, MOVE_FLING); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Wobbuffet used Fling!"); + MESSAGE("Wobbuffet flung its Light Ball!"); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + } +} + +SINGLE_BATTLE_TEST("Embargo is passed via Baton Pass") +{ + KNOWN_FAILING; // Embargo is currently being lifted right after a Baton Pass when it shouldn't. + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIGHT_BALL); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); } + TURN { MOVE(player, MOVE_BATON_PASS); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_FLING); } + } SCENE { + // Turn 1 + MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Wobbuffet used Baton Pass!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, player); + MESSAGE("Go! Wynaut!"); + // Turn 3 + MESSAGE("Wynaut used Fling!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained through Bug Bite or Pluck") +{ + u32 hp = 10; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }; + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); } + TURN { MOVE(player, MOVE_PLUCK); } + } SCENE { + // Turn 1 + MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Wobbuffet used Pluck!"); + HP_BAR(opponent); + MESSAGE("Wobbuffet stole and ate Foe Wobbuffet's Oran Berry!"); + HP_BAR(player, damage: -hp); + } +} + +SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move Judgment", s16 damage) +{ + u32 heldItem; + + PARAMETRIZE{ heldItem = ITEM_NONE; } + PARAMETRIZE{ heldItem = ITEM_PIXIE_PLATE; } + GIVEN { + PLAYER(SPECIES_ARCEUS) { Item(heldItem); }; + OPPONENT(SPECIES_DRAGONITE); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); } + } SCENE { + MESSAGE("Foe Dragonite used Embargo!"); + MESSAGE("Arceus can't use items anymore!"); + MESSAGE("Arceus used Judgment!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move Techno Blast", s16 damage) +{ + u32 heldItem; + + PARAMETRIZE{ heldItem = ITEM_NONE; } + PARAMETRIZE{ heldItem = ITEM_SHOCK_DRIVE; } + GIVEN { + PLAYER(SPECIES_GENESECT) { Item(heldItem); }; + OPPONENT(SPECIES_GYARADOS); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); } + } SCENE { + MESSAGE("Foe Gyarados used Embargo!"); + MESSAGE("Genesect can't use items anymore!"); + MESSAGE("Genesect used Techno Blast!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move Multi Attack", s16 damage) +{ + u32 heldItem; + + PARAMETRIZE{ heldItem = ITEM_NONE; } + PARAMETRIZE{ heldItem = ITEM_FIRE_MEMORY; } + GIVEN { + PLAYER(SPECIES_SILVALLY) { Item(heldItem); }; + OPPONENT(SPECIES_VENUSAUR); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); } + } SCENE { + MESSAGE("Foe Venusaur used Embargo!"); + MESSAGE("Silvally can't use items anymore!"); + MESSAGE("Silvally used Multi-Attack!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }; + } WHEN { + TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_EMBARGO); } + TURN { MOVE(opponent, MOVE_FLING); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Magic Coat!"); + MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); + MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet's Embargo was bounced back by MAGIC COAT!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Foe Wobbuffet used Fling!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") +{ + // Embargo is currently being lifted right after a Baton Pass when it shouldn't. + // As a result, we can't check if Embargo is letting the opponent Mega Evolve normally or not. + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_Y); }; + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Foe Wobbuffet used Baton Pass!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + MESSAGE("2 sent out Charizard!"); + MESSAGE("Foe Charizard's CharizarditeY is reacting to 2's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + MESSAGE("Foe Charizard has Mega Evolved into Mega Charizard!"); + } +} + +SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") +{ + // Embargo is currently being lifted right after a Baton Pass when it shouldn't. + // As a result, we can't check if Embargo is letting the opponent undergo Primal Reversion normally or not. + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }; + } WHEN { + TURN { MOVE(player, MOVE_EMBARGO); } + TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + TURN { MOVE(opponent, MOVE_FLING); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Embargo!"); + MESSAGE("Foe Wobbuffet can't use items anymore!"); + // Turn 2 + MESSAGE("Foe Wobbuffet used Baton Pass!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + MESSAGE("2 sent out Groudon!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); + MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + ABILITY_POPUP(opponent); + MESSAGE("The extremely harsh sunlight was not lessened at all!!"); + // Turn 3 + MESSAGE("Foe Groudon used Fling!"); + MESSAGE("But it failed!"); + } +} + +TO_DO_BATTLE_TEST("Embargo doesn't prevent the usage of Z-Moves") +TO_DO_BATTLE_TEST("Embargo doesn't block held item effects that affect prize money") diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index eff6c33b20..08d3f25448 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); } -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns") +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for player") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -25,6 +25,25 @@ SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns") } } +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for opponent") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_ENCORE); } + TURN { FORCED_MOVE(opponent); } + TURN { FORCED_MOVE(opponent); } + TURN { MOVE(opponent, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + } +} + SINGLE_BATTLE_TEST("Encore has no effect if no previous move") { GIVEN { diff --git a/test/battle/move_effect/flinch_status.c b/test/battle/move_effect/flinch_status.c new file mode 100644 index 0000000000..6d0012d42c --- /dev/null +++ b/test/battle/move_effect/flinch_status.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_THUNDER_FANG].effect == EFFECT_FLINCH_STATUS); + ASSUME(gBattleMoves[MOVE_THUNDER_FANG].argument == STATUS1_PARALYSIS); + ASSUME(gBattleMoves[MOVE_ICE_FANG].effect == EFFECT_FLINCH_STATUS); + ASSUME(gBattleMoves[MOVE_ICE_FANG].argument == STATUS1_FREEZE); + ASSUME(gBattleMoves[MOVE_FIRE_FANG].effect == EFFECT_FLINCH_STATUS); + ASSUME(gBattleMoves[MOVE_FIRE_FANG].argument == STATUS1_BURN); +} + +SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang inflict status 10% of the time") +{ + u16 move; + + PARAMETRIZE { move = MOVE_THUNDER_FANG; } + PARAMETRIZE { move = MOVE_ICE_FANG; } + PARAMETRIZE { move = MOVE_FIRE_FANG; } + + PASSES_RANDOMLY(10, 100, RNG_SECONDARY_EFFECT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_THUNDER_FANG) { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); + STATUS_ICON(opponent, paralysis: TRUE); + } if (move == MOVE_ICE_FANG) { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + STATUS_ICON(opponent, freeze: TRUE); + } if (move == MOVE_FIRE_FANG) { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + STATUS_ICON(opponent, burn: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang cause the opponent to flinch 10% of the time") +{ + u16 move; + + PARAMETRIZE { move = MOVE_THUNDER_FANG; } + PARAMETRIZE { move = MOVE_ICE_FANG; } + PARAMETRIZE { move = MOVE_FIRE_FANG; } + + PASSES_RANDOMLY(10, 100, RNG_SECONDARY_EFFECT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet flinched!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} diff --git a/test/battle/move_effect/freeze_hit.c b/test/battle/move_effect/freeze_hit.c index 5d99311cee..4c9ff557e4 100644 --- a/test/battle/move_effect/freeze_hit.c +++ b/test/battle/move_effect/freeze_hit.c @@ -4,6 +4,7 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); + ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70); } SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") @@ -21,7 +22,7 @@ SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") } } -SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type") +SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon") { GIVEN { ASSUME(gSpeciesInfo[SPECIES_SNORUNT].types[0] == TYPE_ICE); @@ -32,7 +33,36 @@ SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); - NOT STATUS_ICON(opponent, freeze: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + STATUS_ICON(opponent, freeze: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Freeze cannot be inflicted in Sunlight") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_ICE_BEAM); } + } SCENE { + NOT MESSAGE("Wobbuffet was frozen solid!"); + } +} + +SINGLE_BATTLE_TEST("Blizzard bypasses accuracy checks in Hail and Snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_BLIZZARD); } + } SCENE { + NOT MESSAGE("Wobbuffet's attack missed!"); } } diff --git a/test/battle/move_effect/gigaton_hammer.c b/test/battle/move_effect/gigaton_hammer.c deleted file mode 100644 index aaff50f752..0000000000 --- a/test/battle/move_effect/gigaton_hammer.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gBattleMoves[MOVE_GIGATON_HAMMER].effect == EFFECT_GIGATON_HAMMER); -} - -SINGLE_BATTLE_TEST("Struggle will be used if slow Encore is used on Gigaton Hammer") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_GIGATON_HAMMER); MOVE(opponent, MOVE_ENCORE); } - TURN { FORCED_MOVE(player); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); - } -} - -SINGLE_BATTLE_TEST("Gigaton Hammer strikes again if fast encore is used") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_GIGATON_HAMMER); } - TURN { MOVE(opponent, MOVE_ENCORE); FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); - } -} - -SINGLE_BATTLE_TEST("Gigaton Hammer alternates with Struggle if it is the only usable move left") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_GIGATON_HAMMER, MOVE_NONE, MOVE_NONE, MOVE_NONE); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_GIGATON_HAMMER); } - TURN { FORCED_MOVE(player); } - TURN { MOVE(player, MOVE_GIGATON_HAMMER); } - TURN { FORCED_MOVE(player); } - TURN { MOVE(player, MOVE_GIGATON_HAMMER); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); - } -} diff --git a/test/battle/move_effect/glaive_rush.c b/test/battle/move_effect/glaive_rush.c new file mode 100644 index 0000000000..6cbc92fa95 --- /dev/null +++ b/test/battle/move_effect/glaive_rush.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_GLAIVE_RUSH].effect == EFFECT_GLAIVE_RUSH); +} + +SINGLE_BATTLE_TEST("If Glaive Rush is successful moves targeted at the user do not check accuracy") +{ + PASSES_RANDOMLY(100, 100, RNG_ACCURACY); + GIVEN { + ASSUME(gBattleMoves[MOVE_MEGA_PUNCH].accuracy == 85); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GLAIVE_RUSH); MOVE(opponent, MOVE_MEGA_PUNCH); } + } SCENE { + MESSAGE("Wobbuffet used Glaive Rush!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_PUNCH, opponent); + } +} + +SINGLE_BATTLE_TEST("If Glaive Rush is successful, moves targeted at the user deal double damage") +{ + s16 glaiveRushEffectedDmg; + s16 normalDmg; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GLAIVE_RUSH); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &glaiveRushEffectedDmg); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &normalDmg); + } THEN { + EXPECT_MUL_EQ(normalDmg, Q_4_12(2.0), glaiveRushEffectedDmg); + } +} + +SINGLE_BATTLE_TEST("If Glaive Rush is successful, moves targeted at the user deal double damage until the user moves again") +{ + s16 glaiveRushEffectedDmg; + s16 normalDmg; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_GLAIVE_RUSH); } + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &normalDmg); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &glaiveRushEffectedDmg); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } THEN { + EXPECT_MUL_EQ(normalDmg, Q_4_12(2.0), glaiveRushEffectedDmg); + } +} + +SINGLE_BATTLE_TEST("If Glaive Rush isn't successful moves targeted at the user don't deal double damage", s16 damage) +{ + bool32 missesGlaiveRush; + + PARAMETRIZE { missesGlaiveRush = FALSE; } + PARAMETRIZE { missesGlaiveRush = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); } + } WHEN { + TURN { MOVE(player, MOVE_GLAIVE_RUSH, hit: missesGlaiveRush); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (!missesGlaiveRush) + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + else + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Glaive Rush doesn't affect the user if the effect is blocked", s16 damage) +{ + u32 species; + + PARAMETRIZE { species = SPECIES_CLEFAIRY; } + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Attack(50); } + } WHEN { + TURN { MOVE(player, MOVE_GLAIVE_RUSH); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (species == SPECIES_CLEFAIRY) + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + else + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Glaive Rush status last until the the user's next turn") +{ + s16 normalDmgFristHit; + s16 normalDmgSecondHit; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GLAIVE_RUSH); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLAIVE_RUSH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &normalDmgFristHit); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &normalDmgSecondHit); + } THEN { + EXPECT_EQ(normalDmgFristHit, normalDmgSecondHit); + } +} diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index 5c21d08538..4a54eb436d 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -22,8 +22,8 @@ SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner can remove a terrain from the f MOVE_MISTY_TERRAIN, }; - u16 terrainMove; - u16 removeTerrainMove; + u16 terrainMove = MOVE_NONE; + u16 removeTerrainMove = MOVE_NONE; for (j = 0; j < ARRAY_COUNT(terrainMoves); j++) { diff --git a/test/battle/move_effect/hurricane.c b/test/battle/move_effect/hurricane.c new file mode 100644 index 0000000000..31cd956b10 --- /dev/null +++ b/test/battle/move_effect/hurricane.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HURRICANE].effect == EFFECT_HURRICANE); + ASSUME(gBattleMoves[MOVE_HURRICANE].accuracy == 70); +} + +SINGLE_BATTLE_TEST("Hurricane's accuracy is lowered to 50% in Sunlight") +{ + PASSES_RANDOMLY(50, 100, RNG_ACCURACY); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_HURRICANE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HURRICANE, opponent); + } +} + +SINGLE_BATTLE_TEST("Hurricane bypasses accuracy checks in Rain") +{ + PASSES_RANDOMLY(100, 100, RNG_ACCURACY); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_HURRICANE); } + } SCENE { + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} +TO_DO_BATTLE_TEST("Hurricane Veil can hit airborne targets") // Fly, Bounce, Sky Drop diff --git a/test/battle/move_effect/hydro_steam.c b/test/battle/move_effect/hydro_steam.c index f86da07ac5..80a3a90d37 100644 --- a/test/battle/move_effect/hydro_steam.c +++ b/test/battle/move_effect/hydro_steam.c @@ -1,11 +1,11 @@ #include "global.h" #include "test/battle.h" - + ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_HYDRO_STEAM].effect == EFFECT_HYDRO_STEAM); } - + SINGLE_BATTLE_TEST("Hydro Steam deals 1.5x damage under both Sunlight and Rain", s16 damage) { u16 setupMove; @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Hydro Steam deals 1.5x damage under both Sunlight and Rain", EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } - + SINGLE_BATTLE_TEST("Hydro Steam is affected by Utility Umbrella", s16 damage) { u32 itemPlayer; diff --git a/test/battle/move_effect/ivy_cudgel.c b/test/battle/move_effect/ivy_cudgel.c new file mode 100644 index 0000000000..ef0611c84f --- /dev/null +++ b/test/battle/move_effect/ivy_cudgel.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Ivy Gudgel changes the move type depending on the mask the user holds") +{ + u16 species; + u16 item; + + PARAMETRIZE { species = SPECIES_BLASTOISE; item = ITEM_NONE; } + PARAMETRIZE { species = SPECIES_CHARIZARD; item = ITEM_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_CHARIZARD; item = ITEM_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_VENUSAUR; item = ITEM_HEARTHFLAME_MASK; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(item); } + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_IVY_CUDGEL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_IVY_CUDGEL, player); + HP_BAR(opponent); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c new file mode 100644 index 0000000000..3022a19633 --- /dev/null +++ b/test/battle/move_effect/knock_off.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_KNOCK_OFF].effect == EFFECT_KNOCK_OFF); +} + +SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to activate") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); MaxHP(500); HP(255); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sitrus Berry!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off activates after Rocky Helmet and Weakness Policy") +{ + u16 item = 0; + + PARAMETRIZE { item = ITEM_WEAKNESS_POLICY; } + PARAMETRIZE { item = ITEM_ROCKY_HELMET; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + if (item == ITEM_WEAKNESS_POLICY) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE); + MESSAGE("Using WeaknssPolicy, the Attack of Foe Wobbuffet sharply rose!"); + MESSAGE("Using WeaknssPolicy, the Sp. Atk of Foe Wobbuffet sharply rose!"); + } else if (item == ITEM_ROCKY_HELMET) { + HP_BAR(player); + MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Rocky Helmet!"); + } + } +} diff --git a/test/battle/move_effect/last_resort.c b/test/battle/move_effect/last_resort.c new file mode 100644 index 0000000000..01a685ffc1 --- /dev/null +++ b/test/battle/move_effect/last_resort.c @@ -0,0 +1,116 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_LAST_RESORT].effect == EFFECT_LAST_RESORT); +} + +SINGLE_BATTLE_TEST("Last Resort always fails if it's the only known move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + NOT HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 2 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 3 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE, MOVE_SCRATCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_SCRATCH); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 4 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE, MOVE_SCRATCH, MOVE_GUST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_SCRATCH); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_GUST); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Gust!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works with Sleep Talk") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_SLEEP_TALK); Status1(STATUS1_SLEEP_TURN(3)); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Sleep Talk!"); + MESSAGE("Wobbuffet used Last Resort!"); + NOT MESSAGE("But it failed!"); + HP_BAR(opponent); + // Turn 2 + MESSAGE("Wobbuffet used Sleep Talk!"); + MESSAGE("Wobbuffet used Last Resort!"); + NOT MESSAGE("But it failed!"); + HP_BAR(opponent); + } +} diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c new file mode 100644 index 0000000000..a2585a3d7f --- /dev/null +++ b/test/battle/move_effect/leech_seed.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_LEECH_SEED].effect == EFFECT_LEECH_SEED); +} + +SINGLE_BATTLE_TEST("Leech Seed doesn't affect Grass-type Pokémon") +{ + PASSES_RANDOMLY(90, 100, RNG_ACCURACY); + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ODDISH); + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + MESSAGE("It doesn't affect Foe Oddish…"); + } +} +TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") +TO_DO_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user") +TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived. +TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again") diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effect/make_it_rain.c index 42046c1457..560bcffa78 100644 --- a/test/battle/move_effect/make_it_rain.c +++ b/test/battle/move_effect/make_it_rain.c @@ -32,3 +32,27 @@ SINGLE_BATTLE_TEST("Make It Rain lowers special attack by one stage") EXPECT_MUL_EQ(damage[0], Q_4_12(0.66), damage[1]); } } + +DOUBLE_BATTLE_TEST("Make It Rain lowers special attack by one stage if it hits both targets") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MAKE_IT_RAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, playerLeft); + HP_BAR(opponentLeft); + NONE_OF { + MESSAGE("Coins scattered everywhere!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's Sp. Atk fell!"); + } + HP_BAR(opponentRight); + MESSAGE("Coins scattered everywhere!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's Sp. Atk fell!"); + } +} diff --git a/test/battle/move_effect/matcha_gotcha.c b/test/battle/move_effect/matcha_gotcha.c new file mode 100644 index 0000000000..f1b76b5fcc --- /dev/null +++ b/test/battle/move_effect/matcha_gotcha.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MATCHA_GOTCHA].effect == EFFECT_MATCHA_GOTCHA); +} + +SINGLE_BATTLE_TEST("Matcha Gotcha inflicts burn 20% of the time") +{ + PASSES_RANDOMLY(20, 100, RNG_SECONDARY_EFFECT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + STATUS_ICON(opponent, burn: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Matcha Gatcha can burn both targets") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); + STATUS_ICON(opponentLeft, burn: TRUE); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); + STATUS_ICON(opponentRight, burn: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both targets") +{ + s16 damageLeft; + s16 damageRight; + s16 healedLeft; + s16 healedRight; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damageLeft); + HP_BAR(playerLeft, captureDamage: &healedLeft); + HP_BAR(opponentRight, captureDamage: &damageRight); + HP_BAR(playerLeft, captureDamage: &healedRight); + } +} diff --git a/test/battle/move_effect/moonlight.c b/test/battle/move_effect/moonlight.c new file mode 100644 index 0000000000..ded85c3fc4 --- /dev/null +++ b/test/battle/move_effect/moonlight.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); +} + +SINGLE_BATTLE_TEST("Moonlight recovers 1/2 of the user's max HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, damage: -(200 / 2)); + } +} + +SINGLE_BATTLE_TEST("Moonlight recovers 2/3 of the user's max HP in Sunlight") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, damage: -(300 / 1.5)); + } +} + +SINGLE_BATTLE_TEST("Moonlight recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, damage: -(400 / 4)); + } +} diff --git a/test/battle/move_effect/morning_sun.c b/test/battle/move_effect/morning_sun.c new file mode 100644 index 0000000000..7157944c6b --- /dev/null +++ b/test/battle/move_effect/morning_sun.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN); +} + +SINGLE_BATTLE_TEST("Morning Sun recovers 1/2 of the user's max HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MORNING_SUN); } + } SCENE { + HP_BAR(player, damage: -(200 / 2)); + } +} + +SINGLE_BATTLE_TEST("Morning Sun recovers 2/3 of the user's max HP in Sunlight") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_MORNING_SUN); } + } SCENE { + HP_BAR(player, damage: -(300 / 1.5)); + } +} + +SINGLE_BATTLE_TEST("Morning Sun recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_MORNING_SUN); } + } SCENE { + HP_BAR(player, damage: -(400 / 4)); + } +} diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index 6a034c830f..99e506ad68 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -25,11 +25,12 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35 Percent of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35% of the time") { PASSES_RANDOMLY(35, 100, RNG_HITS); GIVEN { + ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -41,11 +42,12 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35 Percent of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35 Percent of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35% of the time") { PASSES_RANDOMLY(35, 100, RNG_HITS); GIVEN { + ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -58,11 +60,12 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35 Percent of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit four times 35 Percent of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit four times 15% of the time") { PASSES_RANDOMLY(15, 100, RNG_HITS); GIVEN { + ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -76,11 +79,12 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit four times 35 Percent of the time") } } -SINGLE_BATTLE_TEST("Multi hit Moves hit four times 35 Percent of the time") +SINGLE_BATTLE_TEST("Multi hit Moves hit five times 15% of the time") { PASSES_RANDOMLY(15, 100, RNG_HITS); GIVEN { + ASSUME(B_MULTI_HIT_CHANCE >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c new file mode 100644 index 0000000000..3cdc5f5602 --- /dev/null +++ b/test/battle/move_effect/octolock.c @@ -0,0 +1,133 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Octolock decreases Defense and Sp. Def by at the end of the turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Defense fell!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + } +} + +SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Body, White Smoke and Full Metal Body") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_BELDUM; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + PARAMETRIZE { species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + if (species == SPECIES_BELDUM) + { + MESSAGE("Foe Beldum can no longer escape because of Octolock!"); + ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Beldum's Defense fell!"); + MESSAGE("Foe Beldum's Sp. Def fell!"); + } + } + else if (species == SPECIES_TORKOAL) + { + MESSAGE("Foe Torkoal can no longer escape because of Octolock!"); + ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Torkoal's Defense fell!"); + MESSAGE("Foe Torkoal's Sp. Def fell!"); + } + } + else if (species == SPECIES_SOLGALEO) + { + MESSAGE("Foe Solgaleo can no longer escape because of Octolock!"); + ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Solgaleo's Defense fell!"); + MESSAGE("Foe Solgaleo's Sp. Def fell!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Octolock Defense reduction is prevented by Big Pecks") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); } + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + MESSAGE("Foe Pidgey can no longer escape because of Octolock!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + NOT MESSAGE("Foe Pidgey's Defense fell!"); + ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); + MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!"); + MESSAGE("Foe Pidgey's Sp. Def fell!"); + } +} + +SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Amulet") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); + MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + } + } +} + +SINGLE_BATTLE_TEST("Octolock will not decrease Defense and Sp. Def further then minus six") +{ + u8 j; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + for (j = 0; j < 6; j++) + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + for (j = 0; j < 5; j++) { + MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + } + MESSAGE("Foe Wobbuffet's Defense won't go lower!"); + MESSAGE("Foe Wobbuffet's Sp. Def won't go lower!"); + NONE_OF { + MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + } + } +} diff --git a/test/battle/move_effect/ohko.c b/test/battle/move_effect/ohko.c new file mode 100644 index 0000000000..63e77b07f9 --- /dev/null +++ b/test/battle/move_effect/ohko.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SHEER_COLD].effect == EFFECT_OHKO); +} + +SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon") +{ + GIVEN { + ASSUME(B_SHEER_COLD_IMMUNITY >= GEN_7); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_GLALIE); + } WHEN { + TURN { MOVE(player, MOVE_SHEER_COLD); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player); + MESSAGE("It doesn't affect Foe Glalie…"); + } +} +TO_DO_BATTLE_TEST("Fissure faints the target, skipping regular damage calculations") +TO_DO_BATTLE_TEST("Fissure always fails if the target has a higher level than the user") +TO_DO_BATTLE_TEST("Fissure's accuracy increases by 1% for every level the user has over the target") +TO_DO_BATTLE_TEST("Fissure's ignores non-stage accuracy modifiers") // Gravity, Wide Lens, Compound Eyes diff --git a/test/battle/move_effect/paralyze_hit.c b/test/battle/move_effect/paralyze_hit.c index 4efe6746ce..c2fa440be1 100644 --- a/test/battle/move_effect/paralyze_hit.c +++ b/test/battle/move_effect/paralyze_hit.c @@ -33,7 +33,9 @@ SINGLE_BATTLE_TEST("Thunder Shock cannot paralyze an Electric-type") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); - NOT STATUS_ICON(opponent, paralysis: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); + STATUS_ICON(opponent, paralysis: TRUE); + } } } diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c new file mode 100644 index 0000000000..daef90ec50 --- /dev/null +++ b/test/battle/move_effect/plasma_fists.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_PLASMA_FISTS].effect == EFFECT_PLASMA_FISTS); +} + +SINGLE_BATTLE_TEST("Ion Duldge turns normal moves into electric for the remainder of the current turn") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_ION_DELUGE].effect == EFFECT_ION_DELUGE); + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ION_DELUGE); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Krabby used Ion Deluge!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, player); + MESSAGE("A deluge of ions showers the battlefield!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NOT MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remainder of the current turn") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Krabby used Plasma Fists!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); + MESSAGE("A deluge of ions showers the battlefield!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NOT MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Pixilate") +{ + GIVEN { + PLAYER(SPECIES_KRABBY) { Speed(300); }; + OPPONENT(SPECIES_ALTARIA) { Speed(1); Item(ITEM_ALTARIANITE); } + } WHEN { + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_EMBER, megaEvolve: TRUE); } + } 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); + NOT MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Normalize") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_SKITTY) { Ability(ABILITY_NORMALIZE); } + } WHEN { + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_EMBER); } + } SCENE { + MESSAGE("Krabby used Plasma Fists!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); + MESSAGE("A deluge of ions showers the battlefield!"); + MESSAGE("Foe Skitty used Ember!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric type moves") +{ + GIVEN { + PLAYER(SPECIES_KRABBY) { Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE, dynamax: TRUE); } + } SCENE { + MESSAGE("Krabby used Plasma Fists!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); + MESSAGE("A deluge of ions showers the battlefield!"); + MESSAGE("Foe Wobbuffet used Max Lightning!"); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/move_effect/poison_hit.c b/test/battle/move_effect/poison_hit.c index 91d7004669..229355cb65 100644 --- a/test/battle/move_effect/poison_hit.c +++ b/test/battle/move_effect/poison_hit.c @@ -4,6 +4,7 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); + ASSUME(gBattleMoves[MOVE_TWINEEDLE].effect == EFFECT_POISON_HIT); } SINGLE_BATTLE_TEST("Poison Sting inflicts poison") @@ -22,18 +23,24 @@ SINGLE_BATTLE_TEST("Poison Sting inflicts poison") } } -SINGLE_BATTLE_TEST("Poison Sting cannot poison Poison-type") +SINGLE_BATTLE_TEST("Poison cannot be inflicted on Poison and Steel-type Pokémon") { + u32 mon; + PARAMETRIZE { mon = SPECIES_NIDORAN_M; } + PARAMETRIZE { mon = SPECIES_REGISTEEL; } GIVEN { ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON); + ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_NIDORAN_M); + OPPONENT(mon); } WHEN { - TURN { MOVE(player, MOVE_POISON_STING); } + TURN { MOVE(player, MOVE_TWINEEDLE); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TWINEEDLE, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - NOT STATUS_ICON(opponent, poison: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } } } diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 39bd0eb8ae..dd9f57b356 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -93,8 +93,8 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging } else { NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); MESSAGE("Foe Wobbuffet protected itself!"); - NOT HP_BAR(opponent); if (usedMove == MOVE_TACKLE) { + NOT HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (statId == STAT_ATK) { MESSAGE("Wobbuffet's Attack fell!"); @@ -106,7 +106,10 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging } } } else { - NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + NONE_OF { + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } } } } THEN { @@ -173,11 +176,14 @@ SINGLE_BATTLE_TEST("Baneful Bunker poisons pokemon for moves making contact") MESSAGE("Foe Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); MESSAGE("Foe Wobbuffet protected itself!"); - NOT HP_BAR(opponent); if (usedMove == MOVE_TACKLE) { + NOT HP_BAR(opponent); STATUS_ICON(player, STATUS1_POISON); } else { - NOT STATUS_ICON(player, STATUS1_POISON); + NONE_OF { + HP_BAR(opponent); + STATUS_ICON(player, STATUS1_POISON); + } } } } @@ -218,8 +224,10 @@ SINGLE_BATTLE_TEST("Recoil damage is not applied if target was protected") ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); MESSAGE("Foe Beautifly protected itself!"); // MESSAGE("Rapidash used recoilMove!"); - NOT ANIMATION(ANIM_TYPE_MOVE, recoilMove, player); - NOT MESSAGE("Rapidash is hit with recoil!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, recoilMove, player); + MESSAGE("Rapidash is hit with recoil!"); + } } } @@ -251,16 +259,17 @@ SINGLE_BATTLE_TEST("Multi-hit moves don't hit a protected target and fail only o // Each effect happens only once. if (move == MOVE_KINGS_SHIELD || move == MOVE_SILK_TRAP || move == MOVE_OBSTRUCT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - } - else if (move == MOVE_SPIKY_SHIELD) { + } else if (move == MOVE_SPIKY_SHIELD) { HP_BAR(player); - NOT HP_BAR(player); - } - else if (move == MOVE_BANEFUL_BUNKER) { + } else if (move == MOVE_BANEFUL_BUNKER) { STATUS_ICON(player, STATUS1_POISON); } NONE_OF { + if (move == MOVE_KINGS_SHIELD || move == MOVE_SILK_TRAP || move == MOVE_OBSTRUCT) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } else if (move == MOVE_SPIKY_SHIELD) { + HP_BAR(player); + } MESSAGE("Hit 2 time(s)!"); MESSAGE("Hit 3 time(s)!"); MESSAGE("Hit 4 time(s)!"); diff --git a/test/battle/move_effect/reflect.c b/test/battle/move_effect/reflect.c index dd8738f72b..68d0af1a45 100644 --- a/test/battle/move_effect/reflect.c +++ b/test/battle/move_effect/reflect.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Reflect reduces physical damage", s16 damage) SINGLE_BATTLE_TEST("Reflect applies for 5 turns") { - u16 damage[6]; + s16 damage[6]; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c new file mode 100644 index 0000000000..e873516034 --- /dev/null +++ b/test/battle/move_effect/reflect_type.c @@ -0,0 +1,186 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Reflect Type fails if the user is Terastallized"); +TO_DO_BATTLE_TEST("Reflect Type succeeds against a Terastallized target and copies its Tera type"); + +SINGLE_BATTLE_TEST("Reflect Type does not affect any of Arceus' forms") +{ + u32 j; + static const u16 sArceusFormSpeciesIdTable[] = { + SPECIES_ARCEUS, + SPECIES_ARCEUS_FIGHTING, + SPECIES_ARCEUS_FLYING, + SPECIES_ARCEUS_POISON, + SPECIES_ARCEUS_GROUND, + SPECIES_ARCEUS_ROCK, + SPECIES_ARCEUS_BUG, + SPECIES_ARCEUS_GHOST, + SPECIES_ARCEUS_STEEL, + SPECIES_ARCEUS_FIRE, + SPECIES_ARCEUS_WATER, + SPECIES_ARCEUS_GRASS, + SPECIES_ARCEUS_ELECTRIC, + SPECIES_ARCEUS_PSYCHIC, + SPECIES_ARCEUS_ICE, + SPECIES_ARCEUS_DRAGON, + SPECIES_ARCEUS_DARK, + SPECIES_ARCEUS_FAIRY, + }; + u16 species = SPECIES_NONE; + + for (j = 0; j < ARRAY_COUNT(sArceusFormSpeciesIdTable); j++) + { + PARAMETRIZE { species = sArceusFormSpeciesIdTable[j]; } + } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("Wobbuffet used Reflect Type!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Reflect Type does not affect any of Silvally's forms") +{ + u32 j; + static const u16 sSilvallyFormSpeciesIdTable[] = { + SPECIES_SILVALLY, + SPECIES_SILVALLY_FIGHTING, + SPECIES_SILVALLY_FLYING, + SPECIES_SILVALLY_POISON, + SPECIES_SILVALLY_GROUND, + SPECIES_SILVALLY_ROCK, + SPECIES_SILVALLY_BUG, + SPECIES_SILVALLY_GHOST, + SPECIES_SILVALLY_STEEL, + SPECIES_SILVALLY_FIRE, + SPECIES_SILVALLY_WATER, + SPECIES_SILVALLY_GRASS, + SPECIES_SILVALLY_ELECTRIC, + SPECIES_SILVALLY_PSYCHIC, + SPECIES_SILVALLY_ICE, + SPECIES_SILVALLY_DRAGON, + SPECIES_SILVALLY_DARK, + SPECIES_SILVALLY_FAIRY, + }; + u16 species = SPECIES_NONE; + + for (j = 0; j < ARRAY_COUNT(sSilvallyFormSpeciesIdTable); j++) + { + PARAMETRIZE { species = sSilvallyFormSpeciesIdTable[j]; } + } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("Wobbuffet used Reflect Type!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types") +{ + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[1] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[1] == TYPE_FIGHTING); + GIVEN { + PLAYER(SPECIES_ARCANINE); + OPPONENT(SPECIES_POLIWRATH); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("Arcanine used Burn Up!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + MESSAGE("Arcanine burned itself out!"); + MESSAGE("Foe Poliwrath used Reflect Type!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") +{ + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[1] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[1] == TYPE_FIGHTING); + GIVEN { + PLAYER(SPECIES_ARCANINE); + OPPONENT(SPECIES_POLIWRATH); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("Arcanine used Reflect Type!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); + MESSAGE("Arcanine's type changed to match the Foe Poliwrath's!"); + } THEN { + EXPECT_EQ(player->type1, TYPE_WATER); + EXPECT_EQ(player->type2, TYPE_FIGHTING); + EXPECT_EQ(player->type3, TYPE_MYSTERY); + } +} + +SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") +{ + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[1] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_SUDOWOODO].types[0] == TYPE_ROCK); + ASSUME(gSpeciesInfo[SPECIES_SUDOWOODO].types[1] == TYPE_ROCK); + GIVEN { + PLAYER(SPECIES_ARCANINE); + OPPONENT(SPECIES_SUDOWOODO); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT_TYPE); } + } SCENE { + MESSAGE("Arcanine used Reflect Type!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); + MESSAGE("Arcanine's type changed to match the Foe Sudowoodo's!"); + } THEN { + EXPECT_EQ(player->type1, TYPE_ROCK); + EXPECT_EQ(player->type2, TYPE_ROCK); + EXPECT_EQ(player->type3, TYPE_MYSTERY); + } +} + +SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 and type2 if the target only has a 3rd type") +{ + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[1] == TYPE_FIRE); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARCANINE); + } WHEN { + TURN { MOVE(opponent, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_FORESTS_CURSE); } + TURN { MOVE(player, MOVE_REFLECT_TYPE); } + } SCENE { + // Turn 1 + MESSAGE("Foe Arcanine used Burn Up!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, opponent); + HP_BAR(player); + MESSAGE("Foe Arcanine burned itself out!"); + // Turn 2 + MESSAGE("Wobbuffet used Forest'sCurs!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, player); + MESSAGE("Grass type was added to Foe Arcanine!"); + // Turn 3 + MESSAGE("Wobbuffet used Reflect Type!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); + MESSAGE("Wobbuffet's type changed to match the Foe Arcanine's!"); + } THEN { + EXPECT_EQ(player->type1, TYPE_NORMAL); + EXPECT_EQ(player->type2, TYPE_NORMAL); + EXPECT_EQ(player->type3, TYPE_GRASS); + } +} diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c new file mode 100644 index 0000000000..7b14a57e72 --- /dev/null +++ b/test/battle/move_effect/relic_song.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_RELIC_SONG].effect == EFFECT_RELIC_SONG); + ASSUME(P_GEN_5_POKEMON == TRUE); +} + +SINGLE_BATTLE_TEST("Relic Song has a 10% chance to put the target to sleep") +{ + PASSES_RANDOMLY(10, 100, RNG_SECONDARY_EFFECT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + STATUS_ICON(opponent, sleep: TRUE); + } +} + +SINGLE_BATTLE_TEST("Relic Song is prevented by Soundproof") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_VOLTORB) { Ability(ABILITY_SOUNDPROOF); } + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); + MESSAGE("Foe Voltorb's Soundproof blocks Relic Song!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Relic Song will become a Water-type move when used by a Pokémon with the Ability Liquid Voice") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_VULPIX); + OPPONENT(SPECIES_POPPLIO) { Ability(ABILITY_LIQUID_VOICE); } + } WHEN { + TURN { MOVE(opponent, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, opponent); + HP_BAR(player); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Relic Song is blocked by Throat Chop") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_THROAT_CHOP); MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, opponent); + HP_BAR(player); + MESSAGE("Wobbuffet can't use Relic Song due to Throat Chop!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + } +} + +SINGLE_BATTLE_TEST("Relic Song transforms Meloetta if used successfully") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_MELOETTA_PIROUETTE); + } +} + +SINGLE_BATTLE_TEST("Relic Song transforms Meloetta twice if used successfully") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + MESSAGE("Meloetta transformed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_MELOETTA_ARIA); + } +} + +SINGLE_BATTLE_TEST("Relic Song transformation is the last thing that happens after it hits") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + OPPONENT(SPECIES_GOSSIFLEUR) { HP(1); Ability(ABILITY_COTTON_DOWN); } + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + MESSAGE("Foe Gossifleur fainted!"); + ABILITY_POPUP(opponent, ABILITY_COTTON_DOWN); + MESSAGE("Meloetta's Speed fell!"); + MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_MELOETTA_PIROUETTE); + } +} + +DOUBLE_BATTLE_TEST("Relic Song transforms once Meloetta in a double battle") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(playerLeft->species, SPECIES_MELOETTA_PIROUETTE); + } +} + +SINGLE_BATTLE_TEST("Relic Song loses the form-changing effect with Sheer Force") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + OPPONENT(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); } + } WHEN { + TURN { MOVE(opponent, MOVE_SKILL_SWAP); MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + NOT MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_MELOETTA_ARIA); + } +} diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index a5dd32c197..63f454a779 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -103,7 +103,7 @@ TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); // OPPONENT(SPECIES_WYNAUT) { HP(1); } // } WHEN { // TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); -// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING); +// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING); // SEND_OUT(opponentLeft, 1); } // } SCENE { // MESSAGE("Wobbuffet used Tackle!"); diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c new file mode 100644 index 0000000000..f138cc2cfa --- /dev/null +++ b/test/battle/move_effect/roost.c @@ -0,0 +1,446 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ROOST].effect == EFFECT_ROOST); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FLYING); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FLYING); + // One attack of each type to verify typelessness + ASSUME(gBattleMoves[MOVE_POUND].type == TYPE_NORMAL); + ASSUME(gBattleMoves[MOVE_KARATE_CHOP].type == TYPE_FIGHTING); + ASSUME(gBattleMoves[MOVE_GUST].type == TYPE_FLYING); + ASSUME(gBattleMoves[MOVE_POISON_STING].type == TYPE_POISON); + ASSUME(gBattleMoves[MOVE_EARTHQUAKE].type == TYPE_GROUND); + ASSUME(gBattleMoves[MOVE_ROCK_THROW].type == TYPE_ROCK); + ASSUME(gBattleMoves[MOVE_LEECH_LIFE].type == TYPE_BUG); + ASSUME(gBattleMoves[MOVE_LICK].type == TYPE_GHOST); + ASSUME(gBattleMoves[MOVE_STEEL_WING].type == TYPE_STEEL); + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + ASSUME(gBattleMoves[MOVE_WATER_GUN].type == TYPE_WATER); + ASSUME(gBattleMoves[MOVE_VINE_WHIP].type == TYPE_GRASS); + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + ASSUME(gBattleMoves[MOVE_CONFUSION].type == TYPE_PSYCHIC); + ASSUME(gBattleMoves[MOVE_ICE_BEAM].type == TYPE_ICE); + ASSUME(gBattleMoves[MOVE_DRAGON_BREATH].type == TYPE_DRAGON); + ASSUME(gBattleMoves[MOVE_BITE].type == TYPE_DARK); + ASSUME(gBattleMoves[MOVE_DISARMING_VOICE].type == TYPE_FAIRY); +} + +SINGLE_BATTLE_TEST("Roost fails when user is at full HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); } + } SCENE { + MESSAGE("Wobbuffet's HP is full!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Roost fails if the user is under the effects of Heal Block") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_ROOST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponent); + MESSAGE("Wobbuffet was prevented from healing!"); // Message when Heal Block is applied + MESSAGE("Wobbuffet was prevented from healing!"); // Message when trying to heal under Heal Block + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Roost recovers 50% of the user's Max HP") +{ + u16 hp; + + KNOWN_FAILING; // All healing is currently rounded down + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(99); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + HP_BAR(player, captureHP: &hp); + } THEN { + //if (B_UPDATED_MOVE_DATA >= GEN_5) + EXPECT(hp == 51); // Rounds up + //else + // EXPECT(hp == 50); // Rounds down + } +} + +SINGLE_BATTLE_TEST("Roost suppresses the user's Flying-typing this turn, then restores it at the end of the turn") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SKARMORY].types[0] == TYPE_STEEL); + ASSUME(gSpeciesInfo[SPECIES_SKARMORY].types[1] == TYPE_FLYING); + PLAYER(SPECIES_SKARMORY) { HP(50); MaxHP(100); Ability(ABILITY_STURDY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } + TURN { MOVE(opponent, MOVE_EARTHQUAKE); } + } SCENE { + // Turn 1: EQ hits when Roosted + MESSAGE("Skarmory used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Skarmory regained health!"); + MESSAGE("Foe Wobbuffet used Earthquake!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + MESSAGE("It's super effective!"); + // Turn 2: EQ has no effect because Roost expired + MESSAGE("Foe Wobbuffet used Earthquake!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + MESSAGE("It doesn't affect Skarmory…"); + NOT HP_BAR(player); + } +} + +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; } + + GIVEN { + ASSUME(P_GEN_5_POKEMON == TRUE); + ASSUME(gSpeciesInfo[SPECIES_TORNADUS].types[0] == TYPE_FLYING); + ASSUME(gSpeciesInfo[SPECIES_TORNADUS].types[1] == TYPE_FLYING); + PLAYER(SPECIES_TORNADUS) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, damagingMove); } + } SCENE { + MESSAGE("Tornadus used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Tornadus regained health!"); + + if (B_ROOST_PURE_FLYING >= GEN_5) // >= Gen. 5, Pokemon becomes pure Normal-type + { + if (damagingMove == MOVE_KARATE_CHOP) + { + ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); + MESSAGE("It's super effective!"); + } + else if (damagingMove == MOVE_LICK) + { + NOT ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); + MESSAGE("It doesn't affect Tornadus…"); + } + else + { + ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); + NONE_OF { + MESSAGE("It's super effective!"); + MESSAGE("It's not very effective…"); + MESSAGE("It doesn't affect Tornadus…"); + } + } + } + else // <= Gen. 4, Pokemon becomes Typeless + { + // Should not see any effectiveness messages + NONE_OF { + MESSAGE("It's super effective!"); + MESSAGE("It's not very effective…"); + MESSAGE("It doesn't affect Tornadus…"); + } + } + } +} + +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; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_MOLTRES].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_MOLTRES].types[1] == TYPE_FLYING); + PLAYER(SPECIES_MOLTRES) { HP(300); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, damagingMove); } + } SCENE { + // Turn 1: Use Burn Up to change from Fire/Flying to Mystery/Flying + MESSAGE("Moltres used Burn Up!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + MESSAGE("Moltres burned itself out!"); + // Turn 2: Use Roost to now be treated as a Mystery/Mystery type + MESSAGE("Moltres used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Moltres regained health!"); + ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); + NONE_OF { + MESSAGE("It's super effective!"); + MESSAGE("It's not very effective…"); + MESSAGE("It doesn't affect Moltres…"); + } + } +} + +// Tested in ORAS +DOUBLE_BATTLE_TEST("Roost suppresses the user's not-yet-aquired Flying-type this turn") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_KECLEON].types[0] != TYPE_FLYING); + ASSUME(gSpeciesInfo[SPECIES_KECLEON].types[1] != TYPE_FLYING); + PLAYER(SPECIES_KECLEON) { Speed(40); HP(150); Ability(ABILITY_COLOR_CHANGE); } + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_PIDGEY) { Speed(30); } + OPPONENT(SPECIES_SANDSHREW) { Speed(20); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_ROOST); + MOVE(opponentLeft, MOVE_GUST, target: playerLeft); + MOVE(opponentRight, MOVE_EARTHQUAKE, target: playerLeft); } + } SCENE { + MESSAGE("Kecleon used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, playerLeft); + MESSAGE("Kecleon regained health!"); + MESSAGE("Foe Pidgey used Gust!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentLeft); + MESSAGE("Kecleon's Color Change made it the Flying type!"); + MESSAGE("Foe Sandshrew used Earthquake!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponentRight); + MESSAGE("Kecleon's Color Change made it the Ground type!"); + } +} + +// Tested in ORAS +SINGLE_BATTLE_TEST("Roost prevents a Flying-type user from being protected by Delta Stream") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_RAYQUAZA].types[1] == TYPE_FLYING); + PLAYER(SPECIES_RAYQUAZA) { HP(1); Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_ICE_BEAM); } + } SCENE { + MESSAGE("Rayquaza used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Rayquaza regained health!"); + MESSAGE("Foe Wobbuffet used Ice Beam!"); + NOT MESSAGE("The mysterious strong winds weakened the attack!"); + } +} + +SINGLE_BATTLE_TEST("Roost does not undo other type-changing effects at the end of the turn") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[0] == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[1] == TYPE_FLYING); + PLAYER(SPECIES_SWELLOW) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_SOAK); } + TURN { MOVE(opponent, MOVE_VINE_WHIP); } + } SCENE { + MESSAGE("Swellow used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Swellow regained health!"); + MESSAGE("Foe Wobbuffet used Soak!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, opponent); + MESSAGE("Swellow transformed into the Water type!"); + MESSAGE("Foe Wobbuffet used Vine Whip!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_VINE_WHIP, opponent); + MESSAGE("It's super effective!"); + } +} + +// https://www.smogon.com/forums/threads/sword-shield-battle-mechanics-research.3655528/page-64#post-9244179 +SINGLE_BATTLE_TEST("Roost's effect is lifted after Grassy Terrain's healing") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[0] == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[1] == TYPE_FLYING); + PLAYER(SPECIES_SWELLOW) { HP(1); Ability(ABILITY_GRASSY_SURGE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); } + } SCENE { + MESSAGE("Swellow used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Swellow regained health!"); + MESSAGE("Swellow is healed by the grassy terrain!"); + HP_BAR(player); + } +} + +// Tested in USUM +SINGLE_BATTLE_TEST("Roost's suppression prevents Reflect Type from copying any Flying typing") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[0] == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[1] == TYPE_FLYING); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + PLAYER(SPECIES_SWELLOW) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_REFLECT_TYPE); } + TURN { MOVE(player, MOVE_EARTHQUAKE); MOVE(opponent, MOVE_REFLECT_TYPE); } + TURN { MOVE(player, MOVE_EARTHQUAKE); } + } SCENE { + // Turn 1: Reflect Type on Roosted Normal/Flying + MESSAGE("Swellow used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Swellow regained health!"); + MESSAGE("Foe Wobbuffet used Reflect Type!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); + MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + // Turn 2: EQ hits, Reflect Type on non-Roosted Normal/Flying + MESSAGE("Swellow used Earthquake!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet used Reflect Type!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); + MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + // Turn 3: EQ has no effect + MESSAGE("Swellow used Earthquake!"); + MESSAGE("It doesn't affect Foe Wobbuffet…"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Levitate") +{ + GIVEN { + PLAYER(SPECIES_FLYGON) { HP(1); Ability(ABILITY_LEVITATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } + } SCENE { + MESSAGE("Flygon used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Flygon regained health!"); + MESSAGE("Foe Wobbuffet used Earthquake!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Air Balloon") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_AIR_BALLOON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } + } SCENE { + MESSAGE("Wobbuffet used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Wobbuffet regained health!"); + MESSAGE("Foe Wobbuffet used Earthquake!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Magnet Rise") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MAGNET_RISE); } + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } + } SCENE { + // Turn 1: Magnet Rise + MESSAGE("Wobbuffet used Magnet Rise!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGNET_RISE, player); + MESSAGE("Wobbuffet levitated on electromagnetism!"); + // Turn 2 + MESSAGE("Wobbuffet used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Wobbuffet regained health!"); + MESSAGE("Foe Wobbuffet used Earthquake!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Telekinesis") +{ + KNOWN_FAILING; // Telekinesis currently says the pokemon was identified + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TELEKINESIS); } + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } + } SCENE { + // Turn 1: Telekinesis + MESSAGE("Foe Wobbuffet used Telekinesis!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TELEKINESIS, opponent); + MESSAGE("Wobbuffet was hurled into the air!"); + // Turn 2 + MESSAGE("Wobbuffet used Roost!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + MESSAGE("Wobbuffet regained health!"); + MESSAGE("Foe Wobbuffet used Earthquake!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); + HP_BAR(player); + } + } +} + +// Tested in ORAS +// Transform does not copy the Roost "status" either. +// Probably better as a Transform test. +TO_DO_BATTLE_TEST("Roost's suppression does not prevent others who are Transforming into the user from copying its Flying-type"); diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index fcf240631a..b0b58c997c 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -8,18 +8,19 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Salt Cure inflicts 1/8 of the target's maximum HP as damage per turn") { + u32 j; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SALT_CURE); } - for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) TURN {} } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); MESSAGE("Foe Wobbuffet is being salt cured!"); - for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); HP_BAR(opponent, damage: maxHP / 8); MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); @@ -70,3 +71,17 @@ SINGLE_BATTLE_TEST("Salt Cure is removed when the afflicted Pokémon is switched } } } + +SINGLE_BATTLE_TEST("If Salt Cure faints the target no status will be applied") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SALT_CURE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); + NOT MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("Foe Wobbuffet fainted!"); + } +} diff --git a/test/battle/move_effect/solar_beam.c b/test/battle/move_effect/solar_beam.c new file mode 100644 index 0000000000..6aa8056b72 --- /dev/null +++ b/test/battle/move_effect/solar_beam.c @@ -0,0 +1,167 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM); + ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM); +} + +SINGLE_BATTLE_TEST("Solar Beam and Solar Blade can be used instantly in Sunlight") +{ + u32 move; + PARAMETRIZE { move = MOVE_SOLAR_BEAM; } + PARAMETRIZE { move = MOVE_SOLAR_BLADE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, move); } + } SCENE { + NOT MESSAGE("Wobbuffet took 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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Solar Beam's power is halved in Snow", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Solar Blade's power is halved in Snow", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} diff --git a/test/battle/move_effect/stealth_rock.c b/test/battle/move_effect/stealth_rock.c new file mode 100644 index 0000000000..4662379f5e --- /dev/null +++ b/test/battle/move_effect/stealth_rock.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); +} + +SINGLE_BATTLE_TEST("Stealth Rock damage on switch in based on typing") +{ + u32 species, divisor; + + PARAMETRIZE { species = SPECIES_CHARIZARD; divisor = 2; } // Fire / Flying + PARAMETRIZE { species = SPECIES_PIDGEOT; divisor = 4; } // Flying + PARAMETRIZE { species = SPECIES_RATICATE; divisor = 8; } // Normal dmg + PARAMETRIZE { species = SPECIES_GOLEM; divisor = 16; } // Ground not very effective + PARAMETRIZE { species = SPECIES_STEELIX; divisor = 32; } // Ground/Steel not very effective + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); + // MESSAGE("2 sent out species!"); + HP_BAR(opponent, damage: maxHP / divisor); + } +} diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c new file mode 100644 index 0000000000..c549e4c332 --- /dev/null +++ b/test/battle/move_effect/strength_sap.c @@ -0,0 +1,59 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STRENGTH_SAP].effect == EFFECT_STRENGTH_SAP); +} + +SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on target's Attack Stat", s16 hp) +{ + u32 atkStat = 0; + + PARAMETRIZE{ atkStat = 100; } + PARAMETRIZE{ atkStat = 50; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); } + } WHEN { + TURN { MOVE(player, MOVE_STRENGTH_SAP); } + } SCENE { + MESSAGE("Wobbuffet used Strength Sap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Attack fell!"); + HP_BAR(player, captureDamage: &results[i].hp); + MESSAGE("Foe Wobbuffet had its energy drained!"); + } THEN { + EXPECT_EQ(results[i].hp * -1, atkStat); + } +} + +// Same as above, but Substitute is used before Strength Sap. +SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind substitute", s16 hp) +{ + u32 atkStat = 0; + + PARAMETRIZE{ atkStat = 100; } + PARAMETRIZE{ atkStat = 50; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); } + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); } + TURN { MOVE(player, MOVE_STRENGTH_SAP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); + MESSAGE("Wobbuffet used Strength Sap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Attack fell!"); + HP_BAR(player, captureDamage: &results[i].hp); + NOT MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); + MESSAGE("Foe Wobbuffet had its energy drained!"); + } THEN { + EXPECT_EQ(results[i].hp * -1, atkStat); + } +} diff --git a/test/battle/move_effect/synthesis.c b/test/battle/move_effect/synthesis.c new file mode 100644 index 0000000000..7b0c260fa0 --- /dev/null +++ b/test/battle/move_effect/synthesis.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS); +} + +SINGLE_BATTLE_TEST("Synthesis recovers 1/2 of the user's max HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SYNTHESIS); } + } SCENE { + HP_BAR(player, damage: -(200 / 2)); + } +} + +SINGLE_BATTLE_TEST("Synthesis recovers 2/3 of the user's max HP in Sunlight") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_SYNTHESIS); } + } SCENE { + HP_BAR(player, damage: -(300 / 1.5)); + } +} + +SINGLE_BATTLE_TEST("Synthesis recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SYNTHESIS); } + } SCENE { + HP_BAR(player, damage: -(400 / 4)); + } +} diff --git a/test/battle/move_effect/syrup_bomb.c b/test/battle/move_effect/syrup_bomb.c new file mode 100644 index 0000000000..f286049e1a --- /dev/null +++ b/test/battle/move_effect/syrup_bomb.c @@ -0,0 +1,166 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns") +{ + u8 j; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + for (j = 0; j < 4; j++) + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + } + } +} + +SINGLE_BATTLE_TEST("Sticky Syrup isn't applied again if the target is already covered") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + NOT MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + } +} + +SINGLE_BATTLE_TEST("Syrup Bomb is prevented by Bulletproof") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CHESPIN) { Ability(ABILITY_BULLETPROOF); } + } WHEN { + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_BULLETPROOF); + MESSAGE("Foe Chespin's Bulletproof blocks Syrup Bomb!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, White Smoke or Full Metal Body") +{ + u32 species; + u32 ability; + + PARAMETRIZE { species = SPECIES_BELDUM; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + PARAMETRIZE { species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + TURN {} + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + if (species == SPECIES_BELDUM) + { + MESSAGE("Foe Beldum got covered in sticky syrup!"); + ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Beldum's Speed fell!"); + } + } + else if (species == SPECIES_TORKOAL) + { + MESSAGE("Foe Torkoal got covered in sticky syrup!"); + ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Torkoal's Speed fell!"); + } + } + else if (species == SPECIES_SOLGALEO) + { + MESSAGE("Foe Solgaleo got covered in sticky syrup!"); + ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + NONE_OF { + MESSAGE("Foe Solgaleo's Speed fell!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Amulet") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } + } WHEN { + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + } + } +} + +SINGLE_BATTLE_TEST("Sticky syrup will not decrease speed further then minus six") +{ + u8 j; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (j = 0; j < 3; j++) + TURN { MOVE(player, MOVE_SCARY_FACE); } + TURN { MOVE(player, MOVE_SYRUP_BOMB); } + TURN {} + } SCENE { + for (j = 0; j < 3; j++) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); + MESSAGE("Foe Wobbuffet's Speed won't go lower!"); + NONE_OF { + MESSAGE("Foe Wobbuffet's Speed fell!"); + } + } +} diff --git a/test/battle/move_effect/teatime.c b/test/battle/move_effect/teatime.c index 7995937fa5..399cafb919 100644 --- a/test/battle/move_effect/teatime.c +++ b/test/battle/move_effect/teatime.c @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Teatime causes other Pokemon to consume their Berry even if DOUBLE_BATTLE_TEST("Teatime causes all Pokémon to consume their berry") { - struct BattlePokemon *user; + struct BattlePokemon *user = NULL; PARAMETRIZE { user = playerLeft; } PARAMETRIZE { user = playerRight; } PARAMETRIZE { user = opponentLeft; } @@ -143,14 +143,16 @@ SINGLE_BATTLE_TEST("Teatime does not affect Pokémon in the semi-invulnerable tu PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NONE); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); } } WHEN { - TURN { + TURN { MOVE(opponent, MOVE_FLY); MOVE(player, MOVE_TEATIME); } } SCENE { MESSAGE("Wobbuffet used Teatime!"); - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); - NOT MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); + MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + } } } @@ -170,7 +172,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Volt Absorb if it has been affected by Elec PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); Item(item); HP(55); MaxHP(100); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); } } WHEN { - TURN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TEATIME); } @@ -206,7 +208,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El PLAYER(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); Item(item); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); } } WHEN { - TURN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TEATIME); } @@ -246,7 +248,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Motor Drive if it has been affected by Elec PLAYER(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); Item(item); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); } } WHEN { - TURN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TEATIME); } diff --git a/test/battle/move_effect/thunder.c b/test/battle/move_effect/thunder.c new file mode 100644 index 0000000000..d6e5101f3b --- /dev/null +++ b/test/battle/move_effect/thunder.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_THUNDER].effect == EFFECT_THUNDER); + ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); +} + +SINGLE_BATTLE_TEST("Thunder's accuracy is lowered to 50% in Sunlight") +{ + PASSES_RANDOMLY(50, 100, RNG_ACCURACY); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_THUNDER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER, opponent); + } +} + +SINGLE_BATTLE_TEST("Thunder bypasses accuracy checks in Rain") +{ + PASSES_RANDOMLY(100, 100, RNG_ACCURACY); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_THUNDER); } + } SCENE { + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} diff --git a/test/battle/move_effect/toxic.c b/test/battle/move_effect/toxic.c index 78d978b268..4a07994fb8 100644 --- a/test/battle/move_effect/toxic.c +++ b/test/battle/move_effect/toxic.c @@ -40,9 +40,11 @@ SINGLE_BATTLE_TEST("Toxic cannot miss if used by a Poison-type") ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); } else { - NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - NOT STATUS_ICON(opponent, badPoison: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + } } } } diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 43de89ede9..3bac9d8ba5 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes do not affect Steel-types") } } -SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types") +SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on switch in") { u32 species; u32 item = ITEM_NONE; @@ -190,7 +190,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types") // A Pokémon that gets passed magnet rise should still remove the Toxic // Spikes even though it is airborne. // The test currently fails, because we don't incorporate this bug. -SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-types affected by Magnet Rise") +SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by Magnet Rise on switch in") { KNOWN_FAILING; GIVEN { diff --git a/test/battle/move_effect/tri_attack.c b/test/battle/move_effect/tri_attack.c index aec711aaba..d7d2102271 100644 --- a/test/battle/move_effect/tri_attack.c +++ b/test/battle/move_effect/tri_attack.c @@ -25,11 +25,9 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_FRZ) { + } else if (statusAnim == B_ANIM_STATUS_FRZ) { STATUS_ICON(opponent, freeze: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PRZ) { + } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); } } @@ -54,15 +52,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_BRN) { - NOT STATUS_ICON(opponent, burn: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_FRZ) { - NOT STATUS_ICON(opponent, freeze: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } } } } @@ -92,15 +90,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_BRN) { - NOT STATUS_ICON(opponent, burn: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_FRZ) { - NOT STATUS_ICON(opponent, freeze: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } } } } @@ -121,15 +119,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); HP_BAR(opponent); - NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); - if (statusAnim == B_ANIM_STATUS_BRN) { - NOT STATUS_ICON(opponent, burn: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_FRZ) { - NOT STATUS_ICON(opponent, freeze: TRUE); - } - else if (statusAnim == B_ANIM_STATUS_PRZ) { - NOT STATUS_ICON(opponent, paralysis: TRUE); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } } } } diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c new file mode 100644 index 0000000000..629b32f97e --- /dev/null +++ b/test/battle/move_effect/weather_ball.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); +} + +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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_MEGANIUM); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(6.0), results[1].damage); // double base power + type effectiveness + sun 50% boost + } +} + +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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARCANINE); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(6.0), results[1].damage); // double base power + type effectiveness + rain 50% boost + } +} + +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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. + } +} + +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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); }; + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. + } +} diff --git a/test/battle/move_flags/cant_use_twice.c b/test/battle/move_flags/cant_use_twice.c new file mode 100644 index 0000000000..3135e00169 --- /dev/null +++ b/test/battle/move_flags/cant_use_twice.c @@ -0,0 +1,93 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_GIGATON_HAMMER].cantUseTwice == TRUE); + ASSUME(gBattleMoves[MOVE_BLOOD_MOON].cantUseTwice == TRUE); +} + +SINGLE_BATTLE_TEST("Struggle will be used if slow Encore is used on moves with the cantUseTwice flag") +{ + u32 move; + PARAMETRIZE { move = MOVE_GIGATON_HAMMER; } + PARAMETRIZE { move = MOVE_BLOOD_MOON; } + GIVEN { + ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_ENCORE); } + TURN { FORCED_MOVE(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); + } +} + +SINGLE_BATTLE_TEST("Moves with the cantUseTwice flag strike again if fast encore is used") +{ + u32 move; + PARAMETRIZE { move = MOVE_GIGATON_HAMMER; } + PARAMETRIZE { move = MOVE_BLOOD_MOON; } + GIVEN { + ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(opponent, MOVE_ENCORE); FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); + } +} + +SINGLE_BATTLE_TEST("Moves with the cantUseTwice flag alternate with Struggle if it is the only usable move left") +{ + u32 move; + PARAMETRIZE { move = MOVE_GIGATON_HAMMER; } + PARAMETRIZE { move = MOVE_BLOOD_MOON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(move, MOVE_NONE, MOVE_NONE, MOVE_NONE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { FORCED_MOVE(player); } + TURN { MOVE(player, move); } + TURN { FORCED_MOVE(player); } + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); + } +} + +SINGLE_BATTLE_TEST("Moves with the cantUseTwice flag can alternate between each other") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_GIGATON_HAMMER, MOVE_BLOOD_MOON, MOVE_NONE, MOVE_NONE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GIGATON_HAMMER); } + TURN { MOVE(player, MOVE_BLOOD_MOON); } + TURN { MOVE(player, MOVE_GIGATON_HAMMER); } + TURN { MOVE(player, MOVE_BLOOD_MOON); } + TURN { MOVE(player, MOVE_GIGATON_HAMMER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BLOOD_MOON, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BLOOD_MOON, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGATON_HAMMER, player); + } +} diff --git a/test/battle/type/grass.c b/test/battle/move_flags/powder.c similarity index 86% rename from test/battle/type/grass.c rename to test/battle/move_flags/powder.c index 6bb016c580..184402f6bf 100644 --- a/test/battle/type/grass.c +++ b/test/battle/move_flags/powder.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Grass-type Pokémon block powder and spore moves") +SINGLE_BATTLE_TEST("Powder moves are blocked by Grass-type Pokémon") { GIVEN { ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove); diff --git a/test/battle/status1/bad_poison.c b/test/battle/status1/bad_poison.c index 7a430086bd..2ee3f05278 100644 --- a/test/battle/status1/bad_poison.c +++ b/test/battle/status1/bad_poison.c @@ -3,21 +3,23 @@ SINGLE_BATTLE_TEST("Bad poison deals 1/16th cumulative damage per turn") { + u32 j; GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); + for (j = 0; j < 4; j++) + HP_BAR(player, damage: maxHP / 16 * (j + 1)); } } SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") { + u32 j; GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } PLAYER(SPECIES_WYNAUT); @@ -31,9 +33,9 @@ SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 2; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); - for (i = 0; i < 2; i++) - HP_BAR(player, damage: maxHP / 16 * (i + 1)); + for (j = 0; j < 2; j++) + HP_BAR(player, damage: maxHP / 16 * (j + 1)); + for (j = 0; j < 2; j++) + HP_BAR(player, damage: maxHP / 16 * (j + 1)); } } diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index 84439ec9ef..77d58e5cc3 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -3,16 +3,17 @@ SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") { + u32 j; GIVEN { ASSUME(B_BURN_DAMAGE >= GEN_LATEST); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) HP_BAR(player, damage: maxHP / 16); } } diff --git a/test/battle/status1/poison.c b/test/battle/status1/poison.c index 771d0d2eca..12f6ffa95f 100644 --- a/test/battle/status1/poison.c +++ b/test/battle/status1/poison.c @@ -3,15 +3,16 @@ SINGLE_BATTLE_TEST("Poison deals 1/8th damage per turn") { + u32 j; GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) TURN {} } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); - for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) HP_BAR(player, damage: maxHP / 8); } } diff --git a/test/battle/status1/sleep.c b/test/battle/status1/sleep.c index 8ef6137d35..b3dd403eb1 100644 --- a/test/battle/status1/sleep.c +++ b/test/battle/status1/sleep.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") { - u32 turns; + u32 turns, j; PARAMETRIZE { turns = 1; } PARAMETRIZE { turns = 2; } PARAMETRIZE { turns = 3; } @@ -11,10 +11,10 @@ SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(turns)); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - for (i = 0; i < turns; i++) + for (j = 0; j < turns; j++) TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - for (i = 0; i < turns - 1; i++) + for (j = 0; j < turns - 1; j++) MESSAGE("Wobbuffet is fast asleep."); MESSAGE("Wobbuffet woke up!"); STATUS_ICON(player, none: TRUE); diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index c810af3401..45c2886e32 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -78,7 +78,6 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all battlers") { - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET); @@ -93,7 +92,6 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all opponents") { - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET); @@ -124,7 +122,6 @@ DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves") { - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c index a0e94dbbec..810a721fa5 100644 --- a/test/battle/trainer_control.c +++ b/test/battle/trainer_control.c @@ -4,6 +4,7 @@ #include "battle_main.h" #include "data.h" #include "malloc.h" +#include "random.h" #include "string_util.h" #include "constants/item.h" #include "constants/abilities.h" @@ -119,3 +120,17 @@ TEST("CreateNPCTrainerPartyForTrainer generates different personalities for diff EXPECT(testParty[0].box.personality != testParty[1].box.personality); Free(testParty); } + +TEST("ModifyPersonalityForNature can set any nature") +{ + u32 personality = 0, nature = 0, j = 0, k = 0; + for (j = 0; j < 64; j++) + { + for (k = 0; k < NUM_NATURES; k++) + { + PARAMETRIZE { personality = Random32(); nature = k; } + } + } + ModifyPersonalityForNature(&personality, nature); + EXPECT_EQ(GetNatureFromPersonality(personality), nature); +} diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c new file mode 100644 index 0000000000..8908e17a79 --- /dev/null +++ b/test/battle/weather/hail.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "test/battle.h" + +// Please add Hail interactions with move, item and ability effects on their respective files. +SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn") +{ + s16 hailDamage; + + GIVEN { + PLAYER(SPECIES_GLALIE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {MOVE(player, MOVE_HAIL);} + } SCENE { + MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + HP_BAR(opponent, captureDamage: &hailDamage); + } THEN { EXPECT_EQ(hailDamage, opponent->maxHP / 16); } +} + +SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GLALIE); + } WHEN { + TURN {MOVE(player, MOVE_HAIL);} + } SCENE { + NOT MESSAGE("Foe Glalie is pelted by HAIL!"); + } +} diff --git a/test/battle/weather/rain.c b/test/battle/weather/rain.c index 00ac263044..3f7a6f599b 100644 --- a/test/battle/weather/rain.c +++ b/test/battle/weather/rain.c @@ -7,7 +7,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); ASSUME(gBattleMoves[MOVE_WATER_GUN].type == TYPE_WATER); } - + SINGLE_BATTLE_TEST("Rain multiplies the power of Fire-type moves by 0.5x", s16 damage) { u32 setupMove; @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Rain multiplies the power of Fire-type moves by 0.5x", s16 d EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); } } - + SINGLE_BATTLE_TEST("Rain multiplies the power of Water-type moves by 1.5x", s16 damage) { u32 setupMove; diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c new file mode 100644 index 0000000000..3d4fbb631b --- /dev/null +++ b/test/battle/weather/sandstorm.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "test/battle.h" + +// Please add Sandstorm interactions with move, item and ability effects on their respective files. +SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn") +{ + s16 sandstormDamage; + + GIVEN { + PLAYER(SPECIES_SANDSLASH); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {MOVE(player, MOVE_SANDSTORM);} + } SCENE { + MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + HP_BAR(opponent, captureDamage: &sandstormDamage); + } THEN { EXPECT_EQ(sandstormDamage, opponent->maxHP / 16); } +} + +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; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) ; + OPPONENT(SPECIES_NOSEPASS); + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(player, MOVE_SWIFT); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type Pokémon") +{ + u32 mon; + PARAMETRIZE { mon = SPECIES_SANDSLASH; } + PARAMETRIZE { mon = SPECIES_NOSEPASS; } + PARAMETRIZE { mon = SPECIES_REGISTEEL; } + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_NOSEPASS].types[0] == TYPE_ROCK); + ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(mon); + } WHEN { + TURN { MOVE(player, MOVE_SANDSTORM); } + } SCENE { + switch (mon) + { + case SPECIES_SANDSLASH: + NOT MESSAGE("Foe Sandslash is buffeted by the sandstorm!"); + break; + case SPECIES_NOSEPASS: + NOT MESSAGE("Foe Nosepass is buffeted by the sandstorm!"); + break; + case SPECIES_REGISTEEL: + NOT MESSAGE("Foe Registeel is buffeted by the sandstorm!"); + break; + } + } +} diff --git a/test/battle/weather/snow.c b/test/battle/weather/snow.c index 21b7a5565e..dff18e7b76 100644 --- a/test/battle/weather/snow.c +++ b/test/battle/weather/snow.c @@ -1,6 +1,7 @@ #include "global.h" #include "test/battle.h" +// Please add Snow interactions with move, item and ability effects on their respective files. ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); @@ -8,7 +9,7 @@ ASSUMPTIONS ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE || gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); } -SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage) +SINGLE_BATTLE_TEST("Snow multiplies the defense of Ice-types by 1.5x", s16 damage) { u16 move; PARAMETRIZE{ move = MOVE_SNOWSCAPE; } @@ -25,126 +26,3 @@ SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } - -SINGLE_BATTLE_TEST("Snow turns Weather Ball to an Ice-type move and doubles its power", s16 damage) -{ - u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } - GIVEN { - ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_DRAGONAIR); - } WHEN { - TURN { MOVE(player, move); } - TURN { MOVE(player, MOVE_WEATHER_BALL); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. - } -} - -SINGLE_BATTLE_TEST("Snow allows Blizzard to bypass accuracy checks") -{ - PASSES_RANDOMLY(100, 100, RNG_ACCURACY); - GIVEN { - ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_BLIZZARD); } - } SCENE { - NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } - } -} - -SINGLE_BATTLE_TEST("Snow halves the power of Solar Beam", s16 damage) -{ - u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } - GIVEN { - ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } - TURN { SKIP_TURN(player); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); - } -} - -SINGLE_BATTLE_TEST("Snow halves the power of Solar Blade", s16 damage) -{ - u16 move; - PARAMETRIZE{ move = MOVE_CELEBRATE; } - PARAMETRIZE{ move = MOVE_SNOWSCAPE; } - GIVEN { - ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } - TURN { SKIP_TURN(player); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); - } -} - -SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); - PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } - } SCENE { - HP_BAR(player, damage: -(400 / 4)); - } -} - -SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); - PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } - } SCENE { - HP_BAR(player, damage: -(400 / 4)); - } -} - -SINGLE_BATTLE_TEST("Snow causes Synthesis to recover 1/4 of the user's max HP") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS); - PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_SYNTHESIS); } - } SCENE { - HP_BAR(player, damage: -(400 / 4)); - } -} - -SINGLE_BATTLE_TEST("Snow causes Morning Sun to recover 1/4 of the user's max HP") -{ - GIVEN { - ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN); - PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MORNING_SUN); } - } SCENE { - HP_BAR(player, damage: -(400 / 4)); - } -} diff --git a/test/battle/weather/sunlight.c b/test/battle/weather/sunlight.c index 9d471332ad..51b18dd076 100644 --- a/test/battle/weather/sunlight.c +++ b/test/battle/weather/sunlight.c @@ -7,7 +7,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); ASSUME(gBattleMoves[MOVE_WATER_GUN].type == TYPE_WATER); } - + SINGLE_BATTLE_TEST("Sunlight multiplies the power of Fire-type moves by 1.5x", s16 damage) { u32 setupMove; @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Sunlight multiplies the power of Fire-type moves by 1.5x", s EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } - + SINGLE_BATTLE_TEST("Sunlight multiplies the power of Water-type moves by 0.5x", s16 damage) { u32 setupMove; diff --git a/test/dynamax.c b/test/dynamax.c new file mode 100644 index 0000000000..a4b67f34dc --- /dev/null +++ b/test/dynamax.c @@ -0,0 +1,1479 @@ +#include "global.h" +#include "test/battle.h" + +// ============= 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; } + GIVEN { // TODO: Dynamax level + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (dynamax) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); + MESSAGE("Wobbuffet used Max Strike!"); + } + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + results[i].hp = player->hp; + } FINALLY { + EXPECT_MUL_EQ(results[0].hp, Q_4_12(1.5), results[1].hp); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) +{ + bool32 dynamax; + PARAMETRIZE { dynamax = FALSE; } + PARAMETRIZE { dynamax = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); } // 1st max move + TURN { MOVE(player, MOVE_TACKLE); } // 2nd max move + TURN { MOVE(player, MOVE_TACKLE); } // 3rd max move + } SCENE { + int i; + for (i = 0; i < DYNAMAX_TURNS_COUNT; ++i) { + if (dynamax) + MESSAGE("Wobbuffet used Max Strike!"); + else + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } + if (dynamax) // Expect to have visual reversion at the end. + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + results[i].hp = player->hp; + } FINALLY { + EXPECT_EQ(results[0].hp, results[1].hp); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FAKE_OUT].effect == EFFECT_FAKE_OUT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Fake Out!"); + NONE_OF { MESSAGE("Wobbuffet flinched!"); } + MESSAGE("Wobbuffet used Max Strike!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_HEAVY_SLAM].effect == EFFECT_HEAT_CRASH); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_HEAVY_SLAM); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Heavy Slam!"); + MESSAGE("The move was blocked by the power of Dynamax!"); + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_MACHAMP) { Ability(ABILITY_NO_GUARD); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_FISSURE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Machamp used Fissure!"); + MESSAGE("Wobbuffet is unaffected!"); + NONE_OF { HP_BAR(player); } + } +} + +// can't be used at all in Raid, see "Documenting Dynamax" +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond") +{ + GIVEN { + 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); } + } SCENE { + MESSAGE("Foe Wobbuffet used Destiny Bond!"); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet fainted!"); + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } + } WHEN { + TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Grudge!"); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); + MESSAGE("Foe Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing moves, but still take damage") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + ASSUME(gBattleMoves[MOVE_WHIRLWIND].effect == EFFECT_ROAR); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Dragon Tail!"); + HP_BAR(player); + MESSAGE("The move was blocked by the power of Dynamax!"); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The move was blocked by the power of Dynamax!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing moves but no block message is printed if they faint") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Dragon Tail!"); + HP_BAR(player); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The move was blocked by the power of Dynamax!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") +{ + GIVEN { + ASSUME(gItems[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The move was blocked by the power of Dynamax!"); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject Button") +{ + GIVEN { + 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); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet is switched out with the Eject Button!"); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swapped to another Pokemon's") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + 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); } + } SCENE { + MESSAGE("Miltank used Max Strike!"); + MESSAGE("Foe Runerigus used Skill Swap!"); + MESSAGE("But it failed!"); + } THEN { + EXPECT_EQ(player->ability, ABILITY_SCRAPPY); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed or suppressed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SIMPLE_BEAM); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Simple Beam!"); + MESSAGE("Wobbuffet acquired Simple!"); + } THEN { + EXPECT_EQ(player->ability, ABILITY_SIMPLE); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_ENCORE); } + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Max Flare!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after reverting") +{ + GIVEN { + 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); } + TURN { MOVE(player, MOVE_ARM_THRUST); } + TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("Wobbuffet used Arm Thrust!"); + } +} + +// Max Moves don't make contact, so Cursed Body doesn't need to be tested, but it is coded for. +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_DISABLE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on their first turn") +{ + GIVEN { + ASSUME(B_DISABLE_TURNS >= GEN_5); + PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; + 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 {} + TURN {} + TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("Wobbuffet's Tackle was disabled!"); + MESSAGE("Wobbuffet used Max Strike!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TORMENT); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Torment!"); + MESSAGE("But it failed!"); + } +} + +// This is true for all item-removing moves. +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POTION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Knock Off!"); + MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Potion!"); + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Substitute!"); + MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + HP_BAR(player); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied by Copycat") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TRICK_ROOM, dynamax: TRUE, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Max Guard!"); + MESSAGE("Wynaut used Trick Room!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon take double damage from Dynamax Cannon", s16 damage) +{ + bool32 dynamaxed; + PARAMETRIZE { dynamaxed = FALSE; } + PARAMETRIZE { dynamaxed = TRUE; } + GIVEN { + ASSUME(gBattleMoves[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); } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 damage) +{ + bool32 protected; + PARAMETRIZE { protected = TRUE; } + PARAMETRIZE { protected = FALSE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (protected) + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT); } + else + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT, dynamax: TRUE); } + } SCENE { + NONE_OF { HP_BAR(opponent); } + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE); + MOVE(opponentLeft, MOVE_FEINT, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + MESSAGE("Wobbuffet used Max Guard!"); + MESSAGE("Foe Wobbuffet used Feint!"); + HP_BAR(playerLeft); + MESSAGE("Foe Wynaut used Tackle!"); + NONE_OF { HP_BAR(playerLeft); } + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Instruct") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, dynamax: TRUE, target: opponentLeft); + MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); + } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Wynaut used Instruct!"); + MESSAGE("But it failed!"); + } +} + +// TODO: Gigantamax factor +SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxing") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + } THEN { + EXPECT_EQ(player->species, SPECIES_VENUSAUR_GIGANTAMAX); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms revert upon switching") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } THEN { + EXPECT_EQ(player->species, SPECIES_VENUSAUR); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Choice items", s16 damage) +{ + u16 item; + PARAMETRIZE { item = ITEM_CHOICE_BAND; } + PARAMETRIZE { item = ITEM_NONE; } + GIVEN { + ASSUME(gItems[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); + PLAYER(SPECIES_WOBBUFFET) { Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_ARM_THRUST, dynamax: TRUE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + MESSAGE("Wobbuffet used Max Knuckle!"); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holding Assault Vest") +{ + GIVEN { + ASSUME(gItems[ITEM_ASSAULT_VEST].holdEffect == HOLD_EFFECT_ASSAULT_VEST); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + TURN { MOVE(player, MOVE_PROTECT, allowed: FALSE); MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Wobbuffet used Max Strike!"); + } +} + +// Almost anything that calculates gBattleMoveDamage based on HP has been changed to non-Dynamax HP. +// This includes Leftovers, Life Orb, Heal Pulse, Rocky Helmet, Sandstorm, etc. etc. +// There are some redundant cases (i.e Substitute) that can never be used by a Dynamaxed pokemon. +// Anything that is conditional based off max HP still uses gBattleMons[battler].maxHP. +// Below are some tests, but very far from all encompassing: + +SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 damage) +{ + bool32 dynamax; + PARAMETRIZE { dynamax = TRUE; } + PARAMETRIZE { dynamax = FALSE; } + GIVEN { + ASSUME(gBattleMoves[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); } + } SCENE { + MESSAGE("Foe Wobbuffet used Endeavor!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 damage) +{ + bool32 dynamax; + PARAMETRIZE { dynamax = TRUE; } + PARAMETRIZE { dynamax = FALSE; } + GIVEN { + ASSUME(gBattleMoves[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); } + } SCENE { + MESSAGE("Foe Wobbuffet used Super Fang!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 damage) +{ + bool32 dynamax; + PARAMETRIZE { dynamax = TRUE; } + PARAMETRIZE { dynamax = FALSE; } + GIVEN { + ASSUME(gBattleMoves[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); } + } SCENE { + MESSAGE("Foe Wobbuffet used Pain Split!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +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; } + GIVEN { + ASSUME(I_SITRUS_BERRY_HEAL >= GEN_4); + ASSUME(gItems[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); } + } SCENE { + MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +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; } + GIVEN { + ASSUME(gBattleMoves[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); } + } SCENE { + MESSAGE("Foe Wobbuffet used Heal Pulse!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +// ============= MAX MOVE EFFECTS ========================================== +SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") +{ + GIVEN { + // Fails?: ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE); + ASSUME(gBattleMoves[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_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(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Max Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + // turn 2 + MESSAGE("Wobbuffet used Max Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +// This test should apply to all stat-lowering Max Moves, including G-Max Foam Burst and G-Max Tartness. +DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_STRIKE].argument == MAX_EFFECT_LOWER_SPEED); + PLAYER(SPECIES_WOBBUFFET) { Speed(80); } + PLAYER(SPECIES_WOBBUFFET) { Speed(79); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(99); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); \ + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \ + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); \ + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \ + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Max Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Wobbuffet's Speed fell!"); + // turn 2 + MESSAGE("Wobbuffet used Max Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Wobbuffet's Speed fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + } +} + +// This test should apply to all stat-boosting Max Moves, too. +DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") +{ + s16 damage[4]; + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_KNUCKLE].argument == MAX_EFFECT_RAISE_TEAM_ATTACK); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft, dynamax: TRUE); \ + MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } + TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft); \ + MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Max Knuckle!"); + HP_BAR(opponentLeft, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's Attack rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut used Tackle!"); + HP_BAR(opponentRight, captureDamage: &damage[1]); + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + // turn 2 + MESSAGE("Wobbuffet used Max Knuckle!"); + HP_BAR(opponentLeft, captureDamage: &damage[2]); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's Attack rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut used Tackle!"); + HP_BAR(opponentRight, captureDamage: &damage[3]); + } THEN { + EXPECT_GT(damage[2], damage[0]); + EXPECT_GT(damage[3], damage[1]); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_FLARE].argument == MAX_EFFECT_SUN); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Flare!"); + MESSAGE("The sunlight got bright!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_GEYSER].argument == MAX_EFFECT_RAIN); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Geyser!"); + MESSAGE("It started to rain!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RAIN_CONTINUES); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_HAILSTORM].argument == MAX_EFFECT_HAIL); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_POWDER_SNOW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Hailstorm!"); + MESSAGE("It started to hail!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_ROCKFALL].argument == MAX_EFFECT_SANDSTORM); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROCK_THROW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Rockfall!"); + MESSAGE("A sandstorm brewed!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") +{ + s32 maxHP = 490; // Because of recalculated stats upon Dynamaxing + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_OVERGROWTH].argument == MAX_EFFECT_GRASSY_TERRAIN); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190); + 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); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet used Max Overgrowth!"); + MESSAGE("Grass grew to cover the battlefield!"); + MESSAGE("Wobbuffet is healed by the grassy terrain!"); + HP_BAR(player, damage: -maxHP/16); + MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + HP_BAR(opponent, damage: -maxHP/16); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_MINDSTORM].argument == MAX_EFFECT_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); } + } SCENE { + MESSAGE("Foe Wobbuffet used ExtremeSpeed!"); + MESSAGE("Wobbuffet used Max Mindstorm!"); + MESSAGE("Foe Wobbuffet cannot use ExtremeSpeed!"); + MESSAGE("Wobbuffet used Max Mindstorm!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_LIGHTNING].argument == MAX_EFFECT_ELECTRIC_TERRAIN); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT, dynamax: TRUE); MOVE(opponent, MOVE_SPORE); } + } SCENE { + MESSAGE("Wobbuffet used Max Lightning!"); + MESSAGE("Foe Wobbuffet used Spore!"); + MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MAX_STARFALL].argument == MAX_EFFECT_MISTY_TERRAIN); + OPPONENT(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MOONBLAST, dynamax: TRUE); MOVE(opponent, MOVE_TOXIC); } + } SCENE { + MESSAGE("Wobbuffet used Max Starfall!"); + MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("Wobbuffet surrounds itself with a protective mist!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_STONESURGE].argument == MAX_EFFECT_STEALTH_ROCK); + PLAYER(SPECIES_DREDNAW); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LIQUIDATION, dynamax: TRUE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + // turn 1 + MESSAGE("Drednaw used G-Max Stonesurge!"); + MESSAGE("Pointed stones float in the air around the opposing team!"); + // turn 2 + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + } +} + +// The test below also tests that sharp steel does type-based damage and can be Defogged away. +SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_STEELSURGE].argument == MAX_EFFECT_STEELSURGE); + PLAYER(SPECIES_COPPERAJAH); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_HATTERENE); + } WHEN { + TURN { MOVE(player, MOVE_IRON_HEAD, dynamax: TRUE); } + TURN { SWITCH(opponent, 1); } + TURN { } // wait out Dynamax + TURN { MOVE(opponent, MOVE_DEFOG); } + } SCENE { + // turn 1 + MESSAGE("Copperajah used G-Max Steelsurge!"); + MESSAGE("Sharp-pointed steel floats around the opposing team!"); + // turn 2 + MESSAGE("2 sent out Hatterene!"); + MESSAGE("Sharp steel bit into Foe Hatterene!"); + // turn 4 + MESSAGE("Foe Hatterene used Defog!"); + MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); + } THEN { + EXPECT_MUL_EQ(opponent->maxHP, Q_4_12(0.75), opponent->hp); + } +} + +// The test below should apply to G-Max Fireball and G-Max Drum Solo, too. +SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abilities", s16 damage) +{ + u16 move; + PARAMETRIZE { move = MOVE_WATER_GUN; } + PARAMETRIZE { move = MOVE_HYDRO_CANNON; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_HYDROSNIPE].argument == MAX_EFFECT_FIXED_POWER); + PLAYER(SPECIES_INTELEON); + OPPONENT(SPECIES_ARCTOVISH) { Ability(ABILITY_WATER_ABSORB); } + } WHEN { + TURN { MOVE(player, move, dynamax: TRUE); } + } SCENE { + MESSAGE("Inteleon used G-Max Hydrosnipe!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_VOLT_CRASH].argument == MAX_EFFECT_PARALYZE_FOES); + PLAYER(SPECIES_PIKACHU); + PLAYER(SPECIES_PICHU); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Pikachu used G-Max Volt Crash!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); + STATUS_ICON(opponentLeft, paralysis: TRUE); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentRight); + STATUS_ICON(opponentRight, paralysis: TRUE); + MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + } +} + +// G-Max Stun Shock can apply different statuses to each opponent, but this isn't +// compatible with the test RNG set-up. +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponents") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = STATUS1_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_STUN_SHOCK].argument == MAX_EFFECT_POISON_PARALYZE_FOES); + PLAYER(SPECIES_TOXTRICITY); + PLAYER(SPECIES_TOXEL); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE, \ + WITH_RNG(RNG_G_MAX_STUN_SHOCK, rng)); } + } SCENE { + MESSAGE("Toxtricity used G-Max Stun Shock!"); + // opponent left + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); + if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponentLeft, poison: TRUE); + MESSAGE("Foe Wobbuffet was poisoned!"); + } + else { + STATUS_ICON(opponentLeft, paralysis: TRUE); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + } + // opponent right + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); + if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponentRight, poison: TRUE); + MESSAGE("Foe Wynaut was poisoned!"); + } + else { + STATUS_ICON(opponentRight, paralysis: TRUE); + MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + } + } +} + +// This test extends to G-Max Befuddle, too. +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before considering immunities") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_STUN_SHOCK].argument == MAX_EFFECT_POISON_PARALYZE_FOES); + PLAYER(SPECIES_TOXTRICITY); + PLAYER(SPECIES_TOXEL); + OPPONENT(SPECIES_GARBODOR); + OPPONENT(SPECIES_TRUBBISH); + } WHEN { + TURN { MOVE(playerLeft, MOVE_NUZZLE, target: opponentLeft, dynamax: TRUE, \ + WITH_RNG(RNG_G_MAX_STUN_SHOCK, STATUS1_POISON)); } + } SCENE { + MESSAGE("Toxtricity used G-Max Stun Shock!"); + NONE_OF { + // opponent left + STATUS_ICON(opponentLeft, poison: TRUE); + MESSAGE("Foe Garbodor was poisoned!"); + STATUS_ICON(opponentLeft, paralysis: TRUE); + MESSAGE("Foe Garbodor is paralyzed! It may be unable to move!"); + // opponent right + STATUS_ICON(opponentRight, poison: TRUE); + MESSAGE("Foe Trubbish was poisoned!"); + STATUS_ICON(opponentRight, paralysis: TRUE); + MESSAGE("Foe Trubbish is paralyzed! It may be unable to move!"); + } + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both opponents") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = STATUS1_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = STATUS1_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = STATUS1_SLEEP; } + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_BEFUDDLE].argument == MAX_EFFECT_EFFECT_SPORE_FOES); + PLAYER(SPECIES_BUTTERFREE); + PLAYER(SPECIES_CATERPIE); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_BUG_BITE, target: opponentLeft, dynamax: TRUE, + WITH_RNG(RNG_G_MAX_BEFUDDLE, rng)); } + } SCENE { + MESSAGE("Butterfree used G-Max Befuddle!"); + // opponent left + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); + if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponentLeft, poison: TRUE); + MESSAGE("Foe Wobbuffet was poisoned!"); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponentLeft, paralysis: TRUE); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + } + else { + STATUS_ICON(opponentLeft, sleep: TRUE); + MESSAGE("Foe Wobbuffet fell asleep!"); + } + // opponent right + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); + if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponentRight, poison: TRUE); + MESSAGE("Foe Wobbuffet was poisoned!"); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponentRight, paralysis: TRUE); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + } + else { + STATUS_ICON(opponentRight, sleep: TRUE); + MESSAGE("Foe Wobbuffet fell asleep!"); + } + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and generates money") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_GOLD_RUSH].argument == MAX_EFFECT_CONFUSE_FOES_PAY_DAY); + PLAYER(SPECIES_MEOWTH); + PLAYER(SPECIES_PERSIAN); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Meowth used G-Max Gold Rush!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); + MESSAGE("Foe Wobbuffet became confused!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); + MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("Coins scattered everywhere!"); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_SMITE].argument == MAX_EFFECT_CONFUSE_FOES); + PLAYER(SPECIES_HATTERENE); + PLAYER(SPECIES_HATENNA); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Hatterene used G-Max Smite!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); + MESSAGE("Foe Wobbuffet became confused!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); + MESSAGE("Foe Wobbuffet became confused!"); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possible") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_CUDDLE].argument == MAX_EFFECT_INFATUATE_FOES); + PLAYER(SPECIES_EEVEE) { Gender(MON_MALE); } + PLAYER(SPECIES_EEVEE); + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_MALE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Eevee used G-Max Cuddle!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft); + MESSAGE("Foe Wobbuffet fell in love!"); + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentRight); + MESSAGE("Foe Wobbuffet fell in love!"); + } + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_TERROR].argument == MAX_EFFECT_MEAN_LOOK); + PLAYER(SPECIES_GENGAR); + PLAYER(SPECIES_GASTLY); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Gengar used G-Max Terror!"); + MESSAGE("Foe Wobbuffet can't escape now!"); + MESSAGE("Foe Wobbuffet can't escape now!"); + } THEN { // Can't find good way to test trapping + EXPECT(opponentLeft->status2 & STATUS2_ESCAPE_PREVENTION); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_MELTDOWN].argument == MAX_EFFECT_TORMENT_FOES); + PLAYER(SPECIES_MELMETAL); + PLAYER(SPECIES_MELTAN); + 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); \ + MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE, target: opponentLeft); \ + MOVE(opponentLeft, MOVE_SPLASH, allowed: FALSE); \ + MOVE(opponentLeft, MOVE_CELEBRATE); \ + MOVE(opponentRight, MOVE_SPLASH, allowed: FALSE); \ + MOVE(opponentRight, MOVE_CELEBRATE); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE, target: opponentLeft); \ + MOVE(opponentLeft, MOVE_SPLASH); \ + MOVE(opponentRight, MOVE_SPLASH); } + } SCENE { + // turn 1 + MESSAGE("Melmetal used G-Max Meltdown!"); + MESSAGE("Foe Wobbuffet was subjected to torment!"); + MESSAGE("Foe Wynaut was subjected to torment!"); + MESSAGE("Foe Wobbuffet used Splash!"); + MESSAGE("Foe Wynaut used Splash!"); + // turn 2 + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + // end of turn 3 + MESSAGE("Foe Wobbuffet is tormented no more!"); + MESSAGE("Foe Wynaut is tormented no more!"); + } +} + +// This test applies to G-Max Cannonade, G-Max Vine Lash, and G-Max Volcalith, too. +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages non-Fire types") +{ + s16 damage; + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_WILDFIRE].argument == MAX_EFFECT_WILDFIRE); + PLAYER(SPECIES_CHARIZARD); + PLAYER(SPECIES_CHARMANDER); + OPPONENT(SPECIES_WOBBUFFET) { HP(600); MaxHP(600); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_ARCANINE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, dynamax: TRUE); } + TURN { } + TURN { SWITCH(opponentLeft, 2); } + TURN { } + TURN { } + } SCENE { + // turn 1 + MESSAGE("Charizard used G-Max Wildfire!"); + MESSAGE("The opposing team was surrounded by flames!"); + MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentLeft, captureDamage: &damage); + MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentRight); + // turn 2 + MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentLeft); + MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentRight); + // turn 3 + NONE_OF { MESSAGE("Foe Arcanine is burning up within G-Max Wildfire's flames!"); } + MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentRight); + // turn 4 + MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + HP_BAR(opponentRight); + // turn 5 + NONE_OF { + HP_BAR(opponentRight); + MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + } + } THEN { + EXPECT_EQ(damage, 100); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of the time") +{ + PASSES_RANDOMLY(1, 2, RNG_G_MAX_REPLENISH); + GIVEN { + ASSUME(gBattleMoves[MOVE_G_MAX_REPLENISH].argument == MAX_EFFECT_RECYCLE_BERRIES); + PLAYER(SPECIES_SNORLAX) { Item(ITEM_APICOT_BERRY); } + PLAYER(SPECIES_MUNCHLAX) { Item(ITEM_APICOT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_STUFF_CHEEKS); \ + MOVE(playerRight, MOVE_STUFF_CHEEKS); \ + MOVE(opponentLeft, MOVE_STUFF_CHEEKS); \ + MOVE(opponentRight, MOVE_STUFF_CHEEKS); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); } + } SCENE { + // turn 1 + MESSAGE("Using Apicot Berry, the Sp. Def of Snorlax rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of Munchlax rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + // turn 2 + MESSAGE("Snorlax used G-Max Replenish!"); + MESSAGE("Snorlax found one Apicot Berry!"); + MESSAGE("Munchlax found one Apicot Berry!"); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") +{ + PASSES_RANDOMLY(1, 2, RNG_G_MAX_SNOOZE); + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_SNOOZE].argument == MAX_EFFECT_YAWN_FOE); + PLAYER(SPECIES_GRIMMSNARL); + PLAYER(SPECIES_IMPIDIMP); + OPPONENT(SPECIES_BLISSEY); + OPPONENT(SPECIES_CHANSEY); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, dynamax: TRUE); } + TURN { } + } SCENE { + // turn 1 + MESSAGE("Grimmsnarl used G-Max Snooze!"); + MESSAGE("Grimmsnarl made Foe Blissey drowsy!"); + // turn 2 + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); + MESSAGE("Foe Blissey fell asleep!"); + STATUS_ICON(opponentLeft, sleep: TRUE); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") +{ + s16 damage1, damage2; + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_FINALE].argument == MAX_EFFECT_HEAL_TEAM); + PLAYER(SPECIES_ALCREMIE) { HP(1); } + PLAYER(SPECIES_MILCERY) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Alcremie used G-Max Finale!"); + HP_BAR(playerLeft, captureDamage: &damage1); + HP_BAR(playerRight, captureDamage: &damage2); + } THEN { + EXPECT_MUL_EQ(-damage1, Q_4_12(6), playerLeft->maxHP); // heals based on Dynamax HP + EXPECT_MUL_EQ(-damage2, Q_4_12(6), playerRight->maxHP); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_SWEETNESS].argument == MAX_EFFECT_AROMATHERAPY); + PLAYER(SPECIES_APPLETUN) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_APPLIN) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_VINE_WHIP, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Appletun used G-Max Sweetness!"); + STATUS_ICON(playerLeft, none: TRUE); + MESSAGE("Appletun's status returned to normal!"); + STATUS_ICON(playerRight, none: TRUE); + MESSAGE("Applin's status returned to normal!"); + } +} + +// This test applies to G-Max Sandblast, too. +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_CENTIFERNO].argument == MAX_EFFECT_FIRE_SPIN_FOES); + PLAYER(SPECIES_CENTISKORCH); + PLAYER(SPECIES_SIZZLIPEDE); + PLAYER(SPECIES_SIZZLIPEDE); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FLAME_CHARGE, target: opponentLeft, dynamax: TRUE); } + TURN { SWITCH(playerLeft, 2); } + } SCENE { + // turn 1 + MESSAGE("Centiskorc used G-Max Centiferno!"); + MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + HP_BAR(opponentLeft); + MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + HP_BAR(opponentRight); + // turn 2 - Fire Spin continues even after Centiskorch switches out + MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + HP_BAR(opponentLeft); + MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance") +{ + u32 j; + GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_6); + ASSUME(gBattleMoves[MOVE_G_MAX_CHI_STRIKE].argument == MAX_EFFECT_CRIT_PLUS); + PLAYER(SPECIES_MACHAMP); + PLAYER(SPECIES_MACHOP); + 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); } + TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft); \ + MOVE(playerRight, MOVE_FOCUS_ENERGY); } + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + // turn 1 - 3 + for (j = 0; j < 3; ++j) { + MESSAGE("Machamp used G-Max Chi Strike!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Machamp is getting pumped!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Machop is getting pumped!"); + } + // turn 4 + MESSAGE("Machop used Tackle!"); // Machop is at +5 crit stages + MESSAGE("A critical hit!"); + } +} + +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's last move") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_DEPLETION].argument == MAX_EFFECT_SPITE); + PLAYER(SPECIES_DURALUDON); + PLAYER(SPECIES_WYNAUT); + // Dynamax behaves weird with test turn order because stats are recalculated. + OPPONENT(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, dynamax: TRUE); } + } SCENE { + MESSAGE("Foe Sableye used Celebrate!"); + MESSAGE("Duraludon used G-Max Depletion!"); + MESSAGE("Reduced Foe Sableye's Celebrate by 2!"); + } +} + +// This test applies to G-Max Rapid Flow, too. +DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage", s16 damage) +{ + bool32 protect; + PARAMETRIZE { protect = TRUE; } + PARAMETRIZE { protect = FALSE; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gBattleMoves[MOVE_G_MAX_ONE_BLOW].argument == MAX_EFFECT_BYPASS_PROTECT); + PLAYER(SPECIES_URSHIFU); + PLAYER(SPECIES_KUBFU); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + if (protect) + TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \ + MOVE(opponentLeft, MOVE_PROTECT, dynamax: TRUE); } + else + TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \ + MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, dynamax: TRUE); } + } SCENE { + if (protect) + MESSAGE("Foe Wobbuffet used Max Guard!"); + MESSAGE("Urshifu used G-Max One Blow!"); + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +// Bug Testing +DOUBLE_BATTLE_TEST("(DYNAMAX) Max Flare doesn't softlock the game when fainting player partner") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE); + MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, dynamax: TRUE); + SEND_OUT(playerRight, 2); } + TURN { } + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battlers") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("Foe Wobbuffet fainted!"); + NOT MESSAGE("Foe Wobbuffet's Speed fell!"); + } +} diff --git a/test/random.c b/test/random.c index 5ca4b814df..845f24f102 100644 --- a/test/random.c +++ b/test/random.c @@ -6,7 +6,7 @@ // Therefore the maximum error is 8*3584, or 28672. #define SHUFFLE_TEST_IMPL \ u32 i, j, error; \ - u16 indexSum[7]; \ + u16 indexSum[8]; \ memset(indexSum, 0, sizeof(indexSum)); \ for (i = 0; i < 1024; i++) \ { \ @@ -196,7 +196,6 @@ TEST("RandomElement generates a uniform distribution") TEST("RandomUniform mul-based faster than mod-based (compile-time)") { - u32 i; struct Benchmark mulBenchmark, modBenchmark; u32 mulSum = 0, modSum = 0; diff --git a/test/test_runner.c b/test/test_runner.c index 637ff0ed83..93d859654a 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -56,9 +56,10 @@ static bool32 PrefixMatch(const char *pattern, const char *string) enum { STATE_INIT, - STATE_NEXT_TEST, + STATE_ASSIGN_TEST, STATE_RUN_TEST, STATE_REPORT_RESULT, + STATE_NEXT_TEST, STATE_EXIT, }; @@ -88,7 +89,7 @@ static u32 AssignCostToRunner(void) u32 minCostProcess; if (gTestRunnerState.test->runner == &gAssumptionsRunner) - return TRUE; + return gTestRunnerI; minCostProcess = MinCostProcess(); @@ -152,27 +153,27 @@ void CB2_TestRunner(void) } else { - gTestRunnerState.state = STATE_NEXT_TEST; - gTestRunnerState.test = __start_tests - 1; + gTestRunnerState.state = STATE_ASSIGN_TEST; + gTestRunnerState.test = __start_tests; } gTestRunnerState.exitCode = 0; gTestRunnerState.skipFilename = NULL; break; - case STATE_NEXT_TEST: - gTestRunnerState.test++; - - if (gTestRunnerState.test == __stop_tests) + case STATE_ASSIGN_TEST: + while (1) { - gTestRunnerState.state = STATE_EXIT; - return; - } - - if (gTestRunnerState.test->runner != &gAssumptionsRunner - && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) - { - return; + if (gTestRunnerState.test == __stop_tests) + { + gTestRunnerState.state = STATE_EXIT; + return; + } + if (gTestRunnerState.test->runner != &gAssumptionsRunner + && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + ++gTestRunnerState.test; + else + break; } MgbaPrintf_(":N%s", gTestRunnerState.test->name); @@ -188,16 +189,11 @@ void CB2_TestRunner(void) REG_TM2CNT_L = UINT16_MAX - (274 * 60); // Approx. 1 second. REG_TM2CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; - // NOTE: Assumes that the compiler interns __FILE__. - if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) - { - gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; - return; - } - sCurrentTest.address = (uintptr_t)gTestRunnerState.test; sCurrentTest.state = CURRENT_TEST_STATE_ESTIMATE; + // If AssignCostToRunner fails, we want to report the failure. + gTestRunnerState.state = STATE_REPORT_RESULT; if (AssignCostToRunner() == gTestRunnerI) gTestRunnerState.state = STATE_RUN_TEST; else @@ -208,9 +204,23 @@ void CB2_TestRunner(void) case STATE_RUN_TEST: gTestRunnerState.state = STATE_REPORT_RESULT; sCurrentTest.state = CURRENT_TEST_STATE_RUN; + SeedRng(0); + SeedRng2(0); if (gTestRunnerState.test->runner->setUp) + { gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); - gTestRunnerState.test->runner->run(gTestRunnerState.test->data); + gTestRunnerState.tearDown = TRUE; + } + // NOTE: Assumes that the compiler interns __FILE__. + if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) // Assumption fails for tests in this file. + { + gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; + return; + } + else + { + gTestRunnerState.test->runner->run(gTestRunnerState.test->data); + } break; case STATE_REPORT_RESULT: @@ -218,8 +228,11 @@ void CB2_TestRunner(void) gTestRunnerState.state = STATE_NEXT_TEST; - if (gTestRunnerState.test->runner->tearDown) + if (gTestRunnerState.tearDown && gTestRunnerState.test->runner->tearDown) + { gTestRunnerState.test->runner->tearDown(gTestRunnerState.test->data); + gTestRunnerState.tearDown = FALSE; + } if (gTestRunnerState.result == TEST_RESULT_PASS && !gTestRunnerState.expectLeaks) @@ -254,7 +267,9 @@ void CB2_TestRunner(void) if (gTestRunnerState.test->runner == &gAssumptionsRunner) { if (gTestRunnerState.result != TEST_RESULT_PASS) + { gTestRunnerState.skipFilename = gTestRunnerState.test->filename; + } } else { @@ -337,6 +352,11 @@ void CB2_TestRunner(void) break; + case STATE_NEXT_TEST: + gTestRunnerState.state = STATE_ASSIGN_TEST; + gTestRunnerState.test++; + break; + case STATE_EXIT: MgbaExit_(gTestRunnerState.exitCode); break; @@ -511,6 +531,7 @@ static s32 MgbaVPrintf_(const char *fmt, va_list va) s32 c, d; u32 p; const char *s; + const u8 *pokeS; while (*fmt) { switch ((c = *fmt++)) @@ -605,8 +626,8 @@ static s32 MgbaVPrintf_(const char *fmt, va_list va) i = MgbaPutchar_(i, c); break; case 'S': - s = va_arg(va, const u8 *); - while ((c = *s++) != EOS) + pokeS = va_arg(va, const u8 *); + while ((c = *pokeS++) != EOS) { if ((c = gWireless_RSEtoASCIITable[c]) != '\0') i = MgbaPutchar_(i, c); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 2d7d14833e..4823e3f17b 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1,8 +1,10 @@ #include "global.h" #include "battle.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_controllers.h" #include "characters.h" +#include "fieldmap.h" #include "item_menu.h" #include "main.h" #include "malloc.h" @@ -33,11 +35,16 @@ #undef Q_4_12 #define Q_4_12(n) (s32)((n) * 4096) -EWRAM_DATA struct BattleTestRunnerState *gBattleTestRunnerState = NULL; +// Alias sBackupMapData to avoid using heap. +struct BattleTestRunnerState *const gBattleTestRunnerState = (void *)sBackupMapData; +STATIC_ASSERT(sizeof(struct BattleTestRunnerState) <= sizeof(sBackupMapData), sBackupMapDataSpace); static void CB2_BattleTest_NextParameter(void); static void CB2_BattleTest_NextTrial(void); static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte); +static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalScore); +static void ClearAiLog(u32 battlerId); +static const char *BattlerIdentifier(s32 battlerId); NAKED static void InvokeSingleTestFunctionWithStack(void *results, u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent, SingleBattleTestFunction function, void *stack) { @@ -96,23 +103,42 @@ static void InvokeTestFunction(const struct BattleTest *test) { case BATTLE_TEST_SINGLES: case BATTLE_TEST_WILD: + case BATTLE_TEST_AI_SINGLES: InvokeSingleTestFunctionWithStack(STATE->results, STATE->runParameter, &gBattleMons[B_POSITION_PLAYER_LEFT], &gBattleMons[B_POSITION_OPPONENT_LEFT], test->function.singles, &DATA.stack[BATTLE_TEST_STACK_SIZE]); break; case BATTLE_TEST_DOUBLES: + case BATTLE_TEST_AI_DOUBLES: InvokeDoubleTestFunctionWithStack(STATE->results, STATE->runParameter, &gBattleMons[B_POSITION_PLAYER_LEFT], &gBattleMons[B_POSITION_OPPONENT_LEFT], &gBattleMons[B_POSITION_PLAYER_RIGHT], &gBattleMons[B_POSITION_OPPONENT_RIGHT], test->function.singles, &DATA.stack[BATTLE_TEST_STACK_SIZE]); break; } } -static u32 SourceLine(u32 sourceLineOffset) +static const struct BattleTest *GetBattleTest(void) { const struct BattleTest *test = gTestRunnerState.test->data; + return test; +} + +static bool32 IsAITest(void) +{ + switch (GetBattleTest()->type) + { + case BATTLE_TEST_AI_SINGLES: + case BATTLE_TEST_AI_DOUBLES: + return TRUE; + } + 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 = gTestRunnerState.test->data; + const struct BattleTest *test = GetBattleTest(); if (sourceLine - test->sourceLine > 0xFF) return 0; else @@ -123,9 +149,7 @@ static u32 BattleTest_EstimateCost(void *data) { u32 cost; const struct BattleTest *test = data; - STATE = AllocZeroed(sizeof(*STATE)); - if (!STATE) - return 0; + memset(STATE, 0, sizeof(*STATE)); STATE->runRandomly = TRUE; InvokeTestFunction(test); cost = 1; @@ -135,29 +159,30 @@ static u32 BattleTest_EstimateCost(void *data) cost *= 3; else if (STATE->trials > 1) cost *= STATE->trials; - FREE_AND_SET_NULL(STATE); return cost; } static void BattleTest_SetUp(void *data) { const struct BattleTest *test = data; - STATE = AllocZeroed(sizeof(*STATE)); - if (!STATE) - Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE = AllocZerod(%d)", sizeof(*STATE)); + memset(STATE, 0, sizeof(*STATE)); InvokeTestFunction(test); STATE->parameters = STATE->parametersCount; if (STATE->parametersCount == 0 && test->resultsSize > 0) Test_ExitWithResult(TEST_RESULT_INVALID, "results without PARAMETRIZE"); - STATE->results = AllocZeroed(test->resultsSize * STATE->parameters); - if (!STATE->results) - Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE->results = AllocZerod(%d)", sizeof(test->resultsSize * STATE->parameters)); + 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)); + STATE->results = (void *)((char *)sBackupMapData + sizeof(struct BattleTestRunnerState)); + memset(STATE->results, 0, test->resultsSize * STATE->parameters); switch (test->type) { case BATTLE_TEST_SINGLES: + case BATTLE_TEST_WILD: + case BATTLE_TEST_AI_SINGLES: STATE->battlersCount = 2; break; case BATTLE_TEST_DOUBLES: + case BATTLE_TEST_AI_DOUBLES: STATE->battlersCount = 4; break; } @@ -189,7 +214,7 @@ static void PrintTestName(void) // modifiers. static void SetImplicitSpeeds(void) { - s32 i, j; + s32 i; u32 speed = 12; u32 hasSpeeds = 0; u32 allSpeeds = ((1 << DATA.playerPartySize) - 1) | (((1 << DATA.opponentPartySize) - 1) << 6); @@ -234,18 +259,35 @@ static void BattleTest_Run(void *data) memset(&DATA, 0, sizeof(DATA)); DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; - DATA.recordedBattle.opponentA = TRAINER_LINK_OPPONENT; - DATA.recordedBattle.textSpeed = OPTIONS_TEXT_SPEED_FAST; - if (test->type == BATTLE_TEST_WILD) - DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER; - else - DATA.recordedBattle.battleFlags = BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_IS_MASTER; - if (test->type == BATTLE_TEST_DOUBLES) + // Set battle flags and opponent ids. + switch (test->type) { - DATA.recordedBattle.battleFlags |= BATTLE_TYPE_DOUBLE; + case BATTLE_TEST_WILD: + DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER; + break; + case BATTLE_TEST_AI_SINGLES: + DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + DATA.recordedBattle.opponentA = TRAINER_LEAF; + DATA.hasAI = TRUE; + break; + case BATTLE_TEST_AI_DOUBLES: + DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE; + DATA.recordedBattle.opponentA = TRAINER_LEAF; + DATA.recordedBattle.opponentB = TRAINER_RED; + DATA.hasAI = TRUE; + break; + case BATTLE_TEST_SINGLES: + DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER; + DATA.recordedBattle.opponentA = TRAINER_LINK_OPPONENT; + break; + case BATTLE_TEST_DOUBLES: + DATA.recordedBattle.battleFlags = BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE; + DATA.recordedBattle.opponentA = TRAINER_LINK_OPPONENT; DATA.recordedBattle.opponentB = TRAINER_LINK_OPPONENT; + break; } + for (i = 0; i < STATE->battlersCount; i++) { DATA.recordedBattle.playersName[i][0] = CHAR_1 + i; @@ -438,7 +480,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) if (turn && turn->criticalHit) return turn->criticalHit - 1; else - return FALSE; + return weights[FALSE] > 0 ? FALSE : TRUE; case RNG_SECONDARY_EFFECT: ASSUME(n == 2); @@ -495,6 +537,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz STATE->trialRatio = Q_4_12(1) / count; return (const u8 *)array + size * STATE->runTrial; } + return (const u8 *)array + size * index; } static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) @@ -655,10 +698,10 @@ static s32 TryHP(s32 i, s32 n, u32 battlerId, u32 oldHP, u32 newHP) switch (event->type) { case HP_EVENT_NEW_HP: - *(u16 *)event->address = newHP; + *(u16 *)(u32)(event->address) = newHP; break; case HP_EVENT_DELTA_HP: - *(s16 *)event->address = oldHP - newHP; + *(s16 *)(u32)(event->address) = oldHP - newHP; break; } return i; @@ -711,6 +754,292 @@ void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) } } +static const char *const sBattleActionNames[] = +{ + [B_ACTION_USE_MOVE] = "MOVE", + [B_ACTION_USE_ITEM] = "USE_ITEM", + [B_ACTION_SWITCH] = "SWITCH", +}; + +static u32 CountAiExpectMoves(struct ExpectedAIAction *expectedAction, u32 battlerId, bool32 printLog) +{ + u32 i, countExpected = 0; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBitTable[i] & expectedAction->moveSlots) + { + if (printLog) + PrintAiMoveLog(battlerId, i, gBattleMons[battlerId].moves[i], gBattleStruct->aiFinalScore[battlerId][expectedAction->target][i]); + countExpected++; + } + } + return countExpected; +} + +void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) +{ + const char *filename = gTestRunnerState.test->filename; + u32 id = DATA.aiActionsPlayed[battlerId]; + struct ExpectedAIAction *expectedAction = &DATA.expectedAiActions[battlerId][id]; + + if (!expectedAction->actionSet) + return; + + if (!expectedAction->pass) + { + u32 i, expectedMoveId = 0, countExpected; + bool32 movePasses = FALSE; + + if (expectedAction->type != B_ACTION_USE_MOVE) + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected MOVE, got %s", 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)); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBitTable[i] & expectedAction->moveSlots) + { + expectedMoveId = gBattleMons[battlerId].moves[i]; + if (!expectedAction->notMove) + { + if (moveId == expectedMoveId) + { + movePasses = TRUE; + break; + } + } + else + { + if (moveId == expectedMoveId) + { + movePasses = FALSE; + break; + } + movePasses = TRUE; + } + } + } + + countExpected = CountAiExpectMoves(expectedAction, battlerId, TRUE); + + if (!expectedAction->notMove && !movePasses) + { + 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, gMoveNames[expectedMoveId], gMoveNames[moveId]); + else + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched EXPECT_MOVE %S, got %S", filename, expectedAction->sourceLine, gMoveNames[expectedMoveId], gMoveNames[moveId]); + } + if (expectedAction->notMove && !movePasses) + { + if (countExpected > 1) + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVES %S", filename, expectedAction->sourceLine, gMoveNames[expectedMoveId]); + else + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVE %S", filename, expectedAction->sourceLine, gMoveNames[expectedMoveId]); + } + } + // Turn passed, clear logs from the turn + ClearAiLog(battlerId); + DATA.aiActionsPlayed[battlerId]++; +} + +void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex) +{ + const char *filename = gTestRunnerState.test->filename; + u32 id = DATA.aiActionsPlayed[battlerId]; + struct ExpectedAIAction *expectedAction = &DATA.expectedAiActions[battlerId][id]; + + if (!expectedAction->actionSet) + return; + + if (!expectedAction->pass) + { + if (expectedAction->type != B_ACTION_SWITCH) + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected SWITCH/SEND_OUT, got %s", 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); + } + DATA.aiActionsPlayed[battlerId]++; +} + +static bool32 CheckComparision(s32 val1, s32 val2, u32 cmp) +{ + switch (cmp) + { + case CMP_EQUAL: + return (val1 == val2); + case CMP_NOT_EQUAL: + return (val1 != val2); + case CMP_GREATER_THAN: + return (val1 > val2); + case CMP_LESS_THAN: + return (val1 < val2); + } + return FALSE; +} + +static const char *const sCmpToStringTable[] = +{ + [CMP_EQUAL] = "EQ", + [CMP_NOT_EQUAL] = "NE", + [CMP_LESS_THAN] = "LT", + [CMP_GREATER_THAN] = "GT", +}; + +static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct ExpectedAIAction *aiAction, const char *filename) +{ + u32 i; + s32 *scores = gBattleStruct->aiFinalScore[battlerId][target]; + s32 bestScore = 0, bestScoreId = 0; + u16 *moves = gBattleMons[battlerId].moves; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (scores[i] > bestScore) + { + bestScore = scores[i]; + bestScoreId = i; + } + } + for (i = 0; i < MAX_MON_MOVES; i++) + { + // We expect move 'i', but it has the same best score as another move that we didn't expect. + if (scores[i] == scores[bestScoreId] + && !aiAction->notMove + && (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, + aiAction->sourceLine, gMoveNames[moves[i]], scores[i], gMoveNames[moves[bestScoreId]]); + } + // We DO NOT expect move 'i', but it has the same best score as another move. + if (scores[i] == scores[bestScoreId] + && aiAction->notMove + && (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, + aiAction->sourceLine, gMoveNames[moves[i]], scores[i], gMoveNames[moves[bestScoreId]]); + } + } +} + +static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalScore) +{ + s32 i, scoreFromLogs = 0; + + if (!DATA.logAI) return; + if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return; + + DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot]; + MgbaPrintf_("Score Log for move %S:\n", gMoveNames[moveId]); + for (i = 0; i < MAX_AI_LOG_LINES; i++) + { + struct AILogLine *log = &DATA.aiLogLines[battlerId][moveSlot][i]; + if (log->file) + { + if (log->set) + { + scoreFromLogs = log->score; + MgbaPrintf_("%s:%d: = %d\n", log->file, log->line, log->score); + } + else if (log->score > 0) + { + scoreFromLogs += log->score; + MgbaPrintf_("%s:%d: +%d\n", log->file, log->line, log->score); + } + else + { + scoreFromLogs += log->score; + MgbaPrintf_("%s:%d: %d\n", log->file, log->line, log->score); + } + } + else + { + break; + } + } + 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); + } + MgbaPrintf_("Total: %d\n", totalScore); +} + +static void ClearAiLog(u32 battlerId) +{ + u32 i, j; + for (i = 0; i < MAX_MON_MOVES; i++) + { + struct AILogLine *logs = DATA.aiLogLines[battlerId][i]; + for (j = 0; j < MAX_AI_LOG_LINES; j++) + memset(&logs[j], 0, sizeof(struct AILogLine)); + } + DATA.aiLogPrintedForMove[battlerId] = 0; +} + +void TestRunner_Battle_CheckAiMoveScores(u32 battlerId) +{ + s32 i; + struct ExpectedAIAction *aiAction; + const char *filename = gTestRunnerState.test->filename; + s32 turn = gBattleResults.battleTurnCounter; + + for (i = 0; i < MAX_AI_SCORE_COMPARISION_PER_TURN; i++) + { + struct ExpectedAiScore *scoreCtx = &DATA.expectedAiScores[battlerId][turn][i]; + if (scoreCtx->set) + { + u32 moveId1 = gBattleMons[battlerId].moves[scoreCtx->moveSlot1]; + s32 target = scoreCtx->target; + s32 *scores = gBattleStruct->aiFinalScore[battlerId][target]; + + if (scoreCtx->toValue) + { + 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", + filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], gMoveNames[moveId1], scoreCtx->value, scores[scoreCtx->moveSlot1]); + } + } + else + { + u32 moveId2 = gBattleMons[battlerId].moves[scoreCtx->moveSlot2]; + PrintAiMoveLog(battlerId, scoreCtx->moveSlot1, moveId1, scores[scoreCtx->moveSlot1]); + 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", + filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], gMoveNames[moveId1], scores[scoreCtx->moveSlot1], gMoveNames[moveId2], scores[scoreCtx->moveSlot2]); + } + } + } + } + + // We need to make sure that the expected move has the best score. We have to rule out a situation where the expected move is used, but it has the same number of points as some other moves. + aiAction = &DATA.expectedAiActions[battlerId][DATA.aiActionsPlayed[battlerId]]; + if (aiAction->actionSet && !aiAction->pass) + { + s32 target = aiAction->target; + // AI's move targets self, but points for this move are distributed for all other battlers + if (aiAction->target == battlerId) + { + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (i != battlerId && IsBattlerAlive(i)) + CheckIfMaxScoreEqualExpectMove(battlerId, i, aiAction, filename); + } + } + else + { + CheckIfMaxScoreEqualExpectMove(battlerId, target, aiAction, filename); + } + } +} + static s32 TryExp(s32 i, s32 n, u32 battlerId, u32 oldExp, u32 newExp) { struct QueuedExpEvent *event; @@ -745,10 +1074,10 @@ static s32 TryExp(s32 i, s32 n, u32 battlerId, u32 oldExp, u32 newExp) switch (event->type) { case EXP_EVENT_NEW_EXP: - *(u32 *)event->address = newExp; + *(u32 *)(u32)(event->address) = newExp; break; case EXP_EVENT_DELTA_EXP: - *(s32 *)event->address = oldExp - newExp; + *(s32 *)(u32)(event->address) = oldExp - newExp; break; } return i; @@ -812,6 +1141,7 @@ static s32 TryMessage(s32 i, s32 n, const u8 *string) continue; event = &DATA.queuedEvents[i].as.message; + // MgbaPrintf_("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging. for (j = k = 0; ; j++, k++) { if (event->pattern[k] == CHAR_SPACE) @@ -966,7 +1296,7 @@ static const char *const sEventTypeMacros[] = void TestRunner_Battle_AfterLastTurn(void) { - const struct BattleTest *test = gTestRunnerState.test->data; + const struct BattleTest *test = GetBattleTest(); if (DATA.turns - 1 != DATA.lastActionTurn) { @@ -1056,15 +1386,10 @@ static void CB2_BattleTest_NextTrial(void) static void BattleTest_TearDown(void *data) { - if (STATE) - { - // Free resources that aren't cleaned up when the battle was - // aborted unexpectedly. - if (STATE->tearDownBattle) - TearDownBattle(); - FREE_AND_SET_NULL(STATE->results); - FREE_AND_SET_NULL(STATE); - } + // Free resources that aren't cleaned up when the battle was + // aborted unexpectedly. + if (STATE->tearDownBattle) + TearDownBattle(); } static bool32 BattleTest_CheckProgress(void *data) @@ -1099,7 +1424,7 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx) { - const struct BattleTest *test = gTestRunnerState.test->data; + const struct BattleTest *test = GetBattleTest(); INVALID_IF(STATE->trials != 0, "PASSES_RANDOMLY can only be used once per test"); INVALID_IF(test->resultsSize > 0, "PASSES_RANDOMLY is incompatible with results"); INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); @@ -1128,6 +1453,19 @@ void RNGSeed_(u32 sourceLine, u32 seed) DATA.recordedBattle.rngSeed = seed; } +void AIFlags_(u32 sourceLine, u32 flags) +{ + INVALID_IF(!IsAITest(), "AI_FLAGS is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST"); + DATA.recordedBattle.AI_scripts = flags; + DATA.hasAI = TRUE; +} + +void AILogScores(u32 sourceLine) +{ + INVALID_IF(!IsAITest(), "AI_LOG is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST"); + DATA.logAI = TRUE; +} + const struct TestRunner gBattleTestRunner = { .estimateCost = BattleTest_EstimateCost, @@ -1182,7 +1520,6 @@ static const u16 sNaturePersonalities[NUM_NATURES] = static u32 GenerateNature(u32 nature, u32 offset) { - int i; if (offset <= nature) nature -= offset; else @@ -1327,7 +1664,7 @@ void Item_(u32 sourceLine, u32 item) SetMonData(DATA.currentMon, MON_DATA_HELD_ITEM, &item); } -void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]) +void Moves_(u32 sourceLine, u16 moves[MAX_MON_MOVES]) { s32 i; INVALID_IF(!DATA.currentMon, "Moves outside of PLAYER/OPPONENT"); @@ -1392,11 +1729,16 @@ static const char *const sBattlerIdentifiersDoubles[] = static const char *BattlerIdentifier(s32 battlerId) { - const struct BattleTest *test = gTestRunnerState.test->data; + const struct BattleTest *test = GetBattleTest(); switch (test->type) { - case BATTLE_TEST_SINGLES: return sBattlerIdentifiersSingles[battlerId]; - case BATTLE_TEST_DOUBLES: return sBattlerIdentifiersDoubles[battlerId]; + case BATTLE_TEST_SINGLES: + case BATTLE_TEST_WILD: + case BATTLE_TEST_AI_SINGLES: + return sBattlerIdentifiersSingles[battlerId]; + case BATTLE_TEST_DOUBLES: + case BATTLE_TEST_AI_DOUBLES: + return sBattlerIdentifiersDoubles[battlerId]; } return ""; } @@ -1446,18 +1788,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde switch (DATA.battleRecordTypes[battlerId][recordIndex]) { case RECORDED_ACTION_TYPE: - switch (DATA.recordedBattle.battleRecord[battlerId][recordIndex]) - { - case B_ACTION_USE_MOVE: - actualMacro = "MOVE"; - break; - case B_ACTION_SWITCH: - actualMacro = "SWITCH"; - break; - case B_ACTION_USE_ITEM: - actualMacro = "USE_ITEM"; - break; - } + actualMacro = sBattleActionNames[DATA.recordedBattle.battleRecord[battlerId][recordIndex]]; break; case RECORDED_PARTY_INDEX: actualMacro = "SEND_OUT"; @@ -1517,15 +1848,30 @@ static void SetSlowerThan(s32 battlerId) DATA.slowerThan[battlerId & BIT_SIDE][DATA.currentMonIndexes[battlerId]] |= slowerThan; } +static void SetAiActionToPass(u32 sourceLine, s32 battlerId) +{ + DATA.expectedAiActions[battlerId][DATA.expectedAiActionIndex[battlerId]].actionSet = TRUE; + DATA.expectedAiActions[battlerId][DATA.expectedAiActionIndex[battlerId]].sourceLine = sourceLine; + DATA.expectedAiActions[battlerId][DATA.expectedAiActionIndex[battlerId]].pass = TRUE; + DATA.expectedAiActionIndex[battlerId]++; +} + void CloseTurn(u32 sourceLine) { s32 i; INVALID_IF(DATA.turnState != TURN_OPEN, "Nested TURN"); DATA.turnState = TURN_CLOSING; + + // If Move was not specified always use Celebrate. In AI Tests allow any taken action. for (i = 0; i < STATE->battlersCount; i++) { if (!(DATA.actionBattlers & (1 << i))) - Move(sourceLine, &gBattleMons[i], (struct MoveContext) { move: MOVE_CELEBRATE, explicitMove: TRUE }); + { + if (IsAITest() && (i & BIT_SIDE) == B_SIDE_OPPONENT) // If Move was not specified, allow any move used. + SetAiActionToPass(sourceLine, i); + else + Move(sourceLine, &gBattleMons[i], (struct MoveContext) { move: MOVE_CELEBRATE, explicitMove: TRUE }); + } } DATA.turnState = TURN_CLOSED; DATA.turns++; @@ -1541,59 +1887,12 @@ static struct Pokemon *CurrentMon(s32 battlerId) return &party[DATA.currentMonIndexes[battlerId]]; } -void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) +s32 MoveGetTarget(s32 battlerId, u32 moveId, struct MoveContext *ctx, u32 sourceLine) { - s32 i; - s32 battlerId = battler - gBattleMons; - struct Pokemon *mon = CurrentMon(battlerId); - u32 moveId, moveSlot; - s32 target; - - INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN"); - - if (ctx.explicitMove) + s32 target = battlerId; + if (ctx->explicitTarget) { - INVALID_IF(ctx.move == MOVE_NONE || ctx.move >= MOVES_COUNT, "Illegal move: %d", ctx.move); - for (i = 0; i < MAX_MON_MOVES; i++) - { - moveId = GetMonData(mon, MON_DATA_MOVE1 + i); - if (moveId == ctx.move) - { - moveSlot = i; - break; - } - else if (moveId == MOVE_NONE) - { - INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx.move]); - SetMonData(mon, MON_DATA_MOVE1 + i, &ctx.move); - SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx.move].pp); - moveSlot = i; - moveId = ctx.move; - break; - } - } - INVALID_IF(i == MAX_MON_MOVES, "Too many different moves for %s", BattlerIdentifier(battlerId)); - } - else if (ctx.explicitMoveSlot) - { - moveSlot = ctx.moveSlot; - moveId = GetMonData(mon, MON_DATA_MOVE1 + moveSlot); - INVALID_IF(moveId == MOVE_NONE, "Empty moveSlot: %d", ctx.moveSlot); - } - else - { - INVALID("No move or moveSlot"); - } - - if (ctx.explicitMegaEvolve && ctx.megaEvolve) - moveSlot |= RET_MEGA_EVOLUTION; - - if (ctx.explicitUltraBurst && ctx.ultraBurst) - moveSlot |= RET_ULTRA_BURST; - - if (ctx.explicitTarget) - { - target = ctx.target - gBattleMons; + target = ctx->target - gBattleMons; } else { @@ -1609,7 +1908,11 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) } else if (move->target == MOVE_TARGET_SELECTED) { - INVALID_IF(STATE->battlersCount > 2, "%S requires explicit target", gMoveNames[moveId]); + // In AI Doubles not specified target allows any target for EXPECT_MOVE. + if (GetBattleTest()->type != BATTLE_TEST_AI_DOUBLES) + { + INVALID_IF(STATE->battlersCount > 2, "%S requires explicit target", gMoveNames[moveId]); + } target = BATTLE_OPPOSITE(battlerId); } @@ -1623,9 +1926,76 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) } else { - INVALID("%S requires explicit target", gMoveNames[moveId]); + // In AI Doubles not specified target allows any target for EXPECT_MOVE. + if (GetBattleTest()->type != BATTLE_TEST_AI_DOUBLES) + { + INVALID("%S requires explicit target", gMoveNames[moveId]); + } } } + return target; +} + +void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 *moveSlot, u32 sourceLine) +{ + u32 i; + struct Pokemon *mon = CurrentMon(battlerId); + + if (ctx->explicitMove) + { + INVALID_IF(ctx->move == MOVE_NONE || ctx->move >= MOVES_COUNT, "Illegal move: %d", ctx->move); + for (i = 0; i < MAX_MON_MOVES; i++) + { + *moveId = GetMonData(mon, MON_DATA_MOVE1 + i); + if (*moveId == ctx->move) + { + *moveSlot = i; + break; + } + else if (*moveId == MOVE_NONE) + { + INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx->move]); + SetMonData(mon, MON_DATA_MOVE1 + i, &ctx->move); + SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx->move].pp); + *moveSlot = i; + *moveId = ctx->move; + break; + } + } + INVALID_IF(i == MAX_MON_MOVES, "Too many different moves for %s", BattlerIdentifier(battlerId)); + } + else if (ctx->explicitMoveSlot) + { + *moveSlot = ctx->moveSlot; + *moveId = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); + INVALID_IF(moveId == MOVE_NONE, "Empty moveSlot: %d", ctx->moveSlot); + } + else + { + INVALID("No move or moveSlot"); + } + + if (ctx->explicitMegaEvolve && ctx->megaEvolve) + *moveSlot |= RET_MEGA_EVOLUTION; + + if (ctx->explicitUltraBurst && ctx->ultraBurst) + *moveSlot |= RET_ULTRA_BURST; + + if (ctx->explicitDynamax && ctx->dynamax) + *moveSlot |= RET_DYNAMAX; +} + +void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) +{ + s32 battlerId = battler - gBattleMons; + u32 moveId, moveSlot; + s32 target; + + INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN"); + INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "MOVE is not allowed for opponent in AI tests. Use EXPECT_MOVE instead"); + + MoveGetIdAndSlot(battlerId, &ctx, &moveId, &moveSlot, sourceLine); + target = MoveGetTarget(battlerId, moveId, &ctx, sourceLine); if (ctx.explicitHit) DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit; @@ -1672,6 +2042,152 @@ void ForcedMove(u32 sourceLine, struct BattlePokemon *battler) } } +static void TryMarkExpectMove(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext *ctx) +{ + s32 battlerId = battler - gBattleMons; + u32 moveId, moveSlot, id; + s32 target; + + INVALID_IF(DATA.turnState == TURN_CLOSED, "EXPECT_MOVE outside TURN"); + INVALID_IF(!IsAITest(), "EXPECT_MOVE is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST"); + MoveGetIdAndSlot(battlerId, ctx, &moveId, &moveSlot, sourceLine); + target = MoveGetTarget(battlerId, moveId, ctx, sourceLine); + + id = DATA.expectedAiActionIndex[battlerId]; + DATA.expectedAiActions[battlerId][id].type = B_ACTION_USE_MOVE; + DATA.expectedAiActions[battlerId][id].moveSlots |= gBitTable[moveSlot]; + DATA.expectedAiActions[battlerId][id].target = target; + DATA.expectedAiActions[battlerId][id].explicitTarget = ctx->explicitTarget; + DATA.expectedAiActions[battlerId][id].sourceLine = sourceLine; + DATA.expectedAiActions[battlerId][id].actionSet = TRUE; + if (ctx->explicitNotExpected) + DATA.expectedAiActions[battlerId][id].notMove = ctx->notExpected; + + DATA.actionBattlers |= 1 << battlerId; + DATA.moveBattlers |= 1 << battlerId; +} + +void ExpectMove(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) +{ + s32 battlerId = battler - gBattleMons; + TryMarkExpectMove(sourceLine, battler, &ctx); + DATA.expectedAiActionIndex[battlerId]++; +} + +void ExpectSendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) +{ + s32 i, id; + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "EXPECT_SEND_OUT outside TURN"); + INVALID_IF(!IsAITest(), "EXPECT_SEND_OUT is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST"); + INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "EXPECT_SEND_OUT to invalid party index"); + for (i = 0; i < STATE->battlersCount; i++) + { + if (battlerId != i && (battlerId & BIT_SIDE) == (i & BIT_SIDE)) + INVALID_IF(DATA.currentMonIndexes[i] == partyIndex, "EXPECT_SEND_OUT to battler"); + } + if (!(DATA.actionBattlers & (1 << battlerId))) + { + if (IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT) // If Move was not specified, allow any move used. + SetAiActionToPass(sourceLine, battlerId); + else + Move(sourceLine, battler, (struct MoveContext) { move: MOVE_CELEBRATE, explicitMove: TRUE }); + } + + DATA.currentMonIndexes[battlerId] = partyIndex; + DATA.actionBattlers |= 1 << battlerId; + + id = DATA.expectedAiActionIndex[battlerId]; + DATA.expectedAiActions[battlerId][id].type = B_ACTION_SWITCH; + DATA.expectedAiActions[battlerId][id].target = partyIndex; + DATA.expectedAiActions[battlerId][id].sourceLine = sourceLine; + DATA.expectedAiActions[battlerId][id].actionSet = TRUE; + DATA.expectedAiActionIndex[battlerId]++; +} + +s32 GetAiMoveTargetForScoreCompare(u32 battlerId, u32 moveId, struct MoveContext *ctx, u32 sourceLine) +{ + s32 target; + + // In Single Battles ai always targets the opposing mon. + if (GetBattleTest()->type == BATTLE_TEST_AI_SINGLES) + { + target = BATTLE_OPPOSITE(battlerId); + } + else + { + // TODO: Fix ai targeting self in double battles. + INVALID_IF(!ctx->explicitTarget, "%S requires explicit target for score comparison in doubles", gMoveNames[moveId]); + target = MoveGetTarget(battlerId, moveId, ctx, sourceLine); + } + return target; +} + +void Score(u32 sourceLine, struct BattlePokemon *battler, u32 cmp, bool32 toValue, struct TestAIScoreStruct cmpCtx) +{ + u32 moveSlot1, moveSlot2; + s32 i, target; + struct MoveContext moveCtx = {0}; + s32 battlerId = battler - gBattleMons; + s32 turn = DATA.turns; + + INVALID_IF(!IsAITest(), "SCORE_%s%s is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST", sCmpToStringTable[cmp], (toValue == TRUE) ? "_VAL" : ""); + + for (i = 0; i < MAX_AI_SCORE_COMPARISION_PER_TURN; i++) + { + if (!DATA.expectedAiScores[battlerId][turn][i].set) + break; + } + + INVALID_IF(i == MAX_AI_SCORE_COMPARISION_PER_TURN, "Too many EXPECTs in TURN"); + + moveCtx.move = cmpCtx.move1; + moveCtx.explicitMove = cmpCtx.explicitMove1; + moveCtx.target = cmpCtx.target; + moveCtx.explicitTarget = cmpCtx.explicitTarget; + MoveGetIdAndSlot(battlerId, &moveCtx, &cmpCtx.move1, &moveSlot1, sourceLine); + // For ai moves, target is never self. + target = GetAiMoveTargetForScoreCompare(battlerId, cmpCtx.move1, &moveCtx, sourceLine); + DATA.expectedAiScores[battlerId][turn][i].target = target; + DATA.expectedAiScores[battlerId][turn][i].moveSlot1 = moveSlot1; + DATA.expectedAiScores[battlerId][turn][i].cmp = cmp; + DATA.expectedAiScores[battlerId][turn][i].toValue = toValue; + if (toValue) + { + DATA.expectedAiScores[battlerId][turn][i].value = cmpCtx.valueOrMoveId2; + } + else + { + moveCtx.move = cmpCtx.valueOrMoveId2; + moveCtx.explicitMove = cmpCtx.explicitValueOrMoveId2; + moveCtx.target = cmpCtx.target; + moveCtx.explicitTarget = cmpCtx.explicitTarget; + MoveGetIdAndSlot(battlerId, &moveCtx, &cmpCtx.valueOrMoveId2, &moveSlot2, sourceLine); + DATA.expectedAiScores[battlerId][turn][i].moveSlot2 = moveSlot2; + } + DATA.expectedAiScores[battlerId][turn][i].sourceLine = sourceLine; + DATA.expectedAiScores[battlerId][turn][i].set = TRUE; +} + +void ExpectMoves(u32 sourceLine, struct BattlePokemon *battler, bool32 notExpected, struct FourMoves moves) +{ + s32 battlerId = battler - gBattleMons; + u32 i; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (moves.moves[i] != MOVE_NONE) + { + struct MoveContext ctx = {0}; + ctx.move = moves.moves[i]; + ctx.explicitMove = ctx.explicitNotExpected = TRUE; + ctx.notExpected = notExpected; + TryMarkExpectMove(sourceLine, battler, &ctx); + } + } + DATA.expectedAiActionIndex[battlerId]++; +} + void Switch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) { s32 i; @@ -1679,6 +2195,7 @@ void Switch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) INVALID_IF(DATA.turnState == TURN_CLOSED, "SWITCH outside TURN"); INVALID_IF(DATA.actionBattlers & (1 << battlerId), "Multiple battler actions"); INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "SWITCH to invalid party index"); + INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "SWITCH is not allowed for opponent in AI tests. Use EXPECT_SWITCH instead"); for (i = 0; i < STATE->battlersCount; i++) { @@ -1693,6 +2210,32 @@ void Switch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) DATA.actionBattlers |= 1 << battlerId; } +void ExpectSwitch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) +{ + s32 i, id; + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "EXPECT_SWITCH outside TURN"); + INVALID_IF(!IsAITest(), "EXPECT_SWITCH is usable only in AI_SINGLE_BATTLE_TEST & AI_DOUBLE_BATTLE_TEST"); + INVALID_IF(DATA.actionBattlers & (1 << battlerId), "Multiple battler actions"); + INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "EXPECT_SWITCH to invalid party index"); + + for (i = 0; i < STATE->battlersCount; i++) + { + if (battlerId != i && (battlerId & BIT_SIDE) == (i & BIT_SIDE)) + INVALID_IF(DATA.currentMonIndexes[i] == partyIndex, "EXPECT_SWITCH to battler"); + } + + DATA.currentMonIndexes[battlerId] = partyIndex; + DATA.actionBattlers |= 1 << battlerId; + + id = DATA.expectedAiActionIndex[battlerId]; + DATA.expectedAiActions[battlerId][id].type = B_ACTION_SWITCH; + DATA.expectedAiActions[battlerId][id].target = partyIndex; + DATA.expectedAiActions[battlerId][id].sourceLine = sourceLine; + DATA.expectedAiActions[battlerId][id].actionSet = TRUE; + DATA.expectedAiActionIndex[battlerId]++; +} + void SkipTurn(u32 sourceLine, struct BattlePokemon *battler) { s32 battlerId = battler - gBattleMons; @@ -1706,6 +2249,7 @@ void SendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) s32 battlerId = battler - gBattleMons; INVALID_IF(DATA.turnState == TURN_CLOSED, "SEND_OUT outside TURN"); INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "SWITCH to invalid party index"); + INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "SEND_OUT is not allowed for opponent in AI tests. Use EXPECT_SEND_OUT instead"); for (i = 0; i < STATE->battlersCount; i++) { if (battlerId != i && (battlerId & BIT_SIDE) == (i & BIT_SIDE)) @@ -1763,8 +2307,18 @@ static const char *const sQueueGroupTypeMacros[] = void OpenQueueGroup(u32 sourceLine, enum QueueGroupType type) { INVALID_IF(DATA.queueGroupType, "%s inside %s", sQueueGroupTypeMacros[type], sQueueGroupTypeMacros[DATA.queueGroupType]); - DATA.queueGroupType = type; - DATA.queueGroupStart = DATA.queuedEventsCount; + if (DATA.queuedEventsCount > 0 + && DATA.queuedEvents[DATA.queueGroupStart].groupType == QUEUE_GROUP_NONE_OF + && DATA.queuedEvents[DATA.queueGroupStart].groupSize == DATA.queuedEventsCount - DATA.queueGroupStart + && type == QUEUE_GROUP_NONE_OF) + { + INVALID("'NOT x; NOT y;', did you mean 'NONE_OF { x; y; }'?"); + } + else + { + DATA.queueGroupType = type; + DATA.queueGroupStart = DATA.queuedEventsCount; + } } void CloseQueueGroup(u32 sourceLine) @@ -1925,7 +2479,6 @@ void QueueExp(u32 sourceLine, struct BattlePokemon *battler, struct ExpEventCont }; } - void QueueMessage(u32 sourceLine, const u8 *pattern) { INVALID_IF(!STATE->runScene, "MESSAGE outside of SCENE"); @@ -1985,8 +2538,6 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve void ValidateFinally(u32 sourceLine) { // Defer this error until after estimating the cost. - if (STATE->results == NULL) - return; INVALID_IF(STATE->parametersCount == 0, "FINALLY without PARAMETRIZE"); } @@ -1994,3 +2545,45 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex) { return DATA.forcedAbilities[side][partyIndex]; } + +// TODO: Consider storing the last successful i and searching from i+1 +// to improve performance. +struct AILogLine *GetLogLine(u32 battlerId, u32 moveIndex) +{ + s32 i; + + for (i = 0; i < MAX_AI_LOG_LINES; i++) + { + struct AILogLine *log = &DATA.aiLogLines[battlerId][moveIndex][i]; + if (log->file == NULL) + { + return log; + } + } + + Test_ExitWithResult(TEST_RESULT_ERROR, "Too many AI log lines"); + return NULL; +} + +void TestRunner_Battle_AILogScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score, bool32 setScore) +{ + struct AILogLine *log; + + if (!DATA.logAI) return; + + log = GetLogLine(battlerId, moveIndex); + log->file = file; + log->line = line; + log->score = score; + log->set = setScore; +} + +void TestRunner_Battle_AISetScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score) +{ + TestRunner_Battle_AILogScore(file, line, battlerId, moveIndex, score, TRUE); +} + +void TestRunner_Battle_AIAdjustScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score) +{ + TestRunner_Battle_AILogScore(file, line, battlerId, moveIndex, score, FALSE); +} diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 123d8a2552..c2189ac0df 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -2,9 +2,9 @@ * parses the output to display human-readable progress. * * Output lines starting with "GBA Debug: :" are parsed as commands to - * Hydra, other output lines starting with "GBA Debug: " are parsed as - * output from the current test, and any other lines are parsed as - * output from the mgba-rom-test process itself. + * Hydra, other output lines starting with "GBA Debug: " or with "GBA: " + * are parsed as output from the current test, and any other lines are + * parsed as output from the mgba-rom-test process itself. * * COMMANDS * N: Sets the test name to the remainder of the line. @@ -75,10 +75,17 @@ static void handle_read(int i, struct Runner *runner) { eol++; size_t n = eol - sol; - if (runner->input_buffer_size >= strlen("GBA Debug: ") - && !strncmp(sol, "GBA Debug: ", strlen("GBA Debug: "))) + char *soc; + if (runner->input_buffer_size >= strlen("GBA: ") + && !strncmp(sol, "GBA: ", strlen("GBA: "))) { - char *soc = sol + strlen("GBA Debug: "); + soc = sol + strlen("GBA: "); + goto buffer_output; + } + else if (runner->input_buffer_size >= strlen("GBA Debug: ") + && !strncmp(sol, "GBA Debug: ", strlen("GBA Debug: "))) + { + soc = sol + strlen("GBA Debug: "); if (soc[0] == ':') { switch (soc[1])